@@ -152,7 +152,7 @@ watch(() => route.path, () => {
.admin-sublink:hover { background: rgb(24 24 27 / 0.05); color: var(--fg); }
.admin-sublink.active { color: #18181b; background: rgb(24 24 27 / 0.07); font-weight: 800; }
-.fade-enter-active, .fade-leave-active { transition: opacity 0.15s ease, transform 0.15s ease; }
-.fade-enter-from { opacity: 0; transform: translateY(4px); }
+.fade-enter-active, .fade-leave-active { transition: opacity 0.12s ease; }
+.fade-enter-from { opacity: 0; }
.fade-leave-to { opacity: 0; }
diff --git a/frontend/src/layouts/PublicLayout.vue b/frontend/src/layouts/PublicLayout.vue
index 13bcb79..e417cdc 100644
--- a/frontend/src/layouts/PublicLayout.vue
+++ b/frontend/src/layouts/PublicLayout.vue
@@ -435,7 +435,7 @@ html.dark .nav-inner { box-shadow: 0 8px 30px -14px rgb(0 0 0 / 0.5); }
.menu-item--out:hover { background: rgb(220 38 38 / 0.08); color: #dc2626; }
.menu-sep { height: 1px; background: var(--hairline); margin: 0.35rem 0.25rem; }
-.fade-enter-active, .fade-leave-active { transition: opacity 0.2s ease, transform 0.2s ease; }
-.fade-enter-from { opacity: 0; transform: translateY(8px); }
+.fade-enter-active, .fade-leave-active { transition: opacity 0.15s ease; }
+.fade-enter-from { opacity: 0; }
.fade-leave-to { opacity: 0; }
diff --git a/frontend/src/style.css b/frontend/src/style.css
index ec311df..35fff23 100644
--- a/frontend/src/style.css
+++ b/frontend/src/style.css
@@ -50,6 +50,8 @@ video {
--accent-glow: rgb(24 24 27 / 0.25);
}
+html { scrollbar-gutter: stable; }
+
html.dark {
--app-bg: #08070f;
--fg: rgb(255 255 255 / 0.93);