Audit wave 3: SpringConfig only works on manual keyframes; entrance presets are fixed ease curves (bounce/elastic hardcode their spring params). Implement: PresetConfig gains optional spring: SpringConfig — when present, the preset's keyframes resolve with spring easing (animator preset builders thread it through). 'fade_in_up with spring' becomes one attribute. Serde additive; HTML dialect anim DSL passes it via key:value already (verify spring sub-object syntax — JSON form covers it). Red-first test: same preset with/without spring differs at overshoot time.
Audit wave 3: SpringConfig only works on manual keyframes; entrance presets are fixed ease curves (bounce/elastic hardcode their spring params). Implement: PresetConfig gains optional spring: SpringConfig — when present, the preset's keyframes resolve with spring easing (animator preset builders thread it through). 'fade_in_up with spring' becomes one attribute. Serde additive; HTML dialect anim DSL passes it via key:value already (verify spring sub-object syntax — JSON form covers it). Red-first test: same preset with/without spring differs at overshoot time.