//! el-style — The el-ui design system.
//!
//! Platform-agnostic, theme-driven style representation. Every value in the
//! system is a semantic token — the theme maps tokens to actual colors, sizes,
//! and shadows. Components never hardcode visual values.
//!
//! ## Hierarchy
//!
//! 1. **Theme** — the single source of truth. Set at the experience root.
//! 2. **Semantic tokens** — Color::Primary, Spacing::Lg, Radius::Md, etc.
//! 3. **StyleModifier** — fluent builder trait on every component.
//! 4. **StyleSheet** — named rule sets, applied with `.apply("card")`.
//!
//! ## Usage
//!
//! ```
//! use el_style::prelude::*;
//!
//! // Components use semantic tokens, not raw values:
//! // button.background(Color::Primary).foreground(Color::OnPrimary).padding(16)
//!
//! // Theme provides the actual values at render time:
//! let theme = Theme::default_light();
//! let (r, g, b, a) = theme.colors.resolve(&Color::Primary);
//! assert!(r > 0 || g > 0 || b > 0 || a > 0.0);
//! ```

#![deny(warnings)]

pub mod color;
pub mod modifier;
pub mod radius;
pub mod shadow;
pub mod spacing;
pub mod stylesheet;
pub mod theme;
pub mod typography;

/// Everything you need in one import.
pub mod prelude {
    pub use crate::color::{Color, ColorScheme};
    pub use crate::modifier::{ButtonVariant, CardStyle, Dimension, InputStyle, StyleModifier, StyleSet};
    pub use crate::radius::Radius;
    pub use crate::shadow::Shadow;
    pub use crate::spacing::Spacing;
    pub use crate::stylesheet::StyleSheet;
    pub use crate::theme::{Theme, ThemeMode};
    pub use crate::typography::{FontWeight, TextAlign, TextDecoration, TextOverflow, TextStyle};
}

pub use prelude::*;
