unselect2
Replaces the <select> but looks like and behaves like the <select>.
The native <select> cannot be styled, so there is not one here — not hidden, not one per field, zero. A listbox handles every interaction, and it looks like and behaves like the control it replaced. On a touchscreen the platform picker is replaced too, and that is the cost.
Submission stays a plain form post — each field writes its choice into one <input type="hidden">, and that is what posts.
Two things this costs. Native constraint validation is gone: required is the library's check and this server's, never the browser's. And with JavaScript off there is no field at all — the markup is inert until the script runs, and nothing is submitted for it.
Nothing on this page touches a chain.