diff --git a/.forgejo/workflows/build_preview.yml b/.forgejo/workflows/build_preview.yml
index c0bdca4..5adfa81 100644
--- a/.forgejo/workflows/build_preview.yml
+++ b/.forgejo/workflows/build_preview.yml
@@ -40,13 +40,14 @@ jobs:
     runs-on: docker
     steps:
       - name: Release New Version
-        uses: actions/forgejo-release@v1
+        uses: https://code.forgejo.org/actions/forgejo-release@v1
         with:
           direction: upload
           url: https://forgejo.neshweb.net
           release-dir: release
           token: ${{ secrets.FORGEJO_TOKEN }}
           tag: ${{  github.ref_name }}
+          prerelease: true
 
   # doesn't work atm
   # unlighthouse:
diff --git a/.forgejo/workflows/build_release.yml b/.forgejo/workflows/build_release.yml
index 258869a..0d46014 100644
--- a/.forgejo/workflows/build_release.yml
+++ b/.forgejo/workflows/build_release.yml
@@ -2,9 +2,6 @@ on:
   push:
     tags:
       - '[0-9]+\.[0-9]+\.[0-9]+'
-      - '[0-9]+\.[0-9]+\.[0-9]+a[0-9]+'
-      - '[0-9]+\.[0-9]+\.[0-9]+b[0-9]+'
-      - '[0-9]+\.[0-9]+\.[0-9]+rc[0-9]+'
 
 jobs:
   checking:
@@ -17,7 +14,6 @@ jobs:
         run: npm install
       - name: Run astro check (linting +  static analysis)
         run: npm run astro check
-        run: npm run astro check
 
   build-site:
     needs: [checking]
@@ -44,7 +40,7 @@ jobs:
     runs-on: docker
     steps:
       - name: Release New Version
-        uses: actions/forgejo-release@v1
+        uses: https://code.forgejo.org/actions/forgejo-release@v1
         with:
           direction: upload
           url: https://forgejo.neshweb.net
diff --git a/.forgejo/workflows/unlighthouse.yml b/.forgejo/workflows/unlighthouse.yml
index e459b71..3c45612 100644
--- a/.forgejo/workflows/unlighthouse.yml
+++ b/.forgejo/workflows/unlighthouse.yml
@@ -7,7 +7,7 @@ on:
 jobs:
   unlighthouse:
     runs-on: docker
-    container: forgejo.neshweb.net/firq/unlighthouse-docker:latest
+    container: forgejo.neshweb.net/ci-docker-images/unlighthouse:latest
     steps:
       - name: Checkout repository
         uses: https://code.forgejo.org/actions/checkout@v3 
@@ -23,6 +23,7 @@ jobs:
 
   deploy-unlighthouse-files:
     needs: [ unlighthouse ]
+    if: success()
     runs-on: docker
     env: 
       DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
@@ -63,10 +64,11 @@ jobs:
           key: ${{ secrets.SSH_PRIVATE_KEY }}
           script: |
             cd firq_dev
-            find public -maxdepth 1 -printf "%p\n"            
+            find unlighthouse -maxdepth 1 -printf "%p\n"            
 
   deploy-unlighthouse-site:
     needs: [ deploy-unlighthouse-files ]
+    if: success()
     runs-on: docker
     env: 
       DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
@@ -91,5 +93,6 @@ jobs:
           key: ${{ secrets.SSH_PRIVATE_KEY }}
           script: |
             PATH="$HOME/.local/bin:$PATH"
-            cd fgo-firq_dev
+            screen -ls | grep 'firq_dev-unlighthouse' | awk '{print $1}' | xargs -I % -t screen -X -S % quit
+            cd firq_dev
             screen -S firq_dev-unlighthouse -dm serve unlighthouse/ -p ${{ secrets.UNLIGHTHOUSE_DEPLOY_PORT }}   
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..ff5ea15
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,12 @@
+{
+    "files.exclude": {
+        "**/.git": true,
+        "**/.svn": true,
+        "**/.hg": true,
+        "**/CVS": true,
+        "**/.DS_Store": true,
+        "**/Thumbs.db": true,
+        "**/__pycache__": true
+    },
+    "hide-files.files": []
+}
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index e3fd1ee..1d81c70 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -4,12 +4,11 @@ COPY . .
 RUN npm i
 RUN npm run build
 
-FROM node:lts AS runtime
-RUN npm install --global "@warren-bank/serve"
+FROM forgejo.neshweb.net/ci-docker-images/website-serve:latest AS runtime
 
 COPY --from=build /app/dist /public
 COPY --from=build /app/serve.json /public/serve.json
-RUN rm -r /public/assets/data/
+RUN rm -r /public/data/
 
 ENV PORT 8081
 EXPOSE 8081
diff --git a/astro.config.mjs b/astro.config.mjs
index cf40f4f..4313843 100644
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -1,7 +1,7 @@
 import { defineConfig } from 'astro/config';
 
-// https://astro.build/config
 import sitemap from "@astrojs/sitemap";
+import mdx from "@astrojs/mdx";
 
 // https://astro.build/config
 export default defineConfig({
@@ -10,5 +10,5 @@ export default defineConfig({
   outDir: 'dist',
   publicDir: 'static',
   site: 'https://firq.dev/',
-  integrations: [sitemap()]
+  integrations: [sitemap(), mdx()]
 });
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 331a458..ae02b32 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,17 +1,21 @@
 {
 	"name": "@firq/fgosite",
-	"version": "0.1.6",
+	"version": "0.1.27",
 	"lockfileVersion": 2,
 	"requires": true,
 	"packages": {
 		"": {
 			"name": "@firq/fgosite",
-			"version": "0.1.6",
+			"version": "0.1.27",
 			"dependencies": {
+				"@astro-community/astro-embed-youtube": "^0.4.3",
 				"@astrojs/check": "^0.3.3",
+				"@astrojs/mdx": "^2.0.3",
 				"@astrojs/sitemap": "^3.0.3",
-				"astro": "^4.0.7",
-				"iconoir": "^6.1.0",
+				"astro": "^4.2.1",
+				"autoprefixer": "^10.4.16",
+				"iconoir": "^7.2.0",
+				"postcss-preset-env": "^9.3.0",
 				"typescript": "^5.3.3"
 			}
 		},
@@ -27,6 +31,17 @@
 				"node": ">=6.0.0"
 			}
 		},
+		"node_modules/@astro-community/astro-embed-youtube": {
+			"version": "0.4.3",
+			"resolved": "https://registry.npmjs.org/@astro-community/astro-embed-youtube/-/astro-embed-youtube-0.4.3.tgz",
+			"integrity": "sha512-zXtPmR9yxrTo6cuLhH8v+r62bsXbsLJgsU2FiZalPr4bXJxAUQEIlG46S/qK0AEXi9uNShKqy4+zBaJ98xTVEg==",
+			"dependencies": {
+				"lite-youtube-embed": "^0.2.0"
+			},
+			"peerDependencies": {
+				"astro": "^2.0.0 || ^3.0.0-beta || ^4.0.0-beta"
+			}
+		},
 		"node_modules/@astrojs/check": {
 			"version": "0.3.3",
 			"resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.3.3.tgz",
@@ -121,6 +136,34 @@
 				"vfile": "^6.0.1"
 			}
 		},
+		"node_modules/@astrojs/mdx": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-2.0.3.tgz",
+			"integrity": "sha512-wFjQX5CihU5B4UAQNwc2R48ph0flpc6/yvDCFANE0agtgI2+BaVcAjuW0EhGOQCZ65dQDqnFKE0lvGs7EADYpg==",
+			"dependencies": {
+				"@astrojs/markdown-remark": "4.0.1",
+				"@mdx-js/mdx": "^3.0.0",
+				"acorn": "^8.11.2",
+				"es-module-lexer": "^1.4.1",
+				"estree-util-visit": "^2.0.0",
+				"github-slugger": "^2.0.0",
+				"gray-matter": "^4.0.3",
+				"hast-util-to-html": "^9.0.0",
+				"kleur": "^4.1.4",
+				"rehype-raw": "^7.0.0",
+				"remark-gfm": "^4.0.0",
+				"remark-smartypants": "^2.0.0",
+				"source-map": "^0.7.4",
+				"unist-util-visit": "^5.0.0",
+				"vfile": "^6.0.1"
+			},
+			"engines": {
+				"node": ">=18.14.1"
+			},
+			"peerDependencies": {
+				"astro": "^4.0.0"
+			}
+		},
 		"node_modules/@astrojs/prism": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.0.0.tgz",
@@ -506,6 +549,867 @@
 				"node": ">=6.9.0"
 			}
 		},
+		"node_modules/@csstools/cascade-layer-name-parser": {
+			"version": "1.0.6",
+			"resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.6.tgz",
+			"integrity": "sha512-HkxRNs6ZIV0VjLFw6k5G8K35vd9r+O8B1Vr+QVD8M5Y44eQxyHtc42BdF74FQatXACPnitOR1+sRx2oWdnKTQw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2"
+			}
+		},
+		"node_modules/@csstools/color-helpers": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.0.0.tgz",
+			"integrity": "sha512-wjyXB22/h2OvxAr3jldPB7R7kjTUEzopvjitS8jWtyd8fN6xJ8vy1HnHu0ZNfEkqpBJgQ76Q+sBDshWcMvTa/w==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			}
+		},
+		"node_modules/@csstools/css-calc": {
+			"version": "1.1.5",
+			"resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.1.5.tgz",
+			"integrity": "sha512-UhI5oSRAUtTHY3MyGahqn0ZzQOHVoPpfvUcOmYipAZ1rILAvCBoyiLSsa/clv1Xxct0SMKIq93KO5Bfl1cb6tQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2"
+			}
+		},
+		"node_modules/@csstools/css-color-parser": {
+			"version": "1.5.0",
+			"resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.5.0.tgz",
+			"integrity": "sha512-PUhSg1MgU2sjYhA6moOmxYesqVqYTJwcVw12boTNbDX7Af+VK02MkgvmBBY2Z2qU6UN5HOQ+wrF0qQJGsTFY7w==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/color-helpers": "^4.0.0",
+				"@csstools/css-calc": "^1.1.5"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2"
+			}
+		},
+		"node_modules/@csstools/css-parser-algorithms": {
+			"version": "2.4.0",
+			"resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.4.0.tgz",
+			"integrity": "sha512-/PPLr2g5PAUCKAPEbfyk6/baZA+WJHQtUhPkoCQMpyRE8I0lXrG1QFRN8e5s3ZYxM8d/g5BZc6lH3s8Op7/VEg==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"@csstools/css-tokenizer": "^2.2.2"
+			}
+		},
+		"node_modules/@csstools/css-tokenizer": {
+			"version": "2.2.2",
+			"resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.2.tgz",
+			"integrity": "sha512-wCDUe/MAw7npAHFLyW3QjSyLA66S5QFaV1jIXlNQvdJ8RzXDSgALa49eWcUO6P55ARQaz0TsDdAgdRgkXFYY8g==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			}
+		},
+		"node_modules/@csstools/media-query-list-parser": {
+			"version": "2.1.6",
+			"resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.6.tgz",
+			"integrity": "sha512-R6AKl9vaU0It7D7TR2lQn0pre5aQfdeqHRePlaRCY8rHL3l9eVlNRpsEVDKFi/zAjzv68CxH2M5kqbhPFPKjvw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2"
+			}
+		},
+		"node_modules/@csstools/postcss-cascade-layers": {
+			"version": "4.0.2",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.2.tgz",
+			"integrity": "sha512-PqM+jvg5T2tB4FHX+akrMGNWAygLupD4FNUjcv4PSvtVuWZ6ISxuo37m4jFGU7Jg3rCfloGzKd0+xfr5Ec3vZQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/selector-specificity": "^3.0.1",
+				"postcss-selector-parser": "^6.0.13"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-color-function": {
+			"version": "3.0.8",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.8.tgz",
+			"integrity": "sha512-jvbF7eCRbIcxWqby0kk2Mt85QtGzRRpFFYdlJCJ80Tuiv43PY+auS/nBl8pDQQ4Ndm4vsm4IC/wCZDcJUmpJmg==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-color-mix-function": {
+			"version": "2.0.8",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.8.tgz",
+			"integrity": "sha512-sGhk+TdZ2TeXspc6LSYSYC8WgzLlxoknUaObKgB0mk+dNjRQgSSIeCU+qrCwvHmwM+uTNKtiS8mntDzyQLHTTA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-exponential-functions": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.2.tgz",
+			"integrity": "sha512-VRIYrwNCkZRqzsGB4jGT+XcNXsoiwyqy0Vf7C3I/5OPcf7WcWK3G1sBYFqqgWLGtpwc7m1m8TcorGY1xdh5abg==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-calc": "^1.1.5",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-font-format-keywords": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.1.tgz",
+			"integrity": "sha512-D1lcG2sfotTq6yBEOMV3myFxJLT10F3DLYZJMbiny5YToqzHWodZen8WId3UTimm0mEHitXqAUNL5jdd6RzVdA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-gamut-mapping": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.1.tgz",
+			"integrity": "sha512-GDVzfNbnc7x3GusFklvt0mYXIWVzxEtEtTFEW664NgZh/5V7Z89hZKBMl9piOAHXuxijfHtE+kul/ShfeLUvcA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-gradients-interpolation-method": {
+			"version": "4.0.8",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.8.tgz",
+			"integrity": "sha512-bmvCNzuUvWPPdgASh0T14ffTay/FdzXsXfp0wXT1pYoUPmkH9M6yyxwPEkHq5djjzSb2jiLl4Ta3XM1uOREQ2w==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-hwb-function": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.7.tgz",
+			"integrity": "sha512-iXs1gxKtev8YNP5bOF26TAsnMfcxnCRLpKItQ067RphYECKEK/xWm4Z0r4ChmV1U1eq+lbdH5ZIb2cju4o5akA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-ic-unit": {
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.3.tgz",
+			"integrity": "sha512-MpcmIL0/uMm/cFWh5V/9nbKKJ7jRr2qTYW5Q6zoE6HZ6uzOBJr2KRERv5/x8xzEBQ1MthDT7iP1EBp9luSQy7g==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3",
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-initial": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-1.0.1.tgz",
+			"integrity": "sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-is-pseudo-class": {
+			"version": "4.0.4",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.4.tgz",
+			"integrity": "sha512-vTVO/uZixpTVAOQt3qZRUFJ/K1L03OfNkeJ8sFNDVNdVy/zW0h1L5WT7HIPMDUkvSrxQkFaCCybTZkUP7UESlQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/selector-specificity": "^3.0.1",
+				"postcss-selector-parser": "^6.0.13"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-logical-float-and-clear": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.1.tgz",
+			"integrity": "sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-logical-overflow": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-1.0.1.tgz",
+			"integrity": "sha512-Kl4lAbMg0iyztEzDhZuQw8Sj9r2uqFDcU1IPl+AAt2nue8K/f1i7ElvKtXkjhIAmKiy5h2EY8Gt/Cqg0pYFDCw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-logical-overscroll-behavior": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-1.0.1.tgz",
+			"integrity": "sha512-+kHamNxAnX8ojPCtV8WPcUP3XcqMFBSDuBuvT6MHgq7oX4IQxLIXKx64t7g9LiuJzE7vd06Q9qUYR6bh4YnGpQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-logical-resize": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.1.tgz",
+			"integrity": "sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-logical-viewport-units": {
+			"version": "2.0.4",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.4.tgz",
+			"integrity": "sha512-jetp/ArGAniWbjWBh5UQ07ztawfSbqCFd0QelX4R4pVIxrXahUEhz5VZHebMPVCg02J8GsQn0br6fdRpY6t7lw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-tokenizer": "^2.2.2"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-media-minmax": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.1.tgz",
+			"integrity": "sha512-mBY46/Hr+A8cDjoX0OoPRBOVrkANym9540dSB9rN3dllPZdM1E112i/tVxWsrR1s1yE9gfF0pk+7lf9l+qSeHA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-calc": "^1.1.5",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/media-query-list-parser": "^2.1.6"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": {
+			"version": "2.0.4",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.4.tgz",
+			"integrity": "sha512-IaIZZhH0Qy9UDn7u+N3cuwwPG0Po3ZKOdDh+ClR7xvisSqniG+PuVrOEWYJrFKOt2//UHLhd7KHDqr2u9LKS9Q==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/media-query-list-parser": "^2.1.6"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-nested-calc": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.1.tgz",
+			"integrity": "sha512-bwwababZpWRm0ByHaWBxTsDGTMhZKmtUNl3Wt0Eom8AY7ORgXx5qF9SSk1vEFrCi+HOfJT6M6W5KPgzXuQNRwQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-normalize-display-values": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.2.tgz",
+			"integrity": "sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-oklab-function": {
+			"version": "3.0.8",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.8.tgz",
+			"integrity": "sha512-L4xrwbgg+k08v+a88LDxJeIM6+kqaBJlYb/QgmEMfQpUbrfXTp87DuRc7utcRdDvY+qWK5vqz3h1xUtceB5LJQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-progressive-custom-properties": {
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.3.tgz",
+			"integrity": "sha512-WipTVh6JTMQfeIrzDV4wEPsV9NTzMK2jwXxyH6CGBktuWdivHnkioP/smp1x/0QDPQyx7NTS14RB+GV3zZZYEw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-relative-color-syntax": {
+			"version": "2.0.8",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.8.tgz",
+			"integrity": "sha512-wu/Oh7QKINpRXnmLMUbObVNlqwr843PSF4a3x3fMC0I+vUeoGqMfZuSPFtT+NnYYxfzUjEZ091GURPxee22VLQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-scope-pseudo-class": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.1.tgz",
+			"integrity": "sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-selector-parser": "^6.0.13"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-stepped-value-functions": {
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.3.tgz",
+			"integrity": "sha512-hzo9Wr3u7JJiM65/EyHgE/gJpBzhDwBSGOobFs2YQ0ZNTywUliYQoYJud1KKlByMRuhqvDLh9V95eIkLf/fZTQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-calc": "^1.1.5",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-text-decoration-shorthand": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.4.tgz",
+			"integrity": "sha512-yUZmbnUemgQmja7SpOZeU45+P49wNEgQguRdyTktFkZsHf7Gof+ZIYfvF6Cm+LsU1PwSupy4yUeEKKjX5+k6cQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/color-helpers": "^4.0.0",
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-trigonometric-functions": {
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.3.tgz",
+			"integrity": "sha512-T/npTbDuMZ3vktEMuA05p1oeVd12Sy47qZP1vFhzNMUOdXGCK9vlm0tUSIlV5DdlbTJqKqq9FhGitZH9VTKrfQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-calc": "^1.1.5",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/postcss-unset-value": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.1.tgz",
+			"integrity": "sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/@csstools/selector-specificity": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.1.tgz",
+			"integrity": "sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss-selector-parser": "^6.0.13"
+			}
+		},
 		"node_modules/@emmetio/abbreviation": {
 			"version": "2.3.3",
 			"resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz",
@@ -915,6 +1819,40 @@
 				"@jridgewell/sourcemap-codec": "1.4.14"
 			}
 		},
+		"node_modules/@mdx-js/mdx": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.0.tgz",
+			"integrity": "sha512-Icm0TBKBLYqroYbNW3BPnzMGn+7mwpQOK310aZ7+fkCtiU3aqv2cdcX+nd0Ydo3wI5Rx8bX2Z2QmGb/XcAClCw==",
+			"dependencies": {
+				"@types/estree": "^1.0.0",
+				"@types/estree-jsx": "^1.0.0",
+				"@types/hast": "^3.0.0",
+				"@types/mdx": "^2.0.0",
+				"collapse-white-space": "^2.0.0",
+				"devlop": "^1.0.0",
+				"estree-util-build-jsx": "^3.0.0",
+				"estree-util-is-identifier-name": "^3.0.0",
+				"estree-util-to-js": "^2.0.0",
+				"estree-walker": "^3.0.0",
+				"hast-util-to-estree": "^3.0.0",
+				"hast-util-to-jsx-runtime": "^2.0.0",
+				"markdown-extensions": "^2.0.0",
+				"periscopic": "^3.0.0",
+				"remark-mdx": "^3.0.0",
+				"remark-parse": "^11.0.0",
+				"remark-rehype": "^11.0.0",
+				"source-map": "^0.7.0",
+				"unified": "^11.0.0",
+				"unist-util-position-from-estree": "^2.0.0",
+				"unist-util-stringify-position": "^4.0.0",
+				"unist-util-visit": "^5.0.0",
+				"vfile": "^6.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
 		"node_modules/@nodelib/fs.scandir": {
 			"version": "2.1.5",
 			"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -948,9 +1886,9 @@
 			}
 		},
 		"node_modules/@rollup/rollup-android-arm-eabi": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.1.tgz",
-			"integrity": "sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz",
+			"integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==",
 			"cpu": [
 				"arm"
 			],
@@ -960,9 +1898,9 @@
 			]
 		},
 		"node_modules/@rollup/rollup-android-arm64": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.1.tgz",
-			"integrity": "sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz",
+			"integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==",
 			"cpu": [
 				"arm64"
 			],
@@ -972,9 +1910,9 @@
 			]
 		},
 		"node_modules/@rollup/rollup-darwin-arm64": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.1.tgz",
-			"integrity": "sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz",
+			"integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==",
 			"cpu": [
 				"arm64"
 			],
@@ -984,9 +1922,9 @@
 			]
 		},
 		"node_modules/@rollup/rollup-darwin-x64": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.1.tgz",
-			"integrity": "sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz",
+			"integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==",
 			"cpu": [
 				"x64"
 			],
@@ -996,9 +1934,21 @@
 			]
 		},
 		"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.1.tgz",
-			"integrity": "sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz",
+			"integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==",
+			"cpu": [
+				"arm"
+			],
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
+		"node_modules/@rollup/rollup-linux-arm-musleabihf": {
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz",
+			"integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==",
 			"cpu": [
 				"arm"
 			],
@@ -1008,9 +1958,9 @@
 			]
 		},
 		"node_modules/@rollup/rollup-linux-arm64-gnu": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.1.tgz",
-			"integrity": "sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz",
+			"integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==",
 			"cpu": [
 				"arm64"
 			],
@@ -1020,9 +1970,9 @@
 			]
 		},
 		"node_modules/@rollup/rollup-linux-arm64-musl": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.1.tgz",
-			"integrity": "sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz",
+			"integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==",
 			"cpu": [
 				"arm64"
 			],
@@ -1031,10 +1981,22 @@
 				"linux"
 			]
 		},
+		"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz",
+			"integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==",
+			"cpu": [
+				"ppc64"
+			],
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
 		"node_modules/@rollup/rollup-linux-riscv64-gnu": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.1.tgz",
-			"integrity": "sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz",
+			"integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==",
 			"cpu": [
 				"riscv64"
 			],
@@ -1043,10 +2005,22 @@
 				"linux"
 			]
 		},
+		"node_modules/@rollup/rollup-linux-s390x-gnu": {
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz",
+			"integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==",
+			"cpu": [
+				"s390x"
+			],
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
 		"node_modules/@rollup/rollup-linux-x64-gnu": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.1.tgz",
-			"integrity": "sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz",
+			"integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==",
 			"cpu": [
 				"x64"
 			],
@@ -1056,9 +2030,9 @@
 			]
 		},
 		"node_modules/@rollup/rollup-linux-x64-musl": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.1.tgz",
-			"integrity": "sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz",
+			"integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==",
 			"cpu": [
 				"x64"
 			],
@@ -1068,9 +2042,9 @@
 			]
 		},
 		"node_modules/@rollup/rollup-win32-arm64-msvc": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.1.tgz",
-			"integrity": "sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz",
+			"integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==",
 			"cpu": [
 				"arm64"
 			],
@@ -1080,9 +2054,9 @@
 			]
 		},
 		"node_modules/@rollup/rollup-win32-ia32-msvc": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.1.tgz",
-			"integrity": "sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz",
+			"integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==",
 			"cpu": [
 				"ia32"
 			],
@@ -1092,9 +2066,9 @@
 			]
 		},
 		"node_modules/@rollup/rollup-win32-x64-msvc": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.1.tgz",
-			"integrity": "sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz",
+			"integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==",
 			"cpu": [
 				"x64"
 			],
@@ -1103,6 +2077,14 @@
 				"win32"
 			]
 		},
+		"node_modules/@types/acorn": {
+			"version": "4.0.6",
+			"resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz",
+			"integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==",
+			"dependencies": {
+				"@types/estree": "*"
+			}
+		},
 		"node_modules/@types/babel__core": {
 			"version": "7.20.5",
 			"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@@ -1153,6 +2135,14 @@
 			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
 			"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
 		},
+		"node_modules/@types/estree-jsx": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.3.tgz",
+			"integrity": "sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==",
+			"dependencies": {
+				"@types/estree": "*"
+			}
+		},
 		"node_modules/@types/hast": {
 			"version": "3.0.3",
 			"resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz",
@@ -1169,6 +2159,11 @@
 				"@types/unist": "*"
 			}
 		},
+		"node_modules/@types/mdx": {
+			"version": "2.0.10",
+			"resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.10.tgz",
+			"integrity": "sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg=="
+		},
 		"node_modules/@types/ms": {
 			"version": "0.7.34",
 			"resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
@@ -1311,6 +2306,14 @@
 				"node": ">=0.4.0"
 			}
 		},
+		"node_modules/acorn-jsx": {
+			"version": "5.3.2",
+			"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+			"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+			"peerDependencies": {
+				"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+			}
+		},
 		"node_modules/ansi-align": {
 			"version": "3.0.1",
 			"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
@@ -1403,6 +2406,14 @@
 				"sprintf-js": "~1.0.2"
 			}
 		},
+		"node_modules/aria-query": {
+			"version": "5.3.0",
+			"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+			"integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+			"dependencies": {
+				"dequal": "^2.0.3"
+			}
+		},
 		"node_modules/array-iterate": {
 			"version": "2.0.1",
 			"resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz",
@@ -1412,14 +2423,22 @@
 				"url": "https://github.com/sponsors/wooorm"
 			}
 		},
+		"node_modules/astring": {
+			"version": "1.8.6",
+			"resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz",
+			"integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==",
+			"bin": {
+				"astring": "bin/astring"
+			}
+		},
 		"node_modules/astro": {
-			"version": "4.0.7",
-			"resolved": "https://registry.npmjs.org/astro/-/astro-4.0.7.tgz",
-			"integrity": "sha512-K+Ms2AAQvi6yERPuglcI69tnHyTT44JCjzqprSjw3uOwFX7N9obpLgbhmLMH1fPFTgzt3ZD7APjmtDPN51makw==",
+			"version": "4.2.1",
+			"resolved": "https://registry.npmjs.org/astro/-/astro-4.2.1.tgz",
+			"integrity": "sha512-TcrveW2/lohmljrbTUgcDxajEdF1yK+zBvb7SXroloGix/d4jkegO6GANFgvyy0zprMyajW7qgJEFyhWUX86Vw==",
 			"dependencies": {
 				"@astrojs/compiler": "^2.3.4",
 				"@astrojs/internal-helpers": "0.2.1",
-				"@astrojs/markdown-remark": "4.0.1",
+				"@astrojs/markdown-remark": "4.1.0",
 				"@astrojs/telemetry": "3.0.4",
 				"@babel/core": "^7.23.3",
 				"@babel/generator": "^7.23.3",
@@ -1429,6 +2448,8 @@
 				"@babel/types": "^7.23.3",
 				"@types/babel__core": "^7.20.4",
 				"acorn": "^8.11.2",
+				"aria-query": "^5.3.0",
+				"axobject-query": "^4.0.0",
 				"boxen": "^7.1.1",
 				"chokidar": "^3.5.3",
 				"ci-info": "^4.0.0",
@@ -1467,7 +2488,7 @@
 				"resolve": "^1.22.4",
 				"semver": "^7.5.4",
 				"server-destroy": "^1.0.1",
-				"shikiji": "^0.6.13",
+				"shikiji": "^0.9.18",
 				"string-width": "^7.0.0",
 				"strip-ansi": "^7.1.0",
 				"tsconfck": "^3.0.0",
@@ -1487,7 +2508,28 @@
 				"npm": ">=6.14.0"
 			},
 			"optionalDependencies": {
-				"sharp": "^0.32.5"
+				"sharp": "^0.32.6"
+			}
+		},
+		"node_modules/astro/node_modules/@astrojs/markdown-remark": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-4.1.0.tgz",
+			"integrity": "sha512-JnIy6zk+6f/SgSVMZecZFxQt0faT1uBckwYCuBxKH1hYYJsal8OOe+tx6JxfnyaV+xViyjUvQ28mmn+p/F5LkQ==",
+			"dependencies": {
+				"@astrojs/prism": "^3.0.0",
+				"github-slugger": "^2.0.0",
+				"import-meta-resolve": "^4.0.0",
+				"mdast-util-definitions": "^6.0.0",
+				"rehype-raw": "^7.0.0",
+				"rehype-stringify": "^10.0.0",
+				"remark-gfm": "^4.0.0",
+				"remark-parse": "^11.0.0",
+				"remark-rehype": "^11.0.0",
+				"remark-smartypants": "^2.0.0",
+				"shikiji": "^0.9.18",
+				"unified": "^11.0.4",
+				"unist-util-visit": "^5.0.0",
+				"vfile": "^6.0.1"
 			}
 		},
 		"node_modules/astro/node_modules/argparse": {
@@ -1506,6 +2548,58 @@
 				"js-yaml": "bin/js-yaml.js"
 			}
 		},
+		"node_modules/astro/node_modules/shikiji": {
+			"version": "0.9.19",
+			"resolved": "https://registry.npmjs.org/shikiji/-/shikiji-0.9.19.tgz",
+			"integrity": "sha512-Kw2NHWktdcdypCj1GkKpXH4o6Vxz8B8TykPlPuLHOGSV8VkhoCLcFOH4k19K4LXAQYRQmxg+0X/eM+m2sLhAkg==",
+			"dependencies": {
+				"shikiji-core": "0.9.19"
+			}
+		},
+		"node_modules/autoprefixer": {
+			"version": "10.4.16",
+			"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz",
+			"integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==",
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/postcss/"
+				},
+				{
+					"type": "tidelift",
+					"url": "https://tidelift.com/funding/github/npm/autoprefixer"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"dependencies": {
+				"browserslist": "^4.21.10",
+				"caniuse-lite": "^1.0.30001538",
+				"fraction.js": "^4.3.6",
+				"normalize-range": "^0.1.2",
+				"picocolors": "^1.0.0",
+				"postcss-value-parser": "^4.2.0"
+			},
+			"bin": {
+				"autoprefixer": "bin/autoprefixer"
+			},
+			"engines": {
+				"node": "^10 || ^12 || >=14"
+			},
+			"peerDependencies": {
+				"postcss": "^8.1.0"
+			}
+		},
+		"node_modules/axobject-query": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz",
+			"integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==",
+			"dependencies": {
+				"dequal": "^2.0.3"
+			}
+		},
 		"node_modules/b4a": {
 			"version": "1.6.4",
 			"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz",
@@ -1617,11 +2711,11 @@
 			}
 		},
 		"node_modules/braces": {
-			"version": "3.0.2",
-			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-			"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+			"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
 			"dependencies": {
-				"fill-range": "^7.0.1"
+				"fill-range": "^7.1.1"
 			},
 			"engines": {
 				"node": ">=8"
@@ -1693,9 +2787,9 @@
 			}
 		},
 		"node_modules/caniuse-lite": {
-			"version": "1.0.30001570",
-			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz",
-			"integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==",
+			"version": "1.0.30001634",
+			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001634.tgz",
+			"integrity": "sha512-fbBYXQ9q3+yp1q1gBk86tOFs4pyn/yxFm5ZNP18OXJDfA3txImOY9PhfxVggZ4vRHDqoU8NrKU81eN0OtzOgRA==",
 			"funding": [
 				{
 					"type": "opencollective",
@@ -1760,6 +2854,15 @@
 				"url": "https://github.com/sponsors/wooorm"
 			}
 		},
+		"node_modules/character-reference-invalid": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
+			"integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/wooorm"
+			}
+		},
 		"node_modules/chokidar": {
 			"version": "3.5.3",
 			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
@@ -1946,6 +3049,15 @@
 				"node": ">=6"
 			}
 		},
+		"node_modules/collapse-white-space": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
+			"integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==",
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/wooorm"
+			}
+		},
 		"node_modules/color": {
 			"version": "4.2.3",
 			"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
@@ -2040,6 +3152,103 @@
 				"node": ">= 8"
 			}
 		},
+		"node_modules/css-blank-pseudo": {
+			"version": "6.0.1",
+			"resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-6.0.1.tgz",
+			"integrity": "sha512-goSnEITByxTzU4Oh5oJZrEWudxTqk7L6IXj1UW69pO6Hv0UdX+Vsrt02FFu5DweRh2bLu6WpX/+zsQCu5O1gKw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-selector-parser": "^6.0.13"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/css-has-pseudo": {
+			"version": "6.0.1",
+			"resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.1.tgz",
+			"integrity": "sha512-WwoVKqNxApfEI7dWFyaHoeFCcUPD+lPyjL6lNpRUNX7IyIUuVpawOTwwA5D0ZR6V2xQZonNPVj8kEcxzEaAQfQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/selector-specificity": "^3.0.1",
+				"postcss-selector-parser": "^6.0.13",
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/css-prefers-color-scheme": {
+			"version": "9.0.1",
+			"resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.1.tgz",
+			"integrity": "sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/cssdb": {
+			"version": "7.10.0",
+			"resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.10.0.tgz",
+			"integrity": "sha512-yGZ5tmA57gWh/uvdQBHs45wwFY0IBh3ypABk5sEubPBPSzXzkNgsWReqx7gdx6uhC+QoFBe+V8JwBB9/hQ6cIA==",
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				}
+			]
+		},
+		"node_modules/cssesc": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+			"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+			"bin": {
+				"cssesc": "bin/cssesc"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
 		"node_modules/debug": {
 			"version": "4.3.4",
 			"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -2272,6 +3481,69 @@
 				"node": ">=4"
 			}
 		},
+		"node_modules/estree-util-attach-comments": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz",
+			"integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==",
+			"dependencies": {
+				"@types/estree": "^1.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
+		"node_modules/estree-util-build-jsx": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz",
+			"integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==",
+			"dependencies": {
+				"@types/estree-jsx": "^1.0.0",
+				"devlop": "^1.0.0",
+				"estree-util-is-identifier-name": "^3.0.0",
+				"estree-walker": "^3.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
+		"node_modules/estree-util-is-identifier-name": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
+			"integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
+		"node_modules/estree-util-to-js": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz",
+			"integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==",
+			"dependencies": {
+				"@types/estree-jsx": "^1.0.0",
+				"astring": "^1.8.0",
+				"source-map": "^0.7.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
+		"node_modules/estree-util-visit": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz",
+			"integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==",
+			"dependencies": {
+				"@types/estree-jsx": "^1.0.0",
+				"@types/unist": "^3.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
 		"node_modules/estree-walker": {
 			"version": "3.0.3",
 			"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
@@ -2362,9 +3634,9 @@
 			}
 		},
 		"node_modules/fill-range": {
-			"version": "7.0.1",
-			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-			"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+			"version": "7.1.1",
+			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+			"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
 			"dependencies": {
 				"to-regex-range": "^5.0.1"
 			},
@@ -2404,6 +3676,18 @@
 				"node": ">=8"
 			}
 		},
+		"node_modules/fraction.js": {
+			"version": "4.3.7",
+			"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+			"integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+			"engines": {
+				"node": "*"
+			},
+			"funding": {
+				"type": "patreon",
+				"url": "https://github.com/sponsors/rawify"
+			}
+		},
 		"node_modules/fs-constants": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
@@ -2609,6 +3893,33 @@
 				"url": "https://opencollective.com/unified"
 			}
 		},
