Shared types and configuration for OpenLogi.
Everything here is data — the device model, the action catalogue, the
binding types, the shape of the config file. It must never depend on
hidpp, async-hid, or any platform-specific event/window API; those live
in sibling crates.
The exceptions are feature-gated (both on by default): reading and writing
that config file (fs), and locale negotiation (locale), which reads the
host's language preference. Without them this crate touches no host at all,
which is what the wasm (portable crates) CI job checks.