diff --git a/assets/variables.scss b/assets/variables.scss
index 95415b9..a5b23c2 100644
--- a/assets/variables.scss
+++ b/assets/variables.scss
@@ -47,3 +47,26 @@ p a {
color: rgb(var(--v-theme-primary));
}
}
+
+.slide-left-enter-active,
+.slide-left-leave-active,
+.slide-right-enter-active,
+.slide-right-leave-active {
+ transition: all 0.2s;
+}
+.slide-left-enter-from {
+ opacity: 0;
+ transform: translate(50px, 0);
+}
+.slide-left-leave-to {
+ opacity: 0;
+ transform: translate(-50px, 0);
+}
+.slide-right-enter-from {
+ opacity: 0;
+ transform: translate(-50px, 0);
+}
+.slide-right-leave-to {
+ opacity: 0;
+ transform: translate(50px, 0);
+}
\ No newline at end of file
diff --git a/middleware/transition.global.ts b/middleware/transition.global.ts
new file mode 100644
index 0000000..0893c17
--- /dev/null
+++ b/middleware/transition.global.ts
@@ -0,0 +1,8 @@
+export default defineNuxtRouteMiddleware((to, from) => {
+ if (typeof to.meta.pageTransition === 'object' && typeof from.meta.pageTransition === 'object') {
+ if (typeof to.meta.id !== 'number' || typeof from.meta.id !== 'number') return
+
+ const transition = to.meta.id > from.meta.id ? 'slide-left' : 'slide-right'
+ to.meta.pageTransition.name = from.meta.pageTransition.name = transition
+ }
+})
\ No newline at end of file
diff --git a/pages/bio.vue b/pages/bio.vue
index c857a6c..5de95d3 100644
--- a/pages/bio.vue
+++ b/pages/bio.vue
@@ -59,6 +59,14 @@
diff --git a/pages/index.vue b/pages/index.vue
index 28e32af..442f43b 100644
--- a/pages/index.vue
+++ b/pages/index.vue
@@ -31,6 +31,14 @@