@@ -30,6 +30,6 @@ watch(locale, () => refresh())
-
+
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 7e8e09c..bfc0bd5 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -14,6 +14,7 @@ export default defineNuxtConfig({
"@nuxtjs/i18n",
"@nuxt/content",
"@nuxthub/core",
+ "@nuxt/image",
],
css: ["@/assets/main.css"],
@@ -68,4 +69,4 @@ export default defineNuxtConfig({
eslint: {},
compatibilityDate: "latest",
-})
+})
\ No newline at end of file
diff --git a/package.json b/package.json
index 82d8a31..92b3a58 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,7 @@
"@intlify/message-compiler": "^11.1.11",
"@nuxt/content": "3.6.3",
"@nuxt/eslint": "^1.7.1",
+ "@nuxt/image": "1.10.0",
"@nuxthub/core": "^0.9.0",
"@nuxtjs/i18n": "^10.0.3",
"@phosphor-icons/vue": "^2.2.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 4eef018..a6a39bf 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -17,6 +17,9 @@ importers:
'@nuxt/eslint':
specifier: ^1.7.1
version: 1.7.1(@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3))(@vue/compiler-sfc@3.5.18)(eslint@9.32.0(jiti@2.5.1))(magicast@0.3.5)(typescript@5.8.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))
+ '@nuxt/image':
+ specifier: 1.10.0
+ version: 1.10.0(@netlify/blobs@9.1.2)(db0@0.3.2(better-sqlite3@12.2.0))(ioredis@5.6.1)(magicast@0.3.5)
'@nuxthub/core':
specifier: ^0.9.0
version: 0.9.0(@netlify/blobs@9.1.2)(db0@0.3.2(better-sqlite3@12.2.0))(ioredis@5.6.1)(magicast@0.3.5)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))
@@ -885,6 +888,10 @@ packages:
resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@fastify/accept-negotiator@1.1.0':
+ resolution: {integrity: sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==}
+ engines: {node: '>=14'}
+
'@fastify/busboy@3.1.1':
resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==}
@@ -1291,6 +1298,10 @@ packages:
vite-plugin-eslint2:
optional: true
+ '@nuxt/image@1.10.0':
+ resolution: {integrity: sha512-/B58GeEmme7bkmQUrXzEw8P9sJb9BkMaYZqLDtq8ZdDLEddE3P4nVya8RQPB+p4b7EdqWajpPqdy1A2ZPLev/A==}
+ engines: {node: '>=18.20.6'}
+
'@nuxt/kit@3.17.7':
resolution: {integrity: sha512-JLno3ur7Pix2o/StxIMlEHRkMawA6h7uzjZBDgxdeKXRWTYY8ID9YekSkN4PBlEFGXBfCBOcPd5+YqcyBUAMkw==}
engines: {node: '>=18.12.0'}
@@ -2181,6 +2192,10 @@ packages:
peerDependencies:
vue: ^2.7.0 || ^3.0.0
+ '@trysound/sax@0.2.0':
+ resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
+ engines: {node: '>=10.13.0'}
+
'@tybys/wasm-util@0.10.0':
resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==}
@@ -2766,6 +2781,33 @@ packages:
bare-events@2.6.0:
resolution: {integrity: sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==}
+ bare-fs@4.1.6:
+ resolution: {integrity: sha512-25RsLF33BqooOEFNdMcEhMpJy8EoR88zSMrnOQOaM3USnOK2VmaJ1uaQEwPA6AQjrv1lXChScosN6CzbwbO9OQ==}
+ engines: {bare: '>=1.16.0'}
+ peerDependencies:
+ bare-buffer: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
+
+ bare-os@3.6.1:
+ resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==}
+ engines: {bare: '>=1.14.0'}
+
+ bare-path@3.0.0:
+ resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
+
+ bare-stream@2.6.5:
+ resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==}
+ peerDependencies:
+ bare-buffer: '*'
+ bare-events: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
+ bare-events:
+ optional: true
+
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
@@ -3020,6 +3062,10 @@ packages:
resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
engines: {node: '>= 6'}
+ commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+
comment-parser@1.4.1:
resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==}
engines: {node: '>= 12.0.0'}
@@ -3126,6 +3172,10 @@ packages:
resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+ css-tree@2.3.1:
+ resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
css-tree@3.1.0:
resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
@@ -3139,6 +3189,9 @@ packages:
engines: {node: '>=4'}
hasBin: true
+ cssfilter@0.0.10:
+ resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==}
+
cssnano-preset-default@7.0.8:
resolution: {integrity: sha512-d+3R2qwrUV3g4LEMOjnndognKirBZISylDZAF/TPeCWVjEwlXS2e4eN4ICkoobRe7pD3H6lltinKVyS1AJhdjQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
@@ -4120,6 +4173,10 @@ packages:
resolution: {integrity: sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==}
engines: {node: '>=12.22.0'}
+ ipx@2.1.1:
+ resolution: {integrity: sha512-XuM9FEGOT+/45mfAWZ5ykwkZ/oE7vWpd1iWjRffMWlwAYIRzb/xD6wZhQ4BzmPMX6Ov5dqK0wUyD0OEN9oWT6g==}
+ hasBin: true
+
iron-webcrypto@1.2.1:
resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==}
@@ -4608,6 +4665,9 @@ packages:
mdn-data@2.0.28:
resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
+ mdn-data@2.0.30:
+ resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
+
mdn-data@2.12.2:
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
@@ -4877,6 +4937,9 @@ packages:
resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==}
engines: {node: '>=10'}
+ node-addon-api@6.1.0:
+ resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==}
+
node-addon-api@7.1.1:
resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
@@ -5784,6 +5847,10 @@ packages:
shadcn-nuxt@2.2.0:
resolution: {integrity: sha512-0GxzEoTwwsn2K+7rXljhvM7T5+FC8RcBbpvr72L2qwfI9aj/oJgYgUKtC7/onIX8vHrGGziJMfA/xyjibD4J4A==}
+ sharp@0.32.6:
+ resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==}
+ engines: {node: '>=14.15.0'}
+
sharp@0.33.5:
resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
@@ -6016,6 +6083,11 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
+ svgo@3.3.2:
+ resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
svgo@4.0.0:
resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==}
engines: {node: '>=16'}
@@ -6059,6 +6131,9 @@ packages:
tar-fs@2.1.3:
resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==}
+ tar-fs@3.1.0:
+ resolution: {integrity: sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==}
+
tar-stream@2.2.0:
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
engines: {node: '>=6'}
@@ -6676,6 +6751,11 @@ packages:
resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==}
engines: {node: '>=0.4.0'}
+ xss@1.0.15:
+ resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==}
+ engines: {node: '>= 0.10.0'}
+ hasBin: true
+
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@@ -7333,6 +7413,9 @@ snapshots:
'@eslint/core': 0.15.1
levn: 0.4.1
+ '@fastify/accept-negotiator@1.1.0':
+ optional: true
+
'@fastify/busboy@3.1.1': {}
'@floating-ui/core@1.7.2':
@@ -7954,6 +8037,42 @@ snapshots:
- utf-8-validate
- vite
+ '@nuxt/image@1.10.0(@netlify/blobs@9.1.2)(db0@0.3.2(better-sqlite3@12.2.0))(ioredis@5.6.1)(magicast@0.3.5)':
+ dependencies:
+ '@nuxt/kit': 3.17.7(magicast@0.3.5)
+ consola: 3.4.2
+ defu: 6.1.4
+ h3: 1.15.3
+ image-meta: 0.2.1
+ knitwork: 1.2.0
+ ohash: 2.0.11
+ pathe: 2.0.3
+ std-env: 3.9.0
+ ufo: 1.6.1
+ optionalDependencies:
+ ipx: 2.1.1(@netlify/blobs@9.1.2)(db0@0.3.2(better-sqlite3@12.2.0))(ioredis@5.6.1)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/kv'
+ - aws4fetch
+ - bare-buffer
+ - db0
+ - idb-keyval
+ - ioredis
+ - magicast
+ - uploadthing
+
'@nuxt/kit@3.17.7(magicast@0.3.5)':
dependencies:
c12: 3.1.0(magicast@0.3.5)
@@ -8894,6 +9013,9 @@ snapshots:
'@tanstack/virtual-core': 3.13.12
vue: 3.5.18(typescript@5.8.3)
+ '@trysound/sax@0.2.0':
+ optional: true
+
'@tybys/wasm-util@0.10.0':
dependencies:
tslib: 2.8.1
@@ -9534,6 +9656,28 @@ snapshots:
bare-events@2.6.0:
optional: true
+ bare-fs@4.1.6:
+ dependencies:
+ bare-events: 2.6.0
+ bare-path: 3.0.0
+ bare-stream: 2.6.5(bare-events@2.6.0)
+ optional: true
+
+ bare-os@3.6.1:
+ optional: true
+
+ bare-path@3.0.0:
+ dependencies:
+ bare-os: 3.6.1
+ optional: true
+
+ bare-stream@2.6.5(bare-events@2.6.0):
+ dependencies:
+ streamx: 2.22.1
+ optionalDependencies:
+ bare-events: 2.6.0
+ optional: true
+
base64-js@1.5.1: {}
better-sqlite3@12.2.0:
@@ -9786,6 +9930,9 @@ snapshots:
commander@6.2.1: {}
+ commander@7.2.0:
+ optional: true
+
comment-parser@1.4.1: {}
common-path-prefix@3.0.0: {}
@@ -9884,6 +10031,12 @@ snapshots:
mdn-data: 2.0.28
source-map-js: 1.2.1
+ css-tree@2.3.1:
+ dependencies:
+ mdn-data: 2.0.30
+ source-map-js: 1.2.1
+ optional: true
+
css-tree@3.1.0:
dependencies:
mdn-data: 2.12.2
@@ -9893,6 +10046,9 @@ snapshots:
cssesc@3.0.0: {}
+ cssfilter@0.0.10:
+ optional: true
+
cssnano-preset-default@7.0.8(postcss@8.5.6):
dependencies:
browserslist: 4.25.1
@@ -11039,6 +11195,46 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ ipx@2.1.1(@netlify/blobs@9.1.2)(db0@0.3.2(better-sqlite3@12.2.0))(ioredis@5.6.1):
+ dependencies:
+ '@fastify/accept-negotiator': 1.1.0
+ citty: 0.1.6
+ consola: 3.4.2
+ defu: 6.1.4
+ destr: 2.0.5
+ etag: 1.8.1
+ h3: 1.15.3
+ image-meta: 0.2.1
+ listhen: 1.9.0
+ ofetch: 1.4.1
+ pathe: 1.1.2
+ sharp: 0.32.6
+ svgo: 3.3.2
+ ufo: 1.6.1
+ unstorage: 1.16.1(@netlify/blobs@9.1.2)(db0@0.3.2(better-sqlite3@12.2.0))(ioredis@5.6.1)
+ xss: 1.0.15
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/kv'
+ - aws4fetch
+ - bare-buffer
+ - db0
+ - idb-keyval
+ - ioredis
+ - uploadthing
+ optional: true
+
iron-webcrypto@1.2.1: {}
is-absolute-url@4.0.1: {}
@@ -11588,6 +11784,9 @@ snapshots:
mdn-data@2.0.28: {}
+ mdn-data@2.0.30:
+ optional: true
+
mdn-data@2.12.2: {}
media-typer@0.3.0: {}
@@ -12031,6 +12230,9 @@ snapshots:
dependencies:
semver: 7.7.2
+ node-addon-api@6.1.0:
+ optional: true
+
node-addon-api@7.1.1: {}
node-domexception@1.0.0: {}
@@ -13217,6 +13419,20 @@ snapshots:
transitivePeerDependencies:
- magicast
+ sharp@0.32.6:
+ dependencies:
+ color: 4.2.3
+ detect-libc: 2.0.4
+ node-addon-api: 6.1.0
+ prebuild-install: 7.1.3
+ semver: 7.7.2
+ simple-get: 4.0.1
+ tar-fs: 3.1.0
+ tunnel-agent: 0.6.0
+ transitivePeerDependencies:
+ - bare-buffer
+ optional: true
+
sharp@0.33.5:
dependencies:
color: 4.2.3
@@ -13493,6 +13709,17 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
+ svgo@3.3.2:
+ dependencies:
+ '@trysound/sax': 0.2.0
+ commander: 7.2.0
+ css-select: 5.2.2
+ css-tree: 2.3.1
+ css-what: 6.2.2
+ csso: 5.0.5
+ picocolors: 1.1.1
+ optional: true
+
svgo@4.0.0:
dependencies:
commander: 11.1.0
@@ -13567,6 +13794,17 @@ snapshots:
pump: 3.0.3
tar-stream: 2.2.0
+ tar-fs@3.1.0:
+ dependencies:
+ pump: 3.0.3
+ tar-stream: 3.1.7
+ optionalDependencies:
+ bare-fs: 4.1.6
+ bare-path: 3.0.0
+ transitivePeerDependencies:
+ - bare-buffer
+ optional: true
+
tar-stream@2.2.0:
dependencies:
bl: 4.1.0
@@ -14200,6 +14438,12 @@ snapshots:
xmlhttprequest-ssl@2.1.2: {}
+ xss@1.0.15:
+ dependencies:
+ commander: 2.20.3
+ cssfilter: 0.0.10
+ optional: true
+
y18n@5.0.8: {}
yallist@3.1.1: {}
diff --git a/public/images/sidebar-min.png b/public/images/sidebar-min.png
new file mode 100644
index 0000000..cfa5a2a
Binary files /dev/null and b/public/images/sidebar-min.png differ
diff --git a/public/images/sidebar-min.webp b/public/images/sidebar-min.webp
new file mode 100644
index 0000000..4c5c4db
Binary files /dev/null and b/public/images/sidebar-min.webp differ