diff --git a/.gitignore b/.gitignore
index 0592ec30af8ecaafd34798974544fd4087cab856..0dea1b881f19c986ccec58126f52cbca5ec6b6d6 100755
--- a/.gitignore
+++ b/.gitignore
@@ -14,4 +14,5 @@ scripts/Pfam-A.hmm.dat
 meili_data
 #refseq_res.csv
 *.pyc
-# pfam-a-hmm.csv
\ No newline at end of file
+# pfam-a-hmm.csv
+.vscode
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1cea78644d5b0a47bb29ade11c93d05006b41ad8..ae93cc7e2b945298b8648f50631ea29e256a8bd2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -192,18 +192,20 @@ lint:
     MEILI_HOST: "http://localhost:7700"
   script:
     # - rm data/list-systems.json
+    ###### REFSEQ
+    # delete all document refseq
     - >
       df-wiki-cli
       meilisearch 
       --host ${MEILI_HOST} 
       --key ${MEILI_MASTER_KEY}
       delete-all-documents refseq
+    # update refseq index
     - >
-      df-wiki-cli 
-      content systems 
-      --dir content/3.defense-systems/ 
-      --pfam public/pfam-a-hmm.csv 
-      --output data/list-systems.json
+      df-wiki-cli meilisearch 
+      --host ${MEILI_HOST} 
+      --key ${MEILI_MASTER_KEY}
+      index-update refseq sys_id
     - >
       df-wiki-cli
       meilisearch 
@@ -211,23 +213,92 @@ lint:
       --key ${MEILI_MASTER_KEY}
       update
       --file data/refseq_res.csv
-      --document refseq
+      --document refseq 
+    # REF SEQ TAXO #
+    - >
+      df-wiki-cli 
+      content 
+      refseq-group-per-assembly
+      --input data/refseq_res.csv
+      --output data/refseqtaxo.csv
+    - >
+      df-wiki-cli
+      meilisearch 
+      --host ${MEILI_HOST} 
+      --key ${MEILI_MASTER_KEY}
+      delete-all-documents refseqtaxo
+    - >
+      df-wiki-cli meilisearch 
+      --host ${MEILI_HOST} 
+      --key ${MEILI_MASTER_KEY}
+      index-update refseqtaxo Assembly
     - >
       df-wiki-cli
       meilisearch 
       --host ${MEILI_HOST} 
       --key ${MEILI_MASTER_KEY}
       update
-      --file data/refseq_res.csv
+      --file data/refseqtaxo.csv
       --document refseqtaxo
+    # REFSEQ TAXO TYPE #
+    - >
+      df-wiki-cli 
+      content 
+      refseq-group-per-assembly-and-type      
+      --input data/refseq_res.csv
+      --output data/refseqtaxotype.csv
+    - >
+      df-wiki-cli
+      meilisearch 
+      --host ${MEILI_HOST} 
+      --key ${MEILI_MASTER_KEY}
+      delete-all-documents refseqtaxotype
+    - >
+      df-wiki-cli meilisearch 
+      --host ${MEILI_HOST} 
+      --key ${MEILI_MASTER_KEY}
+      index-update refseqtaxotype index
     - >
       df-wiki-cli
       meilisearch 
       --host ${MEILI_HOST} 
       --key ${MEILI_MASTER_KEY}
       update
-      --file data/all_predictions_statistics_clean.csv
-      --document structure
+      --file data/refseqtaxotype.csv
+      --document refseqtaxotype
+    # SANITIZED REFSEQ
+    - >
+      df-wiki-cli 
+      content 
+      refseq-sanitized-hits
+      --input data/refseq_res.csv
+      --output data/refseq-sanitized.csv
+    - >
+      df-wiki-cli
+      meilisearch 
+      --host ${MEILI_HOST} 
+      --key ${MEILI_MASTER_KEY}
+      delete-all-documents refseqsanitized
+    - >
+      df-wiki-cli meilisearch 
+      --host ${MEILI_HOST} 
+      --key ${MEILI_MASTER_KEY}
+      index-update refseqsanitized index
+    - >
+      df-wiki-cli
+      meilisearch 
+      --host ${MEILI_HOST} 
+      --key ${MEILI_MASTER_KEY}
+      update
+      --file data/refseq-sanitized.csv
+      --document refseqsanitized 
+    # SYSTEMS
+    - >
+      df-wiki-cli 
+      content systems 
+      --dir content/3.defense-systems/ 
+      --pfam public/pfam-a-hmm.csv 
+      --output data/list-systems.json
     - >
       df-wiki-cli
       meilisearch 
@@ -236,6 +307,16 @@ lint:
       update
       --file data/list-systems.json
       --document systems
+    # STRUCTURE
+    - >
+      df-wiki-cli
+      meilisearch 
+      --host ${MEILI_HOST} 
+      --key ${MEILI_MASTER_KEY}
+      update
+      --file data/all_predictions_statistics_clean.csv
+      --document structure
+    # ARTICLES
     - > 
       df-wiki-cli
       meilisearch 
diff --git a/components/AutocompleteMeiliFacets.vue b/components/AutocompleteMeiliFacets.vue
index fed95eeb55847f7041b242f50a044170ded88526..ff77c3d56e566a08afd9b9fb34424f30f6091368 100644
--- a/components/AutocompleteMeiliFacets.vue
+++ b/components/AutocompleteMeiliFacets.vue
@@ -193,6 +193,7 @@ function updateAutocompleteFocused(isFocused: boolean) {
 
 
 function emitUpdateModelValue(filters: MaybeRef<FilterItem[] | undefined>) {
+    console.log(filters)
     emit('update:modelValue', toValue(filters))
 
 }
diff --git a/components/Nav/Navbar.vue b/components/Nav/Navbar.vue
index e5a879a612b4b49c8d90009a22ec15c49ed4fc34..23ae1ca901c1815ff7f9a863b9a3a29c776d5dca 100644
--- a/components/Nav/Navbar.vue
+++ b/components/Nav/Navbar.vue
@@ -36,12 +36,11 @@ const sections = ref([
     href: runtimeConfig.public.defenseFinderWebservice,
   },
   { id: "wiki", label: "Wiki", to: '/', },
-  { id: "refseq", label: "RefSeq DB", to: '/refseq/' },
-  { id: "structure", label: "Structures DB", to: '/structure/' },
+  { id: "refseq", label: "RefSeq DB", to: '/refseq' },
+  { id: "structure", label: "Structures DB", to: '/structure' },
   { id: "help", label: "Help", to: '/help/defensefinder' },
 ]);
 
-
 function toggleDrawer() {
   emit('update:drawer', !props.drawer)
 }
@@ -63,7 +62,7 @@ function toggleDrawer() {
           {{ section.label }}
         </v-btn>
         <v-btn @click="toggleTheme" color="primary" :icon="theme.global.current.value.dark ? 'md:light_mode' : 'md:dark_mode'
-          "></v-btn>
+    "></v-btn>
       </template>
       <template v-else>
         <v-menu>
diff --git a/components/ServerDbTable.vue b/components/ServerDbTable.vue
index 306f2ee9f80a614334bc13704536e1e0b7628dae..214e3d44b757680a6f49776ef3961d3209b0914e 100644
--- a/components/ServerDbTable.vue
+++ b/components/ServerDbTable.vue
@@ -4,7 +4,7 @@ import { useCsvDownload } from "@/composables/useCsvDownload"
 import { useMeiliFilters } from "@/composables/useMeiliFilters"
 import { useSlots } from 'vue'
 import { useDisplay } from "vuetify";
-import { useThrottleFn } from '@vueuse/core'
+import { toValue, useThrottleFn } from '@vueuse/core'
 import type { FacetInputItem, FilterItem } from '@/components/AutocompleteMeiliFacets.vue'
 import { useMeiliSearch } from "#imports"
 // import { saveAs } from "file-saver";
@@ -39,7 +39,7 @@ export interface Props {
     autocompleteMeiliFacetsProps: AutocompleteMeiliFacetProps
 }
 
-
+const msFilters = defineModel('msFilters')
 const props = withDefaults(defineProps<Props>(), {
     title: '',
     columnsToDownload: undefined,
@@ -52,7 +52,9 @@ const props = withDefaults(defineProps<Props>(), {
             facets: undefined
 
         }
-    }
+    },
+    msFilters: undefined
+
 });
 const slots = useSlots()
 const sortByRef = toRef(props.sortBy)
@@ -123,20 +125,10 @@ onBeforeMount(async () => {
     emitRefreshRes()
 })
 
-const msFilterCompo = ref<FilterItem[] | undefined>(undefined)
-
-
-
 
 
 const computedF = computed(() => toValue(props.numericalFilters))
