diff --git a/README.md b/README.md
index 40203292..24ebc057 100644
--- a/README.md
+++ b/README.md
@@ -28,7 +28,7 @@ By using Piped, you can freely watch and listen to content without the fear of p
 -   [x] Login
 -   [x] Feeds
 -   [x] Playlists
--   [x] Integration with SponsorBlock
+-   [x] Integration with [SponsorBlock](https://github.com/ajayyy/SponsorBlock)
 -   [x] Integration with [LBRY](https://lbry.com/) for streaming
 -   [x] Integration with [Return YouTube Dislike](https://returnyoutubedislike.com/) via [RYD-Proxy](https://github.com/TeamPiped/RYD-Proxy)
 -   [x] 4K support
@@ -38,6 +38,7 @@ By using Piped, you can freely watch and listen to content without the fear of p
 -   [x] Locally saved Preferences
 -   [x] [Available in many languages](src/locales), thanks to [our translators](https://hosted.weblate.org/projects/piped/frontend/)
 -   [x] Embedded video support
+-   [x] No age restriction
 
 **Technical Features**
 
diff --git a/package.json b/package.json
index bb588158..a56233fa 100644
--- a/package.json
+++ b/package.json
@@ -20,31 +20,31 @@
         "mux.js": "^6.2.0",
         "shaka-player": "4.2.1",
         "stream": "^0.0.2",
-        "vue": "^3.2.39",
+        "vue": "^3.2.40",
         "vue-i18n": "^9.2.2",
         "vue-router": "^4.1.5",
         "xml-js": "^1.6.11"
     },
     "devDependencies": {
-        "@iconify/json": "^2.1.108",
-        "@intlify/vite-plugin-vue-i18n": "^6.0.1",
-        "@unocss/preset-icons": "^0.45.13",
-        "@unocss/preset-web-fonts": "^0.45.7",
-        "@unocss/transformer-directives": "^0.45.7",
-        "@unocss/transformer-variant-group": "^0.45.13",
+        "@iconify/json": "^2.1.118",
+        "@intlify/vite-plugin-vue-i18n": "^6.0.3",
+        "@unocss/preset-icons": "^0.45.25",
+        "@unocss/preset-web-fonts": "^0.45.25",
+        "@unocss/transformer-directives": "^0.45.26",
+        "@unocss/transformer-variant-group": "^0.45.25",
         "@vitejs/plugin-legacy": "^1.8.2",
         "@vitejs/plugin-vue": "^2.3.4",
-        "@vue/compiler-sfc": "3.2.39",
+        "@vue/compiler-sfc": "3.2.40",
         "babel-eslint": "^10.1.0",
         "eslint": "^7.32.0",
         "eslint-config-prettier": "^8.5.0",
         "eslint-plugin-prettier": "^4.2.1",
-        "eslint-plugin-vue": "^9.5.1",
+        "eslint-plugin-vue": "^9.6.0",
         "prettier": "^2.7.1",
-        "unocss": "^0.45.21",
+        "unocss": "^0.45.26",
         "vite": "^2.9.14",
         "vite-plugin-eslint": "^1.8.1",
-        "vite-plugin-pwa": "^0.12.7"
+        "vite-plugin-pwa": "^0.12.8"
     },
     "eslintConfig": {
         "root": true,
diff --git a/src/App.vue b/src/App.vue
index d4110563..b35662aa 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,21 +1,14 @@
 <template>
     <div class="w-full min-h-screen px-1vw reset" :class="[theme]">
         <NavBar />
+
         <router-view v-slot="{ Component }">
             <keep-alive :max="5">
                 <component :is="Component" :key="$route.fullPath" />
             </keep-alive>
         </router-view>
 
-        <footer class="text-center">
-            <a aria-label="GitHub" href="https://github.com/TeamPiped/Piped">
-                <font-awesome-icon :icon="['fab', 'github']" />
-            </a>
-            <a class="ml-2" href="https://github.com/TeamPiped/Piped#donations">
-                <font-awesome-icon :icon="['fab', 'bitcoin']" />
-                <span class="ml-1" v-t="'actions.donations'" />
-            </a>
-        </footer>
+        <FooterComponent />
     </div>
 </template>
 
@@ -85,9 +78,11 @@ button,
 
 <script>
 import NavBar from "./components/NavBar.vue";
+import FooterComponent from "./components/FooterComponent.vue";
 export default {
     components: {
         NavBar,
+        FooterComponent,
     },
     mounted() {
         if (this.getPreferenceBoolean("watchHistory", false))
diff --git a/src/components/FeedPage.vue b/src/components/FeedPage.vue
index 5360abf1..5d797be0 100644
--- a/src/components/FeedPage.vue
+++ b/src/components/FeedPage.vue
@@ -16,7 +16,7 @@
     <hr />
 
     <div class="video-grid">
-        <VideoItem v-for="video in videos" :key="video.url" :video="video" />
+        <VideoItem :is-feed="true" v-for="video in videos" :key="video.url" :video="video" />
     </div>
 </template>
 
diff --git a/src/components/FooterComponent.vue b/src/components/FooterComponent.vue
new file mode 100644
index 00000000..c90d99fb
--- /dev/null
+++ b/src/components/FooterComponent.vue
@@ -0,0 +1,59 @@
+<template>
+    <footer class="text-center py-40 children:(mx-30) w-full mt-10 mb-5">
+        <a aria-label="GitHub" href="https://github.com/TeamPiped/Piped" target="_blank">
+            <font-awesome-icon :icon="['fab', 'github']" />
+            <span class="ml-2" v-t="'actions.source_code'" />
+        </a>
+        <a href="https://piped-docs.kavin.rocks/" target="_blank">
+            <font-awesome-icon :icon="['fa', 'book']" />
+            <span class="ml-2" v-t="'actions.documentation'" />
+        </a>
+        <a href="https://github.com/TeamPiped/Piped#donations" target="_blank">
+            <font-awesome-icon :icon="['fab', 'bitcoin']" />
+            <span class="ml-2" v-t="'actions.donations'" />
+        </a>
+        <a v-if="statusPageHref" :href="statusPageHref">
+            <font-awesome-icon :icon="['fa', 'server']" />
+            <span class="ml-2" v-t="'actions.status_page'" />
+        </a>
+        <a v-if="donationHref" :href="donationHref">
+            <font-awesome-icon :icon="['fa', 'donate']" />
+            <span class="ml-2" v-t="'actions.instance_donations'" />
+        </a>
+    </footer>
+</template>
+
+<script>
+export default {
+    data() {
+        return {
+            donationHref: null,
+            statusPageHref: null,
+        };
+    },
+    mounted() {
+        this.fetchConfig();
+    },
+    methods: {
+        async fetchConfig() {
+            this.fetchJson(this.apiUrl() + "/config").then(config => {
+                this.donationHref = config?.donationUrl;
+                this.statusPageHref = config?.statusPageUrl;
+            });
+        },
+    },
+};
+</script>
+
+<style>
+footer {
+    @apply bg-light-900;
+    border-radius: var(--efy_radius);
+}
+.dark footer {
+    @apply bg-dark-800;
+}
+.auto footer {
+    @apply dark:(bg-dark-800);
+}
+</style>
diff --git a/src/components/NavBar.vue b/src/components/NavBar.vue
index 9d6d48a4..d23f982c 100644
--- a/src/components/NavBar.vue
+++ b/src/components/NavBar.vue
@@ -79,7 +79,7 @@
         />
     </div>
     <SearchSuggestions
-        v-show="searchText && suggestionsVisible"
+        v-show="(searchText || showSearchHistory) && suggestionsVisible"
         ref="searchSuggestions"
         :search-text="searchText"
         @searchchange="onSearchTextChange"
@@ -119,6 +119,9 @@ export default {
         shouldShowTrending(_this) {
             return _this.getPreferenceString("homepage", "trending") != "trending";
         },
+        showSearchHistory() {
+            return localStorage.getItem("searchHistory") && localStorage.getItem("search_history");
+        },
     },
     methods: {
         // focus on search bar when Ctrl+k is pressed
@@ -145,6 +148,7 @@ export default {
             }
         },
         onInputFocus() {
+            if (this.showSearchHistory) this.$refs.searchSuggestions.refreshSuggestions();
             this.suggestionsVisible = true;
         },
         onInputBlur() {
diff --git a/src/components/PreferencesPage.vue b/src/components/PreferencesPage.vue
index b9710859..b817eb60 100644
--- a/src/components/PreferencesPage.vue
+++ b/src/components/PreferencesPage.vue
@@ -41,7 +41,6 @@
                     <option v-t="'titles.feed'" value="feed" />
                 </select>
             </label>
-
             <label class="pref" for="ddlInstanceSelection">
                 <strong v-text="`${$t('actions.instance_selection')}:`" />
                 <select
@@ -421,6 +420,8 @@ export default {
             minimizeDescription: false,
             minimizeRecommendations: false,
             watchHistory: false,
+            searchHistory: false,
+            hideWatched: false,
             selectedLanguage: "en",
             languages: [
                 { code: "ar", name: "Arabic" },
@@ -555,10 +556,12 @@ export default {
             this.minimizeDescription = this.getPreferenceBoolean("minimizeDescription", false);
             this.minimizeRecommendations = this.getPreferenceBoolean("minimizeRecommendations", false);
             this.watchHistory = this.getPreferenceBoolean("watchHistory", false);
+            this.searchHistory = this.getPreferenceBoolean("searchHistory", false);
             this.selectedLanguage = this.getPreferenceString("hl", await this.defaultLangage);
             this.enabledCodecs = this.getPreferenceString("enabledCodecs", "vp9,avc").split(",");
             this.disableLBRY = this.getPreferenceBoolean("disableLBRY", false);
             this.proxyLBRY = this.getPreferenceBoolean("proxyLBRY", false);
+            this.hideWatched = this.getPreferenceBoolean("hideWatched", false);
             if (this.selectedLanguage != "en") {
                 try {
                     this.CountryMap = await import(`../utils/CountryMaps/${this.selectedLanguage}.json`).then(
@@ -612,10 +615,13 @@ export default {
                 localStorage.setItem("minimizeDescription", this.minimizeDescription);
                 localStorage.setItem("minimizeRecommendations", this.minimizeRecommendations);
                 localStorage.setItem("watchHistory", this.watchHistory);
+                localStorage.setItem("searchHistory", this.searchHistory);
+                if (!this.searchHistory) localStorage.removeItem("search_history");
                 localStorage.setItem("hl", this.selectedLanguage);
                 localStorage.setItem("enabledCodecs", this.enabledCodecs.join(","));
                 localStorage.setItem("disableLBRY", this.disableLBRY);
                 localStorage.setItem("proxyLBRY", this.proxyLBRY);
+                localStorage.setItem("hideWatched", this.hideWatched);
 
                 if (shouldReload) window.location.reload();
             }
diff --git a/src/components/SearchResults.vue b/src/components/SearchResults.vue
index 0e16f69a..8d3098b8 100644
--- a/src/components/SearchResults.vue
+++ b/src/components/SearchResults.vue
@@ -77,6 +77,7 @@ export default {
     mounted() {
         if (this.handleRedirect()) return;
         this.updateResults();
+        this.saveQueryToHistory();
     },
     activated() {
         this.handleRedirect();
@@ -138,6 +139,19 @@ export default {
                 return true;
             }
         },
+        saveQueryToHistory() {
+            if (!this.getPreferenceBoolean("searchHistory", false)) return;
+            const query = this.$route.query.search_query;
+            if (!query) return;
+            const searchHistory = JSON.parse(localStorage.getItem("search_history")) ?? [];
+            if (searchHistory.includes(query)) {
+                const index = searchHistory.indexOf(query);
+                searchHistory.splice(index, 1);
+            }
+            searchHistory.unshift(query);
+            if (searchHistory.length > 10) searchHistory.shift();
+            localStorage.setItem("search_history", JSON.stringify(searchHistory));
+        },
     },
 };
 </script>
diff --git a/src/components/SearchSuggestions.vue b/src/components/SearchSuggestions.vue
index e8154b74..4108d02e 100644
--- a/src/components/SearchSuggestions.vue
+++ b/src/components/SearchSuggestions.vue
@@ -47,11 +47,16 @@ export default {
             }
         },
         async refreshSuggestions() {
-            this.searchSuggestions = (
-                await this.fetchJson(this.apiUrl() + "/opensearch/suggestions", {
-                    query: this.searchText,
-                })
-            )?.[1];
+            if (!this.searchText) {
+                if (this.getPreferenceBoolean("searchHistory", false))
+                    this.searchSuggestions = JSON.parse(localStorage.getItem("search_history")) ?? [];
+            } else {
+                this.searchSuggestions = (
+                    await this.fetchJson(this.apiUrl() + "/opensearch/suggestions", {
+                        query: this.searchText,
+                    })
+                )?.[1];
+            }
             this.searchSuggestions.unshift(this.searchText);
             this.setSelected(0);
         },
diff --git a/src/components/VideoItem.vue b/src/components/VideoItem.vue
index 235f051d..1d593874 100644
--- a/src/components/VideoItem.vue
+++ b/src/components/VideoItem.vue
@@ -1,5 +1,5 @@
 <template>
-    <div>
+    <div v-if="showVideo">
         <router-link
             :to="{
                 path: '/watch',
@@ -133,6 +133,10 @@ export default {
                 return {};
             },
         },
+        isFeed: {
+            type: Boolean,
+            default: false,
+        },
         height: { type: String, default: "118" },
         width: { type: String, default: "210" },
         hideChannel: { type: Boolean, default: false },
@@ -143,8 +147,12 @@ export default {
     data() {
         return {
             showModal: false,
+            showVideo: true,
         };
     },
+    mounted() {
+        this.shouldShowVideo();
+    },
     methods: {
         removeVideo() {
             if (confirm(this.$t("actions.delete_playlist_video_confirm"))) {
@@ -165,6 +173,19 @@ export default {
                 });
             }
         },
+        shouldShowVideo() {
+            if (!this.isFeed || !this.getPreferenceBoolean("hideWatched", false)) return;
+
+            const objectStore = window.db.transaction("watch_history", "readonly").objectStore("watch_history");
+            const request = objectStore.get(this.video.url.substr(-11));
+            request.onsuccess = event => {
+                const video = event.target.result;
+                if (video && (video.currentTime ?? 0) > video.duration * 0.9) {
+                    this.showVideo = false;
+                    return;
+                }
+            };
+        },
     },
     computed: {
         short() {
diff --git a/src/locales/ar.json b/src/locales/ar.json
index b6546b4d..14e7d711 100644
--- a/src/locales/ar.json
+++ b/src/locales/ar.json
@@ -105,7 +105,8 @@
         "copy_link": "نسخ الرابط",
         "time_code": "رمز الوقت (بالثواني)",
         "rename_playlist": "إعادة تسمية قائمة التشغيل",
-        "new_playlist_name": "اسم قائمة تشغيل جديد"
+        "new_playlist_name": "اسم قائمة تشغيل جديد",
+        "show_chapters": "الفصول"
     },
     "video": {
         "sponsor_segments": "المقاطع الإعلانية",
diff --git a/src/locales/ca.json b/src/locales/ca.json
index 67858026..64b2a22b 100644
--- a/src/locales/ca.json
+++ b/src/locales/ca.json
@@ -100,7 +100,9 @@
         "share": "Compartir",
         "time_code": "Moment (en segons)",
         "copy_link": "Copiar l'enllaç",
-        "follow_link": "Vés a l'enllaç"
+        "follow_link": "Vés a l'enllaç",
+        "rename_playlist": "Canviar el nom de la llista de reproducció",
+        "new_playlist_name": "Nom nou de la llista de reproducció"
     },
     "comment": {
         "pinned_by": "Fixat per",
diff --git a/src/locales/cs.json b/src/locales/cs.json
index 17bad614..d3817f21 100644
--- a/src/locales/cs.json
+++ b/src/locales/cs.json
@@ -98,11 +98,12 @@
         "share": "Sdílet",
         "with_timecode": "Sdílet s časovým kódem",
         "piped_link": "Odkaz na Piped",
-        "follow_link": "Následovat odkaz",
+        "follow_link": "Otevřít odkaz",
         "copy_link": "Kopírovat odkaz",
         "time_code": "Časový kód (v sekundách)",
         "rename_playlist": "Přejmenovat playlist",
-        "new_playlist_name": "Nový název playlistu"
+        "new_playlist_name": "Nový název playlistu",
+        "show_chapters": "Kapitoly"
     },
     "player": {
         "watch_on": "Sledovat na {0}"
diff --git a/src/locales/de.json b/src/locales/de.json
index 0d910267..9b3181c4 100644
--- a/src/locales/de.json
+++ b/src/locales/de.json
@@ -89,7 +89,8 @@
         "reset_preferences": "Einstellungen zurücksetzen",
         "confirm_reset_preferences": "Bist du sicher, dass du deine Einstellungen zurücksetzen möchtest?",
         "backup_preferences": "Einstellungen sichern",
-        "restore_preferences": "Einstellungen wiederherstellen"
+        "restore_preferences": "Einstellungen wiederherstellen",
+        "show_chapters": "Kapitel"
     },
     "player": {
         "watch_on": "Auf {0} ansehen"
diff --git a/src/locales/en.json b/src/locales/en.json
index e1dfd229..fe8175f3 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -61,7 +61,7 @@
         "import_from_json": "Import from JSON/CSV",
         "loop_this_video": "Loop this Video",
         "auto_play_next_video": "Auto Play next Video",
-        "donations": "Donations",
+        "donations": "Development donations",
         "minimize_description": "Minimize Description",
         "show_description": "Description",
         "minimize_recommendations": "Minimize Recommendations",
@@ -106,7 +106,13 @@
         "follow_link": "Follow link",
         "copy_link": "Copy link",
         "time_code": "Time code (in seconds)",
-        "show_chapters": "Chapters"
+        "show_chapters": "Chapters",
+        "store_search_history": "Store Search history",
+        "hide_watched": "Hide watched videos in the feed",
+        "documentation": "Documentation",
+        "status_page": "Status",
+        "source_code": "Source code",
+        "instance_donations": "Instance donations"
     },
     "comment": {
         "pinned_by": "Pinned by",
diff --git a/src/locales/eo.json b/src/locales/eo.json
index fe0bf319..ddfb360d 100644
--- a/src/locales/eo.json
+++ b/src/locales/eo.json
@@ -40,6 +40,10 @@
         "donations": "Donacoj",
         "show_more": "Montri pli",
         "yes": "Jes",
-        "no": "Ne"
+        "no": "Ne",
+        "show_chapters": "Sekcioj"
+    },
+    "video": {
+        "chapters": "Sekcioj"
     }
 }
diff --git a/src/locales/es.json b/src/locales/es.json
index 825c9038..06fd5ff1 100644
--- a/src/locales/es.json
+++ b/src/locales/es.json
@@ -114,7 +114,8 @@
         "confirm_reset_preferences": "¿Estás seguro de que quieres restablecer tus preferencias?",
         "backup_preferences": "Preferencias de copia de seguridad",
         "restore_preferences": "Restablecer las preferencias",
-        "back_to_home": "Volver a la página de inicio"
+        "back_to_home": "Volver a la página de inicio",
+        "show_chapters": "Capítulos"
     },
     "titles": {
         "feed": "Feed",
diff --git a/src/locales/fr.json b/src/locales/fr.json
index 7ad44569..b69811ec 100644
--- a/src/locales/fr.json
+++ b/src/locales/fr.json
@@ -102,7 +102,8 @@
         "follow_link": "Ouvrir le lien",
         "time_code": "Horodatage (en secondes)",
         "rename_playlist": "Renommer la liste de lecture",
-        "new_playlist_name": "Nouveau nom de la liste de lecture"
+        "new_playlist_name": "Nouveau nom de la liste de lecture",
+        "show_chapters": "Chapitres"
     },
     "player": {
         "watch_on": "Regarder sur {0}"
diff --git a/src/locales/he.json b/src/locales/he.json
index bfc00e14..8095f089 100644
--- a/src/locales/he.json
+++ b/src/locales/he.json
@@ -102,7 +102,11 @@
         "loop_this_video": "ניגון הסרטון בלולאה",
         "minimize_recommendations": "מזעור המלצות",
         "rename_playlist": "שינוי שם רשימת נגינה",
-        "new_playlist_name": "שם לרשימת נגינה חדשה"
+        "new_playlist_name": "שם לרשימת נגינה חדשה",
+        "show_chapters": "פרקים",
+        "skip_intro": "דילוג על הפוגה/הנפשת הקדמה",
+        "skip_outro": "דילוג על כרטיסי סיום/קרדיטים",
+        "skip_filler_tangent": "דילוג על משיקים למילוי"
     },
     "comment": {
         "pinned_by": "ננעץ על ידי",
diff --git a/src/locales/hr.json b/src/locales/hr.json
index d2cf8080..d0d3368d 100644
--- a/src/locales/hr.json
+++ b/src/locales/hr.json
@@ -114,7 +114,8 @@
         "with_timecode": "Dijeli s vremenskim kodom",
         "rename_playlist": "Preimenuj popis snimaka",
         "new_playlist_name": "Ime novog popisa snimaka",
-        "share": "Dijeli"
+        "share": "Dijeli",
+        "show_chapters": "Poglavlja"
     },
     "player": {
         "watch_on": "Gledaj na {0}"
@@ -130,7 +131,7 @@
         "playlists": "Playliste",
         "account": "Račun",
         "instance": "Instanca",
-        "player": "Player"
+        "player": "Plejer"
     },
     "login": {
         "password": "Lozinka",
diff --git a/src/locales/id.json b/src/locales/id.json
index 1393b656..efb17982 100644
--- a/src/locales/id.json
+++ b/src/locales/id.json
@@ -105,7 +105,8 @@
         "follow_link": "Ikuti tautan",
         "copy_link": "Salin tautan",
         "time_code": "Kode waktu (dalam detik)",
-        "back_to_home": "Kembali ke beranda"
+        "back_to_home": "Kembali ke beranda",
+        "show_chapters": "Bab"
     },
     "comment": {
         "pinned_by": "Dipasangi pin oleh",
diff --git a/src/locales/it.json b/src/locales/it.json
index f7667acd..d89c2b1f 100644
--- a/src/locales/it.json
+++ b/src/locales/it.json
@@ -89,7 +89,8 @@
         "follow_link": "Apri il collegamento",
         "with_timecode": "Condividi con marca temporale",
         "new_playlist_name": "Nuovo nome dalla playlist",
-        "rename_playlist": "Rinomina la playlist"
+        "rename_playlist": "Rinomina la playlist",
+        "show_chapters": "Capitoli"
     },
     "player": {
         "watch_on": "Guarda su {0}"
diff --git a/src/locales/ko.json b/src/locales/ko.json
index 09683dfe..e7985b73 100644
--- a/src/locales/ko.json
+++ b/src/locales/ko.json
@@ -16,7 +16,7 @@
         "enable_sponsorblock": "Sponsorblock 활성화",
         "skip_outro": "최종 화면/크레딧 스킵",
         "skip_preview": "미리보기/요약 스킵",
-        "uses_api_from": "의 API를 사용: ",
+        "uses_api_from": "해당 API 사용: ",
         "skip_non_music": "음악: 음악이 아닌 구간 스킵",
         "skip_self_promo": "셀프 프로모션 스킵",
         "buffering_goal": "버퍼링 목표 (초)",
@@ -24,10 +24,10 @@
         "store_watch_history": "시청 기록 저장",
         "language_selection": "언어 선택",
         "no": "아니요",
-        "loop_this_video": "이 영상 반복",
-        "auto_play_next_video": "다음 영상 자동 재생",
+        "loop_this_video": "이 동영상 반복",
+        "auto_play_next_video": "다음 동영상 자동 재생",
         "minimize_description": "설명 최소화",
-        "show_recommendations": "추천 영상 표시",
+        "show_recommendations": "추천 동영상 표시",
         "sort_by": "정렬:",
         "most_recent": "가장 최신",
         "channel_name_asc": "채널 이름 (A-Z)",
@@ -40,31 +40,64 @@
         "instance_selection": "인스턴스 선택",
         "import_from_json": "JSON/CSV에서 가져오기",
         "light": "라이트",
-        "autoplay_video": "영상 자동 재생",
+        "autoplay_video": "동영상 자동 재생",
         "default_quality": "기본 화질",
         "default_homepage": "기본 홈페이지",
-        "instances_list": "인스턴스 리스트",
+        "instances_list": "인스턴스 목록",
         "show_more": "더 보기",
         "export_to_json": "JSON으로 내보내기",
         "donations": "기부",
         "show_description": "설명 표시",
         "disable_lbry": "LBRY 스트리밍 비활성화",
         "enable_lbry_proxy": "LBRY 프록시 활성화",
-        "minimize_recommendations": "추천 영상 최소화",
+        "minimize_recommendations": "추천 동영상 최소화",
         "loading": "로딩...",
         "view_ssl_score": "SSL 점수 보기",
         "skip_intro": "중간 휴식/인트로 애니메이션 스킵",
         "search": "검색",
         "clear_history": "기록 지우기",
         "show_replies": "답글 보기",
-        "skip_highlight": "하이라이트 스킵"
+        "skip_highlight": "하이라이트 스킵",
+        "select_playlist": "재생목록 선택",
+        "please_select_playlist": "재생목록을 선택하세요",
+        "create_playlist": "재생목록 만들기",
+        "delete_playlist": "재생목록 삭제",
+        "delete_playlist_video_confirm": "재생목록에서 동영상을 삭제하시겠습니까?",
+        "add_to_playlist": "재생목록에 추가",
+        "remove_from_playlist": "재생목록에서 제거",
+        "delete_playlist_confirm": "이 재생목록을 삭제하시겠습니까?",
+        "delete_account": "계정 삭제",
+        "logout": "이 기기에서 로그아웃",
+        "show_chapters": "챕터",
+        "download_as_txt": ".txt로 다운로드",
+        "new_playlist_name": "새 재생목록 이름",
+        "rename_playlist": "재생목록 이름 변경",
+        "share": "공유",
+        "copy_link": "링크 복사",
+        "time_code": "시작 시간 (초)",
+        "follow_link": "링크 열기",
+        "piped_link": "Piped 링크",
+        "with_timecode": "시작 시간을 포함하여 공유",
+        "skip_filler_tangent": "잡담/농담 스킵",
+        "show_markers": "플레이어에 마커 표시",
+        "reset_preferences": "설정 초기화",
+        "confirm_reset_preferences": "설정을 초기화 하시겠습니까?",
+        "restore_preferences": "설정 복원",
+        "backup_preferences": "설정 백업",
+        "back_to_home": "홈으로 가기",
+        "minimize_recommendations_default": "기본적으로 추천 동영상 최소화",
+        "invalidate_session": "모든 기기에서 로그아웃",
+        "instance_auth_selection": "인증 인스턴스 선택",
+        "different_auth_instance": "인증에 다른 인스턴스 사용",
+        "clone_playlist": "재생목록 복제",
+        "clone_playlist_success": "성공적으로 복제되었습니다!"
     },
     "titles": {
         "feed": "피드",
         "preferences": "설정",
         "history": "시청 기록",
         "subscriptions": "구독",
-        "trending": "트렌드",
+        "trending": "인기",
         "login": "로그인",
         "register": "가입",
         "playlists": "재생목록",
@@ -76,26 +109,52 @@
         "watch_on": "에서 보기 {0}"
     },
     "comment": {
-        "pinned_by": "에 의해 고정됨"
+        "pinned_by": "에 의해 고정됨",
+        "disabled": "업로더가 댓글을 비활성화했습니다.",
+        "user_disabled": "설정에서 댓글을 비활성화했습니다.",
+        "loading": "댓글 로드 중..."
     },
     "preferences": {
         "has_cdn": "CDN 여부?",
         "ssl_score": "SSL 점수",
         "instance_locations": "인스턴스 위치",
-        "instance_name": "인스턴스 이름"
+        "instance_name": "인스턴스 이름",
+        "registered_users": "등록 된 사용자",
+        "version": "버전",
+        "up_to_date": "최신 버전?"
     },
     "login": {
         "username": "유저 이름",
         "password": "비밀번호"
     },
     "video": {
-        "videos": "영상",
+        "videos": "동영상",
         "views": "{views} 조회수",
         "watched": "시청함",
         "sponsor_segments": "스폰서 세그먼트",
-        "ratings_disabled": "등급 비활성화됨"
+        "ratings_disabled": "등급 비활성화됨",
+        "live": "{0} 라이브",
+        "shorts": "Shorts",
+        "chapters": "챕터"
     },
     "search": {
-        "did_you_mean": "이것을 찾으셨나요: {0}?"
+        "did_you_mean": "이것을 찾으셨나요: {0}?",
+        "all": "YouTube: 전체",
+        "music_playlists": "YT Music: 재생목록",
+        "videos": "YouTube: 동영상",
+        "music_songs": "YT Music: 음악",
+        "channels": "YouTube: 채널",
+        "playlists": "YouTube: 재생목록",
+        "music_videos": "YT Music: 동영상",
+        "music_albums": "YT Music: 앨범"
+    },
+    "info": {
+        "cannot_copy": "복사할 수 없습니다!",
+        "copied": "복사되었습니다!",
+        "preferences_note": "참고: 설정은 브라우저 로컬 저장소에 저장됩니다. 브라우저 데이터를 삭제하면 초기화됩니다.",
+        "page_not_found": "페이지를 찾을 수 없음"
+    },
+    "subscriptions": {
+        "subscribed_channels_count": "구독: {0}"
     }
 }
diff --git a/src/locales/nb_NO.json b/src/locales/nb_NO.json
index 1759e37f..10309b02 100644
--- a/src/locales/nb_NO.json
+++ b/src/locales/nb_NO.json
@@ -80,7 +80,17 @@
         "reset_preferences": "Tilbakestill innstillinger",
         "backup_preferences": "Innstillinger for sikkerhetskopiering",
         "confirm_reset_preferences": "Tilbakestill alle innstillingene?",
-        "restore_preferences": "Gjenopprett innstillinger"
+        "restore_preferences": "Gjenopprett innstillinger",
+        "show_chapters": "Kapitler",
+        "rename_playlist": "Gi spillelisten ny navn",
+        "new_playlist_name": "Nytt spillelistenavn",
+        "share": "Del",
+        "with_timecode": "Del med tidskode",
+        "piped_link": "Piped-lenke",
+        "follow_link": "Følg lenke",
+        "copy_link": "Kopier lenke",
+        "time_code": "Tidskode (sekunder)",
+        "back_to_home": "Tilbake til startsiden"
     },
     "player": {
         "watch_on": "Vis på {0}"
@@ -143,5 +153,11 @@
     },
     "information": {
         "preferences_note": "Merk: Innstillinger lagres lokalt i din nettleser. Sletting av nettleserdata sletter dem."
+    },
+    "info": {
+        "preferences_note": "Merk: Innstillinger spares i nettleserens lokallager. Sletting av nettleserdata tilbakestiller dem.",
+        "cannot_copy": "Kan ikke kopiere",
+        "page_not_found": "Fant ikke siden",
+        "copied": "Kopiert"
     }
 }
diff --git a/src/locales/pt_PT.json b/src/locales/pt_PT.json
index dc234026..ddf91038 100644
--- a/src/locales/pt_PT.json
+++ b/src/locales/pt_PT.json
@@ -7,7 +7,10 @@
         "trending": "Tendências",
         "login": "Iniciar Sessão",
         "register": "Registar",
-        "playlists": "Listas de Reprodução"
+        "playlists": "Listas de Reprodução",
+        "account": "Conta",
+        "instance": "Instância",
+        "player": "Reprodutor"
     },
     "actions": {
         "view_subscriptions": "Ver Subscrições",
@@ -86,7 +89,20 @@
         "instance_auth_selection": "Selecção da Instância para Autenticação",
         "invalidate_session": "Terminar sessão em todos os aparelhos",
         "clone_playlist": "Clonar Lista de Reprodução",
-        "clone_playlist_success": "Clonada com sucesso!"
+        "clone_playlist_success": "Clonada com sucesso!",
+        "rename_playlist": "Renomear",
+        "restore_preferences": "Restaurar configurações",
+        "confirm_reset_preferences": "Tem a certeza que quer redefinir as suas configurações?",
+        "new_playlist_name": "Novo nome da lista de reprodução",
+        "share": "Partilhar",
+        "with_timecode": "Partilhar com código de tempo",
+        "piped_link": "Ligação do Piped",
+        "follow_link": "Seguir ligação",
+        "copy_link": "Copiar ligação",
+        "time_code": "Código de tempo (em segundos)",
+        "reset_preferences": "Redefinir preferências",
+        "backup_preferences": "Exportar configurações",
+        "back_to_home": "Voltar ao início"
     },
     "comment": {
         "pinned_by": "Afixado por",
@@ -133,5 +149,11 @@
     },
     "subscriptions": {
         "subscribed_channels_count": "Subscrito a: {0}"
+    },
+    "info": {
+        "preferences_note": "Nota: as configurações são guardadas no armazenamento local to seu navegador. Eliminar os dados de navegação irá redefini-las.",
+        "page_not_found": "Página não encontrada",
+        "copied": "Copiada!",
+        "cannot_copy": "Não foi possível copiar!"
     }
 }
diff --git a/src/locales/ru.json b/src/locales/ru.json
index 294174ab..a877fd68 100644
--- a/src/locales/ru.json
+++ b/src/locales/ru.json
@@ -7,7 +7,10 @@
         "preferences": "Настройки",
         "history": "История просмотров",
         "subscriptions": "Ваши подписки",
-        "playlists": "Плейлисты"
+        "playlists": "Плейлисты",
+        "account": "Аккаунт",
+        "player": "Плеер",
+        "instance": "Сервер"
     },
     "player": {
         "watch_on": "Смотреть на {0}"
@@ -89,7 +92,21 @@
         "different_auth_instance": "Использовать другие средства аутентификации",
         "instance_auth_selection": "Выбор средств аутентификации",
         "clone_playlist": "Клонировать плейлист",
-        "clone_playlist_success": "Клонирование прошло успешно!"
+        "clone_playlist_success": "Клонирование прошло успешно!",
+        "show_chapters": "Части",
+        "rename_playlist": "Переименовать плейлист",
+        "new_playlist_name": "Новое название плейлиста",
+        "share": "Поделиться",
+        "with_timecode": "Поделиться с отметкой времени",
+        "piped_link": "Ссылка Piped",
+        "follow_link": "Ссылка подписки",
+        "copy_link": "Скопировать ссылку",
+        "time_code": "Тайм-код (в секундах)",
+        "reset_preferences": "Сбросить настройки",
+        "confirm_reset_preferences": "Вы уверены, что хотите сбросить настройки?",
+        "backup_preferences": "Настройки бэкапов",
+        "restore_preferences": "Восстановить настройки",
+        "back_to_home": "Вернутся на главную"
     },
     "comment": {
         "pinned_by": "Прикреплено пользователем",
@@ -133,5 +150,11 @@
     },
     "subscriptions": {
         "subscribed_channels_count": "Подписан на: {0}"
+    },
+    "info": {
+        "preferences_note": "Примечание: настройки сохранены в локальном хранилище браузера. При удалении данных браузера они будут удалены.",
+        "copied": "Скопировано!",
+        "cannot_copy": "Не получилось скопировать!",
+        "page_not_found": "Страница не найдена"
     }
 }
diff --git a/src/locales/sr.json b/src/locales/sr.json
index ea0443be..8726cd48 100644
--- a/src/locales/sr.json
+++ b/src/locales/sr.json
@@ -78,9 +78,18 @@
         "delete_playlist_confirm": "Избрисати овај попис снимака?",
         "please_select_playlist": "Молим вас одаберите попис снимака",
         "show_markers": "Prikaži obeleživače na plejeru",
-        "delete_account": "Obriši nalog",
+        "delete_account": "Обриши налог",
         "logout": "Одјава са овог уређаја",
-        "minimize_recommendations_default": "Umanji preporuke kao podrazumevano"
+        "minimize_recommendations_default": "Умањи Препоруке као Подразумевано",
+        "download_as_txt": "Преузмите као .ткт",
+        "reset_preferences": "Ресетирајте преференције",
+        "confirm_reset_preferences": "Да ли сте сигурни да желите да ресетујете подешавања?",
+        "backup_preferences": "Спреми сигурносну копију поставки",
+        "invalidate_session": "Одјавите се са свих уређаја",
+        "different_auth_instance": "Користите другу инстанцу за аутентификацију",
+        "instance_auth_selection": "Избор инстанце аутентикације",
+        "clone_playlist": "Клонирајте листу за репродукцију",
+        "clone_playlist_success": "Успешно клонирано!"
     },
     "preferences": {
         "instance_locations": "Локација инстанце",
@@ -114,7 +123,10 @@
         "trending": "У тренду",
         "login": "Пријава",
         "subscriptions": "Праћења",
-        "playlists": "Пописи Снимака"
+        "playlists": "Пописи Снимака",
+        "account": "Рачун",
+        "instance": "Инстанца",
+        "player": "Плејер"
     },
     "comment": {
         "pinned_by": "Закачено од стране"
diff --git a/src/locales/tr.json b/src/locales/tr.json
index 6876589b..905cb832 100644
--- a/src/locales/tr.json
+++ b/src/locales/tr.json
@@ -89,7 +89,8 @@
         "piped_link": "Piped bağlantısı",
         "share": "Paylaş",
         "rename_playlist": "Oynatma listesini yeniden adlandır",
-        "new_playlist_name": "Yeni oynatma listesi adı"
+        "new_playlist_name": "Yeni oynatma listesi adı",
+        "show_chapters": "Bölümler"
     },
     "player": {
         "watch_on": "{0} üzerinde izle"
diff --git a/src/locales/zh_Hans.json b/src/locales/zh_Hans.json
index 63e00eca..cada3d7a 100644
--- a/src/locales/zh_Hans.json
+++ b/src/locales/zh_Hans.json
@@ -89,7 +89,8 @@
         "with_timecode": "用时间码分享",
         "time_code": "时间码(单位:秒)",
         "rename_playlist": "重命名播放列表",
-        "new_playlist_name": "新播放列表名"
+        "new_playlist_name": "新播放列表名",
+        "show_chapters": "章节"
     },
     "video": {
         "sponsor_segments": "赞助商部分",
diff --git a/src/locales/zh_Hant.json b/src/locales/zh_Hant.json
index fb32ef82..f4f37308 100644
--- a/src/locales/zh_Hant.json
+++ b/src/locales/zh_Hant.json
@@ -60,7 +60,17 @@
         "select_playlist": "選擇播放清單",
         "add_to_playlist": "加到播放清單",
         "delete_playlist_video_confirm": "要從播放清單中移除影片嗎?",
-        "delete_account": "刪除帳戶"
+        "delete_account": "刪除帳戶",
+        "show_chapters": "章節",
+        "download_as_txt": "以 .txt 下載",
+        "share": "分享",
+        "new_playlist_name": "播放清單的新名稱",
+        "rename_playlist": "重新命名播放清單",
+        "reset_preferences": "重設偏好設定",
+        "confirm_reset_preferences": "確定要重設偏好設定嗎?",
+        "backup_preferences": "備份偏好設定",
+        "restore_preferences": "復原偏好設定",
+        "back_to_home": "回首頁"
     },
     "titles": {
         "history": "歷史記錄",
@@ -71,7 +81,8 @@
         "login": "登入",
         "subscriptions": "訂閱內容",
         "playlists": "播放清單",
-        "account": "帳戶"
+        "account": "帳戶",
+        "player": "播放器"
     },
     "preferences": {
         "registered_users": "已註冊的使用者",
@@ -104,5 +115,11 @@
         "pinned_by": "置頂者:",
         "disabled": "上傳者停用了留言功能。",
         "loading": "留言載入中……"
+    },
+    "info": {
+        "copied": "已複製!",
+        "cannot_copy": "無法複製!",
+        "page_not_found": "找不到頁面",
+        "preferences_note": "註:偏好設定儲存在本機的瀏覽器的儲存空間內。如果清除瀏覽器的資料,偏好設定就會重設。"
     }
 }
