✓ 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
ASCII-art canvas approach covers most required features but slider direction is inverted (value=100 → crowns deepest, value=0 → air, yet the writing-mode bt-lr style means slider visually moves bottom-to-top which is correct in DOM but the crown position math lowers crowns as depth increases making top=air/bottom=water logically correct — however crown submerged logic is broken: submergedRatio never increments past 0 because the boolean guard requires it to already be >0, so buoyancy always reads 0 and "displaced water" only reflects water-level rise proxy, not true Archimedes displacement per submerged volume.
ASCII-art canvas approach covers most required features but slider direction is inverted (value=100 → crowns deepest, value=0 → air, yet the writing-mode bt-lr style means slider visually moves bottom-to-top which is correct in DOM but the crown position math lowers crowns as depth increases making top=air/bottom=water logically correct — however crown submerged logic is broken: submergedRatio never increments past 0 because the boolean guard requires it to already be >0, so buoyancy always reads 0 and "displaced water" only reflects water-level rise proxy, not true Archimedes displacement per submerged volume.