/* ImmoLosch type system. Fraunces is reserved for page heroes and main contact headings.
   All section, content, question, card and utility headings use Plus Jakarta Sans.
   Sizes reach the mobile values at 600px and the desktop values at 1280px.
   Component styles consume these tokens; content role classes set heading roles. */
:root {
  --type-display:clamp(2.375rem,calc(1.3824rem + 2.6471vw),3.5rem);
  --type-section:clamp(1.875rem,calc(1.3235rem + 1.4706vw),2.5rem);
  --type-content:clamp(1.375rem,calc(1.1544rem + .5882vw),1.625rem);
  --type-question:clamp(1.125rem,calc(1.0147rem + .2941vw),1.25rem);
  --type-contact:clamp(2.25rem,calc(1.5882rem + 1.7647vw),3rem);
  /* Legacy names resolve to role-specific sizes; editorial sections are now sans. */
  --type-h2-editorial:var(--type-section);
  --type-h2-functional:var(--type-section);
  --type-h3:var(--type-content);
  --type-estimate:clamp(2.25rem,calc(1.5rem + 2.2vw),3.5rem);
  --type-estimate-preview:clamp(14px,8cqi,var(--type-h3));
  /* Team cards: the personal quote on the back, sized to the card (container query units). */
  --type-quote:clamp(12.5px,7.4cqi,21px);
  --type-quote-mark:clamp(36px,22cqi,64px);
  --line-quote:1.38;
  --line-quote-mark:.6;
  --tracking-estimate:-.04em;
  --type-h4:var(--type-question);
  --type-lead:clamp(1.0625rem,calc(1.0074rem + .1471vw),1.125rem);
  --type-body-lg:clamp(1.0625rem,calc(1.0074rem + .1471vw),1.125rem);
  --type-body:1rem;
  --type-eyebrow:clamp(.75rem,calc(.6949rem + .1471vw),.8125rem);
  --type-ui:clamp(1rem,calc(.9449rem + .1471vw),1.0625rem);
  --type-nav:1.0625rem;
  --type-metadata:.875rem;
  --type-caption:.75rem;
  --type-data:clamp(1.875rem,calc(1.2132rem + 1.7647vw),2.625rem);
  /* Compact proof statistics retain their original scale. */
  --type-stat:clamp(1.5rem,2.5vw,2.15rem);
  --type-stat-long:clamp(1.2rem,2.5vw,2.05rem);
  --line-stat:1.1;
  --tracking-stat:-.03em;
  --type-icon:var(--type-h3);
  --line-display:1.02;
  --line-h2-editorial:1.1;
  --line-h2-functional:1.1;
  --line-h3:1.2;
  --line-h4:1.3;
  --line-lead:1.5;
  --line-body-lg:1.55;
  --line-body:1.55;
  --line-eyebrow:1.3;
  --line-ui:1.3;
  --line-nav:1.3;
  --line-metadata:1.4;
  --line-caption:1.4;
  --line-data:1.05;
  --line-icon:1;
  --weight-body:400;
  --weight-medium:500;
  --weight-label:600;
  --weight-heading:600;
  --weight-bold:700;
  --tracking-editorial:-.025em;
  --tracking-heading:-.02em;
  --tracking-eyebrow:.12em;
  --tracking-body:0;
  --measure-display:18ch;
  --measure-heading:22ch;
  --measure-functional:26ch;
  --measure-lead:52ch;
  --measure-body:62ch;
  --space-eyebrow-heading:16px;
  --space-heading-body:18px;
  --space-paragraph:16px;
  --space-title-body:12px;
  /* Compatibility aliases for existing layout references. */
  --type-hero:var(--type-display);
  --type-hero-wide:var(--type-display);
  --section-title:var(--type-h2-editorial);
  --section-lead:var(--type-lead);
  --type-small:var(--type-metadata);
  --type-label:var(--type-eyebrow);
}
@media(max-width:600px) {
  :root {
    --line-display:1;
    --line-h2-editorial:1.12;
    --line-h2-functional:1.12;
    --line-h3:1.25;
    --line-lead:1.45;
    --space-eyebrow-heading:12px;
    --space-heading-body:16px;
  }
}
/* Role variables resolve on each heading, even in component-specific selectors. */
.type-display {
  --heading-family:var(--serif); --heading-size:var(--type-display);
  --heading-line:var(--line-display); --heading-weight:var(--weight-medium);
  --heading-tracking:var(--tracking-editorial); --heading-measure:var(--measure-display);
}
.type-h2-editorial {
  --heading-family:var(--sans); --heading-size:var(--type-h2-editorial);
  --heading-line:var(--line-h2-editorial); --heading-weight:var(--weight-heading);
  --heading-tracking:var(--tracking-heading); --heading-measure:var(--measure-functional);
}
.type-h2-functional {
  --heading-family:var(--sans); --heading-size:var(--type-h2-functional);
  --heading-line:var(--line-h2-functional); --heading-weight:var(--weight-heading);
  --heading-tracking:var(--tracking-heading); --heading-measure:var(--measure-functional);
}
.type-h3 {
  --heading-family:var(--sans); --heading-size:var(--type-h3);
  --heading-line:var(--line-h3); --heading-weight:var(--weight-heading);
  --heading-tracking:var(--tracking-heading); --heading-measure:none;
}
.type-h4 {
  --heading-family:var(--sans); --heading-size:var(--type-h4);
  --heading-line:var(--line-h4); --heading-weight:var(--weight-heading);
  --heading-tracking:var(--tracking-heading); --heading-measure:none;
}
.type-contact {
  --heading-family:var(--serif); --heading-size:var(--type-contact);
  --heading-line:var(--line-display); --heading-weight:var(--weight-medium);
  --heading-tracking:var(--tracking-editorial); --heading-measure:var(--measure-heading);
}
.type-question {
  --heading-family:var(--sans); --heading-size:var(--type-question);
  --heading-line:var(--line-h4); --heading-weight:var(--weight-medium);
  --heading-tracking:var(--tracking-heading); --heading-measure:none;
}
h1,h2,h3,h4,.type-contact,.type-question,.type-display,.type-h2-editorial,.type-h2-functional,.type-h3,.type-h4 {
  font-family:var(--heading-family,var(--sans));
  font-size:var(--heading-size,var(--type-h3));
  font-weight:var(--heading-weight,var(--weight-heading));
  line-height:var(--heading-line,var(--line-h3));
  letter-spacing:var(--heading-tracking,var(--tracking-heading));
  font-variation-settings:'opsz' 32;
  margin:0;
}
.type-lead { font:var(--weight-body) var(--type-lead)/var(--line-lead) var(--sans); max-width:var(--measure-lead); }
.type-body-lg { font:var(--weight-body) var(--type-body-lg)/var(--line-body-lg) var(--sans); max-width:var(--measure-body); }
.type-body { font:var(--weight-body) var(--type-body)/var(--line-body) var(--sans); max-width:var(--measure-body); }
.type-eyebrow { color:var(--brick); font:var(--weight-label) var(--type-eyebrow)/var(--line-eyebrow) var(--sans); letter-spacing:var(--tracking-eyebrow); text-transform:uppercase; }
.type-ui { font:var(--weight-medium) var(--type-ui)/var(--line-ui) var(--sans); }

