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: reading and writing that config file
(fs) and locale negotiation (locale), which reads the host's language
preference, both on by default; and, off by default, the dedicated tokio
worker thread the host crates run async work on (worker) and the tracing
filter every process installs (logging). Without them this crate touches
no host at all, which is what the wasm (portable crates) CI job checks.