-const { arrayFilters: computedFilter } = useMeiliFilters(msFilterCompo, computedF)
-// const computedFilter = computed(() => {
-//     const toValFilters = toValue(msFilterCompo)
-//     if (toValFilters !== undefined && toValFilters.length > 0) {
-//         meiliFilterAsArray
-//     }
-// })
+const { arrayFilters: computedFilter } = useMeiliFilters(msFilters, computedF)
 
 
 watch(computedFilter, () => {
@@ -160,14 +152,14 @@ const throttleSearch = useThrottleFn(async () => {
 
 
 const lastFilterItem = computed(() => {
-    const toValFilterItems = toValue(msFilterCompo)
+    const toValFilterItems = toValue(msFilters)
     if (toValFilterItems !== undefined && Array.isArray(toValFilterItems)) {
         return toValFilterItems.slice(-1)[0]
     }
 })
 
 const isValidFilters = computed(() => {
-    const toValFilterItems = toValue(msFilterCompo)
+    const toValFilterItems = toValue(msFilters)
     if (toValFilterItems === undefined || Array.isArray(toValFilterItems) && toValFilterItems?.length === 0) {
         return true
     }
@@ -224,10 +216,7 @@ watch(search, () => {
     // emitRefreshRes()
 
 })
-// watch(msFilterCompo, () => {
-//     searchOrFilter()
 
-// })
 
 async function downloadData() {
     pendingDownloadData.value = true
@@ -280,7 +269,7 @@ function focusedOrBlur(isFocused: boolean) {
                             @update:focused="focusedOrBlur"></v-text-field>
                     </v-card-text>
                     <v-card-text>
-                        <AutocompleteMeiliFacets v-model="msFilterCompo" v-bind="props.autocompleteMeiliFacetsProps"
+                        <AutocompleteMeiliFacets v-model="msFilters" v-bind="props.autocompleteMeiliFacetsProps"
                             :is-valid-filters="isValidFilters">
                         </AutocompleteMeiliFacets>
                     </v-card-text>
diff --git a/components/content/ArticleStructure.vue b/components/content/ArticleStructure.vue
new file mode 100644
index 0000000000000000000000000000000000000000..be8525eee834d802c488da460c568c26a38f36ad
--- /dev/null
+++ b/components/content/ArticleStructure.vue
@@ -0,0 +1,153 @@
+<script setup lang="ts">
+import { toValue } from '@vueuse/core';
+import MolstarPdbePlugin from './MolstarPdbePlugin.vue';
+
+
+const { page } = useContent();
+// get the structures
+const structures = ref()
+const structureTitle = ref("Structure")
+const msIndexName = ref<string>("structure")
+const stuctureUrls = ref<string[] | undefined>(undefined)
+const headers = ref<Record<string, any>[]>([
+    { title: 'Structure', key: 'structure', sortable: false, removable: false, fixed: true, minWidth: "110px" },
+
+    { title: " System", key: "System" },
+    { title: "Gene name", key: "gene_name", removable: false },
+    { title: "Subtype", key: "subtype", removable: false },
+    { title: "Proteins in structure", key: 'proteins_in_the_prediction', sortable: false, removable: true },
+    { title: "System genes", key: "system_genes", sortable: false, removable: true },
+    { title: "Prediction type", key: "prediction_type", removable: true },
+    { title: "N genes in sys", key: "system_number_of_genes", removable: true },
+    { title: "pLDDT", key: "plddts", removable: true },
+    { title: "iptm+ptm", key: "iptm+ptm", removable: true },
+    { title: "pDockQ", key: "pDockQ", removable: true },
+])
+const groupBy = ref([
+    {
+        key: 'subtype',
+        order: 'asc',
+    },
+])
+
+
+
+onBeforeMount(() => {
+    fetchStructures()
+})
+onMounted(() => {
+    fetchStructures()
+})
+
+function namesToCollapsibleChips(names: string[], systemDir: string, file: string | null = null) {
+    if (file === null) {
+        return names.filter((it) => it !== "").map(it => ({ title: it.split("__")[1] }))
+    } else {
+        return names.filter((it) => it !== "").map(it => ({ title: it.split("__")[1], href: `/wiki/${systemDir}/${file}` }))
+    }
+}
+function pdbNameToCif(pdbPath: string) {
+    const cifPath = pdbPath.split(".").slice(0, -1).join(".")
+    return `${cifPath}.cif`
+}
+function displayStructure(item) {
+    stuctureUrls.value = item.structuresUrls
+    console.log(item)
+    structureTitle.value = `${item.subtype} - ${item.gene_name}`
+
+}
+
+
+const sanitizedStructures = computed(() => {
+    const toValStructures = toValue(structures)
+    if (toValStructures?.hits?.length > 0) {
+
+        return toValStructures.hits.map(item => {
+            return {
+                ...item, structuresUrls: [`/${item.System_name_ok}/${pdbNameToCif(item.pdb)}`, `/${item.System_name_ok}/${item.pdb}`]
+                    .map(url => {
+                        return toValue(useRefinedUrl(url).refinedUrl)
+                    })
+            }
+        })
+    }
+    return []
+
+})
+
+
+// ==================================================================================
+// ASYNC PART 
+
+async function fetchStructures() {
+    const { data, error, refresh } = await useAsyncMeiliSearch({
+        index: toValue(msIndexName),
+        query: "",
+        params: {
+            facets: ["*"],
+            filter: [`System='${toValue(page).title}'`, "completed='true'"],
+        }
+    })
+    structures.value = data.value
+    if (error.value) {
+        throw createError(`Cannot get structure for system: ${page.title}`)
+    }
+}
+
+// watch(page() => {
+
+
+//     refresh()
+// })
+console.log(structures)
+
+
+</script>
+<template>
+    <v-card flat>
+        <v-data-table :headers="headers" :items="sanitizedStructures" :group-by="groupBy">
+            <template #[`item.proteins_in_the_prediction`]="{ item }">
+                <CollapsibleChips
+                    :items="namesToCollapsibleChips(item.proteins_in_the_prediction, item.System_name_ok, item.fasta_file)">
+                </CollapsibleChips>
+            </template>
+            <template #[`item.system_genes`]="{ item }">
+                <CollapsibleChips :items="namesToCollapsibleChips(item.system_genes, item.System_name_ok)">
+                </CollapsibleChips>
+
+            </template>
+            <template v-slot:group-header="{ item, columns, toggleGroup, isGroupOpen }">
+                <tr>
+                    <td :colspan="columns.length">
+                        <VBtn :icon="isGroupOpen(item) ? '$expand' : '$next'" size="small" variant="text"
+                            @click="toggleGroup(item)"></VBtn>
+                        {{ item.value === 'na' ? 'No subtype' : item.value }}
+                    </td>
+                </tr>
+            </template>
+            <template #[`item.structure`]="{ item }">
+                <v-row justify="space-between" dense no-gutters align="center">
+                    <v-col>
+                        <v-btn size="x-small" variant="text" icon="md:visibility"
+                            @click="displayStructure(item)"></v-btn>
+                    </v-col>
+                    <v-col>
+                        <v-menu>
+                            <template v-slot:activator="{ props }">
+                                <v-btn :disabled="item.structuresUrls?.length < 1" size="x-small" variant="text"
+                                    icon="md:download" class="ml-1" v-bind="props"></v-btn>
+                            </template>
+                            <v-list>
+                                <v-list-item v-for="(url, index) in item.structuresUrls" :key="index" :value="index"
+                                    :href="url">
+                                    <v-list-item-title>{{ url.split('.').slice(-1)[0] }}</v-list-item-title>
+                                </v-list-item>
+                            </v-list>
+                        </v-menu>
+                    </v-col>
+                </v-row>
+            </template>
+        </v-data-table>
+        <PdbeMolstarPlugin v-model="stuctureUrls" v-model:title="structureTitle" />
+    </v-card>
+</template>
\ No newline at end of file
diff --git a/components/content/MolstarPdbePlugin.vue b/components/content/MolstarPdbePlugin.vue
index 82f8db51cd1b8741ccde6b7ff2e503ac872cbf74..dc6457047fd354959fdd4125ca96a5bf3ffa82d5 100644
--- a/components/content/MolstarPdbePlugin.vue
+++ b/components/content/MolstarPdbePlugin.vue
@@ -2,22 +2,19 @@
 
 import { withTrailingSlash, withLeadingSlash, joinURL } from 'ufo'
 import { useRuntimeConfig, computed } from '#imports'
-import * as d3 from "d3";
-import * as Plot from "@observablehq/plot";
-import PlotFigure from "~/components/PlotFigure";
-
 import { useDisplay } from "vuetify";
 
 export interface Props {
     height?: number
     dataUrls?: string[]
-    dataUrl?: string
+    dataUrl?: string | undefined
     uniq?: boolean
     format?: "pdb" | "cif"
 }
 
-const { mobile } = useDisplay()
-// const selectedPdb = ref('')
+
+
+const { mobile, width, height  } = useDisplay()
 const refinedDataUrls = computed(() => {
 
     function refinedUrl(url: string) {
@@ -54,10 +51,10 @@ const refinedDataUrls = computed(() => {
 const props = withDefaults(defineProps<Props>(), {
     height: 600,
     uniq: false,
-    format: 'pdb'
+    format: 'pdb',
+    dataUrl: undefined
 })
 
-const { width, height } = useDisplay()
 
 const maxWidth = ref(1500)
 
@@ -73,7 +70,6 @@ const computedHeight = computed(() => {
     return height.value - 250
 })
 
-const paeError: Ref<string | null> = ref(null)
 
 function closeStructure() {
     selectedPdb.value = null
@@ -105,7 +101,6 @@ useHead({
 })
 
 const pdbeMolstarComponent = ref(null)
-// const selectedPdb = ref("/wiki/avs/AVAST_I,AVAST_I__Avs1A,0,V-plddts_85.07081.pdb")
 const selectedPdb: Ref<string | null> = ref(null)
 const structureToDownload: Ref<string | null> = ref(null)
 const selectedPaePath = computed(() => {
@@ -151,9 +146,6 @@ function setSelectedPdbToFirst() {
     }
 }
 
-// const moleculeFormat = computed(() => {
-//     return toValue(selectedPdb)?.split(".")?.[-1]?.toLowerCase() ?? "pdb"
-// })
 const moleculeFormat: Ref<string> = ref("pdb")
 </script>
 
@@ -191,7 +183,8 @@ const moleculeFormat: Ref<string> = ref("pdb")
         <v-card flat :rounded="false">
             <v-toolbar>
                 <v-toolbar-title>Structures</v-toolbar-title>
-                <v-select v-model="selectedPdb" label="Select PDB" :items="refinedDataUrls" hide-details="auto"></v-select>
+                <v-select v-model="selectedPdb" label="Select PDB" :items="refinedDataUrls"
+                    hide-details="auto"></v-select>
                 <v-spacer></v-spacer>
 
                 <v-btn :disabled="!selectedPdb" icon="md:download" :href="structureToDownload"></v-btn>
@@ -207,15 +200,12 @@ const moleculeFormat: Ref<string> = ref("pdb")
                             class="d-flex align-center justify-center flex-wrap text-center mx-auto px-4 my-3"
                             :height="computedHeight" :width="computedWidth" style="position:relative;">
                             <pdbe-molstar ref="pdbeMolstarComponent" :custom-data-url="selectedPdb" alphafold-view
-                                sequence-panel="true" landscape="false" :custom-data-format="moleculeFormat"></pdbe-molstar>
+                                sequence-panel="true" landscape="false"
+                                :custom-data-format="moleculeFormat"></pdbe-molstar>
                         </v-sheet>
                     </v-col>
                     <v-col v-if="moleculeFormat === 'cif'" :cols="mobile ? 12 : undefined">
                         <v-img :src="selectedPaePath"></v-img>
-
-                        <!-- <PlotFigure v-if="sanitizedPaeData?.length > 0 && paeError === null" defer
-                                :options="plotPaeOptions"></PlotFigure>
-                            <v-alert v-else type="warning" variant="tonal">{{ paeError }}</v-alert> -->
                         <v-card flat color="transparent">
                             <v-card-title>Model Confidence</v-card-title>
                             <v-card-text>
diff --git a/components/content/PdbeMolstarPlugin.vue b/components/content/PdbeMolstarPlugin.vue
new file mode 100644
index 0000000000000000000000000000000000000000..6a082cdddb0f94d613f21a899ee9195133b88ae8
--- /dev/null
+++ b/components/content/PdbeMolstarPlugin.vue
@@ -0,0 +1,186 @@
+<script setup lang="ts">
+import { withTrailingSlash, withLeadingSlash, joinURL } from 'ufo'
+import { useRuntimeConfig, computed, toValue } from '#imports'
+import { useDisplay } from "vuetify";
+
+import type { MaybeRef } from "vue"
+import FoldseekDialog from '../FoldseekDialog.vue'
+
+const { mobile, width, height } = useDisplay()
+
+
+useHead({
+    link: [
+        {
+            rel: 'stylesheet',
+            href: 'https://www.ebi.ac.uk/pdbe/pdb-component-library/css/pdbe-molstar-3.1.3.css'
+        },
+    ],
+    script: [
+        // Required for IE11
+        {
+            src: "https://cdn.jsdelivr.net/npm/babel-polyfill/dist/polyfill.min.js"
+        },
+        {
+            src: "https://cdn.jsdelivr.net/npm/@webcomponents/webcomponentsjs/webcomponents-lite.js"
+        },
+        {
+            type: "text/javascript",
+            src: "https://www.ebi.ac.uk/pdbe/pdb-component-library/js/pdbe-molstar-component-3.1.3.js",
+            // tagPosition: 'bodyClose'
+        }
+    ]
+})
+
+export interface Props {
+    height?: number
+    // dataUrls?: MaybeRef<string[] | undefined>
+    format?: "pdb" | "cif"
+}
+
+const props = withDefaults(defineProps<Props>(), {
+    height: 600,
+    format: 'pdb',
+    // dataUrls: undefined
+})
+
+const dataUrls = defineModel()
+const title = defineModel('title')
+const pdbeMolstarComponent = ref(null)
+
+const dialog = ref(false)
+const moleculeFormat: Ref<string> = ref("pdb")
+const selectedPdb: Ref<string | null> = ref(null)
+const structureToDownload: Ref<string | null> = ref(null)
+
+
+const computedWidth = computed(() => {
+    // if (toValue(width) > toValue(maxWidth)) return toValue(maxWidth) / 1.5
+    return toValue(width) / 1.5
+})
+
+const computedHeight = computed(() => {
+    return height.value - 250
+})
+
+
+function viewPdb(pdbPath: string | null) {
+    if (pdbPath !== null) {
+        dialog.value = true
+        const format = toValue(pdbPath)?.split(".").slice(-1)[0]?.toLowerCase() ?? "pdb"
+        moleculeFormat.value = format
+        if (pdbeMolstarComponent.value?.viewerInstance) {
+            const viewerInstance = pdbeMolstarComponent.value.viewerInstance
+            const customData = { url: pdbPath, format: format, binary: false }
+            viewerInstance.visual.update({ customData })
+
+        }
+    }
+}
+
+
+function closeStructure() {
+    selectedPdb.value = null
+    dataUrls.value = undefined
+    dialog.value = false
+}
+watch(selectedPdb, (newSelectedPdb, prevSelectPdb) => {
+    viewPdb(newSelectedPdb)
+    structureToDownload.value = newSelectedPdb
+})
+
+watchEffect(() => {
+    const toValUrl = toValue(dataUrls)
+    if (toValUrl?.length > 0) {
+        dialog.value = true
+        selectedPdb.value = dataUrls.value[0]
+    }
+    else {
+        dialog.value = false
+    }
+})
+
+</script>
+<template>
+    <v-dialog v-model="dialog" transition="dialog-bottom-transition" fullscreen :scrim="false">
+        <v-card flat :rounded="false">
+            <v-toolbar>
+                <v-toolbar-title>{{ title }}</v-toolbar-title>
+                <v-select v-model="selectedPdb" label="Select PDB" :items="dataUrls" hide-details="auto"></v-select>
+                <v-spacer></v-spacer>
+
+                <v-btn :disabled="!selectedPdb" icon="md:download" :href="structureToDownload"></v-btn>
+                <v-btn icon @click="closeStructure">
+                    <v-icon>mdi-close</v-icon>
+                </v-btn>
+
+            </v-toolbar>
+            <v-card-text>
+                <v-row>
+                    <v-col :cols="mobile ? 12 : 'auto'">
+                        <v-sheet v-if="selectedPdb"
+                            class="d-flex align-center justify-center flex-wrap text-center mx-auto px-4 my-3"
+                            :height="computedHeight" :width="computedWidth" style="position:relative;">
+                            <pdbe-molstar ref="pdbeMolstarComponent" :custom-data-url="selectedPdb" alphafold-view
+                                sequence-panel="true" landscape="false"
+                                :custom-data-format="moleculeFormat"></pdbe-molstar>
+                        </v-sheet>
+                    </v-col>
+                    <v-col v-if="moleculeFormat === 'cif'" :cols="mobile ? 12 : undefined">
+                        <v-img :src="selectedPaePath"></v-img>
+                        <v-card flat color="transparent">
+                            <v-card-title>Model Confidence</v-card-title>
+                            <v-card-text>
+                                AlphaFold produces a per-residue model
+                                confidence score (pLDDT) between 0 and 100. Some regions below 50 pLDDT may be
+                                unstructured
+                                in isolation.
+                            </v-card-text>
+                            <v-list>
+                                <v-list-item>
+                                    <template #prepend>
+                                        <div class="legendColor mr-2" style="background-color: rgb(0, 83, 214);">
+                                            &nbsp;</div>
+                                    </template>
+                                    <v-list-item-title>
+                                        Very high (pLDDT > 90)
+                                    </v-list-item-title>
+
+                                </v-list-item>
+                                <v-list-item>
+                                    <template #prepend>
+                                        <div class="legendColor mr-2" style="background-color: rgb(101, 203, 243);">
+                                            &nbsp;</div>
+                                    </template>
+                                    <v-list-item-title>
+                                        High (90 > pLDDT > 70)
+                                    </v-list-item-title>
+
+                                </v-list-item>
+                                <v-list-item>
+                                    <template #prepend>
+                                        <div class="legendColor mr-2" style="background-color: rgb(255, 219, 19);">
+                                            &nbsp;</div>
+                                    </template>
+                                    <v-list-item-title>
+                                        Low (70 > pLDDT > 50) </v-list-item-title>
+
+                                </v-list-item>
+                                <v-list-item>
+                                    <template #prepend>
+                                        <div class="legendColor mr-2" style="background-color: rgb(255, 125, 69);">
+                                            &nbsp;</div>
+                                    </template>
+                                    <v-list-item-title>
+                                        Very low (pLDDT &lt; 50) </v-list-item-title>
+
+                                </v-list-item>
+                            </v-list>
+                        </v-card>
+                    </v-col>
+                </v-row>
+            </v-card-text>
+        </v-card>
+    </v-dialog>
+
+</template>
\ No newline at end of file
diff --git a/components/content/RefseqDb.vue b/components/content/RefseqDb.vue
index 131a9200d371a7b07ceedb11a8d3513c9a0ee21a..80b49c502f5cbed9f1f5adca52ba1ee60e5801bf 100644
--- a/components/content/RefseqDb.vue
+++ b/components/content/RefseqDb.vue
@@ -201,24 +201,26 @@ async function getAllHits(params: { index: string, params: Record<string, any>,
         selectedTaxoRank.value = "Superkingdom"
 
     }
-    if (params.index === toValue(dbName)) {
-
-        pendingAllHits.value = true
-        try {
-            const { data, error } = await useAsyncMeiliSearch({
-                ...params,
-                params: {
-                    ...params.params,
-                    'attributesToRetrieve': ['type', 'Assembly', ...toValue(availableTaxo)]
-                }
-            })
-            allHits.value = data.value
-        } finally {
-            pendingAllHits.value = false
+    // if (params.index === toValue(dbName)) {
 
-        }
+    pendingAllHits.value = true
+    try {
+        const { data, error } = await useAsyncMeiliSearch({
+            ...params,
+            index: "refseqsanitized",
+            params: {
+                ...params.params,
+
+                'attributesToRetrieve': ['type', 'Assembly', ...toValue(availableTaxo)]
+            }
+        })
+        allHits.value = data.value
+    } finally {
+        pendingAllHits.value = false
 
     }
+
+    // }
 }
 
 
@@ -287,12 +289,16 @@ const computedTaxonomyDistribution = computed(() => {
     const toValSelectedTaxoRank = toValue(selectedTaxoRank)
     const toValFacetsPerRank = toValue(msResult)?.facetDistribution?.[toValSelectedTaxoRank]
     if (toValFacetsPerRank) {
-        return Object.entries(toValFacetsPerRank).map(([key, value]) => {
-            return {
+        const listFacetsPerRank = Object.entries(toValFacetsPerRank)
+        const result = new Array(listFacetsPerRank.length);
+        for (let i = 0; listFacetsPerRank.length; i++) {
+            const [key, value] = listFacetsPerRank[i]
+            result[i] = {
                 [toValSelectedTaxoRank]: key,
                 count: value
             }
-        }).sort()
+        }
+        return result.sort()
     } else { return [] }
 
 })
@@ -363,8 +369,8 @@ const binPlotOptions = computed(() => {
         marginBottom: 200,
         padding: 0,
         grid: true,
+        aspectRatio: true,
         x: { tickRotate: 90, label: "Systems", domain: toValue(sortedCellDomain) },
-        // y: { tickFormat: 's' },
         color: { scheme: "plasma", legend: true, label: `Proportion per ${selectedTaxoRank.value}`, domain: [0, 100] },
     }
 })
@@ -375,12 +381,18 @@ const binPlotGroup = computed(() => {
         {
             label: (d) => d.fill,
             fill: {
+                /**
+                 * 
+                 * @param I is the list of element index that are par of the same group (cell)
+                 * @param X is the list of all elements 
+                 */
                 reduceIndex: function (I, X) {
                     const toValTaxonomyFacet = toValue(taxonomyFacet)
                     if (toValTaxonomyFacet !== undefined) {
                         const clade = X[I[0]][selectedTaxoRank.value]
                         const system = X[I[0]].type
-                        // Get the list of item for this group
+                        // Get the list of all the items for this group (same cell)
+                        // and group them per type and assembly
                         const itemsPerGroup = d3.rollup(I.map(index => {
                             return X[index]
                         }), D => D.length, d => d.type, d => d.Assembly)
@@ -408,22 +420,20 @@ const binPlotGroup = computed(() => {
 
 const binPlotDataOptions = computed(() => {
     const toValueAllHits = toValue(allHits)
+    const toValBinPlotGroup = toValue(binPlotGroup)
     const data = toValueAllHits?.hits ?? []
+    const plotCellMark = Plot.cell(data, toValBinPlotGroup)
     return toValueAllHits?.hits?.length > 0 ? {
         ...binPlotOptions.value,
         width: width.value,
-        title: "Proportion of genomes with defense system X for a given clade",
+        title: `Proportion of genomes with defense system X per ${selectedTaxoRank.value} taxonomic rank`,
         color: {
             ...binPlotOptions.value.color,
             type: scaleType.value,
             tickFormat: '~s',
             ticks: scaleType.value === 'symlog' ? 3 : 5,
         },
-        marks: [
-            Plot.cell(data,
-                toValue(binPlotGroup)
-            ),
-        ],
+        marks: [plotCellMark],
     } : null
 })
 
diff --git a/components/content/StructureDb.vue b/components/content/StructureDb.vue
index 59db42f08ca3a2d213e3a977007d718603d36f81..380ce2bc38afb1e874ffa773d63cc951a3dd0c12 100644
--- a/components/content/StructureDb.vue
+++ b/components/content/StructureDb.vue
@@ -6,13 +6,12 @@ import { ServerDbTable } from "#components"
 
 import { withQuery, joinURL, withTrailingSlash } from 'ufo'
 
-
 interface Item {
-
     Foldseek_name: string
     System_name_ok: string
-
 }
+
+
 const sortBy: Ref<SortItem[]> = ref([{ key: 'System', order: "asc" }])
 const itemValue = ref("id");
 const dbName = ref("structure")
@@ -163,49 +162,60 @@ const { refinedUrl: downloadAllCifUrl } = useRefinedUrl("/df-all-cifs.tar.gz")
         :autocomplete-meili-facets-props="computedAutocompleteMeiliFacetsProps"
         :numerical-filters="toRef(numericalFilters)">
         <template #numerical-filters="{ search }">
-            <v-list>
-                <v-list-item>
-                    <v-list-item-title class="text-subtitle-1 text-medium-emphasis">
-                        pLDDT
-                    </v-list-item-title>
-                    <v-row>
-                        <v-col class="pt-8 pl-8" :lg="8">
-                            <v-range-slider v-model="plddtsRange" strict density="compact" hide-details="auto"
+            <v-row>
+                <v-col cols="12" md="4">
+                    <v-card flat variant="tonal">
+                        <v-card-item class="mb-4">
+                            <v-card-title> pLDDT
+                            </v-card-title>
+                        </v-card-item>
+                        <v-card-text class="pr-0">
+                            <v-range-slider v-model="plddtsRange" strict density="compact" hide-details="auto" class=""
                                 step="0.5" :min="0" :max="100" thumb-label="always" @update:modelValue="search()">
                                 <template #append>
-                                    <v-btn variant="text" icon="md:restart_alt" @click="plddtsReset()"></v-btn>
+                                    <v-btn variant="text" density="compact" icon="md:restart_alt"
+                                        @click="plddtsReset()"></v-btn>
                                 </template>
 
                             </v-range-slider>
-                        </v-col></v-row>
-                </v-list-item>
-                <v-list-item>
-                    <v-list-item-title class="text-subtitle-1 text-medium-emphasis">
-                        iptm+ptm
-                    </v-list-item-title>
-                    <v-row>
-                        <v-col class="pt-8 pl-8" :lg="8">
+                        </v-card-text>
+                    </v-card>
+                </v-col>
+                <v-col cols="12" md="4">
+                    <v-card flat variant="tonal">
+                        <v-card-item class="mb-4">
+                            <v-card-title> iptm+ptm
+                            </v-card-title>
+                        </v-card-item>
+                        <v-card-text class="pr-0">
                             <v-range-slider v-model="iptmRange" strict density="compact" hide-details="auto" step="0.1"
                                 :min="0" :max="1" thumb-label="always" @update:modelValue="search()">
                                 <template #append>
-                                    <v-btn variant="text" icon="md:restart_alt" @click="iptmReset()"></v-btn>
+                                    <v-btn variant="text" density="compact" icon="md:restart_alt"
+                                        @click="iptmReset()"></v-btn>
                                 </template>
                             </v-range-slider>
-                        </v-col></v-row>
-                </v-list-item>
-                <v-list-item>
-                    <v-list-item-title class="text-subtitle-1 text-medium-emphasis">pDockQ</v-list-item-title>
-                    <v-row>
-                        <v-col class="pt-8 pl-8" :lg="8">
+                        </v-card-text></v-card>
+                </v-col>
+
+                <v-col cols="12" md="4">
+                    <v-card flat variant="tonal">
+                        <v-card-item class="mb-4">
+                            <v-card-title> pDockQ
+                            </v-card-title>
+                        </v-card-item>
+                        <v-card-text class="pr-0">
                             <v-range-slider v-model="pdockqRange" density="compact" strict hide-details="auto"
                                 step="0.1" :min="0" :max="1" thumb-label="always" @update:modelValue="search()">
                                 <template #append>
-                                    <v-btn variant="text" icon="md:restart_alt" @click="pdockqReset()"></v-btn>
+                                    <v-btn variant="text" density="compact" icon="md:restart_alt"
+                                        @click="pdockqReset()"></v-btn>
                                 </template>
                             </v-range-slider>
-                        </v-col></v-row>
-                </v-list-item>
-            </v-list>
+                        </v-card-text>
+                    </v-card>
+                </v-col>
+            </v-row>
         </template>
         <template #[`item.Foldseek_name`]="{ item }">
             <FoldseekDialog v-if="item.Foldseek_name !== 'na'" :foldseek-path="toFolseekUrl(item)"></FoldseekDialog>
@@ -227,16 +237,6 @@ const { refinedUrl: downloadAllCifUrl } = useRefinedUrl("/df-all-cifs.tar.gz")
                     uniq format="cif">
                 </MolstarPdbePlugin>
             </v-row>
-            <!-- <v-row no-gutters align="center">
-                <MolstarPdbePlugin v-if="item?.pdb && item.pdb !== 'na'"
-                    :data-urls="[`/${item.System_name_ok}/${item.pdb}`]" uniq format="pdb">
-                </MolstarPdbePlugin>
-            </v-row> -->
-
-
-
-            <!-- <v-icon v-else color="warning" icon="md:dangerous"></v-icon> -->
-
         </template>
         <template #[`item.completed`]="{ item }">
             <v-icon v-if="item.completed" color="success" icon="md:check"></v-icon>
diff --git a/composables/useRefinedUrl.ts b/composables/useRefinedUrl.ts
index 9ac7397ff4f79894334609e1ab4674ffbef902bd..7120de550f55cb6b1de082afb6d3e3e058e8a9ed 100644
--- a/composables/useRefinedUrl.ts
+++ b/composables/useRefinedUrl.ts
@@ -1,19 +1,18 @@
-import { withTrailingSlash, withLeadingSlash, joinURL } from "ufo";
+import { withoutTrailingSlash, withLeadingSlash, joinURL } from "ufo";
 
-
-export function useRefinedUrl(url: string | Ref<string>) {
+export function useRefinedUrl(url: MaybeRef<string>) {
     const refinedUrl = computed(() => {
         const sanitzedUrl = toValue(url)
 
         if (sanitzedUrl.startsWith("/") && !sanitzedUrl.startsWith("//")) {
             const _base = withLeadingSlash(
-                withTrailingSlash(useRuntimeConfig().app.baseURL)
+                withoutTrailingSlash(useRuntimeConfig().app.baseURL)
             );
             if (_base !== "/" && !sanitzedUrl.startsWith(_base)) {
                 return joinURL(_base, sanitzedUrl);
             }
         }
-        return toValue(url);
+        return sanitzedUrl;
     });
     return { refinedUrl }
 }
\ No newline at end of file
diff --git a/content/2.general-concepts/3.defense-systems-effectors.md b/content/2.general-concepts/3.defense-systems-effectors.md
index 461d46fecee0aef8ecd5ff66ac4f81fc6932d795..fa4a8904c4ea687a877502e92a4caaf6317d4863 100644
--- a/content/2.general-concepts/3.defense-systems-effectors.md
+++ b/content/2.general-concepts/3.defense-systems-effectors.md
@@ -11,7 +11,7 @@ contributors:
 
 Most of the anti-phage defense systems of bacteria can be described as a combination of two main components. 
 First, a sensing component that detects phage infection to trigger the immune response 
-(see [defense-systems_trigger](/general-concepts/defense-systems_trigger/)). 
+(see [defense-systems_trigger](/general-concepts/defense-systems_trigger)). 
 Second, an effector component that mediates the immune response following the detection of phage infection.
 
 The effector components of anti-phage systems are very diverse, and can be arbitrarily distributed in broad categories :ref{doi=10.1038/s41579-023-00934-x} :
diff --git a/content/3.defense-systems/avs.md b/content/3.defense-systems/avs.md
index c56bd7711cdfa1adc3000c135aefa544a773361a..8e224bc2ef668725f0cf8ff18e944fe94e1fb4d3 100644
--- a/content/3.defense-systems/avs.md
+++ b/content/3.defense-systems/avs.md
@@ -74,64 +74,11 @@ The system was detected in 366 different species.
 Proportion of genome encoding the Avs system for the 14 phyla with more than 50 genomes in the RefSeq database.
 
 ## Structure
-### AVAST_I
-##### Example 1
 
-::molstar-pdbe-plugin
----
-height: 700
-dataUrls:
-   - /avs/AVAST_I.AVAST_I__Avs1A.0.V.cif
-   - /avs/AVAST_I.AVAST_I__Avs1C.0.V.cif
-   - /avs/AVAST_I.AVAST_I__Avs1B.0.V.cif
 
----
+::article-structure
 ::
-### AVAST_II
-##### Example 1
-
-::molstar-pdbe-plugin
----
-height: 700
-dataUrls:
-   - /avs/AVAST_II__Avs2A.cif
 
----
-::
-### AVAST_III
-##### Example 1
-
-::molstar-pdbe-plugin
----
-height: 700
-dataUrls:
-   - /avs/AVAST_III.AVAST_III__Avs3B.0.V.cif
-   - /avs/AVAST_III.AVAST_III__Avs3A.0.V.cif
-
----
-::
-### AVAST_IV
-##### Example 1
-
-::molstar-pdbe-plugin
----
-height: 700
-dataUrls:
-   - /avs/AVAST_IV__Avs4A.cif
-
----
-::
-### AVAST_V
-##### Example 1
-
-::molstar-pdbe-plugin
----
-height: 700
-dataUrls:
-   - /avs/AVAST_V__Avs5A.cif
-
----
-::
 
 ## Experimental validation
 
diff --git a/data/refseq_res.csv b/data/refseq_res.csv
index becb696192d60bc89a646284da9d6d86ba120069..0a1eb9240b45c61ab360341a90d140ed28017fc9 100644
--- a/data/refseq_res.csv
+++ b/data/refseq_res.csv
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:1a7d382a7f767718dc48aa49ae3dd9b0159fdffd96e48946c7a167bcbc516deb
-size 68772089
+oid sha256:cdd04a43d107190f9a80e39be9684f6a130908a45de88b65e31b821393e3b9be
+size 68458331
diff --git a/data/refseq_res_sm.csv b/data/refseq_res_sm.csv
deleted file mode 100644
index 0fc07a648f019b58b75e3834c9417aee56f6e363..0000000000000000000000000000000000000000
--- a/data/refseq_res_sm.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a9d3cf3c0649a0a3158a686e1f4c79b8978faf4ba5e14d365bf8349553c25a55
-size 2254987
diff --git a/docker-compose.yml b/docker-compose.yml
index 1d7e174e51d23ed142a117a8847c8a9ece08d9bc..0cedb3670df391be58a329e1d72b5524cde783c0 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -5,7 +5,7 @@ services:
       context: .
       target: dev
       args:
-        BASE_URL: /wiki/
+        BASE_URL: /wiki
         MEILI_HOST: http://localhost:7700
         MEILI_API_KEY: f9cc073016cbb392365aae86517878cb3f3408bb85c1fafd06e27f73ccb35e3d
         HOST_URL: http://localhost:8082
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 7e0d8d3e8364702641fd3ca8dd94433daa0d3b79..a38f2c06e286a9b000bd4f9414dc87f9a34a1bde 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -1,7 +1,7 @@
 import { md3 } from 'vuetify/blueprints'
 // https://v3.nuxtjs.org/api/configuration/nuxt.config
 export default defineNuxtConfig({
-  ssr: true,
+  // ssr: false,
   modules: [
     '@unocss/nuxt',
     '@nuxt/content',
@@ -20,11 +20,12 @@ export default defineNuxtConfig({
           "data-domaim": "defense-finder.dev.pasteur.cloud",
           src: "https://plausible.pasteur.cloud/js/script.js"
         }
-
-
       ]
     }
   },
+  router: {
+    strict: true
+  },
   site: {
     url: 'https://defensefinder.mdmlab.fr',
     name: 'DefenseFinder webservice and knowledge base',
diff --git a/package-lock.json b/package-lock.json
index 5e235c3d99a4202bc7c085e325f48bf0cbdf0a9f..92be4468f20ad15133c3d8512e710a16ec84c32d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -31,7 +31,7 @@
         "@unocss/preset-icons": "^0.58.3",
         "@vueuse/core": "^10.7.1",
         "@vueuse/nuxt": "^10.7.1",
-        "nuxt": "^3.9.1",
+        "nuxt": "^3.11.1",
         "nuxt-meilisearch": "^1.1.0",
         "vuetify-nuxt-module": "^0.9.0"
       }
@@ -1136,86 +1136,6 @@
         "@css-inline/css-inline-win32-x64-msvc": "0.13.0"
       }
     },
-    "node_modules/@css-inline/css-inline-darwin-arm64": {
-      "version": "0.13.0",
-      "resolved": "https://registry.npmjs.org/@css-inline/css-inline-darwin-arm64/-/css-inline-darwin-arm64-0.13.0.tgz",
-      "integrity": "sha512-A4QvlZdhp8v+3IHKF/UftRf5GrAVUMEHCGRuk2Dx594xn/UR4ieh+B70aMm5rfONh2hv5mlR9UcoYAkVpEQ99g==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@css-inline/css-inline-darwin-x64": {
-      "version": "0.13.0",
-      "resolved": "https://registry.npmjs.org/@css-inline/css-inline-darwin-x64/-/css-inline-darwin-x64-0.13.0.tgz",
-      "integrity": "sha512-px9z4ypzeECMyBEtlrNzTMpA1tnw5MmMIiMkBRhb8UGRr2pOBZY3yd/eEIxWzVVSPt0aIjVDwUOJ3+d0Z+BskA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@css-inline/css-inline-linux-arm-gnueabihf": {
-      "version": "0.13.0",
-      "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-arm-gnueabihf/-/css-inline-linux-arm-gnueabihf-0.13.0.tgz",
-      "integrity": "sha512-+uo0coLQNgk/AKeOB8mXSRd8VIlUg38zRSB9B9q0ior9oBCDPtEdn1HuCSvWxHoOSJ8QNNk+uwbz0zW4CETzFw==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@css-inline/css-inline-linux-arm64-gnu": {
-      "version": "0.13.0",
-      "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-arm64-gnu/-/css-inline-linux-arm64-gnu-0.13.0.tgz",
-      "integrity": "sha512-GVrsFbY5l0Hxyzxsm5S5JPGObvHm/Ybf2wZgnWBsQigxqGtr1FL535HaTwEnq6aHOpH3f08gR5Vx33gB7jG4pw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@css-inline/css-inline-linux-arm64-musl": {
-      "version": "0.13.0",
-      "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-arm64-musl/-/css-inline-linux-arm64-musl-0.13.0.tgz",
-      "integrity": "sha512-V5h5+CRnE01EgoafI/kyjEcM8zvN+sKLnp17Aq9LqQfsut7mO3i72d8g/xeVC37DCLoGQFLvDCzbze2NbF2dIQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
     "node_modules/@css-inline/css-inline-linux-x64-gnu": {
       "version": "0.13.0",
       "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-x64-gnu/-/css-inline-linux-x64-gnu-0.13.0.tgz",
@@ -1257,26 +1177,10 @@
         "node": ">= 10"
       }
     },
-    "node_modules/@css-inline/css-inline-win32-x64-msvc": {
-      "version": "0.13.0",
-      "resolved": "https://registry.npmjs.org/@css-inline/css-inline-win32-x64-msvc/-/css-inline-win32-x64-msvc-0.13.0.tgz",
-      "integrity": "sha512-6VFhFSXp4FH+NzJhLd6fFi7jKCPvIRW+vq0tV+CPuiQ3zPzMfC9nIk8sB/1VJR8EcvBAjMV53YnacuDjRFRT9g==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
     "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz",
-      "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
+      "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
       "cpu": [
         "ppc64"
       ],
@@ -1290,9 +1194,9 @@
       }
     },
     "node_modules/@esbuild/android-arm": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz",
-      "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
+      "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
       "cpu": [
         "arm"
       ],
@@ -1306,9 +1210,9 @@
       }
     },
     "node_modules/@esbuild/android-arm64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz",
-      "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
+      "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
       "cpu": [
         "arm64"
       ],
@@ -1322,9 +1226,9 @@
       }
     },
     "node_modules/@esbuild/android-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz",
-      "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
+      "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
       "cpu": [
         "x64"
       ],
@@ -1338,9 +1242,9 @@
       }
     },
     "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz",
-      "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
+      "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
       "cpu": [
         "arm64"
       ],
@@ -1354,9 +1258,9 @@
       }
     },
     "node_modules/@esbuild/darwin-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz",
-      "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
+      "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
       "cpu": [
         "x64"
       ],
@@ -1370,9 +1274,9 @@
       }
     },
     "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz",
-      "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
+      "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
       "cpu": [
         "arm64"
       ],
@@ -1386,9 +1290,9 @@
       }
     },
     "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz",
-      "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
+      "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
       "cpu": [
         "x64"
       ],
@@ -1402,9 +1306,9 @@
       }
     },
     "node_modules/@esbuild/linux-arm": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz",
-      "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
+      "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
       "cpu": [
         "arm"
       ],
@@ -1418,9 +1322,9 @@
       }
     },
     "node_modules/@esbuild/linux-arm64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz",
-      "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
+      "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
       "cpu": [
         "arm64"
       ],
@@ -1434,9 +1338,9 @@
       }
     },
     "node_modules/@esbuild/linux-ia32": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz",
-      "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
+      "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
       "cpu": [
         "ia32"
       ],
@@ -1450,9 +1354,9 @@
       }
     },
     "node_modules/@esbuild/linux-loong64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz",
-      "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
+      "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
       "cpu": [
         "loong64"
       ],
@@ -1466,9 +1370,9 @@
       }
     },
     "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz",
-      "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
+      "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
       "cpu": [
         "mips64el"
       ],
@@ -1482,9 +1386,9 @@
       }
     },
     "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz",
-      "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
+      "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
       "cpu": [
         "ppc64"
       ],
@@ -1498,9 +1402,9 @@
       }
     },
     "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz",
-      "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
+      "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
       "cpu": [
         "riscv64"
       ],
@@ -1514,9 +1418,9 @@
       }
     },
     "node_modules/@esbuild/linux-s390x": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz",