+		"node_modules/hast-util-to-estree": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz",
+			"integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==",
+			"dependencies": {
+				"@types/estree": "^1.0.0",
+				"@types/estree-jsx": "^1.0.0",
+				"@types/hast": "^3.0.0",
+				"comma-separated-tokens": "^2.0.0",
+				"devlop": "^1.0.0",
+				"estree-util-attach-comments": "^3.0.0",
+				"estree-util-is-identifier-name": "^3.0.0",
+				"hast-util-whitespace": "^3.0.0",
+				"mdast-util-mdx-expression": "^2.0.0",
+				"mdast-util-mdx-jsx": "^3.0.0",
+				"mdast-util-mdxjs-esm": "^2.0.0",
+				"property-information": "^6.0.0",
+				"space-separated-tokens": "^2.0.0",
+				"style-to-object": "^0.4.0",
+				"unist-util-position": "^5.0.0",
+				"zwitch": "^2.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
 		"node_modules/hast-util-to-html": {
 			"version": "9.0.0",
 			"resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.0.tgz",
@@ -2632,6 +3943,45 @@
 				"url": "https://opencollective.com/unified"
 			}
 		},
+		"node_modules/hast-util-to-jsx-runtime": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz",
+			"integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==",
+			"dependencies": {
+				"@types/estree": "^1.0.0",
+				"@types/hast": "^3.0.0",
+				"@types/unist": "^3.0.0",
+				"comma-separated-tokens": "^2.0.0",
+				"devlop": "^1.0.0",
+				"estree-util-is-identifier-name": "^3.0.0",
+				"hast-util-whitespace": "^3.0.0",
+				"mdast-util-mdx-expression": "^2.0.0",
+				"mdast-util-mdx-jsx": "^3.0.0",
+				"mdast-util-mdxjs-esm": "^2.0.0",
+				"property-information": "^6.0.0",
+				"space-separated-tokens": "^2.0.0",
+				"style-to-object": "^1.0.0",
+				"unist-util-position": "^5.0.0",
+				"vfile-message": "^4.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
+		"node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": {
+			"version": "0.2.2",
+			"resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz",
+			"integrity": "sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ=="
+		},
+		"node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.5.tgz",
+			"integrity": "sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==",
+			"dependencies": {
+				"inline-style-parser": "0.2.2"
+			}
+		},
 		"node_modules/hast-util-to-parse5": {
 			"version": "8.0.0",
 			"resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz",
@@ -2706,9 +4056,13 @@
 			}
 		},
 		"node_modules/iconoir": {
-			"version": "6.1.0",
-			"resolved": "https://registry.npmjs.org/iconoir/-/iconoir-6.1.0.tgz",
-			"integrity": "sha512-K8Jrqkp51MdcDBzfiSY2vt9gHsujwEmoOHlWI2Wk++cgVvR1bP+fMLFmwBTPHduZ3aOK95snE6rUmlLPH7Yhnw=="
+			"version": "7.2.0",
+			"resolved": "https://registry.npmjs.org/iconoir/-/iconoir-7.2.0.tgz",
+			"integrity": "sha512-uGaTCzdvQUAfNMDM2yJieGVM2KbW+8/8nkyLVtvXX+79tHQWxgPhpvk9g7rnZcbQuZ/YFAdP+0HB3eAmk+l2qw==",
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/iconoir"
+			}
 		},
 		"node_modules/iconv-lite": {
 			"version": "0.4.24",
@@ -2760,6 +4114,33 @@
 			"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
 			"optional": true
 		},
+		"node_modules/inline-style-parser": {
+			"version": "0.1.1",
+			"resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
+			"integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="
+		},
+		"node_modules/is-alphabetical": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
+			"integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/wooorm"
+			}
+		},
+		"node_modules/is-alphanumerical": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
+			"integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
+			"dependencies": {
+				"is-alphabetical": "^2.0.0",
+				"is-decimal": "^2.0.0"
+			},
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/wooorm"
+			}
+		},
 		"node_modules/is-arrayish": {
 			"version": "0.3.2",
 			"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
@@ -2810,6 +4191,15 @@
 				"url": "https://github.com/sponsors/ljharb"
 			}
 		},
+		"node_modules/is-decimal": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
+			"integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/wooorm"
+			}
+		},
 		"node_modules/is-docker": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
@@ -2859,6 +4249,15 @@
 				"node": ">=0.10.0"
 			}
 		},
+		"node_modules/is-hexadecimal": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
+			"integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/wooorm"
+			}
+		},
 		"node_modules/is-inside-container": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
@@ -2906,6 +4305,14 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/is-reference": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz",
+			"integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==",
+			"dependencies": {
+				"@types/estree": "*"
+			}
+		},
 		"node_modules/is-stream": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
@@ -3007,6 +4414,11 @@
 				"node": ">=6"
 			}
 		},
+		"node_modules/lite-youtube-embed": {
+			"version": "0.2.0",
+			"resolved": "https://registry.npmjs.org/lite-youtube-embed/-/lite-youtube-embed-0.2.0.tgz",
+			"integrity": "sha512-XXXAk5sbvtjjwbie3XG+6HppgTm1HTGL/Uk9z9NkJH53o7puZLur434heHzAjkS60hZB3vT4ls25zl5rMiX4EA=="
+		},
 		"node_modules/load-yaml-file": {
 			"version": "0.2.0",
 			"resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz",
@@ -3099,6 +4511,17 @@
 			"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
 			"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
 		},
+		"node_modules/markdown-extensions": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz",
+			"integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==",
+			"engines": {
+				"node": ">=16"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
 		"node_modules/markdown-table": {
 			"version": "3.0.3",
 			"resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz",
@@ -3266,6 +4689,80 @@
 				"url": "https://opencollective.com/unified"
 			}
 		},
+		"node_modules/mdast-util-mdx": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz",
+			"integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==",
+			"dependencies": {
+				"mdast-util-from-markdown": "^2.0.0",
+				"mdast-util-mdx-expression": "^2.0.0",
+				"mdast-util-mdx-jsx": "^3.0.0",
+				"mdast-util-mdxjs-esm": "^2.0.0",
+				"mdast-util-to-markdown": "^2.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
+		"node_modules/mdast-util-mdx-expression": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz",
+			"integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==",
+			"dependencies": {
+				"@types/estree-jsx": "^1.0.0",
+				"@types/hast": "^3.0.0",
+				"@types/mdast": "^4.0.0",
+				"devlop": "^1.0.0",
+				"mdast-util-from-markdown": "^2.0.0",
+				"mdast-util-to-markdown": "^2.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
+		"node_modules/mdast-util-mdx-jsx": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.0.0.tgz",
+			"integrity": "sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA==",
+			"dependencies": {
+				"@types/estree-jsx": "^1.0.0",
+				"@types/hast": "^3.0.0",
+				"@types/mdast": "^4.0.0",
+				"@types/unist": "^3.0.0",
+				"ccount": "^2.0.0",
+				"devlop": "^1.1.0",
+				"mdast-util-from-markdown": "^2.0.0",
+				"mdast-util-to-markdown": "^2.0.0",
+				"parse-entities": "^4.0.0",
+				"stringify-entities": "^4.0.0",
+				"unist-util-remove-position": "^5.0.0",
+				"unist-util-stringify-position": "^4.0.0",
+				"vfile-message": "^4.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
+		"node_modules/mdast-util-mdxjs-esm": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
+			"integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
+			"dependencies": {
+				"@types/estree-jsx": "^1.0.0",
+				"@types/hast": "^3.0.0",
+				"@types/mdast": "^4.0.0",
+				"devlop": "^1.0.0",
+				"mdast-util-from-markdown": "^2.0.0",
+				"mdast-util-to-markdown": "^2.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
 		"node_modules/mdast-util-phrasing": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz",
@@ -3523,6 +5020,103 @@
 				"url": "https://opencollective.com/unified"
 			}
 		},
+		"node_modules/micromark-extension-mdx-expression": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz",
+			"integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==",
+			"funding": [
+				{
+					"type": "GitHub Sponsors",
+					"url": "https://github.com/sponsors/unifiedjs"
+				},
+				{
+					"type": "OpenCollective",
+					"url": "https://opencollective.com/unified"
+				}
+			],
+			"dependencies": {
+				"@types/estree": "^1.0.0",
+				"devlop": "^1.0.0",
+				"micromark-factory-mdx-expression": "^2.0.0",
+				"micromark-factory-space": "^2.0.0",
+				"micromark-util-character": "^2.0.0",
+				"micromark-util-events-to-acorn": "^2.0.0",
+				"micromark-util-symbol": "^2.0.0",
+				"micromark-util-types": "^2.0.0"
+			}
+		},
+		"node_modules/micromark-extension-mdx-jsx": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz",
+			"integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==",
+			"dependencies": {
+				"@types/acorn": "^4.0.0",
+				"@types/estree": "^1.0.0",
+				"devlop": "^1.0.0",
+				"estree-util-is-identifier-name": "^3.0.0",
+				"micromark-factory-mdx-expression": "^2.0.0",
+				"micromark-factory-space": "^2.0.0",
+				"micromark-util-character": "^2.0.0",
+				"micromark-util-symbol": "^2.0.0",
+				"micromark-util-types": "^2.0.0",
+				"vfile-message": "^4.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
+		"node_modules/micromark-extension-mdx-md": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz",
+			"integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==",
+			"dependencies": {
+				"micromark-util-types": "^2.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
+		"node_modules/micromark-extension-mdxjs": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz",
+			"integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==",
+			"dependencies": {
+				"acorn": "^8.0.0",
+				"acorn-jsx": "^5.0.0",
+				"micromark-extension-mdx-expression": "^3.0.0",
+				"micromark-extension-mdx-jsx": "^3.0.0",
+				"micromark-extension-mdx-md": "^2.0.0",
+				"micromark-extension-mdxjs-esm": "^3.0.0",
+				"micromark-util-combine-extensions": "^2.0.0",
+				"micromark-util-types": "^2.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
+		"node_modules/micromark-extension-mdxjs-esm": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz",
+			"integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==",
+			"dependencies": {
+				"@types/estree": "^1.0.0",
+				"devlop": "^1.0.0",
+				"micromark-core-commonmark": "^2.0.0",
+				"micromark-util-character": "^2.0.0",
+				"micromark-util-events-to-acorn": "^2.0.0",
+				"micromark-util-symbol": "^2.0.0",
+				"micromark-util-types": "^2.0.0",
+				"unist-util-position-from-estree": "^2.0.0",
+				"vfile-message": "^4.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
 		"node_modules/micromark-factory-destination": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
@@ -3564,6 +5158,31 @@
 				"micromark-util-types": "^2.0.0"
 			}
 		},
+		"node_modules/micromark-factory-mdx-expression": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz",
+			"integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==",
+			"funding": [
+				{
+					"type": "GitHub Sponsors",
+					"url": "https://github.com/sponsors/unifiedjs"
+				},
+				{
+					"type": "OpenCollective",
+					"url": "https://opencollective.com/unified"
+				}
+			],
+			"dependencies": {
+				"@types/estree": "^1.0.0",
+				"devlop": "^1.0.0",
+				"micromark-util-character": "^2.0.0",
+				"micromark-util-events-to-acorn": "^2.0.0",
+				"micromark-util-symbol": "^2.0.0",
+				"micromark-util-types": "^2.0.0",
+				"unist-util-position-from-estree": "^2.0.0",
+				"vfile-message": "^4.0.0"
+			}
+		},
 		"node_modules/micromark-factory-space": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
@@ -3755,6 +5374,31 @@
 				}
 			]
 		},
+		"node_modules/micromark-util-events-to-acorn": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz",
+			"integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==",
+			"funding": [
+				{
+					"type": "GitHub Sponsors",
+					"url": "https://github.com/sponsors/unifiedjs"
+				},
+				{
+					"type": "OpenCollective",
+					"url": "https://opencollective.com/unified"
+				}
+			],
+			"dependencies": {
+				"@types/acorn": "^4.0.0",
+				"@types/estree": "^1.0.0",
+				"@types/unist": "^3.0.0",
+				"devlop": "^1.0.0",
+				"estree-util-visit": "^2.0.0",
+				"micromark-util-symbol": "^2.0.0",
+				"micromark-util-types": "^2.0.0",
+				"vfile-message": "^4.0.0"
+			}
+		},
 		"node_modules/micromark-util-html-tag-name": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
@@ -4008,9 +5652,9 @@
 			}
 		},
 		"node_modules/node-abi": {
-			"version": "3.52.0",
-			"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.52.0.tgz",
-			"integrity": "sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ==",
+			"version": "3.54.0",
+			"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz",
+			"integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==",
 			"optional": true,
 			"dependencies": {
 				"semver": "^7.3.5"
@@ -4038,6 +5682,14 @@
 				"node": ">=0.10.0"
 			}
 		},
+		"node_modules/normalize-range": {
+			"version": "0.1.2",
+			"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+			"integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
 		"node_modules/npm-run-path": {
 			"version": "5.1.0",
 			"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
@@ -4222,6 +5874,30 @@
 				"node": ">=6"
 			}
 		},
+		"node_modules/parse-entities": {
+			"version": "4.0.1",
+			"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz",
+			"integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==",
+			"dependencies": {
+				"@types/unist": "^2.0.0",
+				"character-entities": "^2.0.0",
+				"character-entities-legacy": "^3.0.0",
+				"character-reference-invalid": "^2.0.0",
+				"decode-named-character-reference": "^1.0.0",
+				"is-alphanumerical": "^2.0.0",
+				"is-decimal": "^2.0.0",
+				"is-hexadecimal": "^2.0.0"
+			},
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/wooorm"
+			}
+		},
+		"node_modules/parse-entities/node_modules/@types/unist": {
+			"version": "2.0.10",
+			"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
+			"integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
+		},
 		"node_modules/parse-latin": {
 			"version": "5.0.1",
 			"resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-5.0.1.tgz",
@@ -4278,6 +5954,16 @@
 			"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz",
 			"integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw=="
 		},
+		"node_modules/periscopic": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
+			"integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
+			"dependencies": {
+				"@types/estree": "^1.0.0",
+				"estree-walker": "^3.0.0",
+				"is-reference": "^3.0.0"
+			}
+		},
 		"node_modules/picocolors": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -4362,9 +6048,9 @@
 			}
 		},
 		"node_modules/postcss": {
-			"version": "8.4.32",
-			"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
-			"integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
+			"version": "8.4.38",
+			"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+			"integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
 			"funding": [
 				{
 					"type": "opencollective",
@@ -4382,12 +6068,653 @@
 			"dependencies": {
 				"nanoid": "^3.3.7",
 				"picocolors": "^1.0.0",
-				"source-map-js": "^1.0.2"
+				"source-map-js": "^1.2.0"
 			},
 			"engines": {
 				"node": "^10 || ^12 || >=14"
 			}
 		},
+		"node_modules/postcss-attribute-case-insensitive": {
+			"version": "6.0.2",
+			"resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz",
+			"integrity": "sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==",
+			"dependencies": {
+				"postcss-selector-parser": "^6.0.10"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/csstools"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-clamp": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz",
+			"integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==",
+			"dependencies": {
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": ">=7.6.0"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4.6"
+			}
+		},
+		"node_modules/postcss-color-functional-notation": {
+			"version": "6.0.3",
+			"resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.3.tgz",
+			"integrity": "sha512-2jBr3H0sk3qGh/3BkmLsOKcYyVfSlM1K2QQYVU7eW5mkg7ZOQ4aU/Rtbh7vJ9FxAfgf8iHRwXBsQkHqUxzTkXw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-color-hex-alpha": {
+			"version": "9.0.3",
+			"resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.3.tgz",
+			"integrity": "sha512-7sEHU4tAS6htlxun8AB9LDrCXoljxaC34tFVRlYKcvO+18r5fvGiXgv5bQzN40+4gXLCyWSMRK5FK31244WcCA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-color-rebeccapurple": {
+			"version": "9.0.2",
+			"resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.2.tgz",
+			"integrity": "sha512-f+RDEAPW2m8UbJWkSpRfV+QxhSaQhDMihI75DVGJJh4oRIoegjheeRtINFJum9D8BqGJcvD4GLjggTvCwZ4zuA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-custom-media": {
+			"version": "10.0.2",
+			"resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz",
+			"integrity": "sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/cascade-layer-name-parser": "^1.0.5",
+				"@csstools/css-parser-algorithms": "^2.3.2",
+				"@csstools/css-tokenizer": "^2.2.1",
+				"@csstools/media-query-list-parser": "^2.1.5"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-custom-properties": {
+			"version": "13.3.3",
+			"resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.3.tgz",
+			"integrity": "sha512-xLmILb2R83aG4X++iVFg8TWadOlc45xiyFHRZD6Yhhu2igrTHXL6C75AEWqx6k9lxrr9sK5rcfUI9JvTCxBTvA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/cascade-layer-name-parser": "^1.0.6",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-custom-selectors": {
+			"version": "7.1.6",
+			"resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz",
+			"integrity": "sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/cascade-layer-name-parser": "^1.0.5",
+				"@csstools/css-parser-algorithms": "^2.3.2",
+				"@csstools/css-tokenizer": "^2.2.1",
+				"postcss-selector-parser": "^6.0.13"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-dir-pseudo-class": {
+			"version": "8.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.1.tgz",
+			"integrity": "sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-selector-parser": "^6.0.13"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-double-position-gradients": {
+			"version": "5.0.3",
+			"resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.3.tgz",
+			"integrity": "sha512-QKYpwmaSm6HcdS0ndAuWSNNMv78R1oSySoh3mYBmctHWr2KWcwPJVakdOyU4lvFVW0GRu9wfIQwGeM4p3xU9ow==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3",
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-focus-visible": {
+			"version": "9.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-9.0.1.tgz",
+			"integrity": "sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-selector-parser": "^6.0.13"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-focus-within": {
+			"version": "8.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-8.0.1.tgz",
+			"integrity": "sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-selector-parser": "^6.0.13"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-font-variant": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz",
+			"integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==",
+			"peerDependencies": {
+				"postcss": "^8.1.0"
+			}
+		},
+		"node_modules/postcss-gap-properties": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-5.0.1.tgz",
+			"integrity": "sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-image-set-function": {
+			"version": "6.0.2",
+			"resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-6.0.2.tgz",
+			"integrity": "sha512-/O1xwqpJiz/apxGQi7UUfv1xUcorvkHZfvCYHPpRxxZj2WvjD0rg0+/+c+u5/Do5CpUg3XvfYxMrhcnjW1ArDQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-lab-function": {
+			"version": "6.0.8",
+			"resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.8.tgz",
+			"integrity": "sha512-agYs7R9Z5gnX837fCkH8TEQIHdhyDsMPPnpuuENt/dxoDVAykBaqbdxIN4DagOj+ZQo20iRNNJeY3MsFcdI6Sg==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-logical": {
+			"version": "7.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-7.0.1.tgz",
+			"integrity": "sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-nesting": {
+			"version": "12.0.2",
+			"resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.0.2.tgz",
+			"integrity": "sha512-63PpJHSeNs93S3ZUIyi+7kKx4JqOIEJ6QYtG3x+0qA4J03+4n0iwsyA1GAHyWxsHYljQS4/4ZK1o2sMi70b5wQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/selector-specificity": "^3.0.1",
+				"postcss-selector-parser": "^6.0.13"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-opacity-percentage": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz",
+			"integrity": "sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==",
+			"funding": [
+				{
+					"type": "kofi",
+					"url": "https://ko-fi.com/mrcgrtz"
+				},
+				{
+					"type": "liberapay",
+					"url": "https://liberapay.com/mrcgrtz"
+				}
+			],
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.2"
+			}
+		},
+		"node_modules/postcss-overflow-shorthand": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.1.tgz",
+			"integrity": "sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-page-break": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz",
+			"integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==",
+			"peerDependencies": {
+				"postcss": "^8"
+			}
+		},
+		"node_modules/postcss-place": {
+			"version": "9.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-9.0.1.tgz",
+			"integrity": "sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-preset-env": {
+			"version": "9.3.0",
+			"resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.3.0.tgz",
+			"integrity": "sha512-ycw6doPrqV6QxDCtgiyGDef61bEfiSc59HGM4gOw/wxQxmKnhuEery61oOC/5ViENz/ycpRsuhTexs1kUBTvVw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"@csstools/postcss-cascade-layers": "^4.0.1",
+				"@csstools/postcss-color-function": "^3.0.7",
+				"@csstools/postcss-color-mix-function": "^2.0.7",
+				"@csstools/postcss-exponential-functions": "^1.0.1",
+				"@csstools/postcss-font-format-keywords": "^3.0.0",
+				"@csstools/postcss-gamut-mapping": "^1.0.0",
+				"@csstools/postcss-gradients-interpolation-method": "^4.0.7",
+				"@csstools/postcss-hwb-function": "^3.0.6",
+				"@csstools/postcss-ic-unit": "^3.0.2",
+				"@csstools/postcss-initial": "^1.0.0",
+				"@csstools/postcss-is-pseudo-class": "^4.0.3",
+				"@csstools/postcss-logical-float-and-clear": "^2.0.0",
+				"@csstools/postcss-logical-overflow": "^1.0.0",
+				"@csstools/postcss-logical-overscroll-behavior": "^1.0.0",
+				"@csstools/postcss-logical-resize": "^2.0.0",
+				"@csstools/postcss-logical-viewport-units": "^2.0.3",
+				"@csstools/postcss-media-minmax": "^1.1.0",
+				"@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.3",
+				"@csstools/postcss-nested-calc": "^3.0.0",
+				"@csstools/postcss-normalize-display-values": "^3.0.1",
+				"@csstools/postcss-oklab-function": "^3.0.7",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.2",
+				"@csstools/postcss-relative-color-syntax": "^2.0.7",
+				"@csstools/postcss-scope-pseudo-class": "^3.0.0",
+				"@csstools/postcss-stepped-value-functions": "^3.0.2",
+				"@csstools/postcss-text-decoration-shorthand": "^3.0.3",
+				"@csstools/postcss-trigonometric-functions": "^3.0.2",
+				"@csstools/postcss-unset-value": "^3.0.0",
+				"autoprefixer": "^10.4.16",
+				"browserslist": "^4.22.1",
+				"css-blank-pseudo": "^6.0.0",
+				"css-has-pseudo": "^6.0.0",
+				"css-prefers-color-scheme": "^9.0.0",
+				"cssdb": "^7.9.0",
+				"postcss-attribute-case-insensitive": "^6.0.2",
+				"postcss-clamp": "^4.1.0",
+				"postcss-color-functional-notation": "^6.0.2",
+				"postcss-color-hex-alpha": "^9.0.2",
+				"postcss-color-rebeccapurple": "^9.0.1",
+				"postcss-custom-media": "^10.0.2",
+				"postcss-custom-properties": "^13.3.2",
+				"postcss-custom-selectors": "^7.1.6",
+				"postcss-dir-pseudo-class": "^8.0.0",
+				"postcss-double-position-gradients": "^5.0.2",
+				"postcss-focus-visible": "^9.0.0",
+				"postcss-focus-within": "^8.0.0",
+				"postcss-font-variant": "^5.0.0",
+				"postcss-gap-properties": "^5.0.0",
+				"postcss-image-set-function": "^6.0.1",
+				"postcss-lab-function": "^6.0.7",
+				"postcss-logical": "^7.0.0",
+				"postcss-nesting": "^12.0.1",
+				"postcss-opacity-percentage": "^2.0.0",
+				"postcss-overflow-shorthand": "^5.0.0",
+				"postcss-page-break": "^3.0.4",
+				"postcss-place": "^9.0.0",
+				"postcss-pseudo-class-any-link": "^9.0.0",
+				"postcss-replace-overflow-wrap": "^4.0.0",
+				"postcss-selector-not": "^7.0.1",
+				"postcss-value-parser": "^4.2.0"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-pseudo-class-any-link": {
+			"version": "9.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.1.tgz",
+			"integrity": "sha512-cKYGGZ9yzUZi+dZd7XT2M8iSDfo+T2Ctbpiizf89uBTBfIpZpjvTavzIJXpCReMVXSKROqzpxClNu6fz4DHM0Q==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"dependencies": {
+				"postcss-selector-parser": "^6.0.13"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-replace-overflow-wrap": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz",
+			"integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==",
+			"peerDependencies": {
+				"postcss": "^8.0.3"
+			}
+		},
+		"node_modules/postcss-selector-not": {
+			"version": "7.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz",
+			"integrity": "sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==",
+			"dependencies": {
+				"postcss-selector-parser": "^6.0.10"
+			},
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/csstools"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4"
+			}
+		},
+		"node_modules/postcss-selector-parser": {
+			"version": "6.0.15",
+			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
+			"integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
+			"dependencies": {
+				"cssesc": "^3.0.0",
+				"util-deprecate": "^1.0.2"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/postcss-value-parser": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+			"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+		},
 		"node_modules/prebuild-install": {
 			"version": "7.1.1",
 			"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
@@ -4698,6 +7025,19 @@
 				"url": "https://opencollective.com/unified"
 			}
 		},
+		"node_modules/remark-mdx": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.0.tgz",
+			"integrity": "sha512-O7yfjuC6ra3NHPbRVxfflafAj3LTwx3b73aBvkEFU5z4PsD6FD4vrqJAkE5iNGLz71GdjXfgRqm3SQ0h0VuE7g==",
+			"dependencies": {
+				"mdast-util-mdx": "^3.0.0",
+				"micromark-extension-mdxjs": "^3.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
 		"node_modules/remark-parse": {
 			"version": "11.0.0",
 			"resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
@@ -5231,9 +7571,12 @@
 			}
 		},
 		"node_modules/rollup": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.1.tgz",
-			"integrity": "sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
+			"integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
+			"dependencies": {
+				"@types/estree": "1.0.5"
+			},
 			"bin": {
 				"rollup": "dist/bin/rollup"
 			},
@@ -5242,19 +7585,22 @@
 				"npm": ">=8.0.0"
 			},
 			"optionalDependencies": {
-				"@rollup/rollup-android-arm-eabi": "4.9.1",
-				"@rollup/rollup-android-arm64": "4.9.1",
-				"@rollup/rollup-darwin-arm64": "4.9.1",
-				"@rollup/rollup-darwin-x64": "4.9.1",
-				"@rollup/rollup-linux-arm-gnueabihf": "4.9.1",
-				"@rollup/rollup-linux-arm64-gnu": "4.9.1",
-				"@rollup/rollup-linux-arm64-musl": "4.9.1",
-				"@rollup/rollup-linux-riscv64-gnu": "4.9.1",
-				"@rollup/rollup-linux-x64-gnu": "4.9.1",
-				"@rollup/rollup-linux-x64-musl": "4.9.1",
-				"@rollup/rollup-win32-arm64-msvc": "4.9.1",
-				"@rollup/rollup-win32-ia32-msvc": "4.9.1",
-				"@rollup/rollup-win32-x64-msvc": "4.9.1",
+				"@rollup/rollup-android-arm-eabi": "4.18.0",
+				"@rollup/rollup-android-arm64": "4.18.0",
+				"@rollup/rollup-darwin-arm64": "4.18.0",
+				"@rollup/rollup-darwin-x64": "4.18.0",
+				"@rollup/rollup-linux-arm-gnueabihf": "4.18.0",
+				"@rollup/rollup-linux-arm-musleabihf": "4.18.0",
+				"@rollup/rollup-linux-arm64-gnu": "4.18.0",
+				"@rollup/rollup-linux-arm64-musl": "4.18.0",
+				"@rollup/rollup-linux-powerpc64le-gnu": "4.18.0",
+				"@rollup/rollup-linux-riscv64-gnu": "4.18.0",
+				"@rollup/rollup-linux-s390x-gnu": "4.18.0",
+				"@rollup/rollup-linux-x64-gnu": "4.18.0",
+				"@rollup/rollup-linux-x64-musl": "4.18.0",
+				"@rollup/rollup-win32-arm64-msvc": "4.18.0",
+				"@rollup/rollup-win32-ia32-msvc": "4.18.0",
+				"@rollup/rollup-win32-x64-msvc": "4.18.0",
 				"fsevents": "~2.3.2"
 			}
 		},
@@ -5406,6 +7752,11 @@
 				"hast-util-to-html": "^9.0.0"
 			}
 		},
+		"node_modules/shikiji-core": {
+			"version": "0.9.19",
+			"resolved": "https://registry.npmjs.org/shikiji-core/-/shikiji-core-0.9.19.tgz",
+			"integrity": "sha512-AFJu/vcNT21t0e6YrfadZ+9q86gvPum6iywRyt1OtIPjPFe25RQnYJyxHQPMLKCCWA992TPxmEmbNcOZCAJclw=="
+		},
 		"node_modules/signal-exit": {
 			"version": "4.1.0",
 			"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
@@ -5499,10 +7850,18 @@
 			"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
 			"integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
 		},
+		"node_modules/source-map": {
+			"version": "0.7.4",
+			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+			"integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+			"engines": {
+				"node": ">= 8"
+			}
+		},
 		"node_modules/source-map-js": {
-			"version": "1.0.2",
-			"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-			"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+			"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -5653,6 +8012,14 @@
 				"node": ">=0.10.0"
 			}
 		},
+		"node_modules/style-to-object": {
+			"version": "0.4.4",
+			"resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz",
+			"integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==",
+			"dependencies": {
+				"inline-style-parser": "0.1.1"
+			}
+		},
 		"node_modules/supports-color": {
 			"version": "5.5.0",
 			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -5870,6 +8237,31 @@
 				"url": "https://opencollective.com/unified"
 			}
 		},
+		"node_modules/unist-util-position-from-estree": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz",
+			"integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==",
+			"dependencies": {
+				"@types/unist": "^3.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
+		"node_modules/unist-util-remove-position": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
+			"integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
+			"dependencies": {
+				"@types/unist": "^3.0.0",
+				"unist-util-visit": "^5.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/unified"
+			}
+		},
 		"node_modules/unist-util-stringify-position": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
@@ -6001,13 +8393,13 @@
 			}
 		},
 		"node_modules/vite": {
-			"version": "5.0.10",
-			"resolved": "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz",
-			"integrity": "sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==",
+			"version": "5.3.1",
+			"resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz",
+			"integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==",
 			"dependencies": {
-				"esbuild": "^0.19.3",
-				"postcss": "^8.4.32",
-				"rollup": "^4.2.0"
+				"esbuild": "^0.21.3",
+				"postcss": "^8.4.38",
+				"rollup": "^4.13.0"
 			},
 			"bin": {
 				"vite": "bin/vite.js"
@@ -6054,6 +8446,388 @@
 				}
 			}
 		},
+		"node_modules/vite/node_modules/@esbuild/aix-ppc64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+			"integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+			"cpu": [
+				"ppc64"
+			],
+			"optional": true,
+			"os": [
+				"aix"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/android-arm": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+			"integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+			"cpu": [
+				"arm"
+			],
+			"optional": true,
+			"os": [
+				"android"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/android-arm64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+			"integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+			"cpu": [
+				"arm64"
+			],
+			"optional": true,
+			"os": [
+				"android"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/android-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+			"integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+			"cpu": [
+				"x64"
+			],
+			"optional": true,
+			"os": [
+				"android"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/darwin-arm64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+			"integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+			"cpu": [
+				"arm64"
+			],
+			"optional": true,
+			"os": [
+				"darwin"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/darwin-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+			"integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+			"cpu": [
+				"x64"
+			],
+			"optional": true,
+			"os": [
+				"darwin"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+			"integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+			"cpu": [
+				"arm64"
+			],
+			"optional": true,
+			"os": [
+				"freebsd"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/freebsd-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+			"integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+			"cpu": [
+				"x64"
+			],
+			"optional": true,
+			"os": [
+				"freebsd"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/linux-arm": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+			"integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+			"cpu": [
+				"arm"
+			],
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/linux-arm64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+			"integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+			"cpu": [
+				"arm64"
+			],
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/linux-ia32": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+			"integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+			"cpu": [
+				"ia32"
+			],
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/linux-loong64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+			"integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+			"cpu": [
+				"loong64"
+			],
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/linux-mips64el": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+			"integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+			"cpu": [
+				"mips64el"
+			],
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/linux-ppc64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+			"integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+			"cpu": [
+				"ppc64"
+			],
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/linux-riscv64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+			"integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+			"cpu": [
+				"riscv64"
+			],
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/linux-s390x": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+			"integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+			"cpu": [
+				"s390x"
+			],
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/linux-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+			"integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+			"cpu": [
+				"x64"
+			],
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/netbsd-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+			"integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+			"cpu": [
+				"x64"
+			],
+			"optional": true,
+			"os": [
+				"netbsd"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/openbsd-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+			"integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+			"cpu": [
+				"x64"
+			],
+			"optional": true,
+			"os": [
+				"openbsd"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/sunos-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+			"integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+			"cpu": [
+				"x64"
+			],
+			"optional": true,
+			"os": [
+				"sunos"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/win32-arm64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+			"integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+			"cpu": [
+				"arm64"
+			],
+			"optional": true,
+			"os": [
+				"win32"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/win32-ia32": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+			"integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+			"cpu": [
+				"ia32"
+			],
+			"optional": true,
+			"os": [
+				"win32"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/@esbuild/win32-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+			"integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+			"cpu": [
+				"x64"
+			],
+			"optional": true,
+			"os": [
+				"win32"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/vite/node_modules/esbuild": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+			"integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+			"hasInstallScript": true,
+			"bin": {
+				"esbuild": "bin/esbuild"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"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"
+			}
+		},
 		"node_modules/vitefu": {
 			"version": "0.2.5",
 			"resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz",
@@ -6486,6 +9260,14 @@
 				"@jridgewell/trace-mapping": "^0.3.9"
 			}
 		},
+		"@astro-community/astro-embed-youtube": {
+			"version": "0.4.3",
+			"resolved": "https://registry.npmjs.org/@astro-community/astro-embed-youtube/-/astro-embed-youtube-0.4.3.tgz",
+			"integrity": "sha512-zXtPmR9yxrTo6cuLhH8v+r62bsXbsLJgsU2FiZalPr4bXJxAUQEIlG46S/qK0AEXi9uNShKqy4+zBaJ98xTVEg==",
+			"requires": {
+				"lite-youtube-embed": "^0.2.0"
+			}
+		},
 		"@astrojs/check": {
 			"version": "0.3.3",
 			"resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.3.3.tgz",
@@ -6561,6 +9343,28 @@
 				"vfile": "^6.0.1"
 			}
 		},
