Text this: XGBoost–random forest stacking with dual-state Kalman filtering for real-time battery SOC estimation