Features
overview: show a custom-device image for unrecognized device types (c72d43f), closes #9936pages: surface saved device settings and make them clearable (9371857), closes #267service: cut saved device settings over to device-settings.json (9eb360e), closes #267settings: hide Pie Menu/Shortcuts tabs for unsupported or disconnected devices (7f33a19)settings: reveal clutch navigation via the freeform unlock (5fce52f)shortcuts: add pure-freeze clutch navigation action for Freeform (c650c57)shortcuts: rebrand Settings tab to Freeform Settings when unlocked (1c111d8)ui: create TabBar component and replace redundant SegmentedControl + ModeGroup (eb88fd8)ui: harmonize dropdown component with figma library (c3b151f)Bug Fixes
ci: drop the skip-ci marker from the release commit (215cfd8), closes #265ci: use apt-get in sync_main_to_beta (node image is Debian, not Alpine) (6639c81)overview: gate firmware-update UI to known device types (ef50104), closes #9936overview: veto firmware-update UI by the device model byte (d860d49), closes #9936service: apply the freeform default mount to the exact session_id (2baa735), closes #244 #262service: embed device service 3.5.4 (5ea86c5)service: PATCH partial mounts so a saved field stops wiping the rest (da683c5), closes #267services: centralize cursor-force wire building; unknown versions take vector (1b73568), closes #263 #263 #264services: harden the cursor-force wire gate (review follow-up) (dd88061), closes #263 #264services: version-gate the set_cursor_force wire field (vector vs values) (8cc9ac7), closes #263shortcuts: unify default-clutch-full onto Alt+C, closing out #261 (a867f41)tauri: announce every freeform session, not just the gate flip (6bb65cc), closes #267