diff --git a/src/App.tsx b/src/App.tsx
index e339350..d6bcd68 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useEffect } from 'react';
import Header from './components/Header';
import Hero from './components/Hero';
import About from './components/About';
@@ -14,6 +14,22 @@ import PlatformPage from './components/PlatformPage';
function App() {
const path = window.location.pathname.replace(/\/$/, '') || '/';
+ // The landing sections are client-rendered, so when a /#section URL arrives
+ // with the initial request — following "Oferta"/"Kontakt" from /privacy or
+ // /platforma — the browser resolves the fragment before the target exists and
+ // leaves the page at the top. Re-apply the scroll once the sections are
+ // mounted. In-page clicks never reach this: they are same-document fragment
+ // navigations that the browser handles natively (smoothly, via .scroll-smooth)
+ // without remounting App.
+ useEffect(() => {
+ if (path !== '/') return;
+ const id = window.location.hash.slice(1);
+ if (!id) return;
+ // Jump rather than smooth-scroll: this only runs on a fresh load, where
+ // animating the full page height would just be a slow detour.
+ document.getElementById(id)?.scrollIntoView({ behavior: 'auto' });
+ }, [path]);
+
if (path === '/privacy') {
return