✓ Two crowns ✓ Same mass, different density ✓ Vertical slider ✓ Slider works ✓ Slider controls crowns — Slider direction correct ✓ Full slider range — Fall animation ✓ Water displacement ✓ Rising water level ✓ Splash effects ✓ Physics correct — Live mass value — Live volume value — Live density value ✓ Live displaced water ✓ Gilded displaces more ✓ Heureka animation ✓ No external deps ✓ Light bg / dark text ✓ Self-contained HTML
Slider direction is inverted (slider min=0 maps to fully submerged, max=100/top to air, but then value is flipped via `100 - slider.value`, making the visual top=air correct only if the browser renders max at top — webkit vertical sliders render max at top natively, so the inversion actually re-inverts it: top thumb = value 100 → sliderValue=0 = no submersion, bottom = value 0 → sliderValue=100 = fully submerged, which is CORRECT directionally); however, mass/volume/density values are static (not live), no true fall animation (crown jumps rather than falls), and splash fires continuously during mid-range rather than only at water-entry moment.
Slider direction is inverted (slider min=0 maps to fully submerged, max=100/top to air, but then value is flipped via `100 - slider.value`, making the visual top=air correct only if the browser renders max at top — webkit vertical sliders render max at top natively, so the inversion actually re-inverts it: top thumb = value 100 → sliderValue=0 = no submersion, bottom = value 0 → sliderValue=100 = fully submerged, which is CORRECT directionally); however, mass/volume/density values are static (not live), no true fall animation (crown jumps rather than falls), and splash fires continuously during mid-range rather than only at water-entry moment.