What it is
A complete one-page site for a freight forwarder: a rotating dotted globe and fourteen destinations, a promise backed by counters, a loading yard where a reach stacker places a container, a truck crossing the screen, a road seen from above, a container ship, six services, testimonials, partner marks, insights, an FAQ and a full contact footer.
The page is deliberately cinematic without becoming a black box. The globe is drawn on a 2D canvas, the long loading sequence is driven by one scroll progress value, and the service rail remains a native scroll-snap carousel. There is no framework, no CDN and no build step: open index.html and the whole experience runs locally.
Every source stays readable and commented. It is a template to study, rename and reshape, not a compressed demo that only works on its original host.
What you change first
The colours — seven lines
Right at the top of assets/css/style.css:
--ink: #111111; /* text and dark panels */
--paper: #ffffff; /* light sections */
--surface: #f4f4f4; /* raised light surfaces */
--brand: #3a00cc; /* accent on white */
--brand-deep: #2a0099; /* hover on white */
--brand-lift: #8a6bff; /* accent on dark */
--signal: #ff8a00; /* globe routes and pins */
The accent comes in three values because one colour cannot keep enough contrast on white, black and photography at once. Change the trio together; --signal is separate because the amber routes must remain legible against the blue globe.
The name
Search for “Trelane” in index.html. No CSS class carries the brand name, and the logotype is type rather than a bitmap: a find-and-replace cannot break the layout.
The sizes
The complete type scale lives in the token block and is rebalanced only at the main breakpoints. Change --h2 once and every section heading follows; individual headings do not carry one-off media queries.
The fourteen effects, and how they’re built
The original timings and easing curves were measured, then rebuilt with small browser primitives. The long scenes share a single progress coordinate, so the crane, container, road, truck and ship stay aligned at every viewport size.
| Effect | Where | How |
|---|---|---|
| Masked title entrance | hero | each line rises from its own overflow mask, staggered by 90 ms |
| Rotating globe | hero | orthographic projection on canvas, redrawn at 30 fps with no 3D library |
| Atmospheric rim and routes | hero | cached amber and blue light passes, with routes and pins layered above the land dots |
| Scroll reveals | throughout | IntersectionObserver, triggered 15% up from the bottom of the viewport |
| Text sweep | large headings | an animatable custom property moves a clipped gradient across each line |
| Counters | intro | one requestAnimationFrame loop with a cubic ease-out |
| Image opening | intro | clip-path and scale share the original exponential easing |
| Reach stacker loading | services | the machine, hook and container use one measured coordinate system |
| Truck crossing | services | a viewport-independent translate course tied to scroll progress |
| Service rail | services | native scroll-snap, also advanced from the pinned scene progress |
| Speed indicator | services | smoothed derivative of the truck’s progress, capped at 92 km/h |
| Road and top-view truck | milestones | CSS variables grow the road and move the vehicle on the same vertical axis |
| Container ship | why Trelane | the ship travels through a blue sea-mist gradient as the section progresses |
| Marquees and FAQ | header, footer, FAQ | CSS keyframes for the loops; native <details> for the questions |
What you should know
- No external requests. Fonts, images, scripts and the globe data all live inside the template folder.
- Scroll reveals can't hide the content. The hidden state only exists after the enhancement script has run. With JavaScript removed, all 23 headings remain visible and all eight questions can still be opened.
-
Zero inline styles, zero inline scripts. Verified by serving the folder with the strict policy from
_headers, not assumed. - The long scenes are measured. Automated checks verify that the globe stays inside the frame, the load touches the hook and stack, and the truck and ship remain visible across landscape, portrait and mobile formats.
- The body text is readable. It was raised to 16 px instead of reproducing the source’s 13.3 px body copy.
- Accessibility: skip link, announced menu state, native FAQ, keyboard-ready rail, visible focus, decorative scenes hidden from screen readers, and a complete reduced-motion state.
- Responsive checked at 390, 1440 and 2560 px, on load and after scrolling all the way down, with no horizontal overflow.
What isn't perfect
Better said here than left for you to find out.
- The reach stacker arm is fixed. The container follows a measured arc from the hook to the stack, but the hydraulic arm itself does not articulate frame by frame.
- The globe is 2D canvas rather than WebGL. It rotates, lights its rim and keeps every route aligned, but it does not simulate volumetric atmosphere or physical sunlight.
- The ocean is a gradient. The ship moves through blue mist, but there is no fluid simulation or generated wake behind it.
- The vehicle wheels do not spin independently. Each truck is a single transparent image, so the crossing reads clearly without extra layered assets.
- The page is intentionally long. The pinned sequences trade scroll distance for readable motion; reduced-motion mode collapses them to their final states.
Download it. Open it. Make it yours.
Trelane is free to download, with the complete source and every local asset included.
Complete source · No account · No framework