+		"@astrojs/mdx": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-2.0.3.tgz",
+			"integrity": "sha512-wFjQX5CihU5B4UAQNwc2R48ph0flpc6/yvDCFANE0agtgI2+BaVcAjuW0EhGOQCZ65dQDqnFKE0lvGs7EADYpg==",
+			"requires": {
+				"@astrojs/markdown-remark": "4.0.1",
+				"@mdx-js/mdx": "^3.0.0",
+				"acorn": "^8.11.2",
+				"es-module-lexer": "^1.4.1",
+				"estree-util-visit": "^2.0.0",
+				"github-slugger": "^2.0.0",
+				"gray-matter": "^4.0.3",
+				"hast-util-to-html": "^9.0.0",
+				"kleur": "^4.1.4",
+				"rehype-raw": "^7.0.0",
+				"remark-gfm": "^4.0.0",
+				"remark-smartypants": "^2.0.0",
+				"source-map": "^0.7.4",
+				"unist-util-visit": "^5.0.0",
+				"vfile": "^6.0.1"
+			}
+		},
 		"@astrojs/prism": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.0.0.tgz",
@@ -6840,6 +9644,303 @@
 				"to-fast-properties": "^2.0.0"
 			}
 		},
+		"@csstools/cascade-layer-name-parser": {
+			"version": "1.0.6",
+			"resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.6.tgz",
+			"integrity": "sha512-HkxRNs6ZIV0VjLFw6k5G8K35vd9r+O8B1Vr+QVD8M5Y44eQxyHtc42BdF74FQatXACPnitOR1+sRx2oWdnKTQw==",
+			"requires": {}
+		},
+		"@csstools/color-helpers": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.0.0.tgz",
+			"integrity": "sha512-wjyXB22/h2OvxAr3jldPB7R7kjTUEzopvjitS8jWtyd8fN6xJ8vy1HnHu0ZNfEkqpBJgQ76Q+sBDshWcMvTa/w=="
+		},
+		"@csstools/css-calc": {
+			"version": "1.1.5",
+			"resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.1.5.tgz",
+			"integrity": "sha512-UhI5oSRAUtTHY3MyGahqn0ZzQOHVoPpfvUcOmYipAZ1rILAvCBoyiLSsa/clv1Xxct0SMKIq93KO5Bfl1cb6tQ==",
+			"requires": {}
+		},
+		"@csstools/css-color-parser": {
+			"version": "1.5.0",
+			"resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.5.0.tgz",
+			"integrity": "sha512-PUhSg1MgU2sjYhA6moOmxYesqVqYTJwcVw12boTNbDX7Af+VK02MkgvmBBY2Z2qU6UN5HOQ+wrF0qQJGsTFY7w==",
+			"requires": {
+				"@csstools/color-helpers": "^4.0.0",
+				"@csstools/css-calc": "^1.1.5"
+			}
+		},
+		"@csstools/css-parser-algorithms": {
+			"version": "2.4.0",
+			"resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.4.0.tgz",
+			"integrity": "sha512-/PPLr2g5PAUCKAPEbfyk6/baZA+WJHQtUhPkoCQMpyRE8I0lXrG1QFRN8e5s3ZYxM8d/g5BZc6lH3s8Op7/VEg==",
+			"requires": {}
+		},
+		"@csstools/css-tokenizer": {
+			"version": "2.2.2",
+			"resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.2.tgz",
+			"integrity": "sha512-wCDUe/MAw7npAHFLyW3QjSyLA66S5QFaV1jIXlNQvdJ8RzXDSgALa49eWcUO6P55ARQaz0TsDdAgdRgkXFYY8g=="
+		},
+		"@csstools/media-query-list-parser": {
+			"version": "2.1.6",
+			"resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.6.tgz",
+			"integrity": "sha512-R6AKl9vaU0It7D7TR2lQn0pre5aQfdeqHRePlaRCY8rHL3l9eVlNRpsEVDKFi/zAjzv68CxH2M5kqbhPFPKjvw==",
+			"requires": {}
+		},
+		"@csstools/postcss-cascade-layers": {
+			"version": "4.0.2",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.2.tgz",
+			"integrity": "sha512-PqM+jvg5T2tB4FHX+akrMGNWAygLupD4FNUjcv4PSvtVuWZ6ISxuo37m4jFGU7Jg3rCfloGzKd0+xfr5Ec3vZQ==",
+			"requires": {
+				"@csstools/selector-specificity": "^3.0.1",
+				"postcss-selector-parser": "^6.0.13"
+			}
+		},
+		"@csstools/postcss-color-function": {
+			"version": "3.0.8",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.8.tgz",
+			"integrity": "sha512-jvbF7eCRbIcxWqby0kk2Mt85QtGzRRpFFYdlJCJ80Tuiv43PY+auS/nBl8pDQQ4Ndm4vsm4IC/wCZDcJUmpJmg==",
+			"requires": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3"
+			}
+		},
+		"@csstools/postcss-color-mix-function": {
+			"version": "2.0.8",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.8.tgz",
+			"integrity": "sha512-sGhk+TdZ2TeXspc6LSYSYC8WgzLlxoknUaObKgB0mk+dNjRQgSSIeCU+qrCwvHmwM+uTNKtiS8mntDzyQLHTTA==",
+			"requires": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3"
+			}
+		},
+		"@csstools/postcss-exponential-functions": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.2.tgz",
+			"integrity": "sha512-VRIYrwNCkZRqzsGB4jGT+XcNXsoiwyqy0Vf7C3I/5OPcf7WcWK3G1sBYFqqgWLGtpwc7m1m8TcorGY1xdh5abg==",
+			"requires": {
+				"@csstools/css-calc": "^1.1.5",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2"
+			}
+		},
+		"@csstools/postcss-font-format-keywords": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.1.tgz",
+			"integrity": "sha512-D1lcG2sfotTq6yBEOMV3myFxJLT10F3DLYZJMbiny5YToqzHWodZen8WId3UTimm0mEHitXqAUNL5jdd6RzVdA==",
+			"requires": {
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"@csstools/postcss-gamut-mapping": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.1.tgz",
+			"integrity": "sha512-GDVzfNbnc7x3GusFklvt0mYXIWVzxEtEtTFEW664NgZh/5V7Z89hZKBMl9piOAHXuxijfHtE+kul/ShfeLUvcA==",
+			"requires": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2"
+			}
+		},
+		"@csstools/postcss-gradients-interpolation-method": {
+			"version": "4.0.8",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.8.tgz",
+			"integrity": "sha512-bmvCNzuUvWPPdgASh0T14ffTay/FdzXsXfp0wXT1pYoUPmkH9M6yyxwPEkHq5djjzSb2jiLl4Ta3XM1uOREQ2w==",
+			"requires": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3"
+			}
+		},
+		"@csstools/postcss-hwb-function": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.7.tgz",
+			"integrity": "sha512-iXs1gxKtev8YNP5bOF26TAsnMfcxnCRLpKItQ067RphYECKEK/xWm4Z0r4ChmV1U1eq+lbdH5ZIb2cju4o5akA==",
+			"requires": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2"
+			}
+		},
+		"@csstools/postcss-ic-unit": {
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.3.tgz",
+			"integrity": "sha512-MpcmIL0/uMm/cFWh5V/9nbKKJ7jRr2qTYW5Q6zoE6HZ6uzOBJr2KRERv5/x8xzEBQ1MthDT7iP1EBp9luSQy7g==",
+			"requires": {
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3",
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"@csstools/postcss-initial": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-1.0.1.tgz",
+			"integrity": "sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg==",
+			"requires": {}
+		},
+		"@csstools/postcss-is-pseudo-class": {
+			"version": "4.0.4",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.4.tgz",
+			"integrity": "sha512-vTVO/uZixpTVAOQt3qZRUFJ/K1L03OfNkeJ8sFNDVNdVy/zW0h1L5WT7HIPMDUkvSrxQkFaCCybTZkUP7UESlQ==",
+			"requires": {
+				"@csstools/selector-specificity": "^3.0.1",
+				"postcss-selector-parser": "^6.0.13"
+			}
+		},
+		"@csstools/postcss-logical-float-and-clear": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.1.tgz",
+			"integrity": "sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA==",
+			"requires": {}
+		},
+		"@csstools/postcss-logical-overflow": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-1.0.1.tgz",
+			"integrity": "sha512-Kl4lAbMg0iyztEzDhZuQw8Sj9r2uqFDcU1IPl+AAt2nue8K/f1i7ElvKtXkjhIAmKiy5h2EY8Gt/Cqg0pYFDCw==",
+			"requires": {}
+		},
+		"@csstools/postcss-logical-overscroll-behavior": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-1.0.1.tgz",
+			"integrity": "sha512-+kHamNxAnX8ojPCtV8WPcUP3XcqMFBSDuBuvT6MHgq7oX4IQxLIXKx64t7g9LiuJzE7vd06Q9qUYR6bh4YnGpQ==",
+			"requires": {}
+		},
+		"@csstools/postcss-logical-resize": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.1.tgz",
+			"integrity": "sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A==",
+			"requires": {
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"@csstools/postcss-logical-viewport-units": {
+			"version": "2.0.4",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.4.tgz",
+			"integrity": "sha512-jetp/ArGAniWbjWBh5UQ07ztawfSbqCFd0QelX4R4pVIxrXahUEhz5VZHebMPVCg02J8GsQn0br6fdRpY6t7lw==",
+			"requires": {
+				"@csstools/css-tokenizer": "^2.2.2"
+			}
+		},
+		"@csstools/postcss-media-minmax": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.1.tgz",
+			"integrity": "sha512-mBY46/Hr+A8cDjoX0OoPRBOVrkANym9540dSB9rN3dllPZdM1E112i/tVxWsrR1s1yE9gfF0pk+7lf9l+qSeHA==",
+			"requires": {
+				"@csstools/css-calc": "^1.1.5",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/media-query-list-parser": "^2.1.6"
+			}
+		},
+		"@csstools/postcss-media-queries-aspect-ratio-number-values": {
+			"version": "2.0.4",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.4.tgz",
+			"integrity": "sha512-IaIZZhH0Qy9UDn7u+N3cuwwPG0Po3ZKOdDh+ClR7xvisSqniG+PuVrOEWYJrFKOt2//UHLhd7KHDqr2u9LKS9Q==",
+			"requires": {
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/media-query-list-parser": "^2.1.6"
+			}
+		},
+		"@csstools/postcss-nested-calc": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.1.tgz",
+			"integrity": "sha512-bwwababZpWRm0ByHaWBxTsDGTMhZKmtUNl3Wt0Eom8AY7ORgXx5qF9SSk1vEFrCi+HOfJT6M6W5KPgzXuQNRwQ==",
+			"requires": {
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"@csstools/postcss-normalize-display-values": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.2.tgz",
+			"integrity": "sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw==",
+			"requires": {
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"@csstools/postcss-oklab-function": {
+			"version": "3.0.8",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.8.tgz",
+			"integrity": "sha512-L4xrwbgg+k08v+a88LDxJeIM6+kqaBJlYb/QgmEMfQpUbrfXTp87DuRc7utcRdDvY+qWK5vqz3h1xUtceB5LJQ==",
+			"requires": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3"
+			}
+		},
+		"@csstools/postcss-progressive-custom-properties": {
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.3.tgz",
+			"integrity": "sha512-WipTVh6JTMQfeIrzDV4wEPsV9NTzMK2jwXxyH6CGBktuWdivHnkioP/smp1x/0QDPQyx7NTS14RB+GV3zZZYEw==",
+			"requires": {
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"@csstools/postcss-relative-color-syntax": {
+			"version": "2.0.8",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.8.tgz",
+			"integrity": "sha512-wu/Oh7QKINpRXnmLMUbObVNlqwr843PSF4a3x3fMC0I+vUeoGqMfZuSPFtT+NnYYxfzUjEZ091GURPxee22VLQ==",
+			"requires": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3"
+			}
+		},
+		"@csstools/postcss-scope-pseudo-class": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.1.tgz",
+			"integrity": "sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A==",
+			"requires": {
+				"postcss-selector-parser": "^6.0.13"
+			}
+		},
+		"@csstools/postcss-stepped-value-functions": {
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.3.tgz",
+			"integrity": "sha512-hzo9Wr3u7JJiM65/EyHgE/gJpBzhDwBSGOobFs2YQ0ZNTywUliYQoYJud1KKlByMRuhqvDLh9V95eIkLf/fZTQ==",
+			"requires": {
+				"@csstools/css-calc": "^1.1.5",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2"
+			}
+		},
+		"@csstools/postcss-text-decoration-shorthand": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.4.tgz",
+			"integrity": "sha512-yUZmbnUemgQmja7SpOZeU45+P49wNEgQguRdyTktFkZsHf7Gof+ZIYfvF6Cm+LsU1PwSupy4yUeEKKjX5+k6cQ==",
+			"requires": {
+				"@csstools/color-helpers": "^4.0.0",
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"@csstools/postcss-trigonometric-functions": {
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.3.tgz",
+			"integrity": "sha512-T/npTbDuMZ3vktEMuA05p1oeVd12Sy47qZP1vFhzNMUOdXGCK9vlm0tUSIlV5DdlbTJqKqq9FhGitZH9VTKrfQ==",
+			"requires": {
+				"@csstools/css-calc": "^1.1.5",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2"
+			}
+		},
+		"@csstools/postcss-unset-value": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.1.tgz",
+			"integrity": "sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg==",
+			"requires": {}
+		},
+		"@csstools/selector-specificity": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.1.tgz",
+			"integrity": "sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==",
+			"requires": {}
+		},
 		"@emmetio/abbreviation": {
 			"version": "2.3.3",
 			"resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz",
@@ -7033,6 +10134,36 @@
 				"@jridgewell/sourcemap-codec": "1.4.14"
 			}
 		},
+		"@mdx-js/mdx": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.0.tgz",
+			"integrity": "sha512-Icm0TBKBLYqroYbNW3BPnzMGn+7mwpQOK310aZ7+fkCtiU3aqv2cdcX+nd0Ydo3wI5Rx8bX2Z2QmGb/XcAClCw==",
+			"requires": {
+				"@types/estree": "^1.0.0",
+				"@types/estree-jsx": "^1.0.0",
+				"@types/hast": "^3.0.0",
+				"@types/mdx": "^2.0.0",
+				"collapse-white-space": "^2.0.0",
+				"devlop": "^1.0.0",
+				"estree-util-build-jsx": "^3.0.0",
+				"estree-util-is-identifier-name": "^3.0.0",
+				"estree-util-to-js": "^2.0.0",
+				"estree-walker": "^3.0.0",
+				"hast-util-to-estree": "^3.0.0",
+				"hast-util-to-jsx-runtime": "^2.0.0",
+				"markdown-extensions": "^2.0.0",
+				"periscopic": "^3.0.0",
+				"remark-mdx": "^3.0.0",
+				"remark-parse": "^11.0.0",
+				"remark-rehype": "^11.0.0",
+				"source-map": "^0.7.0",
+				"unified": "^11.0.0",
+				"unist-util-position-from-estree": "^2.0.0",
+				"unist-util-stringify-position": "^4.0.0",
+				"unist-util-visit": "^5.0.0",
+				"vfile": "^6.0.0"
+			}
+		},
 		"@nodelib/fs.scandir": {
 			"version": "2.1.5",
 			"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -7057,83 +10188,109 @@
 			}
 		},
 		"@rollup/rollup-android-arm-eabi": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.1.tgz",
-			"integrity": "sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz",
+			"integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==",
 			"optional": true
 		},
 		"@rollup/rollup-android-arm64": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.1.tgz",
-			"integrity": "sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz",
+			"integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==",
 			"optional": true
 		},
 		"@rollup/rollup-darwin-arm64": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.1.tgz",
-			"integrity": "sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz",
+			"integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==",
 			"optional": true
 		},
 		"@rollup/rollup-darwin-x64": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.1.tgz",
-			"integrity": "sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz",
+			"integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==",
 			"optional": true
 		},
 		"@rollup/rollup-linux-arm-gnueabihf": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.1.tgz",
-			"integrity": "sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz",
+			"integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==",
+			"optional": true
+		},
+		"@rollup/rollup-linux-arm-musleabihf": {
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz",
+			"integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==",
 			"optional": true
 		},
 		"@rollup/rollup-linux-arm64-gnu": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.1.tgz",
-			"integrity": "sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz",
+			"integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==",
 			"optional": true
 		},
 		"@rollup/rollup-linux-arm64-musl": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.1.tgz",
-			"integrity": "sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz",
+			"integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==",
+			"optional": true
+		},
+		"@rollup/rollup-linux-powerpc64le-gnu": {
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz",
+			"integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==",
 			"optional": true
 		},
 		"@rollup/rollup-linux-riscv64-gnu": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.1.tgz",
-			"integrity": "sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz",
+			"integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==",
+			"optional": true
+		},
+		"@rollup/rollup-linux-s390x-gnu": {
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz",
+			"integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==",
 			"optional": true
 		},
 		"@rollup/rollup-linux-x64-gnu": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.1.tgz",
-			"integrity": "sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz",
+			"integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==",
 			"optional": true
 		},
 		"@rollup/rollup-linux-x64-musl": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.1.tgz",
-			"integrity": "sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz",
+			"integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==",
 			"optional": true
 		},
 		"@rollup/rollup-win32-arm64-msvc": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.1.tgz",
-			"integrity": "sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz",
+			"integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==",
 			"optional": true
 		},
 		"@rollup/rollup-win32-ia32-msvc": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.1.tgz",
-			"integrity": "sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz",
+			"integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==",
 			"optional": true
 		},
 		"@rollup/rollup-win32-x64-msvc": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.1.tgz",
-			"integrity": "sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz",
+			"integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==",
 			"optional": true
 		},
+		"@types/acorn": {
+			"version": "4.0.6",
+			"resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz",
+			"integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==",
+			"requires": {
+				"@types/estree": "*"
+			}
+		},
 		"@types/babel__core": {
 			"version": "7.20.5",
 			"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@@ -7184,6 +10341,14 @@
 			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
 			"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
 		},
+		"@types/estree-jsx": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.3.tgz",
+			"integrity": "sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==",
+			"requires": {
+				"@types/estree": "*"
+			}
+		},
 		"@types/hast": {
 			"version": "3.0.3",
 			"resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz",
@@ -7200,6 +10365,11 @@
 				"@types/unist": "*"
 			}
 		},
+		"@types/mdx": {
+			"version": "2.0.10",
+			"resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.10.tgz",
+			"integrity": "sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg=="
+		},
 		"@types/ms": {
 			"version": "0.7.34",
 			"resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
@@ -7337,6 +10507,12 @@
 			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
 			"integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w=="
 		},
+		"acorn-jsx": {
+			"version": "5.3.2",
+			"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+			"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+			"requires": {}
+		},
 		"ansi-align": {
 			"version": "3.0.1",
 			"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
@@ -7410,19 +10586,32 @@
 				"sprintf-js": "~1.0.2"
 			}
 		},
+		"aria-query": {
+			"version": "5.3.0",
+			"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+			"integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+			"requires": {
+				"dequal": "^2.0.3"
+			}
+		},
 		"array-iterate": {
 			"version": "2.0.1",
 			"resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz",
 			"integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg=="
 		},
+		"astring": {
+			"version": "1.8.6",
+			"resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz",
+			"integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg=="
+		},
 		"astro": {
-			"version": "4.0.7",
-			"resolved": "https://registry.npmjs.org/astro/-/astro-4.0.7.tgz",
-			"integrity": "sha512-K+Ms2AAQvi6yERPuglcI69tnHyTT44JCjzqprSjw3uOwFX7N9obpLgbhmLMH1fPFTgzt3ZD7APjmtDPN51makw==",
+			"version": "4.2.1",
+			"resolved": "https://registry.npmjs.org/astro/-/astro-4.2.1.tgz",
+			"integrity": "sha512-TcrveW2/lohmljrbTUgcDxajEdF1yK+zBvb7SXroloGix/d4jkegO6GANFgvyy0zprMyajW7qgJEFyhWUX86Vw==",
 			"requires": {
 				"@astrojs/compiler": "^2.3.4",
 				"@astrojs/internal-helpers": "0.2.1",
-				"@astrojs/markdown-remark": "4.0.1",
+				"@astrojs/markdown-remark": "4.1.0",
 				"@astrojs/telemetry": "3.0.4",
 				"@babel/core": "^7.23.3",
 				"@babel/generator": "^7.23.3",
@@ -7432,6 +10621,8 @@
 				"@babel/types": "^7.23.3",
 				"@types/babel__core": "^7.20.4",
 				"acorn": "^8.11.2",
+				"aria-query": "^5.3.0",
+				"axobject-query": "^4.0.0",
 				"boxen": "^7.1.1",
 				"chokidar": "^3.5.3",
 				"ci-info": "^4.0.0",
@@ -7470,8 +10661,8 @@
 				"resolve": "^1.22.4",
 				"semver": "^7.5.4",
 				"server-destroy": "^1.0.1",
-				"sharp": "^0.32.5",
-				"shikiji": "^0.6.13",
+				"sharp": "^0.32.6",
+				"shikiji": "^0.9.18",
 				"string-width": "^7.0.0",
 				"strip-ansi": "^7.1.0",
 				"tsconfck": "^3.0.0",
@@ -7484,6 +10675,27 @@
 				"zod": "^3.22.4"
 			},
 			"dependencies": {
+				"@astrojs/markdown-remark": {
+					"version": "4.1.0",
+					"resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-4.1.0.tgz",
+					"integrity": "sha512-JnIy6zk+6f/SgSVMZecZFxQt0faT1uBckwYCuBxKH1hYYJsal8OOe+tx6JxfnyaV+xViyjUvQ28mmn+p/F5LkQ==",
+					"requires": {
+						"@astrojs/prism": "^3.0.0",
+						"github-slugger": "^2.0.0",
+						"import-meta-resolve": "^4.0.0",
+						"mdast-util-definitions": "^6.0.0",
+						"rehype-raw": "^7.0.0",
+						"rehype-stringify": "^10.0.0",
+						"remark-gfm": "^4.0.0",
+						"remark-parse": "^11.0.0",
+						"remark-rehype": "^11.0.0",
+						"remark-smartypants": "^2.0.0",
+						"shikiji": "^0.9.18",
+						"unified": "^11.0.4",
+						"unist-util-visit": "^5.0.0",
+						"vfile": "^6.0.1"
+					}
+				},
 				"argparse": {
 					"version": "2.0.1",
 					"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -7496,9 +10708,38 @@
 					"requires": {
 						"argparse": "^2.0.1"
 					}
+				},
+				"shikiji": {
+					"version": "0.9.19",
+					"resolved": "https://registry.npmjs.org/shikiji/-/shikiji-0.9.19.tgz",
+					"integrity": "sha512-Kw2NHWktdcdypCj1GkKpXH4o6Vxz8B8TykPlPuLHOGSV8VkhoCLcFOH4k19K4LXAQYRQmxg+0X/eM+m2sLhAkg==",
+					"requires": {
+						"shikiji-core": "0.9.19"
+					}
 				}
 			}
 		},
+		"autoprefixer": {
+			"version": "10.4.16",
+			"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz",
+			"integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==",
+			"requires": {
+				"browserslist": "^4.21.10",
+				"caniuse-lite": "^1.0.30001538",
+				"fraction.js": "^4.3.6",
+				"normalize-range": "^0.1.2",
+				"picocolors": "^1.0.0",
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"axobject-query": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz",
+			"integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==",
+			"requires": {
+				"dequal": "^2.0.3"
+			}
+		},
 		"b4a": {
 			"version": "1.6.4",
 			"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz",
@@ -7573,11 +10814,11 @@
 			}
 		},
 		"braces": {
-			"version": "3.0.2",
-			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-			"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+			"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
 			"requires": {
-				"fill-range": "^7.0.1"
+				"fill-range": "^7.1.1"
 			}
 		},
 		"browserslist": {
@@ -7606,9 +10847,9 @@
 			"integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw=="
 		},
 		"caniuse-lite": {
-			"version": "1.0.30001570",
-			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz",
-			"integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw=="
+			"version": "1.0.30001634",
+			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001634.tgz",
+			"integrity": "sha512-fbBYXQ9q3+yp1q1gBk86tOFs4pyn/yxFm5ZNP18OXJDfA3txImOY9PhfxVggZ4vRHDqoU8NrKU81eN0OtzOgRA=="
 		},
 		"ccount": {
 			"version": "2.0.1",
@@ -7640,6 +10881,11 @@
 			"resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
 			"integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="
 		},
+		"character-reference-invalid": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
+			"integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="
+		},
 		"chokidar": {
 			"version": "3.5.3",
 			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
@@ -7760,6 +11006,11 @@
 			"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz",
 			"integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q=="
 		},
+		"collapse-white-space": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
+			"integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw=="
+		},
 		"color": {
 			"version": "4.2.3",
 			"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
@@ -7840,6 +11091,40 @@
 				"which": "^2.0.1"
 			}
 		},
+		"css-blank-pseudo": {
+			"version": "6.0.1",
+			"resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-6.0.1.tgz",
+			"integrity": "sha512-goSnEITByxTzU4Oh5oJZrEWudxTqk7L6IXj1UW69pO6Hv0UdX+Vsrt02FFu5DweRh2bLu6WpX/+zsQCu5O1gKw==",
+			"requires": {
+				"postcss-selector-parser": "^6.0.13"
+			}
+		},
+		"css-has-pseudo": {
+			"version": "6.0.1",
+			"resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.1.tgz",
+			"integrity": "sha512-WwoVKqNxApfEI7dWFyaHoeFCcUPD+lPyjL6lNpRUNX7IyIUuVpawOTwwA5D0ZR6V2xQZonNPVj8kEcxzEaAQfQ==",
+			"requires": {
+				"@csstools/selector-specificity": "^3.0.1",
+				"postcss-selector-parser": "^6.0.13",
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"css-prefers-color-scheme": {
+			"version": "9.0.1",
+			"resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.1.tgz",
+			"integrity": "sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==",
+			"requires": {}
+		},
+		"cssdb": {
+			"version": "7.10.0",
+			"resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.10.0.tgz",
+			"integrity": "sha512-yGZ5tmA57gWh/uvdQBHs45wwFY0IBh3ypABk5sEubPBPSzXzkNgsWReqx7gdx6uhC+QoFBe+V8JwBB9/hQ6cIA=="
+		},
+		"cssesc": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+			"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
+		},
 		"debug": {
 			"version": "4.3.4",
 			"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -8006,6 +11291,49 @@
 			"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
 			"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
 		},
+		"estree-util-attach-comments": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz",
+			"integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==",
+			"requires": {
+				"@types/estree": "^1.0.0"
+			}
+		},
+		"estree-util-build-jsx": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz",
+			"integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==",
+			"requires": {
+				"@types/estree-jsx": "^1.0.0",
+				"devlop": "^1.0.0",
+				"estree-util-is-identifier-name": "^3.0.0",
+				"estree-walker": "^3.0.0"
+			}
+		},
+		"estree-util-is-identifier-name": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
+			"integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="
+		},
+		"estree-util-to-js": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz",
+			"integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==",
+			"requires": {
+				"@types/estree-jsx": "^1.0.0",
+				"astring": "^1.8.0",
+				"source-map": "^0.7.0"
+			}
+		},
+		"estree-util-visit": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz",
+			"integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==",
+			"requires": {
+				"@types/estree-jsx": "^1.0.0",
+				"@types/unist": "^3.0.0"
+			}
+		},
 		"estree-walker": {
 			"version": "3.0.3",
 			"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
@@ -8081,9 +11409,9 @@
 			}
 		},
 		"fill-range": {
-			"version": "7.0.1",
-			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-			"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+			"version": "7.1.1",
+			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+			"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
 			"requires": {
 				"to-regex-range": "^5.0.1"
 			}
@@ -8111,6 +11439,11 @@
 			"resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.0.tgz",
 			"integrity": "sha512-xU99gDEnciIwJdGcBmNHnzTJ/w5AT+VFJOu6sTB6WM8diOYNA3Sa+K1DiEBQ7XH4QikQq3iFW1U+jRVcotQnBw=="
 		},
+		"fraction.js": {
+			"version": "4.3.7",
+			"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+			"integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="
+		},
 		"fs-constants": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
@@ -8257,6 +11590,29 @@
 				"zwitch": "^2.0.0"
 			}
 		},
+		"hast-util-to-estree": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz",
+			"integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==",
+			"requires": {
+				"@types/estree": "^1.0.0",
+				"@types/estree-jsx": "^1.0.0",
+				"@types/hast": "^3.0.0",
+				"comma-separated-tokens": "^2.0.0",
+				"devlop": "^1.0.0",
+				"estree-util-attach-comments": "^3.0.0",
+				"estree-util-is-identifier-name": "^3.0.0",
+				"hast-util-whitespace": "^3.0.0",
+				"mdast-util-mdx-expression": "^2.0.0",
+				"mdast-util-mdx-jsx": "^3.0.0",
+				"mdast-util-mdxjs-esm": "^2.0.0",
+				"property-information": "^6.0.0",
+				"space-separated-tokens": "^2.0.0",
+				"style-to-object": "^0.4.0",
+				"unist-util-position": "^5.0.0",
+				"zwitch": "^2.0.0"
+			}
+		},
 		"hast-util-to-html": {
 			"version": "9.0.0",
 			"resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.0.tgz",
@@ -8276,6 +11632,43 @@
 				"zwitch": "^2.0.4"
 			}
 		},
+		"hast-util-to-jsx-runtime": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz",
+			"integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==",
+			"requires": {
+				"@types/estree": "^1.0.0",
+				"@types/hast": "^3.0.0",
+				"@types/unist": "^3.0.0",
+				"comma-separated-tokens": "^2.0.0",
+				"devlop": "^1.0.0",
+				"estree-util-is-identifier-name": "^3.0.0",
+				"hast-util-whitespace": "^3.0.0",
+				"mdast-util-mdx-expression": "^2.0.0",
+				"mdast-util-mdx-jsx": "^3.0.0",
+				"mdast-util-mdxjs-esm": "^2.0.0",
+				"property-information": "^6.0.0",
+				"space-separated-tokens": "^2.0.0",
+				"style-to-object": "^1.0.0",
+				"unist-util-position": "^5.0.0",
+				"vfile-message": "^4.0.0"
+			},
+			"dependencies": {
+				"inline-style-parser": {
+					"version": "0.2.2",
+					"resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz",
+					"integrity": "sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ=="
+				},
+				"style-to-object": {
+					"version": "1.0.5",
+					"resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.5.tgz",
+					"integrity": "sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==",
+					"requires": {
+						"inline-style-parser": "0.2.2"
+					}
+				}
+			}
+		},
 		"hast-util-to-parse5": {
 			"version": "8.0.0",
 			"resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz",
@@ -8331,9 +11724,9 @@
 			"integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="
 		},
 		"iconoir": {
-			"version": "6.1.0",
-			"resolved": "https://registry.npmjs.org/iconoir/-/iconoir-6.1.0.tgz",
-			"integrity": "sha512-K8Jrqkp51MdcDBzfiSY2vt9gHsujwEmoOHlWI2Wk++cgVvR1bP+fMLFmwBTPHduZ3aOK95snE6rUmlLPH7Yhnw=="
+			"version": "7.2.0",
+			"resolved": "https://registry.npmjs.org/iconoir/-/iconoir-7.2.0.tgz",
+			"integrity": "sha512-uGaTCzdvQUAfNMDM2yJieGVM2KbW+8/8nkyLVtvXX+79tHQWxgPhpvk9g7rnZcbQuZ/YFAdP+0HB3eAmk+l2qw=="
 		},
 		"iconv-lite": {
 			"version": "0.4.24",
@@ -8364,6 +11757,25 @@
 			"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
 			"optional": true
 		},
+		"inline-style-parser": {
+			"version": "0.1.1",
+			"resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
+			"integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="
+		},
+		"is-alphabetical": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
+			"integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="
+		},
+		"is-alphanumerical": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
+			"integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
+			"requires": {
+				"is-alphabetical": "^2.0.0",
+				"is-decimal": "^2.0.0"
+			}
+		},
 		"is-arrayish": {
 			"version": "0.3.2",
 			"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
@@ -8391,6 +11803,11 @@
 				"hasown": "^2.0.0"
 			}
 		},
+		"is-decimal": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
+			"integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="
+		},
 		"is-docker": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
@@ -8419,6 +11836,11 @@
 				"is-extglob": "^2.1.1"
 			}
 		},
+		"is-hexadecimal": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
+			"integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="
+		},
 		"is-inside-container": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
@@ -8442,6 +11864,14 @@
 			"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
 			"integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="
 		},
+		"is-reference": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz",
+			"integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==",
+			"requires": {
+				"@types/estree": "*"
+			}
+		},
 		"is-stream": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
@@ -8504,6 +11934,11 @@
 			"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
 			"integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="
 		},
+		"lite-youtube-embed": {
+			"version": "0.2.0",
+			"resolved": "https://registry.npmjs.org/lite-youtube-embed/-/lite-youtube-embed-0.2.0.tgz",
+			"integrity": "sha512-XXXAk5sbvtjjwbie3XG+6HppgTm1HTGL/Uk9z9NkJH53o7puZLur434heHzAjkS60hZB3vT4ls25zl5rMiX4EA=="
+		},
 		"load-yaml-file": {
 			"version": "0.2.0",
 			"resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz",
@@ -8572,6 +12007,11 @@
 				}
 			}
 		},
+		"markdown-extensions": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz",
+			"integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="
+		},
 		"markdown-table": {
 			"version": "3.0.3",
 			"resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz",
@@ -8695,6 +12135,64 @@
 				"mdast-util-to-markdown": "^2.0.0"
 			}
 		},
+		"mdast-util-mdx": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz",
+			"integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==",
+			"requires": {
+				"mdast-util-from-markdown": "^2.0.0",
+				"mdast-util-mdx-expression": "^2.0.0",
+				"mdast-util-mdx-jsx": "^3.0.0",
+				"mdast-util-mdxjs-esm": "^2.0.0",
+				"mdast-util-to-markdown": "^2.0.0"
+			}
+		},
+		"mdast-util-mdx-expression": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz",
+			"integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==",
+			"requires": {
+				"@types/estree-jsx": "^1.0.0",
+				"@types/hast": "^3.0.0",
+				"@types/mdast": "^4.0.0",
+				"devlop": "^1.0.0",
+				"mdast-util-from-markdown": "^2.0.0",
+				"mdast-util-to-markdown": "^2.0.0"
+			}
+		},
+		"mdast-util-mdx-jsx": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.0.0.tgz",
+			"integrity": "sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA==",
+			"requires": {
+				"@types/estree-jsx": "^1.0.0",
+				"@types/hast": "^3.0.0",
+				"@types/mdast": "^4.0.0",
+				"@types/unist": "^3.0.0",
+				"ccount": "^2.0.0",
+				"devlop": "^1.1.0",
+				"mdast-util-from-markdown": "^2.0.0",
+				"mdast-util-to-markdown": "^2.0.0",
+				"parse-entities": "^4.0.0",
+				"stringify-entities": "^4.0.0",
+				"unist-util-remove-position": "^5.0.0",
+				"unist-util-stringify-position": "^4.0.0",
+				"vfile-message": "^4.0.0"
+			}
+		},
+		"mdast-util-mdxjs-esm": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
+			"integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
+			"requires": {
+				"@types/estree-jsx": "^1.0.0",
+				"@types/hast": "^3.0.0",
+				"@types/mdast": "^4.0.0",
+				"devlop": "^1.0.0",
+				"mdast-util-from-markdown": "^2.0.0",
+				"mdast-util-to-markdown": "^2.0.0"
+			}
+		},
 		"mdast-util-phrasing": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz",
