TITLE: Voyage 071 — A Scroll-Told Crossing from Harbor to the Stars PROMPT: Build a single-file, self-contained HTML artwork titled "Voyage 071 — Harbor to the Stars": a scroll-driven voyage where one continuous painted seascape morphs through six stages (Harbor, Open Sea, Storm, Calm, Sky, Stars) while text panels scroll over it. Structure: a fixed full-viewport canvas (position:fixed; inset:0; z-index:0) rendering the scene, a fixed radial vignette overlay, a 2px fixed top progress bar whose fill is scaleX(scrollProgress), a fixed monospace HUD top-left showing "071 — Voyage", the current stage name and a 2-digit percent, a fixed bottom-left "SCROLL" cue with a 46px hairline whose inner dot loops with a transform keyframe, and a fixed right-side vertical rail of six buttons (label + 22px tick) that grows the active tick to scaleX(1.75) in #f4a261. Below, a relative
holds six 100dvh
blocks alternating left/right alignment, each with a translucent card (linear-gradient rgba(11,29,51,.80) → rgba(6,15,27,.58), 1px rgba(233,236,239,.15) border, backdrop-filter blur(7px), 2px #f4a261 left rule, deep drop shadow) containing a monospace eyebrow, an italic Georgia h2 at clamp(28px,4.6vw,54px), a body paragraph in #c9d6e3, and a monospace meta row. Palette: #0b1d33 night sea, #f4a261 dawn, #e76f51 storm, #2a9d8f calm, #e9ecef stars, #8ea6bd dim text. Type: system-ui body, Georgia italic display, ui-monospace labels. Canvas engine: DPR-scaled (canvas.width = cssW * devicePixelRatio, ctx.setTransform), overscanned by a 100px margin so a pointer-driven scene rotation never exposes edges. Six stage parameter sets (sky top/mid/horizon colors, sea colors, wave amplitude, wave speed, star density, sun x/y/radius/alpha/color, haze, rain) are hex-parsed once and linearly interpolated by a continuously smoothed scroll value sceneT = progress * 5, eased at 0.085 per frame. Drawing order: sky linear gradient + horizon haze band + sun radial glow + sun disc, twinkling star field (280 pre-seeded stars, thresholded by star density), sea gradient with sun shimmer bars, four perspective sine-wave layers each filled from its crest down to the canvas bottom with a crest highlight stroke, a bobbing sailboat (quadratic hull, mast, two sails, elliptical reflection) that drifts right as progress advances, and slanted rain streaks plus an occasional lightning flash when storm intensity is high. Motion: scroll drives every morph, the boat bobs and rolls, waves scroll, stars twinkle, storm shakes the scene by ±2.4px and bolts flash; all motion is disabled under prefers-reduced-motion (no rAF loop, redraw on scroll only, no bob, no twinkle, no shake). Interaction: scroll is the engine; hovering or focusing a rail button previews that stage by easing the scene to it; clicking a rail button smooth-scrolls to that chapter; pointer x tilts the whole horizon by up to 0.021 rad with easing. Cards reveal via transform translateY(38px) → 0 with an IntersectionObserver — never via opacity — so a frozen-clock render shows the complete page. All JS in one IIFE in a single inline