-      "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
+      "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
       "cpu": [
         "s390x"
       ],
@@ -1530,9 +1434,9 @@
       }
     },
     "node_modules/@esbuild/linux-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz",
-      "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
+      "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
       "cpu": [
         "x64"
       ],
@@ -1546,9 +1450,9 @@
       }
     },
     "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz",
-      "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
+      "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
       "cpu": [
         "x64"
       ],
@@ -1562,9 +1466,9 @@
       }
     },
     "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz",
-      "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
+      "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
       "cpu": [
         "x64"
       ],
@@ -1578,9 +1482,9 @@
       }
     },
     "node_modules/@esbuild/sunos-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz",
-      "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
+      "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
       "cpu": [
         "x64"
       ],
@@ -1594,9 +1498,9 @@
       }
     },
     "node_modules/@esbuild/win32-arm64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz",
-      "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
+      "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
       "cpu": [
         "arm64"
       ],
@@ -1610,9 +1514,9 @@
       }
     },
     "node_modules/@esbuild/win32-ia32": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz",
-      "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
+      "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
       "cpu": [
         "ia32"
       ],
@@ -1626,9 +1530,9 @@
       }
     },
     "node_modules/@esbuild/win32-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz",
-      "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
+      "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
       "cpu": [
         "x64"
       ],
