/* Bessemer brand typefaces, served from Bessemer's own hosts.
   Europa comes from Adobe Fonts kit zqt2wqb, linked from each page head.
   Noe Display is not in that kit, so it is linked from bvp.com's own copy.
   See the note beside NOE_URL in scripts/generate-site.mjs. */

@font-face {
  font-family: "Noe Display";
  src: url("https://www.bvp.com/assets/themes/bvp-24/css/webfonts/NoeDisplayMedium.woff") format("woff");
  /* A range, not 400, and this is the whole reason the headings looked wrong.
   *
   * Every h1 asks for font-weight: 800. Only one Noe file exists -- Medium --
   * and declaring it at 400 tells the browser no 800 face is available, so it
   * synthesises one by algorithmically thickening the outlines. Measured at 31%
   * more ink than the real weight: heavy, tight, and nothing the foundry drew.
   * It does not widen the advance, which is why it is easy to miss.
   *
   * Declaring the range says this face answers for any weight, so the browser
   * uses the outlines as designed and stops faking. The PDF is unaffected -- it
   * has its own @font-face in the print master. */
  font-weight: 100 900;
  font-style: normal;
  /* block, not swap. swap was the instinctive choice -- never let a third-party
     host hold up paint -- but it is wrong for a face used only on headings that
     is revalidated on every load. bvp.com sends max-age=0, must-revalidate, so
     the browser re-checks freshness each time: a measured 187ms during which
     swap paints Georgia and then flips to Noe, on every refresh, forever. Not a
     first-visit cost.
   *
   * block hides the headings for that same 187ms instead, then paints them
   * correctly once. Invisible-then-right beats wrong-then-right for six words of
   * display type. The 3s cap means a dead bvp.com still yields to Georgia rather
   * than leaving a blank cover. Body text is unaffected -- Europa comes from the
   * kit and carries its own display strategy. */
  font-display: block;
}