@@ -8885,6 +12383,77 @@
 				"micromark-util-types": "^2.0.0"
 			}
 		},
+		"micromark-extension-mdx-expression": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz",
+			"integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==",
+			"requires": {
+				"@types/estree": "^1.0.0",
+				"devlop": "^1.0.0",
+				"micromark-factory-mdx-expression": "^2.0.0",
+				"micromark-factory-space": "^2.0.0",
+				"micromark-util-character": "^2.0.0",
+				"micromark-util-events-to-acorn": "^2.0.0",
+				"micromark-util-symbol": "^2.0.0",
+				"micromark-util-types": "^2.0.0"
+			}
+		},
+		"micromark-extension-mdx-jsx": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz",
+			"integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==",
+			"requires": {
+				"@types/acorn": "^4.0.0",
+				"@types/estree": "^1.0.0",
+				"devlop": "^1.0.0",
+				"estree-util-is-identifier-name": "^3.0.0",
+				"micromark-factory-mdx-expression": "^2.0.0",
+				"micromark-factory-space": "^2.0.0",
+				"micromark-util-character": "^2.0.0",
+				"micromark-util-symbol": "^2.0.0",
+				"micromark-util-types": "^2.0.0",
+				"vfile-message": "^4.0.0"
+			}
+		},
+		"micromark-extension-mdx-md": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz",
+			"integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==",
+			"requires": {
+				"micromark-util-types": "^2.0.0"
+			}
+		},
+		"micromark-extension-mdxjs": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz",
+			"integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==",
+			"requires": {
+				"acorn": "^8.0.0",
+				"acorn-jsx": "^5.0.0",
+				"micromark-extension-mdx-expression": "^3.0.0",
+				"micromark-extension-mdx-jsx": "^3.0.0",
+				"micromark-extension-mdx-md": "^2.0.0",
+				"micromark-extension-mdxjs-esm": "^3.0.0",
+				"micromark-util-combine-extensions": "^2.0.0",
+				"micromark-util-types": "^2.0.0"
+			}
+		},
+		"micromark-extension-mdxjs-esm": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz",
+			"integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==",
+			"requires": {
+				"@types/estree": "^1.0.0",
+				"devlop": "^1.0.0",
+				"micromark-core-commonmark": "^2.0.0",
+				"micromark-util-character": "^2.0.0",
+				"micromark-util-events-to-acorn": "^2.0.0",
+				"micromark-util-symbol": "^2.0.0",
+				"micromark-util-types": "^2.0.0",
+				"unist-util-position-from-estree": "^2.0.0",
+				"vfile-message": "^4.0.0"
+			}
+		},
 		"micromark-factory-destination": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
@@ -8906,6 +12475,21 @@
 				"micromark-util-types": "^2.0.0"
 			}
 		},
+		"micromark-factory-mdx-expression": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz",
+			"integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==",
+			"requires": {
+				"@types/estree": "^1.0.0",
+				"devlop": "^1.0.0",
+				"micromark-util-character": "^2.0.0",
+				"micromark-util-events-to-acorn": "^2.0.0",
+				"micromark-util-symbol": "^2.0.0",
+				"micromark-util-types": "^2.0.0",
+				"unist-util-position-from-estree": "^2.0.0",
+				"vfile-message": "^4.0.0"
+			}
+		},
 		"micromark-factory-space": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
@@ -8997,6 +12581,21 @@
 			"resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
 			"integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA=="
 		},
+		"micromark-util-events-to-acorn": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz",
+			"integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==",
+			"requires": {
+				"@types/acorn": "^4.0.0",
+				"@types/estree": "^1.0.0",
+				"@types/unist": "^3.0.0",
+				"devlop": "^1.0.0",
+				"estree-util-visit": "^2.0.0",
+				"micromark-util-symbol": "^2.0.0",
+				"micromark-util-types": "^2.0.0",
+				"vfile-message": "^4.0.0"
+			}
+		},
 		"micromark-util-html-tag-name": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
@@ -9136,9 +12735,9 @@
 			}
 		},
 		"node-abi": {
-			"version": "3.52.0",
-			"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.52.0.tgz",
-			"integrity": "sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ==",
+			"version": "3.54.0",
+			"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz",
+			"integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==",
 			"optional": true,
 			"requires": {
 				"semver": "^7.3.5"
@@ -9160,6 +12759,11 @@
 			"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
 			"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
 		},
+		"normalize-range": {
+			"version": "0.1.2",
+			"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+			"integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="
+		},
 		"npm-run-path": {
 			"version": "5.1.0",
 			"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
@@ -9275,6 +12879,28 @@
 			"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
 			"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
 		},
+		"parse-entities": {
+			"version": "4.0.1",
+			"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz",
+			"integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==",
+			"requires": {
+				"@types/unist": "^2.0.0",
+				"character-entities": "^2.0.0",
+				"character-entities-legacy": "^3.0.0",
+				"character-reference-invalid": "^2.0.0",
+				"decode-named-character-reference": "^1.0.0",
+				"is-alphanumerical": "^2.0.0",
+				"is-decimal": "^2.0.0",
+				"is-hexadecimal": "^2.0.0"
+			},
+			"dependencies": {
+				"@types/unist": {
+					"version": "2.0.10",
+					"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
+					"integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
+				}
+			}
+		},
 		"parse-latin": {
 			"version": "5.0.1",
 			"resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-5.0.1.tgz",
@@ -9318,6 +12944,16 @@
 			"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz",
 			"integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw=="
 		},
+		"periscopic": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
+			"integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
+			"requires": {
+				"@types/estree": "^1.0.0",
+				"estree-walker": "^3.0.0",
+				"is-reference": "^3.0.0"
+			}
+		},
 		"picocolors": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -9377,15 +13013,303 @@
 			}
 		},
 		"postcss": {
-			"version": "8.4.32",
-			"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
-			"integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
+			"version": "8.4.38",
+			"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+			"integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
 			"requires": {
 				"nanoid": "^3.3.7",
 				"picocolors": "^1.0.0",
-				"source-map-js": "^1.0.2"
+				"source-map-js": "^1.2.0"
 			}
 		},
+		"postcss-attribute-case-insensitive": {
+			"version": "6.0.2",
+			"resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz",
+			"integrity": "sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==",
+			"requires": {
+				"postcss-selector-parser": "^6.0.10"
+			}
+		},
+		"postcss-clamp": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz",
+			"integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==",
+			"requires": {
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"postcss-color-functional-notation": {
+			"version": "6.0.3",
+			"resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.3.tgz",
+			"integrity": "sha512-2jBr3H0sk3qGh/3BkmLsOKcYyVfSlM1K2QQYVU7eW5mkg7ZOQ4aU/Rtbh7vJ9FxAfgf8iHRwXBsQkHqUxzTkXw==",
+			"requires": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3"
+			}
+		},
+		"postcss-color-hex-alpha": {
+			"version": "9.0.3",
+			"resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.3.tgz",
+			"integrity": "sha512-7sEHU4tAS6htlxun8AB9LDrCXoljxaC34tFVRlYKcvO+18r5fvGiXgv5bQzN40+4gXLCyWSMRK5FK31244WcCA==",
+			"requires": {
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"postcss-color-rebeccapurple": {
+			"version": "9.0.2",
+			"resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.2.tgz",
+			"integrity": "sha512-f+RDEAPW2m8UbJWkSpRfV+QxhSaQhDMihI75DVGJJh4oRIoegjheeRtINFJum9D8BqGJcvD4GLjggTvCwZ4zuA==",
+			"requires": {
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"postcss-custom-media": {
+			"version": "10.0.2",
+			"resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz",
+			"integrity": "sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==",
+			"requires": {
+				"@csstools/cascade-layer-name-parser": "^1.0.5",
+				"@csstools/css-parser-algorithms": "^2.3.2",
+				"@csstools/css-tokenizer": "^2.2.1",
+				"@csstools/media-query-list-parser": "^2.1.5"
+			}
+		},
+		"postcss-custom-properties": {
+			"version": "13.3.3",
+			"resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.3.tgz",
+			"integrity": "sha512-xLmILb2R83aG4X++iVFg8TWadOlc45xiyFHRZD6Yhhu2igrTHXL6C75AEWqx6k9lxrr9sK5rcfUI9JvTCxBTvA==",
+			"requires": {
+				"@csstools/cascade-layer-name-parser": "^1.0.6",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"postcss-custom-selectors": {
+			"version": "7.1.6",
+			"resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz",
+			"integrity": "sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==",
+			"requires": {
+				"@csstools/cascade-layer-name-parser": "^1.0.5",
+				"@csstools/css-parser-algorithms": "^2.3.2",
+				"@csstools/css-tokenizer": "^2.2.1",
+				"postcss-selector-parser": "^6.0.13"
+			}
+		},
+		"postcss-dir-pseudo-class": {
+			"version": "8.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.1.tgz",
+			"integrity": "sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw==",
+			"requires": {
+				"postcss-selector-parser": "^6.0.13"
+			}
+		},
+		"postcss-double-position-gradients": {
+			"version": "5.0.3",
+			"resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.3.tgz",
+			"integrity": "sha512-QKYpwmaSm6HcdS0ndAuWSNNMv78R1oSySoh3mYBmctHWr2KWcwPJVakdOyU4lvFVW0GRu9wfIQwGeM4p3xU9ow==",
+			"requires": {
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3",
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"postcss-focus-visible": {
+			"version": "9.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-9.0.1.tgz",
+			"integrity": "sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ==",
+			"requires": {
+				"postcss-selector-parser": "^6.0.13"
+			}
+		},
+		"postcss-focus-within": {
+			"version": "8.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-8.0.1.tgz",
+			"integrity": "sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA==",
+			"requires": {
+				"postcss-selector-parser": "^6.0.13"
+			}
+		},
+		"postcss-font-variant": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz",
+			"integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==",
+			"requires": {}
+		},
+		"postcss-gap-properties": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-5.0.1.tgz",
+			"integrity": "sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw==",
+			"requires": {}
+		},
+		"postcss-image-set-function": {
+			"version": "6.0.2",
+			"resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-6.0.2.tgz",
+			"integrity": "sha512-/O1xwqpJiz/apxGQi7UUfv1xUcorvkHZfvCYHPpRxxZj2WvjD0rg0+/+c+u5/Do5CpUg3XvfYxMrhcnjW1ArDQ==",
+			"requires": {
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"postcss-lab-function": {
+			"version": "6.0.8",
+			"resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.8.tgz",
+			"integrity": "sha512-agYs7R9Z5gnX837fCkH8TEQIHdhyDsMPPnpuuENt/dxoDVAykBaqbdxIN4DagOj+ZQo20iRNNJeY3MsFcdI6Sg==",
+			"requires": {
+				"@csstools/css-color-parser": "^1.5.0",
+				"@csstools/css-parser-algorithms": "^2.4.0",
+				"@csstools/css-tokenizer": "^2.2.2",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.3"
+			}
+		},
+		"postcss-logical": {
+			"version": "7.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-7.0.1.tgz",
+			"integrity": "sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg==",
+			"requires": {
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"postcss-nesting": {
+			"version": "12.0.2",
+			"resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.0.2.tgz",
+			"integrity": "sha512-63PpJHSeNs93S3ZUIyi+7kKx4JqOIEJ6QYtG3x+0qA4J03+4n0iwsyA1GAHyWxsHYljQS4/4ZK1o2sMi70b5wQ==",
+			"requires": {
+				"@csstools/selector-specificity": "^3.0.1",
+				"postcss-selector-parser": "^6.0.13"
+			}
+		},
+		"postcss-opacity-percentage": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz",
+			"integrity": "sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==",
+			"requires": {}
+		},
+		"postcss-overflow-shorthand": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.1.tgz",
+			"integrity": "sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ==",
+			"requires": {
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"postcss-page-break": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz",
+			"integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==",
+			"requires": {}
+		},
+		"postcss-place": {
+			"version": "9.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-9.0.1.tgz",
+			"integrity": "sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q==",
+			"requires": {
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"postcss-preset-env": {
+			"version": "9.3.0",
+			"resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.3.0.tgz",
+			"integrity": "sha512-ycw6doPrqV6QxDCtgiyGDef61bEfiSc59HGM4gOw/wxQxmKnhuEery61oOC/5ViENz/ycpRsuhTexs1kUBTvVw==",
+			"requires": {
+				"@csstools/postcss-cascade-layers": "^4.0.1",
+				"@csstools/postcss-color-function": "^3.0.7",
+				"@csstools/postcss-color-mix-function": "^2.0.7",
+				"@csstools/postcss-exponential-functions": "^1.0.1",
+				"@csstools/postcss-font-format-keywords": "^3.0.0",
+				"@csstools/postcss-gamut-mapping": "^1.0.0",
+				"@csstools/postcss-gradients-interpolation-method": "^4.0.7",
+				"@csstools/postcss-hwb-function": "^3.0.6",
+				"@csstools/postcss-ic-unit": "^3.0.2",
+				"@csstools/postcss-initial": "^1.0.0",
+				"@csstools/postcss-is-pseudo-class": "^4.0.3",
+				"@csstools/postcss-logical-float-and-clear": "^2.0.0",
+				"@csstools/postcss-logical-overflow": "^1.0.0",
+				"@csstools/postcss-logical-overscroll-behavior": "^1.0.0",
+				"@csstools/postcss-logical-resize": "^2.0.0",
+				"@csstools/postcss-logical-viewport-units": "^2.0.3",
+				"@csstools/postcss-media-minmax": "^1.1.0",
+				"@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.3",
+				"@csstools/postcss-nested-calc": "^3.0.0",
+				"@csstools/postcss-normalize-display-values": "^3.0.1",
+				"@csstools/postcss-oklab-function": "^3.0.7",
+				"@csstools/postcss-progressive-custom-properties": "^3.0.2",
+				"@csstools/postcss-relative-color-syntax": "^2.0.7",
+				"@csstools/postcss-scope-pseudo-class": "^3.0.0",
+				"@csstools/postcss-stepped-value-functions": "^3.0.2",
+				"@csstools/postcss-text-decoration-shorthand": "^3.0.3",
+				"@csstools/postcss-trigonometric-functions": "^3.0.2",
+				"@csstools/postcss-unset-value": "^3.0.0",
+				"autoprefixer": "^10.4.16",
+				"browserslist": "^4.22.1",
+				"css-blank-pseudo": "^6.0.0",
+				"css-has-pseudo": "^6.0.0",
+				"css-prefers-color-scheme": "^9.0.0",
+				"cssdb": "^7.9.0",
+				"postcss-attribute-case-insensitive": "^6.0.2",
+				"postcss-clamp": "^4.1.0",
+				"postcss-color-functional-notation": "^6.0.2",
+				"postcss-color-hex-alpha": "^9.0.2",
+				"postcss-color-rebeccapurple": "^9.0.1",
+				"postcss-custom-media": "^10.0.2",
+				"postcss-custom-properties": "^13.3.2",
+				"postcss-custom-selectors": "^7.1.6",
+				"postcss-dir-pseudo-class": "^8.0.0",
+				"postcss-double-position-gradients": "^5.0.2",
+				"postcss-focus-visible": "^9.0.0",
+				"postcss-focus-within": "^8.0.0",
+				"postcss-font-variant": "^5.0.0",
+				"postcss-gap-properties": "^5.0.0",
+				"postcss-image-set-function": "^6.0.1",
+				"postcss-lab-function": "^6.0.7",
+				"postcss-logical": "^7.0.0",
+				"postcss-nesting": "^12.0.1",
+				"postcss-opacity-percentage": "^2.0.0",
+				"postcss-overflow-shorthand": "^5.0.0",
+				"postcss-page-break": "^3.0.4",
+				"postcss-place": "^9.0.0",
+				"postcss-pseudo-class-any-link": "^9.0.0",
+				"postcss-replace-overflow-wrap": "^4.0.0",
+				"postcss-selector-not": "^7.0.1",
+				"postcss-value-parser": "^4.2.0"
+			}
+		},
+		"postcss-pseudo-class-any-link": {
+			"version": "9.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.1.tgz",
+			"integrity": "sha512-cKYGGZ9yzUZi+dZd7XT2M8iSDfo+T2Ctbpiizf89uBTBfIpZpjvTavzIJXpCReMVXSKROqzpxClNu6fz4DHM0Q==",
+			"requires": {
+				"postcss-selector-parser": "^6.0.13"
+			}
+		},
+		"postcss-replace-overflow-wrap": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz",
+			"integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==",
+			"requires": {}
+		},
+		"postcss-selector-not": {
+			"version": "7.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz",
+			"integrity": "sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==",
+			"requires": {
+				"postcss-selector-parser": "^6.0.10"
+			}
+		},
+		"postcss-selector-parser": {
+			"version": "6.0.15",
+			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
+			"integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
+			"requires": {
+				"cssesc": "^3.0.0",
+				"util-deprecate": "^1.0.2"
+			}
+		},
+		"postcss-value-parser": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+			"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+		},
 		"prebuild-install": {
 			"version": "7.1.1",
 			"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
@@ -9617,6 +13541,15 @@
 				"unified": "^11.0.0"
 			}
 		},
+		"remark-mdx": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.0.tgz",
+			"integrity": "sha512-O7yfjuC6ra3NHPbRVxfflafAj3LTwx3b73aBvkEFU5z4PsD6FD4vrqJAkE5iNGLz71GdjXfgRqm3SQ0h0VuE7g==",
+			"requires": {
+				"mdast-util-mdx": "^3.0.0",
+				"micromark-extension-mdxjs": "^3.0.0"
+			}
+		},
 		"remark-parse": {
 			"version": "11.0.0",
 			"resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
@@ -10015,23 +13948,27 @@
 			"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
 		},
 		"rollup": {
-			"version": "4.9.1",
-			"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.1.tgz",
-			"integrity": "sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==",
+			"version": "4.18.0",
+			"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
+			"integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
 			"requires": {
-				"@rollup/rollup-android-arm-eabi": "4.9.1",
-				"@rollup/rollup-android-arm64": "4.9.1",
-				"@rollup/rollup-darwin-arm64": "4.9.1",
-				"@rollup/rollup-darwin-x64": "4.9.1",
-				"@rollup/rollup-linux-arm-gnueabihf": "4.9.1",
-				"@rollup/rollup-linux-arm64-gnu": "4.9.1",
-				"@rollup/rollup-linux-arm64-musl": "4.9.1",
-				"@rollup/rollup-linux-riscv64-gnu": "4.9.1",
-				"@rollup/rollup-linux-x64-gnu": "4.9.1",
-				"@rollup/rollup-linux-x64-musl": "4.9.1",
-				"@rollup/rollup-win32-arm64-msvc": "4.9.1",
-				"@rollup/rollup-win32-ia32-msvc": "4.9.1",
-				"@rollup/rollup-win32-x64-msvc": "4.9.1",
+				"@rollup/rollup-android-arm-eabi": "4.18.0",
+				"@rollup/rollup-android-arm64": "4.18.0",
+				"@rollup/rollup-darwin-arm64": "4.18.0",
+				"@rollup/rollup-darwin-x64": "4.18.0",
+				"@rollup/rollup-linux-arm-gnueabihf": "4.18.0",
+				"@rollup/rollup-linux-arm-musleabihf": "4.18.0",
+				"@rollup/rollup-linux-arm64-gnu": "4.18.0",
+				"@rollup/rollup-linux-arm64-musl": "4.18.0",
+				"@rollup/rollup-linux-powerpc64le-gnu": "4.18.0",
+				"@rollup/rollup-linux-riscv64-gnu": "4.18.0",
+				"@rollup/rollup-linux-s390x-gnu": "4.18.0",
+				"@rollup/rollup-linux-x64-gnu": "4.18.0",
+				"@rollup/rollup-linux-x64-musl": "4.18.0",
+				"@rollup/rollup-win32-arm64-msvc": "4.18.0",
+				"@rollup/rollup-win32-ia32-msvc": "4.18.0",
+				"@rollup/rollup-win32-x64-msvc": "4.18.0",
+				"@types/estree": "1.0.5",
 				"fsevents": "~2.3.2"
 			}
 		},
@@ -10132,6 +14069,11 @@
 				"hast-util-to-html": "^9.0.0"
 			}
 		},
+		"shikiji-core": {
+			"version": "0.9.19",
+			"resolved": "https://registry.npmjs.org/shikiji-core/-/shikiji-core-0.9.19.tgz",
+			"integrity": "sha512-AFJu/vcNT21t0e6YrfadZ+9q86gvPum6iywRyt1OtIPjPFe25RQnYJyxHQPMLKCCWA992TPxmEmbNcOZCAJclw=="
+		},
 		"signal-exit": {
 			"version": "4.1.0",
 			"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
@@ -10186,10 +14128,15 @@
 				}
 			}
 		},
+		"source-map": {
+			"version": "0.7.4",
+			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+			"integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="
+		},
 		"source-map-js": {
-			"version": "1.0.2",
-			"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-			"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+			"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg=="
 		},
 		"space-separated-tokens": {
 			"version": "2.0.2",
@@ -10298,6 +14245,14 @@
 			"integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
 			"optional": true
 		},
+		"style-to-object": {
+			"version": "0.4.4",
+			"resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz",
+			"integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==",
+			"requires": {
+				"inline-style-parser": "0.1.1"
+			}
+		},
 		"supports-color": {
 			"version": "5.5.0",
 			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -10445,6 +14400,23 @@
 				"@types/unist": "^3.0.0"
 			}
 		},
+		"unist-util-position-from-estree": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz",
+			"integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==",
+			"requires": {
+				"@types/unist": "^3.0.0"
+			}
+		},
+		"unist-util-remove-position": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
+			"integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
+			"requires": {
+				"@types/unist": "^3.0.0",
+				"unist-util-visit": "^5.0.0"
+			}
+		},
 		"unist-util-stringify-position": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
@@ -10530,14 +14502,184 @@
 			}
 		},
 		"vite": {
-			"version": "5.0.10",
-			"resolved": "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz",
-			"integrity": "sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==",
+			"version": "5.3.1",
+			"resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz",
+			"integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==",
 			"requires": {
-				"esbuild": "^0.19.3",
+				"esbuild": "^0.21.3",
 				"fsevents": "~2.3.3",
-				"postcss": "^8.4.32",
-				"rollup": "^4.2.0"
+				"postcss": "^8.4.38",
+				"rollup": "^4.13.0"
+			},
+			"dependencies": {
+				"@esbuild/aix-ppc64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+					"integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+					"optional": true
+				},
+				"@esbuild/android-arm": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+					"integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+					"optional": true
+				},
+				"@esbuild/android-arm64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+					"integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+					"optional": true
+				},
+				"@esbuild/android-x64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+					"integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+					"optional": true
+				},
+				"@esbuild/darwin-arm64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+					"integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+					"optional": true
+				},
+				"@esbuild/darwin-x64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+					"integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+					"optional": true
+				},
+				"@esbuild/freebsd-arm64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+					"integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+					"optional": true
+				},
+				"@esbuild/freebsd-x64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+					"integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+					"optional": true
+				},
+				"@esbuild/linux-arm": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+					"integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+					"optional": true
+				},
+				"@esbuild/linux-arm64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+					"integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+					"optional": true
+				},
+				"@esbuild/linux-ia32": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+					"integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+					"optional": true
+				},
+				"@esbuild/linux-loong64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+					"integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+					"optional": true
+				},
+				"@esbuild/linux-mips64el": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+					"integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+					"optional": true
+				},
+				"@esbuild/linux-ppc64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+					"integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+					"optional": true
+				},
+				"@esbuild/linux-riscv64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+					"integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+					"optional": true
+				},
+				"@esbuild/linux-s390x": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+					"integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+					"optional": true
+				},
+				"@esbuild/linux-x64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+					"integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+					"optional": true
+				},
+				"@esbuild/netbsd-x64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+					"integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+					"optional": true
+				},
+				"@esbuild/openbsd-x64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+					"integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+					"optional": true
+				},
+				"@esbuild/sunos-x64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+					"integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+					"optional": true
+				},
+				"@esbuild/win32-arm64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+					"integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+					"optional": true
+				},
+				"@esbuild/win32-ia32": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+					"integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+					"optional": true
+				},
+				"@esbuild/win32-x64": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+					"integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+					"optional": true
+				},
+				"esbuild": {
+					"version": "0.21.5",
+					"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+					"integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+					"requires": {
+						"@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"
+					}
+				}
 			}
 		},
 		"vitefu": {
diff --git a/package.json b/package.json
index 37bdf2d..9efae23 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "@firq/fgosite",
 	"type": "module",
-	"version": "0.1.7",
+	"version": "0.1.27",
 	"private": true,
 	"scripts": {
 		"dev": "astro dev",
@@ -11,10 +11,18 @@
 		"astro": "astro"
 	},
 	"dependencies": {
+		"@astro-community/astro-embed-youtube": "^0.4.3",
 		"@astrojs/check": "^0.3.3",
+		"@astrojs/mdx": "^2.0.3",
 		"@astrojs/sitemap": "^3.0.3",
-		"astro": "^4.0.7",
-		"iconoir": "^6.1.0",
+		"astro": "^4.2.1",
+		"autoprefixer": "^10.4.16",
+		"iconoir": "^7.2.0",
+		"postcss-preset-env": "^9.3.0",
 		"typescript": "^5.3.3"
-	}
+	},
+	"browserslist": [
+		"last 2 versions",
+		">0.5% and not dead"
+	]
 }
diff --git a/postcss.config.cjs b/postcss.config.cjs
new file mode 100644
index 0000000..5fd8746
--- /dev/null
+++ b/postcss.config.cjs
@@ -0,0 +1,13 @@
+module.exports = {
+  plugins: {
+    "postcss-preset-env": {
+      autoprefixer: { flexbox: "no-2009" },
+      stage: 2,
+      features: {
+        "custom-properties": false,
+        "custom-media-queries": true,
+        "nesting-rules": true
+      }
+    }
+  }
+};
\ No newline at end of file
diff --git a/serve.json b/serve.json
index 6f9caef..06f578d 100644
--- a/serve.json
+++ b/serve.json
@@ -14,14 +14,14 @@
       "source" : "**/*.css",
       "headers" : [{
         "key" : "Cache-Control",
-        "value" : "max-age=86400"
+        "value" : "max-age=31536000"
       }]
     },
     {
       "source" : "**/*.@(jpg|jpeg|gif|png|webp|svg)",
       "headers" : [{
         "key" : "Cache-Control",
-        "value" : "max-age=86400"
+        "value" : "max-age=31536000"
       }]
     }
   ]
