baseball v1.2.0 — promotions design uplift (phase 3)
baseball v1.2.0 — Promotions design uplift (Phase 3)
baseball.promotions gains the design handoff's hires layouts behind layout = "auto":
- Held promo card (bigsign 256px, and longboi 512px via explicit
layout = "card"): date, promo name, opponent chip + VS line, offer· BYsponsor, start time. A name too wide for its band scrolls inside a hard-clipped marquee while the rest of the card holds still. - Hires crawl (longboi default;
layout = "ticker"elsewhere): the full promo line as engine-scrolled hires segments. Short lines hold centered; overflowing lines rest flush-right. - Masked-clip infrastructure (
_mask.py): offscreen HeadlessCanvas rasterization through the public core surface — no core changes needed. - Scale-1 (smallsign) keeps the classic text rows unchanged.
Hardware-tuning round (longboi)
- Crawl advance no longer bakes in a trailing spacer — scroll stops land flush-right (also fixes the v1.1.x scores crawl's 22px over-scroll; ticker-mode story spacing tightens accordingly).
- Long card: px26 name marquee with even vertical rhythm; time right-anchored at the card edge; right info block one size smaller; the name band extends full-width when the cyan sub line is empty (the norm for clubs that don't populate offerType/presentedBy — e.g. PHI), so most names fit statically.
Notes
- Promos are target-date scoped (today-first), matching the classic widget's semantics.
- Emoji in free-form API text are sanitized out of hires renders (measure/paint drift guard).