/* Bootstrap Icons, self-hosted and subsetted to the 27 glyphs this app uses.

   The CDN pair was 84KB of stylesheet mapping ~2000 names on top of a 127KB
   woff2, to draw two dozen icons. This is the same play fonts.css already makes
   for Schola's ten digits, and it takes the icon set off the CDN with it.

   Regenerating: `scripts/subset_icons.py`, which reads every `bi-` reference
   out of templates/ and static/ (JS included, because rail.js and the transport
   build their icons in script), resolves each name against the pinned
   bootstrap-icons@1.11.3 stylesheet, and subsets that release's woff2 to the
   codepoints found. It rewrites the list and the rules below with the font, so
   this file and that binary cannot drift apart.

   A `bi-` name that is not in the list below renders as nothing at all rather
   than as a missing-glyph box, so adding an icon to a template means running
   that script. The scan greps for the name, so write icon classes out in full:
   a class assembled from a fragment at runtime resolves to a glyph the subset
   was never told about, and nothing is drawn.

   In this subset: arrow-counterclockwise, arrow-left, arrow-right, bell-slash, chevron-down, chevron-up, cloud-arrow-up, clouds-fill, dash-circle, envelope-paper, eye, file-earmark-music, images, mic-mute, pause-fill, people, person-fill, person-heart, play-fill, repeat, search, skip-backward-fill, skip-end-fill, skip-forward-fill, skip-start-fill, slash-circle, x-lg */

@font-face {
  font-family: bootstrap-icons;
  src: url("../fonts/bootstrap-icons-subset.woff2") format("woff2");
  font-weight: normal;
  font-style: normal;
  /* block, not swap: there is no fallback face for these codepoints, so a swap
     period paints nothing and then pops. The file is small enough that the
     block period is not a real wait. */
  font-display: block;
}

.bi::before,
[class^="bi-"]::before,
[class*=" bi-"]::before {
  display: inline-block;
  /* stylelint-disable-next-line font-family-no-missing-generic-family-keyword --
     an icon font has no meaningful generic fallback: these codepoints exist in
     no system face, so a fallback would draw tofu rather than an icon. */
  font-family: bootstrap-icons !important;
  font-style: normal;
  font-weight: normal !important;
  font-variant: normal;
  text-transform: none;
  line-height: 1;
  vertical-align: -.125em;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.bi-arrow-counterclockwise::before { content: "\f117"; }
.bi-arrow-left::before { content: "\f12f"; }
.bi-arrow-right::before { content: "\f138"; }
.bi-bell-slash::before { content: "\f631"; }
.bi-chevron-down::before { content: "\f282"; }
.bi-chevron-up::before { content: "\f286"; }
.bi-cloud-arrow-up::before { content: "\f297"; }
.bi-clouds-fill::before { content: "\f2c2"; }
.bi-dash-circle::before { content: "\f2e6"; }
.bi-envelope-paper::before { content: "\f73d"; }
.bi-eye::before { content: "\f341"; }
.bi-file-earmark-music::before { content: "\f377"; }
.bi-images::before { content: "\f42b"; }
.bi-mic-mute::before { content: "\f48f"; }
.bi-pause-fill::before { content: "\f4c3"; }
.bi-people::before { content: "\f4d0"; }
.bi-person-fill::before { content: "\f4da"; }
.bi-person-heart::before { content: "\f77a"; }
.bi-play-fill::before { content: "\f4f4"; }
.bi-repeat::before { content: "\f813"; }
.bi-search::before { content: "\f52a"; }
.bi-skip-backward-fill::before { content: "\f551"; }
.bi-skip-end-fill::before { content: "\f557"; }
.bi-skip-forward-fill::before { content: "\f55d"; }
.bi-skip-start-fill::before { content: "\f563"; }
.bi-slash-circle::before { content: "\f567"; }
.bi-x-lg::before { content: "\f659"; }
