BlobFx, MatrixFx, WeatherFx, ParticleFx and CelebrationFx all do the same structural job: paint a full-bleed decorative layer behind their content. In practice they are alternatives to each other, but swapping one for another meant changing an import and rewriting the positioning at every call site.
Effect picks between them by value. A template can expose its aesthetic as one setting, and type="none" renders the content with no layer at all.
Children render on top of the effect, and the wrapper is identical for every type — including "none". That is what makes the swap safe: changing the effect changes the look and nothing else about the layout.
colors and speed apply across the set: ParticleFx takes a single colour, so it uses the first entry, and blob is seeded rather than timed and ignores both. Anything an individual effect needs goes in its own block, which is only read when that effect is the one showing — so all of them can be configured up front and still switched with one prop.