/* Shared reading rhythm; component geometry stays in its own stylesheet. */
:is(.type-display,.type-contact,.type-h2-editorial,.type-h2-functional) {
  max-width:var(--heading-measure);
}
p.type-lead,.service-page p.type-lead {
  font:var(--weight-body) var(--type-lead)/var(--line-lead) var(--sans);
  letter-spacing:var(--tracking-body); max-width:var(--measure-lead);
}
:is(.eyebrow,.ve-eyebrow,.service-hero__label) {
  margin-bottom:var(--space-eyebrow-heading);
}
:is(.eyebrow,.ve-eyebrow,.service-hero__label) + :is(h1,h2,h3) { margin-top:0; }
:is(.type-display,.type-contact,.type-h2-editorial,.type-h2-functional) + p.type-lead,
.shead h2 + .lead,.contact .section-title + .lead,
.about-office h2 + .about-office__copy {
  margin-top:var(--space-heading-body);
}
:is(.service-content__body,.svc-accordion__answer,.pd-glance,.fees-item__copy) > p + p {
  margin-top:var(--space-paragraph);
}
:is(.svc-case,.step,.service-steps,.service-value-options) h3 + p {
  margin-top:var(--space-title-body);
}
.svc-accordion summary.type-question {
  font:var(--weight-medium) var(--type-question)/var(--line-h4) var(--sans);
  letter-spacing:var(--tracking-heading);
}

.btn,.arrowlink,.textaction { line-height:var(--line-ui); }
.nav > a,.nav__btn { line-height:var(--line-nav); }
.service-page .rental-process .service-section-head > p.type-lead,
.service-page .service-editorial header > p.type-lead {
  font-size:var(--type-lead); line-height:var(--line-lead);
  max-width:var(--measure-lead); margin-top:var(--space-heading-body);
}
/* Section labels share a baseline even when rendered in a dark component. */
.ve-eyebrow,.service-small-label,.footer__h,.mobilemenu__h,.service-hero__label {
  font-family:var(--sans); font-size:var(--type-eyebrow);
  font-weight:var(--weight-label); line-height:var(--line-eyebrow);
  letter-spacing:var(--tracking-eyebrow); text-transform:uppercase;
}

/* Wrapping: headings and intros balance their lines; body copy avoids a lone last word. */
:is(h1,h2,h3,h4,.type-lead,.lead,.eyebrow) { text-wrap:balance; }
:is(p,li,dd,summary) { text-wrap:pretty; }
