diff --git a/src/App.svelte b/src/App.svelte index 4fd9c5b..e2b91ee 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -64,12 +64,6 @@ img.src = BG_URL } - // Sync body[data-template] with the active template so CSS selectors (e.g. footer hide) - // stay correct on SPA navigation — PHP only sets it on the initial page load. - $effect(() => { - if (activeTemplate) document.body.dataset.template = activeTemplate - }) - // Active la transition seulement après le premier paint à la bonne position. // Double rAF : le premier laisse passer un paint avec le bon translateX, // le second active is-animated — évite l'animation parasite au chargement. diff --git a/src/components/layout/Footer.svelte b/src/components/layout/Footer.svelte index 1330ef4..de0ef80 100644 --- a/src/components/layout/Footer.svelte +++ b/src/components/layout/Footer.svelte @@ -23,23 +23,15 @@ function onScroll() { if (rafId) return rafId = requestAnimationFrame(() => { - const scrollHeight = scrollableContainer.scrollHeight - const clientHeight = scrollableContainer.clientHeight - const threshold = window.innerWidth > 800 ? 100 : 200 - // Only show footer when content actually overflows AND user is near the bottom. - // Without the overflow guard, atBottom is true even when scrollHeight === clientHeight - // (0 >= 0 - threshold), causing the footer to appear on pages with no scroll. - const overflows = scrollHeight > clientHeight - const atBottom = overflows && scrollableContainer.scrollTop >= scrollHeight - clientHeight - threshold + const threshold = window.innerWidth > 800 ? 100 : 200 + const atBottom = scrollableContainer.scrollTop >= scrollableContainer.scrollHeight - scrollableContainer.clientHeight - threshold isHidden = !atBottom rafId = null }) } scrollableContainer.addEventListener('scroll', onScroll) - // No immediate onScroll() call: footer starts hidden and only reveals when - // the user actively scrolls near the bottom. Calling it immediately caused - // the footer to flash on page load when content barely exceeded the threshold. + onScroll() return () => { scrollableContainer.removeEventListener('scroll', onScroll)