/* ── Type scale ──────────────────────────────────────────────────────────
   Display and money sizes are Recoleta; UI sizes are Public Sans.
   Recoleta's counters are rounder and its sidebearings tighter than a
   book serif, so display tracking is looser here than a Garamond-style
   face would want. Recoleta has no italic — see tokens/fonts.css.
   Each step ships size / line-height / tracking as three tokens. */
:root{
  --fs-display-xl:4.75rem;
  --lh-display-xl:1.02; /* @kind font */
  --ls-display-xl:-.022em; /* @kind font */
  --fs-display-lg:3.75rem;
  --lh-display-lg:1.05; /* @kind font */
  --ls-display-lg:-.020em; /* @kind font */
  --fs-display-md:2.875rem;
  --lh-display-md:1.10; /* @kind font */
  --ls-display-md:-.017em; /* @kind font */
  --fs-display-sm:2.25rem;
  --lh-display-sm:1.16; /* @kind font */
  --ls-display-sm:-.013em; /* @kind font */

  --fs-title-lg:1.75rem;
  --lh-title-lg:1.24; /* @kind font */
  --ls-title-lg:-.010em; /* @kind font */
  --fs-title-md:1.375rem;
  --lh-title-md:1.32; /* @kind font */
  --ls-title-md:-.008em; /* @kind font */
  --fs-title-sm:1.125rem;
  --lh-title-sm:1.40; /* @kind font */
  --ls-title-sm:-.004em; /* @kind font */

  --fs-read-lg:1.1875rem;
  --lh-read-lg:1.78; /* @kind font */
  --fs-read-md:1.0625rem;
  --lh-read-md:1.72; /* @kind font */

  --fs-body-lg:1.0625rem;
  --lh-body-lg:1.62; /* @kind font */
  --fs-body-md:.9375rem;
  --lh-body-md:1.58; /* @kind font */
  --fs-body-sm:.8125rem;
  --lh-body-sm:1.52; /* @kind font */

  --fs-label-md:.8125rem;
  --lh-label-md:1.30; /* @kind font */
  --ls-label-md:.004em; /* @kind font */
  --fs-label-sm:.6875rem;
  --lh-label-sm:1.20; /* @kind font */
  --ls-label-sm:.09em; /* @kind font */

  --fw-light:300; /* @kind font */
  --fw-regular:400; /* @kind font */
  --fw-medium:500; /* @kind font */
  --fw-semibold:600; /* @kind font */
  --fw-bold:700; /* @kind font */

  /* Financial figures and tracked time.
     Large money is the display serif — it is the loudest thing on a screen.
     Table money and all durations are Public Sans with tabular figures, and
     carry weight 500 so they hold their own against label text. */
  --fs-money-xl:3.5rem;    --lh-money-xl:1.0; /* @kind font */  --ls-money-xl:-.022em; /* @kind font */
  --fs-money-lg:2.125rem;  --lh-money-lg:1.05; /* @kind font */ --ls-money-lg:-.018em; /* @kind font */
  --fs-money-md:1.3125rem; --lh-money-md:1.2; /* @kind font */  --ls-money-md:-.010em; /* @kind font */
  --fs-money-sm:.9375rem;  --lh-money-sm:1.4; /* @kind font */  --ls-money-sm:0em; /* @kind font */

  --fs-timer:2.75rem;      --lh-timer:1.0; /* @kind font */  --ls-timer:-.020em; /* @kind font */
  --fs-duration-lg:1.375rem; --ls-duration-lg:-.008em; /* @kind font */
  --fs-duration-md:.9375rem; --ls-duration-md:0em; /* @kind font */

  --fs-table:.875rem;      --lh-table:1.45; /* @kind font */

  /* Script accent. Caveat has a small x-height and a light stroke, so these
     steps run ABOVE the equivalent body sizes and the roles set weight 500. */
  --fs-script-lg:2rem; /* @kind font */
  --fs-script-md:1.5rem; /* @kind font */
  --fs-script-sm:1.25rem; /* @kind font */
  --lh-script:1.25; /* @kind font */
  --fw-script:500; /* @kind font */

  --measure-read:34rem; /* @kind spacing */
  --measure-prose:44rem; /* @kind spacing */
}

