adds one Search → Preview modal owner that preserves background inert state and the original launcher
traps Tab/Shift+Tab against currently rendered controls, including dynamic Preview actions
keeps containment active across Back to Search and packages the controller for offline launches
adds accessible Search modal semantics
Verification
RED: pytest -q tests/test_mobile_search_modal.py failed with the missing controller/semantics
Focused: 26 passed
Full: 2641 passed, 22 skipped
Rendered mobile Chromium (320×568, 390×844): 4 passed
Core runtime gzip: 102382 bytes (≤102400)
Closes #1390
## What changed
- adds one Search → Preview modal owner that preserves background inert state and the original launcher
- traps Tab/Shift+Tab against currently rendered controls, including dynamic Preview actions
- keeps containment active across Back to Search and packages the controller for offline launches
- adds accessible Search modal semantics
## Verification
- RED: `pytest -q tests/test_mobile_search_modal.py` failed with the missing controller/semantics
- Focused: 26 passed
- Full: 2641 passed, 22 skipped
- Rendered mobile Chromium (320×568, 390×844): 4 passed
- Core runtime gzip: 102382 bytes (≤102400)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Closes #1390
What changed
Verification
pytest -q tests/test_mobile_search_modal.pyfailed with the missing controller/semantics