@@ -2251,9 +2155,9 @@
       }
     },
     "node_modules/@mapbox/node-pre-gyp/node_modules/detect-libc": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
-      "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
+      "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
       "dev": true,
       "engines": {
         "node": ">=8"
@@ -2788,12 +2692,12 @@
       }
     },
     "node_modules/@nuxt/kit": {
-      "version": "3.10.3",
-      "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.10.3.tgz",
-      "integrity": "sha512-PUjYB9Mvx0qD9H1QZBwwtY4fLlCLET+Mm9BVqUOtXCaGoXd6u6BE4e/dGFPk2UEKkIcDGrUMSbqkHYvsEuK9NQ==",
+      "version": "3.11.1",
+      "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.11.1.tgz",
+      "integrity": "sha512-8VVlhaY4N+wipgHmSXP+gLM+esms9TEBz13I/J++PbOUJuf2cJlUUTyqMoRVL0xudVKK/8fJgSndRkyidy1m2w==",
       "dependencies": {
-        "@nuxt/schema": "3.10.3",
-        "c12": "^1.9.0",
+        "@nuxt/schema": "3.11.1",
+        "c12": "^1.10.0",
         "consola": "^3.2.3",
         "defu": "^6.1.4",
         "globby": "^14.0.1",
@@ -2801,12 +2705,12 @@
         "ignore": "^5.3.1",
         "jiti": "^1.21.0",
         "knitwork": "^1.0.0",
-        "mlly": "^1.6.0",
+        "mlly": "^1.6.1",
         "pathe": "^1.1.2",
         "pkg-types": "^1.0.3",
         "scule": "^1.3.0",
         "semver": "^7.6.0",
-        "ufo": "^1.4.0",
+        "ufo": "^1.5.2",
         "unctx": "^2.3.1",
         "unimport": "^3.7.1",
         "untyped": "^1.4.2"
@@ -2816,9 +2720,9 @@
       }
     },
     "node_modules/@nuxt/schema": {
-      "version": "3.10.3",
-      "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.10.3.tgz",
-      "integrity": "sha512-a4cYbeskEVBPazgAhvUGkL/j7ho/iPWMK3vCEm6dRMjSqHVEITRosrj0aMfLbRrDpTrMjlRs0ZitxiaUfE/p5Q==",
+      "version": "3.11.1",
+      "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.11.1.tgz",
+      "integrity": "sha512-XyGlJsf3DtkouBCvBHlvjz+xvN4vza3W7pY3YBNMnktxlMQtfFiF3aB3A2NGLmBnJPqD3oY0j7lljraELb5hkg==",
       "dependencies": {
         "@nuxt/ui-templates": "^1.3.1",
         "consola": "^3.2.3",
@@ -2828,7 +2732,7 @@
         "pkg-types": "^1.0.3",
         "scule": "^1.3.0",
         "std-env": "^3.7.0",
-        "ufo": "^1.4.0",
+        "ufo": "^1.5.2",
         "unimport": "^3.7.1",
         "untyped": "^1.4.2"
       },
@@ -2870,43 +2774,43 @@
       "integrity": "sha512-5gc02Pu1HycOVUWJ8aYsWeeXcSTPe8iX8+KIrhyEtEoOSkY0eMBuo0ssljB8wALuEmepv31DlYe5gpiRwkjESA=="
     },
     "node_modules/@nuxt/vite-builder": {
-      "version": "3.10.3",
-      "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.10.3.tgz",
-      "integrity": "sha512-BqkbrYkEk1AVUJleofbqTRV+ltf2p1CDjGDK78zENPCgrSABlj4F4oK8rze8vmRY5qoH7kMZxgMa2dXVXCp6OA==",
+      "version": "3.11.1",
+      "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.11.1.tgz",
+      "integrity": "sha512-8DVK2Jb9xgfnvTfKr5mL3UDdAIrd3q3F4EmoVsXVKJe8NTt9LW38QdGwGViIQm9wzLDDEo0mgWF+n7WoGEH0xQ==",
       "dev": true,
       "dependencies": {
-        "@nuxt/kit": "3.10.3",
+        "@nuxt/kit": "3.11.1",
         "@rollup/plugin-replace": "^5.0.5",
         "@vitejs/plugin-vue": "^5.0.4",
         "@vitejs/plugin-vue-jsx": "^3.1.0",
-        "autoprefixer": "^10.4.17",
+        "autoprefixer": "^10.4.18",
         "clear": "^0.1.0",
         "consola": "^3.2.3",
-        "cssnano": "^6.0.3",
+        "cssnano": "^6.1.0",
         "defu": "^6.1.4",
-        "esbuild": "^0.20.1",
+        "esbuild": "^0.20.2",
         "escape-string-regexp": "^5.0.0",
         "estree-walker": "^3.0.3",
         "externality": "^1.0.2",
         "fs-extra": "^11.2.0",
         "get-port-please": "^3.1.2",
-        "h3": "^1.10.2",
+        "h3": "^1.11.1",
         "knitwork": "^1.0.0",
-        "magic-string": "^0.30.7",
-        "mlly": "^1.6.0",
+        "magic-string": "^0.30.8",
+        "mlly": "^1.6.1",
         "ohash": "^1.1.3",
         "pathe": "^1.1.2",
         "perfect-debounce": "^1.0.0",
         "pkg-types": "^1.0.3",
-        "postcss": "^8.4.35",
+        "postcss": "^8.4.36",
         "rollup-plugin-visualizer": "^5.12.0",
         "std-env": "^3.7.0",
         "strip-literal": "^2.0.0",
-        "ufo": "^1.4.0",
+        "ufo": "^1.5.2",
         "unenv": "^1.9.0",
-        "unplugin": "^1.7.1",
-        "vite": "^5.1.4",
-        "vite-node": "^1.3.1",
+        "unplugin": "^1.10.0",
+        "vite": "^5.1.6",
+        "vite-node": "^1.4.0",
         "vite-plugin-checker": "^0.6.4",
         "vue-bundle-renderer": "^2.0.0"
       },
@@ -3091,17 +2995,17 @@
         "@parcel/watcher-win32-x64": "2.4.1"
       }
     },
-    "node_modules/@parcel/watcher-android-arm64": {
+    "node_modules/@parcel/watcher-linux-x64-glibc": {
       "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz",
-      "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz",
+      "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==",
       "cpu": [
-        "arm64"
+        "x64"
       ],
       "dev": true,
       "optional": true,
       "os": [
-        "android"
+        "linux"
       ],
       "engines": {
         "node": ">= 10.0.0"
@@ -3111,17 +3015,17 @@
         "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/@parcel/watcher-darwin-arm64": {
+    "node_modules/@parcel/watcher-linux-x64-musl": {
       "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz",
-      "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz",
+      "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==",
       "cpu": [
-        "arm64"
+        "x64"
       ],
       "dev": true,
       "optional": true,
       "os": [
-        "darwin"
+        "linux"
       ],
       "engines": {
         "node": ">= 10.0.0"
@@ -3131,18 +3035,19 @@
         "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/@parcel/watcher-darwin-x64": {
+    "node_modules/@parcel/watcher-wasm": {
       "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz",
-      "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==",
-      "cpu": [
-        "x64"
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.4.1.tgz",
+      "integrity": "sha512-/ZR0RxqxU/xxDGzbzosMjh4W6NdYFMqq2nvo2b8SLi7rsl/4jkL8S5stIikorNkdR50oVDvqb/3JT05WM+CRRA==",
+      "bundleDependencies": [
+        "napi-wasm"
       ],
       "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
+      "dependencies": {
+        "is-glob": "^4.0.3",
+        "micromatch": "^4.0.5",
+        "napi-wasm": "^1.1.0"
+      },
       "engines": {
         "node": ">= 10.0.0"
       },
@@ -3151,72 +3056,80 @@
         "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/@parcel/watcher-freebsd-x64": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz",
-      "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": {
+      "version": "1.1.0",
       "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
+      "inBundle": true,
+      "license": "MIT"
+    },
+    "node_modules/@pinia/nuxt": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/@pinia/nuxt/-/nuxt-0.5.1.tgz",
+      "integrity": "sha512-6wT6TqY81n+7/x3Yhf0yfaJVKkZU42AGqOR0T3+UvChcaOJhSma7OWPN64v+ptYlznat+fS1VTwNAcbi2lzHnw==",
+      "dependencies": {
+        "@nuxt/kit": "^3.5.0",
+        "pinia": ">=2.1.7"
       },
       "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+        "url": "https://github.com/sponsors/posva"
       }
     },
-    "node_modules/@parcel/watcher-linux-arm-glibc": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz",
-      "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==",
-      "cpu": [
-        "arm"
-      ],
+    "node_modules/@pkgjs/parseargs": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
       "dev": true,
       "optional": true,
-      "os": [
-        "linux"
-      ],
       "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+        "node": ">=14"
       }
     },
-    "node_modules/@parcel/watcher-linux-arm64-glibc": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz",
-      "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@polka/url": {
+      "version": "1.0.0-next.25",
+      "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz",
+      "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==",
+      "dev": true
+    },
+    "node_modules/@replit/codemirror-indentation-markers": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@replit/codemirror-indentation-markers/-/codemirror-indentation-markers-6.5.0.tgz",
+      "integrity": "sha512-5RgeuQ6erfROi1EVI2X7G4UR+KByjb07jhYMynvpvlrV22JlnARifmKMGEUKy0pKcxBNfwbFqoUlTYHPgyZNlg==",
+      "dev": true,
+      "peerDependencies": {
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.0.0"
+      }
+    },
+    "node_modules/@resvg/resvg-js": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.0.tgz",
+      "integrity": "sha512-Tf3YpbBKcQn991KKcw/vg7vZf98v01seSv6CVxZBbRkL/xyjnoYB6KgrFL6zskT1A4dWC/vg77KyNOW+ePaNlA==",
       "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
       "engines": {
-        "node": ">= 10.0.0"
+        "node": ">= 10"
       },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+      "optionalDependencies": {
+        "@resvg/resvg-js-android-arm-eabi": "2.6.0",
+        "@resvg/resvg-js-android-arm64": "2.6.0",
+        "@resvg/resvg-js-darwin-arm64": "2.6.0",
+        "@resvg/resvg-js-darwin-x64": "2.6.0",
+        "@resvg/resvg-js-linux-arm-gnueabihf": "2.6.0",
+        "@resvg/resvg-js-linux-arm64-gnu": "2.6.0",
+        "@resvg/resvg-js-linux-arm64-musl": "2.6.0",
+        "@resvg/resvg-js-linux-x64-gnu": "2.6.0",
+        "@resvg/resvg-js-linux-x64-musl": "2.6.0",
+        "@resvg/resvg-js-win32-arm64-msvc": "2.6.0",
+        "@resvg/resvg-js-win32-ia32-msvc": "2.6.0",
+        "@resvg/resvg-js-win32-x64-msvc": "2.6.0"
       }
     },
-    "node_modules/@parcel/watcher-linux-arm64-musl": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz",
-      "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==",
+    "node_modules/@resvg/resvg-js-linux-x64-gnu": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.0.tgz",
+      "integrity": "sha512-n3zC8DWsvxC1AwxpKFclIPapDFibs5XdIRoV/mcIlxlh0vseW1F49b97F33BtJQRmlntsqqN6GMMqx8byB7B+Q==",
       "cpu": [
-        "arm64"
+        "x64"
       ],
       "dev": true,
       "optional": true,
@@ -3224,17 +3137,13 @@
         "linux"
       ],
       "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+        "node": ">= 10"
       }
     },
-    "node_modules/@parcel/watcher-linux-x64-glibc": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz",
-      "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==",
+    "node_modules/@resvg/resvg-js-linux-x64-musl": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.0.tgz",
+      "integrity": "sha512-n4tasK1HOlAxdTEROgYA1aCfsEKk0UOFDNd/AQTTZlTmCbHKXPq+O8npaaKlwXquxlVK8vrkcWbksbiGqbCAcw==",
       "cpu": [
         "x64"
       ],
@@ -3243,371 +3152,6 @@
       "os": [
         "linux"
       ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-linux-x64-musl": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz",
-      "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-wasm": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.4.1.tgz",
-      "integrity": "sha512-/ZR0RxqxU/xxDGzbzosMjh4W6NdYFMqq2nvo2b8SLi7rsl/4jkL8S5stIikorNkdR50oVDvqb/3JT05WM+CRRA==",
-      "bundleDependencies": [
-        "napi-wasm"
-      ],
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.3",
-        "micromatch": "^4.0.5",
-        "napi-wasm": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": {
-      "version": "1.1.0",
-      "dev": true,
-      "inBundle": true,
-      "license": "MIT"
-    },
-    "node_modules/@parcel/watcher-win32-arm64": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz",
-      "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-win32-ia32": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz",
-      "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-win32-x64": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz",
-      "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@pinia/nuxt": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/@pinia/nuxt/-/nuxt-0.5.1.tgz",
-      "integrity": "sha512-6wT6TqY81n+7/x3Yhf0yfaJVKkZU42AGqOR0T3+UvChcaOJhSma7OWPN64v+ptYlznat+fS1VTwNAcbi2lzHnw==",
-      "dependencies": {
-        "@nuxt/kit": "^3.5.0",
-        "pinia": ">=2.1.7"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/posva"
-      }
-    },
-    "node_modules/@pkgjs/parseargs": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
-      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
-      "dev": true,
-      "optional": true,
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@polka/url": {
-      "version": "1.0.0-next.25",
-      "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz",
-      "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==",
-      "dev": true
-    },
-    "node_modules/@replit/codemirror-indentation-markers": {
-      "version": "6.5.0",
-      "resolved": "https://registry.npmjs.org/@replit/codemirror-indentation-markers/-/codemirror-indentation-markers-6.5.0.tgz",
-      "integrity": "sha512-5RgeuQ6erfROi1EVI2X7G4UR+KByjb07jhYMynvpvlrV22JlnARifmKMGEUKy0pKcxBNfwbFqoUlTYHPgyZNlg==",
-      "dev": true,
-      "peerDependencies": {
-        "@codemirror/language": "^6.0.0",
-        "@codemirror/state": "^6.0.0",
-        "@codemirror/view": "^6.0.0"
-      }
-    },
-    "node_modules/@resvg/resvg-js": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.0.tgz",
-      "integrity": "sha512-Tf3YpbBKcQn991KKcw/vg7vZf98v01seSv6CVxZBbRkL/xyjnoYB6KgrFL6zskT1A4dWC/vg77KyNOW+ePaNlA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 10"
-      },
-      "optionalDependencies": {
-        "@resvg/resvg-js-android-arm-eabi": "2.6.0",
-        "@resvg/resvg-js-android-arm64": "2.6.0",
-        "@resvg/resvg-js-darwin-arm64": "2.6.0",
-        "@resvg/resvg-js-darwin-x64": "2.6.0",
-        "@resvg/resvg-js-linux-arm-gnueabihf": "2.6.0",
-        "@resvg/resvg-js-linux-arm64-gnu": "2.6.0",
-        "@resvg/resvg-js-linux-arm64-musl": "2.6.0",
-        "@resvg/resvg-js-linux-x64-gnu": "2.6.0",
-        "@resvg/resvg-js-linux-x64-musl": "2.6.0",
-        "@resvg/resvg-js-win32-arm64-msvc": "2.6.0",
-        "@resvg/resvg-js-win32-ia32-msvc": "2.6.0",
-        "@resvg/resvg-js-win32-x64-msvc": "2.6.0"
-      }
-    },
-    "node_modules/@resvg/resvg-js-android-arm-eabi": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.0.tgz",
-      "integrity": "sha512-lJnZ/2P5aMocrFMW7HWhVne5gH82I8xH6zsfH75MYr4+/JOaVcGCTEQ06XFohGMdYRP3v05SSPLPvTM/RHjxfA==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@resvg/resvg-js-android-arm64": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.0.tgz",
-      "integrity": "sha512-N527f529bjMwYWShZYfBD60dXA4Fux+D695QsHQ93BDYZSHUoOh1CUGUyICevnTxs7VgEl98XpArmUWBZQVMfQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@resvg/resvg-js-darwin-arm64": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.0.tgz",
-      "integrity": "sha512-MabUKLVayEwlPo0mIqAmMt+qESN8LltCvv5+GLgVga1avpUrkxj/fkU1TKm8kQegutUjbP/B0QuMuUr0uhF8ew==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@resvg/resvg-js-darwin-x64": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.0.tgz",
-      "integrity": "sha512-zrFetdnSw/suXjmyxSjfDV7i61hahv6DDG6kM7BYN2yJ3Es5+BZtqYZTcIWogPJedYKmzN1YTMWGd/3f0ubFiA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@resvg/resvg-js-linux-arm-gnueabihf": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.0.tgz",
-      "integrity": "sha512-sH4gxXt7v7dGwjGyzLwn7SFGvwZG6DQqLaZ11MmzbCwd9Zosy1TnmrMJfn6TJ7RHezmQMgBPi18bl55FZ1AT4A==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@resvg/resvg-js-linux-arm64-gnu": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.0.tgz",
-      "integrity": "sha512-fCyMncqCJtrlANADIduYF4IfnWQ295UKib7DAxFXQhBsM9PLDTpizr0qemZcCNadcwSVHnAIzL4tliZhCM8P6A==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@resvg/resvg-js-linux-arm64-musl": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.0.tgz",
-      "integrity": "sha512-ouLjTgBQHQyxLht4FdMPTvuY8xzJigM9EM2Tlu0llWkN1mKyTQrvYWi6TA6XnKdzDJHy7ZLpWpjZi7F5+Pg+Vg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@resvg/resvg-js-linux-x64-gnu": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.0.tgz",
-      "integrity": "sha512-n3zC8DWsvxC1AwxpKFclIPapDFibs5XdIRoV/mcIlxlh0vseW1F49b97F33BtJQRmlntsqqN6GMMqx8byB7B+Q==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@resvg/resvg-js-linux-x64-musl": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.0.tgz",
-      "integrity": "sha512-n4tasK1HOlAxdTEROgYA1aCfsEKk0UOFDNd/AQTTZlTmCbHKXPq+O8npaaKlwXquxlVK8vrkcWbksbiGqbCAcw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@resvg/resvg-js-win32-arm64-msvc": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.0.tgz",
-      "integrity": "sha512-X2+EoBJFwDI5LDVb51Sk7ldnVLitMGr9WwU/i21i3fAeAXZb3hM16k67DeTy16OYkT2dk/RfU1tP1wG+rWbz2Q==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@resvg/resvg-js-win32-ia32-msvc": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.0.tgz",
-      "integrity": "sha512-L7oevWjQoUgK5W1fCKn0euSVemhDXVhrjtwqpc7MwBKKimYeiOshO1Li1pa8bBt5PESahenhWgdB6lav9O0fEg==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@resvg/resvg-js-win32-x64-msvc": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.0.tgz",
-      "integrity": "sha512-8lJlghb+Unki5AyKgsnFbRJwkEj9r1NpwyuBG8yEJiG1W9eEGl03R3I7bsVa3haof/3J1NlWf0rzSa1G++A2iw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
       "engines": {
         "node": ">= 10"
       }
