diff --git a/app/components/blog/Toc.vue b/app/components/blog/Toc.vue
index 74debb4..0942987 100644
--- a/app/components/blog/Toc.vue
+++ b/app/components/blog/Toc.vue
@@ -7,8 +7,11 @@ interface TocLink {
const props = defineProps<{
links: TocLink[];
+ isMobile?: boolean;
}>();
+const emit = defineEmits(["close"]);
+
const activeId = ref("");
const flattenLinks = (links: TocLink[]) => {
@@ -44,9 +47,9 @@ onMounted(() => {
-
+
+ class="h-fit max-h-[calc(100vh-8rem)] overflow-y-auto bg-white/40 dark:bg-slate-800/40 backdrop-blur-md border border-white/20 dark:border-white/5 p-6 rounded-3xl shadow-sm">
@@ -98,4 +101,70 @@ onMounted(() => {
+
+
+
+
+
+
+ Table Of Content
+
+
+
+
+
+
+
+
diff --git a/app/components/main/footer.vue b/app/components/main/footer.vue
index 98b2083..7e6c5dc 100644
--- a/app/components/main/footer.vue
+++ b/app/components/main/footer.vue
@@ -15,8 +15,8 @@
+ :to="contact.beianLink || 'https://beian.miit.gov.cn/'"
+ class="opacity-85 transition-all duration-200 hover:text-accent hover:opacity-100">
{{ contact.beian }}
@@ -49,6 +49,13 @@
>
+
+ © {{ new Date(siteConfig.siteMeta.startTime).getFullYear() }}-{{ new Date().getFullYear() }}
+ {{ siteConfig.siteMeta.author }} |
+ RSS |
+ Sitemap.
+
+
diff --git a/app/components/main/header.vue b/app/components/main/header.vue
index 22e4adb..567deb0 100644
--- a/app/components/main/header.vue
+++ b/app/components/main/header.vue
@@ -173,7 +173,7 @@ watch(
© 2025 RhenCloud',
+ customHtml: "",
hitokoto: {
enable: true,
type: "a&b&c&d&j",
diff --git a/app/pages/about.vue b/app/pages/about.vue
index 5458006..fa51914 100644
--- a/app/pages/about.vue
+++ b/app/pages/about.vue
@@ -23,3 +23,47 @@ const { data: content } = await useAsyncData(route.path, () => queryCollection("
+
+
diff --git a/app/pages/posts/[post].vue b/app/pages/posts/[post].vue
index 14e9c13..805e4a1 100644
--- a/app/pages/posts/[post].vue
+++ b/app/pages/posts/[post].vue
@@ -5,6 +5,8 @@ import siteConfig from "~/config";
const { path } = useRoute();
+const isTocOpen = ref(false);
+
const { data: articles, error } = await useAsyncData(`blog-post-${path}`, () =>
queryCollection("content").path(path).first(),
);
@@ -54,7 +56,7 @@ useHead({
:description="data.description"
:tags="data.tags" />
+ class="prose prose-zinc dark:prose-invert max-w-none w-full prose-headings:scroll-mt-28 prose-headings:tracking-tight prose-headings:font-bold prose-h1:text-4xl prose-h2:text-3xl prose-h3:text-2xl prose-p:leading-relaxed prose-a:no-underline hover:prose-a:underline prose-blockquote:py-1 prose-blockquote:px-6 prose-blockquote:rounded-r-xl prose-blockquote:italic prose-img:rounded-3xl prose-img:shadow-xl prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-code:before:content-none prose-code:after:content-none prose-pre:bg-slate-900 dark:prose-pre:bg-slate-950 prose-pre:rounded-2xl prose-pre:shadow-2xl prose-pre:border prose-pre:border-white/5">
No content found.
@@ -68,5 +70,51 @@ useHead({
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+