/* ─── Stats ─────────────────────────────────────────────────────────── */
.hzo-stat-number {
    font-family: var(--font-number);
    font-size: clamp(2.25rem, 4vw, 3rem);
    font-weight: var(--fw-700);
    line-height: var(--lh-none);
    color: var(--brand-text);
    letter-spacing: -0.01em;
    margin: 0 0 var(--space-sm);
}
.hzo-stat-label {
    font-family: var(--font-body);
    font-size: var(--fs-100);
    font-weight: var(--fw-500);
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: var(--tracking-wide);
    line-height: 1.4;
}

/* ─── [hzo_stats] widget root (Phase-2 widget system) ──────────────────────
   The shortcode composes the always-loaded base grid (.hzo-grid --2/--3/--4);
   only the stat-item centering is needed here, SCOPED under .hzo-stats so the
   hand-authored pattern markup (stat-block, page variants — .hzo-stat without
   an .hzo-stats ancestor) is untouched. (Unscoped `.hzo-stat` centering is
   owned by components/stat-block/stat.css.)
   Wave S: reads --stat-align (default center — computed output unchanged) so a
   site-wide alignment flip is one token rather than two overrides. The
   .hzo-stat--left/--rule/--boxed modifiers carry a `.hzo-stats .hzo-stat.…`
   form specifically to beat this selector, which loads after stat.css. */
.hzo-stats .hzo-stat { text-align: var(--stat-align, center); }

/* Reduced motion: the count-up itself is JS-driven text (stats.js never
   animates under prefers-reduced-motion); kill any transition/animation on
   the widget's own elements for belt-and-suspenders. Scoped to this
   component's classes only — the .hzo-reveal utility handles its own
   reduced-motion state in _base/scroll-reveal.css. */
@media (prefers-reduced-motion: reduce) {
    .hzo-stats,
    .hzo-stat-number,
    .hzo-stat-label {
        transition: none !important;
        animation: none !important;
    }
}