@@ -3744,174 +3288,70 @@
           "optional": true
         }
       }
-    },
-    "node_modules/@rollup/plugin-replace": {
-      "version": "5.0.5",
-      "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz",
-      "integrity": "sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==",
-      "dev": true,
-      "dependencies": {
-        "@rollup/pluginutils": "^5.0.1",
-        "magic-string": "^0.30.3"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      },
-      "peerDependencies": {
-        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
-      },
-      "peerDependenciesMeta": {
-        "rollup": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@rollup/plugin-terser": {
-      "version": "0.4.4",
-      "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz",
-      "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==",
-      "dev": true,
-      "dependencies": {
-        "serialize-javascript": "^6.0.1",
-        "smob": "^1.0.0",
-        "terser": "^5.17.4"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      },
-      "peerDependencies": {
-        "rollup": "^2.0.0||^3.0.0||^4.0.0"
-      },
-      "peerDependenciesMeta": {
-        "rollup": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@rollup/pluginutils": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
-      "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
-      "dependencies": {
-        "@types/estree": "^1.0.0",
-        "estree-walker": "^2.0.2",
-        "picomatch": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      },
-      "peerDependencies": {
-        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
-      },
-      "peerDependenciesMeta": {
-        "rollup": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.13.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz",
-      "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.13.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz",
-      "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.13.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz",
-      "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.13.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz",
-      "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.13.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz",
-      "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.13.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz",
-      "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.13.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz",
-      "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==",
-      "cpu": [
-        "arm64"
-      ],
+    },
+    "node_modules/@rollup/plugin-replace": {
+      "version": "5.0.5",
+      "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz",
+      "integrity": "sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==",
       "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "dependencies": {
+        "@rollup/pluginutils": "^5.0.1",
+        "magic-string": "^0.30.3"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
+      }
     },
-    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.13.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz",
-      "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==",
-      "cpu": [
-        "riscv64"
-      ],
+    "node_modules/@rollup/plugin-terser": {
+      "version": "0.4.4",
+      "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz",
+      "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==",
       "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "dependencies": {
+        "serialize-javascript": "^6.0.1",
+        "smob": "^1.0.0",
+        "terser": "^5.17.4"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "rollup": "^2.0.0||^3.0.0||^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@rollup/pluginutils": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
+      "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "estree-walker": "^2.0.2",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
+      }
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
       "version": "4.13.0",
@@ -3939,45 +3379,6 @@
         "linux"
       ]
     },
-    "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.13.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz",
-      "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.13.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz",
-      "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.13.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz",
-      "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
     "node_modules/@rushstack/eslint-patch": {
       "version": "1.7.2",
       "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz",
@@ -4576,13 +3977,38 @@
       }
     },
     "node_modules/@unhead/dom": {
-      "version": "1.8.13",
-      "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.8.13.tgz",
-      "integrity": "sha512-BWqtatmrcrT+rN/FBZ/Il7mW0TuPlS4bXrsZewAVanOPU3ahr+sHAIUDJmDjziBjSUsO5wLOEYXA+4t08AZnrQ==",
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.9.2.tgz",
+      "integrity": "sha512-yREmUAfYJsPV9qR3G85MkdH+FdvsHf8AIJRm7FgQidrPxFr8tCICdID3+jXULz3oq8pFye1tAyHlBHXeq3SIpA==",
       "dev": true,
       "dependencies": {
-        "@unhead/schema": "1.8.13",
-        "@unhead/shared": "1.8.13"
+        "@unhead/schema": "1.9.2",
+        "@unhead/shared": "1.9.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/harlan-zw"
+      }
+    },
+    "node_modules/@unhead/dom/node_modules/@unhead/schema": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.9.2.tgz",
+      "integrity": "sha512-NRCAcuWtD2WCL8u3qR1yn41JpDB+ExjBnSLAuJseOD9+XJjQBqPRgx/bhxZ3Dx6vrrCnCF+SvKr+W1pa+3mWdA==",
+      "dev": true,
+      "dependencies": {
+        "hookable": "^5.5.3",
+        "zhead": "^2.2.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/harlan-zw"
+      }
+    },
+    "node_modules/@unhead/dom/node_modules/@unhead/shared": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.9.2.tgz",
+      "integrity": "sha512-jXQ4vK9wXf66hflOSBUXQKVsOLJrYVSOknDH+9PTwz5CIgJv/Y/o/NkRCJjyf5W7qFf605Te28lbTeLumT+BeQ==",
+      "dev": true,
+      "dependencies": {
+        "@unhead/schema": "1.9.2"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
@@ -4630,28 +4056,53 @@
       }
     },
     "node_modules/@unhead/ssr": {
-      "version": "1.8.13",
-      "resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.8.13.tgz",
-      "integrity": "sha512-4GzpVlwJn8HRa6YE+9UuABf3XSe1WvcqLOWszCJiD3oUaFCZ2jqrVXS4v/jhJ6bAm7LTHrfT7Znyw4nQG57/XQ==",
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.9.2.tgz",
+      "integrity": "sha512-XKNAK3A67ZZpNq8arTyUj7brmTOYH3PJrVSx546MCQQvCuP6U3brWyIPy12+a/XiAxr4z62vd2IHCZya8OrZrQ==",
       "dev": true,
       "dependencies": {
-        "@unhead/schema": "1.8.13",
-        "@unhead/shared": "1.8.13"
+        "@unhead/schema": "1.9.2",
+        "@unhead/shared": "1.9.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/harlan-zw"
+      }
+    },
+    "node_modules/@unhead/ssr/node_modules/@unhead/schema": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.9.2.tgz",
+      "integrity": "sha512-NRCAcuWtD2WCL8u3qR1yn41JpDB+ExjBnSLAuJseOD9+XJjQBqPRgx/bhxZ3Dx6vrrCnCF+SvKr+W1pa+3mWdA==",
+      "dev": true,
+      "dependencies": {
+        "hookable": "^5.5.3",
+        "zhead": "^2.2.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/harlan-zw"
+      }
+    },
+    "node_modules/@unhead/ssr/node_modules/@unhead/shared": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.9.2.tgz",
+      "integrity": "sha512-jXQ4vK9wXf66hflOSBUXQKVsOLJrYVSOknDH+9PTwz5CIgJv/Y/o/NkRCJjyf5W7qFf605Te28lbTeLumT+BeQ==",
+      "dev": true,
+      "dependencies": {
+        "@unhead/schema": "1.9.2"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
       }
     },
     "node_modules/@unhead/vue": {
-      "version": "1.8.13",
-      "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.8.13.tgz",
-      "integrity": "sha512-2CIwSeadfJxFfY44nz7U+w/F7lg646aw2t8G58P4A08t6KtPRoAVA0cR0iX+yqQEZIAKYEoaNINv3p/GMxyvBw==",
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.9.2.tgz",
+      "integrity": "sha512-wp0eOyb7tu2isSt1IiDGm194W/8DVL3cXZd8uvhVlhS9yPL3TzwrSNbvwx95fhfrGuXFraoLjp4SpZ2BCszFsg==",
       "dev": true,
       "dependencies": {
-        "@unhead/schema": "1.8.13",
-        "@unhead/shared": "1.8.13",
+        "@unhead/schema": "1.9.2",
+        "@unhead/shared": "1.9.2",
         "hookable": "^5.5.3",
-        "unhead": "1.8.13"
+        "unhead": "1.9.2"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
@@ -4660,6 +4111,31 @@
         "vue": ">=2.7 || >=3"
       }
     },
+    "node_modules/@unhead/vue/node_modules/@unhead/schema": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.9.2.tgz",
+      "integrity": "sha512-NRCAcuWtD2WCL8u3qR1yn41JpDB+ExjBnSLAuJseOD9+XJjQBqPRgx/bhxZ3Dx6vrrCnCF+SvKr+W1pa+3mWdA==",
+      "dev": true,
+      "dependencies": {
+        "hookable": "^5.5.3",
+        "zhead": "^2.2.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/harlan-zw"
+      }
+    },
+    "node_modules/@unhead/vue/node_modules/@unhead/shared": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.9.2.tgz",
+      "integrity": "sha512-jXQ4vK9wXf66hflOSBUXQKVsOLJrYVSOknDH+9PTwz5CIgJv/Y/o/NkRCJjyf5W7qFf605Te28lbTeLumT+BeQ==",
+      "dev": true,
+      "dependencies": {
+        "@unhead/schema": "1.9.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/harlan-zw"
+      }
+    },
     "node_modules/@unocss/astro": {
       "version": "0.58.5",
       "resolved": "https://registry.npmjs.org/@unocss/astro/-/astro-0.58.5.tgz",
@@ -5728,9 +5204,9 @@
       }
     },
     "node_modules/acorn-import-attributes": {
-      "version": "1.9.2",
-      "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.2.tgz",
-      "integrity": "sha512-O+nfJwNolEA771IYJaiLWK1UAwjNsQmZbTRqqwBYxCgVQTmpFEMvBw6LOIQV0Me339L5UMVYFyRohGnGlQDdIQ==",
+      "version": "1.9.4",
+      "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.4.tgz",
+      "integrity": "sha512-dNIX/5UEnZvVL94dV2scl4VIooK36D8AteP4xiz7cPKhDbhLhSuWkzG580g+Q7TXJklp+Z21SiaK7/HpLO84Qg==",
       "dev": true,
       "peerDependencies": {
         "acorn": "^8"
@@ -6100,9 +5576,9 @@
       "dev": true
     },
     "node_modules/autoprefixer": {
-      "version": "10.4.18",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz",
-      "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==",
+      "version": "10.4.19",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz",
+      "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
       "dev": true,
       "funding": [
         {
@@ -6120,7 +5596,7 @@
       ],
       "dependencies": {
         "browserslist": "^4.23.0",
-        "caniuse-lite": "^1.0.30001591",
+        "caniuse-lite": "^1.0.30001599",
         "fraction.js": "^4.3.7",
         "normalize-range": "^0.1.2",
         "picocolors": "^1.0.0",
@@ -6168,9 +5644,9 @@
       "dev": true
     },
     "node_modules/bare-events": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.1.tgz",
-      "integrity": "sha512-9GYPpsPFvrWBkelIhOhTWtkeZxVxZOdb3VnFTCzlOo3OjvmTvzLoZFUT8kNFACx0vJej6QPney1Cf9BvzCNE/A==",
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz",
+      "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==",
       "dev": true,
       "optional": true
     },
@@ -6498,9 +5974,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001597",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz",
-      "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==",
+      "version": "1.0.30001600",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz",
+      "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==",
       "funding": [
         {
           "type": "opencollective",
@@ -7150,9 +6626,9 @@
       }
     },
     "node_modules/css-declaration-sorter": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.1.1.tgz",
-      "integrity": "sha512-dZ3bVTEEc1vxr3Bek9vGwfB5Z6ESPULhcRvO472mfjVnj8jRcTnKO8/JTczlvxM10Myb+wBM++1MtdO76eWcaQ==",
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz",
+      "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==",
       "dev": true,
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -7226,12 +6702,12 @@
       }
     },
     "node_modules/cssnano": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.0.tgz",
-      "integrity": "sha512-e2v4w/t3OFM6HTuSweI4RSdABaqgVgHlJp5FZrQsopHnKKHLFIvK2D3C4kHWeFIycN/1L1J5VIrg5KlDzn3r/g==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz",
+      "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==",
       "dev": true,
       "dependencies": {
-        "cssnano-preset-default": "^6.1.0",
+        "cssnano-preset-default": "^6.1.2",
         "lilconfig": "^3.1.1"
       },
       "engines": {
@@ -7246,13 +6722,13 @@
       }
     },
     "node_modules/cssnano-preset-default": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.0.tgz",
-      "integrity": "sha512-4DUXZoDj+PI3fRl3MqMjl9DwLGjcsFP4qt+92nLUcN1RGfw2TY+GwNoG2B38Usu1BrcTs8j9pxNfSusmvtSjfg==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz",
+      "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==",
       "dev": true,
       "dependencies": {
         "browserslist": "^4.23.0",
-        "css-declaration-sorter": "^7.1.1",
+        "css-declaration-sorter": "^7.2.0",
         "cssnano-utils": "^4.0.2",
         "postcss-calc": "^9.0.1",
         "postcss-colormin": "^6.1.0",
@@ -7261,12 +6737,12 @@
         "postcss-discard-duplicates": "^6.0.3",
         "postcss-discard-empty": "^6.0.3",
         "postcss-discard-overridden": "^6.0.2",
-        "postcss-merge-longhand": "^6.0.4",
-        "postcss-merge-rules": "^6.1.0",
-        "postcss-minify-font-values": "^6.0.3",
+        "postcss-merge-longhand": "^6.0.5",
+        "postcss-merge-rules": "^6.1.1",
+        "postcss-minify-font-values": "^6.1.0",
         "postcss-minify-gradients": "^6.0.3",
         "postcss-minify-params": "^6.1.0",
-        "postcss-minify-selectors": "^6.0.3",
+        "postcss-minify-selectors": "^6.0.4",
         "postcss-normalize-charset": "^6.0.2",
         "postcss-normalize-display-values": "^6.0.2",
         "postcss-normalize-positions": "^6.0.2",
@@ -7280,7 +6756,7 @@
         "postcss-reduce-initial": "^6.1.0",
         "postcss-reduce-transforms": "^6.0.2",
         "postcss-svgo": "^6.0.3",
-        "postcss-unique-selectors": "^6.0.3"
+        "postcss-unique-selectors": "^6.0.4"
       },
       "engines": {
         "node": "^14 || ^16 || >=18.0"
@@ -8289,9 +7765,9 @@
       "peer": true
     },
     "node_modules/esbuild": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz",
-      "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
+      "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
       "dev": true,
       "hasInstallScript": true,
       "bin": {
@@ -8301,29 +7777,29 @@
         "node": ">=12"
       },
       "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.20.1",
