/* ============================================================
   ACG Growth Partners — editorial typography system
   Redesign brief, 19 August 2026, and the client's typography note.

   THE RULE THIS FILE IMPLEMENTS
     Cormorant Garamond  major statements, hero headlines, section-opening
                         headlines, occasional pull quotes. Nothing else.
     Inter               body copy, navigation, buttons, labels, forms,
                         pricing and data, supporting copy.

   It applies to every page. It was first shipped scoped to the homepage for the
   client to approve the hierarchy, sizing and weights; that approval came on 19
   August 2026 and the scope was removed.

   The families are set at source in style.css (--font-display, --font-body).
   This file carries the *roles* — which element gets the serif, at what size and
   weight, and everything that has to move to Inter to keep the serif selective.

   THE FACES ARE SETTLED. The client confirmed Cormorant Garamond and Inter on
   19 August 2026. Marcellus stays in the stack as a fallback only — it is still
   self-hosted and still carries the letterhead and the profile — but it is no
   longer an open choice for the site. Do not swap it back without written
   instruction.
   ============================================================ */

/* ---- Faces (self-hosted, variable) ---- */
@font-face {
  font-family: 'Cormorant Garamond';
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url('../fonts/cormorantgaramond-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Cormorant Garamond';
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url('../fonts/cormorantgaramond-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Cormorant Garamond';
  font-style: italic;
  font-weight: 300 700;
  font-display: swap;
  src: url('../fonts/cormorantgaramond-italic-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Cormorant Garamond';
  font-style: italic;
  font-weight: 300 700;
  font-display: swap;
  src: url('../fonts/cormorantgaramond-italic-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('../fonts/inter-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('../fonts/inter-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

:root {
  /* The brief bans excessive uppercase tracking. One value, used everywhere a
     kicker or a nav label is set in caps, replacing the 0.16em-0.30em spread
     the site had accumulated. */
  --tracking-kicker: 0.11em;
}

body {
  /* Inter runs wider than Maven Pro at the same size. A hair of negative
     tracking holds the existing measures without touching any font-size —
     the brief forbids shrinking body copy to make a layout fit. */
  letter-spacing: -0.006em;
  font-optical-sizing: auto;
}

/* ============================================================
   1 / Major statements — the serif, and only here
   ============================================================ */
.hero-title {
  font-size: clamp(2.7rem, 6.6vw, 5.25rem);
  font-weight: 500;
  line-height: 1.02;
  letter-spacing: -0.014em;
}
.display {
  font-size: clamp(2.25rem, 4.5vw, 3.55rem);
  font-weight: 500;
  line-height: 1.08;
  letter-spacing: -0.008em;
}
.loader-caption {
  font-size: clamp(1.65rem, 4.1vw, 2.55rem);
  font-weight: 500;
  line-height: 1.1;
  letter-spacing: -0.008em;
}

/* The gold emphasis inside a statement. Kept as a weight shift as well as a
   colour shift so the emphasis survives on a page read in greyscale, and so
   gold is doing hierarchy rather than decoration. */
.hero-title em,
.display em { font-weight: 600; }

/* Card headings stay serif — they open a block of copy, which is the "section
   opening headline" role — but move up a weight and a size. Cormorant's 400 at
   1.1rem is too fine to hold against Inter body copy directly beneath it; the
   pairing reads as two unrelated documents rather than one hierarchy. */
.pillar h3,
.svc h3,
.path h3,
.step h3,
.feature h3,
.diff-list strong,
.qa strong {
  font-weight: 600;
  letter-spacing: -0.004em;
  /* A single word longer than its column must wrap rather than spill: the serif
     sets wider than the sans these boxes were measured against. */
  overflow-wrap: break-word;
  /* Several of these never set a line-height and inherited the body's 1.6.
     At 1.3rem that opens a two-line heading far enough to read as two separate
     headings — visible on "12-month replacement warranty". */
  line-height: 1.22;
}
.pillar h3 { font-size: 1.42rem; }
.qa strong { font-size: 1.3rem; }
.path h3,
.svc h3 { font-size: 1.3rem; }
.step h3,
.feature h3,
.diff-list strong { font-size: 1.28rem; }
.proof-item h3 {
  font-weight: 600;
  letter-spacing: -0.004em;
  line-height: 1.22;
  font-size: clamp(1.15rem, 1.9vw, 1.3rem);
}

/* The serif floor. Below roughly 1.15rem Cormorant stops reading as authority
   and starts reading as a caption in the wrong font — and none of these is a
   major statement, a hero headline, a section opener or a pull quote, which is
   the whole of what the client's note allows the serif to do. `.step-num` and
   `.compare-vs` are figures besides, which the note puts in Inter outright. */
.diff-media figcaption,
.step-num,
.compare-vs,
.ideal-grid span,
.text-link,
.acq-example-title,
.legal-aside h3 {
  font-family: var(--font-body);
  letter-spacing: 0.002em;
}
/* "R5 million acquisition" heads a worked commercial example. Cormorant sets
   its figures old-style, so the 5 dropped below the baseline and the amount
   read as decoration rather than as a number. */
.acq-example-title {
  font-weight: 600;
  font-size: 1.1rem;
  letter-spacing: -0.008em;
  font-variant-numeric: tabular-nums lining-nums;
}
.diff-media figcaption { font-size: 0.875rem; }
.text-link { font-size: 0.9375rem; font-weight: 500; }
.step-num,
.compare-vs { font-weight: 600; font-variant-numeric: tabular-nums lining-nums; }
.legal-aside h3 { font-weight: 600; }

/* Pull quotes — one of the four places the brief allows the serif. */
.pull-quote,
.quote-card blockquote,
.elevate-quote {
  font-weight: 400;
  font-size: clamp(1.55rem, 3.4vw, 2.3rem);
  line-height: 1.28;
  letter-spacing: -0.006em;
}

/* ============================================================
   2 / Figures and data — Inter, per the client's note
   These carried the display serif. Cormorant sets numerals light and
   old-style-ish, which is the opposite of what a rate or an AUM figure needs,
   and the note puts "pricing/data" in Inter explicitly.
   ============================================================ */
.stat strong,
.trust-item strong,
.tier-price strong,
.roi-cell strong,
.roi-saving strong,
.hero-badge strong,
.example-num {
  font-family: var(--font-body);
  font-weight: 600;
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums lining-nums;
}
.stat strong { font-size: clamp(1.5rem, 2.4vw, 2rem); }
.trust-item strong { font-size: clamp(1.45rem, 2.6vw, 1.85rem); }
.hero-badge strong { font-size: 1.5rem; letter-spacing: 0.01em; }

/* ============================================================
   3 / Uppercase and tracking — kickers and navigation only
   Every rule below either loses its caps because it is not a kicker, or keeps
   them at one shared tracking value instead of its own.
   ============================================================ */
.hero-division,
.eyebrow,
.loader-eyebrow,
.loader-pillars,
.scroll-hint span,
.hero-badge span,
.footer-col h3,
.footer-tagline,
.stat span,
.breadcrumb,
.field label,
.tier-type,
.tier-price-label,
.tier-spec dt,
.roi-compare-head > div,
.roi-saving span,
.roi-cell span,
.cta-contacts > li > span:first-child,
.tier-tag,
.pull-quote cite,
.quote-card cite,
.elevate-quote cite {
  letter-spacing: var(--tracking-kicker);
  font-weight: 500;
}

/* Kickers that had been shrunk below a legible size to hold their tracking.
   The brief's floor: nothing functional under 0.75rem. */
/* Inter is wider than Maven Pro, and this column head is a nowrap flex row: the
   label and its qualifier sit side by side, so the wider face squeezed the
   label until "NON-MEMBER" broke at its own hyphen. Letting the row wrap puts
   the qualifier on its own line, which is what the <br> in the markup intended
   before the cell became a flex container. */
.roi-compare-head > div {
  letter-spacing: 0.05em;
  flex-wrap: wrap;
}

.hero-badge span { font-size: 0.7rem; }
.scroll-hint span { font-size: 0.72rem; }
.loader-pillars { font-size: 0.72rem; }
.stat span { font-size: 0.78rem; }

/* Not kickers, so not uppercase. `.svc-more` is a link, `.trust-item span` is a
   descriptive line, and setting either in tracked caps is what gave the site
   its component-library character. */
.svc-more {
  text-transform: none;
  letter-spacing: 0.005em;
  font-size: 0.9375rem;
  font-weight: 500;
}
.trust-item span {
  text-transform: none;
  letter-spacing: 0.002em;
  font-size: 0.9rem;
  line-height: 1.45;
}

/* ============================================================
   4 / Body copy — Inter, and never smaller to make something fit
   Each of these was set between 0.72rem and 0.94rem while carrying real
   sentences. Inter's larger x-height does part of the work; the rest is size.
   ============================================================ */
.hero-copy { font-size: 1.1rem; line-height: 1.7; }
.hero-nofee { font-size: 1rem; line-height: 1.65; }
.section-head p { line-height: 1.6; }
.pillar p,
.svc p,
.path p { font-size: 0.9688rem; line-height: 1.6; }
.qa span { font-size: 0.9rem; line-height: 1.5; }
.fact-list span { font-size: 0.9375rem; }

/* The fine print. None of it was shrunk to make a layout fit, but it had drifted
   down to 11.5–12.5px, and the brief's readability floor applies to commercial
   and legal copy as much as to body text — it is the copy a practice owner
   reads hardest. 0.8125rem (13px) is the floor; the rates and VAT qualifiers
   that sit under a headline figure carry a little more, because they are
   pricing data rather than a disclaimer. */
.pricing-footnote,
.roi-disclaimer,
.acq-example-note,
.footer-fee-note,
.footer-copy {
  font-size: 0.8125rem;
  line-height: 1.6;
}
.tier-price span,
.vat-note { font-size: 0.875rem; line-height: 1.55; }
.acq-example-list dt span { font-size: 0.8125rem; }

/* ============================================================
   5 / Interior pages
   Found by sweeping every template in the browser rather than by reading the
   stylesheet, which is why these are grouped by what was wrong rather than by
   the page they sit on. Several need a compound selector to clear the
   specificity of the rule they are correcting — `.footer-base p` and
   `.aside-card .aside-note` both outrank a bare class.
   ============================================================ */

/* Caps on copy that is not a kicker. `.recruit-desc` renders the engagement
   descriptor straight out of pricing.ts — a full sentence, set in 11.5px
   tracked capitals. It is the clearest case on the site of type fighting its
   own content. */
.recruit-desc {
  text-transform: none;
  letter-spacing: 0.002em;
  font-size: 0.9375rem;
  line-height: 1.55;
}

/* Genuine kickers: caps kept, tracking brought to the shared value, and lifted
   off the sizes they had been shrunk to in order to hold that tracking. */
.recruit-spec dt,
.recruit-tag,
.acq-path-tag,
.compare-tag,
.compare-plus,
.lp-eyebrow {
  letter-spacing: var(--tracking-kicker);
  font-weight: 500;
}
.recruit-spec dt { font-size: 0.75rem; }
.recruit-tag,
.acq-path-tag,
.compare-tag { font-size: 0.72rem; }

/* Supporting copy back above the readability floor. Form hints and consent
   copy get more than the rest: the client's note names forms explicitly, and
   the consent text is what a candidate is agreeing to. */
.field-hint,
.consent-intro { font-size: 0.875rem; line-height: 1.55; }
.tag-list--sm li,
.acq-path-note,
.dense-note,
.vc-meta li,
.footer-base p.footer-copy,
.footer-base .footer-fee-note,
.aside-card .aside-note {
  font-size: 0.8125rem;
  line-height: 1.6;
}

/* Navigation and buttons — Inter, restrained. The nav is one of the two places
   the brief still allows caps; it is already sentence case here, so it only
   needs the weight that carries Inter at small sizes. */
.main-nav > a,
.nav-trigger,
.btn {
  font-weight: 500;
  letter-spacing: 0.002em;
}
.btn { font-weight: 600; }
