diff --git a/.gitignore b/.gitignore
index dcaa358..8e175db 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,10 @@ Desktop.ini
/*.code-workspace
+# Downloadable & installable modules & components
+#
+/node_modules/
+
# Environmental files
#
.env
diff --git a/bun.lock b/bun.lock
new file mode 100644
index 0000000..aa30e11
--- /dev/null
+++ b/bun.lock
@@ -0,0 +1,491 @@
+{
+ "lockfileVersion": 1,
+ "configVersion": 0,
+ "workspaces": {
+ "": {
+ "name": "@byloth/cmangos-docker",
+ },
+ "docs": {
+ "name": "@byloth/cmangos-docker-docs",
+ "devDependencies": {
+ "vitepress": "^1.6.4",
+ "vue": "^3.5.26",
+ },
+ },
+ },
+ "packages": {
+ "@algolia/autocomplete-core": ["@algolia/autocomplete-core@1.17.7", "", { "dependencies": { "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", "@algolia/autocomplete-shared": "1.17.7" } }, "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q=="],
+
+ "@algolia/autocomplete-plugin-algolia-insights": ["@algolia/autocomplete-plugin-algolia-insights@1.17.7", "", { "dependencies": { "@algolia/autocomplete-shared": "1.17.7" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A=="],
+
+ "@algolia/autocomplete-preset-algolia": ["@algolia/autocomplete-preset-algolia@1.17.7", "", { "dependencies": { "@algolia/autocomplete-shared": "1.17.7" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" } }, "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA=="],
+
+ "@algolia/autocomplete-shared": ["@algolia/autocomplete-shared@1.17.7", "", { "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" } }, "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg=="],
+
+ "@algolia/client-abtesting": ["@algolia/client-abtesting@5.28.0", "", { "dependencies": { "@algolia/client-common": "5.28.0", "@algolia/requester-browser-xhr": "5.28.0", "@algolia/requester-fetch": "5.28.0", "@algolia/requester-node-http": "5.28.0" } }, "sha512-oGMaBCIpvz3n+4rCz/73ldo/Dw95YFx6+MAQkNiCfsgolB2tduaiZvNOvdkm86eKqSKDDBGBo54GQXZ5YX6Bjg=="],
+
+ "@algolia/client-analytics": ["@algolia/client-analytics@5.28.0", "", { "dependencies": { "@algolia/client-common": "5.28.0", "@algolia/requester-browser-xhr": "5.28.0", "@algolia/requester-fetch": "5.28.0", "@algolia/requester-node-http": "5.28.0" } }, "sha512-G+TTdNnuwUSy8evolyNE3I74uSIXPU4LLDnJmB4d6TkLvvzMAjwsMBuHHjwYpw37+c4tH0dT4u+39cyxrZNojg=="],
+
+ "@algolia/client-common": ["@algolia/client-common@5.28.0", "", {}, "sha512-lqa0Km1/YWfPplNB8jX9kstaCl2LO6ziQAJEBtHxw2sJp/mlxJIAuudBUbEhoUrKQvI7N4erNYawl6ejic7gfw=="],
+
+ "@algolia/client-insights": ["@algolia/client-insights@5.28.0", "", { "dependencies": { "@algolia/client-common": "5.28.0", "@algolia/requester-browser-xhr": "5.28.0", "@algolia/requester-fetch": "5.28.0", "@algolia/requester-node-http": "5.28.0" } }, "sha512-pGsDrlnt0UMXDjQuIpKQSfl7PVx+KcqcwVgkgITwQ45akckTwmbpaV4rZF2k3wgIbOECFZGnpArWF5cSrE4T3g=="],
+
+ "@algolia/client-personalization": ["@algolia/client-personalization@5.28.0", "", { "dependencies": { "@algolia/client-common": "5.28.0", "@algolia/requester-browser-xhr": "5.28.0", "@algolia/requester-fetch": "5.28.0", "@algolia/requester-node-http": "5.28.0" } }, "sha512-d/Uot/LH8YJeFyqpAmTN/LxueqV5mLD5K4aAKTDVP4CBNNubX4Z+0sveRcxWQZiORVLrs5zR1G5Buxmab2Xb9w=="],
+
+ "@algolia/client-query-suggestions": ["@algolia/client-query-suggestions@5.28.0", "", { "dependencies": { "@algolia/client-common": "5.28.0", "@algolia/requester-browser-xhr": "5.28.0", "@algolia/requester-fetch": "5.28.0", "@algolia/requester-node-http": "5.28.0" } }, "sha512-XygCxyxJ5IwqsTrzpsAG2O/lr8GsnMA3ih7wzbXtot+ZyAhzDUFwlQSjCCmjACNbrBEaIvtiGbjX/z+HZd902Q=="],
+
+ "@algolia/client-search": ["@algolia/client-search@5.28.0", "", { "dependencies": { "@algolia/client-common": "5.28.0", "@algolia/requester-browser-xhr": "5.28.0", "@algolia/requester-fetch": "5.28.0", "@algolia/requester-node-http": "5.28.0" } }, "sha512-zLEddu9TEwFT/YUJkA3oUwqQYHeGEj64fi0WyVRq+siJVfxt4AYkFfcMBcSr2iR1Wo9Mk10IPOhk3DUr0TSncg=="],
+
+ "@algolia/ingestion": ["@algolia/ingestion@1.28.0", "", { "dependencies": { "@algolia/client-common": "5.28.0", "@algolia/requester-browser-xhr": "5.28.0", "@algolia/requester-fetch": "5.28.0", "@algolia/requester-node-http": "5.28.0" } }, "sha512-dmkoSQ+bzC5ryDu2J4MTRDxuh5rZg6sHNawgBfSC/iNttEzeogCyvdxg+uWMErJuSlZk9oENykhETMkSFurwpQ=="],
+
+ "@algolia/monitoring": ["@algolia/monitoring@1.28.0", "", { "dependencies": { "@algolia/client-common": "5.28.0", "@algolia/requester-browser-xhr": "5.28.0", "@algolia/requester-fetch": "5.28.0", "@algolia/requester-node-http": "5.28.0" } }, "sha512-XwVpkxc2my2rNUWbHo4Dk1Mx/JOrq6CLOAC3dmIrMt2Le2bIPMIDA6Iyjz4F4kXvp7H8q1R26cRMlYmhL31Jlg=="],
+
+ "@algolia/recommend": ["@algolia/recommend@5.28.0", "", { "dependencies": { "@algolia/client-common": "5.28.0", "@algolia/requester-browser-xhr": "5.28.0", "@algolia/requester-fetch": "5.28.0", "@algolia/requester-node-http": "5.28.0" } }, "sha512-MVqY7zIw0TdQUExefGthydLXccbe5CHH/uOxIG8/QiSD0ZmAmg95UwfmJiJBfuXGGi/cmCrW3JQiDbAM9vx6PA=="],
+
+ "@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.28.0", "", { "dependencies": { "@algolia/client-common": "5.28.0" } }, "sha512-RfxbCinf+coQgxRkDKmRiB/ovOt3Fz0md84LmogsQIabrJVKoQrFON4Vc9YdK2bTTn6iBHtnezm0puNTk+n3SA=="],
+
+ "@algolia/requester-fetch": ["@algolia/requester-fetch@5.28.0", "", { "dependencies": { "@algolia/client-common": "5.28.0" } }, "sha512-85ZBqPTQ5tjiZ925V89ttE/vUJXpJjy2cCF7PAWq9v32JGGF+v+mDm8NiEBRk9AS7+4klb/uR80KBdcg5bO7cA=="],
+
+ "@algolia/requester-node-http": ["@algolia/requester-node-http@5.28.0", "", { "dependencies": { "@algolia/client-common": "5.28.0" } }, "sha512-U3F4WeExiKx1Ig6OxO9dDzzk04HKgtEn47TwjgKmGSDPFM7WZ5KyP1EAZEbfd3/nw6hp0z9RKdTfMql6Sd1/2Q=="],
+
+ "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="],
+
+ "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="],
+
+ "@babel/parser": ["@babel/parser@7.28.5", "", { "dependencies": { "@babel/types": "^7.28.5" }, "bin": "./bin/babel-parser.js" }, "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ=="],
+
+ "@babel/types": ["@babel/types@7.28.5", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA=="],
+
+ "@byloth/cmangos-docker-docs": ["@byloth/cmangos-docker-docs@workspace:docs"],
+
+ "@docsearch/css": ["@docsearch/css@3.8.2", "", {}, "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ=="],
+
+ "@docsearch/js": ["@docsearch/js@3.8.2", "", { "dependencies": { "@docsearch/react": "3.8.2", "preact": "^10.0.0" } }, "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ=="],
+
+ "@docsearch/react": ["@docsearch/react@3.8.2", "", { "dependencies": { "@algolia/autocomplete-core": "1.17.7", "@algolia/autocomplete-preset-algolia": "1.17.7", "@docsearch/css": "3.8.2", "algoliasearch": "^5.14.2" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 19.0.0", "react": ">= 16.8.0 < 19.0.0", "react-dom": ">= 16.8.0 < 19.0.0", "search-insights": ">= 1 < 3" }, "optionalPeers": ["@types/react", "react", "react-dom", "search-insights"] }, "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg=="],
+
+ "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="],
+
+ "@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="],
+
+ "@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="],
+
+ "@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="],
+
+ "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="],
+
+ "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="],
+
+ "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.21.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="],
+
+ "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.21.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="],
+
+ "@esbuild/linux-arm": ["@esbuild/linux-arm@0.21.5", "", { "os": "linux", "cpu": "arm" }, "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="],
+
+ "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.21.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="],
+
+ "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.21.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="],
+
+ "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="],
+
+ "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="],
+
+ "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.21.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="],
+
+ "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="],
+
+ "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.21.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="],
+
+ "@esbuild/linux-x64": ["@esbuild/linux-x64@0.21.5", "", { "os": "linux", "cpu": "x64" }, "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="],
+
+ "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.21.5", "", { "os": "none", "cpu": "x64" }, "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="],
+
+ "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.21.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="],
+
+ "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.21.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="],
+
+ "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.21.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="],
+
+ "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="],
+
+ "@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="],
+
+ "@iconify-json/simple-icons": ["@iconify-json/simple-icons@1.2.39", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-XlhW73c4dHvUrwWckVY76HDjnaZ2fWKD6hNZtd5kuv23GC0g3Lu0MXnYscpkIYOeiXO+Gtlw8FM53J7C84mCtA=="],
+
+ "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="],
+
+ "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
+
+ "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.44.0", "", { "os": "android", "cpu": "arm" }, "sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA=="],
+
+ "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.44.0", "", { "os": "android", "cpu": "arm64" }, "sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw=="],
+
+ "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.44.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA=="],
+
+ "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.44.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ=="],
+
+ "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.44.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ=="],
+
+ "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.44.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g=="],
+
+ "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.44.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ=="],
+
+ "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.44.0", "", { "os": "linux", "cpu": "arm" }, "sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg=="],
+
+ "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.44.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ=="],
+
+ "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.44.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q=="],
+
+ "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.44.0", "", { "os": "linux", "cpu": "none" }, "sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg=="],
+
+ "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.44.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ=="],
+
+ "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.44.0", "", { "os": "linux", "cpu": "none" }, "sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA=="],
+
+ "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.44.0", "", { "os": "linux", "cpu": "none" }, "sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q=="],
+
+ "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.44.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA=="],
+
+ "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.44.0", "", { "os": "linux", "cpu": "x64" }, "sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw=="],
+
+ "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.44.0", "", { "os": "linux", "cpu": "x64" }, "sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA=="],
+
+ "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.44.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w=="],
+
+ "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.44.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA=="],
+
+ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.44.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ=="],
+
+ "@shikijs/core": ["@shikijs/core@2.5.0", "", { "dependencies": { "@shikijs/engine-javascript": "2.5.0", "@shikijs/engine-oniguruma": "2.5.0", "@shikijs/types": "2.5.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.4" } }, "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg=="],
+
+ "@shikijs/engine-javascript": ["@shikijs/engine-javascript@2.5.0", "", { "dependencies": { "@shikijs/types": "2.5.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^3.1.0" } }, "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w=="],
+
+ "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@2.5.0", "", { "dependencies": { "@shikijs/types": "2.5.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw=="],
+
+ "@shikijs/langs": ["@shikijs/langs@2.5.0", "", { "dependencies": { "@shikijs/types": "2.5.0" } }, "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w=="],
+
+ "@shikijs/themes": ["@shikijs/themes@2.5.0", "", { "dependencies": { "@shikijs/types": "2.5.0" } }, "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw=="],
+
+ "@shikijs/transformers": ["@shikijs/transformers@2.5.0", "", { "dependencies": { "@shikijs/core": "2.5.0", "@shikijs/types": "2.5.0" } }, "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg=="],
+
+ "@shikijs/types": ["@shikijs/types@2.5.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw=="],
+
+ "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="],
+
+ "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="],
+
+ "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="],
+
+ "@types/linkify-it": ["@types/linkify-it@5.0.0", "", {}, "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q=="],
+
+ "@types/markdown-it": ["@types/markdown-it@14.1.2", "", { "dependencies": { "@types/linkify-it": "^5", "@types/mdurl": "^2" } }, "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog=="],
+
+ "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="],
+
+ "@types/mdurl": ["@types/mdurl@2.0.0", "", {}, "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg=="],
+
+ "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="],
+
+ "@types/web-bluetooth": ["@types/web-bluetooth@0.0.21", "", {}, "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA=="],
+
+ "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="],
+
+ "@vitejs/plugin-vue": ["@vitejs/plugin-vue@5.2.4", "", { "peerDependencies": { "vite": "^5.0.0 || ^6.0.0", "vue": "^3.2.25" } }, "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA=="],
+
+ "@vue/compiler-core": ["@vue/compiler-core@3.5.26", "", { "dependencies": { "@babel/parser": "^7.28.5", "@vue/shared": "3.5.26", "entities": "^7.0.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w=="],
+
+ "@vue/compiler-dom": ["@vue/compiler-dom@3.5.26", "", { "dependencies": { "@vue/compiler-core": "3.5.26", "@vue/shared": "3.5.26" } }, "sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A=="],
+
+ "@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.26", "", { "dependencies": { "@babel/parser": "^7.28.5", "@vue/compiler-core": "3.5.26", "@vue/compiler-dom": "3.5.26", "@vue/compiler-ssr": "3.5.26", "@vue/shared": "3.5.26", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.6", "source-map-js": "^1.2.1" } }, "sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA=="],
+
+ "@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.26", "", { "dependencies": { "@vue/compiler-dom": "3.5.26", "@vue/shared": "3.5.26" } }, "sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw=="],
+
+ "@vue/devtools-api": ["@vue/devtools-api@7.7.7", "", { "dependencies": { "@vue/devtools-kit": "^7.7.7" } }, "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg=="],
+
+ "@vue/devtools-kit": ["@vue/devtools-kit@7.7.7", "", { "dependencies": { "@vue/devtools-shared": "^7.7.7", "birpc": "^2.3.0", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^1.0.0", "speakingurl": "^14.0.1", "superjson": "^2.2.2" } }, "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA=="],
+
+ "@vue/devtools-shared": ["@vue/devtools-shared@7.7.7", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw=="],
+
+ "@vue/reactivity": ["@vue/reactivity@3.5.26", "", { "dependencies": { "@vue/shared": "3.5.26" } }, "sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ=="],
+
+ "@vue/runtime-core": ["@vue/runtime-core@3.5.26", "", { "dependencies": { "@vue/reactivity": "3.5.26", "@vue/shared": "3.5.26" } }, "sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q=="],
+
+ "@vue/runtime-dom": ["@vue/runtime-dom@3.5.26", "", { "dependencies": { "@vue/reactivity": "3.5.26", "@vue/runtime-core": "3.5.26", "@vue/shared": "3.5.26", "csstype": "^3.2.3" } }, "sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ=="],
+
+ "@vue/server-renderer": ["@vue/server-renderer@3.5.26", "", { "dependencies": { "@vue/compiler-ssr": "3.5.26", "@vue/shared": "3.5.26" }, "peerDependencies": { "vue": "3.5.26" } }, "sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA=="],
+
+ "@vue/shared": ["@vue/shared@3.5.26", "", {}, "sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A=="],
+
+ "@vueuse/core": ["@vueuse/core@12.8.2", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "12.8.2", "@vueuse/shared": "12.8.2", "vue": "^3.5.13" } }, "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ=="],
+
+ "@vueuse/integrations": ["@vueuse/integrations@12.8.2", "", { "dependencies": { "@vueuse/core": "12.8.2", "@vueuse/shared": "12.8.2", "vue": "^3.5.13" }, "peerDependencies": { "async-validator": "^4", "axios": "^1", "change-case": "^5", "drauu": "^0.4", "focus-trap": "^7", "fuse.js": "^7", "idb-keyval": "^6", "jwt-decode": "^4", "nprogress": "^0.2", "qrcode": "^1.5", "sortablejs": "^1", "universal-cookie": "^7" }, "optionalPeers": ["async-validator", "axios", "change-case", "drauu", "focus-trap", "fuse.js", "idb-keyval", "jwt-decode", "nprogress", "qrcode", "sortablejs", "universal-cookie"] }, "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g=="],
+
+ "@vueuse/metadata": ["@vueuse/metadata@12.8.2", "", {}, "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A=="],
+
+ "@vueuse/shared": ["@vueuse/shared@12.8.2", "", { "dependencies": { "vue": "^3.5.13" } }, "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w=="],
+
+ "algoliasearch": ["algoliasearch@5.28.0", "", { "dependencies": { "@algolia/client-abtesting": "5.28.0", "@algolia/client-analytics": "5.28.0", "@algolia/client-common": "5.28.0", "@algolia/client-insights": "5.28.0", "@algolia/client-personalization": "5.28.0", "@algolia/client-query-suggestions": "5.28.0", "@algolia/client-search": "5.28.0", "@algolia/ingestion": "1.28.0", "@algolia/monitoring": "1.28.0", "@algolia/recommend": "5.28.0", "@algolia/requester-browser-xhr": "5.28.0", "@algolia/requester-fetch": "5.28.0", "@algolia/requester-node-http": "5.28.0" } }, "sha512-FCRzwW+/TJFQIfo+DxObo2gfn4+0aGa7sVQgCN1/ojKqrhb/7Scnuyi4FBS0zvNCgOZBMms+Ci2hyQwsgAqIzg=="],
+
+ "birpc": ["birpc@2.4.0", "", {}, "sha512-5IdNxTyhXHv2UlgnPHQ0h+5ypVmkrYHzL8QT+DwFZ//2N/oNV8Ch+BCRmTJ3x6/z9Axo/cXYBc9eprsUVK/Jsg=="],
+
+ "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="],
+
+ "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="],
+
+ "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="],
+
+ "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="],
+
+ "copy-anything": ["copy-anything@3.0.5", "", { "dependencies": { "is-what": "^4.1.8" } }, "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w=="],
+
+ "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="],
+
+ "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="],
+
+ "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="],
+
+ "emoji-regex-xs": ["emoji-regex-xs@1.0.0", "", {}, "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg=="],
+
+ "entities": ["entities@7.0.0", "", {}, "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ=="],
+
+ "esbuild": ["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" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="],
+
+ "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="],
+
+ "focus-trap": ["focus-trap@7.6.5", "", { "dependencies": { "tabbable": "^6.2.0" } }, "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg=="],
+
+ "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
+
+ "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="],
+
+ "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="],
+
+ "hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="],
+
+ "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="],
+
+ "is-what": ["is-what@4.1.16", "", {}, "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A=="],
+
+ "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="],
+
+ "mark.js": ["mark.js@8.11.1", "", {}, "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ=="],
+
+ "mdast-util-to-hast": ["mdast-util-to-hast@13.2.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA=="],
+
+ "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="],
+
+ "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="],
+
+ "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="],
+
+ "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="],
+
+ "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="],
+
+ "minisearch": ["minisearch@7.1.2", "", {}, "sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA=="],
+
+ "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="],
+
+ "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
+
+ "oniguruma-to-es": ["oniguruma-to-es@3.1.1", "", { "dependencies": { "emoji-regex-xs": "^1.0.0", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ=="],
+
+ "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="],
+
+ "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
+
+ "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="],
+
+ "preact": ["preact@10.26.9", "", {}, "sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA=="],
+
+ "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="],
+
+ "regex": ["regex@6.0.1", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA=="],
+
+ "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="],
+
+ "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="],
+
+ "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="],
+
+ "rollup": ["rollup@4.44.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.44.0", "@rollup/rollup-android-arm64": "4.44.0", "@rollup/rollup-darwin-arm64": "4.44.0", "@rollup/rollup-darwin-x64": "4.44.0", "@rollup/rollup-freebsd-arm64": "4.44.0", "@rollup/rollup-freebsd-x64": "4.44.0", "@rollup/rollup-linux-arm-gnueabihf": "4.44.0", "@rollup/rollup-linux-arm-musleabihf": "4.44.0", "@rollup/rollup-linux-arm64-gnu": "4.44.0", "@rollup/rollup-linux-arm64-musl": "4.44.0", "@rollup/rollup-linux-loongarch64-gnu": "4.44.0", "@rollup/rollup-linux-powerpc64le-gnu": "4.44.0", "@rollup/rollup-linux-riscv64-gnu": "4.44.0", "@rollup/rollup-linux-riscv64-musl": "4.44.0", "@rollup/rollup-linux-s390x-gnu": "4.44.0", "@rollup/rollup-linux-x64-gnu": "4.44.0", "@rollup/rollup-linux-x64-musl": "4.44.0", "@rollup/rollup-win32-arm64-msvc": "4.44.0", "@rollup/rollup-win32-ia32-msvc": "4.44.0", "@rollup/rollup-win32-x64-msvc": "4.44.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA=="],
+
+ "search-insights": ["search-insights@2.17.3", "", {}, "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ=="],
+
+ "shiki": ["shiki@2.5.0", "", { "dependencies": { "@shikijs/core": "2.5.0", "@shikijs/engine-javascript": "2.5.0", "@shikijs/engine-oniguruma": "2.5.0", "@shikijs/langs": "2.5.0", "@shikijs/themes": "2.5.0", "@shikijs/types": "2.5.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ=="],
+
+ "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
+
+ "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="],
+
+ "speakingurl": ["speakingurl@14.0.1", "", {}, "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ=="],
+
+ "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="],
+
+ "superjson": ["superjson@2.2.2", "", { "dependencies": { "copy-anything": "^3.0.2" } }, "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q=="],
+
+ "tabbable": ["tabbable@6.2.0", "", {}, "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="],
+
+ "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="],
+
+ "unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="],
+
+ "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="],
+
+ "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="],
+
+ "unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="],
+
+ "unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="],
+
+ "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="],
+
+ "vfile-message": ["vfile-message@4.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw=="],
+
+ "vite": ["vite@5.4.19", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA=="],
+
+ "vitepress": ["vitepress@1.6.4", "", { "dependencies": { "@docsearch/css": "3.8.2", "@docsearch/js": "3.8.2", "@iconify-json/simple-icons": "^1.2.21", "@shikijs/core": "^2.1.0", "@shikijs/transformers": "^2.1.0", "@shikijs/types": "^2.1.0", "@types/markdown-it": "^14.1.2", "@vitejs/plugin-vue": "^5.2.1", "@vue/devtools-api": "^7.7.0", "@vue/shared": "^3.5.13", "@vueuse/core": "^12.4.0", "@vueuse/integrations": "^12.4.0", "focus-trap": "^7.6.4", "mark.js": "8.11.1", "minisearch": "^7.1.1", "shiki": "^2.1.0", "vite": "^5.4.14", "vue": "^3.5.13" }, "peerDependencies": { "markdown-it-mathjax3": "^4", "postcss": "^8" }, "optionalPeers": ["markdown-it-mathjax3", "postcss"], "bin": { "vitepress": "bin/vitepress.js" } }, "sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg=="],
+
+ "vue": ["vue@3.5.26", "", { "dependencies": { "@vue/compiler-dom": "3.5.26", "@vue/compiler-sfc": "3.5.26", "@vue/runtime-dom": "3.5.26", "@vue/server-renderer": "3.5.26", "@vue/shared": "3.5.26" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA=="],
+
+ "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="],
+
+ "@vueuse/core/vue": ["vue@3.5.17", "", { "dependencies": { "@vue/compiler-dom": "3.5.17", "@vue/compiler-sfc": "3.5.17", "@vue/runtime-dom": "3.5.17", "@vue/server-renderer": "3.5.17", "@vue/shared": "3.5.17" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g=="],
+
+ "@vueuse/integrations/vue": ["vue@3.5.17", "", { "dependencies": { "@vue/compiler-dom": "3.5.17", "@vue/compiler-sfc": "3.5.17", "@vue/runtime-dom": "3.5.17", "@vue/server-renderer": "3.5.17", "@vue/shared": "3.5.17" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g=="],
+
+ "@vueuse/shared/vue": ["vue@3.5.17", "", { "dependencies": { "@vue/compiler-dom": "3.5.17", "@vue/compiler-sfc": "3.5.17", "@vue/runtime-dom": "3.5.17", "@vue/server-renderer": "3.5.17", "@vue/shared": "3.5.17" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g=="],
+
+ "@vueuse/core/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.17", "", { "dependencies": { "@vue/compiler-core": "3.5.17", "@vue/shared": "3.5.17" } }, "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ=="],
+
+ "@vueuse/core/vue/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.17", "", { "dependencies": { "@babel/parser": "^7.27.5", "@vue/compiler-core": "3.5.17", "@vue/compiler-dom": "3.5.17", "@vue/compiler-ssr": "3.5.17", "@vue/shared": "3.5.17", "estree-walker": "^2.0.2", "magic-string": "^0.30.17", "postcss": "^8.5.6", "source-map-js": "^1.2.1" } }, "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww=="],
+
+ "@vueuse/core/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.17", "", { "dependencies": { "@vue/reactivity": "3.5.17", "@vue/runtime-core": "3.5.17", "@vue/shared": "3.5.17", "csstype": "^3.1.3" } }, "sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g=="],
+
+ "@vueuse/core/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.17", "", { "dependencies": { "@vue/compiler-ssr": "3.5.17", "@vue/shared": "3.5.17" }, "peerDependencies": { "vue": "3.5.17" } }, "sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA=="],
+
+ "@vueuse/core/vue/@vue/shared": ["@vue/shared@3.5.17", "", {}, "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.17", "", { "dependencies": { "@vue/compiler-core": "3.5.17", "@vue/shared": "3.5.17" } }, "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.17", "", { "dependencies": { "@babel/parser": "^7.27.5", "@vue/compiler-core": "3.5.17", "@vue/compiler-dom": "3.5.17", "@vue/compiler-ssr": "3.5.17", "@vue/shared": "3.5.17", "estree-walker": "^2.0.2", "magic-string": "^0.30.17", "postcss": "^8.5.6", "source-map-js": "^1.2.1" } }, "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww=="],
+
+ "@vueuse/integrations/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.17", "", { "dependencies": { "@vue/reactivity": "3.5.17", "@vue/runtime-core": "3.5.17", "@vue/shared": "3.5.17", "csstype": "^3.1.3" } }, "sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g=="],
+
+ "@vueuse/integrations/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.17", "", { "dependencies": { "@vue/compiler-ssr": "3.5.17", "@vue/shared": "3.5.17" }, "peerDependencies": { "vue": "3.5.17" } }, "sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA=="],
+
+ "@vueuse/integrations/vue/@vue/shared": ["@vue/shared@3.5.17", "", {}, "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg=="],
+
+ "@vueuse/shared/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.17", "", { "dependencies": { "@vue/compiler-core": "3.5.17", "@vue/shared": "3.5.17" } }, "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ=="],
+
+ "@vueuse/shared/vue/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.17", "", { "dependencies": { "@babel/parser": "^7.27.5", "@vue/compiler-core": "3.5.17", "@vue/compiler-dom": "3.5.17", "@vue/compiler-ssr": "3.5.17", "@vue/shared": "3.5.17", "estree-walker": "^2.0.2", "magic-string": "^0.30.17", "postcss": "^8.5.6", "source-map-js": "^1.2.1" } }, "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww=="],
+
+ "@vueuse/shared/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.17", "", { "dependencies": { "@vue/reactivity": "3.5.17", "@vue/runtime-core": "3.5.17", "@vue/shared": "3.5.17", "csstype": "^3.1.3" } }, "sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g=="],
+
+ "@vueuse/shared/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.17", "", { "dependencies": { "@vue/compiler-ssr": "3.5.17", "@vue/shared": "3.5.17" }, "peerDependencies": { "vue": "3.5.17" } }, "sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA=="],
+
+ "@vueuse/shared/vue/@vue/shared": ["@vue/shared@3.5.17", "", {}, "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg=="],
+
+ "@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.17", "", { "dependencies": { "@babel/parser": "^7.27.5", "@vue/shared": "3.5.17", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA=="],
+
+ "@vueuse/core/vue/@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.27.5", "", { "dependencies": { "@babel/types": "^7.27.3" }, "bin": "./bin/babel-parser.js" }, "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg=="],
+
+ "@vueuse/core/vue/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.17", "", { "dependencies": { "@babel/parser": "^7.27.5", "@vue/shared": "3.5.17", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA=="],
+
+ "@vueuse/core/vue/@vue/compiler-sfc/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.17", "", { "dependencies": { "@vue/compiler-dom": "3.5.17", "@vue/shared": "3.5.17" } }, "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ=="],
+
+ "@vueuse/core/vue/@vue/compiler-sfc/magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="],
+
+ "@vueuse/core/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.17", "", { "dependencies": { "@vue/shared": "3.5.17" } }, "sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw=="],
+
+ "@vueuse/core/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.17", "", { "dependencies": { "@vue/reactivity": "3.5.17", "@vue/shared": "3.5.17" } }, "sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q=="],
+
+ "@vueuse/core/vue/@vue/runtime-dom/csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
+
+ "@vueuse/core/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.17", "", { "dependencies": { "@vue/compiler-dom": "3.5.17", "@vue/shared": "3.5.17" } }, "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.17", "", { "dependencies": { "@babel/parser": "^7.27.5", "@vue/shared": "3.5.17", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.27.5", "", { "dependencies": { "@babel/types": "^7.27.3" }, "bin": "./bin/babel-parser.js" }, "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.17", "", { "dependencies": { "@babel/parser": "^7.27.5", "@vue/shared": "3.5.17", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-sfc/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.17", "", { "dependencies": { "@vue/compiler-dom": "3.5.17", "@vue/shared": "3.5.17" } }, "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-sfc/magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="],
+
+ "@vueuse/integrations/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.17", "", { "dependencies": { "@vue/shared": "3.5.17" } }, "sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw=="],
+
+ "@vueuse/integrations/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.17", "", { "dependencies": { "@vue/reactivity": "3.5.17", "@vue/shared": "3.5.17" } }, "sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q=="],
+
+ "@vueuse/integrations/vue/@vue/runtime-dom/csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
+
+ "@vueuse/integrations/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.17", "", { "dependencies": { "@vue/compiler-dom": "3.5.17", "@vue/shared": "3.5.17" } }, "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ=="],
+
+ "@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.17", "", { "dependencies": { "@babel/parser": "^7.27.5", "@vue/shared": "3.5.17", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA=="],
+
+ "@vueuse/shared/vue/@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.27.5", "", { "dependencies": { "@babel/types": "^7.27.3" }, "bin": "./bin/babel-parser.js" }, "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg=="],
+
+ "@vueuse/shared/vue/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.17", "", { "dependencies": { "@babel/parser": "^7.27.5", "@vue/shared": "3.5.17", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA=="],
+
+ "@vueuse/shared/vue/@vue/compiler-sfc/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.17", "", { "dependencies": { "@vue/compiler-dom": "3.5.17", "@vue/shared": "3.5.17" } }, "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ=="],
+
+ "@vueuse/shared/vue/@vue/compiler-sfc/magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="],
+
+ "@vueuse/shared/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.17", "", { "dependencies": { "@vue/shared": "3.5.17" } }, "sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw=="],
+
+ "@vueuse/shared/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.17", "", { "dependencies": { "@vue/reactivity": "3.5.17", "@vue/shared": "3.5.17" } }, "sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q=="],
+
+ "@vueuse/shared/vue/@vue/runtime-dom/csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
+
+ "@vueuse/shared/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.17", "", { "dependencies": { "@vue/compiler-dom": "3.5.17", "@vue/shared": "3.5.17" } }, "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ=="],
+
+ "@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser": ["@babel/parser@7.27.5", "", { "dependencies": { "@babel/types": "^7.27.3" }, "bin": "./bin/babel-parser.js" }, "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg=="],
+
+ "@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
+
+ "@vueuse/core/vue/@vue/compiler-sfc/@babel/parser/@babel/types": ["@babel/types@7.27.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q=="],
+
+ "@vueuse/core/vue/@vue/compiler-sfc/@vue/compiler-core/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
+
+ "@vueuse/core/vue/@vue/compiler-sfc/magic-string/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser": ["@babel/parser@7.27.5", "", { "dependencies": { "@babel/types": "^7.27.3" }, "bin": "./bin/babel-parser.js" }, "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-dom/@vue/compiler-core/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-sfc/@babel/parser/@babel/types": ["@babel/types@7.27.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-sfc/@vue/compiler-core/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-sfc/magic-string/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="],
+
+ "@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser": ["@babel/parser@7.27.5", "", { "dependencies": { "@babel/types": "^7.27.3" }, "bin": "./bin/babel-parser.js" }, "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg=="],
+
+ "@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
+
+ "@vueuse/shared/vue/@vue/compiler-sfc/@babel/parser/@babel/types": ["@babel/types@7.27.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q=="],
+
+ "@vueuse/shared/vue/@vue/compiler-sfc/@vue/compiler-core/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
+
+ "@vueuse/shared/vue/@vue/compiler-sfc/magic-string/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="],
+
+ "@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types": ["@babel/types@7.27.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q=="],
+
+ "@vueuse/core/vue/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types": ["@babel/types@7.27.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="],
+
+ "@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types": ["@babel/types@7.27.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q=="],
+
+ "@vueuse/shared/vue/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="],
+
+ "@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="],
+
+ "@vueuse/integrations/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="],
+
+ "@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="],
+ }
+}
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000..46a9b3c
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,4 @@
+# Generated & compiled files
+#
+/.vitepress/cache/
+/.vitepress/dist/
diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts
new file mode 100644
index 0000000..e88f98a
--- /dev/null
+++ b/docs/.vitepress/config.mts
@@ -0,0 +1,108 @@
+import { fileURLToPath, URL } from "node:url";
+import { defineConfig } from 'vitepress'
+
+// https://vitepress.dev/reference/site-config
+export default defineConfig({
+ lang: "en-US",
+ title: "CMaNGOS on Docker",
+ description: "A collection of ready-to-use Docker images to host your WoW emulated private server wherever you want.",
+ head: [
+ // All browsers
+ ["link", { rel: "icon", href: "/favicons/logo-16x16.png", sizes: "16x16", type: "image.png" }],
+ ["link", { rel: "icon", href: "/favicons/logo-32x32.png", sizes: "32x32", type: "image.png" }],
+
+ // Google & Android
+ ["link", { rel: "icon", href: "/favicons/logo-48x48.png", sizes: "48x48", type: "image.png" }],
+ ["link", { rel: "icon", href: "/favicons/logo-192x192.png", sizes: "192x192", type: "image.png" }],
+
+ // iPad
+ ["link", { rel: "apple-touch-icon", href: "/favicons/logo-167x167.png", sizes: "167x167", type: "image.png" }],
+
+ // iPhone
+ ["link", { rel: "apple-touch-icon", href: "/favicons/logo-180x180.png", sizes: "180x180", type: "image.png" }],
+
+ ["script", {
+ "src": "https://cloud.umami.is/script.js",
+ "data-website-id": "46e2a043-e364-4c30-8561-45e4e4797398",
+ "defer": ""
+ }]
+ ],
+ themeConfig: {
+ // https://vitepress.dev/reference/default-theme-config
+ logo: "/logo.png",
+ nav: [
+ { text: 'Home', link: '/' },
+ { text: 'Guide', link: '/guide/introduction' }
+ ],
+
+ sidebar: [
+ {
+ text: 'Getting Started',
+ items: [
+ { text: 'Introduction', link: '/guide/introduction' },
+ { text: 'Requirements', link: '/guide/requirements' },
+ { text: 'Getting Started', link: '/guide/getting-started' }
+ ]
+ },
+ {
+ text: 'Server Management',
+ items: [
+ { text: 'Server Administration', link: '/guide/server-administration' },
+ { text: 'Server Configuration', link: '/guide/server-configuration' },
+ { text: 'Database Management', link: '/guide/database-management' }
+ ]
+ },
+ {
+ text: 'Maintenance',
+ items: [
+ { text: 'Installing Updates', link: '/guide/install-updates' }
+ ]
+ },
+ {
+ text: 'Advanced',
+ items: [
+ { text: 'Customization', link: '/guide/customization' },
+ { text: 'Use in Production', link: '/guide/use-in-production' }
+ ]
+ }
+ ],
+
+ socialLinks: [
+ { icon: 'github', link: 'https://github.com/Byloth/cmangos-docker' }
+ ],
+ footer: {
+ message: `Released under the
+
+ CC BY-SA 4.0 License.`,
+ copyright: `Copyright © 2014-${new Date().getFullYear()}
+
+ Matteo Bilotta.`
+ },
+
+ editLink: {
+ pattern: 'https://github.com/Byloth/cmangos-docker/edit/master/docs/:path',
+ text: 'Edit this page on GitHub'
+ },
+
+ search: {
+ provider: 'local'
+ },
+
+ lastUpdated: {
+ text: 'Last updated',
+ formatOptions: {
+ dateStyle: 'medium'
+ }
+ }
+ },
+ vite: {
+ resolve: {
+ alias: { "@": fileURLToPath(new URL("../src", import.meta.url)) }
+ }
+ },
+ lastUpdated: true,
+ ignoreDeadLinks: [
+ // Ignore localhost links (they're examples for the user)
+ /^http:\/\/localhost/
+ ]
+})
diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts
new file mode 100644
index 0000000..def4cfc
--- /dev/null
+++ b/docs/.vitepress/theme/index.ts
@@ -0,0 +1,17 @@
+// https://vitepress.dev/guide/custom-theme
+import { h } from 'vue'
+import type { Theme } from 'vitepress'
+import DefaultTheme from 'vitepress/theme'
+import './style.css'
+
+export default {
+ extends: DefaultTheme,
+ Layout: () => {
+ return h(DefaultTheme.Layout, null, {
+ // https://vitepress.dev/guide/extending-default-theme#layout-slots
+ })
+ },
+ enhanceApp({ app, router, siteData }) {
+ // ...
+ }
+} satisfies Theme
diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css
new file mode 100644
index 0000000..638c25c
--- /dev/null
+++ b/docs/.vitepress/theme/style.css
@@ -0,0 +1,150 @@
+/**
+ * Customize default theme styling by overriding CSS variables:
+ * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css
+ */
+
+/**
+ * Colors
+ *
+ * Each colors have exact same color scale system with 3 levels of solid
+ * colors with different brightness, and 1 soft color.
+ *
+ * - `XXX-1`: The most solid color used mainly for colored text. It must
+ * satisfy the contrast ratio against when used on top of `XXX-soft`.
+ *
+ * - `XXX-2`: The color used mainly for hover state of the button.
+ *
+ * - `XXX-3`: The color for solid background, such as bg color of the button.
+ * It must satisfy the contrast ratio with pure white (#ffffff) text on
+ * top of it.
+ *
+ * - `XXX-soft`: The color used for subtle background such as custom container
+ * or badges. It must satisfy the contrast ratio when putting `XXX-1` colors
+ * on top of it.
+ *
+ * The soft color must be semi transparent alpha channel. This is crucial
+ * because it allows adding multiple "soft" colors on top of each other
+ * to create a accent, such as when having inline code block inside
+ * custom containers.
+ *
+ * - `default`: The color used purely for subtle indication without any
+ * special meanings attached to it such as bg color for menu hover state.
+ *
+ * - `brand`: Used for primary brand colors, such as link text, button with
+ * brand theme, etc.
+ *
+ * - `tip`: Used to indicate useful information. The default theme uses the
+ * brand color for this by default.
+ *
+ * - `warning`: Used to indicate warning to the users. Used in custom
+ * container, badges, etc.
+ *
+ * - `danger`: Used to show error, or dangerous message to the users. Used
+ * in custom container, badges, etc.
+ * -------------------------------------------------------------------------- */
+
+:root
+{
+ --vp-c-default-1: var(--vp-c-gray-1);
+ --vp-c-default-2: var(--vp-c-gray-2);
+ --vp-c-default-3: var(--vp-c-gray-3);
+ --vp-c-default-soft: var(--vp-c-gray-soft);
+
+ --vp-c-brand-1: var(--vp-c-indigo-1);
+ --vp-c-brand-2: var(--vp-c-indigo-2);
+ --vp-c-brand-3: var(--vp-c-indigo-3);
+ --vp-c-brand-soft: var(--vp-c-indigo-soft);
+
+ --vp-c-tip-1: var(--vp-c-brand-1);
+ --vp-c-tip-2: var(--vp-c-brand-2);
+ --vp-c-tip-3: var(--vp-c-brand-3);
+ --vp-c-tip-soft: var(--vp-c-brand-soft);
+
+ --vp-c-warning-1: var(--vp-c-yellow-1);
+ --vp-c-warning-2: var(--vp-c-yellow-2);
+ --vp-c-warning-3: var(--vp-c-yellow-3);
+ --vp-c-warning-soft: var(--vp-c-yellow-soft);
+
+ --vp-c-danger-1: var(--vp-c-red-1);
+ --vp-c-danger-2: var(--vp-c-red-2);
+ --vp-c-danger-3: var(--vp-c-red-3);
+ --vp-c-danger-soft: var(--vp-c-red-soft);
+}
+
+/**
+ * Component: Button
+ * -------------------------------------------------------------------------- */
+
+:root
+{
+ --vp-button-brand-border: transparent;
+ --vp-button-brand-text: var(--vp-c-white);
+ --vp-button-brand-bg: var(--vp-c-brand-3);
+ --vp-button-brand-hover-border: transparent;
+ --vp-button-brand-hover-text: var(--vp-c-white);
+ --vp-button-brand-hover-bg: var(--vp-c-brand-2);
+ --vp-button-brand-active-border: transparent;
+ --vp-button-brand-active-text: var(--vp-c-white);
+ --vp-button-brand-active-bg: var(--vp-c-brand-1);
+}
+
+/**
+ * Component: Home
+ * -------------------------------------------------------------------------- */
+
+:root
+{
+ --vp-home-hero-name-color: transparent;
+ --vp-home-hero-name-background: -webkit-linear-gradient(
+ -60deg, #f47731, #f5594e, #ea3f68, #d53080, #b63294, #8e3aa1, #5d41a5, #0c449f
+ );
+
+ --vp-home-hero-image-background-image: linear-gradient(-45deg, #f47731 33.333%, #c5318a, #0c449f 66.666%);
+
+ --vp-home-hero-image-filter: blur(44px);
+}
+.dark
+{
+ --vp-home-hero-name-background: -webkit-linear-gradient(
+ -60deg, #fc952f, #ff7b5e, #ff6a8c, #fb6ab6, #d676d7, #a484e8, #678ee8, #1093d7
+ );
+
+ --vp-home-hero-image-background-image: linear-gradient(-45deg, #fc952f 33.333%, #e970c6, #1093d7 66.666%);
+}
+
+@media (min-width: 640px)
+{
+ :root
+ {
+ --vp-home-hero-image-filter: blur(56px);
+ }
+}
+
+@media (min-width: 960px)
+{
+ :root
+ {
+ --vp-home-hero-image-filter: blur(68px);
+ }
+}
+
+/**
+ * Component: Custom Block
+ * -------------------------------------------------------------------------- */
+
+:root
+{
+ --vp-custom-block-tip-border: transparent;
+ --vp-custom-block-tip-text: var(--vp-c-text-1);
+ --vp-custom-block-tip-bg: var(--vp-c-brand-soft);
+ --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);
+}
+
+/**
+ * Component: Algolia
+ * -------------------------------------------------------------------------- */
+
+.DocSearch
+{
+ --docsearch-primary-color: var(--vp-c-brand-1) !important;
+}
diff --git a/docs/guide/customization.md b/docs/guide/customization.md
new file mode 100644
index 0000000..71a6da0
--- /dev/null
+++ b/docs/guide/customization.md
@@ -0,0 +1,49 @@
+# Customization
+
+::: warning Coming Soon
+This page is a placeholder.
+Content will be added in a future update.
+:::
+
+This section will cover advanced customization options for your CMaNGOS Docker server, including:
+
+## Planned topics
+
+### Custom game rates
+
+- Experience rates (killing, quests, exploration)
+- Drop rates (items, gold)
+- Reputation gains
+- Skill leveling speed
+
+### Server rules
+
+- PvP settings and rules
+- Rest experience configuration
+- Auction house settings
+- Guild and group options
+
+### World modifications
+
+- Adding custom NPCs
+- Modifying loot tables
+- Creating custom quests
+- Event scheduling
+
+### Visual customizations
+
+- Custom loading screens
+- Modified game assets
+- Client-side patches
+
+### Modules and extensions
+
+- PlayerBots module
+- Auction House Bot
+- Other community modules
+
+---
+
+::: tip Contribute
+If you'd like to help write this documentation, feel free to [open a pull request](https://github.com/Byloth/cmangos-docker/pulls) or [suggest content](https://github.com/Byloth/cmangos-docker/issues/new/choose).
+:::
diff --git a/docs/guide/database-management.md b/docs/guide/database-management.md
new file mode 100644
index 0000000..da736c5
--- /dev/null
+++ b/docs/guide/database-management.md
@@ -0,0 +1,150 @@
+# Database Management
+
+::: warning Work in Progress
+This page is currently under construction and may be incomplete.
+:::
+
+CMaNGOS uses a MariaDB database to store all game data, player characters, and server logs.
+This guide covers common database operations like backups, restores, and running queries.
+
+## Prerequisites
+
+Before performing any database operations, make sure the database server is running:
+
+```sh
+docker compose up mariadb -d
+```
+
+The `-d` flag runs the container in detached mode (background).
+
+## Backups
+
+Regular backups are essential for protecting your server data.
+CMaNGOS Docker provides built-in tools for creating and restoring backups.
+
+### Creating a backup
+
+From within your project directory, run:
+
+::: code-group
+
+```sh [All databases]
+./builder/run.sh backup-db --all > backups/cmangos_$(date +"%Y-%m-%d_%H-%M-%S").tar.gz
+```
+
+```sh [World database only]
+./builder/run.sh backup-db --world > backups/world_$(date +"%Y-%m-%d").tar.gz
+```
+
+```sh [Characters database only]
+./builder/run.sh backup-db --characters > backups/characters_$(date +"%Y-%m-%d").tar.gz
+```
+
+:::
+
+::: tip Backup options
+The `backup-db` command supports these flags:
+- `--all` — Backup all databases
+- `--world` — World data (NPCs, items, quests, etc.)
+- `--characters` — Player characters and progression
+- `--logs` — Server activity logs
+- `--realmd` — Realm and account data
+:::
+
+### Restoring a backup
+
+To restore from a backup file:
+
+```sh
+./builder/run.sh restore-db < backups/cmangos_2024-01-15_12-30-00.tar.gz
+```
+
+::: danger Destructive operation
+Restoring a backup will **overwrite** the current database contents.
+Make sure you have a recent backup of your current data before proceeding.
+:::
+
+## Querying databases
+
+To execute queries and perform various operations on the databases, CMaNGOS Docker provides both a graphical interface through **[phpMyAdmin](https://www.phpmyadmin.net/)** and the CLI `mysql` command within the `builder` Docker container.
+
+Choose the one that best suits your needs.
+
+### Using phpMyAdmin
+
+phpMyAdmin is included in CMaNGOS Docker but is disabled by default.
+To run it, you can either start it manually or use the `debug` profile.
+
+::: code-group
+
+```sh [Start manually]
+docker compose up phpmyadmin
+```
+
+```sh [Use debug profile]
+docker compose --profile debug up
+```
+
+:::
+
+After running one of these commands, visit [`http://localhost:8080`](http://localhost:8080) to access phpMyAdmin's graphical interface.
+
+::: info Default credentials
+Use the database credentials from your `.env` file to log in.
+The root user is `root` with the password you set in `MYSQL_SUPERPASS`.
+:::
+
+### Using the MySQL CLI
+
+For command-line access, you can use the `builder` container to run MySQL commands directly.
+
+::: code-group
+
+```sh [Linux / Unix / macOS]
+# Execute a single inline query
+./builder/run.sh mysql -u root -p {database} -e "SELECT * FROM realmlist;"
+
+# Execute queries from a file
+./builder/run.sh mysql -u root -p {database} < path/to/queries.sql
+```
+
+```bat [Windows Command Prompt]
+:: Execute a single inline query
+docker run -it --rm ^
+ --network "cmangos_default" ^
+ ^
+ ghcr.io/byloth/cmangos/{version}/builder:latest mysql -u root -p {database} -e "SELECT * FROM realmlist;"
+```
+
+```powershell [Windows PowerShell]
+# Execute a single inline query
+docker run -it --rm `
+ --network "cmangos_default" `
+ `
+ ghcr.io/byloth/cmangos/{version}/builder:latest mysql -u root -p {database} -e "SELECT * FROM realmlist;"
+```
+
+:::
+
+::: warning Placeholders
+Replace `{database}` with the name of the database you want to query:
+- `classicmangos`, `tbcmangos`, or `wotlkmangos` — World data
+- `classiccharacters`, `tbccharacters`, or `wotlkcharacters` — Character data
+- `classiclogs`, `tbclogs`, or `wotlklogs` — Log data
+- `classicrealmd`, `tbcrealmd`, or `wotlkrealmd` — Realm data
+
+For Windows users, also replace `{version}` with your expansion keyword.
+:::
+
+## Database structure
+
+CMaNGOS uses four separate databases for each expansion:
+
+| Database | Purpose |
+|----------|---------|
+| `{expansion}mangos` | World data (NPCs, items, quests, spells, loot tables, etc.) |
+| `{expansion}characters` | Player data (characters, inventories, skills, achievements, etc.) |
+| `{expansion}logs` | Server logs (chat, trades, GM commands, etc.) |
+| `{expansion}realmd` | Account and realm data (login credentials, realm list, bans, etc.) |
+
+Where `{expansion}` is one of: `classic`, `tbc`, or `wotlk`.
diff --git a/docs/guide/getting-started.md b/docs/guide/getting-started.md
new file mode 100644
index 0000000..3960c68
--- /dev/null
+++ b/docs/guide/getting-started.md
@@ -0,0 +1,238 @@
+# Getting Started
+
+One of the main goals of the **CMaNGOS Docker** project is **optimization**.
+To achieve this, **two different types** of Docker images have been developed: one used for **maintenance** (larger) and one used for **execution** (smaller and optimized).
+
+With this principle in mind, we can now begin!
+
+::: warning Not production-ready
+This procedure doesn't describe a _production-ready_ deployment and doesn't delve into security best practices. It's just a simple practical example of a basic CMaNGOS Docker configuration; be careful when using it directly in a production environment.
+
+If you're looking for more specific guidance, see the [Use in Production](/guide/use-in-production) page.
+:::
+
+## Choose your expansion
+
+First of all, you have to decide which client version you want your server to support.
+Both CMaNGOS and CMaNGOS Docker use **three keywords** to identify it.
+
+Select the one you need and **keep it in mind** for the next steps:
+
+| Game name | Game version | Keyword |
+|-----------|--------------|---------|
+| World of Warcraft | **v1.12.x** | `classic` |
+| World of Warcraft: The Burning Crusade | **v2.4.3** | `tbc` |
+| World of Warcraft: Wrath of the Lich King | **v3.3.5a** | `wotlk` |
+
+## Download the project
+
+Create a new directory on your computer to store everything related to your WoW server.
+It's best **NOT** to use the same directory as the game client — keep them separate from each other.
+
+Download the [`cmangos-docker.zip`](https://github.com/Byloth/cmangos-docker/archive/refs/heads/master.zip) archive, open it, and extract its contents into the newly created directory.
+
+::: tip Using Git
+If you're familiar with [Git](https://git-scm.com/), you can clone the repository directly instead of downloading the archive:
+
+```sh
+git clone https://github.com/Byloth/cmangos-docker.git
+```
+:::
+
+::: info Keeping files up to date
+This archive may be updated over time.
+Make sure to check it periodically and follow the [update procedure](/guide/install-updates) when needed.
+:::
+
+## Locate the game client
+
+To play World of Warcraft, you'll need a legally owned copy of the game installed on your computer.
+
+Locate the installation directory. On Windows, the default location is typically `C:\Program Files\World of Warcraft`.
+Once you find it, copy the full path — we'll need it in the next step.
+
+## Configure the environment
+
+The `.env` file is a configuration file that customizes your WoW server setup.
+
+Since it contains sensitive information (like passwords), it cannot be included pre-configured. To create it, copy the `.env.example` file and rename it to `.env`, then edit it with any text editor.
+
+### Environment variables
+
+| Variable | Description | Example |
+|----------|-------------|---------|
+| `MYSQL_SUPERPASS` | Password for the MySQL `root` administrator account | `root00` |
+| `MANGOS_DBUSER` | Username for the application's database connection | `mangos` |
+| `MANGOS_DBPASS` | Password for the application's database connection | `mangos00` |
+| `WOW_CLIENT_DIR` | Full path to your WoW game installation | `D:\Games\WoW` |
+| `WOW_TIMEZONE` | Server timezone ([tz database format](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)) | `Europe/Rome` |
+| `WOW_VERSION` | Expansion keyword from the table above | `tbc` |
+
+::: danger Security notice
+Choose strong, unique passwords for `MYSQL_SUPERPASS` and `MANGOS_DBPASS`.
+The example values (`root00`, `mangos00`) are **not secure** and should only be used for local testing.
+:::
+
+Once you're done, save the file and close your text editor.
+
+## Extract game data
+
+Due to legal reasons and copyright policies, CMaNGOS cannot be distributed in a fully _ready-to-run_ state. It requires **additional data files** that are copyrighted by Blizzard Entertainment.
+
+These files are present within the WoW game client.
+If you legally own the game, you can extract them using the CMaNGOS extraction tool.
+
+::: code-group
+
+```sh [Linux / Unix / macOS]
+./builder/run.sh extract
+```
+
+```bat [Windows Command Prompt]
+docker run -it --rm ^
+ --volume "cmangos_mangosd_data:/home/mangos/data" ^
+ --volume "{path}:/home/mangos/wow-client" ^
+ ^
+ ghcr.io/byloth/cmangos/{version}/builder:latest extract
+```
+
+```powershell [Windows PowerShell]
+docker run -it --rm `
+ --volume "cmangos_mangosd_data:/home/mangos/data" `
+ --volume "{path}:/home/mangos/wow-client" `
+ `
+ ghcr.io/byloth/cmangos/{version}/builder:latest extract
+```
+
+:::
+
+::: warning Placeholders
+For Windows users: replace `{path}` with your WoW installation directory path and `{version}` with your chosen expansion keyword (`classic`, `tbc`, or `wotlk`).
+:::
+
+::: info Extraction time
+This process extracts maps, textures, and other game data.
+Depending on your hardware, it may take **30 minutes to several hours** to complete.
+:::
+
+## Initialize the database
+
+The database stores all game world information: NPCs, items, quests, spells, and much more. This step creates the required databases and populates them with initial data.
+
+Open a terminal in your project directory and start the database server:
+
+```sh
+docker compose up mariadb
+```
+
+This terminal will display log output. Leave it running and open a **second terminal** in the same directory.
+
+In the second terminal, initialize the databases:
+
+::: code-group
+
+```sh [Linux / Unix / macOS]
+./builder/run.sh init-db
+```
+
+```bat [Windows Command Prompt]
+docker run -it --rm ^
+ --env MYSQL_SUPERUSER="root" ^
+ --env MYSQL_SUPERPASS="root00" ^
+ --env MANGOS_DBHOST="mariadb" ^
+ --env MANGOS_DBUSER="mangos" ^
+ --env MANGOS_DBPASS="mangos00" ^
+ --network "cmangos_default" ^
+ --volume "cmangos_mangosd_data:/home/mangos/data" ^
+ ^
+ ghcr.io/byloth/cmangos/{version}/builder:latest init-db
+```
+
+```powershell [Windows PowerShell]
+docker run -it --rm `
+ --env MYSQL_SUPERUSER="root" `
+ --env MYSQL_SUPERPASS="root00" `
+ --env MANGOS_DBHOST="mariadb" `
+ --env MANGOS_DBUSER="mangos" `
+ --env MANGOS_DBPASS="mangos00" `
+ --network "cmangos_default" `
+ --volume "cmangos_mangosd_data:/home/mangos/data" `
+ `
+ ghcr.io/byloth/cmangos/{version}/builder:latest init-db
+```
+
+:::
+
+::: warning Placeholders
+For Windows users: replace `{version}` with the correct expansion keyword and update the environment variable values to match your `.env` file.
+:::
+
+Once initialization completes, return to the first terminal and press `Ctrl+C` to stop the database server.
+
+## Start the server
+
+You're now ready to run your WoW server for the first time!
+
+From your project directory, run:
+
+```sh
+docker compose up
+```
+
+The terminal will display server logs. As long as messages are being printed, your server is running.
+
+::: tip Running in background
+To run the server in the background (detached mode), add the `-d` flag:
+
+```sh
+docker compose up -d
+```
+
+You can then view logs with `docker compose logs -f` and stop with `docker compose down`.
+:::
+
+## Connect to your server
+
+To play on your server, you need to configure the WoW client to connect to it.
+
+### Edit realmlist.wtf
+
+Locate the `realmlist.wtf` file inside your WoW client's `Data` directory and open it with a text editor.
+
+Replace its contents with:
+
+```
+set realmlist 127.0.0.1
+```
+
+::: info Remote connections
+If you're connecting from a different computer on your network, replace `127.0.0.1` with the server machine's IP address.
+For internet connections, you'll need to configure port forwarding on your router.
+:::
+
+### Create an account
+
+Before you can log in, you need to create a game account.
+See the [Server Administration](/guide/server-administration) guide for instructions on creating accounts and managing users.
+
+## Stop the server
+
+To stop the server gracefully, press `Ctrl+C` in the terminal where it's running.
+This may take a few seconds as the server saves data and disconnects players.
+
+::: tip Clean shutdown
+To ensure everything is properly stopped:
+
+```sh
+docker compose down
+```
+:::
+
+## Next steps
+
+Now that your server is running, you may want to:
+
+- [Create user accounts](/guide/server-administration#creating-accounts) to log into the game
+- [Configure server settings](/guide/server-configuration) like experience rates or PvP rules
+- [Set up the realm list](/guide/server-configuration#realm-configuration) for proper client connections
+- [Learn about backups](/guide/database-management#backups) to protect your data
diff --git a/docs/guide/install-updates.md b/docs/guide/install-updates.md
new file mode 100644
index 0000000..fd25f1c
--- /dev/null
+++ b/docs/guide/install-updates.md
@@ -0,0 +1,102 @@
+# Installing Updates
+
+::: warning Work in Progress
+This page is currently under construction and may be incomplete.
+:::
+
+CMaNGOS Docker images are built and published nightly, incorporating the latest changes from the CMaNGOS project.
+This guide explains how to update your server to the latest version.
+
+::: danger Always backup first!
+Before installing any updates, **always** create a [backup](/guide/database-management#creating-a-backup) of your databases.
+Updates can occasionally cause issues, and having a recent backup ensures you can recover your data.
+:::
+
+## Update process
+
+Updating your CMaNGOS Docker installation involves three steps:
+
+1. Update your local project files (if needed)
+2. Pull the latest Docker images
+3. Update the database schema
+
+### Step 1: Update project files
+
+If there have been changes to the `docker-compose.yml` file or other configuration files, you'll need to update your local copy.
+
+If you cloned the repository with Git:
+
+```sh
+git pull origin master
+```
+
+If you downloaded the ZIP archive, download the latest version and carefully merge any changes with your existing files, being careful not to overwrite your customizations.
+
+::: tip Check the changelog
+Before updating, check the [releases page](https://github.com/Byloth/cmangos-docker/releases) or commit history for any breaking changes that might require additional steps.
+:::
+
+### Step 2: Pull latest Docker images
+
+Download the latest Docker images:
+
+```sh
+docker compose pull
+```
+
+This command will download any updated images for all services defined in your `docker-compose.yml`.
+
+### Step 3: Update the database
+
+After pulling new images, you may need to apply database schema updates:
+
+```sh
+./builder/run.sh update-db
+```
+
+This command applies any pending database migrations without destroying your existing data.
+
+::: warning World database updates
+Some updates may require a full world database reload. If prompted, or if you experience issues after updating, you can perform a full world database update:
+
+```sh
+./builder/run.sh update-db --world
+```
+
+**Note:** This will reset world data to defaults but preserves character data.
+:::
+
+## Restarting after updates
+
+After completing all update steps, restart your server:
+
+```sh
+docker compose down
+docker compose up -d
+```
+
+## Checking versions
+
+To see which version of CMaNGOS your images were built from, you can inspect the image labels:
+
+```sh
+docker inspect ghcr.io/byloth/cmangos/{version}:latest --format='{{.Config.Labels}}'
+```
+
+Replace `{version}` with your expansion keyword (`classic`, `tbc`, or `wotlk`).
+
+## Rollback
+
+If an update causes problems, you can roll back to a previous version:
+
+1. Restore your database backup
+2. Pull a specific dated image tag:
+
+```sh
+docker pull ghcr.io/byloth/cmangos/{version}:2024-01-14
+```
+
+Replace `{version}` with your expansion keyword (`classic`, `tbc`, or `wotlk`).
+
+3. Update your `docker-compose.yml` to use the specific tag instead of `latest`
+4. Restart the server
diff --git a/docs/guide/introduction.md b/docs/guide/introduction.md
new file mode 100644
index 0000000..cb01b27
--- /dev/null
+++ b/docs/guide/introduction.md
@@ -0,0 +1,41 @@
+# Introduction
+
+## What is CMaNGOS Docker?
+
+**CMaNGOS Docker** is a project that aims to provide the **best possible experience** to anyone interested in running their own [**CMaNGOS**](https://cmangos.net/) server.
+
+It doesn't matter if you're a **non-technical newcomer** who just wants to play with friends, a **skilled developer** who wants to experiment with the game world, or an **enterprise** looking to deploy multiple realms on a distributed server cluster... CMaNGOS Docker will **make things easy** for all of you!
+
+## How does it work?
+
+**CMaNGOS Docker** — as you can tell from the name — is based on [**Docker container**](https://www.docker.com/resources/what-container/) technology, which allows you to run _pre-built_ and _ready-to-use_ applications by simply typing a command into a terminal (among other incredible things).
+
+The main task for the CMaNGOS Docker project is to **maintain** and **provide** these artifacts (called **Docker images**), while yours is simply to run them.
+
+---
+
+Once you've got [Docker installed](/guide/requirements#installation) on your machine, you're done and ready to go!
+
+If it's the first time running the server, you may need some [initial configuration](/guide/getting-started#preliminary-configuration) to tell CMaNGOS how you want it to run...
+But even this step is simple and straightforward.
+
+## Why use Docker?
+
+There are several advantages to using Docker containers over the traditional technology stack.
+While I won't cover them all (since that isn't the focus of this document), here are the ones that interest us the most:
+
+- **No further installations required:**
+ You won't need to install any additional software, compilers, or libraries.
+
+- **No wasted disk space:**
+ Docker executables take up around **500–600 MB**, while a typical CMaNGOS Docker image is less than **200 MB**.
+
+- **No wasted time:**
+ You won't have to wait for any compilation steps — just download and run immediately.
+
+- **No differences between operating systems:**
+ It doesn't matter what OS you're using: Docker works **everywhere**.
+
+---
+
+_That's it. Simple as that._
diff --git a/docs/guide/requirements.md b/docs/guide/requirements.md
new file mode 100644
index 0000000..71986f0
--- /dev/null
+++ b/docs/guide/requirements.md
@@ -0,0 +1,61 @@
+# Requirements
+
+::: warning Prerequisites
+All the contents of this guide assume a basic knowledge of your **operating system**, its **terminal**, and how to use its **command line interface**.
+
+These topics won't be covered in this documentation; however, any other software or tools used will be described within the limited scope of their specific implementation.
+:::
+
+## Docker
+
+[**Docker**](https://www.docker.com/) is the only software required to run this project.
+
+### Installation
+
+To install Docker, visit the official [**download page**](https://docs.docker.com/get-docker/) and select your operating system.
+The installer will begin downloading; once complete, run it and follow the prompts.
+
+### Verifying the installation
+
+To check whether the installation was successful, open a terminal or command prompt and type:
+
+```sh
+docker run --rm hello-world
+```
+
+You should see output similar to the following:
+
+```
+Unable to find image 'hello-world:latest' locally
+latest: Pulling from library/hello-world
+2db29710123e: Pull complete
+Digest: sha256:aa0cc8055b82dc2509bed2e19b275c8f463506616377219d9642221ab53cf9fe
+Status: Downloaded newer image for hello-world:latest
+
+Hello from Docker!
+This message shows that your installation appears to be working correctly.
+
+To generate this message, Docker took the following steps:
+ 1. The Docker client contacted the Docker daemon.
+ 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
+ (amd64)
+ 3. The Docker daemon created a new container from that image which runs the
+ executable that produces the output you are currently reading.
+ 4. The Docker daemon streamed that output to the Docker client, which sent it
+ to your terminal.
+
+To try something more ambitious, you can run an Ubuntu container with:
+ $ docker run -it ubuntu bash
+
+Share images, automate workflows, and more with a free Docker ID:
+ https://hub.docker.com/
+
+For more examples and ideas, visit:
+ https://docs.docker.com/get-started/
+```
+
+::: tip Linux users
+If you're using a Linux-based operating system, you'll probably need to prepend `sudo` to each `docker` command you run. Due to the way Docker works in a Linux environment, it requires superuser privileges.
+
+[Learn how to run Docker without sudo →](https://docs.docker.com/engine/install/linux-postinstall/)
+:::
diff --git a/docs/guide/server-administration.md b/docs/guide/server-administration.md
new file mode 100644
index 0000000..812940b
--- /dev/null
+++ b/docs/guide/server-administration.md
@@ -0,0 +1,275 @@
+# Server Administration
+
+This guide covers day-to-day server administration tasks: managing user accounts, assigning permissions, and using the server console.
+
+## The CMaNGOS console
+
+The CMaNGOS server (`mangosd`) provides an interactive command-line interface for real-time server management.
+Through this console, you can create accounts, modify player data, broadcast messages, and perform various administrative tasks.
+
+### Accessing the console
+
+While your server is running, open a new terminal and attach to the server container:
+
+```sh
+docker attach cmangos-mangosd-1
+```
+
+You'll now see a command prompt where you can type CMaNGOS commands.
+
+::: danger Detaching safely
+**DO NOT** press `Ctrl+C` to exit the console — this will **stop the entire server** and disconnect all players.
+
+To safely detach from the console without stopping the server:
+1. Press `Ctrl+P`
+2. Then press `Ctrl+Q`
+
+This key sequence detaches your terminal while leaving the server running.
+:::
+
+### Console commands overview
+
+The console supports hundreds of commands for server management. Here are the most commonly used categories:
+
+| Category | Example commands | Description |
+|----------|------------------|-------------|
+| Account | `account create`, `account set` | User account management |
+| Server | `server info`, `server shutdown` | Server status and control |
+| Player | `character rename`, `kick` | Player management |
+| GM | `announce`, `notify` | Game Master tools |
+| Debug | `debug`, `log` | Troubleshooting |
+
+::: tip Getting help
+Type `.help` in the console to see all available commands, or `.help ` for details about a specific command.
+:::
+
+## Creating accounts
+
+Before players can log into your server, they need a game account.
+
+### Create a new account
+
+In the CMaNGOS console, type:
+
+```
+account create {username} {password}
+```
+
+Replace `{username}` and `{password}` with the desired credentials.
+
+**Example:**
+```
+account create john secretpass123
+```
+
+::: warning Password requirements
+- Passwords are case-sensitive
+- Avoid special characters that might cause issues with the client
+- Players can change their password later using the `account set password` command
+:::
+
+### Account information
+
+To view information about an existing account:
+
+```
+account {username}
+```
+
+This displays the account ID, expansion level, GM level, and other details.
+
+## Expansion access
+
+Even if your server supports a specific expansion (like WotLK), you can control which expansion content each account can access.
+This mimics official servers where players must purchase expansions separately.
+
+### Expansion levels
+
+| Level | Access to | Max character level |
+|-------|-----------|---------------------|
+| `0` | Classic (Vanilla) only | 60 |
+| `1` | Classic + The Burning Crusade | 70 |
+| `2` | Classic + TBC + Wrath of the Lich King | 80 |
+
+::: info Cumulative access
+Higher levels include all previous content. Setting level `2` grants access to Classic, TBC, and WotLK content.
+:::
+
+### Set expansion level
+
+```
+account set addon {username} {level}
+```
+
+**Examples:**
+```
+account set addon john 0 # Classic only
+account set addon john 1 # Up to TBC
+account set addon john 2 # Up to WotLK
+```
+
+## Game Master levels
+
+Game Masters (GMs) are privileged users who can perform administrative actions in-game, such as teleporting players, spawning items, or banning cheaters.
+
+### GM permission levels
+
+| Level | Role | Capabilities |
+|-------|------|--------------|
+| `0` | Player | Normal gameplay, no special permissions |
+| `1` | Moderator | Can kick players, mute chat, view reports |
+| `2` | Game Master | Can teleport, spawn NPCs/items, modify characters |
+| `3` | Administrator | Full access to all commands, server management |
+
+### Assign GM level
+
+```
+account set gmlevel {username} {level}
+```
+
+**Examples:**
+```
+account set gmlevel john 1 # Promote to Moderator
+account set gmlevel john 3 # Promote to Administrator
+account set gmlevel john 0 # Remove GM privileges
+```
+
+::: warning Security consideration
+Only grant GM privileges to trusted individuals. Higher GM levels can significantly impact the game world and player experience. Consider starting new staff at level 1 and promoting gradually.
+:::
+
+## Common administrative tasks
+
+### Broadcasting messages
+
+Send a message to all online players:
+
+```
+announce Your message here
+```
+
+The message appears in the center of every player's screen.
+
+For a less intrusive notification (chat window only):
+
+```
+notify Your message here
+```
+
+### Kicking players
+
+Disconnect a player from the server:
+
+```
+kick {playername}
+```
+
+### Banning accounts
+
+Temporarily ban an account:
+
+```
+ban account {username} {duration} {reason}
+```
+
+Duration format: `#d` for days, `#h` for hours, `#m` for minutes.
+
+**Examples:**
+```
+ban account cheater 7d Using exploits
+ban account spammer 24h Chat spam
+```
+
+To permanently ban:
+
+```
+ban account {username} 0 {reason}
+```
+
+To unban:
+
+```
+unban account {username}
+```
+
+### Server shutdown
+
+Schedule a server shutdown (with warning to players):
+
+```
+server shutdown {seconds}
+```
+
+**Example:**
+```
+server shutdown 300 # Shutdown in 5 minutes
+```
+
+Players receive countdown warnings. To cancel a scheduled shutdown:
+
+```
+server shutdown cancel
+```
+
+For immediate shutdown (no warning):
+
+```
+server exit
+```
+
+## Managing accounts via database
+
+For bulk operations or automated account management, you can directly modify the `realmd` database.
+
+### Account table structure
+
+The main account information is stored in the `account` table:
+
+| Column | Description |
+|--------|-------------|
+| `id` | Unique account identifier |
+| `username` | Login username |
+| `gmlevel` | GM permission level (0-3) |
+| `expansion` | Maximum expansion access (0-2) |
+| `locked` | Whether account is locked |
+
+### Example queries
+
+**List all accounts:**
+```sql
+SELECT id, username, gmlevel, expansion FROM account;
+```
+
+**Find accounts by username pattern:**
+```sql
+SELECT * FROM account WHERE username LIKE 'john%';
+```
+
+**Bulk update expansion level:**
+```sql
+UPDATE account SET expansion = 2 WHERE expansion < 2;
+```
+
+::: tip Database access
+See the [Database Management](/guide/database-management#querying-databases) guide for instructions on running SQL queries.
+:::
+
+## Troubleshooting
+
+### "Account already exists"
+
+The username is taken. Choose a different username or check if you're recreating an existing account.
+
+### Player can't see certain content
+
+Check the account's expansion level. If a player can't access Outland, their account might be set to expansion level 0 (Classic only).
+
+### GM commands not working in-game
+
+1. Verify the account has GM privileges: `account {username}`
+2. Make sure the character is logged in with the correct account
+3. Some commands require specific GM levels — check with `.help {command}`
+
+### Players stuck in "realm selection" loop
+
+This usually indicates a realmlist configuration issue. See [Realm Configuration](/guide/server-configuration#realm-configuration) for troubleshooting steps.
diff --git a/docs/guide/server-configuration.md b/docs/guide/server-configuration.md
new file mode 100644
index 0000000..c070bb6
--- /dev/null
+++ b/docs/guide/server-configuration.md
@@ -0,0 +1,286 @@
+# Server Configuration
+
+This guide covers how to configure your CMaNGOS server, from basic settings like experience rates to advanced realm configuration.
+
+## How configuration works
+
+CMaNGOS Docker uses a **configuration override** system. The container includes default configuration files, and you only need to specify the values you want to change.
+
+Your custom settings go in files located in the `runner/config/` directory:
+
+| File | Purpose |
+|------|---------|
+| `mangosd.conf` | World server settings (gameplay, rates, features) |
+| `realmd.conf` | Login server settings (authentication, security) |
+
+::: tip Override principle
+You don't need to copy the entire default configuration. Just add the specific properties you want to change. All other settings use CMaNGOS defaults.
+:::
+
+## World server configuration
+
+Edit `runner/config/mangosd.conf` to customize gameplay settings.
+
+### Basic syntax
+
+Each setting is a key-value pair:
+
+```ini
+PropertyName = value
+```
+
+**Example:**
+```ini
+GameType = 1
+Rate.XP.Kill = 2
+Motd = "Welcome to my server!"
+```
+
+### Common settings
+
+#### Server type
+
+| Property | Default | Description |
+|----------|---------|-------------|
+| `GameType` | `0` | Server type displayed in realm list |
+| `RealmZone` | `1` | Timezone/region for the realm |
+
+**GameType values:**
+- `0` — Normal (PvE)
+- `1` — PvP
+- `4` — Normal (with contested zones)
+- `6` — RP (Roleplay)
+- `8` — RP-PvP
+
+#### Experience and progression
+
+| Property | Default | Description |
+|----------|---------|-------------|
+| `Rate.XP.Kill` | `1` | XP multiplier for killing mobs |
+| `Rate.XP.Quest` | `1` | XP multiplier for quests |
+| `Rate.XP.Explore` | `1` | XP multiplier for exploration |
+| `Rate.Rest.InGame` | `1` | Rest XP accumulation rate |
+| `MaxPlayerLevel` | `60/70/80` | Maximum character level |
+| `StartPlayerLevel` | `1` | Starting level for new characters |
+
+**Example — 3x XP server:**
+```ini
+Rate.XP.Kill = 3
+Rate.XP.Quest = 3
+Rate.XP.Explore = 3
+```
+
+#### Loot and economy
+
+| Property | Default | Description |
+|----------|---------|-------------|
+| `Rate.Drop.Item.Normal` | `1` | Drop rate for regular items |
+| `Rate.Drop.Item.Uncommon` | `1` | Drop rate for uncommon (green) items |
+| `Rate.Drop.Item.Rare` | `1` | Drop rate for rare (blue) items |
+| `Rate.Drop.Item.Epic` | `1` | Drop rate for epic (purple) items |
+| `Rate.Drop.Money` | `1` | Gold drop rate |
+| `StartPlayerMoney` | `0` | Starting gold (in copper) |
+
+::: info Currency conversion
+WoW currency is stored in copper. 1 gold = 100 silver = 10,000 copper.
+
+To give new characters 10 gold: `StartPlayerMoney = 100000`
+:::
+
+#### Quality of life
+
+| Property | Default | Description |
+|----------|---------|-------------|
+| `AllFlightPaths` | `0` | `1` = All flight paths unlocked |
+| `InstantFlightPaths` | `0` | `1` = Instant travel (no flight animation) |
+| `InstantLogout` | `0` | `1` = Instant logout anywhere |
+| `AlwaysMaxSkillForLevel` | `0` | `1` = Auto-max weapon skills |
+
+#### Server messages
+
+| Property | Default | Description |
+|----------|---------|-------------|
+| `Motd` | (empty) | Message of the Day shown on login |
+
+**Example:**
+```ini
+Motd = "Welcome to Azeroth! Type .help for commands."
+```
+
+::: tip Complete reference
+For all available settings, see the official CMaNGOS configuration files:
+
+- [Classic mangosd.conf.dist](https://github.com/cmangos/mangos-classic/blob/master/src/mangosd/mangosd.conf.dist.in)
+- [TBC mangosd.conf.dist](https://github.com/cmangos/mangos-tbc/blob/master/src/mangosd/mangosd.conf.dist.in)
+- [WotLK mangosd.conf.dist](https://github.com/cmangos/mangos-wotlk/blob/master/src/mangosd/mangosd.conf.dist.in)
+:::
+
+## Login server configuration
+
+Edit `runner/config/realmd.conf` to customize authentication and security settings.
+
+### Security settings
+
+| Property | Default | Description |
+|----------|---------|-------------|
+| `WrongPass.MaxCount` | `0` | Max failed login attempts (`0` = unlimited) |
+| `WrongPass.BanTime` | `600` | Ban duration in seconds after max failures |
+| `WrongPass.BanType` | `0` | `0` = Ban IP, `1` = Ban account |
+| `MaxPingTime` | `30` | Disconnect after this many minutes of inactivity |
+
+**Example — Ban IP for 1 hour after 5 failed attempts:**
+```ini
+WrongPass.MaxCount = 5
+WrongPass.BanTime = 3600
+WrongPass.BanType = 0
+```
+
+## Realm configuration
+
+The realm configuration tells the game client where to connect and what type of server it is.
+This information is stored in the `realmlist` table of the `realmd` database.
+
+### Default configuration
+
+CMaNGOS creates a default realm entry that works for local (same-machine) connections:
+
+| Field | Default value |
+|-------|---------------|
+| name | MaNGOS |
+| address | 127.0.0.1 |
+| port | 8085 |
+
+### When to modify
+
+You need to modify the realm configuration if:
+
+- Players connect from **other computers** on your network
+- Players connect **over the internet**
+- You want to **customize the realm name**
+- The client gets stuck in a **realm selection loop**
+
+### Updating realm settings
+
+First, ensure the database is running:
+
+```sh
+docker compose up mariadb -d
+```
+
+Then run these SQL queries to update the realm:
+
+```sql
+-- Remove the default entry
+DELETE FROM realmlist WHERE id = 1;
+
+-- Insert your custom configuration
+INSERT INTO realmlist (id, name, address, port, icon, realmflags, timezone, allowedSecurityLevel)
+VALUES (1, 'My Server', '192.168.1.100', 8085, 1, 0, 1, 0);
+```
+
+::: tip Running queries
+See [Database Management — Querying databases](/guide/database-management#querying-databases) for instructions.
+:::
+
+### Realm table fields
+
+| Field | Description | Common values |
+|-------|-------------|---------------|
+| `id` | Unique realm identifier | Usually `1` for single-realm setups |
+| `name` | Realm name shown in client | Any string |
+| `address` | Server IP address | `127.0.0.1` (local), LAN IP, or public IP |
+| `port` | World server port | `8085` (default) |
+| `icon` | Realm type icon | `0`=Normal, `1`=PvP, `4`=Normal, `6`=RP, `8`=RP-PvP |
+| `realmflags` | Status flags | `0`=Online, `2`=Offline |
+| `timezone` | Timezone category | `1`=US, `2`=Korea, `8`=English, etc. |
+| `allowedSecurityLevel` | Minimum GM level to connect | `0`=Everyone, `1`+=Staff only |
+
+### Common scenarios
+
+#### Local play only
+
+For playing on the same computer:
+
+```sql
+INSERT INTO realmlist (id, name, address, port, icon, realmflags, timezone, allowedSecurityLevel)
+VALUES (1, 'Local Server', '127.0.0.1', 8085, 1, 0, 1, 0);
+```
+
+#### LAN play
+
+For playing with others on your local network, use your computer's LAN IP:
+
+```sql
+INSERT INTO realmlist (id, name, address, port, icon, realmflags, timezone, allowedSecurityLevel)
+VALUES (1, 'LAN Server', '192.168.1.100', 8085, 1, 0, 1, 0);
+```
+
+::: tip Finding your LAN IP
+- **Windows:** Run `ipconfig` in Command Prompt
+- **macOS/Linux:** Run `ip addr` or `ifconfig` in Terminal
+
+Look for an address like `192.168.x.x` or `10.0.x.x`.
+:::
+
+#### Internet play
+
+For public internet access, use your public IP or domain name:
+
+```sql
+INSERT INTO realmlist (id, name, address, port, icon, realmflags, timezone, allowedSecurityLevel)
+VALUES (1, 'My Public Server', 'wow.example.com', 8085, 1, 0, 1, 0);
+```
+
+::: warning Port forwarding required
+For internet play, you must configure your router to forward these ports:
+- **3724** — Login server (realmd)
+- **8085** — World server (mangosd)
+
+The setup process varies by router. Search for "port forwarding" + your router model.
+:::
+
+### Troubleshooting realm issues
+
+#### Client stuck in realm selection loop
+
+This is the most common realm configuration issue. The client connects to the login server, sees the realm, but can't connect to the world server.
+
+**Causes and solutions:**
+
+1. **Wrong address in realmlist table**
+ - Check that the `address` field matches where players connect from
+ - For LAN play, use the server's LAN IP, not `127.0.0.1`
+
+2. **World server not running**
+ - Check that both `realmd` and `mangosd` containers are running
+ - Run `docker compose ps` to verify
+
+3. **Firewall blocking connections**
+ - Ensure ports 3724 and 8085 are open
+ - Temporarily disable firewall to test
+
+#### "Unable to connect"
+
+- Verify the realm `address` is reachable from the client
+- Check that the correct ports are open/forwarded
+- Ensure `realmlist.wtf` in the client points to the correct login server
+
+## Applying configuration changes
+
+After modifying configuration files:
+
+1. **Stop the server:**
+ ```sh
+ docker compose down
+ ```
+
+2. **Start the server:**
+ ```sh
+ docker compose up
+ ```
+
+Configuration files are read at startup, so a restart is required for changes to take effect.
+
+::: tip Database changes
+Changes to the `realmlist` table take effect immediately — no server restart needed. Players may need to re-login to see updated realm information.
+:::
diff --git a/docs/guide/use-in-production.md b/docs/guide/use-in-production.md
new file mode 100644
index 0000000..781621f
--- /dev/null
+++ b/docs/guide/use-in-production.md
@@ -0,0 +1,65 @@
+# Use in Production
+
+::: warning Coming Soon
+This page is a placeholder. Content will be added in a future update.
+:::
+
+This section will cover best practices and recommendations for deploying CMaNGOS Docker in a production environment.
+
+## Planned topics
+
+### Security hardening
+
+- Secure database passwords
+- Network isolation
+- Firewall configuration
+- SSL/TLS for connections
+- Protecting sensitive files
+
+### Performance optimization
+
+- Hardware recommendations
+- Docker resource limits
+- Database tuning
+- Connection pooling
+
+### High availability
+
+- Database replication
+- Load balancing multiple realms
+- Backup strategies and automation
+- Disaster recovery planning
+
+### Monitoring and logging
+
+- Log aggregation
+- Performance metrics
+- Health checks
+- Alerting systems
+
+### Deployment strategies
+
+- Using Docker Swarm
+- Kubernetes deployment
+- Cloud provider considerations (AWS, GCP, Azure)
+- Cost optimization
+
+### Server administration
+
+- Managing multiple realms
+- Player support tools
+- Automated maintenance tasks
+- Update rollout strategies
+
+### Legal considerations
+
+- Terms of service
+- Privacy policies
+- GDPR compliance
+- Blizzard's policies on private servers
+
+---
+
+::: tip Contribute
+If you have experience running CMaNGOS in production and would like to share your knowledge, feel free to [open a pull request](https://github.com/Byloth/cmangos-docker/pulls) or [start a discussion](https://github.com/Byloth/cmangos-docker/issues/new/choose).
+:::
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..f224128
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,38 @@
+---
+# https://vitepress.dev/reference/default-theme-home-page
+layout: home
+
+hero:
+ name: "CMaNGOS on Docker"
+ text: "Classic WoW Server,
Your very own way!"
+ tagline: "From Zero to Play within Minutes."
+ image:
+ src: /logo.png
+ alt: CMaNGOS on Docker
+
+ actions:
+ - theme: brand
+ text: Getting Started
+ link: /guide/getting-started
+ - theme: alt
+ text: What's this?
+ link: /guide/introduction
+ - theme: alt
+ text: GitHub
+ link: https://github.com/Byloth/cmangos-docker
+
+features:
+ - icon: 🛠️
+ title: No more Installations
+ details: You don't need to install any weird (and heavy) software, compilers or libraries.
+ - icon: 📦
+ title: No wasted Space
+ details: Docker executables take up around 500~600MB, while an our typical image is less than 200MB.
+ - icon: ⏱️
+ title: No wasted Time
+ details: No compilation steps needed — just download and run with ease. Batteries included!
+ - icon: 🌍
+ title: No OS differences
+ details: Windows user? Mac? It doesn't matter what OS you're using — Docker works everywhere!
+---
+
diff --git a/docs/package.json b/docs/package.json
new file mode 100644
index 0000000..55b4330
--- /dev/null
+++ b/docs/package.json
@@ -0,0 +1,13 @@
+{
+ "name": "@byloth/cmangos-docker-docs",
+ "scripts": {
+ "dev": "vitepress dev",
+ "build": "vitepress build",
+ "preview": "vitepress preview"
+ },
+ "devDependencies": {
+ "vitepress": "^1.6.4",
+ "vue": "^3.5.26"
+ },
+ "private": true
+}
\ No newline at end of file
diff --git a/docs/public/favicons/logo-167x167.png b/docs/public/favicons/logo-167x167.png
new file mode 100644
index 0000000..db47b06
Binary files /dev/null and b/docs/public/favicons/logo-167x167.png differ
diff --git a/docs/public/favicons/logo-16x16.png b/docs/public/favicons/logo-16x16.png
new file mode 100644
index 0000000..714679e
Binary files /dev/null and b/docs/public/favicons/logo-16x16.png differ
diff --git a/docs/public/favicons/logo-180x180.png b/docs/public/favicons/logo-180x180.png
new file mode 100644
index 0000000..43f8537
Binary files /dev/null and b/docs/public/favicons/logo-180x180.png differ
diff --git a/docs/public/favicons/logo-192x192.png b/docs/public/favicons/logo-192x192.png
new file mode 100644
index 0000000..65f32cb
Binary files /dev/null and b/docs/public/favicons/logo-192x192.png differ
diff --git a/docs/public/favicons/logo-32x32.png b/docs/public/favicons/logo-32x32.png
new file mode 100644
index 0000000..0ae200f
Binary files /dev/null and b/docs/public/favicons/logo-32x32.png differ
diff --git a/docs/public/favicons/logo-48x48.png b/docs/public/favicons/logo-48x48.png
new file mode 100644
index 0000000..932230d
Binary files /dev/null and b/docs/public/favicons/logo-48x48.png differ
diff --git a/docs/public/logo.png b/docs/public/logo.png
new file mode 100644
index 0000000..f77ef6c
Binary files /dev/null and b/docs/public/logo.png differ
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..e7164a4
--- /dev/null
+++ b/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "@byloth/cmangos-docker",
+ "workspaces": ["docs"],
+ "private": true
+}