-        "@esbuild/android-arm": "0.20.1",
-        "@esbuild/android-arm64": "0.20.1",
-        "@esbuild/android-x64": "0.20.1",
-        "@esbuild/darwin-arm64": "0.20.1",
-        "@esbuild/darwin-x64": "0.20.1",
-        "@esbuild/freebsd-arm64": "0.20.1",
-        "@esbuild/freebsd-x64": "0.20.1",
-        "@esbuild/linux-arm": "0.20.1",
-        "@esbuild/linux-arm64": "0.20.1",
-        "@esbuild/linux-ia32": "0.20.1",
-        "@esbuild/linux-loong64": "0.20.1",
-        "@esbuild/linux-mips64el": "0.20.1",
-        "@esbuild/linux-ppc64": "0.20.1",
-        "@esbuild/linux-riscv64": "0.20.1",
-        "@esbuild/linux-s390x": "0.20.1",
-        "@esbuild/linux-x64": "0.20.1",
-        "@esbuild/netbsd-x64": "0.20.1",
-        "@esbuild/openbsd-x64": "0.20.1",
-        "@esbuild/sunos-x64": "0.20.1",
-        "@esbuild/win32-arm64": "0.20.1",
-        "@esbuild/win32-ia32": "0.20.1",
-        "@esbuild/win32-x64": "0.20.1"
+        "@esbuild/aix-ppc64": "0.20.2",
+        "@esbuild/android-arm": "0.20.2",
+        "@esbuild/android-arm64": "0.20.2",
+        "@esbuild/android-x64": "0.20.2",
+        "@esbuild/darwin-arm64": "0.20.2",
+        "@esbuild/darwin-x64": "0.20.2",
+        "@esbuild/freebsd-arm64": "0.20.2",
+        "@esbuild/freebsd-x64": "0.20.2",
+        "@esbuild/linux-arm": "0.20.2",
+        "@esbuild/linux-arm64": "0.20.2",
+        "@esbuild/linux-ia32": "0.20.2",
+        "@esbuild/linux-loong64": "0.20.2",
+        "@esbuild/linux-mips64el": "0.20.2",
+        "@esbuild/linux-ppc64": "0.20.2",
+        "@esbuild/linux-riscv64": "0.20.2",
+        "@esbuild/linux-s390x": "0.20.2",
+        "@esbuild/linux-x64": "0.20.2",
+        "@esbuild/netbsd-x64": "0.20.2",
+        "@esbuild/openbsd-x64": "0.20.2",
+        "@esbuild/sunos-x64": "0.20.2",
+        "@esbuild/win32-arm64": "0.20.2",
+        "@esbuild/win32-ia32": "0.20.2",
+        "@esbuild/win32-x64": "0.20.2"
       }
     },
     "node_modules/escalade": {
@@ -13421,9 +12897,9 @@
       "peer": true
     },
     "node_modules/nitropack": {
-      "version": "2.9.3",
-      "resolved": "https://registry.npmjs.org/nitropack/-/nitropack-2.9.3.tgz",
-      "integrity": "sha512-k3wXlhxmTNkkFXnVyRYJ6CCdZmvlqjYJ4oaL8o9uTKIjg7A1udAle+3cVDxUWi2r9owwEysAP2+quNsAujZyTg==",
+      "version": "2.9.5",
+      "resolved": "https://registry.npmjs.org/nitropack/-/nitropack-2.9.5.tgz",
+      "integrity": "sha512-ClanSILi9O6HX95QNIC+TwxojpRpOSn9n3e3wmHExAHhLN5HdnHGmHN4LwtJdE2p91nse3kDULOTR7k1xRVJ/g==",
       "dev": true,
       "dependencies": {
         "@cloudflare/kv-asset-handler": "^0.3.1",
@@ -13438,7 +12914,7 @@
         "@rollup/pluginutils": "^5.1.0",
         "@types/http-proxy": "^1.17.14",
         "@vercel/nft": "^0.26.4",
-        "archiver": "^7.0.0",
+        "archiver": "^7.0.1",
         "c12": "^1.10.0",
         "chalk": "^5.3.0",
         "chokidar": "^3.6.0",
@@ -13451,7 +12927,7 @@
         "defu": "^6.1.4",
         "destr": "^2.0.3",
         "dot-prop": "^8.0.2",
-        "esbuild": "^0.20.1",
+        "esbuild": "^0.20.2",
         "escape-string-regexp": "^5.0.0",
         "etag": "^1.8.1",
         "fs-extra": "^11.2.0",
@@ -13460,6 +12936,7 @@
         "h3": "^1.11.1",
         "hookable": "^5.5.3",
         "httpxy": "^0.1.5",
+        "ioredis": "^5.3.2",
         "is-primitive": "^3.0.1",
         "jiti": "^1.21.0",
         "klona": "^2.0.6",
@@ -13469,29 +12946,29 @@
         "mime": "^4.0.1",
         "mlly": "^1.6.1",
         "mri": "^1.2.0",
-        "node-fetch-native": "^1.6.2",
-        "ofetch": "^1.3.3",
+        "node-fetch-native": "^1.6.4",
+        "ofetch": "^1.3.4",
         "ohash": "^1.1.3",
-        "openapi-typescript": "^6.7.4",
+        "openapi-typescript": "^6.7.5",
         "pathe": "^1.1.2",
         "perfect-debounce": "^1.0.0",
         "pkg-types": "^1.0.3",
         "pretty-bytes": "^6.1.1",
-        "radix3": "^1.1.1",
-        "rollup": "^4.12.1",
+        "radix3": "^1.1.2",
+        "rollup": "^4.13.0",
         "rollup-plugin-visualizer": "^5.12.0",
         "scule": "^1.3.0",
         "semver": "^7.6.0",
         "serve-placeholder": "^2.0.1",
         "serve-static": "^1.15.0",
         "std-env": "^3.7.0",
-        "ufo": "^1.4.0",
+        "ufo": "^1.5.3",
         "uncrypto": "^0.1.3",
         "unctx": "^2.3.1",
         "unenv": "^1.9.0",
         "unimport": "^3.7.1",
-        "unstorage": "^1.10.1",
-        "unwasm": "^0.3.7"
+        "unstorage": "^1.10.2",
+        "unwasm": "^0.3.8"
       },
       "bin": {
         "nitro": "dist/cli/index.mjs",
@@ -13568,9 +13045,9 @@
       }
     },
     "node_modules/node-fetch-native": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.2.tgz",
-      "integrity": "sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w=="
+      "version": "1.6.4",
+      "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz",
+      "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ=="
     },
     "node_modules/node-forge": {
       "version": "1.3.1",
@@ -13901,9 +13378,9 @@
       }
     },
     "node_modules/nuxi": {
-      "version": "3.10.1",
-      "resolved": "https://registry.npmjs.org/nuxi/-/nuxi-3.10.1.tgz",
-      "integrity": "sha512-ZNt858+FOZDIiKKFJkXO7uJAnALytDdn1XbLgtZAqbtWNMayHbOnWcnxh+WSOE4H9uOi2+loWXEqKElmNWLgcQ==",
+      "version": "3.11.1",
+      "resolved": "https://registry.npmjs.org/nuxi/-/nuxi-3.11.1.tgz",
+      "integrity": "sha512-AW71TpxRHNg8MplQVju9tEFvXPvX42e0wPYknutSStDuAjV99vWTWYed4jxr/grk2FtKAuv2KvdJxcn2W59qyg==",
       "dev": true,
       "bin": {
         "nuxi": "bin/nuxi.mjs",
@@ -13912,70 +13389,71 @@
         "nuxt-cli": "bin/nuxi.mjs"
       },
       "engines": {
-        "node": "^14.18.0 || >=16.10.0"
+        "node": "^16.10.0 || >=18.0.0"
       },
       "optionalDependencies": {
         "fsevents": "~2.3.3"
       }
     },
     "node_modules/nuxt": {
-      "version": "3.10.3",
-      "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-3.10.3.tgz",
-      "integrity": "sha512-NchGNiiz9g/ErJAb462W/lpX2NqcXYb9hugySKWvLXNdrjeAPiJ2/7mhgwUSiZA9MpjuQg3saiEajr1zlRIOCg==",
+      "version": "3.11.1",
+      "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-3.11.1.tgz",
+      "integrity": "sha512-CsncE1dxP0cmOYT+PBdjMD0bOK8eZizG5tgNWUOJAAAtU45sO38maoBumYYL2kUpT/SC/dMP+831DAcVPvi9pQ==",
       "dev": true,
       "dependencies": {
         "@nuxt/devalue": "^2.0.2",
         "@nuxt/devtools": "^1.0.8",
-        "@nuxt/kit": "3.10.3",
-        "@nuxt/schema": "3.10.3",
+        "@nuxt/kit": "3.11.1",
+        "@nuxt/schema": "3.11.1",
         "@nuxt/telemetry": "^2.5.3",
         "@nuxt/ui-templates": "^1.3.1",
-        "@nuxt/vite-builder": "3.10.3",
-        "@unhead/dom": "^1.8.10",
-        "@unhead/ssr": "^1.8.10",
-        "@unhead/vue": "^1.8.10",
-        "@vue/shared": "^3.4.19",
+        "@nuxt/vite-builder": "3.11.1",
+        "@unhead/dom": "^1.8.20",
+        "@unhead/ssr": "^1.8.20",
+        "@unhead/vue": "^1.8.20",
+        "@vue/shared": "^3.4.21",
         "acorn": "8.11.3",
-        "c12": "^1.9.0",
+        "c12": "^1.10.0",
         "chokidar": "^3.6.0",
         "cookie-es": "^1.0.0",
         "defu": "^6.1.4",
         "destr": "^2.0.3",
         "devalue": "^4.3.2",
-        "esbuild": "^0.20.1",
+        "esbuild": "^0.20.2",
         "escape-string-regexp": "^5.0.0",
         "estree-walker": "^3.0.3",
         "fs-extra": "^11.2.0",
         "globby": "^14.0.1",
-        "h3": "^1.10.2",
+        "h3": "^1.11.1",
         "hookable": "^5.5.3",
         "jiti": "^1.21.0",
         "klona": "^2.0.6",
         "knitwork": "^1.0.0",
-        "magic-string": "^0.30.7",
-        "mlly": "^1.6.0",
-        "nitropack": "^2.8.1",
-        "nuxi": "^3.10.1",
-        "nypm": "^0.3.6",
+        "magic-string": "^0.30.8",
+        "mlly": "^1.6.1",
+        "nitropack": "^2.9.4",
+        "nuxi": "^3.11.0",
+        "nypm": "^0.3.8",
         "ofetch": "^1.3.3",
         "ohash": "^1.1.3",
         "pathe": "^1.1.2",
         "perfect-debounce": "^1.0.0",
         "pkg-types": "^1.0.3",
-        "radix3": "^1.1.0",
+        "radix3": "^1.1.1",
         "scule": "^1.3.0",
         "std-env": "^3.7.0",
         "strip-literal": "^2.0.0",
-        "ufo": "^1.4.0",
+        "ufo": "^1.5.2",
         "ultrahtml": "^1.5.3",
         "uncrypto": "^0.1.3",
         "unctx": "^2.3.1",
         "unenv": "^1.9.0",
         "unimport": "^3.7.1",
-        "unplugin": "^1.7.1",
+        "unplugin": "^1.10.0",
         "unplugin-vue-router": "^0.7.0",
+        "unstorage": "^1.10.2",
         "untyped": "^1.4.2",
-        "vue": "^3.4.19",
+        "vue": "^3.4.21",
         "vue-bundle-renderer": "^2.0.0",
         "vue-devtools-stub": "^0.1.0",
         "vue-router": "^4.3.0"
@@ -14516,14 +13994,14 @@
       }
     },
     "node_modules/ofetch": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.3.3.tgz",
-      "integrity": "sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==",
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.3.4.tgz",
+      "integrity": "sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==",
       "dev": true,
       "dependencies": {
-        "destr": "^2.0.1",
-        "node-fetch-native": "^1.4.0",
-        "ufo": "^1.3.0"
+        "destr": "^2.0.3",
+        "node-fetch-native": "^1.6.3",
+        "ufo": "^1.5.3"
       }
     },
     "node_modules/ohash": {
@@ -14611,9 +14089,9 @@
       }
     },
     "node_modules/openapi-typescript": {
-      "version": "6.7.4",
-      "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-6.7.4.tgz",
-      "integrity": "sha512-EZyeW9Wy7UDCKv0iYmKrq2pVZtquXiD/YHiUClAKqiMi42nodx/EQH11K6fLqjt1IZlJmVokrAsExsBMM2RROQ==",
+      "version": "6.7.5",
+      "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-6.7.5.tgz",
+      "integrity": "sha512-ZD6dgSZi0u1QCP55g8/2yS5hNJfIpgqsSGHLxxdOjvY7eIrXzj271FJEQw33VwsZ6RCtO/NOuhxa7GBWmEudyA==",
       "dev": true,
       "dependencies": {
         "ansi-colors": "^4.1.3",
@@ -15042,9 +14520,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
-      "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
+      "version": "8.4.38",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+      "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
       "funding": [
         {
           "type": "opencollective",
@@ -15062,7 +14540,7 @@
       "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"
@@ -15167,13 +14645,13 @@
       }
     },
     "node_modules/postcss-merge-longhand": {
-      "version": "6.0.4",
-      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.4.tgz",
-      "integrity": "sha512-vAfWGcxUUGlFiPM3nDMZA+/Yo9sbpc3JNkcYZez8FfJDv41Dh7tAgA3QGVTocaHCZZL6aXPXPOaBMJsjujodsA==",
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz",
+      "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==",
       "dev": true,
       "dependencies": {
         "postcss-value-parser": "^4.2.0",
-        "stylehacks": "^6.1.0"
+        "stylehacks": "^6.1.1"
       },
       "engines": {
         "node": "^14 || ^16 || >=18.0"
@@ -15183,15 +14661,15 @@
       }
     },
     "node_modules/postcss-merge-rules": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.0.tgz",
-      "integrity": "sha512-lER+W3Gr6XOvxOYk1Vi/6UsAgKMg6MDBthmvbNqi2XxAk/r9XfhdYZSigfWjuWWn3zYw2wLelvtM8XuAEFqRkA==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz",
+      "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==",
       "dev": true,
       "dependencies": {
         "browserslist": "^4.23.0",
         "caniuse-api": "^3.0.0",
         "cssnano-utils": "^4.0.2",
-        "postcss-selector-parser": "^6.0.15"
+        "postcss-selector-parser": "^6.0.16"
       },
       "engines": {
         "node": "^14 || ^16 || >=18.0"
@@ -15201,9 +14679,9 @@
       }
     },
     "node_modules/postcss-minify-font-values": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.3.tgz",
-      "integrity": "sha512-SmAeTA1We5rMnN3F8X9YBNo9bj9xB4KyDHnaNJnBfQIPi+60fNiR9OTRnIaMqkYzAQX0vObIw4Pn0vuKEOettg==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz",
+      "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==",
       "dev": true,
       "dependencies": {
         "postcss-value-parser": "^4.2.0"
@@ -15250,12 +14728,12 @@
       }
     },
     "node_modules/postcss-minify-selectors": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.3.tgz",
-      "integrity": "sha512-IcV7ZQJcaXyhx4UBpWZMsinGs2NmiUC60rJSkyvjPCPqhNjVGsrJUM+QhAtCaikZ0w0/AbZuH4wVvF/YMuMhvA==",
+      "version": "6.0.4",
+      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz",
+      "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==",
       "dev": true,
       "dependencies": {
-        "postcss-selector-parser": "^6.0.15"
+        "postcss-selector-parser": "^6.0.16"
       },
       "engines": {
         "node": "^14 || ^16 || >=18.0"
@@ -15445,9 +14923,9 @@
       }
     },
     "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==",
+      "version": "6.0.16",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
+      "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
       "dev": true,
       "dependencies": {
         "cssesc": "^3.0.0",
@@ -15474,12 +14952,12 @@
       }
     },
     "node_modules/postcss-unique-selectors": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.3.tgz",
-      "integrity": "sha512-NFXbYr8qdmCr/AFceaEfdcsKGCvWTeGO6QVC9h2GvtWgj0/0dklKQcaMMVzs6tr8bY+ase8hOtHW8OBTTRvS8A==",
+      "version": "6.0.4",
+      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz",
+      "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==",
       "dev": true,
       "dependencies": {
-        "postcss-selector-parser": "^6.0.15"
+        "postcss-selector-parser": "^6.0.16"
       },
       "engines": {
         "node": "^14 || ^16 || >=18.0"
@@ -15686,9 +15164,9 @@
       "dev": true
     },
     "node_modules/radix3": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.1.tgz",
-      "integrity": "sha512-yUUd5VTiFtcMEx0qFUxGAv5gbMc1un4RvEO1JZdP7ZUl/RHygZK6PknIKntmQRZxnMY3ZXD2ISaw1ij8GYW1yg==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz",
+      "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==",
       "dev": true
     },
     "node_modules/randombytes": {
@@ -16963,9 +16441,9 @@
       }
     },
     "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"
       }
@@ -17256,13 +16734,13 @@
       "dev": true
     },
     "node_modules/stylehacks": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.0.tgz",
-      "integrity": "sha512-ETErsPFgwlfYZ/CSjMO2Ddf+TsnkCVPBPaoB99Ro8WMAxf7cglzmFsRBhRmKObFjibtcvlNxFFPHuyr3sNlNUQ==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz",
+      "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==",
       "dev": true,
       "dependencies": {
         "browserslist": "^4.23.0",
-        "postcss-selector-parser": "^6.0.15"
+        "postcss-selector-parser": "^6.0.16"
       },
       "engines": {
         "node": "^14 || ^16 || >=18.0"
@@ -17694,9 +17172,9 @@
       }
     },
     "node_modules/ufo": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz",
-      "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ=="
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz",
+      "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw=="
     },
     "node_modules/ultrahtml": {
       "version": "1.5.3",
@@ -17788,20 +17266,45 @@
       }
     },
     "node_modules/unhead": {
-      "version": "1.8.13",
-      "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.8.13.tgz",
-      "integrity": "sha512-VL1eOXc1U0zI6XO2JJQ98tywcEW9cM6tfrmuNcltOKSB7Xg3isVXFSf2bEbO4XPUjg8D5Uy3Q3Zi9cN9XSiTyA==",
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.9.2.tgz",
+      "integrity": "sha512-CveP8bjL8gUJnZ1NqcMU1roe+VuM14wr0cJfNek/LCSI2i968mHDD5tbDXNcMSAVOhffKj6WkTngTUKNOZxA7g==",
       "dev": true,
       "dependencies": {
-        "@unhead/dom": "1.8.13",
-        "@unhead/schema": "1.8.13",
-        "@unhead/shared": "1.8.13",
+        "@unhead/dom": "1.9.2",
+        "@unhead/schema": "1.9.2",
+        "@unhead/shared": "1.9.2",
         "hookable": "^5.5.3"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
       }
     },
