✓ 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 (bt-lr writing-mode means bottom=air/0, top=water/100, but the slider value 0 starts crowns high in air and 100 puts them in water — actually mapping is depth=value/100 so high slider = water, which is bottom-of-slider=low-value=air and top-of-slider=high-value=water, correct in feel but visually ambiguous); more critically, the displaced-water DOM ID is wrong (`displacesgilt` vs `displacedgilt`), the submerged volume formula is physically ad-hoc rather than derived from proper sphere-cap integration, buoyancy force units are miscalculated (dividing by 100000 is arbitrary), crowns are drawn as simple circles with radiating lines (not actual crown shapes), and there is no continuous fall animation — crowns jump instantly to position with no smooth tween.
Slider direction is inverted (bt-lr writing-mode means bottom=air/0, top=water/100, but the slider value 0 starts crowns high in air and 100 puts them in water — actually mapping is depth=value/100 so high slider = water, which is bottom-of-slider=low-value=air and top-of-slider=high-value=water, correct in feel but visually ambiguous); more critically, the displaced-water DOM ID is wrong (`displacesgilt` vs `displacedgilt`), the submerged volume formula is physically ad-hoc rather than derived from proper sphere-cap integration, buoyancy force units are miscalculated (dividing by 100000 is arbitrary), crowns are drawn as simple circles with radiating lines (not actual crown shapes), and there is no continuous fall animation — crowns jump instantly to position with no smooth tween.