/* ============================================================
   Inter everywhere: global typography override
   ------------------------------------------------------------
   2026-07-03, restored 2026-08-20. Stands the WHOLE product on
   Inter. The dashboard already used it; marketing used Plus Jakarta
   Sans + Playfair Display + Space Grotesk + Manrope; many pages set
   their own fonts via scattered classes / inline styles.

   Rather than edit 60+ templates, this one file forces Inter on
   every text element. `!important` in a stylesheet beats a
   non-important inline `font-family`, so inline heading styles
   convert too.

   FILENAME. This file was called inter-typography.css until
   2026-08-20, when a short-lived move to Poppins + Open Sans renamed
   it to the family-neutral typography.css. The owner asked for Inter
   back the same day. The NAME stays neutral, because renaming it
   again would mean touching nine templates, a test, the design sync
   tool and DESIGN.md for no gain. Change the stacks below and
   nothing needs renaming.

   The `:not(...)` guard is what keeps this SAFE. It skips the
   fonts that must stay themselves:
     - icons      : <i>, <svg>, [class*="fa-"], .fa/.fas/.far/.fab,
                    .material-icons
     - monospace  : <pre>/<code>/<kbd>/<samp>, .font-mono,
                    [class*="mono|code|terminal|editor|hljs|token"],
                    [style*="monospace"|"JetBrains"|"Courier"]
     - signature  : [class*="signature|sig-"], [style*="Caveat"|"Brush"|"cursive"]
     - letters    : [style*="Source Serif"]  (letter pages also
                    don't load this file at all)
   Load LAST in each shell so it wins.

   IF YOU EVER ADD A HEADING-SPECIFIC RULE, READ THIS FIRST. One
   family means no heading rule is needed here today. Should a
   second face ever return, a plain `h1 { font-family: ... }` will
   NOT work: `:not(.x)` carries the specificity of its argument and
   the universal guard below holds ~20 class selectors, so the plain
   rule LOSES even with !important and every heading silently renders
   in the body face. This was caught live on 2026-08-20, and its
   signature is font-weight applying while font-family does not. A
   heading rule has to repeat the same guard with `:is(h1..h6)` in
   place of `*`.
   ============================================================
*/

/* Metric-matched fallback for Inter. Before the Inter web font (Google
   Fonts, display=swap) finishes downloading, text renders in the local
   system font THROUGH this @font-face, whose ascent/descent/line-gap/size
   overrides are calibrated to Inter. The swap to real Inter therefore does
   not change line height or wrap points, so no text reflows -> kills the
   font-swap layout shift (CLS). It MUST sit immediately after "Inter" in
   every stack below (this file's universal !important rule is what actually
   governs the homepage body + h1 + hero subtitle / LCP element, beating the
   page's own .lp !important stack on specificity). Metrics: Inter vs Arial. */
/* ICON FONTS MUST BE ON THIS RULE'S EXEMPTION LIST OR THEY RENDER AS TOFU.
   The `body *` selector below carries `!important` AND, because every :not()
   contributes its argument's specificity, roughly (0,20,5) of it. That beats an
   icon library's own `.some-icon { font-family: X !important }` outright, so the
   glyph element gets Inter, and a private-use codepoint that Inter has no glyph
   for paints as an empty box.

   That is what happened to FullCalendar: `.fc-icon` was not on the list, so the
   calendar's prev/next chevrons rendered as two blank squares while the "Today"
   button beside them, being plain text, looked perfectly normal. Hence
   :not([class*="fc-icon"]), which covers `.fc-icon` and every `.fc-icon-*`.

   If you add an icon font anywhere in the product, add its class here in the
   same breath. FontAwesome ([class*="fa-"], .fa/.fas/.far/.fab) and
   .material-icons are already covered. */
@font-face {
  font-family: "Inter Fallback";
  src: local("Arial");
  size-adjust: 107.4%;
  ascent-override: 90.0%;
  descent-override: 22.3%;
  line-gap-override: 0%;
}

html,
body {
  font-family: "Inter", "Inter Fallback", ui-sans-serif, system-ui, -apple-system,
    "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif !important;
  line-height: 1.6;
}

/* The approved landlord navigation owns its Open Sans stack. Keep the
   exemption inside :where() so the existing guard's specificity stays put. */
body *:not(:where(.ow-navigation, .ow-navigation *)):not(i):not(svg):not(pre):not(code):not(kbd):not(samp):not([class*="fa-"]):not(.fa):not(.fas):not(.far):not(.fab):not(.material-icons):not([class*="fc-icon"]):not(.font-mono):not([class*="mono"]):not([class*="code"]):not([class*="terminal"]):not([class*="editor"]):not([class*="hljs"]):not([class*="token"]):not([class*="signature"]):not([class*="sig-"]):not([class*="stamp"]):not([style*="monospace"]):not([style*="JetBrains"]):not([style*="Caveat"]):not([style*="Brush"]):not([style*="Courier"]):not([style*="Source Serif"]):not([style*="cursive"]) {
  font-family: "Inter", "Inter Fallback", ui-sans-serif, system-ui, -apple-system,
    "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif !important;
}