+    "node_modules/unhead/node_modules/@unhead/schema": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.9.2.tgz",
+      "integrity": "sha512-NRCAcuWtD2WCL8u3qR1yn41JpDB+ExjBnSLAuJseOD9+XJjQBqPRgx/bhxZ3Dx6vrrCnCF+SvKr+W1pa+3mWdA==",
+      "dev": true,
+      "dependencies": {
+        "hookable": "^5.5.3",
+        "zhead": "^2.2.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/harlan-zw"
+      }
+    },
+    "node_modules/unhead/node_modules/@unhead/shared": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.9.2.tgz",
+      "integrity": "sha512-jXQ4vK9wXf66hflOSBUXQKVsOLJrYVSOknDH+9PTwz5CIgJv/Y/o/NkRCJjyf5W7qFf605Te28lbTeLumT+BeQ==",
+      "dev": true,
+      "dependencies": {
+        "@unhead/schema": "1.9.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/harlan-zw"
+      }
+    },
     "node_modules/unicode-emoji-modifier-base": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz",
@@ -18051,9 +17554,9 @@
       }
     },
     "node_modules/unplugin": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.9.0.tgz",
-      "integrity": "sha512-14PslvMY3gNbXnQtNIRB566Q057L5Fe7f5LDEamxVi0QQVxoz5hrveBwwZLcKyHtZ09ysmipxRRj5Lv+BGz2Iw==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.10.0.tgz",
+      "integrity": "sha512-CuZtvvO8ua2Wl+9q2jEaqH6m3DoQ38N7pvBYQbbaeNlWGvK2l6GHiKi29aIHDPoSxdUzQ7Unevf1/ugil5X6Pg==",
       "dependencies": {
         "acorn": "^8.11.3",
         "chokidar": "^3.6.0",
@@ -18124,36 +17627,36 @@
       }
     },
     "node_modules/unstorage": {
-      "version": "1.10.1",
-      "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.10.1.tgz",
-      "integrity": "sha512-rWQvLRfZNBpF+x8D3/gda5nUCQL2PgXy2jNG4U7/Rc9BGEv9+CAJd0YyGCROUBKs9v49Hg8huw3aih5Bf5TAVw==",
+      "version": "1.10.2",
+      "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.10.2.tgz",
+      "integrity": "sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ==",
       "dev": true,
       "dependencies": {
         "anymatch": "^3.1.3",
-        "chokidar": "^3.5.3",
-        "destr": "^2.0.2",
-        "h3": "^1.8.2",
-        "ioredis": "^5.3.2",
-        "listhen": "^1.5.5",
-        "lru-cache": "^10.0.2",
+        "chokidar": "^3.6.0",
+        "destr": "^2.0.3",
+        "h3": "^1.11.1",
+        "listhen": "^1.7.2",
+        "lru-cache": "^10.2.0",
         "mri": "^1.2.0",
-        "node-fetch-native": "^1.4.1",
+        "node-fetch-native": "^1.6.2",
         "ofetch": "^1.3.3",
-        "ufo": "^1.3.1"
+        "ufo": "^1.4.0"
       },
       "peerDependencies": {
-        "@azure/app-configuration": "^1.4.1",
+        "@azure/app-configuration": "^1.5.0",
         "@azure/cosmos": "^4.0.0",
         "@azure/data-tables": "^13.2.2",
-        "@azure/identity": "^3.3.2",
-        "@azure/keyvault-secrets": "^4.7.0",
-        "@azure/storage-blob": "^12.16.0",
-        "@capacitor/preferences": "^5.0.6",
-        "@netlify/blobs": "^6.2.0",
-        "@planetscale/database": "^1.11.0",
-        "@upstash/redis": "^1.23.4",
-        "@vercel/kv": "^0.2.3",
-        "idb-keyval": "^6.2.1"
+        "@azure/identity": "^4.0.1",
+        "@azure/keyvault-secrets": "^4.8.0",
+        "@azure/storage-blob": "^12.17.0",
+        "@capacitor/preferences": "^5.0.7",
+        "@netlify/blobs": "^6.5.0 || ^7.0.0",
+        "@planetscale/database": "^1.16.0",
+        "@upstash/redis": "^1.28.4",
+        "@vercel/kv": "^1.0.1",
+        "idb-keyval": "^6.2.1",
+        "ioredis": "^5.3.2"
       },
       "peerDependenciesMeta": {
         "@azure/app-configuration": {
@@ -18191,6 +17694,9 @@
         },
         "idb-keyval": {
           "optional": true
+        },
+        "ioredis": {
+          "optional": true
         }
       }
     },
@@ -18235,16 +17741,17 @@
       }
     },
     "node_modules/unwasm": {
-      "version": "0.3.7",
-      "resolved": "https://registry.npmjs.org/unwasm/-/unwasm-0.3.7.tgz",
-      "integrity": "sha512-+s4iWvHHYnLuwNo+9mqVFLBmBzGc3gIuzkVZ8fdMN9K/kWopCnfaUVnDagd2OX3It5nRR5EenI5nSQb8FOd0fA==",
+      "version": "0.3.8",
+      "resolved": "https://registry.npmjs.org/unwasm/-/unwasm-0.3.8.tgz",
+      "integrity": "sha512-nIJQXxGl/gTUp5dZkSc8jbxAqSOa9Vv4jjSZXNI6OK0JXdvW3SQUHR+KY66rjI0W//km59jivGgd5TCvBUWsnA==",
       "dev": true,
       "dependencies": {
-        "magic-string": "^0.30.5",
-        "mlly": "^1.5.0",
+        "knitwork": "^1.0.0",
+        "magic-string": "^0.30.8",
+        "mlly": "^1.6.1",
         "pathe": "^1.1.2",
         "pkg-types": "^1.0.3",
-        "unplugin": "^1.6.0"
+        "unplugin": "^1.9.0"
       }
     },
     "node_modules/upath": {
@@ -18547,9 +18054,9 @@
       }
     },
     "node_modules/vite-node": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.3.1.tgz",
-      "integrity": "sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.4.0.tgz",
+      "integrity": "sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==",
       "dev": true,
       "dependencies": {
         "cac": "^6.7.14",
diff --git a/package.json b/package.json
index 05c5aa35c0d03aa75bd08fde7b3cd7df2c9fdbde..e9bcee5d0ac62736490a415c5c1b6ac9a888b20f 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,7 @@
     "@unocss/preset-icons": "^0.58.3",
     "@vueuse/core": "^10.7.1",
     "@vueuse/nuxt": "^10.7.1",
-    "nuxt": "^3.9.1",
+    "nuxt": "^3.11.1",
     "nuxt-meilisearch": "^1.1.0",
     "vuetify-nuxt-module": "^0.9.0"
   },
diff --git a/packages/df-wiki-cli/data/test/refseq.csv b/packages/df-wiki-cli/data/test/refseq.csv
new file mode 100644
index 0000000000000000000000000000000000000000..63cae96a82b258d253725663ae0d4de7cf6a0d5f
--- /dev/null
+++ b/packages/df-wiki-cli/data/test/refseq.csv
@@ -0,0 +1,19 @@
+sys_id,Assembly,replicon,type,subtype,sys_beg,sys_end,protein_in_syst,genes_count,name_of_profiles_in_sys,accession_in_sys,Superkingdom,phylum,class,order,family,genus,species
+GCF_001602115_NZ_CP014352_AbiE_1,GCF_001602115.1,NZ_CP014352,AbiE,AbiE,GCF_001602115.1_NZ_CP014352_01750,GCF_001602115.1_NZ_CP014352_01751,"GCF_001602115.1_NZ_CP014352_01750, GCF_001602115.1_NZ_CP014352_01751",2.0,"AbiEii__AbiEii, AbiEii__AbiEi_1","WP_062819585.1, WP_062819586.1",Bacteria,Actinomycetota,Actinomycetes,Propionibacteriales,Propionibacteriaceae,Acidipropionibacterium,Acidipropionibacterium acidipropionici
+GCF_001602115_NZ_CP014352_Thoeris_II_1,GCF_001602115.1,NZ_CP014352,Thoeris,Thoeris_II,GCF_001602115.1_NZ_CP014352_00483,GCF_001602115.1_NZ_CP014352_00484,"GCF_001602115.1_NZ_CP014352_00483, GCF_001602115.1_NZ_CP014352_00484",2.0,"Thoeris__ThsB_Global, Thoeris_II__ThsA_new_petit","WP_062818945.1, WP_082815879.1",Bacteria,Actinomycetota,Actinomycetes,Propionibacteriales,Propionibacteriaceae,Acidipropionibacterium,Acidipropionibacterium acidipropionici
+GCF_001602115_NZ_CP014352_RM_Type_IIG_5,GCF_001602115.1,NZ_CP014352,RM,RM_Type_IIG,GCF_001602115.1_NZ_CP014352_00058,GCF_001602115.1_NZ_CP014352_00058,GCF_001602115.1_NZ_CP014352_00058,1.0,RM_Type_IIG__Type_IIG,WP_062818741.1,Bacteria,Actinomycetota,Actinomycetes,Propionibacteriales,Propionibacteriaceae,Acidipropionibacterium,Acidipropionibacterium acidipropionici
+GCF_001602115_NZ_CP014352_RM_Type_I_1,GCF_001602115.1,NZ_CP014352,RM,RM_Type_I,GCF_001602115.1_NZ_CP014352_00060,GCF_001602115.1_NZ_CP014352_00062,"GCF_001602115.1_NZ_CP014352_00060, GCF_001602115.1_NZ_CP014352_00061, GCF_001602115.1_NZ_CP014352_00062",3.0,"RM__Type_I_REases, RM__Type_I_S, RM__Type_I_MTases","WP_062818743.1, WP_062818744.1, WP_062818745.1",Bacteria,Actinomycetota,Actinomycetes,Propionibacteriales,Propionibacteriaceae,Acidipropionibacterium,Acidipropionibacterium acidipropionici
+GCF_001602115_NZ_CP014352_RM_Type_IIG_6,GCF_001602115.1,NZ_CP014352,RM,RM_Type_IIG,GCF_001602115.1_NZ_CP014352_00069,GCF_001602115.1_NZ_CP014352_00069,GCF_001602115.1_NZ_CP014352_00069,1.0,RM_Type_IIG__Type_IIG,WP_062818749.1,Bacteria,Actinomycetota,Actinomycetes,Propionibacteriales,Propionibacteriaceae,Acidipropionibacterium,Acidipropionibacterium acidipropionici
+GCF_001602115_NZ_CP014352_RM_Type_I_2,GCF_001602115.1,NZ_CP014352,RM,RM_Type_I,GCF_001602115.1_NZ_CP014352_00475,GCF_001602115.1_NZ_CP014352_00477,"GCF_001602115.1_NZ_CP014352_00475, GCF_001602115.1_NZ_CP014352_00476, GCF_001602115.1_NZ_CP014352_00477",3.0,"RM__Type_I_MTases, RM__Type_I_S, RM__Type_I_REases","WP_062818938.1, WP_082815877.1, WP_062818940.1",Bacteria,Actinomycetota,Actinomycetes,Propionibacteriales,Propionibacteriaceae,Acidipropionibacterium,Acidipropionibacterium acidipropionici
+GCF_001602115_NZ_CP014352_RM_Type_I_3,GCF_001602115.1,NZ_CP014352,RM,RM_Type_I,GCF_001602115.1_NZ_CP014352_02756,GCF_001602115.1_NZ_CP014352_02758,"GCF_001602115.1_NZ_CP014352_02756, GCF_001602115.1_NZ_CP014352_02757, GCF_001602115.1_NZ_CP014352_02758",3.0,"RM__Type_I_REases, RM__Type_I_S, RM__Type_I_MTases","WP_062820191.1, WP_062820192.1, WP_062820839.1",Bacteria,Actinomycetota,Actinomycetes,Propionibacteriales,Propionibacteriaceae,Acidipropionibacterium,Acidipropionibacterium acidipropionici
+GCF_001602115_NZ_CP014352_RM_Type_IIG_7,GCF_001602115.1,NZ_CP014352,RM,RM_Type_IIG,GCF_001602115.1_NZ_CP014352_03005,GCF_001602115.1_NZ_CP014352_03005,GCF_001602115.1_NZ_CP014352_03005,1.0,RM_Type_IIG__Type_IIG,WP_198401420.1,Bacteria,Actinomycetota,Actinomycetes,Propionibacteriales,Propionibacteriaceae,Acidipropionibacterium,Acidipropionibacterium acidipropionici
+GCF_001602115_NZ_CP014352_RM_Type_I_4,GCF_001602115.1,NZ_CP014352,RM,RM_Type_I,GCF_001602115.1_NZ_CP014352_03420,GCF_001602115.1_NZ_CP014352_03422,"GCF_001602115.1_NZ_CP014352_03420, GCF_001602115.1_NZ_CP014352_03421, GCF_001602115.1_NZ_CP014352_03422",3.0,"RM__Type_I_REases, RM__Type_I_S, RM__Type_I_MTases","WP_062818743.1, WP_062818744.1, WP_062818745.1",Bacteria,Actinomycetota,Actinomycetes,Propionibacteriales,Propionibacteriaceae,Acidipropionibacterium,Acidipropionibacterium acidipropionici
+GCF_001602115_NZ_CP014352_RM_Type_IIG_8,GCF_001602115.1,NZ_CP014352,RM,RM_Type_IIG,GCF_001602115.1_NZ_CP014352_03427,GCF_001602115.1_NZ_CP014352_03427,GCF_001602115.1_NZ_CP014352_03427,1.0,RM_Type_IIG__Type_IIG,WP_157773967.1,Bacteria,Actinomycetota,Actinomycetes,Propionibacteriales,Propionibacteriaceae,Acidipropionibacterium,Acidipropionibacterium acidipropionici
+GCF_001602115_NZ_CP014353,GCF_001602115.1,NZ_CP014353,No system found,,,,,,,,Bacteria,Actinomycetota,Actinomycetes,Propionibacteriales,Propionibacteriaceae,Acidipropionibacterium,Acidipropionibacterium acidipropionici
+GCF_001602115_NZ_CP014352_CAS_Class1-Subtype-I-G_1,GCF_001602115.1,NZ_CP014352,Cas,CAS_Class1-Subtype-I-G,GCF_001602115.1_NZ_CP014352_01614,GCF_001602115.1_NZ_CP014352_01620,"GCF_001602115_NZ_CP014352_01614, GCF_001602115_NZ_CP014352_01615, GCF_001602115_NZ_CP014352_01616, GCF_001602115_NZ_CP014352_01617, GCF_001602115_NZ_CP014352_01618, GCF_001602115_NZ_CP014352_01619, GCF_001602115_NZ_CP014352_01620",7.0,"DEDDh_I_II_III_IV_V_VI_1, csb1gr7_I-G_1, csb2gr5_I-G_1, cas3_I-G_3, csb3_I-G_1, cas1_I_II_III_IV_V_VI_1, cas2_I_II_III_IV_V_VI_3","WP_198401461.1, WP_062819507.1, WP_062819508.1, WP_062819509.1, WP_062819510.1, WP_062819511.1, WP_062819512.1",Bacteria,Actinomycetota,Actinomycetes,Propionibacteriales,Propionibacteriaceae,Acidipropionibacterium,Acidipropionibacterium acidipropionici
+GCF_000830055_NZ_CP010781_Gabija_1,GCF_000830055.1,NZ_CP010781,Gabija,Gabija,GCF_000830055.1_NZ_CP010781_01480,GCF_000830055.1_NZ_CP010781_01481,"GCF_000830055.1_NZ_CP010781_01480, GCF_000830055.1_NZ_CP010781_01481",2.0,"Gabija__GajA, Gabija__GajB_2","WP_005115822.1, WP_000073989.1",Bacteria,Pseudomonadota,Gammaproteobacteria,Moraxellales,Moraxellaceae,Acinetobacter,Acinetobacter baumannii
+GCF_000830055_NZ_CP010781_Gao_Qat_1,GCF_000830055.1,NZ_CP010781,Gao_Qat,Gao_Qat,GCF_000830055.1_NZ_CP010781_00952,GCF_000830055.1_NZ_CP010781_00955,"GCF_000830055.1_NZ_CP010781_00952, GCF_000830055.1_NZ_CP010781_00953, GCF_000830055.1_NZ_CP010781_00954, GCF_000830055.1_NZ_CP010781_00955",4.0,"Gao_Qat__QatA, Gao_Qat__QatB, Gao_Qat__QatC, Gao_Qat__QatD","WP_000269396.1, WP_000537345.1, WP_041152179.1, WP_000937120.1",Bacteria,Pseudomonadota,Gammaproteobacteria,Moraxellales,Moraxellaceae,Acinetobacter,Acinetobacter baumannii
+GCF_000830055_NZ_CP010781_RosmerTA_1,GCF_000830055.1,NZ_CP010781,RosmerTA,RosmerTA,GCF_000830055.1_NZ_CP010781_00651,GCF_000830055.1_NZ_CP010781_00652,"GCF_000830055.1_NZ_CP010781_00651, GCF_000830055.1_NZ_CP010781_00652",2.0,"RosmerTA__RmrA_2634932349, RosmerTA__RmrT_2634932349","WP_000482796.1, WP_001182927.1",Bacteria,Pseudomonadota,Gammaproteobacteria,Moraxellales,Moraxellaceae,Acinetobacter,Acinetobacter baumannii
+GCF_000830055_NZ_CP010781_RM_Type_II_1,GCF_000830055.1,NZ_CP010781,RM,RM_Type_II,GCF_000830055.1_NZ_CP010781_03697,GCF_000830055.1_NZ_CP010781_03698,"GCF_000830055.1_NZ_CP010781_03697, GCF_000830055.1_NZ_CP010781_03698",2.0,"RM_Type_II__Type_II_REases, RM_Type_II__Type_II_MTases","WP_001062713.1, WP_000862934.1",Bacteria,Pseudomonadota,Gammaproteobacteria,Moraxellales,Moraxellaceae,Acinetobacter,Acinetobacter baumannii
+GCF_000830055_NZ_CP010782,GCF_000830055.1,NZ_CP010782,No system found,,,,,,,,Bacteria,Pseudomonadota,Gammaproteobacteria,Moraxellales,Moraxellaceae,Acinetobacter,Acinetobacter baumannii
+GCF_000830055_NZ_CP010781_CAS_Class1-Subtype-I-F_1,GCF_000830055.1,NZ_CP010781,Cas,CAS_Class1-Subtype-I-F,GCF_000830055.1_NZ_CP010781_02755,GCF_000830055.1_NZ_CP010781_02760,"GCF_000830055_NZ_CP010781_02755, GCF_000830055_NZ_CP010781_02756, GCF_000830055_NZ_CP010781_02757, GCF_000830055_NZ_CP010781_02758, GCF_000830055_NZ_CP010781_02759, GCF_000830055_NZ_CP010781_02760",6.0,"cas6f_I_II_III_IV_V_VI_3, cas7f_I-F_2, cas5f_I-F_4, cas8f_I-F_8, cas3f_I-F_1, cas1_I-F_1","WP_001104789.1, WP_001097003.1, WP_001215684.1, WP_000841022.1, WP_000637362.1, WP_000436801.1",Bacteria,Pseudomonadota,Gammaproteobacteria,Moraxellales,Moraxellaceae,Acinetobacter,Acinetobacter baumannii
diff --git a/packages/df-wiki-cli/df_wiki_cli/content/main.py b/packages/df-wiki-cli/df_wiki_cli/content/main.py
index 17b7865777a7117790fa90495b7ddd602bc903f7..319089d3217665ec3a28f0663c10228479553be4 100644
--- a/packages/df-wiki-cli/df_wiki_cli/content/main.py
+++ b/packages/df-wiki-cli/df_wiki_cli/content/main.py
@@ -4,6 +4,7 @@ import json
 import pandas as pd
 import shutil
 import csv
