ba019c0ba7
Replace the bespoke side-panel with the ui_modal scaffold. Layout collapses into four sections: Audio (SFX / Music volume), Gameplay (Draw Mode / Anim Speed), Cosmetic (Theme / Color-blind / Card Back / Background), and Sync (status + manual Sync Now). Body lives in a scrollable child of the modal card with max_height: Vh(60.0) so tall content stays reachable on short windows. Done is a primary button outside the scroll so it's always one click away regardless of scroll offset. All colours, spacing, typography, and z-index from ui_theme tokens. Two file-local sub-rung sizes (SWATCH_PX = 40, ICON_BUTTON_PX = 28) remain as documented literals — they're smaller than SPACE_2 (8 px) which is the smallest rung. Existing systems (handle_settings_buttons, update_*_text, scroll_settings_panel, persistence) untouched; the SettingsPanel / SettingsPanelScrollable / SettingsScrollNode markers and every button marker carry over so all existing tests and click handlers keep working. cargo build / cargo clippy --workspace -- -D warnings / cargo test -p solitaire_engine all green (444 passed, 0 failed).