diff --git a/static/assets/atlas.png b/src/assets/atlas.png
similarity index 100%
rename from static/assets/atlas.png
rename to src/assets/atlas.png
diff --git a/src/assets/ce/2030.png b/src/assets/ce/2030.png
new file mode 100644
index 0000000..e9fae8f
Binary files /dev/null and b/src/assets/ce/2030.png differ
diff --git a/src/assets/ce/500.png b/src/assets/ce/500.png
new file mode 100644
index 0000000..9f5623c
Binary files /dev/null and b/src/assets/ce/500.png differ
diff --git a/src/assets/ce/black_grail.png b/src/assets/ce/black_grail.png
new file mode 100644
index 0000000..990ba68
Binary files /dev/null and b/src/assets/ce/black_grail.png differ
diff --git a/src/assets/ce/bond-ce/bride.png b/src/assets/ce/bond-ce/bride.png
new file mode 100644
index 0000000..06e7ac1
Binary files /dev/null and b/src/assets/ce/bond-ce/bride.png differ
diff --git a/src/assets/ce/bond-ce/castoria.png b/src/assets/ce/bond-ce/castoria.png
new file mode 100644
index 0000000..2b2875e
Binary files /dev/null and b/src/assets/ce/bond-ce/castoria.png differ
diff --git a/src/assets/ce/bond-ce/chiron.png b/src/assets/ce/bond-ce/chiron.png
new file mode 100644
index 0000000..4380a67
Binary files /dev/null and b/src/assets/ce/bond-ce/chiron.png differ
diff --git a/src/assets/ce/bond-ce/crane.png b/src/assets/ce/bond-ce/crane.png
new file mode 100644
index 0000000..f90cc92
Binary files /dev/null and b/src/assets/ce/bond-ce/crane.png differ
diff --git a/src/assets/ce/bond-ce/douman.png b/src/assets/ce/bond-ce/douman.png
new file mode 100644
index 0000000..b44f694
Binary files /dev/null and b/src/assets/ce/bond-ce/douman.png differ
diff --git a/src/assets/ce/bond-ce/gogh.png b/src/assets/ce/bond-ce/gogh.png
new file mode 100644
index 0000000..e6f5f61
Binary files /dev/null and b/src/assets/ce/bond-ce/gogh.png differ
diff --git a/src/assets/ce/bond-ce/himiko.png b/src/assets/ce/bond-ce/himiko.png
new file mode 100644
index 0000000..1d5dcc2
Binary files /dev/null and b/src/assets/ce/bond-ce/himiko.png differ
diff --git a/src/assets/ce/bond-ce/ibaraki.png b/src/assets/ce/bond-ce/ibaraki.png
new file mode 100644
index 0000000..805175f
Binary files /dev/null and b/src/assets/ce/bond-ce/ibaraki.png differ
diff --git a/src/assets/ce/bond-ce/jane.png b/src/assets/ce/bond-ce/jane.png
new file mode 100644
index 0000000..8a54d14
Binary files /dev/null and b/src/assets/ce/bond-ce/jane.png differ
diff --git a/src/assets/ce/bond-ce/koyanlight.png b/src/assets/ce/bond-ce/koyanlight.png
new file mode 100644
index 0000000..b5a9e61
Binary files /dev/null and b/src/assets/ce/bond-ce/koyanlight.png differ
diff --git a/src/assets/ce/bond-ce/liz.png b/src/assets/ce/bond-ce/liz.png
new file mode 100644
index 0000000..495d708
Binary files /dev/null and b/src/assets/ce/bond-ce/liz.png differ
diff --git a/src/assets/ce/bond-ce/merlin.png b/src/assets/ce/bond-ce/merlin.png
new file mode 100644
index 0000000..d3f492f
Binary files /dev/null and b/src/assets/ce/bond-ce/merlin.png differ
diff --git a/src/assets/ce/bond-ce/oberon.png b/src/assets/ce/bond-ce/oberon.png
new file mode 100644
index 0000000..b836b58
Binary files /dev/null and b/src/assets/ce/bond-ce/oberon.png differ
diff --git a/src/assets/ce/bond-ce/reines.png b/src/assets/ce/bond-ce/reines.png
new file mode 100644
index 0000000..8cdea85
Binary files /dev/null and b/src/assets/ce/bond-ce/reines.png differ
diff --git a/src/assets/ce/bond-ce/santagale.png b/src/assets/ce/bond-ce/santagale.png
new file mode 100644
index 0000000..0163273
Binary files /dev/null and b/src/assets/ce/bond-ce/santagale.png differ
diff --git a/src/assets/ce/bond-ce/scathach.png b/src/assets/ce/bond-ce/scathach.png
new file mode 100644
index 0000000..5238bed
Binary files /dev/null and b/src/assets/ce/bond-ce/scathach.png differ
diff --git a/src/assets/ce/bond-ce/sherlock.png b/src/assets/ce/bond-ce/sherlock.png
new file mode 100644
index 0000000..cfe78fa
Binary files /dev/null and b/src/assets/ce/bond-ce/sherlock.png differ
diff --git a/src/assets/ce/bond-ce/skadi.png b/src/assets/ce/bond-ce/skadi.png
new file mode 100644
index 0000000..a2d445d
Binary files /dev/null and b/src/assets/ce/bond-ce/skadi.png differ
diff --git a/src/assets/ce/bond-ce/taigong.png b/src/assets/ce/bond-ce/taigong.png
new file mode 100644
index 0000000..11820a3
Binary files /dev/null and b/src/assets/ce/bond-ce/taigong.png differ
diff --git a/src/assets/ce/bond-ce/tamamo.png b/src/assets/ce/bond-ce/tamamo.png
new file mode 100644
index 0000000..03cac41
Binary files /dev/null and b/src/assets/ce/bond-ce/tamamo.png differ
diff --git a/src/assets/ce/bond-ce/waver.png b/src/assets/ce/bond-ce/waver.png
new file mode 100644
index 0000000..aafd1da
Binary files /dev/null and b/src/assets/ce/bond-ce/waver.png differ
diff --git a/src/assets/ce/bond-ce/wu.png b/src/assets/ce/bond-ce/wu.png
new file mode 100644
index 0000000..cfc46a5
Binary files /dev/null and b/src/assets/ce/bond-ce/wu.png differ
diff --git a/src/assets/ce/devilish_bodhisattva.png b/src/assets/ce/devilish_bodhisattva.png
new file mode 100644
index 0000000..e466954
Binary files /dev/null and b/src/assets/ce/devilish_bodhisattva.png differ
diff --git a/src/assets/ce/kaleidoscope.png b/src/assets/ce/kaleidoscope.png
new file mode 100644
index 0000000..351d722
Binary files /dev/null and b/src/assets/ce/kaleidoscope.png differ
diff --git a/src/assets/ce/maidens_teachings.png b/src/assets/ce/maidens_teachings.png
new file mode 100644
index 0000000..9d520a5
Binary files /dev/null and b/src/assets/ce/maidens_teachings.png differ
diff --git a/src/assets/ce/merciless_one.png b/src/assets/ce/merciless_one.png
new file mode 100644
index 0000000..5645c4b
Binary files /dev/null and b/src/assets/ce/merciless_one.png differ
diff --git a/src/assets/ce/mlb.png b/src/assets/ce/mlb.png
new file mode 100644
index 0000000..19e92b5
Binary files /dev/null and b/src/assets/ce/mlb.png differ
diff --git a/static/assets/ce/mlb.webp b/src/assets/ce/mlb.webp
similarity index 100%
rename from static/assets/ce/mlb.webp
rename to src/assets/ce/mlb.webp
diff --git a/src/assets/ce/outrage.png b/src/assets/ce/outrage.png
new file mode 100644
index 0000000..2cf3b1a
Binary files /dev/null and b/src/assets/ce/outrage.png differ
diff --git a/src/assets/ce/ox-demon.png b/src/assets/ce/ox-demon.png
new file mode 100644
index 0000000..df903c0
Binary files /dev/null and b/src/assets/ce/ox-demon.png differ
diff --git a/src/assets/ce/prisma_cosmos.png b/src/assets/ce/prisma_cosmos.png
new file mode 100644
index 0000000..7604f00
Binary files /dev/null and b/src/assets/ce/prisma_cosmos.png differ
diff --git a/src/assets/ce/vessel.png b/src/assets/ce/vessel.png
new file mode 100644
index 0000000..8b267b4
Binary files /dev/null and b/src/assets/ce/vessel.png differ
diff --git a/static/assets/embed.png b/src/assets/embed.png
similarity index 100%
rename from static/assets/embed.png
rename to src/assets/embed.png
diff --git a/src/assets/favourites/scathach.png b/src/assets/favourites/scathach.png
new file mode 100644
index 0000000..e2325f7
Binary files /dev/null and b/src/assets/favourites/scathach.png differ
diff --git a/src/assets/favourites/skadi.png b/src/assets/favourites/skadi.png
new file mode 100644
index 0000000..1585b7f
Binary files /dev/null and b/src/assets/favourites/skadi.png differ
diff --git a/static/assets/fedora.png b/src/assets/fedora.png
similarity index 100%
rename from static/assets/fedora.png
rename to src/assets/fedora.png
diff --git a/static/assets/logo.svg b/src/assets/logo.svg
similarity index 100%
rename from static/assets/logo.svg
rename to src/assets/logo.svg
diff --git a/static/assets/lurker.png b/src/assets/lurker.png
similarity index 100%
rename from static/assets/lurker.png
rename to src/assets/lurker.png
diff --git a/src/assets/okita.png b/src/assets/okita.png
new file mode 100644
index 0000000..47c739d
Binary files /dev/null and b/src/assets/okita.png differ
diff --git a/static/assets/old.logo.svg b/src/assets/old.logo.svg
similarity index 100%
rename from static/assets/old.logo.svg
rename to src/assets/old.logo.svg
diff --git a/static/assets/padoru.png b/src/assets/padoru.png
similarity index 100%
rename from static/assets/padoru.png
rename to src/assets/padoru.png
diff --git a/src/assets/servant/bride_03.png b/src/assets/servant/bride_03.png
new file mode 100644
index 0000000..78ac024
Binary files /dev/null and b/src/assets/servant/bride_03.png differ
diff --git a/src/assets/servant/castoria_01.png b/src/assets/servant/castoria_01.png
new file mode 100644
index 0000000..0e5967b
Binary files /dev/null and b/src/assets/servant/castoria_01.png differ
diff --git a/src/assets/servant/castoria_02.png b/src/assets/servant/castoria_02.png
new file mode 100644
index 0000000..8ac5d39
Binary files /dev/null and b/src/assets/servant/castoria_02.png differ
diff --git a/src/assets/servant/chiron_01.png b/src/assets/servant/chiron_01.png
new file mode 100644
index 0000000..ee9ae6a
Binary files /dev/null and b/src/assets/servant/chiron_01.png differ
diff --git a/src/assets/servant/crane_01.png b/src/assets/servant/crane_01.png
new file mode 100644
index 0000000..24473f3
Binary files /dev/null and b/src/assets/servant/crane_01.png differ
diff --git a/src/assets/servant/douman_01.png b/src/assets/servant/douman_01.png
new file mode 100644
index 0000000..53cdeeb
Binary files /dev/null and b/src/assets/servant/douman_01.png differ
diff --git a/src/assets/servant/gogh_01.png b/src/assets/servant/gogh_01.png
new file mode 100644
index 0000000..db0cc6c
Binary files /dev/null and b/src/assets/servant/gogh_01.png differ
diff --git a/src/assets/servant/himiko_03.png b/src/assets/servant/himiko_03.png
new file mode 100644
index 0000000..e9a73df
Binary files /dev/null and b/src/assets/servant/himiko_03.png differ
diff --git a/src/assets/servant/ibaraki_02.png b/src/assets/servant/ibaraki_02.png
new file mode 100644
index 0000000..01e43ab
Binary files /dev/null and b/src/assets/servant/ibaraki_02.png differ
diff --git a/src/assets/servant/jane_02.png b/src/assets/servant/jane_02.png
new file mode 100644
index 0000000..f65d96d
Binary files /dev/null and b/src/assets/servant/jane_02.png differ
diff --git a/src/assets/servant/koyanlight_01.png b/src/assets/servant/koyanlight_01.png
new file mode 100644
index 0000000..7fe8bbd
Binary files /dev/null and b/src/assets/servant/koyanlight_01.png differ
diff --git a/src/assets/servant/liz_01.png b/src/assets/servant/liz_01.png
new file mode 100644
index 0000000..c1d83d8
Binary files /dev/null and b/src/assets/servant/liz_01.png differ
diff --git a/src/assets/servant/merlin_01.png b/src/assets/servant/merlin_01.png
new file mode 100644
index 0000000..8e8ffc5
Binary files /dev/null and b/src/assets/servant/merlin_01.png differ
diff --git a/src/assets/servant/merlin_03.png b/src/assets/servant/merlin_03.png
new file mode 100644
index 0000000..565563a
Binary files /dev/null and b/src/assets/servant/merlin_03.png differ
diff --git a/src/assets/servant/oberon_02.png b/src/assets/servant/oberon_02.png
new file mode 100644
index 0000000..59bb4bc
Binary files /dev/null and b/src/assets/servant/oberon_02.png differ
diff --git a/src/assets/servant/reines_01.png b/src/assets/servant/reines_01.png
new file mode 100644
index 0000000..e2ebfd2
Binary files /dev/null and b/src/assets/servant/reines_01.png differ
diff --git a/src/assets/servant/santagale_01.png b/src/assets/servant/santagale_01.png
new file mode 100644
index 0000000..7a1e541
Binary files /dev/null and b/src/assets/servant/santagale_01.png differ
diff --git a/src/assets/servant/scathach_03.png b/src/assets/servant/scathach_03.png
new file mode 100644
index 0000000..3b1dd8b
Binary files /dev/null and b/src/assets/servant/scathach_03.png differ
diff --git a/src/assets/servant/sherlock_03.png b/src/assets/servant/sherlock_03.png
new file mode 100644
index 0000000..072e233
Binary files /dev/null and b/src/assets/servant/sherlock_03.png differ
diff --git a/src/assets/servant/skadi_01.png b/src/assets/servant/skadi_01.png
new file mode 100644
index 0000000..dfd43f3
Binary files /dev/null and b/src/assets/servant/skadi_01.png differ
diff --git a/src/assets/servant/skadi_02.png b/src/assets/servant/skadi_02.png
new file mode 100644
index 0000000..3218553
Binary files /dev/null and b/src/assets/servant/skadi_02.png differ
diff --git a/src/assets/servant/skadi_03.png b/src/assets/servant/skadi_03.png
new file mode 100644
index 0000000..a9687e6
Binary files /dev/null and b/src/assets/servant/skadi_03.png differ
diff --git a/src/assets/servant/taigong_03.png b/src/assets/servant/taigong_03.png
new file mode 100644
index 0000000..8c025e3
Binary files /dev/null and b/src/assets/servant/taigong_03.png differ
diff --git a/src/assets/servant/tamamo_03.png b/src/assets/servant/tamamo_03.png
new file mode 100644
index 0000000..167e061
Binary files /dev/null and b/src/assets/servant/tamamo_03.png differ
diff --git a/src/assets/servant/waver_02.png b/src/assets/servant/waver_02.png
new file mode 100644
index 0000000..1860bc6
Binary files /dev/null and b/src/assets/servant/waver_02.png differ
diff --git a/src/assets/servant/wu_01.png b/src/assets/servant/wu_01.png
new file mode 100644
index 0000000..6c8b774
Binary files /dev/null and b/src/assets/servant/wu_01.png differ
diff --git a/static/assets/shishousad.webp b/src/assets/shishousad.webp
similarity index 100%
rename from static/assets/shishousad.webp
rename to src/assets/shishousad.webp
diff --git a/static/assets/social/custom-fgo.webp b/src/assets/social/custom-fgo.webp
similarity index 100%
rename from static/assets/social/custom-fgo.webp
rename to src/assets/social/custom-fgo.webp
diff --git a/static/assets/social/discord.webp b/src/assets/social/discord.webp
similarity index 100%
rename from static/assets/social/discord.webp
rename to src/assets/social/discord.webp
diff --git a/static/assets/social/reddit.webp b/src/assets/social/reddit.webp
similarity index 100%
rename from static/assets/social/reddit.webp
rename to src/assets/social/reddit.webp
diff --git a/static/assets/social/twitch.webp b/src/assets/social/twitch.webp
similarity index 100%
rename from static/assets/social/twitch.webp
rename to src/assets/social/twitch.webp
diff --git a/static/assets/social/twitter.webp b/src/assets/social/twitter.webp
similarity index 100%
rename from static/assets/social/twitter.webp
rename to src/assets/social/twitter.webp
diff --git a/static/assets/social/youtube.webp b/src/assets/social/youtube.webp
similarity index 100%
rename from static/assets/social/youtube.webp
rename to src/assets/social/youtube.webp
diff --git a/static/assets/ta_icons/___albion.webp b/src/assets/ta_icons/___albion.webp
similarity index 100%
rename from static/assets/ta_icons/___albion.webp
rename to src/assets/ta_icons/___albion.webp
diff --git a/static/assets/ta_icons/__albion.webp b/src/assets/ta_icons/__albion.webp
similarity index 100%
rename from static/assets/ta_icons/__albion.webp
rename to src/assets/ta_icons/__albion.webp
diff --git a/src/assets/ta_icons/abyssalworm.webp b/src/assets/ta_icons/abyssalworm.webp
new file mode 100644
index 0000000..dd73854
Binary files /dev/null and b/src/assets/ta_icons/abyssalworm.webp differ
diff --git a/static/assets/ta_icons/albion.webp b/src/assets/ta_icons/albion.webp
similarity index 100%
rename from static/assets/ta_icons/albion.webp
rename to src/assets/ta_icons/albion.webp
diff --git a/static/assets/ta_icons/arthur.webp b/src/assets/ta_icons/arthur.webp
similarity index 100%
rename from static/assets/ta_icons/arthur.webp
rename to src/assets/ta_icons/arthur.webp
diff --git a/static/assets/ta_icons/barghest.webp b/src/assets/ta_icons/barghest.webp
similarity index 100%
rename from static/assets/ta_icons/barghest.webp
rename to src/assets/ta_icons/barghest.webp
diff --git a/src/assets/ta_icons/beast_4_l.png b/src/assets/ta_icons/beast_4_l.png
new file mode 100644
index 0000000..59b3af1
Binary files /dev/null and b/src/assets/ta_icons/beast_4_l.png differ
diff --git a/static/assets/ta_icons/caenis.webp b/src/assets/ta_icons/caenis.webp
similarity index 100%
rename from static/assets/ta_icons/caenis.webp
rename to src/assets/ta_icons/caenis.webp
diff --git a/static/assets/ta_icons/calamityofnorwich.webp b/src/assets/ta_icons/calamityofnorwich.webp
similarity index 100%
rename from static/assets/ta_icons/calamityofnorwich.webp
rename to src/assets/ta_icons/calamityofnorwich.webp
diff --git a/src/assets/ta_icons/cernnunos.webp b/src/assets/ta_icons/cernnunos.webp
new file mode 100644
index 0000000..55ef9e4
Binary files /dev/null and b/src/assets/ta_icons/cernnunos.webp differ
diff --git a/static/assets/ta_icons/db.webp b/src/assets/ta_icons/db.webp
similarity index 100%
rename from static/assets/ta_icons/db.webp
rename to src/assets/ta_icons/db.webp
diff --git a/static/assets/ta_icons/dioscuri.webp b/src/assets/ta_icons/dioscuri.webp
similarity index 100%
rename from static/assets/ta_icons/dioscuri.webp
rename to src/assets/ta_icons/dioscuri.webp
diff --git a/static/assets/ta_icons/douman.webp b/src/assets/ta_icons/douman.webp
similarity index 100%
rename from static/assets/ta_icons/douman.webp
rename to src/assets/ta_icons/douman.webp
diff --git a/static/assets/ta_icons/erice.webp b/src/assets/ta_icons/erice.webp
similarity index 100%
rename from static/assets/ta_icons/erice.webp
rename to src/assets/ta_icons/erice.webp
diff --git a/static/assets/ta_icons/fuuma.webp b/src/assets/ta_icons/fuuma.webp
similarity index 100%
rename from static/assets/ta_icons/fuuma.webp
rename to src/assets/ta_icons/fuuma.webp
diff --git a/static/assets/ta_icons/galatea.webp b/src/assets/ta_icons/galatea.webp
similarity index 100%
rename from static/assets/ta_icons/galatea.webp
rename to src/assets/ta_icons/galatea.webp
diff --git a/static/assets/ta_icons/goetia.webp b/src/assets/ta_icons/goetia.webp
similarity index 100%
rename from static/assets/ta_icons/goetia.webp
rename to src/assets/ta_icons/goetia.webp
diff --git a/static/assets/ta_icons/ibuki.webp b/src/assets/ta_icons/ibuki.webp
similarity index 100%
rename from static/assets/ta_icons/ibuki.webp
rename to src/assets/ta_icons/ibuki.webp
diff --git a/src/assets/ta_icons/izumo.webp b/src/assets/ta_icons/izumo.webp
new file mode 100644
index 0000000..4f62fc2
Binary files /dev/null and b/src/assets/ta_icons/izumo.webp differ
diff --git a/src/assets/ta_icons/kamasummer.webp b/src/assets/ta_icons/kamasummer.webp
new file mode 100644
index 0000000..3f6e012
Binary files /dev/null and b/src/assets/ta_icons/kamasummer.webp differ
diff --git a/static/assets/ta_icons/kingprotea.webp b/src/assets/ta_icons/kingprotea.webp
similarity index 100%
rename from static/assets/ta_icons/kingprotea.webp
rename to src/assets/ta_icons/kingprotea.webp
diff --git a/static/assets/ta_icons/kirschtaria.webp b/src/assets/ta_icons/kirschtaria.webp
similarity index 100%
rename from static/assets/ta_icons/kirschtaria.webp
rename to src/assets/ta_icons/kirschtaria.webp
diff --git a/static/assets/ta_icons/kiyohime.webp b/src/assets/ta_icons/kiyohime.webp
similarity index 100%
rename from static/assets/ta_icons/kiyohime.webp
rename to src/assets/ta_icons/kiyohime.webp
diff --git a/src/assets/ta_icons/koyanskayaofdark.png b/src/assets/ta_icons/koyanskayaofdark.png
new file mode 100644
index 0000000..ce1fba7
Binary files /dev/null and b/src/assets/ta_icons/koyanskayaofdark.png differ
diff --git a/src/assets/ta_icons/koyo.webp b/src/assets/ta_icons/koyo.webp
new file mode 100644
index 0000000..22e45f6
Binary files /dev/null and b/src/assets/ta_icons/koyo.webp differ
diff --git a/static/assets/ta_icons/melusine.webp b/src/assets/ta_icons/melusine.webp
similarity index 100%
rename from static/assets/ta_icons/melusine.webp
rename to src/assets/ta_icons/melusine.webp
diff --git a/static/assets/ta_icons/mhxx.webp b/src/assets/ta_icons/mhxx.webp
similarity index 100%
rename from static/assets/ta_icons/mhxx.webp
rename to src/assets/ta_icons/mhxx.webp
diff --git a/static/assets/ta_icons/morgan.webp b/src/assets/ta_icons/morgan.webp
similarity index 100%
rename from static/assets/ta_icons/morgan.webp
rename to src/assets/ta_icons/morgan.webp
diff --git a/static/assets/ta_icons/moriarty.webp b/src/assets/ta_icons/moriarty.webp
similarity index 100%
rename from static/assets/ta_icons/moriarty.webp
rename to src/assets/ta_icons/moriarty.webp
diff --git a/static/assets/ta_icons/nobunaga.webp b/src/assets/ta_icons/nobunaga.webp
similarity index 100%
rename from static/assets/ta_icons/nobunaga.webp
rename to src/assets/ta_icons/nobunaga.webp
diff --git a/static/assets/ta_icons/odysseus.webp b/src/assets/ta_icons/odysseus.webp
similarity index 100%
rename from static/assets/ta_icons/odysseus.webp
rename to src/assets/ta_icons/odysseus.webp
diff --git a/static/assets/ta_icons/orion.webp b/src/assets/ta_icons/orion.webp
similarity index 100%
rename from static/assets/ta_icons/orion.webp
rename to src/assets/ta_icons/orion.webp
diff --git a/static/assets/ta_icons/penth.webp b/src/assets/ta_icons/penth.webp
similarity index 100%
rename from static/assets/ta_icons/penth.webp
rename to src/assets/ta_icons/penth.webp
diff --git a/static/assets/ta_icons/reddragon.webp b/src/assets/ta_icons/reddragon.webp
similarity index 100%
rename from static/assets/ta_icons/reddragon.webp
rename to src/assets/ta_icons/reddragon.webp
diff --git a/static/assets/ta_icons/santagale.webp b/src/assets/ta_icons/santagale.webp
similarity index 100%
rename from static/assets/ta_icons/santagale.webp
rename to src/assets/ta_icons/santagale.webp
diff --git a/static/assets/ta_icons/sei.webp b/src/assets/ta_icons/sei.webp
similarity index 100%
rename from static/assets/ta_icons/sei.webp
rename to src/assets/ta_icons/sei.webp
diff --git a/static/assets/ta_icons/shibata.webp b/src/assets/ta_icons/shibata.webp
similarity index 100%
rename from static/assets/ta_icons/shibata.webp
rename to src/assets/ta_icons/shibata.webp
diff --git a/src/assets/ta_icons/skadi.webp b/src/assets/ta_icons/skadi.webp
new file mode 100644
index 0000000..dd88e3d
Binary files /dev/null and b/src/assets/ta_icons/skadi.webp differ
diff --git a/static/assets/ta_icons/solomon.webp b/src/assets/ta_icons/solomon.webp
similarity index 100%
rename from static/assets/ta_icons/solomon.webp
rename to src/assets/ta_icons/solomon.webp
diff --git a/src/assets/ta_icons/ta_servants/caren.png b/src/assets/ta_icons/ta_servants/caren.png
new file mode 100644
index 0000000..e7cedcd
Binary files /dev/null and b/src/assets/ta_icons/ta_servants/caren.png differ
diff --git a/src/assets/ta_icons/ta_servants/jalter.png b/src/assets/ta_icons/ta_servants/jalter.png
new file mode 100644
index 0000000..cf91568
Binary files /dev/null and b/src/assets/ta_icons/ta_servants/jalter.png differ
diff --git a/src/assets/ta_icons/ta_servants/kama.png b/src/assets/ta_icons/ta_servants/kama.png
new file mode 100644
index 0000000..3a24974
Binary files /dev/null and b/src/assets/ta_icons/ta_servants/kama.png differ
diff --git a/src/assets/ta_icons/ta_servants/musashi.png b/src/assets/ta_icons/ta_servants/musashi.png
new file mode 100644
index 0000000..0166148
Binary files /dev/null and b/src/assets/ta_icons/ta_servants/musashi.png differ
diff --git a/src/assets/ta_icons/ta_servants/saberalter.png b/src/assets/ta_icons/ta_servants/saberalter.png
new file mode 100644
index 0000000..a93e190
Binary files /dev/null and b/src/assets/ta_icons/ta_servants/saberalter.png differ
diff --git a/src/assets/ta_icons/ta_servants/shishou.png b/src/assets/ta_icons/ta_servants/shishou.png
new file mode 100644
index 0000000..9485dd9
Binary files /dev/null and b/src/assets/ta_icons/ta_servants/shishou.png differ
diff --git a/src/assets/ta_icons/ta_servants/skadi.png b/src/assets/ta_icons/ta_servants/skadi.png
new file mode 100644
index 0000000..c09fc84
Binary files /dev/null and b/src/assets/ta_icons/ta_servants/skadi.png differ
diff --git a/src/assets/ta_icons/ta_servants/summerjalter.png b/src/assets/ta_icons/ta_servants/summerjalter.png
new file mode 100644
index 0000000..3c896b4
Binary files /dev/null and b/src/assets/ta_icons/ta_servants/summerjalter.png differ
diff --git a/src/assets/ta_icons/ta_servants/summermusashi.png b/src/assets/ta_icons/ta_servants/summermusashi.png
new file mode 100644
index 0000000..23fa917
Binary files /dev/null and b/src/assets/ta_icons/ta_servants/summermusashi.png differ
diff --git a/src/assets/ta_icons/ta_servants/summershishou.png b/src/assets/ta_icons/ta_servants/summershishou.png
new file mode 100644
index 0000000..0dc2c16
Binary files /dev/null and b/src/assets/ta_icons/ta_servants/summershishou.png differ
diff --git a/src/assets/ta_icons/ta_servants/tamamocat.png b/src/assets/ta_icons/ta_servants/tamamocat.png
new file mode 100644
index 0000000..da03fe6
Binary files /dev/null and b/src/assets/ta_icons/ta_servants/tamamocat.png differ
diff --git a/src/assets/ta_icons/ta_servants/tomoe.png b/src/assets/ta_icons/ta_servants/tomoe.png
new file mode 100644
index 0000000..b4df46e
Binary files /dev/null and b/src/assets/ta_icons/ta_servants/tomoe.png differ
diff --git a/src/assets/ta_icons/ta_servants/tomoesummer.png b/src/assets/ta_icons/ta_servants/tomoesummer.png
new file mode 100644
index 0000000..ab72529
Binary files /dev/null and b/src/assets/ta_icons/ta_servants/tomoesummer.png differ
diff --git a/static/assets/ta_icons/taira.webp b/src/assets/ta_icons/taira.webp
similarity index 100%
rename from static/assets/ta_icons/taira.webp
rename to src/assets/ta_icons/taira.webp
diff --git a/static/assets/ta_icons/woodwose.webp b/src/assets/ta_icons/woodwose.webp
similarity index 100%
rename from static/assets/ta_icons/woodwose.webp
rename to src/assets/ta_icons/woodwose.webp
diff --git a/src/assets/ta_icons/zenobia.webp b/src/assets/ta_icons/zenobia.webp
new file mode 100644
index 0000000..7d65cd1
Binary files /dev/null and b/src/assets/ta_icons/zenobia.webp differ
diff --git a/src/assets/technologies/astro.webp b/src/assets/technologies/astro.webp
new file mode 100644
index 0000000..c3b4e49
Binary files /dev/null and b/src/assets/technologies/astro.webp differ
diff --git a/src/assets/technologies/docker.webp b/src/assets/technologies/docker.webp
new file mode 100644
index 0000000..5471bd0
Binary files /dev/null and b/src/assets/technologies/docker.webp differ
diff --git a/src/assets/technologies/dockge.png b/src/assets/technologies/dockge.png
new file mode 100644
index 0000000..695aeb7
Binary files /dev/null and b/src/assets/technologies/dockge.png differ
diff --git a/src/assets/technologies/forgejo.webp b/src/assets/technologies/forgejo.webp
new file mode 100644
index 0000000..a9822c3
Binary files /dev/null and b/src/assets/technologies/forgejo.webp differ
diff --git a/src/assets/technologies/nodejs.webp b/src/assets/technologies/nodejs.webp
new file mode 100644
index 0000000..90c48f8
Binary files /dev/null and b/src/assets/technologies/nodejs.webp differ
diff --git a/src/assets/technologies/serve.webp b/src/assets/technologies/serve.webp
new file mode 100644
index 0000000..3d49da1
Binary files /dev/null and b/src/assets/technologies/serve.webp differ
diff --git a/static/assets/technologies/typescript.webp b/src/assets/technologies/typescript.webp
similarity index 100%
rename from static/assets/technologies/typescript.webp
rename to src/assets/technologies/typescript.webp
diff --git a/src/assets/technologies/unlighthouse.webp b/src/assets/technologies/unlighthouse.webp
new file mode 100644
index 0000000..91a9365
Binary files /dev/null and b/src/assets/technologies/unlighthouse.webp differ
diff --git a/src/assets/thumbnails/O1f-go7uJQM.jpg b/src/assets/thumbnails/O1f-go7uJQM.jpg
new file mode 100644
index 0000000..833fdc1
Binary files /dev/null and b/src/assets/thumbnails/O1f-go7uJQM.jpg differ
diff --git a/src/assets/thumbnails/UwbNp_dB_VU.jpg b/src/assets/thumbnails/UwbNp_dB_VU.jpg
new file mode 100644
index 0000000..2236df5
Binary files /dev/null and b/src/assets/thumbnails/UwbNp_dB_VU.jpg differ
diff --git a/src/assets/thumbnails/WrHudtdfivA.jpg b/src/assets/thumbnails/WrHudtdfivA.jpg
new file mode 100644
index 0000000..100f38a
Binary files /dev/null and b/src/assets/thumbnails/WrHudtdfivA.jpg differ
diff --git a/src/components/ceCard.astro b/src/components/ceCard.astro
index 5d154d4..51786f0 100644
--- a/src/components/ceCard.astro
+++ b/src/components/ceCard.astro
@@ -1,27 +1,29 @@
 ---
+import { Image } from 'astro:assets'
+import mlb_ce from '../assets/ce/mlb.webp'
+import type { GlobImage } from '../types/generic'
+import { plsLoadImage } from '../utils/tools'
+
 export interface Props {
   name: string
-  link: string
-  mlb: string
+  imageFile: string
+  mlb: boolean
 }
 
-const { mlb, link, name } = Astro.props
+const { mlb, imageFile, name } = Astro.props
+const imagePath = `/src/assets/ce/${imageFile}`
+const images_ces = import.meta.glob<GlobImage>('/src/assets/ce/*.png')
+const loadedCEImage = plsLoadImage(images_ces, imagePath)
 
-const ce_img: string = `/assets/ce/${link}.webp`
-const mlb_ce: string = `/assets/ce/mlb.webp`
-let mlb_image: string = 'mlbalign'
-
-if (mlb === 'false') {
-  mlb_image = 'hidemlb'
-}
+const mlb_image = mlb ? 'mlbalign' : 'hidemlb'
 ---
 
 <article>
   <div>
-    <img class="ce-crop" src={ce_img} alt={name} />
+    <Image src={loadedCEImage} alt={name} class="ce-crop" />
   </div>
   <div class={mlb_image}>
-    <img class="mlb" src={mlb_ce} alt="Max-limit broken" />
+    <Image src={mlb_ce} alt="Max-limit broken" class="mlb" />
   </div>
 </article>
 
@@ -86,6 +88,7 @@ if (mlb === 'false') {
 
   .mlb {
     width: 5.5rem;
+    height: auto;
     margin-left: auto;
     margin-right: auto;
   }
diff --git a/src/components/contactCard.astro b/src/components/contactCard.astro
index 1317487..93772f5 100644
--- a/src/components/contactCard.astro
+++ b/src/components/contactCard.astro
@@ -1,22 +1,36 @@
 ---
+import { Image } from 'astro:assets'
+import type { GlobImage } from '../types/generic'
+import { plsLoadImage } from '../utils/tools'
+
 export interface Props {
   site: string
   link: string
-  image: string
+  imageFile: string
 }
 
-const { image, link, site } = Astro.props
-const icon: string = `background-image: url('/assets/social/${image}.webp')`
+const { imageFile, link, site } = Astro.props
+const logoAltText = `${site} Logo`
+const imagePath = `/src/assets/social/${imageFile}`
+const images_logos = import.meta.glob<GlobImage>(
+  '/src/assets/social/*.{png,webp}'
+)
+const loadedLogoImage = plsLoadImage(images_logos, imagePath)
 ---
 
-<a href={link} target="_blank" rel="noopener noreferrer" aria-label={site}>
+<a
+  href={link}
+  target="_blank"
+  rel="noopener noreferrer"
+  aria-label=`${site} - new window`
+>
   <article class="contact do-hover">
-    <div style={icon}>
-      <span>
-        <h2>{site}</h2>
-      </span>
+    <Image src={loadedLogoImage} alt={logoAltText} />
+    <div>
+      <h2>{site}</h2>
     </div>
   </article>
+  <span class="visually-hidden">{logoAltText}</span>
 </a>
 
 <style>
@@ -24,18 +38,29 @@ const icon: string = `background-image: url('/assets/social/${image}.webp')`
     text-decoration: none;
   }
 