+import tempfile
 import matplotlib.pyplot as plt
 from pandas.errors import ParserError
 from typing_extensions import Annotated
@@ -244,7 +245,7 @@ def pae2png(tsv_file, png_file):
     plt.close()
 
 
-@app.command()
+@app.command(help="Remove version from sys_id")
 def refseq(
     input: Annotated[
         Path,
@@ -276,3 +277,224 @@ def refseq(
             console.print(f"[green]{row['sys_id']} ->  {result}")
             row["sys_id"] = result
             writer.writerow(row)
+
+
+@app.command(
+    help='Remove "No system found" hits if the are not the only hit for an assembly'
+)
+def refseq_sanitized_hits(
+    input: Annotated[
+        Path,
+        typer.Option(
+            exists=False,
+            file_okay=True,
+            writable=True,
+        ),
+    ],
+    output: Annotated[
+        Path,
+        typer.Option(
+            file_okay=True,
+            dir_okay=False,
+            writable=True,
+            resolve_path=True,
+        ),
+    ],
+):
+    df = pd.read_csv(input)
+    df_final = _sanitized_refseq_hits(df)
+    df_final.reset_index().to_csv(output, index=False)
+    return df_final
+
+
+@app.command(help="Group hits per assembly and types (from 'sanitized-hits')")
+def refseq_group_per_assembly_and_type(
+    input: Annotated[
+        Path,
+        typer.Option(
+            exists=False,
+            file_okay=True,
+            writable=True,
+        ),
+    ],
+    output: Annotated[
+        Path,
+        typer.Option(
+            file_okay=True,
+            dir_okay=False,
+            writable=True,
+            resolve_path=True,
+        ),
+    ],
+):
+    df = pd.read_csv(input)
+    df_final = _sanitized_refseq_hits(df)
+    df_final_grouped = df_final.groupby(
+        [
+            "Assembly",
+            "type",
+            "Superkingdom",
+            "phylum",
+            "class",
+            "order",
+            "family",
+            "genus",
+            "species",
+        ],
+        as_index=False,
+    ).size()
+    df_final_grouped.reset_index().to_csv(output, index=False)
+
+
+@app.command()
+def refseq_group_per_assembly(
+    input: Annotated[
+        Path,
+        typer.Option(
+            exists=False,
+            file_okay=True,
+            writable=True,
+        ),
+    ],
+    output: Annotated[
+        Path,
+        typer.Option(
+            file_okay=True,
+            dir_okay=False,
+            writable=True,
+            resolve_path=True,
+        ),
+    ],
+):
+    df = pd.read_csv(input)
+
+    df["Assembly"] = df["Assembly"].apply(remove_version)
+    df_grouped = df.groupby(
+        [
+            "Assembly",
+            "Superkingdom",
+            "phylum",
+            "class",
+            "order",
+            "family",
+            "genus",
+            "species",
+        ],
+        as_index=False,
+    ).size()
+    df_grouped.reset_index().to_csv(output, index=False)
+
+
+@app.command()
+def refseq_type_count(
+    input: Annotated[
+        Path,
+        typer.Option(
+            exists=False,
+            file_okay=True,
+            writable=True,
+            help="csv file with type and taxo (No system found removed when other system are founded in the same assembly)",
+        ),
+    ],
+    output: Annotated[
+        Path,
+        typer.Option(
+            file_okay=True,
+            dir_okay=False,
+            writable=True,
+            resolve_path=True,
+        ),
+    ],
+):
+    df = pd.read_csv(input)
+    grouped_per_type = df.groupby(
+        ["type"],
+        as_index=False,
+    ).size()
+    grouped_per_type.reset_index().to_csv(output, index=False)
+
+
+@app.command()
+def markdown(
+    dir: Annotated[
+        Path,
+        typer.Option(
+            exists=True,
+            file_okay=False,
+            writable=True,
+            readable=True,
+            resolve_path=True,
+            help="Dir where all systems article are",
+        ),
+    ],
+):
+    for file in dir.iterdir():
+        if file.suffix == ".md":
+
+            console.rule(f"[bold blue]{file.name}", style="blue")
+            # make a copy of file
+            _, tmp_path = tempfile.mkstemp()
+            # with open(dst, "w") as tmp_f:
+            dst = Path(tmp_path)
+            dst.write_bytes(file.read_bytes())
+
+            with open(dst, "r+") as f:
+                new_f = re.sub(
+                    r"##\s+Structure\n.*##\s+Experimental\s+validation",
+                    "## Structure\n\n::article-structure\n::\n\n## Experimental validation",
+                    f.read(),
+                    flags=re.DOTALL,
+                )
+                with open(file, "w") as f_out:
+                    f_out.write(new_f)
+
+
+def remove_version(assembly):
+    return assembly.split(".")[0]
+
+
+def _sanitized_refseq_hits(df):
+    df["Assembly"] = df["Assembly"].apply(remove_version)
+    # Lower type namesmc
+    # df["type"] = df["type"].apply(lambda x: x.lower())
+
+    # Get all row with no system type
+    df_no_system = df.loc[df["type"] == "No system found"]
+    # unique assembly with no sys
+    serie_assembly_with_no_sys = df_no_system["Assembly"].unique()
+    # filter assembly to have those with no sys
+    df_with_no_sys = df[df["Assembly"].isin(serie_assembly_with_no_sys)]
+    # Group them by assembly, type, taxo
+    no_sys_assembly_by_size = df_with_no_sys.groupby(
+        [
+            "Assembly",
+            "type",
+            "Superkingdom",
+            "phylum",
+            "class",
+            "order",
+            "family",
+            "genus",
+            "species",
+        ],
+        as_index=False,
+    ).size()
+
+    # count each occurrence
+    df_again_per_assembly = no_sys_assembly_by_size.groupby(
+        "Assembly",
+        as_index=False,
+    ).size()
+    # filter to keep only size > 1 (when == 1 it means that there is only "no system found for an assembly")
+    # so we should keep it
+    df_size_sup_1 = df_again_per_assembly[df_again_per_assembly["size"] > 1]
+    assembly_where_should_remove_no_sys_found = df_size_sup_1["Assembly"].unique()
+
+    # Construct new dataset to remove entries with no system found
+    # while found system on other replicon that belongs to the
+    # same assembly
+    df_filtered_assembly_only_with_sys = df[
+        (df["type"] != "No system found")
+        | ~df.Assembly.isin(assembly_where_should_remove_no_sys_found)
+    ]
+    return df_filtered_assembly_only_with_sys
diff --git a/packages/df-wiki-cli/df_wiki_cli/meilisearch/__init__.py b/packages/df-wiki-cli/df_wiki_cli/meilisearch/__init__.py
index 5707df46949c4fd609e35340458fb61e1a5c30aa..52668833951380349e912f84de1e06f3b9fe508e 100644
--- a/packages/df-wiki-cli/df_wiki_cli/meilisearch/__init__.py
+++ b/packages/df-wiki-cli/df_wiki_cli/meilisearch/__init__.py
@@ -38,6 +38,28 @@ class RefSeqCsv(BaseModel):
     species: str
 
 
+class RefSeqTaxo(BaseModel):
+    index: int
+    Assembly: str
+    Superkingdom: str
+    phylum: str
+    class_: str = Field(..., alias="class")
+    order: str
+    family: str
+    genus: str
+    species: str
+    size: int
+
+
+class RefSeqTaxoType(RefSeqTaxo):
+    type: str
+
+
+class RefSeqTypeCount(BaseModel):
+    type: str
+    size: int
+
+
 class StructureTypes(str, Enum):
     Validated = "Validated"
     DF = "DF"
@@ -84,28 +106,57 @@ def update_refseqtaxo(host: str, key: str, file: Path, document: str):
     documents = []
     with open(file, "r") as csvfile:
         csvreader = csv.DictReader(csvfile)
-        assembly = {}
         for row in csvreader:
-            assembly_id = row["Assembly"]
-            assembly[row["Assembly"]] = {
-                k: row[k]
-                for k in (
-                    "Superkingdom",
-                    "phylum",
-                    "class",
-                    "order",
-                    "family",
-                    "genus",
-                    "species",
-                    "Assembly",
-                )
-                if k in row
-            }
-            assembly[assembly_id]["Assembly"] = assembly[assembly_id]["Assembly"].split('.')[0]
-        for item in assembly.values():
-            documents.append(item)
+            doc = RefSeqTaxo(**row)
+            documents.append(doc.model_dump(by_alias=True))
     tasks = index.add_documents_in_batches(documents, primary_key="Assembly")
-    print(tasks)
+    for task in tasks:
+        console.print(task)
+    index.update_pagination_settings({"maxTotalHits": 1000000})
+    index.update_filterable_attributes(
+        body=[
+            "Superkingdom",
+            "phylum",
+            "class",
+            "order",
+            "family",
+            "genus",
+            "species",
+            "Assembly",
+        ]
+    )
+    index.update_sortable_attributes(
+        [
+            "Superkingdom",
+            "phylum",
+            "class",
+            "order",
+            "family",
+            "genus",
+            "species",
+            "Assembly",
+            "size",
+        ]
+    )
+    params = {
+        "maxValuesPerFacet": 1000000,
+        "sortFacetValuesBy": {"*": "count"},
+    }
+    index.update_faceting_settings(params)
+
+
+def update_refseqtaxotype(host: str, key: str, file: Path, document: str):
+    client = meilisearch.Client(host, key)
+    index = client.index(document.lower())
+    documents = []
+    with open(file, "r") as csvfile:
+        csvreader = csv.DictReader(csvfile)
+        for row in csvreader:
+            doc = RefSeqTaxoType(**row)
+            documents.append(doc.model_dump(by_alias=True))
+    tasks = index.add_documents_in_batches(documents, primary_key="index")
+    for task in tasks:
+        console.print(task)
     index.update_pagination_settings({"maxTotalHits": 1000000})
     index.update_filterable_attributes(
         body=[
@@ -129,6 +180,35 @@ def update_refseqtaxo(host: str, key: str, file: Path, document: str):
             "genus",
             "species",
             "Assembly",
+            "type",
+            "size",
+        ]
+    )
+    params = {
+        "maxValuesPerFacet": 1000000,
+        "sortFacetValuesBy": {"*": "count"},
+    }
+    index.update_faceting_settings(params)
+
+
+def update_refseqtypecount(host: str, key: str, file: Path, document: str):
+    client = meilisearch.Client(host, key)
+    index = client.index(document.lower())
+    documents = []
+    with open(file, "r") as csvfile:
+        csvreader = csv.DictReader(csvfile)
+        for row in csvreader:
+            doc = RefSeqTypeCount(**row)
+            documents.append(doc.model_dump(by_alias=True))
+    tasks = index.add_documents_in_batches(documents, primary_key="type")
+    for task in tasks:
+        console.print(task)
+    index.update_pagination_settings({"maxTotalHits": 1000000})
+    index.update_filterable_attributes(body=["type"])
+    index.update_sortable_attributes(
+        [
+            "type",
+            "size",
         ]
     )
     params = {
@@ -342,7 +422,6 @@ def update_articles(
     print(attr_task)
 
 
-
 def split_on_comma(str_val: str) -> List[str]:
     for val in str_val.split(","):
         yield val.strip()
diff --git a/packages/df-wiki-cli/df_wiki_cli/meilisearch/main.py b/packages/df-wiki-cli/df_wiki_cli/meilisearch/main.py
index e6cb0e7b9c38fe0874f3efa988810e8494633c9f..b722a7a7cf965837c610584c1c2a086f660cd039 100644
--- a/packages/df-wiki-cli/df_wiki_cli/meilisearch/main.py
+++ b/packages/df-wiki-cli/df_wiki_cli/meilisearch/main.py
@@ -6,6 +6,8 @@ from df_wiki_cli.meilisearch import (
     update_refseqtaxo,
     update_articles,
     update_refseq,
+    update_refseqtaxotype,
+    update_refseqtypecount,
     update_structure,
     update_systems,
 )
@@ -21,6 +23,9 @@ app = typer.Typer()
 
 class Documents(str, Enum):
     refseqtaxo = "refseqtaxo"
+    refseqtaxotype = "refseqtaxotype"
+    refseqtypecount = "refseqtypecount"
+    refseqsanitized = "refseqsanitized"
     refseq = "refseq"
     structure = "structure"
     systems = "systems"
@@ -63,6 +68,7 @@ def update(
     ] = Documents.refseq,
     content_type: Annotated[str, typer.Option(help="Content-Type header")] = "text/csv",
 ):
+
     if document == "refseqtaxo":
         update_refseqtaxo(ctx.obj.host, ctx.obj.key, file, document)
     if document == "refseq":
@@ -73,6 +79,12 @@ def update(
         update_systems(ctx.obj.host, ctx.obj.key, file, document)
     if document == "article":
         update_articles(ctx.obj.host, ctx.obj.key, file, document)
+    if document == "refseqtaxotype":
+        update_refseqtaxotype(ctx.obj.host, ctx.obj.key, file, document)
+    if document == "refseqsanitized":
+        update_refseq(ctx.obj.host, ctx.obj.key, file, document)
+    if document == "refseqtypecount":
+        update_refseqtypecount(ctx.obj.host, ctx.obj.key, file, document)
 
 
 @app.command()
@@ -97,6 +109,12 @@ def index_update(ctx: typer.Context, index: str, primary_key: str):
     console.print(task)
 
 
+@app.command()
+def index_delete(ctx: typer.Context, index: str):
+    client = meilisearch.Client(ctx.obj.host, ctx.obj.key)
+    client.index(index).delete()
+
+
 @app.command()
 def task(ctx: typer.Context, id: str):
     client = meilisearch.Client(ctx.obj.host, ctx.obj.key)
diff --git a/packages/df-wiki-cli/pyproject.toml b/packages/df-wiki-cli/pyproject.toml
index d0a3341443d8102a33b93a44f44f7b16797bb3ed..b6763ddc21e03ebb437cb3085a4e46142d434989 100644
--- a/packages/df-wiki-cli/pyproject.toml
+++ b/packages/df-wiki-cli/pyproject.toml
@@ -1,6 +1,6 @@
 [tool.poetry]
 name = "df-wiki-cli"
-version = "0.1.6"
+version = "0.1.7"
 description = ""
 authors = ["Remi  PLANEL <rplanel@pasteur.fr>"]
 readme = "README.md"