/**
 * The site's only Font Awesome.
 *
 * Two separate copies used to load. Divi declares FontAwesome for any module
 * whose icon was picked from the FA set and points it at
 * Divi/core/admin/fonts/fontawesome/fa-solid-900, an 80KB file carrying the
 * entire solid set. Separately, the "features" Code Snippets entry enqueued
 * Font Awesome 6.5.2 from cdnjs on every product page -- a 103KB stylesheet
 * plus its own webfonts from a third-party CDN -- to draw four icons.
 *
 * Everything now comes from one 1.6KB subset of Divi's own file, covering the
 * sixteen glyphs the whole site actually uses:
 *
 *   Divi modules (icon picked in the builder, emitted as a raw character)
 *     f00c check          f545 ruler-combined   f48b truck-fast
 *     f63b truck-monster  f63c truck-pickup     f07a cart
 *   Markup classes (child theme includes + the "In/Out Stock" snippet)
 *     f061 arrow-right    f518 book-open        f058 circle-check
 *     f057 circle-xmark   f017 clock            f1ea newspaper
 *     f7d9 screwdriver-wrench                   f3ed shield-halved
 *     f071 triangle-exclamation                 f63c truck-pickup
 *   Divi button data-icon
 *     f0b0 filter (the "Filter Products" button on shop and category pages)
 *
 * Divi also declares the font display:block, which hides the icon -- and the
 * text beside it -- for up to three seconds while the font downloads. swap is
 * the right behaviour for decorative icons.
 *
 * This has to WIN over Divi's declaration, and the rule for competing
 * @font-face blocks is last-one-wins, not specificity. That is why this is a
 * separate sheet enqueued at priority 999999 rather than part of fonts.css:
 * Divi's dynamic per-page CSS is emitted late, and fonts.css loads near the
 * top of the head. Check the head order before assuming this still works.
 *
 * ADDING A NEW ICON is a two-step job -- miss either and it renders as a
 * blank box:
 *   1. add the codepoint to the subset:
 *      python3 -m fontTools.subset <Divi>/core/admin/fonts/fontawesome/fa-solid-900.woff2 \
 *        --unicodes=f00c,f017,f057,f058,f061,f071,f07a,f0b0,f1ea,f3ed,f48b,f518,f545,f63b,f63c,f7d9 \
 *        --flavor=woff2 --output-file=fonts/fa-solid-900-subset.woff2
 *   2. if it is used as a class rather than a Divi module icon, add its
 *      :before rule below. Codepoints come from Font Awesome's own all.min.css
 *
 * The subset is INLINED as a data URI rather than linked. Divi's own
 * FontAwesome @font-face is still in the page (it comes from Divi's dynamic
 * CSS and cannot be removed from there), and the two declare the same family
 * and weight, so the last one wins -- this one. But while a linked file was
 * still downloading, the browser would paint from Divi's face and fetch its
 * full 80KB file too, so BOTH loaded. A data URI is available the moment this
 * CSS parses, so there is no window in which the fallback can win, and it
 * costs one fewer request. It is ~2.2KB of base64 inside the combined sheet.
 *
 * unicode-range is what makes this face WIN rather than merely come last.
 * Divi's own FontAwesome face declares the same family and weight with no
 * range, so without this the browser treats both as candidates and ends up
 * fetching Divi's full 80KB file as well. Listing the exact codepoints tells
 * it this face covers them and nothing else needs consulting. Keep this list
 * in sync with the subset -- a codepoint in the font but missing here will
 * render from Divi's file instead, and one here but missing from the font
 * renders as a blank box.
 *
 * Paths here must stay root-relative. LiteSpeed combines this sheet into
 * /wp-content/litespeed/css/, and a ../fonts/ path would resolve against that
 * directory instead of the theme.
 */

@font-face {
  font-family: FontAwesome;
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  src: url(data:font/woff2;base64,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) format("woff2");
  unicode-range: U+F00C, U+F017, U+F057, U+F058, U+F061, U+F071, U+F07A, U+F0B0, U+F1EA, U+F3ED, U+F48B, U+F518, U+F545, U+F63B, U+F63C, U+F7D9;
}

/* Font Awesome's own base class, reduced to what these icons need. */
.fa-solid,
.fas {
  font-family: FontAwesome;
  font-weight: 900;
  font-style: normal;
  font-variant: normal;
  line-height: 1;
  display: inline-block;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.fa-arrow-right::before          { content: "\f061"; }
.fa-book-open::before            { content: "\f518"; }
.fa-circle-check::before         { content: "\f058"; }
.fa-circle-xmark::before         { content: "\f057"; }
.fa-clock::before                { content: "\f017"; }
.fa-newspaper::before            { content: "\f1ea"; }
.fa-screwdriver-wrench::before   { content: "\f7d9"; }
.fa-shield-halved::before        { content: "\f3ed"; }
.fa-triangle-exclamation::before { content: "\f071"; }
.fa-truck-fast::before           { content: "\f48b"; }
.fa-truck-monster::before        { content: "\f63b"; }
.fa-truck-pickup::before         { content: "\f63c"; }

/**
 * Divi's WooCommerce Add to Cart module puts an icon after the button with
 * `content: attr(data-icon); font-family: FontAwesome !important`. The
 * product template has no button icon configured, so the attribute is absent
 * and the pseudo-element renders nothing -- but because attr() is resolved at
 * runtime the browser cannot tell which glyph it will need, so it downloads
 * Divi's full 80KB FontAwesome file "just in case" on every product page.
 *
 * Removing the pseudo-element where there is no data-icon costs nothing
 * visually and drops that request. Buttons that DO carry a data-icon (the
 * "Filter Products" button, f0b0) are left alone by the :not().
 */
body #page-container .et_pb_section [class*="et_pb_wc_add_to_cart"] .button:not([data-icon])::after {
  content: none !important;
}