-  article div {
-    border-radius: 1.25rem;
-    background-size: contain;
-    display: flex;
-    align-items: center;
-    justify-content: center;
+  article {
     --size-value: 6.25rem;
+    border-radius: 1.25rem;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    background-color: var(--c-darkergray);
+    border-color: var(--c-darkgray);
+    padding: 10px;
+    text-align: center;
+    transition: transform var(--speed) var(--ease);
+    height: auto;
+    width: auto;
+    position: relative;
+  }
+
+  article img {
+    border-radius: 1.25rem;
     width: var(--size-value);
     height: var(--size-value);
   }
 
-  article:hover span {
+  article:hover div {
     border-radius: 1.25rem;
     padding: 0 0.5rem;
     display: flex;
@@ -43,9 +68,11 @@ const icon: string = `background-image: url('/assets/social/${image}.webp')`
     justify-content: center;
     text-align: center;
     background-color: var(--c-darkgray);
-    height: calc(var(--size-value) + 0.1rem);
-    width: calc(var(--size-value) + 0.1rem);
+    height: calc(var(--size-value));
+    width: calc(var(--size-value) - 1rem);
     opacity: 90%;
+    z-index: 100;
+    position: absolute;
   }
 
   article:hover h2 {
@@ -57,25 +84,14 @@ const icon: string = `background-image: url('/assets/social/${image}.webp')`
   }
 
   article h2 {
+    position: absolute;
     display: none;
   }
 
-  article span {
+  article div {
     display: none;
   }
-  article {
-    border-radius: 1.25rem;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    background-color: var(--c-darkergray);
-    border-color: var(--c-darkgray);
-    padding: 10px;
-    text-align: center;
-    transition: transform var(--speed) var(--ease);
-    height: auto;
-    width: auto;
-  }
+
   a:hover {
     transform: scale(var(--hover-scale));
   }
diff --git a/src/components/favouriteCard.astro b/src/components/favouriteCard.astro
index 9cf6c4b..83b2a87 100644
--- a/src/components/favouriteCard.astro
+++ b/src/components/favouriteCard.astro
@@ -1,19 +1,31 @@
 ---
+import { Image } from 'astro:assets'
+import type { GlobImage } from '../types/generic'
+import { plsLoadImage } from '../utils/tools'
+
 export interface Props {
   name: string
   origin: string
-  image: string
+  imageFile: string
   link: string
 }
 
-const { link, image, origin, name } = Astro.props
-
-const img: string = `/assets/favourites/${image}.webp`
+const { link, imageFile, origin, name } = Astro.props
+const imagePath = `/src/assets/favourites/${imageFile}`
+const images = import.meta.glob<GlobImage>(
+  '/src/assets/favourites/*.{png,webp}'
+)
+const loadedImage = plsLoadImage(images, imagePath)
 ---
 
-<a href={link} target="_blank" rel="noopener noreferrer">
+<a
+  href={link}
+  target="_blank"
+  rel="noopener noreferrer"
+  aria-label=`${name} - new window`
+>
   <div class="heading">{name}</div>
-  <img src={img} alt={name} />
+  <Image src={loadedImage} alt={name} />
   <h2 class="subtext">
     {origin}
   </h2>
@@ -33,10 +45,6 @@ const img: string = `/assets/favourites/${image}.webp`
     align-items: center;
   }
 
-  a:hover {
-    transform: scale(var(--hover-scale));
-  }
-
   a {
     border-radius: 1rem;
     display: flex;
@@ -52,12 +60,16 @@ const img: string = `/assets/favourites/${image}.webp`
     text-align: center;
     transition: transform var(--speed) var(--ease);
     text-decoration: none;
-  }
 
-  a > img {
-    padding: 0px 0.25em;
-    width: 90%;
-    height: auto;
+    &:hover {
+      transform: scale(var(--hover-scale));
+    }
+
+    img {
+      padding: 0px 0.25em;
+      width: 90%;
+      height: auto;
+    }
   }
 
   @media (min-width: 512px) {
@@ -65,12 +77,10 @@ const img: string = `/assets/favourites/${image}.webp`
       padding: 10px 10px;
       width: auto;
       height: auto;
-    }
-
-    a > img {
-      padding: 0px 1.5em;
-      width: 200px;
-      height: auto;
+      img {
+        padding: 0px 1.5em;
+        width: 200px;
+      }
     }
   }
 
diff --git a/src/components/fgotaHero.astro b/src/components/fgotaHero.astro
new file mode 100644
index 0000000..a7bee13
--- /dev/null
+++ b/src/components/fgotaHero.astro
@@ -0,0 +1,27 @@
+---
+---
+
+<div>
+  <span>
+    I am currently working on a site to catalogue past and future TAs.<br/>
+    Check it out at <a href="https://fgo-ta.com">fgo-ta.com</a>
+  </span>
+</div>
+
+<style>
+  div {
+    display: flex;
+    width: 100%;
+    height: 5em;
+    background-color: var(--c-gray);
+    text-align: center;
+    align-items: center;
+    justify-content: center;
+    color: white;
+    font-size: 1.5em;
+  }
+  a {
+    color: var(--c-darkpurple);
+    text-decoration: none;
+  }
+</style>
diff --git a/src/components/navbar.astro b/src/components/navbar.astro
index bed56e2..3266ad5 100644
--- a/src/components/navbar.astro
+++ b/src/components/navbar.astro
@@ -1,23 +1,28 @@
 ---
+import { Image } from 'astro:assets';
+import logo from '../assets/logo.svg'
+import hamburger from 'iconoir/icons/menu.svg'
+const hamburger_src_url = `url("${hamburger.src}")`;
 ---
 
 <header>
-  <a href="/" rel="noopener noreferrer" aria-label="Home">
-    <img src="/assets/logo.svg" alt="" />
+  <a href="/" rel="noopener noreferrer" aria-label="Home" role="navigation">
+    <Image src={logo} alt="Firq Website Logo"/>
+    <span class="visually-hidden">Firq Website Logo</span>
   </a>
   <ul class="desktop">
-    <slot />
+    <slot name="desktop"/>
   </ul>
-  <button class="mobile" aria-label="Navigation Button" tabindex="0" onclick="this.focus()">
+  <button class="mobile" aria-label="Navigation Button" tabindex="0" onclick="this.focus()" role="navigation">
     <ul>
-      <slot />
+      <slot name="mobile"/>
     </ul>
     <div class="placeholder"></div>
-    <i class="iconoir-menu"></i>
+    <div class="hamburger-menu" role="navigation"></div>
   </button>
 </header>
 
-<style>
+<style define:vars={{ hamburger_src_url }}>
   header {
     z-index: 1000;
     position: sticky;
@@ -30,7 +35,7 @@
     line-height: 1.5em;
   }
   header > a {
-    padding-left: 16px;
+    margin-left: 16px;
     padding-top: 8px;
     display: block;
     height: 48px;
@@ -79,16 +84,6 @@
     height: 64px;
   }
 
-  .mobile > i {
-    position: static;
-    color: white;
-    font-weight: bold;
-    font-size: 2em;
-    align-self: flex-start;
-    padding-right: 1em;
-    padding-top: 1.15rem;
-  }
-
   .mobile > ul {
     display: none;
     padding: 0px;
@@ -111,6 +106,17 @@
     justify-self: top;
   }
 
+  .hamburger-menu {
+    mask: var(--hamburger_src_url) no-repeat center;
+    background-color: white;
+    width: 2rem;
+    height: 2rem;
+    position: static;
+    align-self: flex-start;
+    margin-right: 1rem;
+    margin-top: 1rem;
+  }
+
   @media (min-width: 1140px) {
     .mobile {
       display: none;
diff --git a/src/components/navbarEntry.astro b/src/components/navbarEntry.astro
index 71c8165..715a4dc 100644
--- a/src/components/navbarEntry.astro
+++ b/src/components/navbarEntry.astro
@@ -1,12 +1,13 @@
 ---
 export interface Props {
   currentPage?: string
+  navtype: "mobile" | "desktop"
   link: string
   text: string
-  icon: string
+  icon: ImageMetadata
 }
 
-const { icon, text, link, currentPage } = Astro.props
+const { icon, text, link, navtype, currentPage } = Astro.props
 
 let currPage = ''
 const slug = link.replace(new RegExp('/', 'g'), '')
@@ -17,7 +18,10 @@ if (currentPage === slug) {
   currPage = 'current'
 }
 
+const icon_src_url = `url("${icon.src}")`;
 const fulllink = `/${slug}`
+
+let extraattributes = navtype === "mobile" ? { tabindex: "0"} : {}
 ---
 
 <li>
@@ -26,14 +30,15 @@ const fulllink = `/${slug}`
     rel="noopener noreferrer"
     aria-label={text}
     class={currPage}
-    tabindex="0"
+    role="navigation"
+    {...extraattributes}
   >
-    <i class={icon}></i>
+    <div class="icon"></div>
     {text}
   </a>
 </li>
 
-<style>
+<style define:vars={{ icon_src_url }}>
   li {
     align-items: center;
     justify-content: center;
@@ -41,6 +46,7 @@ const fulllink = `/${slug}`
     display: flex;
     width: 200px;
   }
+
   li > a {
     display: inline-flex;
     color: white;
@@ -52,10 +58,27 @@ const fulllink = `/${slug}`
     font-weight: bold;
     gap: 0.2em;
   }
+
   li > a:hover {
     color: var(--c-purplepink);
   }
+
+  li > a:hover > .icon {
+    background-color: var(--c-purplepink);
+  }
+
   .current {
     color: var(--c-darkpurple) !important;
   }
+
+  .current > .icon {
+    background-color: var(--c-darkpurple) !important;
+  }
+
+  .icon {
+    mask: var(--icon_src_url) no-repeat center;
+    background-color: white;
+    width: 1.4em;
+    height: 1.4em;
+  }
 </style>
diff --git a/src/components/servantCard.astro b/src/components/servantCard.astro
index 8151cb2..34abab5 100644
--- a/src/components/servantCard.astro
+++ b/src/components/servantCard.astro
@@ -1,36 +1,43 @@
 ---
+import { Image } from 'astro:assets';
+import type { GlobImage } from '../types/generic'
+import { plsLoadImage } from '../utils/tools'
+
 export interface Props {
   name: string
   level: string
   skills: string
   np: string
-  image_servant: string
-  image_bond: string
+  servantImageFile: string
+  bondceImageFile: string
   ml: string
-  bond10: string
+  bond10: boolean
 }
 
-const { bond10, ml, image_bond, image_servant, np, skills, level, name } =
-  Astro.props
+const { bond10, ml, bondceImageFile, servantImageFile, np, skills, level, name } = Astro.props
+const servantImagePath = `/src/assets/servant/${servantImageFile}`
+const bondceImagePath = `/src/assets/ce/bond-ce/${bondceImageFile}`
+const images_servants = import.meta.glob<GlobImage>('/src/assets/servant/*.{png,webp}')
+const images_bond_ces = import.meta.glob<GlobImage>('/src/assets/ce/bond-ce/*.{png,webp}')
+const loadedServantImage = plsLoadImage(images_servants, servantImagePath)
+const loadedBondCEImage = plsLoadImage(images_bond_ces, bondceImagePath)
 
-const servant_img: string = `/assets/servant/${image_servant}.webp`
-const bondce_img: string = `/assets/ce/bond-ce/${image_bond}.webp`
 let bondce_css: string = 'bond-ce'
 
-if (bond10 === 'false') {
+if (bond10 === false) {
   bondce_css += ' unobtained'
 }
 ---
 
 <article>
-  <img src={servant_img} alt={name} />
+  <Image src={loadedServantImage} alt={name} />
   <h2 class="subtext">
     Level {level}<br />
     {skills}<br />
     NP {np}
   </h2>
   <div class="expand-on-hover">
-    <img class={bondce_css} src={bondce_img} alt="" />
+    <Image src={loadedBondCEImage} alt="" class={bondce_css}/>
     <h2 class="subtext">Mana Loading: {ml === 'Not Unlocked' && <br />}{ml}</h2>
   </div>
 </article>
@@ -110,6 +117,7 @@ if (bond10 === 'false') {
 
   .bond-ce {
     padding-top: 0.75rem;
+    width: auto;
     height: 3rem;
   }
 
diff --git a/src/components/taCard.astro b/src/components/taCard.astro
index 9733b9d..be4659d 100644
--- a/src/components/taCard.astro
+++ b/src/components/taCard.astro
@@ -1,15 +1,20 @@
 ---
+import { Image } from 'astro:assets'
+import type { GlobImage } from '../types/generic'
+import { plsLoadImage } from '../utils/tools'
+
 export interface Props {
   date: string
   title: string
   link: string
-  image: string
+  targetImageFile: string
   user?: string
-  ta_servant?: string
+  servantImageFile?: string
   turns?: string
 }
 
-const { turns, ta_servant, user, date, image, link, title } = Astro.props
+const { turns, targetImageFile, user, date, servantImageFile, link, title } =
+  Astro.props
 
 const options_date: Intl.DateTimeFormatOptions = {
   year: 'numeric',
@@ -17,9 +22,19 @@ const options_date: Intl.DateTimeFormatOptions = {
   day: '2-digit',
 }
 
+const targetImagePath = `/src/assets/ta_icons/${targetImageFile}`
+const servantImagePath = `/src/assets/ta_icons/ta_servants/${servantImageFile}`
+
 const formatted_date = new Date(date).toLocaleDateString('de-DE', options_date)
-const icon: string = `background-image: url('/assets/ta_icons/${image}.webp')`
-const servant: string = `/assets/ta_icons/ta_servants/${ta_servant}.webp`
+const target_images = import.meta.glob<GlobImage>(
+  '/src/assets/ta_icons/*.{png,webp}'
+)
+const servant_images = import.meta.glob<GlobImage>(
+  '/src/assets/ta_icons/ta_servants/*.{png,webp}'
+)
+
+const loadedServantImage = plsLoadImage(servant_images, servantImagePath)
+const loadedTargetImage = plsLoadImage(target_images, targetImagePath)
 
 let hasuser = ''
 if (user !== undefined) {
@@ -29,10 +44,9 @@ if (user !== undefined) {
 
 <a href={link} target="_blank" rel="noopener noreferrer" aria-label={title}>
   <article>
-    <div class="icon" style={icon}>
-      <span>
-        <h2>{title}</h2>
-      </span>
+    <Image src={loadedTargetImage} alt={title} class="icon" />
+    <div class="title">
+      <h2>{title}</h2>
     </div>
     <p>
       <span class={hasuser}>
@@ -41,22 +55,29 @@ if (user !== undefined) {
       {formatted_date}
     </p>
     <div class="expand-on-hover">
-      <img src={servant} alt="" />
+      <Image src={loadedServantImage} alt="" />
       <h2>{turns}</h2>
     </div>
   </article>
 </a>
 
 <style>
+  div {
+    display: none;
+  }
+
   span {
     display: none;
   }
+
   .hasuser {
     display: flex;
   }
+
   a {
     text-decoration: none;
   }
+
   article {
     background-color: var(--c-darkergray);
     border-color: var(--c-darkgray);
@@ -65,23 +86,28 @@ if (user !== undefined) {
     transition: transform var(--speed) var(--ease);
     height: auto;
     width: auto;
+    max-width: 8rem;
     border-radius: 1.25rem;
     padding-bottom: 1.5rem;
+    --size-value: 7rem;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    flex-direction: column;
   }
+
   article:hover {
     transform: scale(var(--hover-scale));
   }
+
   article > .icon {
     border-radius: 1.25rem;
-    --size-value: 7rem;
     width: var(--size-value);
     height: var(--size-value);
     margin: 0.5rem;
-    background-size: var(--size-value);
-    background-position: center center;
   }
 
-  article:hover .icon span {
+  article:hover .title {
     display: flex;
     position: absolute;
     align-items: center;
@@ -92,9 +118,10 @@ if (user !== undefined) {
     width: calc(var(--size-value) + 0.1rem);
     opacity: 90%;
     border-radius: 1.25rem;
+    top: 1.1em;
   }
 
-  article:hover span h2 {
+  article:hover .title h2 {
     margin: 0;
     display: inline-flex;
     font-weight: bold;
@@ -104,11 +131,11 @@ if (user !== undefined) {
     padding: 0.5rem;
   }
 
-  article span h2 {
+  article .title h2 {
     display: none;
   }
 
-  article .icon span {
+  article .title {
     display: none;
   }
 
diff --git a/src/components/technologyCard.astro b/src/components/technologyCard.astro
index 55f2e8d..bee5474 100644
--- a/src/components/technologyCard.astro
+++ b/src/components/technologyCard.astro
@@ -1,23 +1,31 @@
 ---
+import { Image } from 'astro:assets'
+import type { GlobImage } from '../types/generic'
+import { plsLoadImage } from '../utils/tools'
+
 export interface Props {
   title: string
   link: string
-  image: string
+  imageFile: string
 }
 
-const { image, link, title } = Astro.props
-
-const icon: string = `background-image: url('/assets/technologies/${image}.webp')`
+const { imageFile, link, title } = Astro.props
+const logoAltText = `${title} Logo`
+const imagePath = `/src/assets/technologies/${imageFile}`
+const images_logos = import.meta.glob<GlobImage>(
+  '/src/assets/technologies/*.{png,webp}'
+)
+const loadedImage = plsLoadImage(images_logos, imagePath)
 ---
 
 <a href={link} target="_blank" rel="noopener noreferrer" aria-label={title}>
   <article>
-    <div style={icon}>
-      <span>
-        <h2>{title}</h2>
-      </span>
+    <Image src={loadedImage} alt={logoAltText} />
+    <div>
+      <h2>{title}</h2>
     </div>
   </article>
+  <span class="visually-hidden">{logoAltText}</span>
 </a>
 
 <style>
@@ -25,31 +33,31 @@ const icon: string = `background-image: url('/assets/technologies/${image}.webp'
     text-decoration: none;
   }
   article {
+    --size-value: 6.25rem;
     background-color: var(--c-darkergray);
     border-color: var(--c-darkgray);
     padding: 10px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
     text-align: center;
     transition: transform var(--speed) var(--ease);
     height: auto;
     width: auto;
     line-height: 100px;
     border-radius: 1.25rem;
+    position: relative;
   }
   article:hover {
     transform: scale(var(--hover-scale));
   }
-  article > div {
+  article > img {
     border-radius: 1.25rem;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    background-size: contain;
-    --size-value: 6.25rem;
     width: var(--size-value);
     height: var(--size-value);
   }
 
-  article:hover span {
+  article:hover div {
     border-radius: 1.25rem;
     padding: 0 0.5rem;
     display: flex;
@@ -57,13 +65,16 @@ const icon: string = `background-image: url('/assets/technologies/${image}.webp'
     justify-content: center;
     text-align: center;
     background-color: var(--c-darkgray);
-    height: calc(var(--size-value) + 0.1rem);
-    width: calc(var(--size-value) + 0.1rem);
+    height: calc(var(--size-value));
+    width: calc(var(--size-value) - 1rem);
     opacity: 90%;
+    z-index: 100;
+    position: absolute;
   }
 
   article:hover h2 {
     margin: 0;
+    position: absolute;
     display: inline-flex;
     font-weight: bold;
     color: white;
@@ -75,7 +86,7 @@ const icon: string = `background-image: url('/assets/technologies/${image}.webp'
     display: none;
   }
 
-  article span {
+  article div {
     display: none;
   }
 </style>
diff --git a/src/components/youtubeEmbed.astro b/src/components/youtubeEmbed.astro
new file mode 100644
index 0000000..e0a99fa
--- /dev/null
+++ b/src/components/youtubeEmbed.astro
@@ -0,0 +1,61 @@
+---
+import { YouTube } from '@astro-community/astro-embed-youtube'
+export interface Props {
+  id: string
+  thumbnail: string
+}
+
+const { id, thumbnail } = Astro.props
+---
+
+<div class="youtube-center">
+  <noscript style="display: flex; justify-content: center;">
+    <style>
+      lite-youtube {
+        display: none;
+      }
+    </style>
+    <div class="warningtext">
+      <span>
+        To view the video, enable JavaScript or<br /><a
+          href=`https://www.youtube.com/watch?v=${id}`
+          target="_blank"
+          rel="noopener noreferrer">watch it on YouTube</a
+        >
+      </span>
+    </div>
+  </noscript>
+  <YouTube id={id} poster={thumbnail} />
+</div>
+
+<style>
+  .youtube-center {
+    width: 100%;
+    display: flex;
+    justify-content: center;
+  }
+
+  lite-youtube {
+    width: 100%;
+    max-height: 360px;
+    max-width: 640px;
+  }
+
+  .warningtext {
+    display: flex;
+    justify-content: center;
+    background-color: var(--c-darkgray);
+    width: 640px;
+    height: 360px;
+  }
+
+  span {
+    text-align: center;
+    margin-top: 20%;
+  }
+
+  span > a {
+    font-style: unset;
+    font-weight: bold;
+  }
+</style>
diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro
index 8c385ba..09d6182 100644
--- a/src/layouts/Layout.astro
+++ b/src/layouts/Layout.astro
@@ -1,7 +1,14 @@
 ---
 import Navbar from '../components/navbar.astro'
 import NavbarEntry from '../components/navbarEntry.astro'
-import navdata from '../../static/assets/data/_navdata.json'
+import navdata from '../../static/data/_navdata.json'
+import embed from '../assets/embed.png'
+
+import home from 'iconoir/icons/home.svg'
+import servants from 'iconoir/icons/task-list.svg'
+import ta_collection from 'iconoir/icons/database.svg'
+import blog from 'iconoir/icons/bookmark-book.svg'
+import about from 'iconoir/icons/mail.svg'
 
 export interface Props {
   title: string
@@ -9,6 +16,18 @@ export interface Props {
   descriptionOverride?: string
 }
 
+interface IconsLookup {
+  [key: string]: ImageMetadata
+}
+
+const icons: IconsLookup = {
+  home: home,
+  servants: servants,
+  ta_collection: ta_collection,
+  blog: blog,
+  about: about,
+}
+
 const { descriptionOverride, currentpage, title } = Astro.props
 let description
 
@@ -22,9 +41,14 @@ let currPage = 'https://firq.dev/'
 if (currentpage !== 'home') {
   currPage += currentpage
 }
+
+const mapped_navdata = navdata.map((item) => ({
+  ...item,
+  ...{ icon: icons[item.icon] },
+}))
 ---
 
-<!DOCTYPE html>
+<!doctype html>
 <html lang="en">
   <head>
     <title>{title}</title>
@@ -36,7 +60,7 @@ if (currentpage !== 'home') {
     <meta property="og:title" content={title} />
     <meta property="og:url" content={currPage} />
     <meta property="og:description" content={description} />
-    <meta property="og:image" content="/assets/embed.png" />
+    <meta property="og:image" content={embed.src} />
     <meta property="og:type" content="website" />
     <meta property="og:locale" content="en_US" />
     <meta name="theme-color" content="#b86cff" />
@@ -45,19 +69,20 @@ if (currentpage !== 'home') {
       content="SmcWcewh7DCANcLeTe3ntU0R-LESbo_bsolICJnmulE"
     />
     <!-- Links -->
-    <link rel="icon" type="image/ico" href="/assets/favicon.ico" />
+    <link rel="icon" type="image/ico" href="/favicon.ico" />
     <link rel="sitemap" href="/sitemap-index.xml" />
     <link href="https://mastodon.neshweb.net/@Firq" rel="me" />
-    <link
-      rel="stylesheet"
-      href="https://cdn.jsdelivr.net/gh/iconoir-icons/iconoir@main/css/iconoir.css"
-    />
   </head>
   <body>
     <Navbar>
       {
-        navdata.map((item) => (
-          <NavbarEntry currentPage={currentpage} {...item} />
+        mapped_navdata.map((item) => (
+          <NavbarEntry currentPage={currentpage} navtype="desktop" {...item} slot="desktop"/>
+        ))
+      }
+      {
+        mapped_navdata.map((item) => (
+          <NavbarEntry currentPage={currentpage} navtype="mobile" {...item} slot="mobile"/>
         ))
       }
     </Navbar>
@@ -82,4 +107,15 @@ if (currentpage !== 'home') {
     background: var(--c-lightgray);
     margin: 0px;
   }
+
+  .visually-hidden {
+    border: 0;
+    clip: rect(0 0 0 0);
+    height: 1px;
+    margin: -1px;
+    overflow: hidden;
+    padding: 0;
+    position: absolute;
+    width: 1px;
+}
 </style>
diff --git a/src/layouts/aboutSection.astro b/src/layouts/aboutSection.astro
index cd89b5e..04465ad 100644
--- a/src/layouts/aboutSection.astro
+++ b/src/layouts/aboutSection.astro
@@ -15,15 +15,19 @@ const { title } = Astro.props
 
 <style>
   h1 {
-    font-size: 26px;
-    line-height: 32px;
+    font-size: 40px;
+    line-height: 48px;
     letter-spacing: -1px;
     color: white;
-    margin: 0.5rem 0.75rem 0.5rem 0.75rem;
+    font-size: 2.25rem;
+    margin-top: 1rem;
+    margin-bottom: 0;
+    margin-left: auto;
+    margin-right: auto;
     padding: 0.25rem 0.75rem;
-    width: max-content;
+    max-width: max-content;
     background-color: var(--c-darkgray);
-    padding: 0.25rem 1rem;
+    padding: 0.25rem 1.5rem;
     border-radius: 0.5rem;
     padding-bottom: 0.5rem;
   }
@@ -61,4 +65,10 @@ const { title } = Astro.props
       justify-content: left;
     }
   }
+
+  @media (min-width: 520px) {
+    h1 {
+      margin: 0.5rem 0.75rem 0.5rem 0.75rem;
+    }
+  }
 </style>
diff --git a/src/layouts/blogSection.astro b/src/layouts/blogSection.astro
index 9855446..f6084bc 100644
--- a/src/layouts/blogSection.astro
+++ b/src/layouts/blogSection.astro
@@ -83,6 +83,9 @@ const { title } = Astro.props
     .line {
       margin-left: 2.1rem;
     }
+    h1 {
+      margin-left: 3rem;
+    }
   }
   @media (min-width: 1500px) {
     .wrapper {
diff --git a/src/layouts/customFooter.astro b/src/layouts/customFooter.astro
index fefa3cd..d0732ec 100644
--- a/src/layouts/customFooter.astro
+++ b/src/layouts/customFooter.astro
@@ -1,20 +1,29 @@
 ---
+import okita from '../assets/okita.png'
+import atlas from '../assets/atlas.png'
+import foxcat from '../assets/lurker.png'
+import padoru from '../assets/padoru.png'
+import { Image } from 'astro:assets'
+
+import packagejson from '../../package.json'
+const version = packagejson.version
+const release = `https://forgejo.neshweb.net/Firq/firq-dev-website/releases/tag/${version}`
 ---
 
 <footer>
   <div>
-    “Fate/Grand Order” is a trademark of Notes Co., Ltd. | Game Assets © Aniplex
-    Inc. used under fair use. | View <a
+    “Fate/Grand Order” is a trademark of Notes Co., Ltd. | Game Assets ©
+    Aniplex Inc. used under fair use. | View <a
       class="linker"
       href="https://fate-go.us"
       target="_blank"
       rel="noopener noreferrer">the official website</a
     > for more information.<br />
-    I am in no way affiliated with Fate/Grand Order, Aniplex, Type Moon or Lasengle.
-    I claim no ownership of any of the assets used that are created by any of the
-    mentioned companies.<br />
-    All of the opinions expressed are my own and may not reflect those of the asset
-    providers.
+     I am in no way affiliated with Fate/Grand Order, Aniplex, Type Moon or
+    Lasengle. I claim no ownership of any of the assets used that are created by
+    any of the mentioned companies.<br />
+     All of the opinions expressed are my own and may not reflect those of the
+    asset providers.
   </div>
   <br />
   <div>
@@ -24,7 +33,7 @@
       rel="noopener noreferrer">Atlas Academy</a
     > for providing the servant and ce images.
     <div class="sticky-image-wrapper">
-      <img src="/assets/atlas.png" alt="" />
+      <Image src={atlas} alt="Icon of Atlas Academy" />
     </div>
   </div>
   <br />
@@ -33,14 +42,14 @@
       href="https://mitsunee.com"
       target="_blank"
       rel="noopener noreferrer">Mitsunee</a
-    > for the support when building this site. I could not have done it without you
-    🧡 Check out <a
+    > for the support when building this site. I could not have done it without
+    you 🧡 Check out <a
       href="https://fgo.mitsunee.com"
       target="_blank"
       rel="noopener noreferrer">FGO Timers here</a
     >
     <div class="sticky-image-wrapper">
-      <img src="/assets/lurker.png" alt="" />
+      <Image src={foxcat} alt="Best Foxcat" />
     </div>
   </div>
   <br />
@@ -49,12 +58,13 @@
       href="https://mastodon.neshweb.net/@neshura"
       target="_blank"
       rel="noopener noreferrer">Neshura</a
-    > for providing me with a place to develop, store and host this site. Check out
+    > for providing me with a place to develop, store and host this site. Check
+    out
     <a href="https://www.neshweb.net" target="_blank" rel="noopener noreferrer"
       >his site here</a
     >
     <div class="sticky-image-wrapper">
-      <img src="/assets/okita.png" alt="" style="height:60px" />
+      <Image src={okita} alt="" style="height:60px" />
     </div>
   </div>
   <br />
@@ -65,9 +75,15 @@
       rel="noopener noreferrer">AnthonyJ</a
     > for providing me with the custom Shishou favicon.
     <div class="sticky-image-wrapper">
-      <img src="/assets/padoru.png" alt="" />
+      <Image src={padoru} alt="Hashire sori yo ..." />
     </div>
   </div>
+  <br />
+  <div>
+    Website version: <a href={release} target="_blank" rel="noopener noreferrer"
+      >{version}</a
+    >
+  </div>
 </footer>
 
 <style>
diff --git a/src/pages/404.astro b/src/pages/404.astro
index 1d9071f..2793078 100644
--- a/src/pages/404.astro
+++ b/src/pages/404.astro
@@ -1,6 +1,8 @@
 ---
+import { Image } from 'astro:assets'
 import Layout from '../layouts/Layout.astro'
 import BaseSection from '../layouts/baseSection.astro'
+import sadshishou from '../assets/shishousad.webp'
 
 const description = "Error. This shouldn't happen :/"
 ---
@@ -12,10 +14,10 @@ const description = "Error. This shouldn't happen :/"
 >
   <BaseSection title="FirqhundredandFirq - Not Found">
     <div>
-      <img src="/assets/shishousad.webp" alt="Sad Shishou" />
+      <Image src={sadshishou} alt="Sad Shishou" />
       <h2>Well ... you were not supposed to end up here.</h2>
       <a href="/" aria-label="Home" rel="noopener noreferrer">
-        <i class="iconoir-fast-arrow-left"></i>Go back home
+        &lt;&lt; Go back home
       </a>
     </div>
   </BaseSection>
@@ -48,10 +50,10 @@ const description = "Error. This shouldn't happen :/"
     text-decoration: none;
     font-size: 1.5rem;
     font-weight: bold;
-  }
 
-  a:hover {
-    color: var(--c-darkpurple);
+    &:hover {
+      color: var(--c-darkpurple);
+    }
   }
 
   img {
diff --git a/src/pages/index.astro.old b/src/pages/_index.astro.old
similarity index 100%
rename from src/pages/index.astro.old
rename to src/pages/_index.astro.old
diff --git a/src/pages/about.astro b/src/pages/about.astro
index 10051ec..bc59882 100644
--- a/src/pages/about.astro
+++ b/src/pages/about.astro
@@ -4,11 +4,11 @@ import AboutSection from '../layouts/aboutSection.astro'
 
 import ContactSection from '../layouts/contactSection.astro'
 import ContactCard from '../components/contactCard.astro'
-import contactdata from '../../static/assets/data/_contactdata.json'
+import contactdata from '../../static/data/_contactdata.json'
 
 import CustomFooter from '../layouts/customFooter.astro'
 import TechnologyCard from '../components/technologyCard.astro'
-import technologydata from '../../static/assets/data/_technologydata.json'
+import technologydata from '../../static/data/_technologydata.json'
 
 const description =
   "A summary of the technologies used as well as my contact information. You'll also find disclaimers and thank you notes for the people that helped me."
@@ -23,15 +23,15 @@ const description =
     This is a small sideproject that I'm creating. First time doing webdev in
     general, and first project using Typescript.
   </AboutSection>
-  <AboutSection title="Technologies used">
+  <ContactSection title="Technologies used">
     {technologydata.map((item) => <TechnologyCard {...item} />)}
-  </AboutSection>
+  </ContactSection>
   <ContactSection title="Contact me">
     {contactdata.map((item) => <ContactCard {...item} />)}
   </ContactSection>
-  <AboutSection title="Disclaimers">
+  <ContactSection title="Disclaimers">
     <CustomFooter />
-  </AboutSection>
+  </ContactSection>
 </Layout>
 
 <style></style>
diff --git a/src/pages/blog.astro b/src/pages/blog.astro
index 4764d8e..884afd0 100644
--- a/src/pages/blog.astro
+++ b/src/pages/blog.astro
@@ -5,7 +5,7 @@ import BlogSection from '../layouts/blogSection.astro'
 
 const description =
   'My own small blog. Topics include FGO, TA, Programming, web technologies and more!'
-const allPosts = await Astro.glob('../pages/blog/*.md')
+const allPosts = await Astro.glob('../pages/blog/*.{md,mdx}')
 allPosts.sort(
   (a, b) =>
     Date.parse(b.frontmatter.pubDate) - Date.parse(a.frontmatter.pubDate)
diff --git a/src/pages/blog/cernunnos-with-requiem.md b/src/pages/blog/cernunnos-with-requiem.mdx
similarity index 78%
rename from src/pages/blog/cernunnos-with-requiem.md
rename to src/pages/blog/cernunnos-with-requiem.mdx
index 6a2e7da..7848a1e 100644
--- a/src/pages/blog/cernunnos-with-requiem.md
+++ b/src/pages/blog/cernunnos-with-requiem.mdx
@@ -6,6 +6,9 @@ description: 'A handful of observations from the cernunnos fight'
 author: 'Requiem & Firq'
 tags: ['fgo', 'lostbelt 6', 'cernunnos']
 ---
+import thumbnail_firq from "../../assets/thumbnails/WrHudtdfivA.jpg"
+import thumbnail_requiem from "../../assets/thumbnails/O1f-go7uJQM.jpg"
+import YoutubeEmbed from "../../components/youtubeEmbed.astro"
 
 ## Foreword
 
@@ -45,3 +48,19 @@ On the first break Cernunnos skill seals your servants. This means on turn 2 you
 As an example:
 Let's say I used Alteras third skill turn 1. She has to wait 5 turns to reuse it and on turn 3 Vitch gives her 2 times cooldown reduction.
 Ideally you would be able to reuse her third skill on turn 4 but because she gets skill sealed she can't do it.
+
+## Resulting runs
+
+Both Requiem and I managed to get unique TAs done with Scathach (Requiem even with more servants). Those runs are embedded here:
+
+### Firq
+
+This run doesn't use the support Castoria provided by the game and instead makes use of Sherlock instead.
+
+<YoutubeEmbed id="WrHudtdfivA" thumbnail={thumbnail_firq.src}/>
+
+### Requiem
+
+A frontline only run with double Castoria
+
+<YoutubeEmbed id="O1f-go7uJQM" thumbnail={thumbnail_requiem.src}/>
diff --git a/src/pages/blog/deploying-this-round-2.md b/src/pages/blog/deploying-this-round-2.md
new file mode 100644
index 0000000..b3a67b9
--- /dev/null
+++ b/src/pages/blog/deploying-this-round-2.md
@@ -0,0 +1,164 @@
+---
+layout: ../../layouts/blogPost.astro
+title: 'Migrating to Forgejo'
+pubDate: 2023-12-23
+description: 'My short recollection of migrating this site + CI to Forgejo'
+author: 'Firq'
+tags: ['astro', 'docker', 'forgejo']
+---
+
+Before I begin this, I want to give a shoutout to Neshura - without him, I would never have had the opportunity to actually create and host my website. I also want to thank him for his patience when I was stuck multiple times during the migration process, as my experience with Forgejo and its CI was really limited.
+
+## Migrating Git - Gitlab to Forgejo
+
+The migration of the git files themselves went a lot smoother than expected. Main reason for this was Forgejos built-in migration tool suite, which lets you migrate external repositories with ease.
+
+Generally, the workflow was as follows:
+
+1. Open Forgejo and start a new migration
+2. Select GitLab from the list
+3. Fill the details of the migration: Repository URL, Access token, etc.
+4. Hit Migrate
+
+And voila: The repository with all extra features like the wiki is getting migrated automatically.
+
+In total, I did this for 7 repositories without issues. Afterwards, it was just a matter of updating the remote repository url for my local clones:
+
+```shell
+git remote set-url origin https://forgejo.neshweb.net/Firq/firq-dev-website.git
+```
+
+Since the underlying git repository didn't change, migration was painless on the client side of things.
+
+## Reworking CI
+
+One of the major parts of the migration was to port my working GitLab-CI to Forgejo Actions. As I never worked with this before (or with Github Actions, which is the basis of Forgejo), it was ... interesting to say the least.
+
+I stumbled over multiple issues while transforming my old `.gitlab-ci.yml` file into a new `build_release.yml`, but in the end I got there. My main issue was that I imagined the CI just to work like GitLab - but I was mistaken.
+
+My main points of confusion were:
+
+- Files are not checked out automatically - A manual run of the checkout action is necessary, otherwise the files will just be missing
+- The working directory is not preserved between different run commands (made apparent early on)
+
+But after around 2 hours of tinkering, I managed to get everything working (and even improved some steps, such as automatically getting the known_hosts instead of hardcoding it into the secrets). But still, it felt a bit unsatisfying, as I was still relying on a ssh-connection with rsync to deploy the files. Unbeknownst to me, this was about to change drastically ...
+
+## Such Innovation: Moving from dedicated website server to docker containers
+
+After migrating and finishing up, Neshura showed me how he deploys the main website of his server: With a docker container. After seeing how much easier this would be in the long run, I decided to just go for it and switch from building the static files and syncing them to a webserver to just build my own container.
+
+Generally, this turned out to be a lot easier than expected: I added a Dockerfile to my repo and switched the CI to build a container based on that, which then would get published to the Forgejo registry.
+
+The `Dockerfile` itself is rather simple:
+
+```dockerfile
+FROM node:lts AS build
+WORKDIR /app
+COPY . .
+RUN npm i
+RUN npm run build
+
+FROM forgejo.neshweb.net/ci-docker-images/website-serve:latest AS runtime
+
+COPY --from=build /app/dist /public
+COPY --from=build /app/serve.json /public/serve.json
+RUN rm -r /public/assets/data/
+
+ENV PORT 8081
+EXPOSE 8081
+
+CMD [ "serve", "public/", "-p", "8081" ]
+```
+
+As you can see, I am using a custom container for the runtime stage, which will be explained in the next section.
+
+### Custom serve docker - My new goto for static site serving
+
+When starting out with the `Dockerfile`, I first used the standard `node:lts` image for the runtime. This meant I also had to install the `serve` package by `@warren-bank` each time I built the container. Since this takes extra time and resources each run, I decided to create a pre-configured docker container that can be used for this instead. 
+
+The `Dockerfile` for that one is laughable simple:
+
+```dockerfile
+FROM node:lts
+RUN npm install --global "@warren-bank/serve"
+```
+
+The container is also published to the docker registry that the Forgejo instance provides, which allows referencing it easily during runs.
+
+## Deployments using Dockge
+
+Since my website is now using a docker container instead of the previous `rsync` + `screen` approach, a new deployment solution was needed.
+
+In the end, Neshura proposed to use <a href="https://github.com/louislam/dockge" target="_blank" rel="noopener noreferrer" style="font-style: unset">Dockge</a>, a new, simple container management tool build by the developer of the beloved uptime-kuma. With that set up, getting the website only was really really easy:
+
+1. Create a new stack
+2. Add a container entry
+3. Fill the new entry with the url of the website container on the registry
+4. Configure the ports
+5. Hit start
+
+After that, it was just a matter of pointing nginx to the new IP address and port that Dockge uses. Just like that, the website was online.
+
+But this still wasn't the end of my migration tasks.
+
+## Unlighthouse - Implementing website testing without worries
+
+Before I even planned to migrate to Forgejo, I had long implemented some simple site benchmarking using the `Unlighthouse` package. This required a separate instance of my site to be running for benchmarking, as I wanted to test the site before pushing any changes to the main domain.
+
+The same principle now applies here: I can push changes to my dev branch and build a preview container by pushing a preview tag. Once that's build, I can deploy the preview using Dockge to a staging environment.
+
+With that set up, I can push a new tag with a keyword for unlighthouse to run. The reports will then be uploaded onto the old webserver, as I don't want to build extra containers just for the reports.
+
+Implementing this proved a lot easier than expected, but sadly I got disappointed when trying to circumvent the staging environment, as the container wouldn't work as a service in Forgejo actions.
+
+### Dedicated unlighthouse docker
+
+One last hurdle was, ironically, Gitlab. Specifically, it was their `lighthouse` container I used for testing. The main issue was that this container is run as a non-privileged user. In general, this is not a problem. However, this prevented me from actually cloning my repository using Forgejo actions.
+
+After some testing, I decided to just make my own version of the `lighthouse` container, without the user but with `unlighthouse` preinstalled (this also helps with processing times, as puppeteer takes a good amount of time to install each run).
+
+The `Dockerfile` can be found below (really simple again):
+
+```dockerfile
+FROM node:20.10.0-bookworm
+LABEL authorname="firq"
+WORKDIR /unlighthouse
+
+ENV CHROMIUM_VERSION="120.0.6099.109-1~deb12u1"
+ENV NODE_ENV='production'
+ENV PATH="/unlighthouse/node_modules/.bin:${PATH}"
+
+RUN apt-get update && apt-get -y install --no-install-recommends chromium=${CHROMIUM_VERSION} procps && rm -rf /var/lib/apt/lists/*
+RUN npm install @unlighthouse/cli puppeteer
+```
+
+With this container, the CI step to actually run the tests became a lot easier:
+
+```yaml
+jobs:
+  unlighthouse:
+    runs-on: docker
+    container: forgejo.neshweb.net/ci-docker-images/unlighthouse:latest
+    steps:
+      - name: Checkout repository
+        uses: https://code.forgejo.org/actions/checkout@v3
+      - name: Run unlighthouse
+        run: unlighthouse-ci --site "https://preview.firq.dev/"
+      - name: Prepare artifacts
+        run: cp serve.json unlighthouse-reports
+      - name: Upload reports
+        uses: actions/upload-artifact@v3
+        with:
+          name: unlighthouse-reports
+          path: unlighthouse-reports/
+```
+
+Once the tests ran, the artifacts would be uploaded to the website-server for the time being.
+
+## Conclusion
+
+In the end, I must say migrating was a lot more painless than expected. Sure, Forgejo is missing some of the features that Gitlab offers (mainly YAML anchors and manual CI actions, which hopefully will be implemented in the near future). But at the end of the day, it actually feels refreshing to now have a stable and independent CI to deploy this site, without having to construct weird solutions to self-inflicted problems.
+
+I also updated my about page to now reflect the migration, as the old technologies weren't up-to-date anymore.
+
+If you want to check out the repository by yourself, feel free to do so. <a href="https://forgejo.neshweb.net/Firq/firq-dev-website" target="_blank" rel="noopener noreferrer" style="font-style: unset">It is available on Neshuras Forgejo instance</a>
diff --git a/src/pages/blog/instant-death.md b/src/pages/blog/instant-death.mdx
similarity index 93%
rename from src/pages/blog/instant-death.md
rename to src/pages/blog/instant-death.mdx
index 7a4d732..454d0c6 100644
--- a/src/pages/blog/instant-death.md
+++ b/src/pages/blog/instant-death.mdx
@@ -6,8 +6,10 @@ description: 'Blog post talking about instant death in FGO, how you can take adv
 author: 'Firq'
 tags: ['fgo', 'games']
 ---
+import thumbnail from "../../assets/thumbnails/UwbNp_dB_VU.jpg"
+import YoutubeEmbed from "../../components/youtubeEmbed.astro"
 
-> **Disclaimer**<br>
+> **Disclaimer**<br/>
 > While writing this, Requiem and I faced a bit of a challenge concerning death rate calculations. Case in point is the passive "Item Construction"
 and its interaction with Instant Kill, as we could not reach a final verdict if it affects Instant Kill Hit rate or not. In case of this article, I will assume
 it doesn't interact with the hitrate, but if you have proof that this is different, I will gladly incorporate this in the article.
@@ -103,9 +105,8 @@ For other skill levels, this looks like this (_Her S1 scales from 50% to 100%_)
 
 In the end, this resulted in the following comp that worked like a charm.
 
-<div style="width: 100%; display: flex; justify-content: center; padding-top: 0.75rem">
-<iframe width="640" height="360" src="https://www.youtube-nocookie.com/embed/UwbNp_dB_VU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
-</div>
+<YoutubeEmbed id="UwbNp_dB_VU" thumbnail={thumbnail.src}/>
+
 
 ## Conclusion
 
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 2701e3d..a4b98c4 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -3,7 +3,7 @@ import Layout from '../layouts/Layout.astro'
 import Hero from '../components/hero.astro'
 import BaseSection from '../layouts/baseSection.astro'
 import FavouriteCard from '../components/favouriteCard.astro'
-import favouritesdata from '../../static/assets/data/_favouritesdata.json'
+import favouritesdata from '../../static/data/_favouritesdata.json'
 
 const description =
   'The very own page of Firq for providing informating about TA servants, listing past TA achievements and hosting a blog for talking about FGO, Programming and other stuff'
diff --git a/src/pages/servants.astro b/src/pages/servants.astro
index 61cacac..ab405a9 100644
--- a/src/pages/servants.astro
+++ b/src/pages/servants.astro
@@ -3,10 +3,10 @@ import Layout from '../layouts/Layout.astro'
 import BaseSection from '../layouts/baseSection.astro'
 
 import ServantCard from '../components/servantCard.astro'
-import servantdata from '../../static/assets/data/_servantdata.json'
+import servantdata from '../../static/data/_servantdata.json'
 
 import CeCard from '../components/ceCard.astro'
-import cedata from '../../static/assets/data/_cedata.json'
+import cedata from '../../static/data/_cedata.json'
 
 const description =
   'A list of all the servants and ces that Firq can offer up on support for TA.'
diff --git a/src/pages/ta-collection.astro b/src/pages/ta-collection.astro
index f6cc6f9..bf3799b 100644
--- a/src/pages/ta-collection.astro
+++ b/src/pages/ta-collection.astro
@@ -9,8 +9,9 @@ import Layout from '../layouts/Layout.astro'
 
 import TaSection from '../layouts/taSection.astro'
 import TaCard from '../components/taCard.astro'
-import tadata from '../../static/assets/data/_tadata.json'
-import featured_data from '../../static/assets/data/_featureddata.json'
+import tadata from '../../static/data/_tadata.json'
+import featured_data from '../../static/data/_featureddata.json'
+import FgotaHero from '../components/fgotaHero.astro'
 
 const important_data = tadata.filter(function (el) {
   return [
@@ -19,7 +20,8 @@ const important_data = tadata.filter(function (el) {
     'Kingprotea 1T',
     'Goetia Memorial Quest 2T',
     'Morgan 3T (LB 6) Skadi',
-    'Albion 3T (LB 6) Skadi'
+    'Albion 3T (LB 6) Skadi',
+    'Cernunnos 4T (No Castoria)',
   ].includes(el.title)
 })
 
@@ -35,7 +37,8 @@ const description = 'A collection of TAs previously completed be Firq.'
   currentpage="ta-collection"
   descriptionOverride={description}
 >
-  <TaSection title="Notable TAs" abovetext="">
+  <FgotaHero />
+  <TaSection title="Notable TAs" abovetext="My most notable TAs">
     {important_data.map((item) => <TaCard {...item} />)}
   </TaSection>
   <TaSection title="Completed TAs">
diff --git a/src/types/generic.ts b/src/types/generic.ts
new file mode 100644
index 0000000..65db641
--- /dev/null
+++ b/src/types/generic.ts
@@ -0,0 +1,10 @@
+export interface IconsLookup {
+  [key: string]: ImageMetadata
+}
+
+interface GlobGeneric<T> { 
+  default: T
+}
+
+export type GlobAny = GlobGeneric<any>
+export type GlobImage = GlobGeneric<ImageMetadata>
diff --git a/src/utils/tools.ts b/src/utils/tools.ts
new file mode 100644
index 0000000..4dc88c9
--- /dev/null
+++ b/src/utils/tools.ts
@@ -0,0 +1,5 @@
+export function plsLoadImage(record: Record<string, () => Promise<{default: ImageMetadata}>>, path: string) {
+  const loadedImage = record[path]?.();
+  if (!loadedImage) throw new Error("Asset was not found:" + path);
+  return loadedImage;
+}
diff --git a/static/assets/ce/2030.webp b/static/assets/ce/2030.webp
deleted file mode 100644
index 42f9f02..0000000
Binary files a/static/assets/ce/2030.webp and /dev/null differ
diff --git a/static/assets/ce/500.webp b/static/assets/ce/500.webp
deleted file mode 100644
index 9f030df..0000000
Binary files a/static/assets/ce/500.webp and /dev/null differ
diff --git a/static/assets/ce/bg.webp b/static/assets/ce/bg.webp
deleted file mode 100644
index 133183c..0000000
Binary files a/static/assets/ce/bg.webp and /dev/null differ
diff --git a/static/assets/ce/bond-ce/bride.webp b/static/assets/ce/bond-ce/bride.webp
deleted file mode 100644
index 7642c43..0000000
Binary files a/static/assets/ce/bond-ce/bride.webp and /dev/null differ
diff --git a/static/assets/ce/bond-ce/castoria.webp b/static/assets/ce/bond-ce/castoria.webp
deleted file mode 100644
index fbe04b1..0000000
Binary files a/static/assets/ce/bond-ce/castoria.webp and /dev/null differ
diff --git a/static/assets/ce/bond-ce/gogh.webp b/static/assets/ce/bond-ce/gogh.webp
deleted file mode 100644
index 0167200..0000000
Binary files a/static/assets/ce/bond-ce/gogh.webp and /dev/null differ
diff --git a/static/assets/ce/bond-ce/ibaraki.webp b/static/assets/ce/bond-ce/ibaraki.webp
deleted file mode 100644
index 3d5637e..0000000
Binary files a/static/assets/ce/bond-ce/ibaraki.webp and /dev/null differ
diff --git a/static/assets/ce/bond-ce/jane.webp b/static/assets/ce/bond-ce/jane.webp
deleted file mode 100644
index 921ca9b..0000000
Binary files a/static/assets/ce/bond-ce/jane.webp and /dev/null differ
diff --git a/static/assets/ce/bond-ce/liz.webp b/static/assets/ce/bond-ce/liz.webp
deleted file mode 100644
index e91f5ef..0000000
Binary files a/static/assets/ce/bond-ce/liz.webp and /dev/null differ
diff --git a/static/assets/ce/bond-ce/merlin.webp b/static/assets/ce/bond-ce/merlin.webp
deleted file mode 100644
index 363713a..0000000
Binary files a/static/assets/ce/bond-ce/merlin.webp and /dev/null differ
diff --git a/static/assets/ce/bond-ce/reines.webp b/static/assets/ce/bond-ce/reines.webp
deleted file mode 100644
index b9f4032..0000000
Binary files a/static/assets/ce/bond-ce/reines.webp and /dev/null differ
diff --git a/static/assets/ce/bond-ce/santagale.webp b/static/assets/ce/bond-ce/santagale.webp
deleted file mode 100644
index c55b578..0000000
Binary files a/static/assets/ce/bond-ce/santagale.webp and /dev/null differ
diff --git a/static/assets/ce/bond-ce/skadi.webp b/static/assets/ce/bond-ce/skadi.webp
deleted file mode 100644
index 4eb28de..0000000
Binary files a/static/assets/ce/bond-ce/skadi.webp and /dev/null differ
diff --git a/static/assets/ce/bond-ce/tamamo.webp b/static/assets/ce/bond-ce/tamamo.webp
deleted file mode 100644
index 07ea177..0000000
Binary files a/static/assets/ce/bond-ce/tamamo.webp and /dev/null differ
diff --git a/static/assets/ce/bond-ce/waver.webp b/static/assets/ce/bond-ce/waver.webp
deleted file mode 100644
index d2f31ae..0000000
Binary files a/static/assets/ce/bond-ce/waver.webp and /dev/null differ
diff --git a/static/assets/ce/bond-ce/wu.webp b/static/assets/ce/bond-ce/wu.webp
deleted file mode 100644
index 114a7e1..0000000
Binary files a/static/assets/ce/bond-ce/wu.webp and /dev/null differ
diff --git a/static/assets/ce/db.webp b/static/assets/ce/db.webp
deleted file mode 100644
index d702ac9..0000000
Binary files a/static/assets/ce/db.webp and /dev/null differ
diff --git a/static/assets/ce/kaleidoscope.webp b/static/assets/ce/kaleidoscope.webp
deleted file mode 100644
index ecf2659..0000000
Binary files a/static/assets/ce/kaleidoscope.webp and /dev/null differ
diff --git a/static/assets/ce/maidensteachings.webp b/static/assets/ce/maidensteachings.webp
deleted file mode 100644
index de565fb..0000000
Binary files a/static/assets/ce/maidensteachings.webp and /dev/null differ
diff --git a/static/assets/ce/merciless_one.webp b/static/assets/ce/merciless_one.webp
deleted file mode 100644
index 6122a5e..0000000
Binary files a/static/assets/ce/merciless_one.webp and /dev/null differ
diff --git a/static/assets/ce/outrage.webp b/static/assets/ce/outrage.webp
deleted file mode 100644
index f3a3bea..0000000
Binary files a/static/assets/ce/outrage.webp and /dev/null differ
diff --git a/static/assets/ce/oxdemon.webp b/static/assets/ce/oxdemon.webp
deleted file mode 100644
index 11c1301..0000000
Binary files a/static/assets/ce/oxdemon.webp and /dev/null differ
diff --git a/static/assets/ce/prisma.webp b/static/assets/ce/prisma.webp
deleted file mode 100644
index 482a32d..0000000
Binary files a/static/assets/ce/prisma.webp and /dev/null differ
diff --git a/static/assets/ce/vessel.webp b/static/assets/ce/vessel.webp
deleted file mode 100644
index 9272769..0000000
Binary files a/static/assets/ce/vessel.webp and /dev/null differ
diff --git a/static/assets/data/_cedata.json b/static/assets/data/_cedata.json
deleted file mode 100644
index 53ed7a8..0000000
--- a/static/assets/data/_cedata.json
+++ /dev/null
@@ -1,57 +0,0 @@
-[
-	{
-		"name": "The Merciless One",
-		"link": "merciless_one",
-		"mlb": "true"
-	},
-	{
-		"name": "Ox-Demon King",
-		"link": "oxdemon",
-		"mlb": "true"
-	},
-	{
-		"name": "Holy Maiden's Teachings",
-		"link": "maidensteachings",
-		"mlb": "true"
-	},
-	{
-		"name": "Kaleidoscope",
-		"link": "kaleidoscope",
-		"mlb": "true"
-	},
-	{
-		"name": "The Black Grail",
-		"link": "bg",
-		"mlb": "true"
-	},
-	{
-		"name": "A Fragment Of 2030",
-		"link": "2030",
-		"mlb": "true"
-	},
-	{
-		"name": "Outrage",
-		"link": "outrage",
-		"mlb": "false"
-	},
-	{
-		"name": "Vessel of the Saint",
-		"link": "vessel",
-		"mlb": "false"
-	},
-	{
-		"name": "Devilish Bodhisattva",
-		"link": "db",
-		"mlb": "true"
-	},
-	{
-		"name": "500-Year Obsession",
-		"link": "500",
-		"mlb": "true"
-	},
-	{
-		"name": "Prisma Cosmos",
-		"link": "prisma",
-		"mlb": "true"
-	}
-]
diff --git a/static/assets/data/_servantdata.json b/static/assets/data/_servantdata.json
deleted file mode 100644
index 834b0d7..0000000
--- a/static/assets/data/_servantdata.json
+++ /dev/null
@@ -1,162 +0,0 @@
-[
-	{
-		"name": "Skadi",
-		"level": "120",
-		"np": "4",
-		"skills": "10 / 10 / 10 ",
-		"ml": "10",
-		"image_servant": "skadi_03",
-		"image_bond": "skadi",
-		"bond10": "true"
-	},
-	{
-		"name": "Skadi",
-		"level": "70",
-		"np": "1",
-		"skills": "10 / 10 / 10 ",
-		"ml": "1",
-		"image_servant": "skadi_01",
-		"image_bond": "skadi",
-		"bond10": "true"
-	},
-	{
-		"name": "Castoria",
-		"level": "90",
-		"np": "1",
-		"skills": "10 / 10 / 10 ",
-		"ml": "7",
-		"image_servant": "castoria_02",
-		"image_bond": "castoria",
-		"bond10": "true"
-	},
-	{
-		"name": "Castoria",
-		"level": "70",
-		"np": "1",
-		"skills": "10 / 10 / 10 ",
-		"ml": "1",
-		"image_servant": "castoria_01",
-		"image_bond": "castoria",
-		"bond10": "true"
-	},
-	{
-		"name": "Merlin",
-		"level": "90",
-		"np": "1",
-		"skills": "10 / 10 / 10 ",
-		"ml": "Not Unlocked",
-		"image_servant": "merlin_03",
-		"image_bond": "merlin",
-		"bond10": "true"
-	},
-	{
-		"name": "Waver",
-		"level": "90",
-		"np": "1",
-		"skills": "10 / 10 / 10 ",
-		"ml": "Not Unlocked",
-		"image_servant": "waver_02",
-		"image_bond": "waver",
-		"bond10": "true"
-	},
-	{
-		"name": "Reines",
-		"level": "90",
-		"np": "1",
-		"skills": "10 / 10 / 10 ",
-		"ml": "9",
-		"image_servant": "reines_01",
-		"image_bond": "reines",
-		"bond10": "true"
-	},
-	{
-		"name": "Tamamo-no-Mae",
-		"level": "90",
-		"np": "2",
-		"skills": "10 / 10 / 10 ",
-		"ml": "Not Unlocked",
-		"image_servant": "tamamo_03",
-		"image_bond": "tamamo",
-		"bond10": "true"
-	},
-	{
-		"name": "Van Gogh",
-		"level": "90",
-		"np": "1",
-		"skills": "10 / 10 / 10 ",
-		"ml": "10",
-		"image_servant": "gogh_01",
-		"image_bond": "gogh",
-		"bond10": "false"
-	},
-	{
-		"name": "Nero (Bride)",
-		"level": "90",
-		"np": "1",
-		"skills": "10 / 10 / 9 ",
-		"ml": "Not Unlocked",
-		"image_servant": "bride_03",
-		"image_bond": "bride",
-		"bond10": "false"
-	},
-	{
-		"name": "Nightingale (Santa)",
-		"level": "80",
-		"np": "5",
-		"skills": "9 / 10 / 10 ",
-		"ml": "Not Unlocked",
-		"image_servant": "santagale_01",
-		"image_bond": "santagale",
-		"bond10": "true"
-	},
-	{
-		"name": "Nightingale (Santa)",
-		"level": "60",
-		"np": "1",
-		"skills": "1 / 10 / 10 ",
-		"ml": "Not Unlocked",
-		"image_servant": "santagale_01",
-		"image_bond": "santagale",
-		"bond10": "true"
-	},
-	{
-		"name": "Elisabeth Báthory",
-		"level": "40",
-		"np": "1",
-		"skills": "9 / 9 / X ",
-		"ml": "Not Unlocked",
-		"image_servant": "liz_01",
-		"image_bond": "liz",
-		"bond10": "false"
-	},
-	{
-		"name": "Wu Zetian",
-		"level": "60",
-		"np": "1",
-		"skills": "9 / 1 / 9 ",
-		"ml": "Not Unlocked",
-		"image_servant": "wu_01",
-		"image_bond": "wu",
-		"bond10": "true"
-	},
-	{
-		"name": "Ibaraki-Douji",
-		"level": "40",
-		"np": "1",
-		"skills": "8 / 8 / X ",
-		"ml": "Not Unlocked",
-		"image_servant": "ibaraki_02",
-		"image_bond": "ibaraki",
-		"bond10": "false"
-	},
-	{
-		"name": "Calamity Jane",
-		"level": "60",
-		"np": "1",
-		"skills": "1 / 9 / 9 ",
-		"ml": "Not Unlocked",
-		"image_servant": "jane_03",
-		"image_bond": "jane",
-		"bond10": "false"
-	}
-]
diff --git a/static/assets/data/_tadata.json b/static/assets/data/_tadata.json
deleted file mode 100644
index 0716048..0000000
--- a/static/assets/data/_tadata.json
+++ /dev/null
@@ -1,258 +0,0 @@
-[
-	{
-		"title": "DB 7T (No Duplicates)",
-		"link": "https://www.youtube.com/watch?v=d1ftVeitR6c",
-		"image": "db",
-		"date": "2022-07-09",
-		"ta_servant": "shishou",
-		"turns": "7T"
-	},
-	{
-		"title": "Kingprotea 1T",
-		"link": "https://www.youtube.com/watch?v=m3SATSOfpt4",
-		"image": "kingprotea",
-		"date": "2022-06-21",
-		"ta_servant": "shishou",
-		"turns": "1T"
-	},
-	{
-		"title": "Solomon 1T (No NP)",
-		"link": "https://www.youtube.com/watch?v=01Qx4Hs-X4M",
-		"image": "solomon",
-		"date": "2022-06-28",
-		"ta_servant": "shishou",
-		"turns": "1T"
-	},
-	{
-		"title": "Ibuki 3T (LB 5.5)",
-		"link": "https://www.youtube.com/watch?v=AaqRN73dO5k",
-		"image": "ibuki",
-		"date": "2022-11-22",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Boxing 3T (Xmas 5)",
-		"link": "https://www.youtube.com/watch?v=S8OQ7yWldJY",
-		"image": "dioscuri",
-		"date": "2022-12-24",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "MHXX 2T (No DMG CE)",
-		"link": "https://www.youtube.com/watch?v=lz6iBZvoDuw",
-		"image": "mhxx",
-		"date": "2023-01-12",
-		"ta_servant": "shishou",
-		"turns": "2T"
-	},
-	{
-		"title": "Taira 3T (LB 5.5)",
-		"link": "https://www.youtube.com/watch?v=YtRvahqFA0Y",
-		"image": "taira",
-		"date": "2022-11-22",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Douman 3T (LB 5.5)",
-		"link": "https://www.youtube.com/watch?v=6cstr3vTd8Y",
-		"image": "douman",
-		"date": "2022-11-23",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Christmas 2021 Rerun CQ 5T",
-		"link": "https://www.youtube.com/watch?v=cpqhx9dUgTU",
-		"image": "santagale",
-		"date": "2022-10-15",
-		"ta_servant": "shishou",
-		"turns": "5T"
-	},
-	{
-		"title": "Summer 4 Rerun CQ 3T",
-		"link": "https://www.youtube.com/watch?v=u72o7PDBtks",
-		"image": "fuuma",
-		"date": "2022-06-04",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Fate/Requiem CQ 3T",
-		"link": "https://www.youtube.com/watch?v=k7vGC4kpEFg",
-		"image": "erice",
-		"date": "2022-05-11",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Kirschtaria 3T (LB 5)",
-		"link": "https://www.youtube.com/watch?v=aYlyfAzuFw0",
-		"image": "kirschtaria",
-		"date": "2022-04-04",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Aeaean Spring Breeze CQ 3T",
-		"link": "https://www.youtube.com/watch?v=uo3jI9xuVwI",
-		"image": "odysseus",
-		"date": "2022-03-06",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Valentines 2022 CQ 4T",
-		"link": "https://www.youtube.com/watch?v=MOCMXZ17FkU",
-		"image": "sei",
-		"date": "2022-02-09",
-		"ta_servant": "shishou",
-		"turns": "4T"
-	},
-	{
-		"title": "Amazoness 2021 CQ 3T",
-		"link": "https://www.youtube.com/watch?v=MU_Hw2KKYRU",
-		"image": "penth",
-		"date": "2022-01-23",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Valentines 2023 CQ 4T",
-		"link": "https://www.youtube.com/watch?v=fwCmEiaocQo",
-		"image": "orion",
-		"date": "2023-02-25",
-		"ta_servant": "shishou",
-		"turns": "4T"
-	},
-	{
-		"title": "Slapstick Museum CQ 5T",
-		"link": "https://www.youtube.com/watch?v=fQImgJirFeo",
-		"image": "moriarty",
-		"date": "2023-03-10",
-		"ta_servant": "shishou",
-		"turns": "5T"
-	},
-	{
-		"title": "GudaGuda 5 CQ 4T",
-		"link": "https://www.youtube.com/watch?v=3scILqsgobU",
-		"image": "nobunaga",
-		"date": "2022-09-21",
-		"ta_servant": "shishou",
-		"turns": "4T"
-	},
-	{
-		"title": "GudaGuda 4 CQ 3T [No DMG CE]",
-		"link": "https://www.youtube.com/watch?v=HY95cWsjC08",
-		"image": "shibata",
-		"date": "2022-04-30",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "GudaGuda 4 CQ 3T",
-		"link": "https://www.youtube.com/watch?v=7iO2WQt64-8",
-		"image": "shibata",
-		"date": "2022-04-26",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Top of Tower 3T",
-		"link": "https://www.youtube.com/watch?v=gUtBYNxH4Ck",
-		"image": "galatea",
-		"date": "2023-03-20",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Goetia Memorial Quest 2T",
-		"link": "https://www.youtube.com/watch?v=lZHgSVpPv24",
-		"image": "goetia",
-		"date": "2023-07-04",
-		"ta_servant": "skadi",
-		"turns": "2T"
-	},
-	{
-		"title": "Melusine 3T (LB 6)",
-		"link": "https://www.youtube.com/watch?v=f35hlBXuR3w",
-		"image": "melusine",
-		"date": "2023-06-26",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Morgan 3T (LB 6) Shishou",
-		"link": "https://www.youtube.com/watch?v=7wQ6iabqgEc",
-		"image": "morgan",
-		"date": "2023-06-26",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Morgan 3T (LB 6) Skadi",
-		"link": "https://www.youtube.com/watch?v=sQ7HHl1Pb3c",
-		"image": "morgan",
-		"date": "2023-06-25",
-		"ta_servant": "skadi",
-		"turns": "3T"
-	},
-	{
-		"title": "Woodwose 3T (LB 6)",
-		"link": "https://www.youtube.com/watch?v=ZPgIDZjrGA0",
-		"image": "woodwose",
-		"date": "2023-06-23",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Barghest 2T (LB 6)",
-		"link": "https://www.youtube.com/watch?v=kjMAccbq7-A",
-		"image": "barghest",
-		"date": "2023-06-21",
-		"ta_servant": "tomoe",
-		"turns": "2T"
-	},
-	{
-		"title": "Calamity of Norwich 3T (LB 6)",
-		"link": "https://www.youtube.com/watch?v=IwkCnVej_PY",
-		"image": "calamityofnorwich",
-		"date": "2023-06-08",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Red Dragon 1T (LB 6)",
-		"link": "https://www.youtube.com/watch?v=MKhkvG0CHko",
-		"image": "reddragon",
-		"date": "2023-07-10",
-		"ta_servant": "tomoesummer",
-		"turns": "1T"
-	},
-	{
-		"title": "Albion 3T (LB 6) Skadi",
-		"link": "https://www.youtube.com/watch?v=tejeiYpzfqo",
-		"image": "albion",
-		"date": "2023-07-11",
-		"ta_servant": "skadi",
-		"turns": "3T"
-	},
-	{
-		"title": "Albion 3T (LB 6) Shishou",
-		"link": "https://www.youtube.com/watch?v=E8fjEYFqrWI",
-		"image": "albion",
-		"date": "2023-07-12",
-		"ta_servant": "shishou",
-		"turns": "3T"
-	},
-	{
-		"title": "Albion 3T (LB 6) Salter",
-		"link": "https://www.youtube.com/watch?v=5U42nu-vPnk",
-		"image": "albion",
-		"date": "2023-07-12",
-		"ta_servant": "saberalter",
-		"turns": "3T"
-	}
-]
diff --git a/static/assets/data/_technologydata.json b/static/assets/data/_technologydata.json
deleted file mode 100644
index 3b46e3c..0000000
--- a/static/assets/data/_technologydata.json
+++ /dev/null
@@ -1,27 +0,0 @@
-[
-    {
-      "title": "Astro",
-      "link": "https://astro.build",
-      "image": "astro"
-    },
-    {
-      "title": "GitLab",
-      "link": "https://gitlab.io",
-      "image": "gitlab"
-    },
-    {
-      "title": "Typescript",
-      "link": "https://www.typescriptlang.org/",
-      "image": "typescript"
-    },
-    {
-      "title": "Alpine Linux",
-      "link": "https://alpinelinux.org/",
-      "image": "alpine-linux"
-    },
-    {
-      "title": "Ubuntu",
-      "link": "https://ubuntu.com/",
-      "image": "ubuntu"
-    }
-  ]
\ No newline at end of file
diff --git a/static/assets/favourites/scathach.webp b/static/assets/favourites/scathach.webp
deleted file mode 100644
index 707b0f8..0000000
Binary files a/static/assets/favourites/scathach.webp and /dev/null differ
diff --git a/static/assets/favourites/skadi.webp b/static/assets/favourites/skadi.webp
deleted file mode 100644
index 1ba9410..0000000
Binary files a/static/assets/favourites/skadi.webp and /dev/null differ
diff --git a/static/assets/okita.png b/static/assets/okita.png
deleted file mode 100644
index f82cbaf..0000000
Binary files a/static/assets/okita.png and /dev/null differ
diff --git a/static/assets/servant/bride_03.webp b/static/assets/servant/bride_03.webp
deleted file mode 100644
index d152a3f..0000000
Binary files a/static/assets/servant/bride_03.webp and /dev/null differ
diff --git a/static/assets/servant/castoria_01.webp b/static/assets/servant/castoria_01.webp
deleted file mode 100644
index 17d3452..0000000
Binary files a/static/assets/servant/castoria_01.webp and /dev/null differ
diff --git a/static/assets/servant/castoria_02.webp b/static/assets/servant/castoria_02.webp
deleted file mode 100644
index f7dd16b..0000000
Binary files a/static/assets/servant/castoria_02.webp and /dev/null differ
diff --git a/static/assets/servant/gogh_01.webp b/static/assets/servant/gogh_01.webp
deleted file mode 100644
index 2a88189..0000000
Binary files a/static/assets/servant/gogh_01.webp and /dev/null differ
diff --git a/static/assets/servant/ibaraki_02.webp b/static/assets/servant/ibaraki_02.webp
deleted file mode 100644
index f4c6568..0000000
Binary files a/static/assets/servant/ibaraki_02.webp and /dev/null differ
diff --git a/static/assets/servant/jane_03.webp b/static/assets/servant/jane_03.webp
deleted file mode 100644
index 56dcd72..0000000
Binary files a/static/assets/servant/jane_03.webp and /dev/null differ
diff --git a/static/assets/servant/liz_01.webp b/static/assets/servant/liz_01.webp
deleted file mode 100644
index 9689253..0000000
Binary files a/static/assets/servant/liz_01.webp and /dev/null differ
diff --git a/static/assets/servant/merlin_03.webp b/static/assets/servant/merlin_03.webp
deleted file mode 100644
index ac25d75..0000000
Binary files a/static/assets/servant/merlin_03.webp and /dev/null differ
diff --git a/static/assets/servant/reines_01.webp b/static/assets/servant/reines_01.webp
deleted file mode 100644
index fd7ba15..0000000
Binary files a/static/assets/servant/reines_01.webp and /dev/null differ
diff --git a/static/assets/servant/santagale_01.webp b/static/assets/servant/santagale_01.webp
deleted file mode 100644
index 337a44e..0000000
Binary files a/static/assets/servant/santagale_01.webp and /dev/null differ
diff --git a/static/assets/servant/skadi_01.webp b/static/assets/servant/skadi_01.webp
deleted file mode 100644
index 225d8ad..0000000
Binary files a/static/assets/servant/skadi_01.webp and /dev/null differ
diff --git a/static/assets/servant/skadi_03.webp b/static/assets/servant/skadi_03.webp
deleted file mode 100644
index 7ef4c40..0000000
Binary files a/static/assets/servant/skadi_03.webp and /dev/null differ
diff --git a/static/assets/servant/tamamo_03.webp b/static/assets/servant/tamamo_03.webp
deleted file mode 100644
index 07cd425..0000000
Binary files a/static/assets/servant/tamamo_03.webp and /dev/null differ
diff --git a/static/assets/servant/waver_02.webp b/static/assets/servant/waver_02.webp
deleted file mode 100644
index 7477af3..0000000
Binary files a/static/assets/servant/waver_02.webp and /dev/null differ
diff --git a/static/assets/servant/wu_01.webp b/static/assets/servant/wu_01.webp
deleted file mode 100644
index ba89ca9..0000000
Binary files a/static/assets/servant/wu_01.webp and /dev/null differ
diff --git a/static/assets/ta_icons/ta_servants/caren.webp b/static/assets/ta_icons/ta_servants/caren.webp
deleted file mode 100644
index eb7c227..0000000
Binary files a/static/assets/ta_icons/ta_servants/caren.webp and /dev/null differ
diff --git a/static/assets/ta_icons/ta_servants/jalter.webp b/static/assets/ta_icons/ta_servants/jalter.webp
deleted file mode 100644
index c4e6307..0000000
Binary files a/static/assets/ta_icons/ta_servants/jalter.webp and /dev/null differ
diff --git a/static/assets/ta_icons/ta_servants/kama.webp b/static/assets/ta_icons/ta_servants/kama.webp
deleted file mode 100644
index 83e28cf..0000000
Binary files a/static/assets/ta_icons/ta_servants/kama.webp and /dev/null differ
diff --git a/static/assets/ta_icons/ta_servants/musashi.webp b/static/assets/ta_icons/ta_servants/musashi.webp
deleted file mode 100644
index 37aa905..0000000
Binary files a/static/assets/ta_icons/ta_servants/musashi.webp and /dev/null differ
diff --git a/static/assets/ta_icons/ta_servants/saberalter.webp b/static/assets/ta_icons/ta_servants/saberalter.webp
deleted file mode 100644
index 55481e0..0000000
Binary files a/static/assets/ta_icons/ta_servants/saberalter.webp and /dev/null differ
diff --git a/static/assets/ta_icons/ta_servants/shishou.webp b/static/assets/ta_icons/ta_servants/shishou.webp
deleted file mode 100644
index 5b0dea3..0000000
Binary files a/static/assets/ta_icons/ta_servants/shishou.webp and /dev/null differ
diff --git a/static/assets/ta_icons/ta_servants/skadi.webp b/static/assets/ta_icons/ta_servants/skadi.webp
deleted file mode 100644
index 7292349..0000000
Binary files a/static/assets/ta_icons/ta_servants/skadi.webp and /dev/null differ
diff --git a/static/assets/ta_icons/ta_servants/summerjalter.webp b/static/assets/ta_icons/ta_servants/summerjalter.webp
deleted file mode 100644
index e4b8ca2..0000000
Binary files a/static/assets/ta_icons/ta_servants/summerjalter.webp and /dev/null differ
diff --git a/static/assets/ta_icons/ta_servants/summermusashi.webp b/static/assets/ta_icons/ta_servants/summermusashi.webp
deleted file mode 100644
index 963a6c7..0000000
Binary files a/static/assets/ta_icons/ta_servants/summermusashi.webp and /dev/null differ
diff --git a/static/assets/ta_icons/ta_servants/summershishou.webp b/static/assets/ta_icons/ta_servants/summershishou.webp
deleted file mode 100644
index 5d07b5b..0000000
Binary files a/static/assets/ta_icons/ta_servants/summershishou.webp and /dev/null differ
diff --git a/static/assets/ta_icons/ta_servants/tamamocat.webp b/static/assets/ta_icons/ta_servants/tamamocat.webp
deleted file mode 100644
index ad8ea94..0000000
Binary files a/static/assets/ta_icons/ta_servants/tamamocat.webp and /dev/null differ
diff --git a/static/assets/ta_icons/ta_servants/tomoe.webp b/static/assets/ta_icons/ta_servants/tomoe.webp
deleted file mode 100644
index 6fb6bae..0000000
Binary files a/static/assets/ta_icons/ta_servants/tomoe.webp and /dev/null differ
diff --git a/static/assets/ta_icons/ta_servants/tomoesummer.webp b/static/assets/ta_icons/ta_servants/tomoesummer.webp
deleted file mode 100644
index 5dbd588..0000000
Binary files a/static/assets/ta_icons/ta_servants/tomoesummer.webp and /dev/null differ
diff --git a/static/assets/technologies/alpine-linux.webp b/static/assets/technologies/alpine-linux.webp
deleted file mode 100644
index 61a52cc..0000000
Binary files a/static/assets/technologies/alpine-linux.webp and /dev/null differ
diff --git a/static/assets/technologies/astro.webp b/static/assets/technologies/astro.webp
deleted file mode 100644
index 000203b..0000000
Binary files a/static/assets/technologies/astro.webp and /dev/null differ
diff --git a/static/assets/technologies/gitlab.webp b/static/assets/technologies/gitlab.webp
deleted file mode 100644
index 9112b9d..0000000
Binary files a/static/assets/technologies/gitlab.webp and /dev/null differ
diff --git a/static/assets/technologies/ubuntu.webp b/static/assets/technologies/ubuntu.webp
deleted file mode 100644
index a78f23e..0000000
Binary files a/static/assets/technologies/ubuntu.webp and /dev/null differ
diff --git a/static/data/_cedata.json b/static/data/_cedata.json
new file mode 100644
index 0000000..c40f365
--- /dev/null
+++ b/static/data/_cedata.json
@@ -0,0 +1,57 @@
+[
+	{
+		"name": "The Merciless One",
+		"imageFile": "merciless_one.png",
+		"mlb": true
+	},
+	{
+		"name": "Ox-Demon King",
+		"imageFile": "ox-demon.png",
+		"mlb": true
+	},
+	{
+		"name": "Holy Maiden's Teachings",
+		"imageFile": "maidens_teachings.png",
+		"mlb": true
+	},
+	{
+		"name": "Kaleidoscope",
+		"imageFile": "kaleidoscope.png",
+		"mlb": true
+	},
+	{
+		"name": "The Black Grail",
+		"imageFile": "black_grail.png",
+		"mlb": true
+	},
+	{
+		"name": "A Fragment Of 2030",
+		"imageFile": "2030.png",
+		"mlb": true
+	},
+	{
+		"name": "Outrage",
+		"imageFile": "outrage.png",
+		"mlb": false
+	},
+	{
+		"name": "Vessel of the Saint",
+		"imageFile": "vessel.png",
+		"mlb": false
+	},
+	{
+		"name": "Devilish Bodhisattva",
+		"imageFile": "devilish_bodhisattva.png",
+		"mlb": true
+	},
+	{
+		"name": "500-Year Obsession",
+		"imageFile": "500.png",
+		"mlb": true
+	},
+	{
+		"name": "Prisma Cosmos",
+		"imageFile": "prisma_cosmos.png",
+		"mlb": true
+	}
+]
diff --git a/static/assets/data/_contactdata.json b/static/data/_contactdata.json
similarity index 73%
rename from static/assets/data/_contactdata.json
rename to static/data/_contactdata.json
index 2ca9903..ce6e643 100644
--- a/static/assets/data/_contactdata.json
+++ b/static/data/_contactdata.json
@@ -2,31 +2,31 @@
 	{
 		"site": "Youtube: @Firq_",
 		"link": "https://www.youtube.com/@Firq_",
-		"image": "youtube"
+		"imageFile": "youtube.webp"
 	},
 	{
 		"site": "Twitch: Firq",
 		"link": "https://www.twitch.tv/firq",
-		"image": "twitch"
+		"imageFile": "twitch.webp"
 	},
 	{
 		"site": "Discord: firq",
 		"link": "https://discord.com/users/186014064835690496",
-		"image": "discord"
+		"imageFile": "discord.webp"
 	},
 	{
 		"site": "Twitter: Firq_ow",
 		"link": "https://twitter.com/firq_ow",
-		"image": "twitter"
+		"imageFile": "twitter.webp"
 	},
 	{
 		"site": "Reddit: u/Firq_ow",
 		"link": "https://www.reddit.com/user/firq_ow",
-		"image": "reddit"
+		"imageFile": "reddit.webp"
 	},
 	{
 		"site": "Support Setup on Rayshift",
 		"link": "https://rayshift.io/na/firq",
-		"image": "custom-fgo"
+		"imageFile": "custom-fgo.webp"
 	}
 ]
diff --git a/static/assets/data/_favouritesdata.json b/static/data/_favouritesdata.json
similarity index 80%
rename from static/assets/data/_favouritesdata.json
rename to static/data/_favouritesdata.json
index dc7aa60..d3554d8 100644
--- a/static/assets/data/_favouritesdata.json
+++ b/static/data/_favouritesdata.json
@@ -2,13 +2,13 @@
     {
         "name": "Scathach",
         "origin": "Fate/Grand Order",
-        "image": "scathach",
+        "imageFile": "scathach.png",
         "link": "https://twitter.com/firq_ow/status/1541064034618904578"
     },
     {
         "name": "Skadi",
         "origin": "Fate/Grand Order",
-        "image": "skadi",
+        "imageFile": "skadi.png",
         "link": "https://twitter.com/firq_ow/status/1544321985995489280"
     }
 ]
\ No newline at end of file
diff --git a/static/assets/data/_featureddata.json b/static/data/_featureddata.json
similarity index 68%
rename from static/assets/data/_featureddata.json
rename to static/data/_featureddata.json
index 68ba17e..eccb8ea 100644
--- a/static/assets/data/_featureddata.json
+++ b/static/data/_featureddata.json
@@ -2,226 +2,226 @@
 	{
 		"title": "DB 7T",
 		"link": "https://www.youtube.com/watch?v=nYV4jwgpuR0",
-		"image": "db",
+		"targetImageFile": "db.webp",
 		"date": "2022-07-14",
 		"user": "KOG",
-		"ta_servant": "shishou",
+		"servantImageFile": "shishou.png",
 		"turns": "7T"
 	},
 	{
 		"title": "DB 7T",
 		"link": "https://www.youtube.com/watch?v=jKoSw1XM6-c",
-		"image": "db",
+		"targetImageFile": "db.webp",
 		"date": "2022-07-07",
 		"user": "Requiem",
-		"ta_servant": "shishou",
+		"servantImageFile": "shishou.png",
 		"turns": "7T"
 	},
 	{
 		"title": "Valentines 2023 CQ 5T SC",
 		"link": "https://www.youtube.com/watch?v=AkDFyJ98GDQ",
-		"image": "orion",
+		"targetImageFile": "orion.webp",
 		"date": "2023-02-23",
 		"user": "Requiem",
-		"ta_servant": "shishou",
+		"servantImageFile": "shishou.png",
 		"turns": "5T"
 	},
 	{
 		"title": "Ibuki 3T (Lostbelt 5.5)",
 		"link": "https://www.youtube.com/watch?v=zHGvHC0CUu0",
-		"image": "ibuki",
+		"targetImageFile": "ibuki.webp",
 		"date": "2022-11-22",
 		"user": "Requiem",
-		"ta_servant": "shishou",
+		"servantImageFile": "shishou.png",
 		"turns": "3T"
 	},
 	{
 		"title": "Kingprotea 1T",
 		"link": "https://www.youtube.com/watch?v=iAhwqIGWsG4",
-		"image": "kingprotea",
+		"targetImageFile": "kingprotea.webp",
 		"date": "2022-09-13",
 		"user": "Requiem",
-		"ta_servant": "shishou",
+		"servantImageFile": "shishou.png",
 		"turns": "1T"
 	},
 	{
 		"title": "Golden Caenis 3T (LB5.2)",
 		"link": "https://www.youtube.com/watch?v=_yZYgdr6XA4",
-		"image": "caenis",
+		"targetImageFile": "caenis.webp",
 		"date": "2022-04-22",
 		"user": "Requiem",
-		"ta_servant": "shishou",
+		"servantImageFile": "shishou.png",
 		"turns": "3T"
 	},
 	{
 		"title": "GudaGuda 4 CQ 3T [No DMG CE]",
 		"link": "https://www.youtube.com/watch?v=oCT7ngip82U",
-		"image": "shibata",
+		"targetImageFile": "shibata.webp",
 		"date": "2022-04-26",
 		"user": "Requiem",
-		"ta_servant": "shishou",
+		"servantImageFile": "shishou.png",
 		"turns": "3T"
 	},
 	{
 		"title": "Valentines 2023 CQ 4T",
 		"link": "https://www.youtube.com/watch?v=6WyPFYT8h1c",
-		"image": "orion",
+		"targetImageFile": "orion.webp",
 		"date": "2023-02-25",
 		"user": "KOG",
-		"ta_servant": "summershishou",
+		"servantImageFile": "summershishou.png",
 		"turns": "4T"
 	},
 	{
 		"title": "Ooku Rerun CQ 4T",
 		"link": "https://www.youtube.com/watch?v=EU2THj6GnhQ",
-		"image": "kiyohime",
+		"targetImageFile": "kiyohime.webp",
 		"date": "2022-08-12",
 		"user": "KOG",
-		"ta_servant": "summershishou",
+		"servantImageFile": "summershishou.png",
 		"turns": "4T"
 	},
 	{
 		"title": "Amazoness 2021 CQ 3T",
 		"link": "https://www.youtube.com/watch?v=l2cmlS9LKSU",
-		"image": "penth",
+		"targetImageFile": "penth.webp",
 		"date": "2022-01-22",
 		"user": "KOG",
-		"ta_servant": "shishou",
+		"servantImageFile": "shishou.png",
 		"turns": "3T"
 	},
 	{
 		"title": "Christmas 2021 CQ 4T",
 		"link": "https://www.youtube.com/watch?v=PrJvjo3fvVc",
-		"image": "santagale",
+		"targetImageFile": "santagale.webp",
 		"date": "2021-12-20",
 		"user": "KOG",
-		"ta_servant": "summershishou",
+		"servantImageFile": "summershishou.png",
 		"turns": "4T"
 	},
 	{
 		"title": "GudaGuda 4 CQ 3T",
 		"link": "https://www.youtube.com/watch?v=e9H37cnW160",
-		"image": "shibata",
+		"targetImageFile": "shibata.webp",
 		"date": "2021-06-29",
 		"user": "KOG",
-		"ta_servant": "shishou",
+		"servantImageFile": "shishou.png",
 		"turns": "3T"
 	},
 	{
 		"title": "GudaGuda 5 CQ 4T",
 		"link": "https://www.youtube.com/watch?v=HmrWnxp8Qz0",
-		"image": "nobunaga",
+		"targetImageFile": "nobunaga.webp",
 		"date": "2022-09-24",
 		"user": "Ray",
-		"ta_servant": "jalter",
+		"servantImageFile": "jalter.png",
 		"turns": "4T"
 	},
 	{
 		"title": "GudaGuda 5 CQ 4T",
 		"link": "https://www.youtube.com/watch?v=pcvhCQq5gFE",
-		"image": "nobunaga",
+		"targetImageFile": "nobunaga.webp",
 		"date": "2022-09-23",
 		"user": "Ray",
-		"ta_servant": "summerjalter",
+		"servantImageFile": "summerjalter.png",
 		"turns": "4T"
 	},
 	{
 		"title": "Ibuki 3T (Lostbelt 5.5)",
 		"link": "https://www.youtube.com/watch?v=4NgfXE1WY5I",
-		"image": "ibuki",
+		"targetImageFile": "ibuki.webp",
 		"date": "2022-11-26",
 		"user": "Ray",
-		"ta_servant": "jalter",
+		"servantImageFile": "jalter.png",
 		"turns": "3T"
 	},
 	{
 		"title": "Douman 3T (Lostbelt 5.5)",
 		"link": "https://www.youtube.com/watch?v=CIoNRC4tDrY",
-		"image": "douman",
+		"targetImageFile": "douman.webp",
 		"date": "2022-11-27",
 		"user": "Ray",
-		"ta_servant": "musashi",
+		"servantImageFile": "musashi.png",
 		"turns": "3T"
 	},
 	{
 		"title": "Boxing 3T (Xmas 5)",
 		"link": "https://www.youtube.com/watch?v=0ErT8Qbzuw8",
-		"image": "dioscuri",
+		"targetImageFile": "dioscuri.webp",
 		"date": "2022-12-18",
 		"user": "Ray",
-		"ta_servant": "jalter",
+		"servantImageFile": "jalter.png",
 		"turns": "3T"
 	},
 	{
 		"title": "Slapstick Museum CQ 5T",
 		"link": "https://www.youtube.com/watch?v=QtthHB6rk7k",
-		"image": "moriarty",
+		"targetImageFile": "moriarty.webp",
 		"date": "2023-03-10",
 		"user": "Ray",
-		"ta_servant": "jalter",
+		"servantImageFile": "jalter.png",
 		"turns": "5T"
 	},
 	{
 		"title": "Little Big Tengu CQ 4T",
 		"link": "https://www.youtube.com/watch?v=50Adjx4owhg",
-		"image": "taira",
+		"targetImageFile": "taira.webp",
 		"date": "2023-01-29",
 		"user": "Ray",
-		"ta_servant": "jalter",
+		"servantImageFile": "jalter.png",
 		"turns": "4T"
 	},
 	{
 		"title": "DB 7T (No Duplicates)",
 		"link": "https://www.youtube.com/watch?v=U5wsl09_VVQ",
-		"image": "db",
+		"targetImageFile": "db.webp",
 		"date": "2023-03-21",
 		"user": "Ray",
-		"ta_servant": "jalter",
+		"servantImageFile": "jalter.png",
 		"turns": "7T"
 	},
 	{
 		"title": "Top of Tower 3T",
 		"link": "https://www.youtube.com/watch?v=s_KRHpq_634",
-		"image": "galatea",
+		"targetImageFile": "galatea.webp",
 		"date": "2023-03-20",
 		"user": "Requiem",
-		"ta_servant": "skadi",
+		"servantImageFile": "skadi.png",
 		"turns": "3T"
 	},
 	{
 		"title": "Grail Live 4T",
 		"link": "https://drive.google.com/file/d/11spwhurDXFkWl3sHc2ghH5nFMW9-UwrR/view?usp=sharing",
-		"image": "arthur",
+		"targetImageFile": "arthur.webp",
 		"date": "2023-04-26",
 		"user": "Roz",
-		"ta_servant": "caren",
+		"servantImageFile": "caren.png",
 		"turns": "4T"
 	  },
 	  {
 		"title": "DB 7T",
 		"link": "https://drive.google.com/file/d/15TNT1HfYQioH7lRI5kvGChzElw6fz4-f/view?usp=sharing",
-		"image": "db",
+		"targetImageFile": "db.webp",
 		"date": "2023-01-13",
 		"user": "Roz",
-		"ta_servant": "kama",
+		"servantImageFile": "kama.png",
 		"turns": "7T"
 	  },
 	  {
 		"title": "Grail Live 4T",
 		"link": "https://www.youtube.com/watch?v=HIFYCvD6YhM",
-		"image": "arthur",
+		"targetImageFile": "arthur.webp",
 		"date": "2023-04-26",
 		"user": "Ray",
-		"ta_servant": "jalter",
+		"servantImageFile": "jalter.png",
 		"turns": "6T"
 	  },
 	  {
 		"title": "Grail Live 4T",
 		"link": "https://www.youtube.com/watch?v=jT8NEHvZ6Yg",
-		"image": "arthur",
+		"targetImageFile": "arthur.webp",
 		"date": "2023-04-25",
 		"user": "Requiem",
-		"ta_servant": "tamamocat",
+		"servantImageFile": "tamamocat.png",
 		"turns": "4T"
 	  }
 ]
diff --git a/static/assets/data/_navdata.json b/static/data/_navdata.json
similarity index 64%
rename from static/assets/data/_navdata.json
rename to static/data/_navdata.json
index bf03d7f..9397c84 100644
--- a/static/assets/data/_navdata.json
+++ b/static/data/_navdata.json
@@ -2,26 +2,26 @@
 	{
         "link": "/",
         "text": "Home",
-        "icon": "iconoir-home"
+        "icon": "home"
 	},
     {
         "link": "/servants",
         "text": "Servants",
-        "icon": "iconoir-task-list"
+        "icon": "servants"
 	},
     {
         "link": "/ta-collection",
         "text": "TA Collection",
-        "icon": "iconoir-database"
+        "icon": "ta_collection"
 	},
     {
         "link": "/blog",
         "text": "Blog",
-        "icon": "iconoir-bookmark-book"
+        "icon": "blog"
 	},
     {
         "link": "/about",
         "text": "About",
-        "icon": "iconoir-mail"
+        "icon": "about"
 	}
 ]
\ No newline at end of file
diff --git a/static/data/_servantdata.json b/static/data/_servantdata.json
new file mode 100644
index 0000000..339940a
--- /dev/null
+++ b/static/data/_servantdata.json
@@ -0,0 +1,272 @@
+[
+	{
+		"name": "Scathach",
+		"level": "120",
+		"np": "5",
+		"skills": "10 / 10 / 10",
+		"ml": "10",
+		"servantImageFile": "scathach_03.png",
+		"bondceImageFile": "scathach.png",
+		"bond10": true
+	},
+	{
+		"name": "Skadi",
+		"level": "120",
+		"np": "5",
+		"skills": "10 / 10 / 10",
+		"ml": "10",
+		"servantImageFile": "skadi_03.png",
+		"bondceImageFile": "skadi.png",
+		"bond10": true
+	},
+	{
+		"name": "Skadi",
+		"level": "70",
+		"np": "1",
+		"skills": "10 / 10 / 10",
+		"ml": "1",
+		"servantImageFile": "skadi_02.png",
+		"bondceImageFile": "skadi.png",
+		"bond10": true
+	},
+	{
+		"name": "Skadi",
+		"level": "1",
+		"np": "1",
+		"skills": "10 / X / X",
+		"ml": "1",
+		"servantImageFile": "skadi_01.png",
+		"bondceImageFile": "skadi.png",
+		"bond10": true
+	},
+	{
+		"name": "Koyanskaya of Light",
+		"level": "90",
+		"np": "1",
+		"skills": "10 / 10 / 10",
+		"ml": "Not Unlocked",
+		"servantImageFile": "koyanlight_01.png",
+		"bondceImageFile": "koyanlight.png",
+		"bond10": true
+	},
+	{
+		"name": "Castoria",
+		"level": "90",
+		"np": "1",
+		"skills": "10 / 10 / 10",
+		"ml": "10",
+		"servantImageFile": "castoria_02.png",
+		"bondceImageFile": "castoria.png",
+		"bond10": true
+	},
+	{
+		"name": "Castoria",
+		"level": "70",
+		"np": "1",
+		"skills": "10 / 10 / 10",
+		"ml": "1",
+		"servantImageFile": "castoria_01.png",
+		"bondceImageFile": "castoria.png",
+		"bond10": true
+	},
+	{
+		"name": "Oberon",
+		"level": "90",
+		"np": "1",
+		"skills": "10 / 10 / 10",
+		"ml": "1",
+		"servantImageFile": "oberon_02.png",
+		"bondceImageFile": "oberon.png",
+		"bond10": true
+	},
+	{
+		"name": "Merlin",
+		"level": "90",
+		"np": "1",
+		"skills": "10 / 10 / 10",
+		"ml": "Not Unlocked",
+		"servantImageFile": "merlin_03.png",
+		"bondceImageFile": "merlin.png",
+		"bond10": true
+	},
+	{
+		"name": "Merlin",
+		"level": "70",
+		"np": "1",
+		"skills": "9 / 1 / 9",
+		"ml": "Not Unlocked",
+		"servantImageFile": "merlin_01.png",
+		"bondceImageFile": "merlin.png",
+		"bond10": true
+	},
+	{
+		"name": "Waver",
+		"level": "90",
+		"np": "1",
+		"skills": "10 / 10 / 10",
+		"ml": "Not Unlocked",
+		"servantImageFile": "waver_02.png",
+		"bondceImageFile": "waver.png",
+		"bond10": true
+	},
+	{
+		"name": "Reines",
+		"level": "90",
+		"np": "1",
+		"skills": "10 / 10 / 10",
+		"ml": "9",
+		"servantImageFile": "reines_01.png",
+		"bondceImageFile": "reines.png",
+		"bond10": true
+	},
+	{
+		"name": "Tamamo-no-Mae",
+		"level": "90",
+		"np": "2",
+		"skills": "10 / 10 / 10",
+		"ml": "Not Unlocked",
+		"servantImageFile": "tamamo_03.png",
+		"bondceImageFile": "tamamo.png",
+		"bond10": true
+	},
+	{
+		"name": "Van Gogh",
+		"level": "90",
+		"np": "1",
+		"skills": "10 / 10 / 10",
+		"ml": "10",
+		"servantImageFile": "gogh_01.png",
+		"bondceImageFile": "gogh.png",
+		"bond10": true
+	},
+	{
+		"name": "Miss Crane",
+		"level": "90",
+		"np": "1",
+		"skills": "10 / 10 / 10",
+		"ml": "Not Unlocked",
+		"servantImageFile": "crane_01.png",
+		"bondceImageFile": "crane.png",
+		"bond10": false
+	},
+	{
+		"name": "Ashiya Douman",
+		"level": "90",
+		"np": "1",
+		"skills": "9 / 9 / 10",
+		"ml": "10",
+		"servantImageFile": "douman_01.png",
+		"bondceImageFile": "douman.png",
+		"bond10": false
+	},
+	{
+		"name": "Himiko",
+		"level": "90",
+		"np": "1",
+		"skills": "9 / 9 / 9",
+		"ml": "Not Unlocked",
+		"servantImageFile": "himiko_03.png",
+		"bondceImageFile": "himiko.png",
+		"bond10": false
+	},
+	{
+		"name": "Sherlock Holmes",
+		"level": "90",
+		"np": "1",
+		"skills": "9 / 10 / 9",
+		"ml": "Not Unlocked",
+		"servantImageFile": "sherlock_03.png",
+		"bondceImageFile": "sherlock.png",
+		"bond10": false
+	},
+	{
+		"name": "Nero (Bride)",
+		"level": "90",
+		"np": "1",
+		"skills": "10 / 10 / 10",
+		"ml": "Not Unlocked",
+		"servantImageFile": "bride_03.png",
+		"bondceImageFile": "bride.png",
+		"bond10": false
+	},
+	{
+		"name": "Taigon Wang",
+		"level": "70",
+		"np": "1",
+		"skills": "10 / 9 / 10",
+		"ml": "Not Unlocked",
+		"servantImageFile": "taigong_03.png",
+		"bondceImageFile": "taigong.png",
+		"bond10": false
+	},
+	{
+		"name": "Nightingale (Santa)",
+		"level": "80",
+		"np": "5",
+		"skills": "9 / 10 / 9",
+		"ml": "Not Unlocked",
+		"servantImageFile": "santagale_01.png",
+		"bondceImageFile": "santagale.png",
+		"bond10": true
+	},
+	{
+		"name": "Nightingale (Santa)",
+		"level": "60",
+		"np": "1",
+		"skills": "1 / 10 / 10",
+		"ml": "Not Unlocked",
+		"servantImageFile": "santagale_01.png",
+		"bondceImageFile": "santagale.png",
+		"bond10": true
+	},
+	{
+		"name": "Elisabeth Báthory",
+		"level": "40",
+		"np": "1",
+		"skills": "9 / 9 / X",
+		"ml": "Not Unlocked",
+		"servantImageFile": "liz_01.png",
+		"bondceImageFile": "liz.png",
+		"bond10": false
+	},
+	{
+		"name": "Wu Zetian",
+		"level": "60",
+		"np": "1",
+		"skills": "10 / 9 / 10",
+		"ml": "Not Unlocked",
+		"servantImageFile": "wu_01.png",
+		"bondceImageFile": "wu.png",
+		"bond10": true
+	},
+	{
+		"name": "Ibaraki-Douji",
+		"level": "40",
+		"np": "1",
+		"skills": "9 / 10 / X ",
+		"ml": "Not Unlocked",
+		"servantImageFile": "ibaraki_02.png",
+		"bondceImageFile": "ibaraki.png",
+		"bond10": false
+	},
+	{
+		"name": "Calamity Jane",
+		"level": "60",
+		"np": "1",
+		"skills": "1 / 9 / 9",
+		"ml": "Not Unlocked",
+		"servantImageFile": "jane_02.png",
+		"bondceImageFile": "jane.png",
+		"bond10": false
+	},
+	{
+		"name": "Chiron",
+		"level": "60",
+		"np": "1",
+		"skills": "1 / 10 / 10",
+		"ml": "Not Unlocked",
+		"servantImageFile": "chiron_01.png",
+		"bondceImageFile": "chiron.png",
+		"bond10": false
+	}
+]
diff --git a/static/data/_tadata.json b/static/data/_tadata.json
new file mode 100644
index 0000000..b09079a
--- /dev/null
+++ b/static/data/_tadata.json
@@ -0,0 +1,330 @@
+[
+	{
+		"title": "DB 7T (No Duplicates)",
+		"link": "https://www.youtube.com/watch?v=d1ftVeitR6c",
+		"targetImageFile": "db.webp",
+		"date": "2022-07-09",
+		"servantImageFile": "shishou.png",
+		"turns": "7T"
+	},
+	{
+		"title": "Kingprotea 1T",
+		"link": "https://www.youtube.com/watch?v=m3SATSOfpt4",
+		"targetImageFile": "kingprotea.webp",
+		"date": "2022-06-21",
+		"servantImageFile": "shishou.png",
+		"turns": "1T"
+	},
+	{
+		"title": "Solomon 1T (No NP)",
+		"link": "https://www.youtube.com/watch?v=01Qx4Hs-X4M",
+		"targetImageFile": "solomon.webp",
+		"date": "2022-06-28",
+		"servantImageFile": "shishou.png",
+		"turns": "1T"
+	},
+	{
+		"title": "Ibuki 3T (LB 5.5)",
+		"link": "https://www.youtube.com/watch?v=AaqRN73dO5k",
+		"targetImageFile": "ibuki.webp",
+		"date": "2022-11-22",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Boxing 3T (Xmas 5)",
+		"link": "https://www.youtube.com/watch?v=S8OQ7yWldJY",
+		"targetImageFile": "dioscuri.webp",
+		"date": "2022-12-24",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "MHXX 2T (No DMG CE)",
+		"link": "https://www.youtube.com/watch?v=lz6iBZvoDuw",
+		"targetImageFile": "mhxx.webp",
+		"date": "2023-01-12",
+		"servantImageFile": "shishou.png",
+		"turns": "2T"
+	},
+	{
+		"title": "Taira 3T (LB 5.5)",
+		"link": "https://www.youtube.com/watch?v=YtRvahqFA0Y",
+		"targetImageFile": "taira.webp",
+		"date": "2022-11-22",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Douman 3T (LB 5.5)",
+		"link": "https://www.youtube.com/watch?v=6cstr3vTd8Y",
+		"targetImageFile": "douman.webp",
+		"date": "2022-11-23",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Christmas 2021 Rerun CQ 5T",
+		"link": "https://www.youtube.com/watch?v=cpqhx9dUgTU",
+		"targetImageFile": "santagale.webp",
+		"date": "2022-10-15",
+		"servantImageFile": "shishou.png",
+		"turns": "5T"
+	},
+	{
+		"title": "Summer 4 Rerun CQ 3T",
+		"link": "https://www.youtube.com/watch?v=u72o7PDBtks",
+		"targetImageFile": "fuuma.webp",
+		"date": "2022-06-04",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Fate/ Requiem CQ 3T",
+		"link": "https://www.youtube.com/watch?v=k7vGC4kpEFg",
+		"targetImageFile": "erice.webp",
+		"date": "2022-05-11",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Kirschtaria 3T (LB 5)",
+		"link": "https://www.youtube.com/watch?v=aYlyfAzuFw0",
+		"targetImageFile": "kirschtaria.webp",
+		"date": "2022-04-04",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Aeaean Spring Breeze CQ 3T",
+		"link": "https://www.youtube.com/watch?v=uo3jI9xuVwI",
+		"targetImageFile": "odysseus.webp",
+		"date": "2022-03-06",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Valentines 2022 CQ 4T",
+		"link": "https://www.youtube.com/watch?v=MOCMXZ17FkU",
+		"targetImageFile": "sei.webp",
+		"date": "2022-02-09",
+		"servantImageFile": "shishou.png",
+		"turns": "4T"
+	},
+	{
+		"title": "Amazoness 2021 CQ 3T",
+		"link": "https://www.youtube.com/watch?v=MU_Hw2KKYRU",
+		"targetImageFile": "penth.webp",
+		"date": "2022-01-23",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Valentines 2023 CQ 4T",
+		"link": "https://www.youtube.com/watch?v=fwCmEiaocQo",
+		"targetImageFile": "orion.webp",
+		"date": "2023-02-25",
+		"servantImageFile": "shishou.png",
+		"turns": "4T"
+	},
+	{
+		"title": "Slapstick Museum CQ 5T",
+		"link": "https://www.youtube.com/watch?v=fQImgJirFeo",
+		"targetImageFile": "moriarty.webp",
+		"date": "2023-03-10",
+		"servantImageFile": "shishou.png",
+		"turns": "5T"
+	},
+	{
+		"title": "GudaGuda 5 CQ 4T",
+		"link": "https://www.youtube.com/watch?v=3scILqsgobU",
+		"targetImageFile": "nobunaga.webp",
+		"date": "2022-09-21",
+		"servantImageFile": "shishou.png",
+		"turns": "4T"
+	},
+	{
+		"title": "GudaGuda 4 CQ 3T (No DMG CE)",
+		"link": "https://www.youtube.com/watch?v=HY95cWsjC08",
+		"targetImageFile": "shibata.webp",
+		"date": "2022-04-30",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "GudaGuda 4 CQ 3T",
+		"link": "https://www.youtube.com/watch?v=7iO2WQt64-8",
+		"targetImageFile": "shibata.webp",
+		"date": "2022-04-26",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Top of Tower 3T",
+		"link": "https://www.youtube.com/watch?v=gUtBYNxH4Ck",
+		"targetImageFile": "galatea.webp",
+		"date": "2023-03-20",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Goetia Memorial Quest 2T",
+		"link": "https://www.youtube.com/watch?v=lZHgSVpPv24",
+		"targetImageFile": "goetia.webp",
+		"date": "2023-07-04",
+		"servantImageFile": "skadi.png",
+		"turns": "2T"
+	},
+	{
+		"title": "Melusine 3T (LB 6)",
+		"link": "https://www.youtube.com/watch?v=f35hlBXuR3w",
+		"targetImageFile": "melusine.webp",
+		"date": "2023-06-26",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Morgan 3T (LB 6) Shishou",
+		"link": "https://www.youtube.com/watch?v=7wQ6iabqgEc",
+		"targetImageFile": "morgan.webp",
+		"date": "2023-06-26",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Morgan 3T (LB 6) Skadi",
+		"link": "https://www.youtube.com/watch?v=sQ7HHl1Pb3c",
+		"targetImageFile": "morgan.webp",
+		"date": "2023-06-25",
+		"servantImageFile": "skadi.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Woodwose 3T (LB 6)",
+		"link": "https://www.youtube.com/watch?v=ZPgIDZjrGA0",
+		"targetImageFile": "woodwose.webp",
+		"date": "2023-06-23",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Barghest 2T (LB 6)",
+		"link": "https://www.youtube.com/watch?v=kjMAccbq7-A",
+		"targetImageFile": "barghest.webp",
+		"date": "2023-06-21",
+		"servantImageFile": "tomoe.png",
+		"turns": "2T"
+	},
+	{
+		"title": "Calamity of Norwich 3T (LB 6)",
+		"link": "https://www.youtube.com/watch?v=IwkCnVej_PY",
+		"targetImageFile": "calamityofnorwich.webp",
+		"date": "2023-06-08",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Red Dragon 1T (LB 6)",
+		"link": "https://www.youtube.com/watch?v=MKhkvG0CHko",
+		"targetImageFile": "reddragon.webp",
+		"date": "2023-07-10",
+		"servantImageFile": "tomoesummer.png",
+		"turns": "1T"
+	},
+	{
+		"title": "Albion 3T (LB 6) Skadi",
+		"link": "https://www.youtube.com/watch?v=tejeiYpzfqo",
+		"targetImageFile": "albion.webp",
+		"date": "2023-07-11",
+		"servantImageFile": "skadi.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Albion 3T (LB 6) Shishou",
+		"link": "https://www.youtube.com/watch?v=E8fjEYFqrWI",
+		"targetImageFile": "albion.webp",
+		"date": "2023-07-12",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Albion 3T (LB 6) Salter",
+		"link": "https://www.youtube.com/watch?v=5U42nu-vPnk",
+		"targetImageFile": "albion.webp",
+		"date": "2023-07-12",
+		"servantImageFile": "saberalter.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Cernunnos 4T (No Castoria)",
+		"link": "https://www.youtube.com/watch?v=WrHudtdfivA",
+		"targetImageFile": "cernnunos.webp",
+		"date": "2023-07-19",
+		"servantImageFile": "shishou.png",
+		"turns": "4T"
+	},
+	{
+		"title": "Abyssal Worm 3T (LB 6)",
+		"link": "https://www.youtube.com/watch?v=i8LfxctXhlA",
+		"targetImageFile": "abyssalworm.webp",
+		"date": "2023-07-20",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Summer 6 CQ 3T",
+		"link": "https://www.youtube.com/watch?v=9db9BZ4ZzUo",
+		"targetImageFile": "koyo.webp",
+		"date": "2023-09-24",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Summer 6 Final Treasure 3T",
+		"link": "https://www.youtube.com/watch?v=u44lOISIpHo",
+		"targetImageFile": "kamasummer.webp",
+		"date": "2023-09-25",
+		"servantImageFile": "skadi.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Halloween CQ 3T (No DMG CE)",
+		"link": "https://www.youtube.com/watch?v=bgt6z0Sfpl8",
+		"targetImageFile": "zenobia.webp",
+		"date": "2023-10-26",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "GudaGuda 6 CQ 3T",
+		"link": "https://www.youtube.com/watch?v=RWco4pduGUM",
+		"targetImageFile": "izumo.webp",
+		"date": "2023-11-27",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "\"Hello, Joulupukki\" 3T (Xmas 6)",
+		"link": "https://www.youtube.com/watch?v=qEI8wZbnWww",
+		"targetImageFile": "skadi.webp",
+		"date": "2023-12-16",
+		"servantImageFile": "shishou.png",
+		"turns": "3T"
+	},
+	{
+		"title": "Tunguska - Beast of Taming 4T (FLO)",
+		"link": "https://www.youtube.com/watch?v=g6aASJeL-ao",
+		"targetImageFile": "koyanskayaofdark.png",
+		"date": "2023-12-26",
+		"servantImageFile": "shishou.png",
+		"turns": "4T"
+	},
+	{
+		"title": "Tunguska - Beast IV:L 4T",
+		"link": "https://www.youtube.com/watch?v=brz21NKMMsY",
+		"targetImageFile": "beast_4_l.png",
+		"date": "2023-12-31",
+		"servantImageFile": "shishou.png",
+		"turns": "4T"
+	}
+]
diff --git a/static/data/_technologydata.json b/static/data/_technologydata.json
new file mode 100644
index 0000000..1a3f70a
--- /dev/null
+++ b/static/data/_technologydata.json
@@ -0,0 +1,42 @@
+[
+    {
+      "title": "Astro",
+      "link": "https://astro.build",
+      "imageFile": "astro.webp"
+    },
+    {
+      "title": "Forgejo",
+      "link": "https://forgejo.org/",
+      "imageFile": "forgejo.webp"
+    },
+    {
+      "title": "Docker",
+      "link": "https://www.docker.com/",
+      "imageFile": "docker.webp"
+    },
+    {
+      "title": "Dockge",
+      "link": "https://github.com/louislam/dockge",
+      "imageFile": "dockge.png"
+    },
+    {
+      "title": "Typescript",
+      "link": "https://www.typescriptlang.org/",
+      "imageFile": "typescript.webp"
+    },
+    {
+      "title": "NodeJS",
+      "link": "https://nodejs.org/",
+      "imageFile": "nodejs.webp"
+    },
+    {
+      "title": "serve by @warren-bank",
+      "link": "https://www.npmjs.com/package/@warren-bank/serve",
+      "imageFile": "serve.webp"
+    },
+    {
+      "title": "Unlight-house",
+      "link": "https://unlighthouse.dev/",
+      "imageFile": "unlighthouse.webp"
+    }
+  ]
\ No newline at end of file
diff --git a/static/assets/favicon.ico b/static/favicon.ico
similarity index 100%
rename from static/assets/favicon.ico
rename to static/favicon.ico
diff --git a/unlighthouse.config.ts b/unlighthouse.config.ts
index d289ab5..4d2881a 100644
--- a/unlighthouse.config.ts
+++ b/unlighthouse.config.ts
@@ -3,7 +3,7 @@ export default {
         args: ["--no-sandbox", "--disable-setuid-sandbox"],
     },
     ci: {
-        budget: 90,
+        budget: 50,
         buildStatic: true
     },
     outputPath: "unlighthouse-reports",