Wheel and trackpad
A wheel event becomes a target the page eases towards instead of a jump, so long pages finally feel like they have weight.

Under the hood
This page runs Lenis — the open-source library that turns stuttering wheel, trackpad and touch scrolling into one continuous glide, while native sticky sections, anchor links and reduced-motion settings stay exactly where your browser expects them.
How it works
Add one stylesheet and one deferred script before your own, then hand the wheel to a single constructor. Lenis keeps using the browser’s real scroll position — it only changes how quickly the page gets there.
<link rel="stylesheet" href="https://unpkg.com/lenis@1.3.26/dist/lenis.css">
<script src="https://unpkg.com/lenis@1.3.26/dist/lenis.min.js" defer></script>
const lenis = new Lenis({ autoRaf: true, anchors: true });
A wheel event becomes a target the page eases towards instead of a jump, so long pages finally feel like they have weight.
Swipes stay native, and Page Down, Home and the space bar keep their browser behaviour — anchor links included.
The journey rail below is a plain position: sticky element. No transform hacks, no layout JavaScript, no jank.
autoRaf runs a single requestAnimationFrame loop for the whole page, and the geometry behind this demo is measured only on resize.
The journey rail
Six real itineraries from our Merzouga workshop. On a wide screen the rail is driven by your vertical scroll; on a narrow one it becomes a strip you can swipe sideways.
Swipe the rail sideways to browse the routes.
Depth
One transform per frame, written only while the section is on screen. The image reads its position from geometry cached at resize time, so scrolling never asks the browser to recalculate layout.
The numbers
5.4 kBgzipped Lenis runtime
513 Bthe stylesheet it ships
0cookies set by this page
1animation frame loop
Your turn
Every control below talks to the same Lenis instance that drives the page — the one exposed as window.lenisDemo in the console.
Native scrolling.
Access
When a visitor asks for less motion, Lenis is never started: the page scrolls natively, the rail becomes a swipe strip and the parallax photograph stops moving.
In-page links land a hundred pixels below the docked header, focus stays visible, and every control on this page is a real button.
If the CDN is unreachable the page keeps working with the browser’s own scrolling — the demo simply reports the fallback instead of pretending.
The desert is patient
10+ years sharing Morocco100% local guidesUsually replies within 2 hours