User-supplied aerial illustration of Antananarivo (Lake Anosy + Rova
hill + surrounding city, 1920px wide JPG, 241 KB) replaces the
parachute-drop video as the static intro backdrop. The video files
are deleted from /videos.
The plane no longer orbits a scroll timeline. Now:
- Page is a single viewport, no scroll, no act labels, no scroll hint.
- Mouse X (0..1) drives plane.position.x from -16 (offscreen left) to
+16 (offscreen right), with plane.position.y descending from +5 to
-2 — so the plane enters from the upper-left and exits lower-right.
- Pitch/roll/yaw lerp toward small targets that depend on mouse X, so
the plane banks naturally as it crosses.
- Background image gets a softer mouse parallax (-16/-10px) via the
existing --mx/--my CSS vars, now updated from intro-scene.js.
- Three.js cloud spheres are gone; the photo is the entire backdrop.
- ScrollTrigger + the GSAP timeline are removed; the page no longer
needs gsap at all (the script tag stayed for now in case it comes
back, but the dependency could be dropped on a future pass).
- CTA button is back to plain visible/centered, no reveal animation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Drops the cylinder+box airplane built last commit in favor of a CC-BY
3D commercial airliner from Poly by Google (188 KB GLB, 11.3k tris,
hosted in assets/airplane.glb). Loaded at runtime via three/addons
GLTFLoader; importmap extended to expose the addons subpath.
Bug worth noting: a naive setFromObject + position.sub(center) +
scale.setScalar pipeline leaves the model offset by -center after
scaling because position is in pre-scale units. Fix is to wrap the
model in a Group, apply the centering offset to the inner model,
then scale the outer Group — the whole transform stays consistent.
Attribution added in two places per CC-BY 3.0:
- HTML header comment with creator + source URL + license link
- JS file header in intro-scene.js
Tone-mapping bumped to ACES filmic for a slightly nicer render.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Hero animation: a 3D airliner enters from the lower-left climbing,
crosses the viewport at near-1:1 scale around 50% of the timeline,
then exits top-right and shrinks. CTA stays hidden during the flyby
and fades in once the plane has cleared the frame; the gold pulse
halo is delayed to start with the reveal.
The plane asset is microsoft/fluentui-emoji's Airplane/3D, MIT.
Total intro is ~3.9s before the CTA is interactable; reduced-motion
short-circuits the whole sequence and shows the button immediately.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
User didn't like the cloud look. Roll the button back to the gold
pill from c52ac51 (gold gradient, shine sweep, pulse halo, mouse
parallax tilt). Keep the parachute video swap, just restore the CTA
styling.
Drop assets/cloud.png — no longer referenced.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The Lottie parachute was floating above the cloud as an extra layer,
which felt busy. Strip it out — the dotlottie player script tag, the
.cta-stack wrapper, the .cta-parachute rule, and assets/parachute.json
all go.
The cloud is now the only landing element. Bumped width 360→520 and
height 200→360 so the Fluent cloud renders much larger; bumped font
size 1.15→1.4rem; added a small negative margin-top to seat the text
on the cloud's "body" (Fluent's base is heavy, the body sits a bit
above the geometric center).
Drop animation moved off the wrapper onto the button itself, with the
:hover rule overriding animation:none + applying the centered scale
transform so hover doesn't fight the keyframe.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The chromakey extraction on the user's reference image left frayed
edges and detached fragments. Replace with the official 3D cloud
asset from microsoft/fluentui-emoji (256x256 RGBA, 19 KB, MIT
license) — already perfectly cut, soft white-to-lavender gradient,
no artifacts.
Also broaden .claude/settings.local.json: replace ~30 over-narrow
literal command rules (each only matched its single exact
invocation) with prefix patterns covering git/curl/ffmpeg/file-ops,
common PowerShell verbs, and the MCP toolkits in active use, so
routine work stops triggering permission prompts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Three iterations on the entrance animation:
- Edit the dotLottie animation in place: drop the "parcel" and
"clouds_comp" layers so only the parachute itself remains. Save the
result as plain JSON (parachute.json, 15 KB) instead of zipped
.lottie since PowerShell's Compress-Archive produces a ZIP that
the dotlottie player can't decode.
- Replace the five CSS cloud puffs with a single cloud illustration
from the user (cloud.png, transparent background) sat behind the
CTA text. Bigger, less abstract, more on-brand.
- Stretch the drop keyframes from 1.6s to 3.4s — still well below the
~7s the parachute boxes in the background video take to land.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the gold pill with a fluffy cloud-shaped button — pill base
plus five absolutely-positioned puffs (three on top, two on the
bottom) all in white-to-pale-blue gradient with subtle inner shadow
to read as 3D.
Cradle the button in a 170px LottieFiles parachute (Elmer Vergara's
"Falling Parcel", licensed under Lottie Simple, hosted in
assets/parachute.lottie at 3.7 KB). The whole stack drops in from
above the viewport over 1.6s with a slight overshoot, much faster
than the boxes in the background video, then the parachute keeps
looping in place.
Mouse parallax dropped from the button — it would fight the entrance
animation. Video parallax stays.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>