/* Text roles — apply as classes when not using a component */
.iv-display-xl{font-family:var(--font-serif);font-size:var(--fs-display-xl);line-height:var(--lh-display-xl);letter-spacing:var(--ls-display-xl);font-weight:var(--fw-regular);color:var(--text-title);text-wrap:balance}
.iv-display-lg{font-family:var(--font-serif);font-size:var(--fs-display-lg);line-height:var(--lh-display-lg);letter-spacing:var(--ls-display-lg);font-weight:var(--fw-regular);color:var(--text-title);text-wrap:balance}
.iv-display-md{font-family:var(--font-serif);font-size:var(--fs-display-md);line-height:var(--lh-display-md);letter-spacing:var(--ls-display-md);font-weight:var(--fw-regular);color:var(--text-title);text-wrap:balance}
.iv-display-sm{font-family:var(--font-serif);font-size:var(--fs-display-sm);line-height:var(--lh-display-sm);letter-spacing:var(--ls-display-sm);font-weight:var(--fw-regular);color:var(--text-title);text-wrap:balance}
.iv-title-lg{font-family:var(--font-serif);font-size:var(--fs-title-lg);line-height:var(--lh-title-lg);letter-spacing:var(--ls-title-lg);font-weight:var(--fw-regular);color:var(--text-title)}
.iv-title-md{font-family:var(--font-serif);font-size:var(--fs-title-md);line-height:var(--lh-title-md);letter-spacing:var(--ls-title-md);font-weight:var(--fw-medium);color:var(--text-title)}
.iv-title-sm{font-family:var(--font-sans);font-size:var(--fs-title-sm);line-height:var(--lh-title-sm);letter-spacing:var(--ls-title-sm);font-weight:var(--fw-semibold);color:var(--text-title)}
.iv-read{font-family:var(--font-serif);font-size:var(--fs-read-md);line-height:var(--lh-read-md);color:var(--text-body);max-width:var(--measure-read);text-wrap:pretty}
.iv-read-lg{font-family:var(--font-serif);font-size:var(--fs-read-lg);line-height:var(--lh-read-lg);color:var(--text-body);max-width:var(--measure-read);text-wrap:pretty}
.iv-body{font-family:var(--font-sans);font-size:var(--fs-body-md);line-height:var(--lh-body-md);color:var(--text-body)}
.iv-body-lg{font-family:var(--font-sans);font-size:var(--fs-body-lg);line-height:var(--lh-body-lg);color:var(--text-body)}
.iv-body-sm{font-family:var(--font-sans);font-size:var(--fs-body-sm);line-height:var(--lh-body-sm);color:var(--text-secondary)}
.iv-label{font-family:var(--font-sans);font-size:var(--fs-label-md);line-height:var(--lh-label-md);letter-spacing:var(--ls-label-md);font-weight:var(--fw-medium);color:var(--text-secondary)}
.iv-eyebrow{font-family:var(--font-sans);font-size:var(--fs-label-sm);line-height:var(--lh-label-sm);letter-spacing:var(--ls-label-sm);font-weight:var(--fw-semibold);text-transform:uppercase;color:var(--text-muted)}
.iv-numeral{font-family:var(--font-sans);font-size:var(--fs-body-sm);font-variant-numeric:tabular-nums;font-weight:var(--fw-medium);color:var(--text-secondary)}
/* money — serif at hero sizes, tabular Public Sans in tables */
.iv-money-xl{font-family:var(--font-serif);font-size:var(--fs-money-xl);line-height:var(--lh-money-xl);letter-spacing:var(--ls-money-xl);font-weight:var(--fw-regular);color:var(--money-positive);font-variant-numeric:tabular-nums}
.iv-money-lg{font-family:var(--font-serif);font-size:var(--fs-money-lg);line-height:var(--lh-money-lg);letter-spacing:var(--ls-money-lg);font-weight:var(--fw-regular);color:var(--money-positive);font-variant-numeric:tabular-nums}
.iv-money-md{font-family:var(--font-serif);font-size:var(--fs-money-md);line-height:var(--lh-money-md);letter-spacing:var(--ls-money-md);font-weight:var(--fw-medium);color:var(--money-positive);font-variant-numeric:tabular-nums}
.iv-money-sm{font-family:var(--font-sans);font-size:var(--fs-money-sm);line-height:var(--lh-money-sm);letter-spacing:var(--ls-money-sm);font-weight:var(--fw-medium);color:var(--text-body);font-variant-numeric:tabular-nums}
/* tracked time — Public Sans, always tabular so the timer cannot jitter */
.iv-timer{font-family:var(--font-sans);font-size:var(--fs-timer);line-height:var(--lh-timer);letter-spacing:var(--ls-timer);font-weight:var(--fw-medium);color:var(--text-title);font-variant-numeric:tabular-nums}
.iv-duration-lg{font-family:var(--font-sans);font-size:var(--fs-duration-lg);letter-spacing:var(--ls-duration-lg);font-weight:var(--fw-medium);color:var(--text-title);font-variant-numeric:tabular-nums}
.iv-duration{font-family:var(--font-sans);font-size:var(--fs-duration-md);letter-spacing:var(--ls-duration-md);font-weight:var(--fw-medium);color:var(--text-body);font-variant-numeric:tabular-nums}
.iv-table{font-family:var(--font-sans);font-size:var(--fs-table);line-height:var(--lh-table);color:var(--text-body)}
.iv-table-num{font-family:var(--font-sans);font-size:var(--fs-table);line-height:var(--lh-table);color:var(--text-body);font-variant-numeric:tabular-nums;font-weight:var(--fw-medium)}
/* script accent — rare by design; see --font-script in tokens/fonts.css */
.iv-script{font-family:var(--font-script);font-size:var(--fs-script-md);line-height:var(--lh-script);font-weight:var(--fw-script);color:var(--text-secondary)}
.iv-script-lg{font-family:var(--font-script);font-size:var(--fs-script-lg);line-height:var(--lh-script);font-weight:var(--fw-script);color:var(--text-secondary)}
.iv-script-sm{font-family:var(--font-script);font-size:var(--fs-script-sm);line-height:var(--lh-script);font-weight:var(--fw-script);color:var(--text-secondary)}
/* pulled quotes and the invoice sign-off — Recoleta Light, upright.
   Recoleta has no italic; never set font-style:italic on the serif. */
.iv-quote{font-family:var(--font-serif);font-weight:var(--fw-light);font-style:normal;letter-spacing:-.008em}
