a42cc2a97e
ThemeCrossfadeSelfTestStep walks Switch -> crossfade-observed -> mid-crossfade-switch -> crossfade-end -> restore using TryGetActiveCrossfade, returns Waiting frame-by-frame and Pass after the restore concludes. The mid-switch phase fires a second Switch within ~100ms of the first observed crossfade and asserts the lerped value is neither identity-from nor identity-to, exercising the ArmCrossfade mid-flight-origin override. QuickPickerSelfTestStep verifies the three new resource strings, the built-in theme floor (>=10), and Config.Tabs non-empty.