/* =========================================================================
   DISPLAY FACE — Oswald
   Loads after main.css. One <link> away from being removed.

   Swapping a display face is never just swapping a stack: the optical
   corrections belong to the face, not to the size. Oswald is a condensed
   grotesk with tall caps, short descenders and a narrow set, so every
   correction the previous face needed is wrong for this one.
   ========================================================================= */

:root {
  --font-display: "Oswald", "Inter", system-ui, -apple-system, sans-serif;

  /* Oswald is already narrow. The −0.022em that stopped the wider face going
     gappy at 64px jams this one, so display tracking returns to neutral —
     and small sizes go slightly OPEN, which is what condensed faces need to
     stay readable below 20px. */
  --track-display: 0em;
  --track-heading: 0.004em;

  /* Condensed letterforms read heavier at the same nominal weight, so the
     whole ramp drops a step.

     Weights follow the Figma text styles: display/hero and display/section
     are Oswald Regular, display/h3 is Oswald Light. The ramp still inverts —
     the biggest sizes are not the heaviest — but the inversion now starts one
     step later than it did, so the display tier carries more presence and the
     sub-heads recede. */
  --weight-display: 400;   /* hero, section titles — Oswald Regular */
  --weight-heading: 300;   /* 22–34px sub-heads — Oswald Light */
  --weight-label:   500;

  /* Tall caps and short descenders leave the line looking tighter than it
     measures, so the leading opens to compensate. */
  --lh-display: 1.08;
  --lh-heading: 1.20;

}

/* -------------------------------------------------------------------------
   Caps — display only
   Oswald is drawn for uppercase: tall caps, short descenders, a narrow set.
   It is also where uppercase is safe, because every one of these lines is two
   to four words. Uppercase removes the ascender/descender variation the eye
   uses to recognise word shapes, so it measurably slows reading — which is
   why it stops at the display tier and never reaches a lead, a body or a
   caption.

   The sub-line deliberately stays sentence case. Title in caps against a
   sentence-case sub gives the pair a real relationship instead of a wall of
   capitals — the pattern `vault/organimo-com` (3, in) records as working:
   "сочетание uppercase-заголовков с обычным регистром в основном тексте".
   ------------------------------------------------------------------------- */
.hero__title,
.section-title,
.contact__title {
  text-transform: uppercase;
  /* Caps need tracking OPENED, not closed — the counters stop nesting into
     each other once the descenders are gone. */
  letter-spacing: 0.03em;
  /* And leading tightened, because there are no descenders to clear. */
  line-height: 0.98;
}

/* The old 400 exception for section titles is gone — --weight-display is 400
   for the whole display tier now, so the rule said nothing. */

/* Caps set wider per character, so the unbreakable hero phrase needs a little
   less viewport-driven size to stay on one line down at 320px. */
:root { --text-hero: clamp(1.5rem, 7.6vw, 4.25rem); }

/* Oswald ships no true italic and no tabular figure set, so anything aligning
   down a column stays in Inter, which has both.

   .num-tabular IS NO LONGER IN THIS LIST, and that was a real defect rather than
   a preference. The rule was written to pull figures out of OSWALD; .num-tabular
   is also on the configurator's total, which declares the SERIF — so a rule
   aimed at the display face was quietly overriding the one role the serif has.
   Measured, the build page contained no Playfair at all and its total was set in
   the body face at 52px, a combination the home page does not have.

   .plate dd and .vehicle__specs dd went with it: neither class exists in any
   page's markup. A selector with nothing behind it is how a rule survives long
   enough to break something else. */
.hours dd { font-family: var(--font-body); }

/* -------------------------------------------------------------------------
   THE LABEL REGISTER — one rule, and this is the only place it is decided.

   Measured before this existed, ten micro-labels doing ONE job — eyebrow, nav
   item, collection count, START HERE, the progress count, the panel's spec
   keys, CONFIGURED SO FAR, CHOOSE AS MANY — ran across two faces, two weights
   and three trackings:

     nav / phone / pill        Oswald 400 at 0.005em   ← jammed, effectively none
     START HERE / spec keys    Oswald 500 at 0.03em
     eyebrow                   Inter Tight 500 at 0.05em
     progress / panel eyebrow  Inter Tight 500 at 0.03em

   One role in two voices is the drift a reader feels as "everything is in a
   heap" without being able to name it — the typographic cue stops working
   everywhere, not only where it changed. So: a micro-label is the DISPLAY face.
   Oswald is drawn for caps — tall caps, short descenders, a narrow set — it
   already carries the nav and the buttons, and the house split says Oswald
   announces while Inter informs. A label announces; it is not prose.

   Tracking is --track-caps, the page's single uppercase value. I briefly ran
   these at 0.10em on the rule that uppercase opens as it shrinks — true for a
   normal-width face, wrong for a condensed one drawn for caps, where it read as
   gaps rather than as tracking. The 0.05em that used to sit here was a raw value
   belonging to no scale; the token is the fix, not a bigger number.

   The condition for being in this list is exactly: uppercase, and small enough
   to be a label rather than a heading. Nothing else.
   ------------------------------------------------------------------------- */
.eyebrow,
.vehicle__status,
.spec-pairs__row dt,
.build-base__step,
.build-progress__count,
.vdp-panel__eyebrow,
.optgroup__mech,
.site-nav__link,
.collection-pill__label {
  font-family: var(--font-display);
  font-weight: var(--weight-label);
  letter-spacing: var(--track-caps);
}
