diff --git a/messages/de.json b/messages/de.json index 8a3a5fb4c..221a0a141 100644 --- a/messages/de.json +++ b/messages/de.json @@ -5518,7 +5518,7 @@ "subtitle": "Version, Lizenz und Update-Status." }, "module-availability": { - "title": "Modulverfügbarkeit", + "title": "Module", "subtitle": "Module für jedes Konto auf diesem Server aktivieren oder deaktivieren." } }, diff --git a/messages/en.json b/messages/en.json index 06b38c3e8..8a5884a2f 100644 --- a/messages/en.json +++ b/messages/en.json @@ -5518,7 +5518,7 @@ "subtitle": "Version, license, and update status." }, "module-availability": { - "title": "Module availability", + "title": "Modules", "subtitle": "Turn modules on or off for every account on this server." } }, diff --git a/messages/es.json b/messages/es.json index 0b49cd985..c666fdab0 100644 --- a/messages/es.json +++ b/messages/es.json @@ -5518,7 +5518,7 @@ "subtitle": "Versión, licencia y estado de actualizaciones." }, "module-availability": { - "title": "Disponibilidad de módulos", + "title": "Módulos", "subtitle": "Activa o desactiva módulos para todas las cuentas de este servidor." } }, diff --git a/messages/fr.json b/messages/fr.json index 971a1bbd8..baa1a88cb 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -5518,7 +5518,7 @@ "subtitle": "Version, licence et état des mises à jour." }, "module-availability": { - "title": "Disponibilité des modules", + "title": "Modules", "subtitle": "Activez ou désactivez les modules pour tous les comptes de ce serveur." } }, diff --git a/messages/it.json b/messages/it.json index 4b762cd6b..c4dad1eda 100644 --- a/messages/it.json +++ b/messages/it.json @@ -5518,7 +5518,7 @@ "subtitle": "Versione, licenza e stato degli aggiornamenti." }, "module-availability": { - "title": "Disponibilità dei moduli", + "title": "Moduli", "subtitle": "Attiva o disattiva i moduli per tutti gli account su questo server." } }, diff --git a/messages/pl.json b/messages/pl.json index 664af0d8d..362f37151 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -5518,7 +5518,7 @@ "subtitle": "Wersja, licencja i stan aktualizacji." }, "module-availability": { - "title": "Dostępność modułów", + "title": "Moduły", "subtitle": "Włącz lub wyłącz moduły dla wszystkich kont na tym serwerze." } }, diff --git a/src/components/admin/admin-shell.tsx b/src/components/admin/admin-shell.tsx index 39f94bb37..1a5ce6196 100644 --- a/src/components/admin/admin-shell.tsx +++ b/src/components/admin/admin-shell.tsx @@ -37,7 +37,6 @@ import { } from "lucide-react"; import { cn } from "@/lib/utils"; -import { scrollBehaviorForUser } from "@/lib/motion"; import { useAuth } from "@/hooks/use-auth"; import { useTranslations } from "@/lib/i18n/context"; import { isAdminSectionSlug, type AdminSectionSlug } from "./section-slugs"; @@ -188,16 +187,15 @@ export function AdminShell({ active, children }: AdminShellProps) { '[aria-current="page"]', ); if (!activeChip) return; - activeChip.scrollIntoView({ - block: "nearest", - // v1.4.36 W4b — `inline: "start"` pins the active chip to the - // left edge of the scroller. `inline: "center"` over-scrolled - // and the first one or two chips were unreachable on narrow - // viewports. - inline: "start", - // v1.4.43 W5-H5 — respect `prefers-reduced-motion`. - behavior: scrollBehaviorForUser(), - }); + // Adjust only the strip's own horizontal offset, instantly. The old + // `scrollIntoView` walked every scrollable ancestor and could nudge the + // document vertically, and a smooth behaviour animated the strip from a + // reset `scrollLeft: 0` to the target on every tap — an unwanted "scroll + // from the start" sweep. `scrollTo({ left, behavior: "auto" })` confines + // the motion to the strip's horizontal axis and jumps without animation. + const maxScroll = strip.scrollWidth - strip.clientWidth; + const target = Math.max(0, Math.min(activeChip.offsetLeft, maxScroll)); + strip.scrollTo({ left: target, behavior: "auto" }); }, [activeSlug]); // The section bodies are already role-gated, but the shell frame @@ -311,51 +309,60 @@ export function AdminShell({ active, children }: AdminShellProps) { {headingBlock} - {/* Desktop sticky sidebar — starts at the cards row (row 2). */} + {/* Desktop sticky sidebar — starts at the cards row (row 2). + + The sticky lives on the `