//! Pure ride logic: physics, profiles, GPX import and session state.
//!
//! This crate has no I/O and no platform dependencies (NFR-5). Everything here
//! is unit-testable with synthetic telemetry, and it must stay that way — BLE
//! lives in `bikecontrol-ble`, file writing in `bikecontrol-fit`.

pub mod energy;
pub mod gearing;
pub mod gpx;
pub mod physics;
pub mod profile;
pub mod session;
pub mod types;

pub use profile::{Block, Channel, Extent, Profile, Segment, Waveform};
pub use gearing::{Gearing, VirtualCassette};
pub use session::{RideSession, SessionEvent};
pub use types::{
    ConnectionState, ControlMode, ControlTarget, RideSnapshot, RiderConfig, SafetyLimits, Telemetry,
};
