01Demonstrates, never collects
The amputee application is a working six-step wizard with no action, no name attribute on any control, no file input, no persistence, and an onSubmit that always prevents default. Nothing can be serialised, even by a stray submit. The real route to ESMEE is a mailto, and I wired a role="note" panel warning against entering real medical information into the form with aria-describedby, then restated it in the step's own words on the documents and consent steps.
02Reserved, not invented
The sponsor roster ships three reserved cards, each stamped "Placeholder image · not a recipient". I invent no name, country, amputation level, age or funding total. A filled progress bar would be a fundraising claim, so I made the reserved state a hatch rather than a percentage, because zero would be a claim too; PLACEHOLDERS.md records the stock-photo sources and licences and the two-step removal, after which the cards fall back to an empty consent frame on their own.
03Sticky by hand
The homepage journey section holds one panel on screen while four steps advance under it. position: sticky was unavailable: the section wrapper sets overflow: clip for decorative bleed, which makes every descendant treat that wrapper, which never scrolls, as its sticky containing block. So I toggle fixed and absolute by hand against a scroll budget of steps × 80vh, computing the release threshold from the panel's own height rather than the viewport edge, so the handoff lands on a single continuous pixel.
04Geometry over observers
I read getBoundingClientRect on scroll for the count-up figures instead of using IntersectionObserver. An observer only reports frames where the element genuinely intersects, so one jump past it (a restored scroll position, an in-page anchor, End) can skip every such frame and leave the number at its start value. On a page asking for money that means a visitor reading "$0". Asking whether the element has passed the fold is true from the moment it is passed, however fast.
05A pending symbol
I hold unconfirmed specifications as a Symbol('confirmation pending') in the page data, standing in for 20 values on the hand page and 5 on the finger page; anything holding it renders as a neutral chip rather than a hedged number. One is a live contradiction, the site saying under 450 g and the myHand flyer about 500 g, so the hand product page publishes no weight at all, not even in its JSON-LD. Propagating that same suppression to the homepage and the free-hand page is still an open item on my pre-launch checklist.