diff --git a/src/main.js b/src/main.js
index 1a59d8c2..3d9d90fb 100644
--- a/src/main.js
+++ b/src/main.js
@@ -17,6 +17,9 @@ import {
     faXmark,
     faClone,
     faShare,
+    faBook,
+    faServer,
+    faDonate,
 } from "@fortawesome/free-solid-svg-icons";
 import { faGithub, faBitcoin } from "@fortawesome/free-brands-svg-icons";
 import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
@@ -39,6 +42,9 @@ library.add(
     faXmark,
     faClone,
     faShare,
+    faBook,
+    faServer,
+    faDonate,
 );
 
 import router from "@/router/router.js";
@@ -183,7 +189,7 @@ const mixin = {
             const emailRegex = /([\w-\\.]+@(?:[\w-]+\.)+[\w-]{2,4})/g;
             return string
                 .replace(urlRegex, url => {
-                    if (url.endsWith("</a>")) return url;
+                    if (url.endsWith("</a>") || url.endsWith("<a")) return url;
                     return `<a href="${url}" target="_blank">${url}</a>`;
                 })
                 .replace(emailRegex, email => {
diff --git a/yarn.lock b/yarn.lock
index 74aeab73..2d29a1d4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -25,7 +25,7 @@
     execa "^5.1.1"
     find-up "^5.0.0"
 
-"@antfu/utils@^0.5.0", "@antfu/utils@^0.5.2":
+"@antfu/utils@^0.5.2":
   version "0.5.2"
   resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.5.2.tgz#8c2d931ff927be0ebe740169874a3d4004ab414b"
   integrity sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==
@@ -997,35 +997,35 @@
   resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
   integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
 
-"@iconify/json@^2.1.108":
-  version "2.1.108"
-  resolved "https://registry.yarnpkg.com/@iconify/json/-/json-2.1.108.tgz#9dc4af162cf2a5fd078e9231199c585fff0655fd"
-  integrity sha512-7Cd15eXt493VT6APSQn+oNT3NqSnK/tfQPTqoh2K3aeHQNfVzkEmWPSyrzqWUAqOFHcA/Xtfz/pvd/25ecDbcQ==
+"@iconify/json@^2.1.118":
+  version "2.1.118"
+  resolved "https://registry.yarnpkg.com/@iconify/json/-/json-2.1.118.tgz#bb29db70d1be64a2caf8b8d340870f32c61189b6"
+  integrity sha512-mvCocCcWIIoF/IiBQS0hIMqpmXYVbZsmNM8CyQCn6jEPEEKWpW5/vK+W+qOWO7+F7Hrs3//8OyLMh131by7zSQ==
   dependencies:
     "@iconify/types" "*"
     pathe "^0.3.0"
 
-"@iconify/types@*", "@iconify/types@^1.1.0":
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/@iconify/types/-/types-1.1.0.tgz#dc15fc988b1b3fd558dd140a24ede7e0aac11280"
-  integrity sha512-Jh0llaK2LRXQoYsorIH8maClebsnzTcve+7U3rQUSnC11X4jtPnFuyatqFLvMxZ8MLG8dB4zfHsbPfuvxluONw==
+"@iconify/types@*", "@iconify/types@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57"
+  integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==
 
-"@iconify/utils@^1.0.33":
-  version "1.0.33"
-  resolved "https://registry.yarnpkg.com/@iconify/utils/-/utils-1.0.33.tgz#9952ecae79e3b1685b83c58159c1d48959f6105a"
-  integrity sha512-vGeAqo7aGPxOQmGdVoXFUOuyN+0V7Lcrx2EvaiRjxUD1x6Om0Tvq2bdm7E24l2Pz++4S0mWMCVFXe/17EtKImQ==
+"@iconify/utils@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@iconify/utils/-/utils-2.0.0.tgz#2a807c79b2dea549a014166c4311961935d25780"
+  integrity sha512-thvwZ6m3frWJiOYwRdHPSPGC25rmyvDl0vXdQ8ocRJZx31m8Pn4y7V1mTc5UReR6MiAj+hrV2UPZQjx7zI960g==
   dependencies:
     "@antfu/install-pkg" "^0.1.0"
-    "@antfu/utils" "^0.5.0"
-    "@iconify/types" "^1.1.0"
+    "@antfu/utils" "^0.5.2"
+    "@iconify/types" "^2.0.0"
     debug "^4.3.4"
     kolorist "^1.5.1"
-    local-pkg "^0.4.1"
+    local-pkg "^0.4.2"
 
-"@intlify/bundle-utils@next":
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-3.1.0.tgz#42bff44116bdb49621146cd5622c4c45019c8862"
-  integrity sha512-ghlJ0kR2cCQ8D+poKknC0Xx0ncOt3J3os7CcIAqqIWVF7k6AtGoCDnIru+YzlZcvFRNmP9wEZ7jKliojCdAWNg==
+"@intlify/bundle-utils@^3.2.1":
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-3.2.1.tgz#f1a00fb31716567c8da63fbb351c3199ca12d467"
+  integrity sha512-rf4cLBOnbqmpXVcCdcYHilZpMt1m82syh3WLBJlZvGxN2KkH9HeHVH4+bnibF/SDXCHNh6lM6wTpS/qw+PkcMg==
   dependencies:
     "@intlify/message-compiler" next
     "@intlify/shared" next
@@ -1076,12 +1076,12 @@
   resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.2.2.tgz#5011be9ca2b4ab86f8660739286e2707f9abb4a5"
   integrity sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==
 
-"@intlify/vite-plugin-vue-i18n@^6.0.1":
-  version "6.0.1"
-  resolved "https://registry.yarnpkg.com/@intlify/vite-plugin-vue-i18n/-/vite-plugin-vue-i18n-6.0.1.tgz#6beaedc351b6a9fe37f9f23a43c200c56d2c34b6"
-  integrity sha512-FFVcxVU4bR9vdDLNbltM5mrhndnXMErO01i0RrpdyMegEt3Nu/YLoH0sFdjRun7/RY4vaEnhTnFvVf9uO0dQvg==
+"@intlify/vite-plugin-vue-i18n@^6.0.3":
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/@intlify/vite-plugin-vue-i18n/-/vite-plugin-vue-i18n-6.0.3.tgz#57a6900de02a9829e52b16bf072768534c7664ef"
+  integrity sha512-6SgNzPAOCR90wvt368lKzi7f/5ZEWJn22UCGvhFsP3XvKqlF3cVzojahgQ6o+LTdCkExeM6wPgd+haFf28E9VQ==
   dependencies:
-    "@intlify/bundle-utils" next
+    "@intlify/bundle-utils" "^3.2.1"
     "@intlify/shared" next
     "@rollup/pluginutils" "^4.2.0"
     debug "^4.3.1"
@@ -1273,165 +1273,168 @@
   resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756"
   integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==
 
-"@unocss/astro@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/astro/-/astro-0.45.21.tgz#076bd99b38cc666dfb851f49f5cfe517e6529e30"
-  integrity sha512-6lsDQu6nBX5CZZ+JPqAdp9ypkZrzi6NuBgyjZtChCoLhwEB2kNDCg7Qwu93Ee7/TT8MYAiANar9N+U2EuxzcKA==
+"@unocss/astro@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/astro/-/astro-0.45.26.tgz#2d3af08aa91744ee6003b827a258fd781d6736dc"
+  integrity sha512-jAdbYNwjyzh05B4B7lhuHYmkNfmIZsQGhRNXogOx0t1BMzRZg9jID5xsJiujaElQL6ll53pbuRRyGV80o75n0Q==
   dependencies:
-    "@unocss/core" "0.45.21"
-    "@unocss/reset" "0.45.21"
-    "@unocss/vite" "0.45.21"
+    "@unocss/core" "0.45.26"
+    "@unocss/reset" "0.45.26"
+    "@unocss/vite" "0.45.26"
 
-"@unocss/cli@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/cli/-/cli-0.45.21.tgz#5b908d314c122906b1c8890b8933ebe998f2928a"
-  integrity sha512-iyeunJpb4x0mJ7gtHT/3M0FDER6T03RZ2CCfiydRoxE9jUCfrk6cXO0CT4lt86Jr6+NIjw5gncMuvDXzjDe3fw==
+"@unocss/cli@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/cli/-/cli-0.45.26.tgz#8e3c443c98a5d9cb1040411660f98d86ac60049b"
+  integrity sha512-pev56gZRYow+/38TfSVMVWmtgl4UGNrgJULqHhfXxHn/CjiG+wJ95/PLYbY/GIZRXy4ttpsVU/iF/5uRvvJ3RA==
   dependencies:
-    "@unocss/config" "0.45.21"
-    "@unocss/core" "0.45.21"
-    "@unocss/preset-uno" "0.45.21"
+    "@ampproject/remapping" "^2.2.0"
+    "@rollup/pluginutils" "^4.2.1"
+    "@unocss/config" "0.45.26"
+    "@unocss/core" "0.45.26"
+    "@unocss/preset-uno" "0.45.26"
     cac "^6.7.14"
     chokidar "^3.5.3"
     colorette "^2.0.19"
     consola "^2.15.3"
-    fast-glob "^3.2.11"
-    pathe "^0.3.5"
+    fast-glob "^3.2.12"
+    magic-string "^0.26.3"
+    pathe "^0.3.7"
     perfect-debounce "^0.1.3"
 
-"@unocss/config@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/config/-/config-0.45.21.tgz#9c4593e71b1596fdd50743c1a247dc3ce70028ec"
-  integrity sha512-EXHdUwwKQ0Y9MizXpfGoCL8RRPoZ2d0l5uYeyB2qETCcwjm2pM5qodEssll/B4mHNfjv51ywsnSSAwHP7GR+8A==
+"@unocss/config@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/config/-/config-0.45.26.tgz#be2fe98a355c707edc14b09219f5f5051330fd63"
+  integrity sha512-bmNlYoGl4oHdmrb6TwuiVbVShuT3TsYJQ6MPXnVipPkAJpyJ47uU6ZAfDMqwCU0AqsLah3hSDQpDIJL5j+9tug==
   dependencies:
-    "@unocss/core" "0.45.21"
+    "@unocss/core" "0.45.26"
     unconfig "^0.3.6"
 
-"@unocss/core@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/core/-/core-0.45.21.tgz#ae9be954459d8df9c7eac3b307918136c5f8253a"
-  integrity sha512-9yvgEYHFy6NFQwiQ0fEMg3QUGvcHfXbSmZszupa8ojpbR7UM26Ng+RY/Tyx1zh9HBaS7N+73z7u6gcygc7mUJA==
+"@unocss/core@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/core/-/core-0.45.26.tgz#529e729d302e92b3dc1f0dee9b361c0c43235a01"
+  integrity sha512-V7lNAXy1Ou2+UsD8n8a0ynE7BPuMtZSn6dQtrhNvtkstEBZtBAvlGM07wnSqwZfYeKs8k/MA6Z7S0yJKQzcl1Q==
 
-"@unocss/inspector@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/inspector/-/inspector-0.45.21.tgz#79929569a4072fb9543d601292e64c445d10646c"
-  integrity sha512-NgtlIt8e1Zjc9Fh19RTBbo9asgXfK00kq00khngGfvjdQu+MMGsjGPz/PYkFrAdjcXVxyV1aKr0PKXQr2e6ZOA==
+"@unocss/inspector@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/inspector/-/inspector-0.45.26.tgz#437ba058b177d591547b2400138cfe7d5752fac7"
+  integrity sha512-rteTaMVWstGlCG5+k744kFzQLYAWgCf2ys2CRfm6SX7YC2JGBmELCwSABGrylkyItTnH50ayZcDk21GKEfC/Mw==
   dependencies:
     gzip-size "^6.0.0"
     sirv "^2.0.2"
 
-"@unocss/preset-attributify@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/preset-attributify/-/preset-attributify-0.45.21.tgz#91a2efe19dbf100b149654d63187e0ffc5764351"
-  integrity sha512-CdS2YUyHH1WGBlcGcbVqcwiGL4u7QL8lGnB1wPRPiCF3c3JEHVQxVP7g6MwAThU/6RRKZDaReuZkhhUswBFysA==
+"@unocss/preset-attributify@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/preset-attributify/-/preset-attributify-0.45.26.tgz#48c898c049daa2acbaeb179f95df710702196a32"
+  integrity sha512-+BA27/d+IEJtt/P7+fHUl/OYJNhSVBoCRxIO6JiQhEw36n821UMVd9CdnfxPBEBIaS2fXQvNF4yO5jnr4Wj5Qw==
   dependencies:
-    "@unocss/core" "0.45.21"
+    "@unocss/core" "0.45.26"
 
-"@unocss/preset-icons@0.45.21", "@unocss/preset-icons@^0.45.13":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/preset-icons/-/preset-icons-0.45.21.tgz#eebdfaabe85905e2a3a2fcdb965518571c1f9d02"
-  integrity sha512-7DyE2eE/pprJYVUGSD3Hlrq/me2I8jJryd9QDoB8aEOgWmmhUGn2f9A34jU0109LtUH1QBIolufVMq3i/fJUag==
+"@unocss/preset-icons@0.45.26", "@unocss/preset-icons@^0.45.25":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/preset-icons/-/preset-icons-0.45.26.tgz#e816e3114ab9ed666bcdf92024de466075935a59"
+  integrity sha512-PL2Fi6KGYZAY9vNyEC+EBDqSYaiXEuUaTkPOaCVrEsig0E5DOm62A5FmJ/0vHmNSXEOVqV17jiDKp+fNM/h61g==
   dependencies:
-    "@iconify/utils" "^1.0.33"
-    "@unocss/core" "0.45.21"
+    "@iconify/utils" "^2.0.0"
+    "@unocss/core" "0.45.26"
     ohmyfetch "^0.4.18"
 
-"@unocss/preset-mini@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/preset-mini/-/preset-mini-0.45.21.tgz#88165cb31af3d2a2bbc1222dc193db355f486274"
-  integrity sha512-rEKAueN9eLQRciyzlYSiYCHwfCZc1zhOcbYP+v20PDOhCee80fjUCUJSZcdSZstBrtLwDJ2V3FVXNRjHeq8aNA==
+"@unocss/preset-mini@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/preset-mini/-/preset-mini-0.45.26.tgz#11659ea15415cd9dd75f6d4750e8fba1faac427d"
+  integrity sha512-Kab6F2pZHzJudGene6NwGMYA96fuU8gNjCVouSd6oqFF1ZhEBxkQOR56TRjppyCi0MU89hciV5T6kcVZDquGUw==
   dependencies:
-    "@unocss/core" "0.45.21"
+    "@unocss/core" "0.45.26"
 
-"@unocss/preset-tagify@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/preset-tagify/-/preset-tagify-0.45.21.tgz#9944b17f1b3efc9f779f7b101d0e1882f31aaa1e"
-  integrity sha512-o1I8WcNt2OuAQrMX8kq/OM2Ag/S+jQkfWOn9Az6yNvZKfTyyz8RMJ3+wkBzk8u2L9mwdvabaWUDIDPrKtCjQvA==
+"@unocss/preset-tagify@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/preset-tagify/-/preset-tagify-0.45.26.tgz#c78842adf2ead4dd7d0c766a852ca6f701b7a62d"
+  integrity sha512-4zhdD/EKW5BYsiKO8PQdUXU4I5riJNM9ykEyhESFaCM6/+3a8GRvrnON57cRuiqX5LvJeXfbtGXQCOdMGEIi4Q==
   dependencies:
-    "@unocss/core" "0.45.21"
+    "@unocss/core" "0.45.26"
 
-"@unocss/preset-typography@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/preset-typography/-/preset-typography-0.45.21.tgz#4cc7ac18b789fee10b952cbe2607a586983b0fca"
-  integrity sha512-D+d1IYq50Bh9WvFD/ILNWYuOrPi1dCHEDAv84Ijx+pt+Iwd/jDIAg3cJ0ukT6SZdRW+3lFa4nDhghQg+6CIO3g==
+"@unocss/preset-typography@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/preset-typography/-/preset-typography-0.45.26.tgz#a547272b5118b71e4feb0c534a45664fa51e62f4"
+  integrity sha512-HBkox5t1AKQ3SwMbvDhHDaWBOsP3Z1RW67oyVpEgipZHL5SYN9YwGkveaj6J0SJDJMtYRwFkKD5Zvd4KvnzSfQ==
   dependencies:
-    "@unocss/core" "0.45.21"
+    "@unocss/core" "0.45.26"
 
-"@unocss/preset-uno@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/preset-uno/-/preset-uno-0.45.21.tgz#c25394f8bf19dc339c3e151f6401575b19c639ae"
-  integrity sha512-DGDSXY+YkLM8bbo9nVShJ0/JHXcGb68loizPpxCq4pvcqU0L7y3UtfiT4mXPuO/RgoGuLE5JXtnWDIP5dFLzsA==
+"@unocss/preset-uno@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/preset-uno/-/preset-uno-0.45.26.tgz#39aac369a27ecb788d2a0aabff01739166489dc0"
+  integrity sha512-Am4Ymz7tKwufm6QP2GxT8oIQ1Qez+ikk5miZ94K5IpMguVqMP1FwAu8aFtoItH5jVuDb4JxyZyo66oSFd4+h8g==
   dependencies:
-    "@unocss/core" "0.45.21"
-    "@unocss/preset-mini" "0.45.21"
-    "@unocss/preset-wind" "0.45.21"
+    "@unocss/core" "0.45.26"
+    "@unocss/preset-mini" "0.45.26"
+    "@unocss/preset-wind" "0.45.26"
 
-"@unocss/preset-web-fonts@0.45.21", "@unocss/preset-web-fonts@^0.45.7":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/preset-web-fonts/-/preset-web-fonts-0.45.21.tgz#f80faa6df8c3a60f50cf8f250fcda90e67cf4409"
-  integrity sha512-LwEgY6g89h8Do65tvhpD8Uv0SMwmggR887VfYHUBlTWy2gM2Yj0Lxm+KWuFjCNMQhzAGZInoFL8VXHl8ORME7Q==
+"@unocss/preset-web-fonts@0.45.26", "@unocss/preset-web-fonts@^0.45.25":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/preset-web-fonts/-/preset-web-fonts-0.45.26.tgz#b0cbf9c73af3c1ff9690ed3bfd5a95c1ecc14fd0"
+  integrity sha512-6J3VjrYcYGwVDzdcKE0NYQhvuXkS/Fo54ZlEWScVOSygvBYOEsObo+6Vs9Q1yMbVuVnNrt3R38/KMQFqPEWXKw==
   dependencies:
-    "@unocss/core" "0.45.21"
+    "@unocss/core" "0.45.26"
     ohmyfetch "^0.4.18"
 
-"@unocss/preset-wind@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/preset-wind/-/preset-wind-0.45.21.tgz#1151f9e66ed29542eb1ff36aa63cd1e29afb41d2"
-  integrity sha512-1Xn9nw7OhgfTncMeujRxf6aJoLFFLRtJFx6r0/+Mn6I7nf3b5NNmkqSbM78qJZwN9Y9oe+OnRDWHd77Cgk1nwA==
+"@unocss/preset-wind@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/preset-wind/-/preset-wind-0.45.26.tgz#708d80c27a54c779740d0c65a205683a126c4b74"
+  integrity sha512-/7YnUIXBkakeNzDpxsOzoHgVKL/nH9kyKHT1hSLj60IlAoN+YfoOwpCOn+taysovjiGmLIKdeEuOAN3HuEi1aw==
   dependencies:
-    "@unocss/core" "0.45.21"
-    "@unocss/preset-mini" "0.45.21"
+    "@unocss/core" "0.45.26"
+    "@unocss/preset-mini" "0.45.26"
 
-"@unocss/reset@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/reset/-/reset-0.45.21.tgz#026c871bec05702a22dd214a4d274b5c4ff3b018"
-  integrity sha512-9JyC8P8qci1fuUvIOZXfO0jsug2YOUlFq8bx904J4sQ33qFl4NhkrpXAU+kFs0HS5SvgUx7BDfLY7W7BGG3RxQ==
+"@unocss/reset@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/reset/-/reset-0.45.26.tgz#cf4bf80c1a9c7405ac0b8b4975738eabda222d04"
+  integrity sha512-9X0cSvGPXdZ1KAuiWzFWtcoyfC7b8j4GYHr4lDXRkPC5oI3CJhw4WcdvzTHVPqOX2CKqq731H4GhcQ5c5LBuHA==
 
-"@unocss/scope@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/scope/-/scope-0.45.21.tgz#202cd76135b60b46affc5de4a35ef7ee0ca99b06"
-  integrity sha512-oyi6onHnUrdieQI19qKlkMXqykeU5i6mmuHg1VCVSlvh2QQhHypacIAVSohK88DQucVIfzHTWxBqHxZGHCs5Ag==
+"@unocss/scope@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/scope/-/scope-0.45.26.tgz#2affb43950fbb978c55d6449eef641dd51de8f87"
+  integrity sha512-t5ADmEW9Rhf4Ku0DHwgPoy2mTU0eRrpx6QfXFWtWC+ZtHsjOcC9RXgWYXKZmINtiY+FzQ8A+v/k0wlIuvhJF7g==
 
-"@unocss/transformer-attributify-jsx@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/transformer-attributify-jsx/-/transformer-attributify-jsx-0.45.21.tgz#fec5612b6a6344083dbf081682482280dee1910e"
-  integrity sha512-5Fa0srxIB3qanlDCZKhVLl+RfZO4NjS6zuEm+tCCEFp7sSWSdoXWU/dpfDowboqht+B9hGrH/TNeghrxa5O9Wg==
+"@unocss/transformer-attributify-jsx@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/transformer-attributify-jsx/-/transformer-attributify-jsx-0.45.26.tgz#db8ae47be30f5dcfdf8681a50c0562ebf03e88bf"
+  integrity sha512-fuNnbqe/Ld07fZLZhNtJb6HpSNf6Lw+HlPGdDNzKdbOVUkJwCmBuRifySLkx4HMCn+ld/iniZvyqUgRDLOVanA==
   dependencies:
-    "@unocss/core" "0.45.21"
+    "@unocss/core" "0.45.26"
 
-"@unocss/transformer-compile-class@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/transformer-compile-class/-/transformer-compile-class-0.45.21.tgz#2d79ebec9ef24307ac69e5f5ee5169a7cdc092fd"
-  integrity sha512-NGB3VMV3DIzBqBA0jC6B29Tv8h7LlDe9oduDliM5ex6sA2l09FzrJNfyEVA1AxGUF2uE8T+1AJsnlclMsvM0hQ==
+"@unocss/transformer-compile-class@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/transformer-compile-class/-/transformer-compile-class-0.45.26.tgz#a2cbdf4880c5f8cdcf80c79869db40e05cea26b0"
+  integrity sha512-cuDUnNrXcqMezuHcT74tBWdbA55hKTS+g8iESaREnRbdCfnmxTSO/GyrRPsQB5ULL465ENwiOaXJhKkLSfTQqw==
   dependencies:
-    "@unocss/core" "0.45.21"
+    "@unocss/core" "0.45.26"
 
-"@unocss/transformer-directives@0.45.21", "@unocss/transformer-directives@^0.45.7":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/transformer-directives/-/transformer-directives-0.45.21.tgz#effe3353c4675a44d12cb853cb7ac65789561131"
-  integrity sha512-bF7UThxj81+MM5ZZ0LLaEFhiexSbftF+Ld+AxHhe0MtaBo1oZp8z9AQrCCfQC1rJY5zAcbBGjTJO5BSVsvIDlQ==
+"@unocss/transformer-directives@0.45.26", "@unocss/transformer-directives@^0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/transformer-directives/-/transformer-directives-0.45.26.tgz#5d8dfc0ab191d7bc9e8c43507d7a929a321f0703"
+  integrity sha512-9Ypquxnsp2gAAlEPhQwXIfaEVqWsLyryd0VttQy0+kzxG8koPiMkKtYsiw6vN8tsEzklVQiydLct4HCONaMzHQ==
   dependencies:
-    "@unocss/core" "0.45.21"
+    "@unocss/core" "0.45.26"
     css-tree "^2.2.1"
 
-"@unocss/transformer-variant-group@0.45.21", "@unocss/transformer-variant-group@^0.45.13":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/transformer-variant-group/-/transformer-variant-group-0.45.21.tgz#4ed0121a1af616af7cb8865ff455811ab0c90652"
-  integrity sha512-MnvZ3IDuMKGEmAcQZ2SOJz9/daLKl/+MPiJVYPPT01y71e0yWDRUJR1YRZXcatgH60tiyPelC7u8MNNNZOoqMw==
+"@unocss/transformer-variant-group@0.45.26", "@unocss/transformer-variant-group@^0.45.25":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/transformer-variant-group/-/transformer-variant-group-0.45.26.tgz#2704b7662781ddd4405f75297c5609e606ec57e8"
+  integrity sha512-MUManbGNe1q5/dm4QLW1SbegeH/06ZbYyREfJEy7U5Ze5Npe67a1eZ4EA4b6el5Y8Bd+wpJ4xj1D+fxC6NVWJQ==
   dependencies:
-    "@unocss/core" "0.45.21"
+    "@unocss/core" "0.45.26"
 
-"@unocss/vite@0.45.21":
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/@unocss/vite/-/vite-0.45.21.tgz#3bf44805e817504470983139ef2343656dc79da0"
-  integrity sha512-BrCJMSy9i9j9mmzu2pfPFQuRPNWASxQfy3D6k+4R3c51OfKBSDcfeD7FyM866TE1gllCIFdQQH1Ay+tXkjlOMQ==
+"@unocss/vite@0.45.26":
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/@unocss/vite/-/vite-0.45.26.tgz#171dad95151341dce8a73f3b5897c9b706e75e8a"
+  integrity sha512-9BNJXBN0UG+olMbfIcVcrJgBetyO3HOP6Wx3r5Oc8iwfYSxrWQlHFF+yVJi/+oxsENfsjAgCRH7O+nF4FrXceA==
   dependencies:
     "@ampproject/remapping" "^2.2.0"
     "@rollup/pluginutils" "^4.2.1"
-    "@unocss/config" "0.45.21"
-    "@unocss/core" "0.45.21"
-    "@unocss/inspector" "0.45.21"
-    "@unocss/scope" "0.45.21"
-    "@unocss/transformer-directives" "0.45.21"
+    "@unocss/config" "0.45.26"
+    "@unocss/core" "0.45.26"
+    "@unocss/inspector" "0.45.26"
+    "@unocss/scope" "0.45.26"
+    "@unocss/transformer-directives" "0.45.26"
     magic-string "^0.26.3"
 
 "@vitejs/plugin-legacy@^1.8.2":
@@ -1450,100 +1453,100 @@
   resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz#966a6279060eb2d9d1a02ea1a331af071afdcf9e"
   integrity sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==
 
-"@vue/compiler-core@3.2.39":
-  version "3.2.39"
-  resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.39.tgz#0d77e635f4bdb918326669155a2dc977c053943e"
-  integrity sha512-mf/36OWXqWn0wsC40nwRRGheR/qoID+lZXbIuLnr4/AngM0ov8Xvv8GHunC0rKRIkh60bTqydlqTeBo49rlbqw==
+"@vue/compiler-core@3.2.40":
+  version "3.2.40"
+  resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.40.tgz#c785501f09536748121e937fb87605bbb1ada8e5"
+  integrity sha512-2Dc3Stk0J/VyQ4OUr2yEC53kU28614lZS+bnrCbFSAIftBJ40g/2yQzf4mPBiFuqguMB7hyHaujdgZAQ67kZYA==
   dependencies:
     "@babel/parser" "^7.16.4"
-    "@vue/shared" "3.2.39"
+    "@vue/shared" "3.2.40"
     estree-walker "^2.0.2"
     source-map "^0.6.1"
 
-"@vue/compiler-dom@3.2.39":
-  version "3.2.39"
-  resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.39.tgz#bd69d35c1a48fe2cea4ab9e96d2a3a735d146fdf"
-  integrity sha512-HMFI25Be1C8vLEEv1hgEO1dWwG9QQ8LTTPmCkblVJY/O3OvWx6r1+zsox5mKPMGvqYEZa6l8j+xgOfUspgo7hw==
+"@vue/compiler-dom@3.2.40":
+  version "3.2.40"
+  resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.40.tgz#c225418773774db536174d30d3f25ba42a33e7e4"
+  integrity sha512-OZCNyYVC2LQJy4H7h0o28rtk+4v+HMQygRTpmibGoG9wZyomQiS5otU7qo3Wlq5UfHDw2RFwxb9BJgKjVpjrQw==
   dependencies:
-    "@vue/compiler-core" "3.2.39"
-    "@vue/shared" "3.2.39"
+    "@vue/compiler-core" "3.2.40"
+    "@vue/shared" "3.2.40"
 
-"@vue/compiler-sfc@3.2.39":
-  version "3.2.39"
-  resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.39.tgz#8fe29990f672805b7c5a2ecfa5b05e681c862ea2"
-  integrity sha512-fqAQgFs1/BxTUZkd0Vakn3teKUt//J3c420BgnYgEOoVdTwYpBTSXCMJ88GOBCylmUBbtquGPli9tVs7LzsWIA==
+"@vue/compiler-sfc@3.2.40":
+  version "3.2.40"
+  resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.40.tgz#61823283efc84d25d9d2989458f305d32a2ed141"
+  integrity sha512-tzqwniIN1fu1PDHC3CpqY/dPCfN/RN1thpBC+g69kJcrl7mbGiHKNwbA6kJ3XKKy8R6JLKqcpVugqN4HkeBFFg==
   dependencies:
     "@babel/parser" "^7.16.4"
-    "@vue/compiler-core" "3.2.39"
-    "@vue/compiler-dom" "3.2.39"
-    "@vue/compiler-ssr" "3.2.39"
-    "@vue/reactivity-transform" "3.2.39"
-    "@vue/shared" "3.2.39"
+    "@vue/compiler-core" "3.2.40"
+    "@vue/compiler-dom" "3.2.40"
+    "@vue/compiler-ssr" "3.2.40"
+    "@vue/reactivity-transform" "3.2.40"
+    "@vue/shared" "3.2.40"
     estree-walker "^2.0.2"
     magic-string "^0.25.7"
     postcss "^8.1.10"
     source-map "^0.6.1"
 
-"@vue/compiler-ssr@3.2.39":
-  version "3.2.39"
-  resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.39.tgz#4f3bfb535cb98b764bee45e078700e03ccc60633"
-  integrity sha512-EoGCJ6lincKOZGW+0Ky4WOKsSmqL7hp1ZYgen8M7u/mlvvEQUaO9tKKOy7K43M9U2aA3tPv0TuYYQFrEbK2eFQ==
+"@vue/compiler-ssr@3.2.40":
+  version "3.2.40"
+  resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.40.tgz#67df95a096c63e9ec4b50b84cc6f05816793629c"
+  integrity sha512-80cQcgasKjrPPuKcxwuCx7feq+wC6oFl5YaKSee9pV3DNq+6fmCVwEEC3vvkf/E2aI76rIJSOYHsWSEIxK74oQ==
   dependencies:
-    "@vue/compiler-dom" "3.2.39"
-    "@vue/shared" "3.2.39"
+    "@vue/compiler-dom" "3.2.40"
+    "@vue/shared" "3.2.40"
 
 "@vue/devtools-api@^6.1.4", "@vue/devtools-api@^6.2.1":
   version "6.2.1"
   resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092"
   integrity sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==
 
-"@vue/reactivity-transform@3.2.39":
-  version "3.2.39"
-  resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.39.tgz#da6ae6c8fd77791b9ae21976720d116591e1c4aa"
-  integrity sha512-HGuWu864zStiWs9wBC6JYOP1E00UjMdDWIG5W+FpUx28hV3uz9ODOKVNm/vdOy/Pvzg8+OcANxAVC85WFBbl3A==
+"@vue/reactivity-transform@3.2.40":
+  version "3.2.40"
+  resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.40.tgz#dc24b9074b26f0d9dd2034c6349f5bb2a51c86ac"
+  integrity sha512-HQUCVwEaacq6fGEsg2NUuGKIhUveMCjOk8jGHqLXPI2w6zFoPrlQhwWEaINTv5kkZDXKEnCijAp+4gNEHG03yw==
   dependencies:
     "@babel/parser" "^7.16.4"
-    "@vue/compiler-core" "3.2.39"
-    "@vue/shared" "3.2.39"
+    "@vue/compiler-core" "3.2.40"
+    "@vue/shared" "3.2.40"
     estree-walker "^2.0.2"
     magic-string "^0.25.7"
 
-"@vue/reactivity@3.2.39":
-  version "3.2.39"
-  resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.39.tgz#e6e3615fe2288d4232b104640ddabd0729a78c80"
-  integrity sha512-vlaYX2a3qMhIZfrw3Mtfd+BuU+TZmvDrPMa+6lpfzS9k/LnGxkSuf0fhkP0rMGfiOHPtyKoU9OJJJFGm92beVQ==
+"@vue/reactivity@3.2.40":
+  version "3.2.40"
+  resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.40.tgz#ae65496f5b364e4e481c426f391568ed7d133cca"
+  integrity sha512-N9qgGLlZmtUBMHF9xDT4EkD9RdXde1Xbveb+niWMXuHVWQP5BzgRmE3SFyUBBcyayG4y1lhoz+lphGRRxxK4RA==
   dependencies:
-    "@vue/shared" "3.2.39"
+    "@vue/shared" "3.2.40"
 
-"@vue/runtime-core@3.2.39":
-  version "3.2.39"
-  resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.39.tgz#dc1faccab11b3e81197aba33fb30c9447c1d2c84"
-  integrity sha512-xKH5XP57JW5JW+8ZG1khBbuLakINTgPuINKL01hStWLTTGFOrM49UfCFXBcFvWmSbci3gmJyLl2EAzCaZWsx8g==
+"@vue/runtime-core@3.2.40":
+  version "3.2.40"
+  resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.40.tgz#e814358bf1b0ff6d4a6b4f8f62d9f341964fb275"
+  integrity sha512-U1+rWf0H8xK8aBUZhnrN97yoZfHbjgw/bGUzfgKPJl69/mXDuSg8CbdBYBn6VVQdR947vWneQBFzdhasyzMUKg==
   dependencies:
-    "@vue/reactivity" "3.2.39"
-    "@vue/shared" "3.2.39"
+    "@vue/reactivity" "3.2.40"
+    "@vue/shared" "3.2.40"
 
-"@vue/runtime-dom@3.2.39":
-  version "3.2.39"
-  resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.39.tgz#4a8cb132bcef316e8151c5ed07fc7272eb064614"
-  integrity sha512-4G9AEJP+sLhsqf5wXcyKVWQKUhI+iWfy0hWQgea+CpaTD7BR0KdQzvoQdZhwCY6B3oleSyNLkLAQwm0ya/wNoA==
+"@vue/runtime-dom@3.2.40":
+  version "3.2.40"
+  resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.40.tgz#975119feac5ab703aa9bbbf37c9cc966602c8eab"
+  integrity sha512-AO2HMQ+0s2+MCec8hXAhxMgWhFhOPJ/CyRXnmTJ6XIOnJFLrH5Iq3TNwvVcODGR295jy77I6dWPj+wvFoSYaww==
   dependencies:
-    "@vue/runtime-core" "3.2.39"
-    "@vue/shared" "3.2.39"
+    "@vue/runtime-core" "3.2.40"
+    "@vue/shared" "3.2.40"
     csstype "^2.6.8"
 
-"@vue/server-renderer@3.2.39":
-  version "3.2.39"
-  resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.39.tgz#4358292d925233b0d8b54cf0513eaece8b2351c5"
-  integrity sha512-1yn9u2YBQWIgytFMjz4f/t0j43awKytTGVptfd3FtBk76t1pd8mxbek0G/DrnjJhd2V7mSTb5qgnxMYt8Z5iSQ==
+"@vue/server-renderer@3.2.40":
+  version "3.2.40"
+  resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.40.tgz#55eaac31f7105c3907e1895129bf4efb6b0ce393"
+  integrity sha512-gtUcpRwrXOJPJ4qyBpU3EyxQa4EkV8I4f8VrDePcGCPe4O/hd0BPS7v9OgjIQob6Ap8VDz9G+mGTKazE45/95w==
   dependencies:
-    "@vue/compiler-ssr" "3.2.39"
-    "@vue/shared" "3.2.39"
+    "@vue/compiler-ssr" "3.2.40"
+    "@vue/shared" "3.2.40"
 
-"@vue/shared@3.2.39":
-  version "3.2.39"
-  resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.39.tgz#302df167559a1a5156da162d8cc6760cef67f8e3"
-  integrity sha512-D3dl2ZB9qE6mTuWPk9RlhDeP1dgNRUKC3NJxji74A4yL8M2MwlhLKUC/49WHjrNzSPug58fWx/yFbaTzGAQSBw==
+"@vue/shared@3.2.40":
+  version "3.2.40"
+  resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.40.tgz#e57799da2a930b975321981fcee3d1e90ed257ae"
+  integrity sha512-0PLQ6RUtZM0vO3teRfzGi4ltLUO5aO+kLgwh4Um3THSR03rpQWLTuRCkuO5A41ITzwdWeKdPHtSARuPkoo5pCQ==
 
 acorn-jsx@^5.2.0, acorn-jsx@^5.3.1, acorn-jsx@^5.3.2:
   version "5.3.2"
@@ -2182,10 +2185,10 @@ eslint-plugin-prettier@^4.2.1:
   dependencies:
     prettier-linter-helpers "^1.0.0"
 
-eslint-plugin-vue@^9.5.1:
-  version "9.5.1"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.5.1.tgz#87ce075882cf7d824b95f46c224f91495fafcc54"
-  integrity sha512-Y0sL2RY7Xc9S8kNih9lbwHIDmewUg9bfas6WSzsOWRgDXhIHKxRBZYNAnVcXBFfE+bMWHUA5GLChl7TcTYUI8w==
+eslint-plugin-vue@^9.6.0:
+  version "9.6.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.6.0.tgz#5d1825b93d54595b1ba97106843e1d28cf3bb291"
+  integrity sha512-zzySkJgVbFCylnG2+9MDF7N+2Rjze2y0bF8GyUNpFOnT8mCMfqqtLDJkHBuYu9N/psW1A6DVbQhPkP92E+qakA==
   dependencies:
     eslint-utils "^3.0.0"
     natural-compare "^1.4.0"
@@ -2382,10 +2385,10 @@ fast-diff@^1.1.2:
   resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
   integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
 
-fast-glob@^3.2.11, fast-glob@^3.2.5:
-  version "3.2.11"
-  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
-  integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
+fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.5:
+  version "3.2.12"
+  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
+  integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
   dependencies:
     "@nodelib/fs.stat" "^2.0.2"
     "@nodelib/fs.walk" "^1.2.3"
@@ -2915,7 +2918,7 @@ levn@^0.4.1:
     prelude-ls "^1.2.1"
     type-check "~0.4.0"
 
-local-pkg@^0.4.1:
+local-pkg@^0.4.2:
   version "0.4.2"
   resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.2.tgz#13107310b77e74a0e513147a131a2ba288176c2f"
   integrity sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==
@@ -3176,10 +3179,10 @@ path-parse@^1.0.7:
   resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
   integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
 
-pathe@^0.3.0, pathe@^0.3.5:
-  version "0.3.5"
-  resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.3.5.tgz#87e5c1164ded1bebeb9dea5dab63563144062303"
-  integrity sha512-grU/QeYP0ChuE5kjU2/k8VtAeODzbernHlue0gTa27+ayGIu3wqYBIPGfP9r5xSqgCgDd4nWrjKXEfxMillByg==
+pathe@^0.3.0, pathe@^0.3.7:
+  version "0.3.8"
+  resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.3.8.tgz#3584f03fda1981a6efe8bc24623d82cbb4219acb"
+  integrity sha512-c71n61F1skhj/jzZe+fWE9XDoTYjWbUwIKVwFftZ5IOgiX44BVkTkD+/803YDgR50tqeO4eXWxLyVHBLWQAD1g==
 
 perfect-debounce@^0.1.3:
   version "0.1.3"
@@ -3772,28 +3775,28 @@ universalify@^2.0.0:
   resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
   integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
 
-unocss@^0.45.21:
-  version "0.45.21"
-  resolved "https://registry.yarnpkg.com/unocss/-/unocss-0.45.21.tgz#200e9e8361d4f6c3d0bf4c99c48c59c857798731"
-  integrity sha512-tx0FZEbRhl4pjo9LQaFXIBzSt3EqWujPdNaaLypVPIqPEwms49cXw4vi3JKDYrL9xbQ+Xf0izwPpCIwBxMprDA==
+unocss@^0.45.26:
+  version "0.45.26"
+  resolved "https://registry.yarnpkg.com/unocss/-/unocss-0.45.26.tgz#ec1a79480ce6bbb58c64199203c2263c458b4b8f"
+  integrity sha512-d8mDD6YewHfSCA2uGbBzKY/UnQRSrIDgP7gI61Ll6XY+DcLCVMn0vc1BubQGEL2K0wP9wDsI8HDR6VzDI/0w9w==
   dependencies:
-    "@unocss/astro" "0.45.21"
-    "@unocss/cli" "0.45.21"
-    "@unocss/core" "0.45.21"
-    "@unocss/preset-attributify" "0.45.21"
-    "@unocss/preset-icons" "0.45.21"
-    "@unocss/preset-mini" "0.45.21"
-    "@unocss/preset-tagify" "0.45.21"
-    "@unocss/preset-typography" "0.45.21"
-    "@unocss/preset-uno" "0.45.21"
-    "@unocss/preset-web-fonts" "0.45.21"
-    "@unocss/preset-wind" "0.45.21"
-    "@unocss/reset" "0.45.21"
-    "@unocss/transformer-attributify-jsx" "0.45.21"
-    "@unocss/transformer-compile-class" "0.45.21"
-    "@unocss/transformer-directives" "0.45.21"
-    "@unocss/transformer-variant-group" "0.45.21"
-    "@unocss/vite" "0.45.21"
+    "@unocss/astro" "0.45.26"
+    "@unocss/cli" "0.45.26"
+    "@unocss/core" "0.45.26"
+    "@unocss/preset-attributify" "0.45.26"
+    "@unocss/preset-icons" "0.45.26"
+    "@unocss/preset-mini" "0.45.26"
+    "@unocss/preset-tagify" "0.45.26"
+    "@unocss/preset-typography" "0.45.26"
+    "@unocss/preset-uno" "0.45.26"
+    "@unocss/preset-web-fonts" "0.45.26"
+    "@unocss/preset-wind" "0.45.26"
+    "@unocss/reset" "0.45.26"
+    "@unocss/transformer-attributify-jsx" "0.45.26"
+    "@unocss/transformer-compile-class" "0.45.26"
+    "@unocss/transformer-directives" "0.45.26"
+    "@unocss/transformer-variant-group" "0.45.26"
+    "@unocss/vite" "0.45.26"
 
 upath@^1.2.0:
   version "1.2.0"
@@ -3826,10 +3829,10 @@ vite-plugin-eslint@^1.8.1:
     "@types/eslint" "^8.4.5"
     rollup "^2.77.2"
 
-vite-plugin-pwa@^0.12.7:
-  version "0.12.7"
-  resolved "https://registry.yarnpkg.com/vite-plugin-pwa/-/vite-plugin-pwa-0.12.7.tgz#ff4de762926809c56aca43aad8b49a4c6727230e"
-  integrity sha512-salSwS1wWc1niNWfhX2W6gtfXmk+XESMz62w95EHLq6fSM2bDgDm1APmvq1nkDcxH6Onky7HxysCBKMzvOHXYg==
+vite-plugin-pwa@^0.12.8:
+  version "0.12.8"
+  resolved "https://registry.yarnpkg.com/vite-plugin-pwa/-/vite-plugin-pwa-0.12.8.tgz#9eee41771fd9b84bdd5fb548cf6e19ed09bfc2ae"
+  integrity sha512-pSiFHmnJGMQJJL8aJzQ8SaraZBSBPMGvGUkCNzheIq9UQCEk/eP3UmANNmS9eupuhIpTK8AdxTOHcaMcAqAbCA==
   dependencies:
     debug "^4.3.4"
     fast-glob "^3.2.11"
@@ -3880,16 +3883,16 @@ vue-router@^4.1.5:
   dependencies:
     "@vue/devtools-api" "^6.1.4"
 
-vue@^3.2.39:
-  version "3.2.39"
-  resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.39.tgz#de071c56c4c32c41cbd54e55f11404295c0dd62d"
-  integrity sha512-tRkguhRTw9NmIPXhzk21YFBqXHT2t+6C6wPOgQ50fcFVWnPdetmRqbmySRHznrYjX2E47u0cGlKGcxKZJ38R/g==
+vue@^3.2.40:
+  version "3.2.40"
+  resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.40.tgz#23f387f6f9b3a0767938db6751e4fb5900f0ee34"
+  integrity sha512-1mGHulzUbl2Nk3pfvI5aXYYyJUs1nm4kyvuz38u4xlQkLUn1i2R7nDbI4TufECmY8v1qNBHYy62bCaM+3cHP2A==
   dependencies:
-    "@vue/compiler-dom" "3.2.39"
-    "@vue/compiler-sfc" "3.2.39"
-    "@vue/runtime-dom" "3.2.39"
-    "@vue/server-renderer" "3.2.39"
-    "@vue/shared" "3.2.39"
+    "@vue/compiler-dom" "3.2.40"
+    "@vue/compiler-sfc" "3.2.40"
+    "@vue/runtime-dom" "3.2.40"
+    "@vue/server-renderer" "3.2.40"
+    "@vue/shared" "3.2.40"
 
 webidl-conversions@^4.0.2:
   version "4.0.2"