/* ============================================================
   v123 — PREMIUM TYPOGRAPHY POLISH
   ============================================================ */

/* Universal rendering: optimize legibility + antialiasing.
   - text-rendering: optimizeLegibility enables kerning + ligatures
   - -webkit-font-smoothing: antialiased = lighter weight on dark bg,
     matches macOS Safari rendering most closely
   - -moz-osx-font-smoothing: grayscale matches the above on Firefox/macOS */
html {
  text-rendering: optimizeLegibility !important;
  -webkit-font-smoothing: antialiased !important;
  -moz-osx-font-smoothing: grayscale !important;
}

/* Body text: kerning + ligatures + contextual alternates.
   No size/weight changes — only OpenType feature activation. */
body {
  font-feature-settings: "kern" 1, "liga" 1, "calt" 1 !important;
  font-variant-ligatures: common-ligatures contextual !important;
}

/* Display elements (headings + hero) use Fraunces variable.
   Activate optical sizing + stylistic set 1 (Fraunces ss01: refined italic
   substitutions + tighter dot rendering). Improves headlines at large
   sizes without changing size. */
h1, h2, h3, h4, h5, h6,
.pz-page-h1, .pz-page-h2,
.entry-title,
.pz-hero__h1,
.pz-hero__sub,
.pz-smart-rec__title,
.pz-card__name,
.pz-explore-card__name,
.pz-card__tag,
.pz-explore-card__tag {
  font-feature-settings: "kern" 1, "liga" 1, "calt" 1, "ss01" 1 !important;
  font-optical-sizing: auto !important;
}

/* Display-class headings — tight tracking matches premium magazine feel */
.pz-hero__h1,
.pz-page-h1,
h1.entry-title {
  letter-spacing: -0.02em !important;
}

/* H2 in long-form content — slight tighten for editorial feel */
body.pz-clean-post .entry-content h2 {
  letter-spacing: -0.012em !important;
}

/* Body paragraphs in long-form content — canonical line-height (1.65 from
   v100-tokens). Doesn't override size or family. Improves reading rhythm. */
body.pz-clean-post .entry-content p,
body .entry-content > p {
  line-height: 1.65 !important;
}

/* Drop the small-text font-smoothing trick:
   For VERY SMALL text on light backgrounds, use subpixel rendering
   instead of antialiased — keeps small text crisp. */
.pz-card__tag,
.pz-explore-card__tag,
.pz-explore-card__country,
.pz-smart-rec__label,
.pz-explore__label,
.pz-kicker,
.pz-hero__badge,
.pz-pill,
small, .small {
  -webkit-font-smoothing: subpixel-antialiased !important;
  -moz-osx-font-smoothing: auto !important;
  /* Wide tracking on uppercase kickers/labels — premium magazine convention */
  letter-spacing: 0.16em !important;
  text-transform: uppercase !important;
  font-feature-settings: "kern" 1, "liga" 1, "calt" 1, "tnum" 1 !important;
}

/* Numerical content uses tabular figures — premium table alignment for
   prices, dates, stats */
.pz-card__meta,
.pz-explore-card__meta,
.pz-stat,
time,
.pz-compare__cell,
.pz-shortlist__count {
  font-feature-settings: "kern" 1, "tnum" 1, "lnum" 1 !important;
  font-variant-numeric: tabular-nums lining-nums !important;
}

/* Italic content uses Fraunces SOFT axis (gentler italic) when supported */
em, i, cite,
.pz-quote,
.pz-philosophy__lead em {
  font-variation-settings: "SOFT" 100 !important;
}

/* Premium quote treatment — pull-quote rendering with hanging punctuation */
blockquote,
.pz-pullquote {
  hanging-punctuation: first last allow-end !important;
  text-wrap: balance !important;
}

/* Display heading wrap balance — modern browsers pretty-balance multi-line
   headlines. Premium magazines do this manually; CSS now handles it. */
h1, h2, h3,
.pz-page-h1,
.pz-page-h2,
.pz-hero__h1,
.entry-title {
  text-wrap: balance !important;
}

/* Long-form paragraphs get pretty wrapping (avoids orphan words) */
body.pz-clean-post .entry-content p,
.entry-content > p {
  text-wrap: pretty !important;
}