# Floors match what the code actually uses: st.dialog(on_dismiss=...),
# st.rerun(scope="fragment"), and width="stretch" all need a modern Streamlit
# (the old >=1.30 floor crashed at import). Developed and tested against:
# streamlit 1.58, altair 6.1, pandas 3.0, numpy 2.4, yfinance 1.4.
# Streamlit is capped below 2.0: the app relies on 1.x APIs (st.navigation,
# st.dialog(on_dismiss=...), width="stretch") that a major bump may break.
streamlit>=1.58,<2
streamlit-keyup>=0.3    # live (per-keystroke) records search; app falls back to Enter-to-search without it
altair>=5.0
pandas>=2.2
numpy>=1.26
yfinance>=0.2.40
