//! # Whole-calendar strict layer
//!
//! The "strict out" half of the crate, both parts facing the decoded calendar:
//! the [`builder`] constructs one property at a time against its spec, and
//! [`validate`] checks a whole [`Ical`](crate::ical::Ical) against the RFC 5545
//! rules and mints an [`IcalValid`](crate::valid::IcalValid) proof. Both share
//! the same per-property check, and both live here so the tree's read side and
//! its write side stay visibly separate.