diff options
54 files changed, 6747 insertions, 3980 deletions
@@ -1,14 +1,6 @@ # Vitae ... is a feature-rich blog theme for Hugo that **focuses on your content**. -## :bell: Busy with life for the rest of the year - -Currently I'm pretty busy with life, that's why I currently don't work on -the theme and why it looks abandoned at the moment. - -But don't worry! -> In the next year I'll will be back and maintenance and -development will continue! - ## :mega: Version 3.0 is finally released! I've finally finished the development of version 3.0 and this is the last and diff --git a/layouts/_default/terms.html b/layouts/_default/terms.html index e01a375..3485fcc 100644 --- a/layouts/_default/terms.html +++ b/layouts/_default/terms.html @@ -13,7 +13,7 @@ {{- $curFontSize := (add $minFontSize (mul (sub $amountTags $min) $steps) ) }} {{- $weigth := div (sub (math.Log $value.Count) (math.Log $min)) (sub (math.Log $max) (math.Log $min)) }} {{- $curFontSize := (add $minFontSize (mul (sub $maxFontSize $minFontSize) $weigth) ) }} -<a style="font-size: {{ $curFontSize }}em;" href="{{ absURL $data.Plural }}/{{ $value.Name }}/">{{ $value.Name }}<sup>{{ $value.Count }}</sup></a> +<a style="font-size: {{ $curFontSize }}em;" href="{{ absURL $data.Plural }}/{{ replace $value.Name "#" "%23" }}/">{{ $value.Name }}<sup>{{ $value.Count }}</sup></a> {{- end }} {{- end }} </div> diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 0694f66..c775704 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -26,8 +26,8 @@ <link rel="stylesheet" type="text/css" media="screen" href="{{ relURL "/css/all.css" }}" /> {{- if or .Params.math .Site.Params.math -}} <link rel="stylesheet" href="{{ relURL "/css/katex.css" }}" crossorigin="anonymous"> -<script defer src="{{ relURL "js/katex.js" }}" integrity="sha384-PFWG8XW41D5NzhNv5FegM1CUkw9nNLdWug8DuwnUoNEVop9n5frjcnbtsZtxTNjw" crossorigin="anonymous"></script> -<script defer src="{{ relURL "js/auto-render.js" }}" integrity="sha384-EN2q+JG5/3Z8gD7hT5WZqq+W+9wQR4P3IezfuZmGG5RkNXaaaks85seDJO7WkZlY" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script> +<script defer src="{{ relURL "js/katex.js" }}" integrity="sha384-HELAAZU8xvHgfT/8z4Mhmu+E2z3oBrMEuywaMh/CEd5uTZIDSct7TEaX+S43+dOi" crossorigin="anonymous"></script> +<script defer src="{{ relURL "js/auto-render.js" }}" integrity="sha384-0QrOZ8WIARJUoT5pH7Iuzi7iq0mXUXLF9yj5ZvYxTkMRv1zcaPQiOQ9ksHYbKw7M" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script> <script> document.addEventListener("DOMContentLoaded", function() { renderMathInElement(document.body, { delimiters: [ {left: "$$", right: "$$", display: true}, {left: "$", right: "$", display: false} ] }); }); </script> diff --git a/layouts/partials/header.html b/layouts/partials/header.html index 491cfe7..56673e6 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -32,7 +32,7 @@ {{- if $key.url }} <li><a href="{{ relURL $key.url }}"><i title="{{ $key.name }}" class="icons {{ $key.icon }}"></i></a></li> {{- else }} -<li><a href="{{ $key.cmd }}"><i title="{{ $key.name }}" class="icons {{ $key.icon }}"></i></a></li> +<li><a href="{{ $key.cmd | safeURL }}"><i title="{{ $key.name }}" class="icons {{ $key.icon }}"></i></a></li> {{- end }} {{- end }} {{- end }} @@ -45,7 +45,7 @@ <nav> <ul> {{- range .Site.Menus.main }} -<li><a href="{{ .URL }}">{{ .Name }}</a></li> +<li><a href="{{ .URL | safeURL }}">{{ .Name }}</a></li> {{- end }} </ul> </nav> diff --git a/static/css/all.css b/static/css/all.css index 73cbacc..afb7c01 100644 --- a/static/css/all.css +++ b/static/css/all.css @@ -1,31 +1,32 @@ /*! - * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com + * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + .fa, .fas, +.fa-solid, .far, +.fa-regular, .fal, +.fa-light, +.fat, +.fa-thin, .fad, -.fab { +.fa-duotone, +.fab, +.fa-brands { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; - display: inline-block; + display: var(--fa-display, inline-block); font-style: normal; font-variant: normal; - text-rendering: auto; - line-height: 1; } - -.fa-lg { - font-size: 1.33333em; - line-height: 0.75em; - vertical-align: -.0667em; } - -.fa-xs { - font-size: .75em; } - -.fa-sm { - font-size: .875em; } + line-height: 1; + text-rendering: auto; } .fa-1x { font-size: 1em; } @@ -57,56 +58,359 @@ .fa-10x { font-size: 10em; } +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + .fa-fw { text-align: center; width: 1.25em; } .fa-ul { list-style-type: none; - margin-left: 2.5em; + margin-left: var(--fa-li-margin, 2.5em); padding-left: 0; } .fa-ul > li { position: relative; } .fa-li { - left: -2em; + left: calc(var(--fa-li-width, 2em) * -1); position: absolute; text-align: center; - width: 2em; + width: var(--fa-li-width, 2em); line-height: inherit; } .fa-border { - border: solid 0.08em #eee; - border-radius: .1em; - padding: .2em .25em .15em; } + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } .fa-pull-left { - float: left; } + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } .fa-pull-right { - float: right; } - -.fa.fa-pull-left, -.fas.fa-pull-left, -.far.fa-pull-left, -.fal.fa-pull-left, -.fab.fa-pull-left { - margin-right: .3em; } - -.fa.fa-pull-right, -.fas.fa-pull-right, -.far.fa-pull-right, -.fal.fa-pull-right, -.fab.fa-pull-right { - margin-left: .3em; } + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0); + animation-delay: var(--fa-animation-delay, 0); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0); + animation-delay: var(--fa-animation-delay, 0); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0); + animation-delay: var(--fa-animation-delay, 0); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0); + animation-delay: var(--fa-animation-delay, 0); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0); + animation-delay: var(--fa-animation-delay, 0); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0); + animation-delay: var(--fa-animation-delay, 0); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } .fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; } + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0); + animation-delay: var(--fa-animation-delay, 0); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + transition-delay: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); } +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } @-webkit-keyframes fa-spin { 0% { @@ -125,43 +429,33 @@ transform: rotate(360deg); } } .fa-rotate-90 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; -webkit-transform: rotate(90deg); transform: rotate(90deg); } .fa-rotate-180 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; -webkit-transform: rotate(180deg); transform: rotate(180deg); } .fa-rotate-270 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; -webkit-transform: rotate(270deg); transform: rotate(270deg); } .fa-flip-horizontal { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; -webkit-transform: scale(-1, 1); transform: scale(-1, 1); } .fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; -webkit-transform: scale(1, -1); transform: scale(1, -1); } -.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { -webkit-transform: scale(-1, -1); transform: scale(-1, -1); } -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical, -:root .fa-flip-both { - -webkit-filter: none; - filter: none; } +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, none)); + transform: rotate(var(--fa-rotate-angle, none)); } .fa-stack { display: inline-block; @@ -176,7 +470,8 @@ left: 0; position: absolute; text-align: center; - width: 100%; } + width: 100%; + z-index: var(--fa-stack-z-index, auto); } .fa-stack-1x { line-height: inherit; } @@ -185,4237 +480,6357 @@ font-size: 2em; } .fa-inverse { - color: #fff; } + color: var(--fa-inverse, #fff); } /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ -.fa-500px:before { - content: "\f26e"; } +.fa-0::before { + content: "\30"; } -.fa-accessible-icon:before { - content: "\f368"; } +.fa-1::before { + content: "\31"; } -.fa-accusoft:before { - content: "\f369"; } +.fa-2::before { + content: "\32"; } -.fa-acquisitions-incorporated:before { - content: "\f6af"; } +.fa-3::before { + content: "\33"; } -.fa-ad:before { - content: "\f641"; } +.fa-4::before { + content: "\34"; } -.fa-address-book:before { - content: "\f2b9"; } +.fa-5::before { + content: "\35"; } -.fa-address-card:before { - content: "\f2bb"; } +.fa-6::before { + content: "\36"; } -.fa-adjust:before { - content: "\f042"; } +.fa-7::before { + content: "\37"; } -.fa-adn:before { - content: "\f170"; } +.fa-8::before { + content: "\38"; } -.fa-adversal:before { - content: "\f36a"; } +.fa-9::before { + content: "\39"; } -.fa-affiliatetheme:before { - content: "\f36b"; } +.fa-a::before { + content: "\41"; } -.fa-air-freshener:before { - content: "\f5d0"; } +.fa-address-book::before { + content: "\f2b9"; } -.fa-airbnb:before { - content: "\f834"; } +.fa-contact-book::before { + content: "\f2b9"; } -.fa-algolia:before { - content: "\f36c"; } +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } -.fa-align-center:before { +.fa-align-center::before { content: "\f037"; } -.fa-align-justify:before { +.fa-align-justify::before { content: "\f039"; } -.fa-align-left:before { +.fa-align-left::before { content: "\f036"; } -.fa-align-right:before { +.fa-align-right::before { content: "\f038"; } -.fa-alipay:before { - content: "\f642"; } - -.fa-allergies:before { - content: "\f461"; } - -.fa-amazon:before { - content: "\f270"; } - -.fa-amazon-pay:before { - content: "\f42c"; } - -.fa-ambulance:before { - content: "\f0f9"; } +.fa-anchor::before { + content: "\f13d"; } -.fa-american-sign-language-interpreting:before { - content: "\f2a3"; } +.fa-angle-down::before { + content: "\f107"; } -.fa-amilia:before { - content: "\f36d"; } +.fa-angle-left::before { + content: "\f104"; } -.fa-anchor:before { - content: "\f13d"; } +.fa-angle-right::before { + content: "\f105"; } -.fa-android:before { - content: "\f17b"; } +.fa-angle-up::before { + content: "\f106"; } -.fa-angellist:before { - content: "\f209"; } +.fa-angles-down::before { + content: "\f103"; } -.fa-angle-double-down:before { +.fa-angle-double-down::before { content: "\f103"; } -.fa-angle-double-left:before { +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { content: "\f100"; } -.fa-angle-double-right:before { +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { content: "\f101"; } -.fa-angle-double-up:before { +.fa-angles-up::before { content: "\f102"; } -.fa-angle-down:before { - content: "\f107"; } +.fa-angle-double-up::before { + content: "\f102"; } -.fa-angle-left:before { - content: "\f104"; } +.fa-ankh::before { + content: "\f644"; } -.fa-angle-right:before { - content: "\f105"; } +.fa-apple-whole::before { + content: "\f5d1"; } -.fa-angle-up:before { - content: "\f106"; } +.fa-apple-alt::before { + content: "\f5d1"; } -.fa-angry:before { - content: "\f556"; } +.fa-archway::before { + content: "\f557"; } -.fa-angrycreative:before { - content: "\f36e"; } +.fa-arrow-down::before { + content: "\f063"; } -.fa-angular:before { - content: "\f420"; } +.fa-arrow-down-1-9::before { + content: "\f162"; } -.fa-ankh:before { - content: "\f644"; } +.fa-sort-numeric-asc::before { + content: "\f162"; } -.fa-app-store:before { - content: "\f36f"; } +.fa-sort-numeric-down::before { + content: "\f162"; } -.fa-app-store-ios:before { - content: "\f370"; } +.fa-arrow-down-9-1::before { + content: "\f886"; } -.fa-apper:before { - content: "\f371"; } +.fa-sort-numeric-desc::before { + content: "\f886"; } -.fa-apple:before { - content: "\f179"; } +.fa-sort-numeric-down-alt::before { + content: "\f886"; } -.fa-apple-alt:before { - content: "\f5d1"; } +.fa-arrow-down-a-z::before { + content: "\f15d"; } -.fa-apple-pay:before { - content: "\f415"; } +.fa-sort-alpha-asc::before { + content: "\f15d"; } -.fa-archive:before { - content: "\f187"; } +.fa-sort-alpha-down::before { + content: "\f15d"; } -.fa-archway:before { - content: "\f557"; } +.fa-arrow-down-long::before { + content: "\f175"; } -.fa-arrow-alt-circle-down:before { - content: "\f358"; } +.fa-long-arrow-down::before { + content: "\f175"; } -.fa-arrow-alt-circle-left:before { - content: "\f359"; } +.fa-arrow-down-short-wide::before { + content: "\f884"; } -.fa-arrow-alt-circle-right:before { - content: "\f35a"; } +.fa-sort-amount-desc::before { + content: "\f884"; } -.fa-arrow-alt-circle-up:before { - content: "\f35b"; } +.fa-sort-amount-down-alt::before { + content: "\f884"; } -.fa-arrow-circle-down:before { - content: "\f0ab"; } +.fa-arrow-down-wide-short::before { + content: "\f160"; } -.fa-arrow-circle-left:before { - content: "\f0a8"; } +.fa-sort-amount-asc::before { + content: "\f160"; } -.fa-arrow-circle-right:before { - content: "\f0a9"; } +.fa-sort-amount-down::before { + content: "\f160"; } -.fa-arrow-circle-up:before { - content: "\f0aa"; } +.fa-arrow-down-z-a::before { + content: "\f881"; } -.fa-arrow-down:before { - content: "\f063"; } +.fa-sort-alpha-desc::before { + content: "\f881"; } -.fa-arrow-left:before { +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-arrow-left::before { content: "\f060"; } -.fa-arrow-right:before { +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-arrow-right::before { content: "\f061"; } -.fa-arrow-up:before { +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-arrow-up::before { content: "\f062"; } -.fa-arrows-alt:before { - content: "\f0b2"; } +.fa-arrow-up-1-9::before { + content: "\f163"; } -.fa-arrows-alt-h:before { - content: "\f337"; } +.fa-sort-numeric-up::before { + content: "\f163"; } -.fa-arrows-alt-v:before { - content: "\f338"; } +.fa-arrow-up-9-1::before { + content: "\f887"; } -.fa-artstation:before { - content: "\f77a"; } +.fa-sort-numeric-up-alt::before { + content: "\f887"; } -.fa-assistive-listening-systems:before { - content: "\f2a2"; } +.fa-arrow-up-a-z::before { + content: "\f15e"; } -.fa-asterisk:before { - content: "\f069"; } +.fa-sort-alpha-up::before { + content: "\f15e"; } -.fa-asymmetrik:before { - content: "\f372"; } +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } -.fa-at:before { - content: "\f1fa"; } +.fa-arrow-up-long::before { + content: "\f176"; } -.fa-atlas:before { - content: "\f558"; } +.fa-long-arrow-up::before { + content: "\f176"; } -.fa-atlassian:before { - content: "\f77b"; } +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } -.fa-atom:before { - content: "\f5d2"; } +.fa-external-link::before { + content: "\f08e"; } -.fa-audible:before { - content: "\f373"; } +.fa-arrow-up-short-wide::before { + content: "\f885"; } -.fa-audio-description:before { - content: "\f29e"; } +.fa-sort-amount-up-alt::before { + content: "\f885"; } -.fa-autoprefixer:before { - content: "\f41c"; } +.fa-arrow-up-wide-short::before { + content: "\f161"; } -.fa-avianex:before { - content: "\f374"; } +.fa-sort-amount-up::before { + content: "\f161"; } -.fa-aviato:before { - content: "\f421"; } +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } -.fa-award:before { +.fa-sync::before { + content: "\f021"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-at::before { + content: "\40"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-award::before { content: "\f559"; } -.fa-aws:before { - content: "\f375"; } +.fa-b::before { + content: "\42"; } -.fa-baby:before { +.fa-baby::before { content: "\f77c"; } -.fa-baby-carriage:before { +.fa-baby-carriage::before { content: "\f77d"; } -.fa-backspace:before { - content: "\f55a"; } +.fa-carriage-baby::before { + content: "\f77d"; } -.fa-backward:before { +.fa-backward::before { content: "\f04a"; } -.fa-bacon:before { +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-bacon::before { content: "\f7e5"; } -.fa-bacteria:before { +.fa-bacteria::before { content: "\e059"; } -.fa-bacterium:before { +.fa-bacterium::before { content: "\e05a"; } -.fa-bahai:before { - content: "\f666"; } +.fa-bag-shopping::before { + content: "\f290"; } -.fa-balance-scale:before { - content: "\f24e"; } +.fa-shopping-bag::before { + content: "\f290"; } -.fa-balance-scale-left:before { - content: "\f515"; } +.fa-bahai::before { + content: "\f666"; } -.fa-balance-scale-right:before { - content: "\f516"; } +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-ban::before { + content: "\f05e"; } -.fa-ban:before { +.fa-cancel::before { content: "\f05e"; } -.fa-band-aid:before { +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-bandage::before { content: "\f462"; } -.fa-bandcamp:before { - content: "\f2d5"; } +.fa-band-aid::before { + content: "\f462"; } -.fa-barcode:before { +.fa-barcode::before { content: "\f02a"; } -.fa-bars:before { +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { content: "\f0c9"; } -.fa-baseball-ball:before { +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { content: "\f433"; } -.fa-basketball-ball:before { +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-basketball::before { content: "\f434"; } -.fa-bath:before { +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { content: "\f2cd"; } -.fa-battery-empty:before { +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { content: "\f244"; } -.fa-battery-full:before { +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { content: "\f240"; } -.fa-battery-half:before { +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { content: "\f242"; } -.fa-battery-quarter:before { +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { content: "\f243"; } -.fa-battery-three-quarters:before { +.fa-battery-three-quarters::before { content: "\f241"; } -.fa-battle-net:before { - content: "\f835"; } +.fa-battery-4::before { + content: "\f241"; } -.fa-bed:before { +.fa-bed::before { content: "\f236"; } -.fa-beer:before { - content: "\f0fc"; } +.fa-bed-pulse::before { + content: "\f487"; } -.fa-behance:before { - content: "\f1b4"; } +.fa-procedures::before { + content: "\f487"; } -.fa-behance-square:before { - content: "\f1b5"; } +.fa-beer-mug-empty::before { + content: "\f0fc"; } -.fa-bell:before { +.fa-beer::before { + content: "\f0fc"; } + +.fa-bell::before { content: "\f0f3"; } -.fa-bell-slash:before { +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-bell-slash::before { content: "\f1f6"; } -.fa-bezier-curve:before { +.fa-bezier-curve::before { content: "\f55b"; } -.fa-bible:before { - content: "\f647"; } - -.fa-bicycle:before { +.fa-bicycle::before { content: "\f206"; } -.fa-biking:before { - content: "\f84a"; } - -.fa-bimobject:before { - content: "\f378"; } - -.fa-binoculars:before { +.fa-binoculars::before { content: "\f1e5"; } -.fa-biohazard:before { +.fa-biohazard::before { content: "\f780"; } -.fa-birthday-cake:before { - content: "\f1fd"; } - -.fa-bitbucket:before { - content: "\f171"; } +.fa-bitcoin-sign::before { + content: "\e0b4"; } -.fa-bitcoin:before { - content: "\f379"; } - -.fa-bity:before { - content: "\f37a"; } - -.fa-black-tie:before { - content: "\f27e"; } - -.fa-blackberry:before { - content: "\f37b"; } - -.fa-blender:before { +.fa-blender::before { content: "\f517"; } -.fa-blender-phone:before { +.fa-blender-phone::before { content: "\f6b6"; } -.fa-blind:before { - content: "\f29d"; } - -.fa-blog:before { +.fa-blog::before { content: "\f781"; } -.fa-blogger:before { - content: "\f37c"; } - -.fa-blogger-b:before { - content: "\f37d"; } - -.fa-bluetooth:before { - content: "\f293"; } - -.fa-bluetooth-b:before { - content: "\f294"; } - -.fa-bold:before { +.fa-bold::before { content: "\f032"; } -.fa-bolt:before { +.fa-bolt::before { content: "\f0e7"; } -.fa-bomb:before { +.fa-zap::before { + content: "\f0e7"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-bomb::before { content: "\f1e2"; } -.fa-bone:before { +.fa-bone::before { content: "\f5d7"; } -.fa-bong:before { +.fa-bong::before { content: "\f55c"; } -.fa-book:before { +.fa-book::before { content: "\f02d"; } -.fa-book-dead:before { - content: "\f6b7"; } +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } -.fa-book-medical:before { +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-book-medical::before { content: "\f7e6"; } -.fa-book-open:before { +.fa-book-open::before { content: "\f518"; } -.fa-book-reader:before { +.fa-book-open-reader::before { content: "\f5da"; } -.fa-bookmark:before { - content: "\f02e"; } +.fa-book-reader::before { + content: "\f5da"; } -.fa-bootstrap:before { - content: "\f836"; } +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-book-skull::before { + content: "\f6b7"; } -.fa-border-all:before { +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-border-all::before { content: "\f84c"; } -.fa-border-none:before { +.fa-border-none::before { content: "\f850"; } -.fa-border-style:before { +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { content: "\f853"; } -.fa-bowling-ball:before { +.fa-bowling-ball::before { content: "\f436"; } -.fa-box:before { +.fa-box::before { content: "\f466"; } -.fa-box-open:before { +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-box-open::before { content: "\f49e"; } -.fa-box-tissue:before { +.fa-box-tissue::before { content: "\e05b"; } -.fa-boxes:before { +.fa-boxes-stacked::before { content: "\f468"; } -.fa-braille:before { +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-braille::before { content: "\f2a1"; } -.fa-brain:before { +.fa-brain::before { content: "\f5dc"; } -.fa-bread-slice:before { +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-bread-slice::before { content: "\f7ec"; } -.fa-briefcase:before { +.fa-briefcase::before { content: "\f0b1"; } -.fa-briefcase-medical:before { +.fa-briefcase-medical::before { content: "\f469"; } -.fa-broadcast-tower:before { - content: "\f519"; } - -.fa-broom:before { +.fa-broom::before { content: "\f51a"; } -.fa-brush:before { - content: "\f55d"; } +.fa-broom-ball::before { + content: "\f458"; } -.fa-btc:before { - content: "\f15a"; } +.fa-quidditch::before { + content: "\f458"; } -.fa-buffer:before { - content: "\f837"; } +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-brush::before { + content: "\f55d"; } -.fa-bug:before { +.fa-bug::before { content: "\f188"; } -.fa-building:before { +.fa-bug-slash::before { + content: "\e490"; } + +.fa-building::before { content: "\f1ad"; } -.fa-bullhorn:before { +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-bullhorn::before { content: "\f0a1"; } -.fa-bullseye:before { +.fa-bullseye::before { content: "\f140"; } -.fa-burn:before { - content: "\f46a"; } +.fa-burger::before { + content: "\f805"; } -.fa-buromobelexperte:before { - content: "\f37f"; } +.fa-hamburger::before { + content: "\f805"; } -.fa-bus:before { +.fa-bus::before { content: "\f207"; } -.fa-bus-alt:before { +.fa-bus-simple::before { content: "\f55e"; } -.fa-business-time:before { +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-business-time::before { content: "\f64a"; } -.fa-buy-n-large:before { - content: "\f8a6"; } +.fa-briefcase-clock::before { + content: "\f64a"; } -.fa-buysellads:before { - content: "\f20d"; } +.fa-c::before { + content: "\43"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } -.fa-calculator:before { +.fa-calculator::before { content: "\f1ec"; } -.fa-calendar:before { +.fa-calendar::before { content: "\f133"; } -.fa-calendar-alt:before { - content: "\f073"; } - -.fa-calendar-check:before { +.fa-calendar-check::before { content: "\f274"; } -.fa-calendar-day:before { +.fa-calendar-day::before { content: "\f783"; } -.fa-calendar-minus:before { +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-calendar-minus::before { content: "\f272"; } -.fa-calendar-plus:before { +.fa-calendar-plus::before { content: "\f271"; } -.fa-calendar-times:before { +.fa-calendar-week::before { + content: "\f784"; } + +.fa-calendar-xmark::before { content: "\f273"; } -.fa-calendar-week:before { - content: "\f784"; } +.fa-calendar-times::before { + content: "\f273"; } + +.fa-camera::before { + content: "\f030"; } -.fa-camera:before { +.fa-camera-alt::before { content: "\f030"; } -.fa-camera-retro:before { +.fa-camera-retro::before { content: "\f083"; } -.fa-campground:before { - content: "\f6bb"; } +.fa-camera-rotate::before { + content: "\e0d8"; } -.fa-canadian-maple-leaf:before { - content: "\f785"; } +.fa-campground::before { + content: "\f6bb"; } -.fa-candy-cane:before { +.fa-candy-cane::before { content: "\f786"; } -.fa-cannabis:before { +.fa-cannabis::before { content: "\f55f"; } -.fa-capsules:before { +.fa-capsules::before { content: "\f46b"; } -.fa-car:before { +.fa-car::before { content: "\f1b9"; } -.fa-car-alt:before { - content: "\f5de"; } +.fa-automobile::before { + content: "\f1b9"; } + +.fa-car-battery::before { + content: "\f5df"; } -.fa-car-battery:before { +.fa-battery-car::before { content: "\f5df"; } -.fa-car-crash:before { +.fa-car-crash::before { content: "\f5e1"; } -.fa-car-side:before { +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-car-side::before { content: "\f5e4"; } -.fa-caravan:before { +.fa-caravan::before { content: "\f8ff"; } -.fa-caret-down:before { +.fa-caret-down::before { content: "\f0d7"; } -.fa-caret-left:before { +.fa-caret-left::before { content: "\f0d9"; } -.fa-caret-right:before { +.fa-caret-right::before { content: "\f0da"; } -.fa-caret-square-down:before { - content: "\f150"; } - -.fa-caret-square-left:before { - content: "\f191"; } - -.fa-caret-square-right:before { - content: "\f152"; } - -.fa-caret-square-up:before { - content: "\f151"; } - -.fa-caret-up:before { +.fa-caret-up::before { content: "\f0d8"; } -.fa-carrot:before { +.fa-carrot::before { content: "\f787"; } -.fa-cart-arrow-down:before { +.fa-cart-arrow-down::before { content: "\f218"; } -.fa-cart-plus:before { - content: "\f217"; } - -.fa-cash-register:before { - content: "\f788"; } - -.fa-cat:before { - content: "\f6be"; } - -.fa-cc-amazon-pay:before { - content: "\f42d"; } - -.fa-cc-amex:before { - content: "\f1f3"; } +.fa-cart-flatbed::before { + content: "\f474"; } -.fa-cc-apple-pay:before { - content: "\f416"; } +.fa-dolly-flatbed::before { + content: "\f474"; } -.fa-cc-diners-club:before { - content: "\f24c"; } +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } -.fa-cc-discover:before { - content: "\f1f2"; } +.fa-luggage-cart::before { + content: "\f59d"; } -.fa-cc-jcb:before { - content: "\f24b"; } +.fa-cart-plus::before { + content: "\f217"; } -.fa-cc-mastercard:before { - content: "\f1f1"; } +.fa-cart-shopping::before { + content: "\f07a"; } -.fa-cc-paypal:before { - content: "\f1f4"; } +.fa-shopping-cart::before { + content: "\f07a"; } -.fa-cc-stripe:before { - content: "\f1f5"; } +.fa-cash-register::before { + content: "\f788"; } -.fa-cc-visa:before { - content: "\f1f0"; } +.fa-cat::before { + content: "\f6be"; } -.fa-centercode:before { - content: "\f380"; } +.fa-cedi-sign::before { + content: "\e0df"; } -.fa-centos:before { - content: "\f789"; } +.fa-cent-sign::before { + content: "\e3f5"; } -.fa-certificate:before { +.fa-certificate::before { content: "\f0a3"; } -.fa-chair:before { +.fa-chair::before { content: "\f6c0"; } -.fa-chalkboard:before { +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { content: "\f51b"; } -.fa-chalkboard-teacher:before { +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { content: "\f51c"; } -.fa-charging-station:before { +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-charging-station::before { content: "\f5e7"; } -.fa-chart-area:before { +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { content: "\f1fe"; } -.fa-chart-bar:before { +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { content: "\f080"; } -.fa-chart-line:before { +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { content: "\f201"; } -.fa-chart-pie:before { +.fa-chart-pie::before { content: "\f200"; } -.fa-check:before { - content: "\f00c"; } +.fa-pie-chart::before { + content: "\f200"; } -.fa-check-circle:before { - content: "\f058"; } +.fa-check::before { + content: "\f00c"; } -.fa-check-double:before { +.fa-check-double::before { content: "\f560"; } -.fa-check-square:before { - content: "\f14a"; } +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } -.fa-cheese:before { +.fa-cheese::before { content: "\f7ef"; } -.fa-chess:before { +.fa-chess::before { content: "\f439"; } -.fa-chess-bishop:before { +.fa-chess-bishop::before { content: "\f43a"; } -.fa-chess-board:before { +.fa-chess-board::before { content: "\f43c"; } -.fa-chess-king:before { +.fa-chess-king::before { content: "\f43f"; } -.fa-chess-knight:before { +.fa-chess-knight::before { content: "\f441"; } -.fa-chess-pawn:before { +.fa-chess-pawn::before { content: "\f443"; } -.fa-chess-queen:before { +.fa-chess-queen::before { content: "\f445"; } -.fa-chess-rook:before { +.fa-chess-rook::before { content: "\f447"; } -.fa-chevron-circle-down:before { +.fa-chevron-down::before { + content: "\f078"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { content: "\f13a"; } -.fa-chevron-circle-left:before { +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { content: "\f137"; } -.fa-chevron-circle-right:before { +.fa-circle-chevron-right::before { content: "\f138"; } -.fa-chevron-circle-up:before { +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-circle-chevron-up::before { content: "\f139"; } -.fa-chevron-down:before { - content: "\f078"; } +.fa-chevron-circle-up::before { + content: "\f139"; } -.fa-chevron-left:before { - content: "\f053"; } +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } -.fa-chevron-right:before { - content: "\f054"; } +.fa-donate::before { + content: "\f4b9"; } -.fa-chevron-up:before { - content: "\f077"; } +.fa-circle-dot::before { + content: "\f192"; } -.fa-child:before { - content: "\f1ae"; } +.fa-dot-circle::before { + content: "\f192"; } -.fa-chrome:before { - content: "\f268"; } +.fa-circle-down::before { + content: "\f358"; } -.fa-chromecast:before { - content: "\f838"; } +.fa-arrow-alt-circle-down::before { + content: "\f358"; } -.fa-church:before { - content: "\f51d"; } +.fa-circle-exclamation::before { + content: "\f06a"; } -.fa-circle:before { - content: "\f111"; } +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } -.fa-circle-notch:before { +.fa-adjust::before { + content: "\f042"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-circle-notch::before { content: "\f1ce"; } -.fa-city:before { +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-city::before { content: "\f64f"; } -.fa-clinic-medical:before { - content: "\f7f2"; } +.fa-clapperboard::before { + content: "\e131"; } -.fa-clipboard:before { +.fa-clipboard::before { content: "\f328"; } -.fa-clipboard-check:before { +.fa-clipboard-check::before { content: "\f46c"; } -.fa-clipboard-list:before { +.fa-clipboard-list::before { content: "\f46d"; } -.fa-clock:before { +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { content: "\f017"; } -.fa-clone:before { +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-clone::before { content: "\f24d"; } -.fa-closed-captioning:before { +.fa-closed-captioning::before { content: "\f20a"; } -.fa-cloud:before { +.fa-cloud::before { content: "\f0c2"; } -.fa-cloud-download-alt:before { - content: "\f381"; } +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } -.fa-cloud-meatball:before { +.fa-cloud-meatball::before { content: "\f73b"; } -.fa-cloud-moon:before { +.fa-cloud-moon::before { content: "\f6c3"; } -.fa-cloud-moon-rain:before { +.fa-cloud-moon-rain::before { content: "\f73c"; } -.fa-cloud-rain:before { +.fa-cloud-rain::before { content: "\f73d"; } -.fa-cloud-showers-heavy:before { +.fa-cloud-showers-heavy::before { content: "\f740"; } -.fa-cloud-sun:before { +.fa-cloud-sun::before { content: "\f6c4"; } -.fa-cloud-sun-rain:before { +.fa-cloud-sun-rain::before { content: "\f743"; } -.fa-cloud-upload-alt:before { - content: "\f382"; } +.fa-clover::before { + content: "\e139"; } -.fa-cloudflare:before { - content: "\e07d"; } - -.fa-cloudscale:before { - content: "\f383"; } - -.fa-cloudsmith:before { - content: "\f384"; } - -.fa-cloudversify:before { - content: "\f385"; } - -.fa-cocktail:before { - content: "\f561"; } - -.fa-code:before { +.fa-code::before { content: "\f121"; } -.fa-code-branch:before { +.fa-code-branch::before { content: "\f126"; } -.fa-codepen:before { - content: "\f1cb"; } +.fa-code-commit::before { + content: "\f386"; } -.fa-codiepie:before { - content: "\f284"; } +.fa-code-compare::before { + content: "\e13a"; } -.fa-coffee:before { - content: "\f0f4"; } +.fa-code-fork::before { + content: "\e13b"; } -.fa-cog:before { - content: "\f013"; } +.fa-code-merge::before { + content: "\f387"; } -.fa-cogs:before { - content: "\f085"; } +.fa-code-pull-request::before { + content: "\e13c"; } -.fa-coins:before { +.fa-coins::before { content: "\f51e"; } -.fa-columns:before { - content: "\f0db"; } +.fa-colon-sign::before { + content: "\e140"; } -.fa-comment:before { +.fa-comment::before { content: "\f075"; } -.fa-comment-alt:before { - content: "\f27a"; } - -.fa-comment-dollar:before { +.fa-comment-dollar::before { content: "\f651"; } -.fa-comment-dots:before { +.fa-comment-dots::before { content: "\f4ad"; } -.fa-comment-medical:before { +.fa-commenting::before { + content: "\f4ad"; } + +.fa-comment-medical::before { content: "\f7f5"; } -.fa-comment-slash:before { +.fa-comment-slash::before { content: "\f4b3"; } -.fa-comments:before { +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-comments::before { content: "\f086"; } -.fa-comments-dollar:before { +.fa-comments-dollar::before { content: "\f653"; } -.fa-compact-disc:before { +.fa-compact-disc::before { content: "\f51f"; } -.fa-compass:before { +.fa-compass::before { content: "\f14e"; } -.fa-compress:before { - content: "\f066"; } - -.fa-compress-alt:before { - content: "\f422"; } - -.fa-compress-arrows-alt:before { - content: "\f78c"; } +.fa-compass-drafting::before { + content: "\f568"; } -.fa-concierge-bell:before { - content: "\f562"; } +.fa-drafting-compass::before { + content: "\f568"; } -.fa-confluence:before { - content: "\f78d"; } +.fa-compress::before { + content: "\f066"; } -.fa-connectdevelop:before { - content: "\f20e"; } +.fa-computer-mouse::before { + content: "\f8cc"; } -.fa-contao:before { - content: "\f26d"; } +.fa-mouse::before { + content: "\f8cc"; } -.fa-cookie:before { +.fa-cookie::before { content: "\f563"; } -.fa-cookie-bite:before { +.fa-cookie-bite::before { content: "\f564"; } -.fa-copy:before { +.fa-copy::before { content: "\f0c5"; } -.fa-copyright:before { +.fa-copyright::before { content: "\f1f9"; } -.fa-cotton-bureau:before { - content: "\f89e"; } - -.fa-couch:before { +.fa-couch::before { content: "\f4b8"; } -.fa-cpanel:before { - content: "\f388"; } - -.fa-creative-commons:before { - content: "\f25e"; } - -.fa-creative-commons-by:before { - content: "\f4e7"; } - -.fa-creative-commons-nc:before { - content: "\f4e8"; } - -.fa-creative-commons-nc-eu:before { - content: "\f4e9"; } - -.fa-creative-commons-nc-jp:before { - content: "\f4ea"; } - -.fa-creative-commons-nd:before { - content: "\f4eb"; } - -.fa-creative-commons-pd:before { - content: "\f4ec"; } - -.fa-creative-commons-pd-alt:before { - content: "\f4ed"; } - -.fa-creative-commons-remix:before { - content: "\f4ee"; } - -.fa-creative-commons-sa:before { - content: "\f4ef"; } - -.fa-creative-commons-sampling:before { - content: "\f4f0"; } - -.fa-creative-commons-sampling-plus:before { - content: "\f4f1"; } - -.fa-creative-commons-share:before { - content: "\f4f2"; } - -.fa-creative-commons-zero:before { - content: "\f4f3"; } - -.fa-credit-card:before { +.fa-credit-card::before { content: "\f09d"; } -.fa-critical-role:before { - content: "\f6c9"; } +.fa-credit-card-alt::before { + content: "\f09d"; } -.fa-crop:before { +.fa-crop::before { content: "\f125"; } -.fa-crop-alt:before { +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { content: "\f565"; } -.fa-cross:before { +.fa-cross::before { content: "\f654"; } -.fa-crosshairs:before { +.fa-crosshairs::before { content: "\f05b"; } -.fa-crow:before { +.fa-crow::before { content: "\f520"; } -.fa-crown:before { +.fa-crown::before { content: "\f521"; } -.fa-crutch:before { +.fa-crutch::before { content: "\f7f7"; } -.fa-css3:before { - content: "\f13c"; } - -.fa-css3-alt:before { - content: "\f38b"; } +.fa-cruzeiro-sign::before { + content: "\e152"; } -.fa-cube:before { +.fa-cube::before { content: "\f1b2"; } -.fa-cubes:before { +.fa-cubes::before { content: "\f1b3"; } -.fa-cut:before { - content: "\f0c4"; } - -.fa-cuttlefish:before { - content: "\f38c"; } +.fa-d::before { + content: "\44"; } -.fa-d-and-d:before { - content: "\f38d"; } - -.fa-d-and-d-beyond:before { - content: "\f6ca"; } - -.fa-dailymotion:before { - content: "\e052"; } - -.fa-dashcube:before { - content: "\f210"; } - -.fa-database:before { +.fa-database::before { content: "\f1c0"; } -.fa-deaf:before { - content: "\f2a4"; } - -.fa-deezer:before { - content: "\e077"; } +.fa-delete-left::before { + content: "\f55a"; } -.fa-delicious:before { - content: "\f1a5"; } +.fa-backspace::before { + content: "\f55a"; } -.fa-democrat:before { +.fa-democrat::before { content: "\f747"; } -.fa-deploydog:before { - content: "\f38e"; } +.fa-desktop::before { + content: "\f390"; } -.fa-deskpro:before { - content: "\f38f"; } +.fa-desktop-alt::before { + content: "\f390"; } -.fa-desktop:before { - content: "\f108"; } +.fa-dharmachakra::before { + content: "\f655"; } -.fa-dev:before { - content: "\f6cc"; } +.fa-diagram-next::before { + content: "\e476"; } -.fa-deviantart:before { - content: "\f1bd"; } +.fa-diagram-predecessor::before { + content: "\e477"; } -.fa-dharmachakra:before { - content: "\f655"; } +.fa-diagram-project::before { + content: "\f542"; } -.fa-dhl:before { - content: "\f790"; } +.fa-project-diagram::before { + content: "\f542"; } -.fa-diagnoses:before { - content: "\f470"; } +.fa-diagram-successor::before { + content: "\e47a"; } -.fa-diaspora:before { - content: "\f791"; } +.fa-diamond::before { + content: "\f219"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } -.fa-dice:before { +.fa-dice::before { content: "\f522"; } -.fa-dice-d20:before { +.fa-dice-d20::before { content: "\f6cf"; } -.fa-dice-d6:before { +.fa-dice-d6::before { content: "\f6d1"; } -.fa-dice-five:before { +.fa-dice-five::before { content: "\f523"; } -.fa-dice-four:before { +.fa-dice-four::before { content: "\f524"; } -.fa-dice-one:before { +.fa-dice-one::before { content: "\f525"; } -.fa-dice-six:before { +.fa-dice-six::before { content: "\f526"; } -.fa-dice-three:before { +.fa-dice-three::before { content: "\f527"; } -.fa-dice-two:before { +.fa-dice-two::before { content: "\f528"; } -.fa-digg:before { - content: "\f1a6"; } - -.fa-digital-ocean:before { - content: "\f391"; } - -.fa-digital-tachograph:before { - content: "\f566"; } - -.fa-directions:before { - content: "\f5eb"; } - -.fa-discord:before { - content: "\f392"; } - -.fa-discourse:before { - content: "\f393"; } - -.fa-disease:before { +.fa-disease::before { content: "\f7fa"; } -.fa-divide:before { +.fa-divide::before { content: "\f529"; } -.fa-dizzy:before { - content: "\f567"; } - -.fa-dna:before { +.fa-dna::before { content: "\f471"; } -.fa-dochub:before { - content: "\f394"; } +.fa-dog::before { + content: "\f6d3"; } -.fa-docker:before { - content: "\f395"; } +.fa-dollar-sign::before { + content: "\24"; } -.fa-dog:before { - content: "\f6d3"; } +.fa-dollar::before { + content: "\24"; } -.fa-dollar-sign:before { - content: "\f155"; } +.fa-usd::before { + content: "\24"; } -.fa-dolly:before { +.fa-dolly::before { content: "\f472"; } -.fa-dolly-flatbed:before { - content: "\f474"; } +.fa-dolly-box::before { + content: "\f472"; } -.fa-donate:before { - content: "\f4b9"; } +.fa-dong-sign::before { + content: "\e169"; } -.fa-door-closed:before { +.fa-door-closed::before { content: "\f52a"; } -.fa-door-open:before { +.fa-door-open::before { content: "\f52b"; } -.fa-dot-circle:before { - content: "\f192"; } - -.fa-dove:before { +.fa-dove::before { content: "\f4ba"; } -.fa-download:before { - content: "\f019"; } +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } -.fa-draft2digital:before { - content: "\f396"; } +.fa-compress-alt::before { + content: "\f422"; } -.fa-drafting-compass:before { - content: "\f568"; } +.fa-down-long::before { + content: "\f309"; } -.fa-dragon:before { +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-download::before { + content: "\f019"; } + +.fa-dragon::before { content: "\f6d5"; } -.fa-draw-polygon:before { +.fa-draw-polygon::before { content: "\f5ee"; } -.fa-dribbble:before { - content: "\f17d"; } +.fa-droplet::before { + content: "\f043"; } -.fa-dribbble-square:before { - content: "\f397"; } +.fa-tint::before { + content: "\f043"; } -.fa-dropbox:before { - content: "\f16b"; } +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } -.fa-drum:before { +.fa-drum::before { content: "\f569"; } -.fa-drum-steelpan:before { +.fa-drum-steelpan::before { content: "\f56a"; } -.fa-drumstick-bite:before { +.fa-drumstick-bite::before { content: "\f6d7"; } -.fa-drupal:before { - content: "\f1a9"; } - -.fa-dumbbell:before { +.fa-dumbbell::before { content: "\f44b"; } -.fa-dumpster:before { +.fa-dumpster::before { content: "\f793"; } -.fa-dumpster-fire:before { +.fa-dumpster-fire::before { content: "\f794"; } -.fa-dungeon:before { +.fa-dungeon::before { content: "\f6d9"; } -.fa-dyalog:before { - content: "\f399"; } +.fa-e::before { + content: "\45"; } -.fa-earlybirds:before { - content: "\f39a"; } +.fa-ear-deaf::before { + content: "\f2a4"; } -.fa-ebay:before { - content: "\f4f4"; } +.fa-deaf::before { + content: "\f2a4"; } -.fa-edge:before { - content: "\f282"; } +.fa-deafness::before { + content: "\f2a4"; } -.fa-edge-legacy:before { - content: "\e078"; } +.fa-hard-of-hearing::before { + content: "\f2a4"; } -.fa-edit:before { - content: "\f044"; } +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } -.fa-egg:before { +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-egg::before { content: "\f7fb"; } -.fa-eject:before { +.fa-eject::before { content: "\f052"; } -.fa-elementor:before { - content: "\f430"; } +.fa-elevator::before { + content: "\e16d"; } -.fa-ellipsis-h:before { +.fa-ellipsis::before { content: "\f141"; } -.fa-ellipsis-v:before { - content: "\f142"; } - -.fa-ello:before { - content: "\f5f1"; } +.fa-ellipsis-h::before { + content: "\f141"; } -.fa-ember:before { - content: "\f423"; } +.fa-ellipsis-vertical::before { + content: "\f142"; } -.fa-empire:before { - content: "\f1d1"; } +.fa-ellipsis-v::before { + content: "\f142"; } -.fa-envelope:before { +.fa-envelope::before { content: "\f0e0"; } -.fa-envelope-open:before { +.fa-envelope-open::before { content: "\f2b6"; } -.fa-envelope-open-text:before { +.fa-envelope-open-text::before { content: "\f658"; } -.fa-envelope-square:before { - content: "\f199"; } +.fa-envelopes-bulk::before { + content: "\f674"; } -.fa-envira:before { - content: "\f299"; } +.fa-mail-bulk::before { + content: "\f674"; } -.fa-equals:before { - content: "\f52c"; } +.fa-equals::before { + content: "\3d"; } -.fa-eraser:before { +.fa-eraser::before { content: "\f12d"; } -.fa-erlang:before { - content: "\f39d"; } - -.fa-ethereum:before { - content: "\f42e"; } - -.fa-ethernet:before { +.fa-ethernet::before { content: "\f796"; } -.fa-etsy:before { - content: "\f2d7"; } +.fa-euro-sign::before { + content: "\f153"; } -.fa-euro-sign:before { +.fa-eur::before { content: "\f153"; } -.fa-evernote:before { - content: "\f839"; } +.fa-euro::before { + content: "\f153"; } -.fa-exchange-alt:before { - content: "\f362"; } +.fa-exclamation::before { + content: "\21"; } -.fa-exclamation:before { - content: "\f12a"; } +.fa-expand::before { + content: "\f065"; } -.fa-exclamation-circle:before { - content: "\f06a"; } +.fa-eye::before { + content: "\f06e"; } -.fa-exclamation-triangle:before { - content: "\f071"; } +.fa-eye-dropper::before { + content: "\f1fb"; } -.fa-expand:before { - content: "\f065"; } +.fa-eye-dropper-empty::before { + content: "\f1fb"; } -.fa-expand-alt:before { - content: "\f424"; } +.fa-eyedropper::before { + content: "\f1fb"; } -.fa-expand-arrows-alt:before { - content: "\f31e"; } +.fa-eye-low-vision::before { + content: "\f2a8"; } -.fa-expeditedssl:before { - content: "\f23e"; } +.fa-low-vision::before { + content: "\f2a8"; } -.fa-external-link-alt:before { - content: "\f35d"; } +.fa-eye-slash::before { + content: "\f070"; } -.fa-external-link-square-alt:before { - content: "\f360"; } +.fa-f::before { + content: "\46"; } -.fa-eye:before { - content: "\f06e"; } +.fa-face-angry::before { + content: "\f556"; } -.fa-eye-dropper:before { - content: "\f1fb"; } +.fa-angry::before { + content: "\f556"; } -.fa-eye-slash:before { - content: "\f070"; } +.fa-face-dizzy::before { + content: "\f567"; } -.fa-facebook:before { - content: "\f09a"; } +.fa-dizzy::before { + content: "\f567"; } -.fa-facebook-f:before { - content: "\f39e"; } +.fa-face-flushed::before { + content: "\f579"; } -.fa-facebook-messenger:before { - content: "\f39f"; } +.fa-flushed::before { + content: "\f579"; } -.fa-facebook-square:before { - content: "\f082"; } +.fa-face-frown::before { + content: "\f119"; } -.fa-fan:before { - content: "\f863"; } +.fa-frown::before { + content: "\f119"; } -.fa-fantasy-flight-games:before { - content: "\f6dc"; } +.fa-face-frown-open::before { + content: "\f57a"; } -.fa-fast-backward:before { - content: "\f049"; } +.fa-frown-open::before { + content: "\f57a"; } -.fa-fast-forward:before { - content: "\f050"; } +.fa-face-grimace::before { + content: "\f57f"; } -.fa-faucet:before { - content: "\e005"; } +.fa-grimace::before { + content: "\f57f"; } -.fa-fax:before { - content: "\f1ac"; } +.fa-face-grin::before { + content: "\f580"; } -.fa-feather:before { - content: "\f52d"; } +.fa-grin::before { + content: "\f580"; } -.fa-feather-alt:before { - content: "\f56b"; } +.fa-face-grin-beam::before { + content: "\f582"; } -.fa-fedex:before { - content: "\f797"; } +.fa-grin-beam::before { + content: "\f582"; } -.fa-fedora:before { - content: "\f798"; } +.fa-face-grin-beam-sweat::before { + content: "\f583"; } -.fa-female:before { - content: "\f182"; } +.fa-grin-beam-sweat::before { + content: "\f583"; } -.fa-fighter-jet:before { - content: "\f0fb"; } +.fa-face-grin-hearts::before { + content: "\f584"; } -.fa-figma:before { - content: "\f799"; } +.fa-grin-hearts::before { + content: "\f584"; } -.fa-file:before { - content: "\f15b"; } +.fa-face-grin-squint::before { + content: "\f585"; } -.fa-file-alt:before { - content: "\f15c"; } +.fa-grin-squint::before { + content: "\f585"; } -.fa-file-archive:before { - content: "\f1c6"; } +.fa-face-grin-squint-tears::before { + content: "\f586"; } -.fa-file-audio:before { - content: "\f1c7"; } +.fa-grin-squint-tears::before { + content: "\f586"; } -.fa-file-code:before { - content: "\f1c9"; } +.fa-face-grin-stars::before { + content: "\f587"; } -.fa-file-contract:before { - content: "\f56c"; } +.fa-grin-stars::before { + content: "\f587"; } -.fa-file-csv:before { - content: "\f6dd"; } +.fa-face-grin-tears::before { + content: "\f588"; } -.fa-file-download:before { - content: "\f56d"; } +.fa-grin-tears::before { + content: "\f588"; } -.fa-file-excel:before { - content: "\f1c3"; } +.fa-face-grin-tongue::before { + content: "\f589"; } -.fa-file-export:before { - content: "\f56e"; } +.fa-grin-tongue::before { + content: "\f589"; } -.fa-file-image:before { - content: "\f1c5"; } +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } -.fa-file-import:before { - content: "\f56f"; } +.fa-grin-tongue-squint::before { + content: "\f58a"; } -.fa-file-invoice:before { - content: "\f570"; } +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } -.fa-file-invoice-dollar:before { - content: "\f571"; } +.fa-grin-tongue-wink::before { + content: "\f58b"; } -.fa-file-medical:before { - content: "\f477"; } +.fa-face-grin-wide::before { + content: "\f581"; } -.fa-file-medical-alt:before { - content: "\f478"; } +.fa-grin-alt::before { + content: "\f581"; } -.fa-file-pdf:before { - content: "\f1c1"; } +.fa-face-grin-wink::before { + content: "\f58c"; } -.fa-file-powerpoint:before { - content: "\f1c4"; } +.fa-grin-wink::before { + content: "\f58c"; } -.fa-file-prescription:before { - content: "\f572"; } +.fa-face-kiss::before { + content: "\f596"; } -.fa-file-signature:before { - content: "\f573"; } +.fa-kiss::before { + content: "\f596"; } -.fa-file-upload:before { - content: "\f574"; } +.fa-face-kiss-beam::before { + content: "\f597"; } -.fa-file-video:before { - content: "\f1c8"; } +.fa-kiss-beam::before { + content: "\f597"; } -.fa-file-word:before { - content: "\f1c2"; } +.fa-face-kiss-wink-heart::before { + content: "\f598"; } -.fa-fill:before { - content: "\f575"; } +.fa-kiss-wink-heart::before { + content: "\f598"; } -.fa-fill-drip:before { - content: "\f576"; } +.fa-face-laugh::before { + content: "\f599"; } -.fa-film:before { - content: "\f008"; } +.fa-laugh::before { + content: "\f599"; } -.fa-filter:before { - content: "\f0b0"; } +.fa-face-laugh-beam::before { + content: "\f59a"; } -.fa-fingerprint:before { - content: "\f577"; } +.fa-laugh-beam::before { + content: "\f59a"; } -.fa-fire:before { - content: "\f06d"; } +.fa-face-laugh-squint::before { + content: "\f59b"; } -.fa-fire-alt:before { - content: "\f7e4"; } +.fa-laugh-squint::before { + content: "\f59b"; } -.fa-fire-extinguisher:before { - content: "\f134"; } +.fa-face-laugh-wink::before { + content: "\f59c"; } -.fa-firefox:before { - content: "\f269"; } +.fa-laugh-wink::before { + content: "\f59c"; } -.fa-firefox-browser:before { - content: "\e007"; } +.fa-face-meh::before { + content: "\f11a"; } -.fa-first-aid:before { - content: "\f479"; } +.fa-meh::before { + content: "\f11a"; } -.fa-first-order:before { - content: "\f2b0"; } +.fa-face-meh-blank::before { + content: "\f5a4"; } -.fa-first-order-alt:before { - content: "\f50a"; } +.fa-meh-blank::before { + content: "\f5a4"; } -.fa-firstdraft:before { - content: "\f3a1"; } +.fa-face-rolling-eyes::before { + content: "\f5a5"; } -.fa-fish:before { - content: "\f578"; } +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } -.fa-fist-raised:before { - content: "\f6de"; } +.fa-face-sad-cry::before { + content: "\f5b3"; } -.fa-flag:before { - content: "\f024"; } +.fa-sad-cry::before { + content: "\f5b3"; } -.fa-flag-checkered:before { - content: "\f11e"; } +.fa-face-sad-tear::before { + content: "\f5b4"; } -.fa-flag-usa:before { - content: "\f74d"; } +.fa-sad-tear::before { + content: "\f5b4"; } -.fa-flask:before { - content: "\f0c3"; } +.fa-face-smile::before { + content: "\f118"; } -.fa-flickr:before { - content: "\f16e"; } +.fa-smile::before { + content: "\f118"; } -.fa-flipboard:before { - content: "\f44d"; } +.fa-face-smile-beam::before { + content: "\f5b8"; } -.fa-flushed:before { - content: "\f579"; } +.fa-smile-beam::before { + content: "\f5b8"; } -.fa-fly:before { - content: "\f417"; } +.fa-face-smile-wink::before { + content: "\f4da"; } -.fa-folder:before { - content: "\f07b"; } +.fa-smile-wink::before { + content: "\f4da"; } -.fa-folder-minus:before { - content: "\f65d"; } +.fa-face-surprise::before { + content: "\f5c2"; } -.fa-folder-open:before { - content: "\f07c"; } +.fa-surprise::before { + content: "\f5c2"; } -.fa-folder-plus:before { - content: "\f65e"; } +.fa-face-tired::before { + content: "\f5c8"; } -.fa-font:before { - content: "\f031"; } +.fa-tired::before { + content: "\f5c8"; } -.fa-font-awesome:before { - content: "\f2b4"; } +.fa-fan::before { + content: "\f863"; } -.fa-font-awesome-alt:before { - content: "\f35c"; } +.fa-faucet::before { + content: "\e005"; } -.fa-font-awesome-flag:before { - content: "\f425"; } +.fa-fax::before { + content: "\f1ac"; } -.fa-font-awesome-logo-full:before { - content: "\f4e6"; } +.fa-feather::before { + content: "\f52d"; } -.fa-fonticons:before { - content: "\f280"; } +.fa-feather-pointed::before { + content: "\f56b"; } -.fa-fonticons-fi:before { - content: "\f3a2"; } +.fa-feather-alt::before { + content: "\f56b"; } -.fa-football-ball:before { - content: "\f44e"; } +.fa-file::before { + content: "\f15b"; } -.fa-fort-awesome:before { - content: "\f286"; } +.fa-file-arrow-down::before { + content: "\f56d"; } -.fa-fort-awesome-alt:before { - content: "\f3a3"; } +.fa-file-download::before { + content: "\f56d"; } -.fa-forumbee:before { - content: "\f211"; } +.fa-file-arrow-up::before { + content: "\f574"; } -.fa-forward:before { - content: "\f04e"; } +.fa-file-upload::before { + content: "\f574"; } -.fa-foursquare:before { - content: "\f180"; } +.fa-file-audio::before { + content: "\f1c7"; } -.fa-free-code-camp:before { - content: "\f2c5"; } +.fa-file-code::before { + content: "\f1c9"; } -.fa-freebsd:before { - content: "\f3a4"; } +.fa-file-contract::before { + content: "\f56c"; } -.fa-frog:before { - content: "\f52e"; } +.fa-file-csv::before { + content: "\f6dd"; } -.fa-frown:before { - content: "\f119"; } +.fa-file-excel::before { + content: "\f1c3"; } -.fa-frown-open:before { - content: "\f57a"; } +.fa-file-export::before { + content: "\f56e"; } -.fa-fulcrum:before { - content: "\f50b"; } +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-file-pdf::before { + content: "\f1c1"; } -.fa-funnel-dollar:before { +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-film::before { + content: "\f008"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-filter-circle-dollar::before { content: "\f662"; } -.fa-futbol:before { - content: "\f1e3"; } +.fa-funnel-dollar::before { + content: "\f662"; } -.fa-galactic-republic:before { - content: "\f50c"; } +.fa-filter-circle-xmark::before { + content: "\e17b"; } -.fa-galactic-senate:before { - content: "\f50d"; } +.fa-fingerprint::before { + content: "\f577"; } -.fa-gamepad:before { - content: "\f11b"; } +.fa-fire::before { + content: "\f06d"; } -.fa-gas-pump:before { - content: "\f52f"; } +.fa-fire-extinguisher::before { + content: "\f134"; } -.fa-gavel:before { - content: "\f0e3"; } +.fa-fire-flame-curved::before { + content: "\f7e4"; } -.fa-gem:before { - content: "\f3a5"; } +.fa-fire-alt::before { + content: "\f7e4"; } -.fa-genderless:before { - content: "\f22d"; } +.fa-fire-flame-simple::before { + content: "\f46a"; } -.fa-get-pocket:before { - content: "\f265"; } +.fa-burn::before { + content: "\f46a"; } -.fa-gg:before { - content: "\f260"; } +.fa-fish::before { + content: "\f578"; } -.fa-gg-circle:before { - content: "\f261"; } +.fa-flag::before { + content: "\f024"; } -.fa-ghost:before { - content: "\f6e2"; } +.fa-flag-checkered::before { + content: "\f11e"; } -.fa-gift:before { - content: "\f06b"; } +.fa-flag-usa::before { + content: "\f74d"; } -.fa-gifts:before { - content: "\f79c"; } +.fa-flask::before { + content: "\f0c3"; } -.fa-git:before { - content: "\f1d3"; } +.fa-floppy-disk::before { + content: "\f0c7"; } -.fa-git-alt:before { - content: "\f841"; } +.fa-save::before { + content: "\f0c7"; } -.fa-git-square:before { - content: "\f1d2"; } +.fa-florin-sign::before { + content: "\e184"; } -.fa-github:before { - content: "\f09b"; } +.fa-folder::before { + content: "\f07b"; } -.fa-github-alt:before { - content: "\f113"; } +.fa-folder-minus::before { + content: "\f65d"; } -.fa-github-square:before { - content: "\f092"; } +.fa-folder-open::before { + content: "\f07c"; } -.fa-gitkraken:before { - content: "\f3a6"; } +.fa-folder-plus::before { + content: "\f65e"; } -.fa-gitlab:before { - content: "\f296"; } +.fa-folder-tree::before { + content: "\f802"; } -.fa-gitter:before { - content: "\f426"; } +.fa-font::before { + content: "\f031"; } -.fa-glass-cheers:before { - content: "\f79f"; } +.fa-football::before { + content: "\f44e"; } -.fa-glass-martini:before { - content: "\f000"; } +.fa-football-ball::before { + content: "\f44e"; } -.fa-glass-martini-alt:before { - content: "\f57b"; } +.fa-forward::before { + content: "\f04e"; } -.fa-glass-whiskey:before { - content: "\f7a0"; } +.fa-forward-fast::before { + content: "\f050"; } -.fa-glasses:before { - content: "\f530"; } +.fa-fast-forward::before { + content: "\f050"; } -.fa-glide:before { - content: "\f2a5"; } +.fa-forward-step::before { + content: "\f051"; } -.fa-glide-g:before { - content: "\f2a6"; } +.fa-step-forward::before { + content: "\f051"; } -.fa-globe:before { - content: "\f0ac"; } +.fa-franc-sign::before { + content: "\e18f"; } -.fa-globe-africa:before { - content: "\f57c"; } +.fa-frog::before { + content: "\f52e"; } -.fa-globe-americas:before { - content: "\f57d"; } +.fa-futbol::before { + content: "\f1e3"; } -.fa-globe-asia:before { - content: "\f57e"; } +.fa-futbol-ball::before { + content: "\f1e3"; } -.fa-globe-europe:before { - content: "\f7a2"; } +.fa-soccer-ball::before { + content: "\f1e3"; } -.fa-gofore:before { - content: "\f3a7"; } +.fa-g::before { + content: "\47"; } -.fa-golf-ball:before { - content: "\f450"; } +.fa-gamepad::before { + content: "\f11b"; } -.fa-goodreads:before { - content: "\f3a8"; } +.fa-gas-pump::before { + content: "\f52f"; } -.fa-goodreads-g:before { - content: "\f3a9"; } +.fa-gauge::before { + content: "\f624"; } -.fa-google:before { - content: "\f1a0"; } +.fa-dashboard::before { + content: "\f624"; } -.fa-google-drive:before { - content: "\f3aa"; } +.fa-gauge-med::before { + content: "\f624"; } -.fa-google-pay:before { - content: "\e079"; } +.fa-tachometer-alt-average::before { + content: "\f624"; } -.fa-google-play:before { - content: "\f3ab"; } +.fa-gauge-high::before { + content: "\f625"; } -.fa-google-plus:before { - content: "\f2b3"; } +.fa-tachometer-alt::before { + content: "\f625"; } -.fa-google-plus-g:before { - content: "\f0d5"; } +.fa-tachometer-alt-fast::before { + content: "\f625"; } -.fa-google-plus-square:before { - content: "\f0d4"; } +.fa-gauge-simple::before { + content: "\f629"; } -.fa-google-wallet:before { - content: "\f1ee"; } +.fa-gauge-simple-med::before { + content: "\f629"; } -.fa-gopuram:before { - content: "\f664"; } +.fa-tachometer-average::before { + content: "\f629"; } -.fa-graduation-cap:before { - content: "\f19d"; } +.fa-gauge-simple-high::before { + content: "\f62a"; } -.fa-gratipay:before { - content: "\f184"; } +.fa-tachometer::before { + content: "\f62a"; } -.fa-grav:before { - content: "\f2d6"; } +.fa-tachometer-fast::before { + content: "\f62a"; } -.fa-greater-than:before { - content: "\f531"; } +.fa-gavel::before { + content: "\f0e3"; } -.fa-greater-than-equal:before { - content: "\f532"; } +.fa-legal::before { + content: "\f0e3"; } -.fa-grimace:before { - content: "\f57f"; } +.fa-gear::before { + content: "\f013"; } -.fa-grin:before { - content: "\f580"; } +.fa-cog::before { + content: "\f013"; } -.fa-grin-alt:before { - content: "\f581"; } +.fa-gears::before { + content: "\f085"; } -.fa-grin-beam:before { - content: "\f582"; } +.fa-cogs::before { + content: "\f085"; } -.fa-grin-beam-sweat:before { - content: "\f583"; } +.fa-gem::before { + content: "\f3a5"; } -.fa-grin-hearts:before { - content: "\f584"; } +.fa-genderless::before { + content: "\f22d"; } -.fa-grin-squint:before { - content: "\f585"; } +.fa-ghost::before { + content: "\f6e2"; } -.fa-grin-squint-tears:before { - content: "\f586"; } +.fa-gift::before { + content: "\f06b"; } -.fa-grin-stars:before { - content: "\f587"; } +.fa-gifts::before { + content: "\f79c"; } -.fa-grin-tears:before { - content: "\f588"; } +.fa-glasses::before { + content: "\f530"; } -.fa-grin-tongue:before { - content: "\f589"; } +.fa-globe::before { + content: "\f0ac"; } -.fa-grin-tongue-squint:before { - content: "\f58a"; } +.fa-golf-ball-tee::before { + content: "\f450"; } -.fa-grin-tongue-wink:before { - content: "\f58b"; } +.fa-golf-ball::before { + content: "\f450"; } -.fa-grin-wink:before { - content: "\f58c"; } +.fa-gopuram::before { + content: "\f664"; } + +.fa-graduation-cap::before { + content: "\f19d"; } -.fa-grip-horizontal:before { +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { content: "\f58d"; } -.fa-grip-lines:before { +.fa-grip-lines::before { content: "\f7a4"; } -.fa-grip-lines-vertical:before { +.fa-grip-lines-vertical::before { content: "\f7a5"; } -.fa-grip-vertical:before { +.fa-grip-vertical::before { content: "\f58e"; } -.fa-gripfire:before { - content: "\f3ac"; } +.fa-guarani-sign::before { + content: "\e19a"; } -.fa-grunt:before { - content: "\f3ad"; } +.fa-guitar::before { + content: "\f7a6"; } -.fa-guilded:before { - content: "\e07e"; } +.fa-gun::before { + content: "\e19b"; } -.fa-guitar:before { - content: "\f7a6"; } +.fa-h::before { + content: "\48"; } -.fa-gulp:before { - content: "\f3ae"; } +.fa-hammer::before { + content: "\f6e3"; } -.fa-h-square:before { - content: "\f0fd"; } +.fa-hamsa::before { + content: "\f665"; } -.fa-hacker-news:before { - content: "\f1d4"; } +.fa-hand::before { + content: "\f256"; } -.fa-hacker-news-square:before { - content: "\f3af"; } +.fa-hand-paper::before { + content: "\f256"; } -.fa-hackerrank:before { - content: "\f5f7"; } +.fa-hand-back-fist::before { + content: "\f255"; } -.fa-hamburger:before { - content: "\f805"; } +.fa-hand-rock::before { + content: "\f255"; } -.fa-hammer:before { - content: "\f6e3"; } +.fa-hand-dots::before { + content: "\f461"; } -.fa-hamsa:before { - content: "\f665"; } +.fa-allergies::before { + content: "\f461"; } -.fa-hand-holding:before { - content: "\f4bd"; } +.fa-hand-fist::before { + content: "\f6de"; } -.fa-hand-holding-heart:before { - content: "\f4be"; } +.fa-fist-raised::before { + content: "\f6de"; } -.fa-hand-holding-medical:before { - content: "\e05c"; } +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } -.fa-hand-holding-usd:before { +.fa-hand-holding-usd::before { content: "\f4c0"; } -.fa-hand-holding-water:before { +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { content: "\f4c1"; } -.fa-hand-lizard:before { +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-hand-lizard::before { content: "\f258"; } -.fa-hand-middle-finger:before { +.fa-hand-middle-finger::before { content: "\f806"; } -.fa-hand-paper:before { - content: "\f256"; } - -.fa-hand-peace:before { +.fa-hand-peace::before { content: "\f25b"; } -.fa-hand-point-down:before { +.fa-hand-point-down::before { content: "\f0a7"; } -.fa-hand-point-left:before { +.fa-hand-point-left::before { content: "\f0a5"; } -.fa-hand-point-right:before { +.fa-hand-point-right::before { content: "\f0a4"; } -.fa-hand-point-up:before { +.fa-hand-point-up::before { content: "\f0a6"; } -.fa-hand-pointer:before { +.fa-hand-pointer::before { content: "\f25a"; } -.fa-hand-rock:before { - content: "\f255"; } - -.fa-hand-scissors:before { +.fa-hand-scissors::before { content: "\f257"; } -.fa-hand-sparkles:before { +.fa-hand-sparkles::before { content: "\e05d"; } -.fa-hand-spock:before { +.fa-hand-spock::before { content: "\f259"; } -.fa-hands:before { - content: "\f4c2"; } +.fa-hands::before { + content: "\f2a7"; } -.fa-hands-helping:before { - content: "\f4c4"; } +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } -.fa-hands-wash:before { +.fa-hands-bubbles::before { content: "\e05e"; } -.fa-handshake:before { +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-handshake::before { content: "\f2b5"; } -.fa-handshake-alt-slash:before { +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { content: "\e05f"; } -.fa-handshake-slash:before { +.fa-handshake-slash::before { content: "\e060"; } -.fa-hanukiah:before { +.fa-hanukiah::before { content: "\f6e6"; } -.fa-hard-hat:before { - content: "\f807"; } +.fa-hard-drive::before { + content: "\f0a0"; } -.fa-hashtag:before { - content: "\f292"; } +.fa-hdd::before { + content: "\f0a0"; } + +.fa-hashtag::before { + content: "\23"; } -.fa-hat-cowboy:before { +.fa-hat-cowboy::before { content: "\f8c0"; } -.fa-hat-cowboy-side:before { +.fa-hat-cowboy-side::before { content: "\f8c1"; } -.fa-hat-wizard:before { +.fa-hat-wizard::before { content: "\f6e8"; } -.fa-hdd:before { - content: "\f0a0"; } - -.fa-head-side-cough:before { +.fa-head-side-cough::before { content: "\e061"; } -.fa-head-side-cough-slash:before { +.fa-head-side-cough-slash::before { content: "\e062"; } -.fa-head-side-mask:before { +.fa-head-side-mask::before { content: "\e063"; } -.fa-head-side-virus:before { +.fa-head-side-virus::before { content: "\e064"; } -.fa-heading:before { +.fa-heading::before { content: "\f1dc"; } -.fa-headphones:before { +.fa-header::before { + content: "\f1dc"; } + +.fa-headphones::before { content: "\f025"; } -.fa-headphones-alt:before { +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { content: "\f58f"; } -.fa-headset:before { +.fa-headset::before { content: "\f590"; } -.fa-heart:before { +.fa-heart::before { content: "\f004"; } -.fa-heart-broken:before { +.fa-heart-crack::before { content: "\f7a9"; } -.fa-heartbeat:before { - content: "\f21e"; } +.fa-heart-broken::before { + content: "\f7a9"; } -.fa-helicopter:before { - content: "\f533"; } +.fa-heart-pulse::before { + content: "\f21e"; } -.fa-highlighter:before { - content: "\f591"; } +.fa-heartbeat::before { + content: "\f21e"; } -.fa-hiking:before { - content: "\f6ec"; } +.fa-helicopter::before { + content: "\f533"; } -.fa-hippo:before { - content: "\f6ed"; } +.fa-helmet-safety::before { + content: "\f807"; } -.fa-hips:before { - content: "\f452"; } +.fa-hard-hat::before { + content: "\f807"; } -.fa-hire-a-helper:before { - content: "\f3b0"; } +.fa-hat-hard::before { + content: "\f807"; } -.fa-history:before { - content: "\f1da"; } +.fa-highlighter::before { + content: "\f591"; } -.fa-hive:before { - content: "\e07f"; } +.fa-hippo::before { + content: "\f6ed"; } -.fa-hockey-puck:before { +.fa-hockey-puck::before { content: "\f453"; } -.fa-holly-berry:before { +.fa-holly-berry::before { content: "\f7aa"; } -.fa-home:before { - content: "\f015"; } - -.fa-hooli:before { - content: "\f427"; } - -.fa-hornbill:before { - content: "\f592"; } - -.fa-horse:before { +.fa-horse::before { content: "\f6f0"; } -.fa-horse-head:before { +.fa-horse-head::before { content: "\f7ab"; } -.fa-hospital:before { +.fa-hospital::before { content: "\f0f8"; } -.fa-hospital-alt:before { - content: "\f47d"; } +.fa-hospital-alt::before { + content: "\f0f8"; } -.fa-hospital-symbol:before { - content: "\f47e"; } +.fa-hospital-wide::before { + content: "\f0f8"; } -.fa-hospital-user:before { +.fa-hospital-user::before { content: "\f80d"; } -.fa-hot-tub:before { +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { content: "\f593"; } -.fa-hotdog:before { +.fa-hotdog::before { content: "\f80f"; } -.fa-hotel:before { +.fa-hotel::before { content: "\f594"; } -.fa-hotjar:before { - content: "\f3b1"; } +.fa-hourglass::before { + content: "\f254"; } -.fa-hourglass:before { +.fa-hourglass-2::before { content: "\f254"; } -.fa-hourglass-end:before { - content: "\f253"; } +.fa-hourglass-half::before { + content: "\f254"; } -.fa-hourglass-half:before { +.fa-hourglass-empty::before { content: "\f252"; } -.fa-hourglass-start:before { +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { content: "\f251"; } -.fa-house-damage:before { +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { content: "\f6f1"; } -.fa-house-user:before { +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-house-chimney-user::before { content: "\e065"; } -.fa-houzz:before { - content: "\f27c"; } +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } -.fa-hryvnia:before { +.fa-hryvnia-sign::before { content: "\f6f2"; } -.fa-html5:before { - content: "\f13b"; } +.fa-hryvnia::before { + content: "\f6f2"; } -.fa-hubspot:before { - content: "\f3b2"; } +.fa-i::before { + content: "\49"; } -.fa-i-cursor:before { +.fa-i-cursor::before { content: "\f246"; } -.fa-ice-cream:before { +.fa-ice-cream::before { content: "\f810"; } -.fa-icicles:before { +.fa-icicles::before { content: "\f7ad"; } -.fa-icons:before { +.fa-icons::before { content: "\f86d"; } -.fa-id-badge:before { +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-id-badge::before { content: "\f2c1"; } -.fa-id-card:before { +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { content: "\f2c2"; } -.fa-id-card-alt:before { +.fa-id-card-clip::before { content: "\f47f"; } -.fa-ideal:before { - content: "\e013"; } +.fa-id-card-alt::before { + content: "\f47f"; } -.fa-igloo:before { +.fa-igloo::before { content: "\f7ae"; } -.fa-image:before { +.fa-image::before { content: "\f03e"; } -.fa-images:before { - content: "\f302"; } +.fa-image-portrait::before { + content: "\f3e0"; } -.fa-imdb:before { - content: "\f2d8"; } +.fa-portrait::before { + content: "\f3e0"; } -.fa-inbox:before { +.fa-images::before { + content: "\f302"; } + +.fa-inbox::before { content: "\f01c"; } -.fa-indent:before { +.fa-indent::before { content: "\f03c"; } -.fa-industry:before { - content: "\f275"; } - -.fa-infinity:before { - content: "\f534"; } - -.fa-info:before { - content: "\f129"; } - -.fa-info-circle:before { - content: "\f05a"; } - -.fa-innosoft:before { - content: "\e080"; } - -.fa-instagram:before { - content: "\f16d"; } - -.fa-instagram-square:before { - content: "\e055"; } +.fa-indian-rupee-sign::before { + content: "\e1bc"; } -.fa-instalod:before { - content: "\e081"; } +.fa-indian-rupee::before { + content: "\e1bc"; } -.fa-intercom:before { - content: "\f7af"; } +.fa-inr::before { + content: "\e1bc"; } -.fa-internet-explorer:before { - content: "\f26b"; } +.fa-industry::before { + content: "\f275"; } -.fa-invision:before { - content: "\f7b0"; } +.fa-infinity::before { + content: "\f534"; } -.fa-ioxhost:before { - content: "\f208"; } +.fa-info::before { + content: "\f129"; } -.fa-italic:before { +.fa-italic::before { content: "\f033"; } -.fa-itch-io:before { - content: "\f83a"; } - -.fa-itunes:before { - content: "\f3b4"; } - -.fa-itunes-note:before { - content: "\f3b5"; } - -.fa-java:before { - content: "\f4e4"; } +.fa-j::before { + content: "\4a"; } -.fa-jedi:before { +.fa-jedi::before { content: "\f669"; } -.fa-jedi-order:before { - content: "\f50e"; } - -.fa-jenkins:before { - content: "\f3b6"; } - -.fa-jira:before { - content: "\f7b1"; } +.fa-jet-fighter::before { + content: "\f0fb"; } -.fa-joget:before { - content: "\f3b7"; } +.fa-fighter-jet::before { + content: "\f0fb"; } -.fa-joint:before { +.fa-joint::before { content: "\f595"; } -.fa-joomla:before { - content: "\f1aa"; } - -.fa-journal-whills:before { - content: "\f66a"; } - -.fa-js:before { - content: "\f3b8"; } - -.fa-js-square:before { - content: "\f3b9"; } - -.fa-jsfiddle:before { - content: "\f1cc"; } +.fa-k::before { + content: "\4b"; } -.fa-kaaba:before { +.fa-kaaba::before { content: "\f66b"; } -.fa-kaggle:before { - content: "\f5fa"; } - -.fa-key:before { +.fa-key::before { content: "\f084"; } -.fa-keybase:before { - content: "\f4f5"; } - -.fa-keyboard:before { +.fa-keyboard::before { content: "\f11c"; } -.fa-keycdn:before { - content: "\f3ba"; } - -.fa-khanda:before { +.fa-khanda::before { content: "\f66d"; } -.fa-kickstarter:before { - content: "\f3bb"; } - -.fa-kickstarter-k:before { - content: "\f3bc"; } - -.fa-kiss:before { - content: "\f596"; } +.fa-kip-sign::before { + content: "\e1c4"; } -.fa-kiss-beam:before { - content: "\f597"; } +.fa-kit-medical::before { + content: "\f479"; } -.fa-kiss-wink-heart:before { - content: "\f598"; } +.fa-first-aid::before { + content: "\f479"; } -.fa-kiwi-bird:before { +.fa-kiwi-bird::before { content: "\f535"; } -.fa-korvue:before { - content: "\f42f"; } +.fa-l::before { + content: "\4c"; } -.fa-landmark:before { +.fa-landmark::before { content: "\f66f"; } -.fa-language:before { +.fa-language::before { content: "\f1ab"; } -.fa-laptop:before { +.fa-laptop::before { content: "\f109"; } -.fa-laptop-code:before { +.fa-laptop-code::before { content: "\f5fc"; } -.fa-laptop-house:before { - content: "\e066"; } - -.fa-laptop-medical:before { +.fa-laptop-medical::before { content: "\f812"; } -.fa-laravel:before { - content: "\f3bd"; } - -.fa-lastfm:before { - content: "\f202"; } - -.fa-lastfm-square:before { - content: "\f203"; } - -.fa-laugh:before { - content: "\f599"; } - -.fa-laugh-beam:before { - content: "\f59a"; } - -.fa-laugh-squint:before { - content: "\f59b"; } +.fa-lari-sign::before { + content: "\e1c8"; } -.fa-laugh-wink:before { - content: "\f59c"; } - -.fa-layer-group:before { +.fa-layer-group::before { content: "\f5fd"; } -.fa-leaf:before { +.fa-leaf::before { content: "\f06c"; } -.fa-leanpub:before { - content: "\f212"; } +.fa-left-long::before { + content: "\f30a"; } -.fa-lemon:before { - content: "\f094"; } +.fa-long-arrow-alt-left::before { + content: "\f30a"; } -.fa-less:before { - content: "\f41d"; } +.fa-left-right::before { + content: "\f337"; } -.fa-less-than:before { - content: "\f536"; } +.fa-arrows-alt-h::before { + content: "\f337"; } -.fa-less-than-equal:before { - content: "\f537"; } +.fa-lemon::before { + content: "\f094"; } -.fa-level-down-alt:before { - content: "\f3be"; } +.fa-less-than::before { + content: "\3c"; } -.fa-level-up-alt:before { - content: "\f3bf"; } +.fa-less-than-equal::before { + content: "\f537"; } -.fa-life-ring:before { +.fa-life-ring::before { content: "\f1cd"; } -.fa-lightbulb:before { +.fa-lightbulb::before { content: "\f0eb"; } -.fa-line:before { - content: "\f3c0"; } +.fa-link::before { + content: "\f0c1"; } -.fa-link:before { +.fa-chain::before { content: "\f0c1"; } -.fa-linkedin:before { - content: "\f08c"; } +.fa-link-slash::before { + content: "\f127"; } -.fa-linkedin-in:before { - content: "\f0e1"; } +.fa-chain-broken::before { + content: "\f127"; } -.fa-linode:before { - content: "\f2b8"; } +.fa-chain-slash::before { + content: "\f127"; } -.fa-linux:before { - content: "\f17c"; } +.fa-unlink::before { + content: "\f127"; } -.fa-lira-sign:before { +.fa-lira-sign::before { content: "\f195"; } -.fa-list:before { +.fa-list::before { content: "\f03a"; } -.fa-list-alt:before { - content: "\f022"; } +.fa-list-squares::before { + content: "\f03a"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } -.fa-list-ol:before { +.fa-list-ol::before { content: "\f0cb"; } -.fa-list-ul:before { +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-list-ul::before { content: "\f0ca"; } -.fa-location-arrow:before { +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-location-arrow::before { content: "\f124"; } -.fa-lock:before { - content: "\f023"; } +.fa-location-crosshairs::before { + content: "\f601"; } -.fa-lock-open:before { - content: "\f3c1"; } +.fa-location::before { + content: "\f601"; } -.fa-long-arrow-alt-down:before { - content: "\f309"; } +.fa-location-dot::before { + content: "\f3c5"; } -.fa-long-arrow-alt-left:before { - content: "\f30a"; } +.fa-map-marker-alt::before { + content: "\f3c5"; } -.fa-long-arrow-alt-right:before { - content: "\f30b"; } +.fa-location-pin::before { + content: "\f041"; } -.fa-long-arrow-alt-up:before { - content: "\f30c"; } +.fa-map-marker::before { + content: "\f041"; } -.fa-low-vision:before { - content: "\f2a8"; } +.fa-lock::before { + content: "\f023"; } -.fa-luggage-cart:before { - content: "\f59d"; } +.fa-lock-open::before { + content: "\f3c1"; } -.fa-lungs:before { +.fa-lungs::before { content: "\f604"; } -.fa-lungs-virus:before { +.fa-lungs-virus::before { content: "\e067"; } -.fa-lyft:before { - content: "\f3c3"; } +.fa-m::before { + content: "\4d"; } -.fa-magento:before { - content: "\f3c4"; } +.fa-magnet::before { + content: "\f076"; } -.fa-magic:before { - content: "\f0d0"; } +.fa-magnifying-glass::before { + content: "\f002"; } -.fa-magnet:before { - content: "\f076"; } +.fa-search::before { + content: "\f002"; } -.fa-mail-bulk:before { - content: "\f674"; } +.fa-magnifying-glass-dollar::before { + content: "\f688"; } -.fa-mailchimp:before { - content: "\f59e"; } +.fa-search-dollar::before { + content: "\f688"; } -.fa-male:before { - content: "\f183"; } +.fa-magnifying-glass-location::before { + content: "\f689"; } -.fa-mandalorian:before { - content: "\f50f"; } +.fa-search-location::before { + content: "\f689"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } -.fa-map:before { +.fa-search-minus::before { + content: "\f010"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-map::before { content: "\f279"; } -.fa-map-marked:before { +.fa-map-location::before { content: "\f59f"; } -.fa-map-marked-alt:before { - content: "\f5a0"; } +.fa-map-marked::before { + content: "\f59f"; } -.fa-map-marker:before { - content: "\f041"; } +.fa-map-location-dot::before { + content: "\f5a0"; } -.fa-map-marker-alt:before { - content: "\f3c5"; } +.fa-map-marked-alt::before { + content: "\f5a0"; } -.fa-map-pin:before { +.fa-map-pin::before { content: "\f276"; } -.fa-map-signs:before { - content: "\f277"; } - -.fa-markdown:before { - content: "\f60f"; } - -.fa-marker:before { +.fa-marker::before { content: "\f5a1"; } -.fa-mars:before { +.fa-mars::before { content: "\f222"; } -.fa-mars-double:before { +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-mars-double::before { content: "\f227"; } -.fa-mars-stroke:before { +.fa-mars-stroke::before { content: "\f229"; } -.fa-mars-stroke-h:before { +.fa-mars-stroke-right::before { content: "\f22b"; } -.fa-mars-stroke-v:before { - content: "\f22a"; } +.fa-mars-stroke-h::before { + content: "\f22b"; } -.fa-mask:before { - content: "\f6fa"; } +.fa-mars-stroke-up::before { + content: "\f22a"; } -.fa-mastodon:before { - content: "\f4f6"; } +.fa-mars-stroke-v::before { + content: "\f22a"; } -.fa-maxcdn:before { - content: "\f136"; } +.fa-martini-glass::before { + content: "\f57b"; } -.fa-mdb:before { - content: "\f8ca"; } +.fa-glass-martini-alt::before { + content: "\f57b"; } -.fa-medal:before { - content: "\f5a2"; } +.fa-martini-glass-citrus::before { + content: "\f561"; } -.fa-medapps:before { - content: "\f3c6"; } +.fa-cocktail::before { + content: "\f561"; } -.fa-medium:before { - content: "\f23a"; } +.fa-martini-glass-empty::before { + content: "\f000"; } -.fa-medium-m:before { - content: "\f3c7"; } +.fa-glass-martini::before { + content: "\f000"; } -.fa-medkit:before { - content: "\f0fa"; } +.fa-mask::before { + content: "\f6fa"; } -.fa-medrt:before { - content: "\f3c8"; } +.fa-mask-face::before { + content: "\e1d7"; } -.fa-meetup:before { - content: "\f2e0"; } +.fa-masks-theater::before { + content: "\f630"; } -.fa-megaport:before { - content: "\f5a3"; } +.fa-theater-masks::before { + content: "\f630"; } -.fa-meh:before { - content: "\f11a"; } +.fa-maximize::before { + content: "\f31e"; } -.fa-meh-blank:before { - content: "\f5a4"; } +.fa-expand-arrows-alt::before { + content: "\f31e"; } -.fa-meh-rolling-eyes:before { - content: "\f5a5"; } +.fa-medal::before { + content: "\f5a2"; } -.fa-memory:before { +.fa-memory::before { content: "\f538"; } -.fa-mendeley:before { - content: "\f7b3"; } - -.fa-menorah:before { +.fa-menorah::before { content: "\f676"; } -.fa-mercury:before { +.fa-mercury::before { content: "\f223"; } -.fa-meteor:before { - content: "\f753"; } +.fa-message::before { + content: "\f27a"; } -.fa-microblog:before { - content: "\e01a"; } +.fa-comment-alt::before { + content: "\f27a"; } -.fa-microchip:before { +.fa-meteor::before { + content: "\f753"; } + +.fa-microchip::before { content: "\f2db"; } -.fa-microphone:before { +.fa-microphone::before { content: "\f130"; } -.fa-microphone-alt:before { +.fa-microphone-lines::before { content: "\f3c9"; } -.fa-microphone-alt-slash:before { +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-microphone-lines-slash::before { content: "\f539"; } -.fa-microphone-slash:before { +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-microphone-slash::before { content: "\f131"; } -.fa-microscope:before { +.fa-microscope::before { content: "\f610"; } -.fa-microsoft:before { - content: "\f3ca"; } +.fa-mill-sign::before { + content: "\e1ed"; } -.fa-minus:before { - content: "\f068"; } +.fa-minimize::before { + content: "\f78c"; } -.fa-minus-circle:before { - content: "\f056"; } +.fa-compress-arrows-alt::before { + content: "\f78c"; } -.fa-minus-square:before { - content: "\f146"; } +.fa-minus::before { + content: "\f068"; } -.fa-mitten:before { - content: "\f7b5"; } +.fa-subtract::before { + content: "\f068"; } -.fa-mix:before { - content: "\f3cb"; } +.fa-mitten::before { + content: "\f7b5"; } -.fa-mixcloud:before { - content: "\f289"; } +.fa-mobile::before { + content: "\f3ce"; } -.fa-mixer:before { - content: "\e056"; } +.fa-mobile-android::before { + content: "\f3ce"; } -.fa-mizuni:before { - content: "\f3cc"; } +.fa-mobile-phone::before { + content: "\f3ce"; } -.fa-mobile:before { +.fa-mobile-button::before { content: "\f10b"; } -.fa-mobile-alt:before { +.fa-mobile-screen-button::before { content: "\f3cd"; } -.fa-modx:before { - content: "\f285"; } - -.fa-monero:before { - content: "\f3d0"; } +.fa-mobile-alt::before { + content: "\f3cd"; } -.fa-money-bill:before { +.fa-money-bill::before { content: "\f0d6"; } -.fa-money-bill-alt:before { +.fa-money-bill-1::before { content: "\f3d1"; } -.fa-money-bill-wave:before { - content: "\f53a"; } +.fa-money-bill-alt::before { + content: "\f3d1"; } -.fa-money-bill-wave-alt:before { +.fa-money-bill-1-wave::before { content: "\f53b"; } -.fa-money-check:before { +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-money-check::before { content: "\f53c"; } -.fa-money-check-alt:before { +.fa-money-check-dollar::before { content: "\f53d"; } -.fa-monument:before { +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-monument::before { content: "\f5a6"; } -.fa-moon:before { +.fa-moon::before { content: "\f186"; } -.fa-mortar-pestle:before { +.fa-mortar-pestle::before { content: "\f5a7"; } -.fa-mosque:before { +.fa-mosque::before { content: "\f678"; } -.fa-motorcycle:before { +.fa-motorcycle::before { content: "\f21c"; } -.fa-mountain:before { +.fa-mountain::before { content: "\f6fc"; } -.fa-mouse:before { - content: "\f8cc"; } +.fa-mug-hot::before { + content: "\f7b6"; } -.fa-mouse-pointer:before { - content: "\f245"; } +.fa-mug-saucer::before { + content: "\f0f4"; } -.fa-mug-hot:before { - content: "\f7b6"; } +.fa-coffee::before { + content: "\f0f4"; } -.fa-music:before { +.fa-music::before { content: "\f001"; } -.fa-napster:before { - content: "\f3d2"; } +.fa-n::before { + content: "\4e"; } -.fa-neos:before { - content: "\f612"; } +.fa-naira-sign::before { + content: "\e1f6"; } -.fa-network-wired:before { +.fa-network-wired::before { content: "\f6ff"; } -.fa-neuter:before { +.fa-neuter::before { content: "\f22c"; } -.fa-newspaper:before { +.fa-newspaper::before { content: "\f1ea"; } -.fa-nimblr:before { - content: "\f5a8"; } - -.fa-node:before { - content: "\f419"; } +.fa-not-equal::before { + content: "\f53e"; } -.fa-node-js:before { - content: "\f3d3"; } +.fa-note-sticky::before { + content: "\f249"; } -.fa-not-equal:before { - content: "\f53e"; } +.fa-sticky-note::before { + content: "\f249"; } -.fa-notes-medical:before { +.fa-notes-medical::before { content: "\f481"; } -.fa-npm:before { - content: "\f3d4"; } - -.fa-ns8:before { - content: "\f3d5"; } +.fa-o::before { + content: "\4f"; } -.fa-nutritionix:before { - content: "\f3d6"; } - -.fa-object-group:before { +.fa-object-group::before { content: "\f247"; } -.fa-object-ungroup:before { +.fa-object-ungroup::before { content: "\f248"; } -.fa-octopus-deploy:before { - content: "\e082"; } - -.fa-odnoklassniki:before { - content: "\f263"; } - -.fa-odnoklassniki-square:before { - content: "\f264"; } - -.fa-oil-can:before { +.fa-oil-can::before { content: "\f613"; } -.fa-old-republic:before { - content: "\f510"; } - -.fa-om:before { +.fa-om::before { content: "\f679"; } -.fa-opencart:before { - content: "\f23d"; } - -.fa-openid:before { - content: "\f19b"; } - -.fa-opera:before { - content: "\f26a"; } - -.fa-optin-monster:before { - content: "\f23c"; } - -.fa-orcid:before { - content: "\f8d2"; } - -.fa-osi:before { - content: "\f41a"; } - -.fa-otter:before { +.fa-otter::before { content: "\f700"; } -.fa-outdent:before { +.fa-outdent::before { content: "\f03b"; } -.fa-page4:before { - content: "\f3d7"; } +.fa-dedent::before { + content: "\f03b"; } -.fa-pagelines:before { - content: "\f18c"; } +.fa-p::before { + content: "\50"; } -.fa-pager:before { +.fa-pager::before { content: "\f815"; } -.fa-paint-brush:before { +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-paintbrush::before { content: "\f1fc"; } -.fa-paint-roller:before { - content: "\f5aa"; } +.fa-paint-brush::before { + content: "\f1fc"; } -.fa-palette:before { +.fa-palette::before { content: "\f53f"; } -.fa-palfed:before { - content: "\f3d8"; } - -.fa-pallet:before { +.fa-pallet::before { content: "\f482"; } -.fa-paper-plane:before { +.fa-panorama::before { + content: "\e209"; } + +.fa-paper-plane::before { content: "\f1d8"; } -.fa-paperclip:before { +.fa-paperclip::before { content: "\f0c6"; } -.fa-parachute-box:before { +.fa-parachute-box::before { content: "\f4cd"; } -.fa-paragraph:before { +.fa-paragraph::before { content: "\f1dd"; } -.fa-parking:before { - content: "\f540"; } - -.fa-passport:before { +.fa-passport::before { content: "\f5ab"; } -.fa-pastafarianism:before { - content: "\f67b"; } - -.fa-paste:before { +.fa-paste::before { content: "\f0ea"; } -.fa-patreon:before { - content: "\f3d9"; } +.fa-file-clipboard::before { + content: "\f0ea"; } -.fa-pause:before { +.fa-pause::before { content: "\f04c"; } -.fa-pause-circle:before { - content: "\f28b"; } - -.fa-paw:before { +.fa-paw::before { content: "\f1b0"; } -.fa-paypal:before { - content: "\f1ed"; } - -.fa-peace:before { +.fa-peace::before { content: "\f67c"; } -.fa-pen:before { +.fa-pen::before { content: "\f304"; } -.fa-pen-alt:before { +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { content: "\f305"; } -.fa-pen-fancy:before { +.fa-pen-fancy::before { content: "\f5ac"; } -.fa-pen-nib:before { +.fa-pen-nib::before { content: "\f5ad"; } -.fa-pen-square:before { - content: "\f14b"; } +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } -.fa-pencil-alt:before { +.fa-pencil::before { content: "\f303"; } -.fa-pencil-ruler:before { - content: "\f5ae"; } +.fa-pencil-alt::before { + content: "\f303"; } -.fa-penny-arcade:before { - content: "\f704"; } +.fa-people-arrows-left-right::before { + content: "\e068"; } -.fa-people-arrows:before { +.fa-people-arrows::before { content: "\e068"; } -.fa-people-carry:before { +.fa-people-carry-box::before { content: "\f4ce"; } -.fa-pepper-hot:before { +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-pepper-hot::before { content: "\f816"; } -.fa-perbyte:before { - content: "\e083"; } +.fa-percent::before { + content: "\25"; } -.fa-percent:before { - content: "\f295"; } +.fa-percentage::before { + content: "\25"; } -.fa-percentage:before { - content: "\f541"; } +.fa-person::before { + content: "\f183"; } -.fa-periscope:before { - content: "\f3da"; } +.fa-male::before { + content: "\f183"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } -.fa-person-booth:before { +.fa-person-booth::before { content: "\f756"; } -.fa-phabricator:before { - content: "\f3db"; } +.fa-person-dots-from-line::before { + content: "\f470"; } -.fa-phoenix-framework:before { - content: "\f3dc"; } +.fa-diagnoses::before { + content: "\f470"; } -.fa-phoenix-squadron:before { - content: "\f511"; } +.fa-person-dress::before { + content: "\f182"; } -.fa-phone:before { - content: "\f095"; } +.fa-female::before { + content: "\f182"; } -.fa-phone-alt:before { - content: "\f879"; } +.fa-person-hiking::before { + content: "\f6ec"; } -.fa-phone-slash:before { - content: "\f3dd"; } +.fa-hiking::before { + content: "\f6ec"; } -.fa-phone-square:before { - content: "\f098"; } +.fa-person-praying::before { + content: "\f683"; } -.fa-phone-square-alt:before { - content: "\f87b"; } +.fa-pray::before { + content: "\f683"; } -.fa-phone-volume:before { - content: "\f2a0"; } +.fa-person-running::before { + content: "\f70c"; } -.fa-photo-video:before { - content: "\f87c"; } +.fa-running::before { + content: "\f70c"; } -.fa-php:before { - content: "\f457"; } +.fa-person-skating::before { + content: "\f7c5"; } -.fa-pied-piper:before { - content: "\f2ae"; } +.fa-skating::before { + content: "\f7c5"; } -.fa-pied-piper-alt:before { - content: "\f1a8"; } +.fa-person-skiing::before { + content: "\f7c9"; } -.fa-pied-piper-hat:before { - content: "\f4e5"; } +.fa-skiing::before { + content: "\f7c9"; } -.fa-pied-piper-pp:before { - content: "\f1a7"; } +.fa-person-skiing-nordic::before { + content: "\f7ca"; } -.fa-pied-piper-square:before { - content: "\e01e"; } +.fa-skiing-nordic::before { + content: "\f7ca"; } -.fa-piggy-bank:before { - content: "\f4d3"; } +.fa-person-snowboarding::before { + content: "\f7ce"; } -.fa-pills:before { - content: "\f484"; } +.fa-snowboarding::before { + content: "\f7ce"; } -.fa-pinterest:before { - content: "\f0d2"; } +.fa-person-swimming::before { + content: "\f5c4"; } -.fa-pinterest-p:before { - content: "\f231"; } +.fa-swimmer::before { + content: "\f5c4"; } -.fa-pinterest-square:before { - content: "\f0d3"; } +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-phone-slash::before { + content: "\f3dd"; } -.fa-pizza-slice:before { +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-pizza-slice::before { content: "\f818"; } -.fa-place-of-worship:before { +.fa-place-of-worship::before { content: "\f67f"; } -.fa-plane:before { +.fa-plane::before { content: "\f072"; } -.fa-plane-arrival:before { +.fa-plane-arrival::before { content: "\f5af"; } -.fa-plane-departure:before { +.fa-plane-departure::before { content: "\f5b0"; } -.fa-plane-slash:before { +.fa-plane-slash::before { content: "\e069"; } -.fa-play:before { +.fa-play::before { content: "\f04b"; } -.fa-play-circle:before { - content: "\f144"; } - -.fa-playstation:before { - content: "\f3df"; } - -.fa-plug:before { +.fa-plug::before { content: "\f1e6"; } -.fa-plus:before { - content: "\f067"; } +.fa-plus::before { + content: "\2b"; } -.fa-plus-circle:before { - content: "\f055"; } +.fa-add::before { + content: "\2b"; } -.fa-plus-square:before { - content: "\f0fe"; } +.fa-plus-minus::before { + content: "\e43c"; } -.fa-podcast:before { +.fa-podcast::before { content: "\f2ce"; } -.fa-poll:before { - content: "\f681"; } - -.fa-poll-h:before { - content: "\f682"; } - -.fa-poo:before { +.fa-poo::before { content: "\f2fe"; } -.fa-poo-storm:before { +.fa-poo-storm::before { content: "\f75a"; } -.fa-poop:before { - content: "\f619"; } - -.fa-portrait:before { - content: "\f3e0"; } +.fa-poo-bolt::before { + content: "\f75a"; } -.fa-pound-sign:before { - content: "\f154"; } +.fa-poop::before { + content: "\f619"; } -.fa-power-off:before { +.fa-power-off::before { content: "\f011"; } -.fa-pray:before { - content: "\f683"; } - -.fa-praying-hands:before { - content: "\f684"; } - -.fa-prescription:before { +.fa-prescription::before { content: "\f5b1"; } -.fa-prescription-bottle:before { +.fa-prescription-bottle::before { content: "\f485"; } -.fa-prescription-bottle-alt:before { +.fa-prescription-bottle-medical::before { content: "\f486"; } -.fa-print:before { - content: "\f02f"; } - -.fa-procedures:before { - content: "\f487"; } - -.fa-product-hunt:before { - content: "\f288"; } +.fa-prescription-bottle-alt::before { + content: "\f486"; } -.fa-project-diagram:before { - content: "\f542"; } +.fa-print::before { + content: "\f02f"; } -.fa-pump-medical:before { +.fa-pump-medical::before { content: "\e06a"; } -.fa-pump-soap:before { +.fa-pump-soap::before { content: "\e06b"; } -.fa-pushed:before { - content: "\f3e1"; } - -.fa-puzzle-piece:before { +.fa-puzzle-piece::before { content: "\f12e"; } -.fa-python:before { - content: "\f3e2"; } - -.fa-qq:before { - content: "\f1d6"; } +.fa-q::before { + content: "\51"; } -.fa-qrcode:before { +.fa-qrcode::before { content: "\f029"; } -.fa-question:before { - content: "\f128"; } +.fa-question::before { + content: "\3f"; } -.fa-question-circle:before { - content: "\f059"; } - -.fa-quidditch:before { - content: "\f458"; } - -.fa-quinscape:before { - content: "\f459"; } - -.fa-quora:before { - content: "\f2c4"; } +.fa-quote-left::before { + content: "\f10d"; } -.fa-quote-left:before { +.fa-quote-left-alt::before { content: "\f10d"; } -.fa-quote-right:before { +.fa-quote-right::before { content: "\f10e"; } -.fa-quran:before { - content: "\f687"; } +.fa-quote-right-alt::before { + content: "\f10e"; } -.fa-r-project:before { - content: "\f4f7"; } +.fa-r::before { + content: "\52"; } -.fa-radiation:before { +.fa-radiation::before { content: "\f7b9"; } -.fa-radiation-alt:before { - content: "\f7ba"; } - -.fa-rainbow:before { +.fa-rainbow::before { content: "\f75b"; } -.fa-random:before { - content: "\f074"; } - -.fa-raspberry-pi:before { - content: "\f7bb"; } - -.fa-ravelry:before { - content: "\f2d9"; } - -.fa-react:before { - content: "\f41b"; } - -.fa-reacteurope:before { - content: "\f75d"; } - -.fa-readme:before { - content: "\f4d5"; } - -.fa-rebel:before { - content: "\f1d0"; } - -.fa-receipt:before { +.fa-receipt::before { content: "\f543"; } -.fa-record-vinyl:before { +.fa-record-vinyl::before { content: "\f8d9"; } -.fa-recycle:before { - content: "\f1b8"; } +.fa-rectangle-ad::before { + content: "\f641"; } -.fa-red-river:before { - content: "\f3e3"; } +.fa-ad::before { + content: "\f641"; } -.fa-reddit:before { - content: "\f1a1"; } +.fa-rectangle-list::before { + content: "\f022"; } -.fa-reddit-alien:before { - content: "\f281"; } +.fa-list-alt::before { + content: "\f022"; } -.fa-reddit-square:before { - content: "\f1a2"; } +.fa-rectangle-xmark::before { + content: "\f410"; } -.fa-redhat:before { - content: "\f7bc"; } +.fa-rectangle-times::before { + content: "\f410"; } -.fa-redo:before { - content: "\f01e"; } +.fa-times-rectangle::before { + content: "\f410"; } -.fa-redo-alt:before { - content: "\f2f9"; } +.fa-window-close::before { + content: "\f410"; } + +.fa-recycle::before { + content: "\f1b8"; } -.fa-registered:before { +.fa-registered::before { content: "\f25d"; } -.fa-remove-format:before { - content: "\f87d"; } +.fa-repeat::before { + content: "\f363"; } -.fa-renren:before { - content: "\f18b"; } +.fa-reply::before { + content: "\f3e5"; } -.fa-reply:before { +.fa-mail-reply::before { content: "\f3e5"; } -.fa-reply-all:before { +.fa-reply-all::before { content: "\f122"; } -.fa-replyd:before { - content: "\f3e6"; } +.fa-mail-reply-all::before { + content: "\f122"; } -.fa-republican:before { +.fa-republican::before { content: "\f75e"; } -.fa-researchgate:before { - content: "\f4f8"; } - -.fa-resolving:before { - content: "\f3e7"; } - -.fa-restroom:before { +.fa-restroom::before { content: "\f7bd"; } -.fa-retweet:before { +.fa-retweet::before { content: "\f079"; } -.fa-rev:before { - content: "\f5b2"; } - -.fa-ribbon:before { +.fa-ribbon::before { content: "\f4d6"; } -.fa-ring:before { +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-ring::before { content: "\f70b"; } -.fa-road:before { +.fa-road::before { content: "\f018"; } -.fa-robot:before { +.fa-robot::before { content: "\f544"; } -.fa-rocket:before { +.fa-rocket::before { content: "\f135"; } -.fa-rocketchat:before { - content: "\f3e8"; } +.fa-rotate::before { + content: "\f2f1"; } -.fa-rockrms:before { - content: "\f3e9"; } +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-rotate-left::before { + content: "\f2ea"; } -.fa-route:before { +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-route::before { content: "\f4d7"; } -.fa-rss:before { +.fa-rss::before { content: "\f09e"; } -.fa-rss-square:before { - content: "\f143"; } +.fa-feed::before { + content: "\f09e"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } -.fa-ruble-sign:before { +.fa-rub::before { content: "\f158"; } -.fa-ruler:before { +.fa-ruble::before { + content: "\f158"; } + +.fa-ruler::before { content: "\f545"; } -.fa-ruler-combined:before { +.fa-ruler-combined::before { content: "\f546"; } -.fa-ruler-horizontal:before { +.fa-ruler-horizontal::before { content: "\f547"; } -.fa-ruler-vertical:before { +.fa-ruler-vertical::before { content: "\f548"; } -.fa-running:before { - content: "\f70c"; } +.fa-rupee-sign::before { + content: "\f156"; } -.fa-rupee-sign:before { +.fa-rupee::before { content: "\f156"; } -.fa-rust:before { - content: "\e07a"; } +.fa-rupiah-sign::before { + content: "\e23d"; } -.fa-sad-cry:before { - content: "\f5b3"; } +.fa-s::before { + content: "\53"; } -.fa-sad-tear:before { - content: "\f5b4"; } +.fa-sailboat::before { + content: "\e445"; } -.fa-safari:before { - content: "\f267"; } +.fa-satellite::before { + content: "\f7bf"; } -.fa-salesforce:before { - content: "\f83b"; } +.fa-satellite-dish::before { + content: "\f7c0"; } -.fa-sass:before { - content: "\f41e"; } +.fa-scale-balanced::before { + content: "\f24e"; } -.fa-satellite:before { - content: "\f7bf"; } +.fa-balance-scale::before { + content: "\f24e"; } -.fa-satellite-dish:before { - content: "\f7c0"; } +.fa-scale-unbalanced::before { + content: "\f515"; } -.fa-save:before { - content: "\f0c7"; } +.fa-balance-scale-left::before { + content: "\f515"; } -.fa-schlix:before { - content: "\f3ea"; } +.fa-scale-unbalanced-flip::before { + content: "\f516"; } -.fa-school:before { +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-school::before { content: "\f549"; } -.fa-screwdriver:before { - content: "\f54a"; } +.fa-scissors::before { + content: "\f0c4"; } -.fa-scribd:before { - content: "\f28a"; } +.fa-cut::before { + content: "\f0c4"; } -.fa-scroll:before { - content: "\f70e"; } +.fa-screwdriver::before { + content: "\f54a"; } -.fa-sd-card:before { - content: "\f7c2"; } +.fa-screwdriver-wrench::before { + content: "\f7d9"; } -.fa-search:before { - content: "\f002"; } +.fa-tools::before { + content: "\f7d9"; } -.fa-search-dollar:before { - content: "\f688"; } +.fa-scroll::before { + content: "\f70e"; } -.fa-search-location:before { - content: "\f689"; } +.fa-scroll-torah::before { + content: "\f6a0"; } -.fa-search-minus:before { - content: "\f010"; } +.fa-torah::before { + content: "\f6a0"; } -.fa-search-plus:before { - content: "\f00e"; } +.fa-sd-card::before { + content: "\f7c2"; } -.fa-searchengin:before { - content: "\f3eb"; } +.fa-section::before { + content: "\e447"; } -.fa-seedling:before { +.fa-seedling::before { content: "\f4d8"; } -.fa-sellcast:before { - content: "\f2da"; } - -.fa-sellsy:before { - content: "\f213"; } +.fa-sprout::before { + content: "\f4d8"; } -.fa-server:before { +.fa-server::before { content: "\f233"; } -.fa-servicestack:before { - content: "\f3ec"; } +.fa-shapes::before { + content: "\f61f"; } -.fa-shapes:before { +.fa-triangle-circle-square::before { content: "\f61f"; } -.fa-share:before { +.fa-share::before { content: "\f064"; } -.fa-share-alt:before { - content: "\f1e0"; } +.fa-arrow-turn-right::before { + content: "\f064"; } -.fa-share-alt-square:before { - content: "\f1e1"; } +.fa-mail-forward::before { + content: "\f064"; } + +.fa-share-from-square::before { + content: "\f14d"; } -.fa-share-square:before { +.fa-share-square::before { content: "\f14d"; } -.fa-shekel-sign:before { +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-shekel-sign::before { content: "\f20b"; } -.fa-shield-alt:before { +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { content: "\f3ed"; } -.fa-shield-virus:before { +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-shield-virus::before { content: "\e06c"; } -.fa-ship:before { +.fa-ship::before { content: "\f21a"; } -.fa-shipping-fast:before { - content: "\f48b"; } +.fa-shirt::before { + content: "\f553"; } -.fa-shirtsinbulk:before { - content: "\f214"; } +.fa-t-shirt::before { + content: "\f553"; } -.fa-shoe-prints:before { - content: "\f54b"; } +.fa-tshirt::before { + content: "\f553"; } -.fa-shopify:before { - content: "\e057"; } +.fa-shoe-prints::before { + content: "\f54b"; } -.fa-shopping-bag:before { - content: "\f290"; } +.fa-shop::before { + content: "\f54f"; } -.fa-shopping-basket:before { - content: "\f291"; } +.fa-store-alt::before { + content: "\f54f"; } -.fa-shopping-cart:before { - content: "\f07a"; } +.fa-shop-slash::before { + content: "\e070"; } -.fa-shopware:before { - content: "\f5b5"; } +.fa-store-alt-slash::before { + content: "\e070"; } -.fa-shower:before { +.fa-shower::before { content: "\f2cc"; } -.fa-shuttle-van:before { - content: "\f5b6"; } +.fa-shrimp::before { + content: "\e448"; } + +.fa-shuffle::before { + content: "\f074"; } -.fa-sign:before { +.fa-random::before { + content: "\f074"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-sign-hanging::before { content: "\f4d9"; } -.fa-sign-in-alt:before { - content: "\f2f6"; } +.fa-sign::before { + content: "\f4d9"; } -.fa-sign-language:before { - content: "\f2a7"; } +.fa-signal::before { + content: "\f012"; } -.fa-sign-out-alt:before { - content: "\f2f5"; } +.fa-signal-5::before { + content: "\f012"; } -.fa-signal:before { +.fa-signal-perfect::before { content: "\f012"; } -.fa-signature:before { +.fa-signature::before { content: "\f5b7"; } -.fa-sim-card:before { - content: "\f7c4"; } +.fa-signs-post::before { + content: "\f277"; } -.fa-simplybuilt:before { - content: "\f215"; } +.fa-map-signs::before { + content: "\f277"; } -.fa-sink:before { - content: "\e06d"; } +.fa-sim-card::before { + content: "\f7c4"; } -.fa-sistrix:before { - content: "\f3ee"; } +.fa-sink::before { + content: "\e06d"; } -.fa-sitemap:before { +.fa-sitemap::before { content: "\f0e8"; } -.fa-sith:before { - content: "\f512"; } +.fa-skull::before { + content: "\f54c"; } -.fa-skating:before { - content: "\f7c5"; } +.fa-skull-crossbones::before { + content: "\f714"; } -.fa-sketch:before { - content: "\f7c6"; } +.fa-slash::before { + content: "\f715"; } -.fa-skiing:before { - content: "\f7c9"; } +.fa-sleigh::before { + content: "\f7cc"; } -.fa-skiing-nordic:before { - content: "\f7ca"; } +.fa-sliders::before { + content: "\f1de"; } -.fa-skull:before { - content: "\f54c"; } +.fa-sliders-h::before { + content: "\f1de"; } -.fa-skull-crossbones:before { - content: "\f714"; } +.fa-smog::before { + content: "\f75f"; } -.fa-skyatlas:before { - content: "\f216"; } +.fa-smoking::before { + content: "\f48d"; } -.fa-skype:before { - content: "\f17e"; } +.fa-snowflake::before { + content: "\f2dc"; } -.fa-slack:before { - content: "\f198"; } +.fa-snowman::before { + content: "\f7d0"; } -.fa-slack-hash:before { - content: "\f3ef"; } +.fa-snowplow::before { + content: "\f7d2"; } -.fa-slash:before { - content: "\f715"; } +.fa-soap::before { + content: "\e06e"; } -.fa-sleigh:before { - content: "\f7cc"; } +.fa-socks::before { + content: "\f696"; } -.fa-sliders-h:before { - content: "\f1de"; } +.fa-solar-panel::before { + content: "\f5ba"; } -.fa-slideshare:before { - content: "\f1e7"; } +.fa-sort::before { + content: "\f0dc"; } -.fa-smile:before { - content: "\f118"; } +.fa-unsorted::before { + content: "\f0dc"; } -.fa-smile-beam:before { - content: "\f5b8"; } +.fa-sort-down::before { + content: "\f0dd"; } -.fa-smile-wink:before { - content: "\f4da"; } +.fa-sort-desc::before { + content: "\f0dd"; } -.fa-smog:before { - content: "\f75f"; } +.fa-sort-up::before { + content: "\f0de"; } -.fa-smoking:before { - content: "\f48d"; } +.fa-sort-asc::before { + content: "\f0de"; } -.fa-smoking-ban:before { - content: "\f54d"; } +.fa-spa::before { + content: "\f5bb"; } -.fa-sms:before { - content: "\f7cd"; } +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } -.fa-snapchat:before { - content: "\f2ab"; } +.fa-pastafarianism::before { + content: "\f67b"; } -.fa-snapchat-ghost:before { - content: "\f2ac"; } +.fa-spell-check::before { + content: "\f891"; } -.fa-snapchat-square:before { - content: "\f2ad"; } +.fa-spider::before { + content: "\f717"; } -.fa-snowboarding:before { - content: "\f7ce"; } +.fa-spinner::before { + content: "\f110"; } -.fa-snowflake:before { - content: "\f2dc"; } +.fa-splotch::before { + content: "\f5bc"; } -.fa-snowman:before { - content: "\f7d0"; } +.fa-spoon::before { + content: "\f2e5"; } -.fa-snowplow:before { - content: "\f7d2"; } +.fa-utensil-spoon::before { + content: "\f2e5"; } -.fa-soap:before { - content: "\e06e"; } +.fa-spray-can::before { + content: "\f5bd"; } -.fa-socks:before { - content: "\f696"; } +.fa-spray-can-sparkles::before { + content: "\f5d0"; } -.fa-solar-panel:before { - content: "\f5ba"; } +.fa-air-freshener::before { + content: "\f5d0"; } -.fa-sort:before { - content: "\f0dc"; } +.fa-square::before { + content: "\f0c8"; } -.fa-sort-alpha-down:before { - content: "\f15d"; } +.fa-square-arrow-up-right::before { + content: "\f14c"; } -.fa-sort-alpha-down-alt:before { - content: "\f881"; } +.fa-external-link-square::before { + content: "\f14c"; } -.fa-sort-alpha-up:before { - content: "\f15e"; } +.fa-square-caret-down::before { + content: "\f150"; } -.fa-sort-alpha-up-alt:before { - content: "\f882"; } +.fa-caret-square-down::before { + content: "\f150"; } -.fa-sort-amount-down:before { - content: "\f160"; } +.fa-square-caret-left::before { + content: "\f191"; } -.fa-sort-amount-down-alt:before { - content: "\f884"; } +.fa-caret-square-left::before { + content: "\f191"; } -.fa-sort-amount-up:before { - content: "\f161"; } +.fa-square-caret-right::before { + content: "\f152"; } -.fa-sort-amount-up-alt:before { - content: "\f885"; } +.fa-caret-square-right::before { + content: "\f152"; } -.fa-sort-down:before { - content: "\f0dd"; } +.fa-square-caret-up::before { + content: "\f151"; } -.fa-sort-numeric-down:before { - content: "\f162"; } +.fa-caret-square-up::before { + content: "\f151"; } -.fa-sort-numeric-down-alt:before { - content: "\f886"; } +.fa-square-check::before { + content: "\f14a"; } -.fa-sort-numeric-up:before { - content: "\f163"; } +.fa-check-square::before { + content: "\f14a"; } -.fa-sort-numeric-up-alt:before { - content: "\f887"; } +.fa-square-envelope::before { + content: "\f199"; } -.fa-sort-up:before { - content: "\f0de"; } +.fa-envelope-square::before { + content: "\f199"; } -.fa-soundcloud:before { - content: "\f1be"; } +.fa-square-full::before { + content: "\f45c"; } -.fa-sourcetree:before { - content: "\f7d3"; } +.fa-square-h::before { + content: "\f0fd"; } -.fa-spa:before { - content: "\f5bb"; } +.fa-h-square::before { + content: "\f0fd"; } -.fa-space-shuttle:before { - content: "\f197"; } +.fa-square-minus::before { + content: "\f146"; } -.fa-speakap:before { - content: "\f3f3"; } +.fa-minus-square::before { + content: "\f146"; } -.fa-speaker-deck:before { - content: "\f83c"; } +.fa-square-parking::before { + content: "\f540"; } -.fa-spell-check:before { - content: "\f891"; } +.fa-parking::before { + content: "\f540"; } -.fa-spider:before { - content: "\f717"; } +.fa-square-pen::before { + content: "\f14b"; } -.fa-spinner:before { - content: "\f110"; } +.fa-pen-square::before { + content: "\f14b"; } -.fa-splotch:before { - content: "\f5bc"; } +.fa-pencil-square::before { + content: "\f14b"; } -.fa-spotify:before { - content: "\f1bc"; } +.fa-square-phone::before { + content: "\f098"; } -.fa-spray-can:before { - content: "\f5bd"; } +.fa-phone-square::before { + content: "\f098"; } -.fa-square:before { - content: "\f0c8"; } +.fa-square-phone-flip::before { + content: "\f87b"; } -.fa-square-full:before { - content: "\f45c"; } +.fa-phone-square-alt::before { + content: "\f87b"; } -.fa-square-root-alt:before { +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-square-root-variable::before { content: "\f698"; } -.fa-squarespace:before { - content: "\f5be"; } +.fa-square-root-alt::before { + content: "\f698"; } -.fa-stack-exchange:before { - content: "\f18d"; } +.fa-square-rss::before { + content: "\f143"; } -.fa-stack-overflow:before { - content: "\f16c"; } +.fa-rss-square::before { + content: "\f143"; } -.fa-stackpath:before { - content: "\f842"; } +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } -.fa-stamp:before { +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-stamp::before { content: "\f5bf"; } -.fa-star:before { +.fa-star::before { content: "\f005"; } -.fa-star-and-crescent:before { +.fa-star-and-crescent::before { content: "\f699"; } -.fa-star-half:before { +.fa-star-half::before { content: "\f089"; } -.fa-star-half-alt:before { +.fa-star-half-stroke::before { content: "\f5c0"; } -.fa-star-of-david:before { +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-star-of-david::before { content: "\f69a"; } -.fa-star-of-life:before { +.fa-star-of-life::before { content: "\f621"; } -.fa-staylinked:before { - content: "\f3f5"; } - -.fa-steam:before { - content: "\f1b6"; } - -.fa-steam-square:before { - content: "\f1b7"; } - -.fa-steam-symbol:before { - content: "\f3f6"; } +.fa-sterling-sign::before { + content: "\f154"; } -.fa-step-backward:before { - content: "\f048"; } +.fa-gbp::before { + content: "\f154"; } -.fa-step-forward:before { - content: "\f051"; } +.fa-pound-sign::before { + content: "\f154"; } -.fa-stethoscope:before { +.fa-stethoscope::before { content: "\f0f1"; } -.fa-sticker-mule:before { - content: "\f3f7"; } - -.fa-sticky-note:before { - content: "\f249"; } - -.fa-stop:before { +.fa-stop::before { content: "\f04d"; } -.fa-stop-circle:before { - content: "\f28d"; } - -.fa-stopwatch:before { +.fa-stopwatch::before { content: "\f2f2"; } -.fa-stopwatch-20:before { +.fa-stopwatch-20::before { content: "\e06f"; } -.fa-store:before { +.fa-store::before { content: "\f54e"; } -.fa-store-alt:before { - content: "\f54f"; } - -.fa-store-alt-slash:before { - content: "\e070"; } - -.fa-store-slash:before { +.fa-store-slash::before { content: "\e071"; } -.fa-strava:before { - content: "\f428"; } - -.fa-stream:before { - content: "\f550"; } - -.fa-street-view:before { +.fa-street-view::before { content: "\f21d"; } -.fa-strikethrough:before { +.fa-strikethrough::before { content: "\f0cc"; } -.fa-stripe:before { - content: "\f429"; } - -.fa-stripe-s:before { - content: "\f42a"; } - -.fa-stroopwafel:before { +.fa-stroopwafel::before { content: "\f551"; } -.fa-studiovinari:before { - content: "\f3f8"; } - -.fa-stumbleupon:before { - content: "\f1a4"; } - -.fa-stumbleupon-circle:before { - content: "\f1a3"; } - -.fa-subscript:before { +.fa-subscript::before { content: "\f12c"; } -.fa-subway:before { - content: "\f239"; } - -.fa-suitcase:before { +.fa-suitcase::before { content: "\f0f2"; } -.fa-suitcase-rolling:before { +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-suitcase-rolling::before { content: "\f5c1"; } -.fa-sun:before { +.fa-sun::before { content: "\f185"; } -.fa-superpowers:before { - content: "\f2dd"; } - -.fa-superscript:before { +.fa-superscript::before { content: "\f12b"; } -.fa-supple:before { - content: "\f3f9"; } +.fa-swatchbook::before { + content: "\f5c3"; } -.fa-surprise:before { - content: "\f5c2"; } +.fa-synagogue::before { + content: "\f69b"; } -.fa-suse:before { - content: "\f7d6"; } +.fa-syringe::before { + content: "\f48e"; } -.fa-swatchbook:before { - content: "\f5c3"; } +.fa-t::before { + content: "\54"; } -.fa-swift:before { - content: "\f8e1"; } +.fa-table::before { + content: "\f0ce"; } -.fa-swimmer:before { - content: "\f5c4"; } +.fa-table-cells::before { + content: "\f00a"; } -.fa-swimming-pool:before { - content: "\f5c5"; } +.fa-th::before { + content: "\f00a"; } -.fa-symfony:before { - content: "\f83d"; } +.fa-table-cells-large::before { + content: "\f009"; } -.fa-synagogue:before { - content: "\f69b"; } +.fa-th-large::before { + content: "\f009"; } -.fa-sync:before { - content: "\f021"; } +.fa-table-columns::before { + content: "\f0db"; } -.fa-sync-alt:before { - content: "\f2f1"; } +.fa-columns::before { + content: "\f0db"; } -.fa-syringe:before { - content: "\f48e"; } +.fa-table-list::before { + content: "\f00b"; } -.fa-table:before { - content: "\f0ce"; } +.fa-th-list::before { + content: "\f00b"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } -.fa-table-tennis:before { +.fa-table-tennis::before { content: "\f45d"; } -.fa-tablet:before { +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-tablet-button::before { content: "\f10a"; } -.fa-tablet-alt:before { +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { content: "\f3fa"; } -.fa-tablets:before { +.fa-tablets::before { content: "\f490"; } -.fa-tachometer-alt:before { - content: "\f3fd"; } +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } -.fa-tag:before { +.fa-tag::before { content: "\f02b"; } -.fa-tags:before { +.fa-tags::before { content: "\f02c"; } -.fa-tape:before { +.fa-tape::before { content: "\f4db"; } -.fa-tasks:before { - content: "\f0ae"; } - -.fa-taxi:before { +.fa-taxi::before { content: "\f1ba"; } -.fa-teamspeak:before { - content: "\f4f9"; } +.fa-cab::before { + content: "\f1ba"; } -.fa-teeth:before { +.fa-teeth::before { content: "\f62e"; } -.fa-teeth-open:before { +.fa-teeth-open::before { content: "\f62f"; } -.fa-telegram:before { - content: "\f2c6"; } +.fa-temperature-empty::before { + content: "\f2cb"; } -.fa-telegram-plane:before { - content: "\f3fe"; } +.fa-temperature-0::before { + content: "\f2cb"; } -.fa-temperature-high:before { - content: "\f769"; } +.fa-thermometer-0::before { + content: "\f2cb"; } -.fa-temperature-low:before { - content: "\f76b"; } +.fa-thermometer-empty::before { + content: "\f2cb"; } -.fa-tencent-weibo:before { - content: "\f1d5"; } +.fa-temperature-full::before { + content: "\f2c7"; } -.fa-tenge:before { - content: "\f7d7"; } +.fa-temperature-4::before { + content: "\f2c7"; } -.fa-terminal:before { - content: "\f120"; } +.fa-thermometer-4::before { + content: "\f2c7"; } -.fa-text-height:before { - content: "\f034"; } +.fa-thermometer-full::before { + content: "\f2c7"; } -.fa-text-width:before { - content: "\f035"; } +.fa-temperature-half::before { + content: "\f2c9"; } -.fa-th:before { - content: "\f00a"; } +.fa-temperature-2::before { + content: "\f2c9"; } -.fa-th-large:before { - content: "\f009"; } +.fa-thermometer-2::before { + content: "\f2c9"; } -.fa-th-list:before { - content: "\f00b"; } +.fa-thermometer-half::before { + content: "\f2c9"; } -.fa-the-red-yeti:before { - content: "\f69d"; } +.fa-temperature-high::before { + content: "\f769"; } -.fa-theater-masks:before { - content: "\f630"; } +.fa-temperature-low::before { + content: "\f76b"; } -.fa-themeco:before { - content: "\f5c6"; } +.fa-temperature-quarter::before { + content: "\f2ca"; } -.fa-themeisle:before { - content: "\f2b2"; } +.fa-temperature-1::before { + content: "\f2ca"; } -.fa-thermometer:before { - content: "\f491"; } +.fa-thermometer-1::before { + content: "\f2ca"; } -.fa-thermometer-empty:before { - content: "\f2cb"; } +.fa-thermometer-quarter::before { + content: "\f2ca"; } -.fa-thermometer-full:before { - content: "\f2c7"; } +.fa-temperature-three-quarters::before { + content: "\f2c8"; } -.fa-thermometer-half:before { - content: "\f2c9"; } +.fa-temperature-3::before { + content: "\f2c8"; } -.fa-thermometer-quarter:before { - content: "\f2ca"; } +.fa-thermometer-3::before { + content: "\f2c8"; } -.fa-thermometer-three-quarters:before { +.fa-thermometer-three-quarters::before { content: "\f2c8"; } -.fa-think-peaks:before { - content: "\f731"; } +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } -.fa-thumbs-down:before { +.fa-text-width::before { + content: "\f035"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-thumbs-down::before { content: "\f165"; } -.fa-thumbs-up:before { +.fa-thumbs-up::before { content: "\f164"; } -.fa-thumbtack:before { +.fa-thumbtack::before { content: "\f08d"; } -.fa-ticket-alt:before { - content: "\f3ff"; } - -.fa-tiktok:before { - content: "\e07b"; } - -.fa-times:before { - content: "\f00d"; } +.fa-thumb-tack::before { + content: "\f08d"; } -.fa-times-circle:before { - content: "\f057"; } +.fa-ticket::before { + content: "\f145"; } -.fa-tint:before { - content: "\f043"; } +.fa-ticket-simple::before { + content: "\f3ff"; } -.fa-tint-slash:before { - content: "\f5c7"; } +.fa-ticket-alt::before { + content: "\f3ff"; } -.fa-tired:before { - content: "\f5c8"; } +.fa-timeline::before { + content: "\e29c"; } -.fa-toggle-off:before { +.fa-toggle-off::before { content: "\f204"; } -.fa-toggle-on:before { +.fa-toggle-on::before { content: "\f205"; } -.fa-toilet:before { +.fa-toilet::before { content: "\f7d8"; } -.fa-toilet-paper:before { +.fa-toilet-paper::before { content: "\f71e"; } -.fa-toilet-paper-slash:before { +.fa-toilet-paper-slash::before { content: "\e072"; } -.fa-toolbox:before { +.fa-toolbox::before { content: "\f552"; } -.fa-tools:before { - content: "\f7d9"; } - -.fa-tooth:before { +.fa-tooth::before { content: "\f5c9"; } -.fa-torah:before { - content: "\f6a0"; } - -.fa-torii-gate:before { +.fa-torii-gate::before { content: "\f6a1"; } -.fa-tractor:before { - content: "\f722"; } +.fa-tower-broadcast::before { + content: "\f519"; } -.fa-trade-federation:before { - content: "\f513"; } +.fa-broadcast-tower::before { + content: "\f519"; } -.fa-trademark:before { +.fa-tractor::before { + content: "\f722"; } + +.fa-trademark::before { content: "\f25c"; } -.fa-traffic-light:before { +.fa-traffic-light::before { content: "\f637"; } -.fa-trailer:before { +.fa-trailer::before { content: "\e041"; } -.fa-train:before { +.fa-train::before { content: "\f238"; } -.fa-tram:before { +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-train-tram::before { content: "\f7da"; } -.fa-transgender:before { - content: "\f224"; } +.fa-tram::before { + content: "\f7da"; } -.fa-transgender-alt:before { +.fa-transgender::before { content: "\f225"; } -.fa-trash:before { +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-trash::before { content: "\f1f8"; } -.fa-trash-alt:before { - content: "\f2ed"; } +.fa-trash-arrow-up::before { + content: "\f829"; } -.fa-trash-restore:before { +.fa-trash-restore::before { content: "\f829"; } -.fa-trash-restore-alt:before { +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-trash-can-arrow-up::before { content: "\f82a"; } -.fa-tree:before { +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-tree::before { content: "\f1bb"; } -.fa-trello:before { - content: "\f181"; } +.fa-triangle-exclamation::before { + content: "\f071"; } -.fa-tripadvisor:before { - content: "\f262"; } +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } -.fa-trophy:before { +.fa-trophy::before { content: "\f091"; } -.fa-truck:before { +.fa-truck::before { content: "\f0d1"; } -.fa-truck-loading:before { - content: "\f4de"; } +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } -.fa-truck-monster:before { +.fa-truck-monster::before { content: "\f63b"; } -.fa-truck-moving:before { +.fa-truck-moving::before { content: "\f4df"; } -.fa-truck-pickup:before { +.fa-truck-pickup::before { content: "\f63c"; } -.fa-tshirt:before { - content: "\f553"; } +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } -.fa-tty:before { +.fa-tty::before { content: "\f1e4"; } -.fa-tumblr:before { - content: "\f173"; } +.fa-teletype::before { + content: "\f1e4"; } -.fa-tumblr-square:before { - content: "\f174"; } +.fa-turkish-lira-sign::before { + content: "\e2bb"; } -.fa-tv:before { - content: "\f26c"; } +.fa-try::before { + content: "\e2bb"; } -.fa-twitch:before { - content: "\f1e8"; } +.fa-turkish-lira::before { + content: "\e2bb"; } -.fa-twitter:before { - content: "\f099"; } +.fa-turn-down::before { + content: "\f3be"; } -.fa-twitter-square:before { - content: "\f081"; } +.fa-level-down-alt::before { + content: "\f3be"; } -.fa-typo3:before { - content: "\f42b"; } +.fa-turn-up::before { + content: "\f3bf"; } -.fa-uber:before { - content: "\f402"; } +.fa-level-up-alt::before { + content: "\f3bf"; } -.fa-ubuntu:before { - content: "\f7df"; } +.fa-tv::before { + content: "\f26c"; } -.fa-uikit:before { - content: "\f403"; } +.fa-television::before { + content: "\f26c"; } -.fa-umbraco:before { - content: "\f8e8"; } +.fa-tv-alt::before { + content: "\f26c"; } -.fa-umbrella:before { +.fa-u::before { + content: "\55"; } + +.fa-umbrella::before { content: "\f0e9"; } -.fa-umbrella-beach:before { +.fa-umbrella-beach::before { content: "\f5ca"; } -.fa-uncharted:before { - content: "\e084"; } - -.fa-underline:before { +.fa-underline::before { content: "\f0cd"; } -.fa-undo:before { - content: "\f0e2"; } - -.fa-undo-alt:before { - content: "\f2ea"; } +.fa-universal-access::before { + content: "\f29a"; } -.fa-uniregistry:before { - content: "\f404"; } +.fa-unlock::before { + content: "\f09c"; } -.fa-unity:before { - content: "\e049"; } +.fa-unlock-keyhole::before { + content: "\f13e"; } -.fa-universal-access:before { - content: "\f29a"; } +.fa-unlock-alt::before { + content: "\f13e"; } -.fa-university:before { - content: "\f19c"; } +.fa-up-down::before { + content: "\f338"; } -.fa-unlink:before { - content: "\f127"; } +.fa-arrows-alt-v::before { + content: "\f338"; } -.fa-unlock:before { - content: "\f09c"; } +.fa-up-down-left-right::before { + content: "\f0b2"; } -.fa-unlock-alt:before { - content: "\f13e"; } +.fa-arrows-alt::before { + content: "\f0b2"; } -.fa-unsplash:before { - content: "\e07c"; } +.fa-up-long::before { + content: "\f30c"; } -.fa-untappd:before { - content: "\f405"; } +.fa-long-arrow-alt-up::before { + content: "\f30c"; } -.fa-upload:before { - content: "\f093"; } +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } -.fa-ups:before { - content: "\f7e0"; } +.fa-expand-alt::before { + content: "\f424"; } -.fa-usb:before { - content: "\f287"; } +.fa-up-right-from-square::before { + content: "\f35d"; } -.fa-user:before { - content: "\f007"; } +.fa-external-link-alt::before { + content: "\f35d"; } -.fa-user-alt:before { - content: "\f406"; } +.fa-upload::before { + content: "\f093"; } -.fa-user-alt-slash:before { - content: "\f4fa"; } +.fa-user::before { + content: "\f007"; } -.fa-user-astronaut:before { +.fa-user-astronaut::before { content: "\f4fb"; } -.fa-user-check:before { +.fa-user-check::before { content: "\f4fc"; } -.fa-user-circle:before { - content: "\f2bd"; } - -.fa-user-clock:before { +.fa-user-clock::before { content: "\f4fd"; } -.fa-user-cog:before { +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-user-gear::before { content: "\f4fe"; } -.fa-user-edit:before { - content: "\f4ff"; } +.fa-user-cog::before { + content: "\f4fe"; } -.fa-user-friends:before { +.fa-user-graduate::before { + content: "\f501"; } + +.fa-user-group::before { content: "\f500"; } -.fa-user-graduate:before { - content: "\f501"; } +.fa-user-friends::before { + content: "\f500"; } -.fa-user-injured:before { +.fa-user-injured::before { content: "\f728"; } -.fa-user-lock:before { - content: "\f502"; } +.fa-user-large::before { + content: "\f406"; } -.fa-user-md:before { - content: "\f0f0"; } +.fa-user-alt::before { + content: "\f406"; } -.fa-user-minus:before { +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-user-minus::before { content: "\f503"; } -.fa-user-ninja:before { +.fa-user-ninja::before { content: "\f504"; } -.fa-user-nurse:before { +.fa-user-nurse::before { content: "\f82f"; } -.fa-user-plus:before { +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-user-plus::before { content: "\f234"; } -.fa-user-secret:before { +.fa-user-secret::before { content: "\f21b"; } -.fa-user-shield:before { +.fa-user-shield::before { content: "\f505"; } -.fa-user-slash:before { +.fa-user-slash::before { content: "\f506"; } -.fa-user-tag:before { +.fa-user-tag::before { content: "\f507"; } -.fa-user-tie:before { +.fa-user-tie::before { content: "\f508"; } -.fa-user-times:before { +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { content: "\f235"; } -.fa-users:before { +.fa-users::before { content: "\f0c0"; } -.fa-users-cog:before { +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { content: "\f509"; } -.fa-users-slash:before { +.fa-users-slash::before { content: "\e073"; } -.fa-usps:before { - content: "\f7e1"; } +.fa-utensils::before { + content: "\f2e7"; } -.fa-ussunnah:before { - content: "\f407"; } +.fa-cutlery::before { + content: "\f2e7"; } -.fa-utensil-spoon:before { - content: "\f2e5"; } +.fa-v::before { + content: "\56"; } -.fa-utensils:before { - content: "\f2e7"; } +.fa-van-shuttle::before { + content: "\f5b6"; } -.fa-vaadin:before { - content: "\f408"; } +.fa-shuttle-van::before { + content: "\f5b6"; } -.fa-vector-square:before { +.fa-vault::before { + content: "\e2c5"; } + +.fa-vector-square::before { content: "\f5cb"; } -.fa-venus:before { +.fa-venus::before { content: "\f221"; } -.fa-venus-double:before { +.fa-venus-double::before { content: "\f226"; } -.fa-venus-mars:before { +.fa-venus-mars::before { content: "\f228"; } -.fa-vest:before { +.fa-vest::before { content: "\e085"; } -.fa-vest-patches:before { +.fa-vest-patches::before { content: "\e086"; } -.fa-viacoin:before { - content: "\f237"; } - -.fa-viadeo:before { - content: "\f2a9"; } - -.fa-viadeo-square:before { - content: "\f2aa"; } - -.fa-vial:before { +.fa-vial::before { content: "\f492"; } -.fa-vials:before { +.fa-vials::before { content: "\f493"; } -.fa-viber:before { - content: "\f409"; } +.fa-video::before { + content: "\f03d"; } -.fa-video:before { +.fa-video-camera::before { content: "\f03d"; } -.fa-video-slash:before { +.fa-video-slash::before { content: "\f4e2"; } -.fa-vihara:before { +.fa-vihara::before { content: "\f6a7"; } -.fa-vimeo:before { - content: "\f40a"; } - -.fa-vimeo-square:before { - content: "\f194"; } - -.fa-vimeo-v:before { - content: "\f27d"; } +.fa-virus::before { + content: "\e074"; } -.fa-vine:before { - content: "\f1ca"; } +.fa-virus-covid::before { + content: "\e4a8"; } -.fa-virus:before { - content: "\e074"; } +.fa-virus-covid-slash::before { + content: "\e4a9"; } -.fa-virus-slash:before { +.fa-virus-slash::before { content: "\e075"; } -.fa-viruses:before { +.fa-viruses::before { content: "\e076"; } -.fa-vk:before { - content: "\f189"; } - -.fa-vnv:before { - content: "\f40b"; } - -.fa-voicemail:before { +.fa-voicemail::before { content: "\f897"; } -.fa-volleyball-ball:before { +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { content: "\f45f"; } -.fa-volume-down:before { +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-volume-low::before { content: "\f027"; } -.fa-volume-mute:before { - content: "\f6a9"; } +.fa-volume-down::before { + content: "\f027"; } -.fa-volume-off:before { +.fa-volume-off::before { content: "\f026"; } -.fa-volume-up:before { - content: "\f028"; } +.fa-volume-xmark::before { + content: "\f6a9"; } -.fa-vote-yea:before { - content: "\f772"; } +.fa-volume-mute::before { + content: "\f6a9"; } -.fa-vr-cardboard:before { - content: "\f729"; } +.fa-volume-times::before { + content: "\f6a9"; } -.fa-vuejs:before { - content: "\f41f"; } +.fa-vr-cardboard::before { + content: "\f729"; } -.fa-walking:before { - content: "\f554"; } +.fa-w::before { + content: "\57"; } -.fa-wallet:before { +.fa-wallet::before { content: "\f555"; } -.fa-warehouse:before { - content: "\f494"; } +.fa-wand-magic::before { + content: "\f0d0"; } -.fa-watchman-monitoring:before { - content: "\e087"; } +.fa-magic::before { + content: "\f0d0"; } -.fa-water:before { +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-water::before { content: "\f773"; } -.fa-wave-square:before { +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-wave-square::before { content: "\f83e"; } +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-x::before { + content: "\58"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-y::before { + content: "\59"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-z::before { + content: "\5a"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } +:root, :host { + --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"); } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-node:before { + content: "\f419"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-php:before { + content: "\f457"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-square-font-awesome:before { + content: "\f425"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + .fa-waze:before { content: "\f83f"; } @@ -4425,12 +6840,6 @@ readers do not read off random characters that represent icons */ .fa-weibo:before { content: "\f18a"; } -.fa-weight:before { - content: "\f496"; } - -.fa-weight-hanging:before { - content: "\f5cd"; } - .fa-weixin:before { content: "\f1d7"; } @@ -4440,44 +6849,20 @@ readers do not read off random characters that represent icons */ .fa-whatsapp-square:before { content: "\f40c"; } -.fa-wheelchair:before { - content: "\f193"; } - .fa-whmcs:before { content: "\f40d"; } -.fa-wifi:before { - content: "\f1eb"; } - .fa-wikipedia-w:before { content: "\f266"; } -.fa-wind:before { - content: "\f72e"; } - -.fa-window-close:before { - content: "\f410"; } - -.fa-window-maximize:before { - content: "\f2d0"; } - -.fa-window-minimize:before { - content: "\f2d1"; } - -.fa-window-restore:before { - content: "\f2d2"; } - .fa-windows:before { content: "\f17a"; } -.fa-wine-bottle:before { - content: "\f72f"; } - -.fa-wine-glass:before { - content: "\f4e3"; } +.fa-wirsindhandwerk:before { + content: "\e2d0"; } -.fa-wine-glass-alt:before { - content: "\f5ce"; } +.fa-wsh:before { + content: "\e2d0"; } .fa-wix:before { content: "\f5cf"; } @@ -4491,9 +6876,6 @@ readers do not read off random characters that represent icons */ .fa-wolf-pack-battalion:before { content: "\f514"; } -.fa-won-sign:before { - content: "\f159"; } - .fa-wordpress:before { content: "\f19a"; } @@ -4512,12 +6894,6 @@ readers do not read off random characters that represent icons */ .fa-wpressr:before { content: "\f3e4"; } -.fa-wrench:before { - content: "\f0ad"; } - -.fa-x-ray:before { - content: "\f497"; } - .fa-xbox:before { content: "\f412"; } @@ -4548,12 +6924,6 @@ readers do not read off random characters that represent icons */ .fa-yelp:before { content: "\f1e9"; } -.fa-yen-sign:before { - content: "\f157"; } - -.fa-yin-yang:before { - content: "\f6ad"; } - .fa-yoast:before { content: "\f2b1"; } @@ -4565,52 +6935,63 @@ readers do not read off random characters that represent icons */ .fa-zhihu:before { content: "\f63f"; } +:root, :host { + --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free"; } -.sr-only { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; } - -.sr-only-focusable:active, .sr-only-focusable:focus { - clip: auto; - height: auto; - margin: 0; - overflow: visible; - position: static; - width: auto; } @font-face { - font-family: 'Font Awesome 5 Brands'; + font-family: 'Font Awesome 6 Free'; font-style: normal; font-weight: 400; font-display: block; - src: url("../webfonts/fa-brands-400.woff") format("woff"); } + src: url("../webfonts/fa-regular-400.woff2") format("woff2"); } -.fab { - font-family: 'Font Awesome 5 Brands'; +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; font-weight: 400; } +:root, :host { + --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free"; } + @font-face { - font-family: 'Font Awesome 5 Free'; + font-family: 'Font Awesome 6 Free'; font-style: normal; - font-weight: 400; + font-weight: 900; font-display: block; - src: url("../webfonts/fa-regular-400.woff") format("woff"); } + src: url("../webfonts/fa-solid-900.woff2") format("woff2"); } -.far { - font-family: 'Font Awesome 5 Free'; - font-weight: 400; } +.fas, +.fa-solid { + font-family: 'Font Awesome 6 Free'; + font-weight: 900; } @font-face { - font-family: 'Font Awesome 5 Free'; - font-style: normal; + font-family: "Font Awesome 5 Brands"; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"); } + +@font-face { + font-family: "Font Awesome 5 Free"; + font-display: block; font-weight: 900; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"); } + +@font-face { + font-family: "Font Awesome 5 Free"; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"); } +@font-face { + font-family: "FontAwesome"; font-display: block; - src: url("../webfonts/fa-solid-900.woff") format("woff"); } + src: url("../webfonts/fa-solid-900.woff2") format("woff2"); } -.fa, -.fas { - font-family: 'Font Awesome 5 Free'; - font-weight: 900; } +@font-face { + font-family: "FontAwesome"; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"); } + +@font-face { + font-family: "FontAwesome"; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"); + unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; } diff --git a/static/css/katex.css b/static/css/katex.css index f5d22a5..ab74143 100644 --- a/static/css/katex.css +++ b/static/css/katex.css @@ -1,121 +1,121 @@ /* stylelint-disable font-family-no-missing-generic-family-keyword */ @font-face { font-family: 'KaTeX_AMS'; - src: url(../webfonts/KaTeX_AMS-Regular.woff) format('woff'); + src: url(../webfonts/KaTeX_AMS-Regular.woff2) format('woff2'); font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Caligraphic'; - src: url(../webfonts/KaTeX_Caligraphic-Bold.woff) format('woff'); + src: url(../webfonts/KaTeX_Caligraphic-Bold.woff2) format('woff2'); font-weight: bold; font-style: normal; } @font-face { font-family: 'KaTeX_Caligraphic'; - src: url(../webfonts/KaTeX_Caligraphic-Regular.woff) format('woff'); + src: url(../webfonts/KaTeX_Caligraphic-Regular.woff2) format('woff2'); font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Fraktur'; - src: url(../webfonts/KaTeX_Fraktur-Bold.woff) format('woff'); + src: url(../webfonts/KaTeX_Fraktur-Bold.woff2) format('woff2'); font-weight: bold; font-style: normal; } @font-face { font-family: 'KaTeX_Fraktur'; - src: url(../webfonts/KaTeX_Fraktur-Regular.woff) format('woff'); + src: url(../webfonts/KaTeX_Fraktur-Regular.woff2) format('woff2'); font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Main'; - src: url(../webfonts/KaTeX_Main-Bold.woff) format('woff'); + src: url(../webfonts/KaTeX_Main-Bold.woff2) format('woff2'); font-weight: bold; font-style: normal; } @font-face { font-family: 'KaTeX_Main'; - src: url(../webfonts/KaTeX_Main-BoldItalic.woff) format('woff'); + src: url(../webfonts/KaTeX_Main-BoldItalic.woff2) format('woff2'); font-weight: bold; font-style: italic; } @font-face { font-family: 'KaTeX_Main'; - src: url(../webfonts/KaTeX_Main-Italic.woff) format('woff'); + src: url(../webfonts/KaTeX_Main-Italic.woff2) format('woff2'); font-weight: normal; font-style: italic; } @font-face { font-family: 'KaTeX_Main'; - src: url(../webfonts/KaTeX_Main-Regular.woff) format('woff'); + src: url(../webfonts/KaTeX_Main-Regular.woff2) format('woff2'); font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Math'; - src: url(../webfonts/KaTeX_Math-BoldItalic.woff) format('woff'); + src: url(../webfonts/KaTeX_Math-BoldItalic.woff2) format('woff2'); font-weight: bold; font-style: italic; } @font-face { font-family: 'KaTeX_Math'; - src: url(../webfonts/KaTeX_Math-Italic.woff) format('woff'); + src: url(../webfonts/KaTeX_Math-Italic.woff2) format('woff2'); font-weight: normal; font-style: italic; } @font-face { font-family: 'KaTeX_SansSerif'; - src: url(../webfonts/KaTeX_SansSerif-Bold.woff) format('woff'); + src: url(../webfonts/KaTeX_SansSerif-Bold.woff2) format('woff2'); font-weight: bold; font-style: normal; } @font-face { font-family: 'KaTeX_SansSerif'; - src: url(../webfonts/KaTeX_SansSerif-Italic.woff) format('woff'); + src: url(../webfonts/KaTeX_SansSerif-Italic.woff2) format('woff2'); font-weight: normal; font-style: italic; } @font-face { font-family: 'KaTeX_SansSerif'; - src: url(../webfonts/KaTeX_SansSerif-Regular.woff) format('woff'); + src: url(../webfonts/KaTeX_SansSerif-Regular.woff2) format('woff2'); font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Script'; - src: url(../webfonts/KaTeX_Script-Regular.woff) format('woff'); + src: url(../webfonts/KaTeX_Script-Regular.woff2) format('woff2'); font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Size1'; - src: url(../webfonts/KaTeX_Size1-Regular.woff) format('woff'); + src: url(../webfonts/KaTeX_Size1-Regular.woff2) format('woff2'); font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Size2'; - src: url(../webfonts/KaTeX_Size2-Regular.woff) format('woff'); + src: url(../webfonts/KaTeX_Size2-Regular.woff2) format('woff2'); font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Size3'; - src: url(../webfonts/KaTeX_Size3-Regular.woff) format('woff'); + src: url(../webfonts/KaTeX_Size3-Regular.woff2) format('woff2'); font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Size4'; - src: url(../webfonts/KaTeX_Size4-Regular.woff) format('woff'); + src: url(../webfonts/KaTeX_Size4-Regular.woff2) format('woff2'); font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Typewriter'; - src: url(../webfonts/KaTeX_Typewriter-Regular.woff) format('woff'); + src: url(../webfonts/KaTeX_Typewriter-Regular.woff2) format('woff2'); font-weight: normal; font-style: normal; } @@ -130,7 +130,7 @@ border-color: currentColor; } .katex .katex-version::after { - content: "0.13.2"; + content: "0.15.2"; } .katex .katex-mathml { /* Accessibility hack to only show to screen readers @@ -270,28 +270,18 @@ min-width: 2px; } .katex .vbox { - display: -webkit-inline-box; display: inline-flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - flex-direction: column; - -webkit-box-align: baseline; - align-items: baseline; + flex-direction: column; + align-items: baseline; } .katex .hbox { - display: -webkit-inline-box; display: inline-flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row; + flex-direction: row; width: 100%; } .katex .thinbox { - display: -webkit-inline-box; display: inline-flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - flex-direction: row; + flex-direction: row; width: 0; max-width: 0; } @@ -1003,7 +993,7 @@ text-align: center; } .katex .boxpad { - padding: 0 0.3em 0 0.3em; + padding: 0 0.3em; } .katex .fbox, .katex .fcolorbox { @@ -1011,7 +1001,7 @@ border: 0.04em solid; } .katex .cancel-pad { - padding: 0 0.2em 0 0.2em; + padding: 0 0.2em; } .katex .cancel-lap { margin-left: -0.2em; @@ -1022,13 +1012,13 @@ border-bottom-width: 0.08em; } .katex .angl { - box-sizing: border-content; + box-sizing: border-box; border-top: 0.049em solid; border-right: 0.049em solid; margin-right: 0.03889em; } .katex .anglpad { - padding: 0 0.03889em 0 0.03889em; + padding: 0 0.03889em; } .katex .eqn-num::before { counter-increment: katexEqnNo; @@ -1048,14 +1038,12 @@ .katex .cd-label-left { display: inline-block; position: absolute; - right: -webkit-calc(50% + 0.3em); right: calc(50% + 0.3em); text-align: left; } .katex .cd-label-right { display: inline-block; position: absolute; - left: -webkit-calc(50% + 0.3em); left: calc(50% + 0.3em); text-align: right; } diff --git a/static/js/auto-render.js b/static/js/auto-render.js index 052e0eb..6980cdd 100644 --- a/static/js/auto-render.js +++ b/static/js/auto-render.js @@ -7,15 +7,15 @@ exports["renderMathInElement"] = factory(require("katex")); else root["renderMathInElement"] = factory(root["katex"]); -})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__974__) { +})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__771__) { return /******/ (function() { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ -/***/ 974: +/***/ 771: /***/ (function(module) { -module.exports = __WEBPACK_EXTERNAL_MODULE__974__; +module.exports = __WEBPACK_EXTERNAL_MODULE__771__; /***/ }) @@ -86,7 +86,7 @@ __webpack_require__.d(__webpack_exports__, { }); // EXTERNAL MODULE: external "katex" -var external_katex_ = __webpack_require__(974); +var external_katex_ = __webpack_require__(771); var external_katex_default = /*#__PURE__*/__webpack_require__.n(external_katex_); ;// CONCATENATED MODULE: ./contrib/auto-render/splitAtDelimiters.js /* eslint no-constant-condition:0 */ @@ -320,7 +320,7 @@ var renderMathInElement = function renderMathInElement(elem, options) { /* harmony default export */ var auto_render = (renderMathInElement); }(); -__webpack_exports__ = __webpack_exports__.default; +__webpack_exports__ = __webpack_exports__["default"]; /******/ return __webpack_exports__; /******/ })() ; diff --git a/static/js/katex.js b/static/js/katex.js index 5835574..ab4956b 100644 --- a/static/js/katex.js +++ b/static/js/katex.js @@ -52,7 +52,8 @@ __webpack_require__.d(__webpack_exports__, { */ var ParseError = // Error position based on passed-in Token or ParseNode. function ParseError(message, // The error message -token) { +token // An object providing position information +) { this.position = void 0; var error = "KaTeX parse error: " + message; var start; @@ -228,7 +229,136 @@ var protocolFromUrl = function protocolFromUrl(url) { +// TODO: automatically generate documentation +// TODO: check all properties on Settings exist +// TODO: check the type of a property on Settings matches +var SETTINGS_SCHEMA = { + displayMode: { + type: "boolean", + description: "Render math in display mode, which puts the math in " + "display style (so \\int and \\sum are large, for example), and " + "centers the math on the page on its own line.", + cli: "-d, --display-mode" + }, + output: { + type: { + enum: ["htmlAndMathml", "html", "mathml"] + }, + description: "Determines the markup language of the output.", + cli: "-F, --format <type>" + }, + leqno: { + type: "boolean", + description: "Render display math in leqno style (left-justified tags)." + }, + fleqn: { + type: "boolean", + description: "Render display math flush left." + }, + throwOnError: { + type: "boolean", + default: true, + cli: "-t, --no-throw-on-error", + cliDescription: "Render errors (in the color given by --error-color) ins" + "tead of throwing a ParseError exception when encountering an error." + }, + errorColor: { + type: "string", + default: "#cc0000", + cli: "-c, --error-color <color>", + cliDescription: "A color string given in the format 'rgb' or 'rrggbb' " + "(no #). This option determines the color of errors rendered by the " + "-t option.", + cliProcessor: function cliProcessor(color) { + return "#" + color; + } + }, + macros: { + type: "object", + cli: "-m, --macro <def>", + cliDescription: "Define custom macro of the form '\\foo:expansion' (use " + "multiple -m arguments for multiple macros).", + cliDefault: [], + cliProcessor: function cliProcessor(def, defs) { + defs.push(def); + return defs; + } + }, + minRuleThickness: { + type: "number", + description: "Specifies a minimum thickness, in ems, for fraction lines," + " `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, " + "`\\hdashline`, `\\underline`, `\\overline`, and the borders of " + "`\\fbox`, `\\boxed`, and `\\fcolorbox`.", + processor: function processor(t) { + return Math.max(0, t); + }, + cli: "--min-rule-thickness <size>", + cliProcessor: parseFloat + }, + colorIsTextColor: { + type: "boolean", + description: "Makes \\color behave like LaTeX's 2-argument \\textcolor, " + "instead of LaTeX's one-argument \\color mode change.", + cli: "-b, --color-is-text-color" + }, + strict: { + type: [{ + enum: ["warn", "ignore", "error"] + }, "boolean", "function"], + description: "Turn on strict / LaTeX faithfulness mode, which throws an " + "error if the input uses features that are not supported by LaTeX.", + cli: "-S, --strict", + cliDefault: false + }, + trust: { + type: ["boolean", "function"], + description: "Trust the input, enabling all HTML features such as \\url.", + cli: "-T, --trust" + }, + maxSize: { + type: "number", + default: Infinity, + description: "If non-zero, all user-specified sizes, e.g. in " + "\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, " + "elements and spaces can be arbitrarily large", + processor: function processor(s) { + return Math.max(0, s); + }, + cli: "-s, --max-size <n>", + cliProcessor: parseInt + }, + maxExpand: { + type: "number", + default: 1000, + description: "Limit the number of macro expansions to the specified " + "number, to prevent e.g. infinite macro loops. If set to Infinity, " + "the macro expander will try to fully expand as in LaTeX.", + processor: function processor(n) { + return Math.max(0, n); + }, + cli: "-e, --max-expand <n>", + cliProcessor: function cliProcessor(n) { + return n === "Infinity" ? Infinity : parseInt(n); + } + }, + globalGroup: { + type: "boolean", + cli: false + } +}; + +function getDefaultValue(schema) { + if (schema.default) { + return schema.default; + } + + var type = schema.type; + var defaultType = Array.isArray(type) ? type[0] : type; + + if (typeof defaultType !== 'string') { + return defaultType.enum[0]; + } + + switch (defaultType) { + case 'boolean': + return false; + + case 'string': + return ''; + + case 'number': + return 0; + case 'object': + return {}; + } +} /** * The main Settings object * @@ -239,6 +369,8 @@ var protocolFromUrl = function protocolFromUrl(url) { * math (true), meaning that the math starts in \displaystyle * and is placed in a block with vertical margin. */ + + var Settings = /*#__PURE__*/function () { function Settings(options) { this.displayMode = void 0; @@ -257,20 +389,16 @@ var Settings = /*#__PURE__*/function () { this.globalGroup = void 0; // allow null options options = options || {}; - this.displayMode = utils.deflt(options.displayMode, false); - this.output = utils.deflt(options.output, "htmlAndMathml"); - this.leqno = utils.deflt(options.leqno, false); - this.fleqn = utils.deflt(options.fleqn, false); - this.throwOnError = utils.deflt(options.throwOnError, true); - this.errorColor = utils.deflt(options.errorColor, "#cc0000"); - this.macros = options.macros || {}; - this.minRuleThickness = Math.max(0, utils.deflt(options.minRuleThickness, 0)); - this.colorIsTextColor = utils.deflt(options.colorIsTextColor, false); - this.strict = utils.deflt(options.strict, "warn"); - this.trust = utils.deflt(options.trust, false); - this.maxSize = Math.max(0, utils.deflt(options.maxSize, Infinity)); - this.maxExpand = Math.max(0, utils.deflt(options.maxExpand, 1000)); - this.globalGroup = utils.deflt(options.globalGroup, false); + + for (var prop in SETTINGS_SCHEMA) { + if (SETTINGS_SCHEMA.hasOwnProperty(prop)) { + // $FlowFixMe + var schema = SETTINGS_SCHEMA[prop]; // TODO: validate options + // $FlowFixMe + + this[prop] = options[prop] !== undefined ? schema.processor ? schema.processor(options[prop]) : options[prop] : getDefaultValue(schema); + } + } } /** * Report nonstrict (non-LaTeX-compatible) input. @@ -878,559 +1006,6 @@ var DocumentFragment = /*#__PURE__*/function () { return DocumentFragment; }(); -;// CONCATENATED MODULE: ./src/domTree.js -/** - * These objects store the data about the DOM nodes we create, as well as some - * extra data. They can then be transformed into real DOM nodes with the - * `toNode` function or HTML markup using `toMarkup`. They are useful for both - * storing extra properties on the nodes, as well as providing a way to easily - * work with the DOM. - * - * Similar functions for working with MathML nodes exist in mathMLTree.js. - * - * TODO: refactor `span` and `anchor` into common superclass when - * target environments support class inheritance - */ - - - - - -/** - * Create an HTML className based on a list of classes. In addition to joining - * with spaces, we also remove empty classes. - */ -var createClass = function createClass(classes) { - return classes.filter(function (cls) { - return cls; - }).join(" "); -}; - -var initNode = function initNode(classes, options, style) { - this.classes = classes || []; - this.attributes = {}; - this.height = 0; - this.depth = 0; - this.maxFontSize = 0; - this.style = style || {}; - - if (options) { - if (options.style.isTight()) { - this.classes.push("mtight"); - } - - var color = options.getColor(); - - if (color) { - this.style.color = color; - } - } -}; -/** - * Convert into an HTML node - */ - - -var _toNode = function toNode(tagName) { - var node = document.createElement(tagName); // Apply the class - - node.className = createClass(this.classes); // Apply inline styles - - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - // $FlowFixMe Flow doesn't seem to understand span.style's type. - node.style[style] = this.style[style]; - } - } // Apply attributes - - - for (var attr in this.attributes) { - if (this.attributes.hasOwnProperty(attr)) { - node.setAttribute(attr, this.attributes[attr]); - } - } // Append the children, also as HTML nodes - - - for (var i = 0; i < this.children.length; i++) { - node.appendChild(this.children[i].toNode()); - } - - return node; -}; -/** - * Convert into an HTML markup string - */ - - -var _toMarkup = function toMarkup(tagName) { - var markup = "<" + tagName; // Add the class - - if (this.classes.length) { - markup += " class=\"" + utils.escape(createClass(this.classes)) + "\""; - } - - var styles = ""; // Add the styles, after hyphenation - - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; - } - } - - if (styles) { - markup += " style=\"" + utils.escape(styles) + "\""; - } // Add the attributes - - - for (var attr in this.attributes) { - if (this.attributes.hasOwnProperty(attr)) { - markup += " " + attr + "=\"" + utils.escape(this.attributes[attr]) + "\""; - } - } - - markup += ">"; // Add the markup of the children, also as markup - - for (var i = 0; i < this.children.length; i++) { - markup += this.children[i].toMarkup(); - } - - markup += "</" + tagName + ">"; - return markup; -}; // Making the type below exact with all optional fields doesn't work due to -// - https://github.com/facebook/flow/issues/4582 -// - https://github.com/facebook/flow/issues/5688 -// However, since *all* fields are optional, $Shape<> works as suggested in 5688 -// above. -// This type does not include all CSS properties. Additional properties should -// be added as needed. - - -/** - * This node represents a span node, with a className, a list of children, and - * an inline style. It also contains information about its height, depth, and - * maxFontSize. - * - * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan - * otherwise. This typesafety is important when HTML builders access a span's - * children. - */ -var Span = /*#__PURE__*/function () { - function Span(classes, children, options, style) { - this.children = void 0; - this.attributes = void 0; - this.classes = void 0; - this.height = void 0; - this.depth = void 0; - this.width = void 0; - this.maxFontSize = void 0; - this.style = void 0; - initNode.call(this, classes, options, style); - this.children = children || []; - } - /** - * Sets an arbitrary attribute on the span. Warning: use this wisely. Not - * all browsers support attributes the same, and having too many custom - * attributes is probably bad. - */ - - - var _proto = Span.prototype; - - _proto.setAttribute = function setAttribute(attribute, value) { - this.attributes[attribute] = value; - }; - - _proto.hasClass = function hasClass(className) { - return utils.contains(this.classes, className); - }; - - _proto.toNode = function toNode() { - return _toNode.call(this, "span"); - }; - - _proto.toMarkup = function toMarkup() { - return _toMarkup.call(this, "span"); - }; - - return Span; -}(); -/** - * This node represents an anchor (<a>) element with a hyperlink. See `span` - * for further details. - */ - -var Anchor = /*#__PURE__*/function () { - function Anchor(href, classes, children, options) { - this.children = void 0; - this.attributes = void 0; - this.classes = void 0; - this.height = void 0; - this.depth = void 0; - this.maxFontSize = void 0; - this.style = void 0; - initNode.call(this, classes, options); - this.children = children || []; - this.setAttribute('href', href); - } - - var _proto2 = Anchor.prototype; - - _proto2.setAttribute = function setAttribute(attribute, value) { - this.attributes[attribute] = value; - }; - - _proto2.hasClass = function hasClass(className) { - return utils.contains(this.classes, className); - }; - - _proto2.toNode = function toNode() { - return _toNode.call(this, "a"); - }; - - _proto2.toMarkup = function toMarkup() { - return _toMarkup.call(this, "a"); - }; - - return Anchor; -}(); -/** - * This node represents an image embed (<img>) element. - */ - -var Img = /*#__PURE__*/function () { - function Img(src, alt, style) { - this.src = void 0; - this.alt = void 0; - this.classes = void 0; - this.height = void 0; - this.depth = void 0; - this.maxFontSize = void 0; - this.style = void 0; - this.alt = alt; - this.src = src; - this.classes = ["mord"]; - this.style = style; - } - - var _proto3 = Img.prototype; - - _proto3.hasClass = function hasClass(className) { - return utils.contains(this.classes, className); - }; - - _proto3.toNode = function toNode() { - var node = document.createElement("img"); - node.src = this.src; - node.alt = this.alt; - node.className = "mord"; // Apply inline styles - - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - // $FlowFixMe - node.style[style] = this.style[style]; - } - } - - return node; - }; - - _proto3.toMarkup = function toMarkup() { - var markup = "<img src='" + this.src + " 'alt='" + this.alt + "' "; // Add the styles, after hyphenation - - var styles = ""; - - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; - } - } - - if (styles) { - markup += " style=\"" + utils.escape(styles) + "\""; - } - - markup += "'/>"; - return markup; - }; - - return Img; -}(); -var iCombinations = { - 'î': "\u0131\u0302", - 'ï': "\u0131\u0308", - 'í': "\u0131\u0301", - // 'ī': '\u0131\u0304', // enable when we add Extended Latin - 'ì': "\u0131\u0300" -}; -/** - * A symbol node contains information about a single symbol. It either renders - * to a single text node, or a span with a single text node in it, depending on - * whether it has CSS classes, styles, or needs italic correction. - */ - -var SymbolNode = /*#__PURE__*/function () { - function SymbolNode(text, height, depth, italic, skew, width, classes, style) { - this.text = void 0; - this.height = void 0; - this.depth = void 0; - this.italic = void 0; - this.skew = void 0; - this.width = void 0; - this.maxFontSize = void 0; - this.classes = void 0; - this.style = void 0; - this.text = text; - this.height = height || 0; - this.depth = depth || 0; - this.italic = italic || 0; - this.skew = skew || 0; - this.width = width || 0; - this.classes = classes || []; - this.style = style || {}; - this.maxFontSize = 0; // Mark text from non-Latin scripts with specific classes so that we - // can specify which fonts to use. This allows us to render these - // characters with a serif font in situations where the browser would - // either default to a sans serif or render a placeholder character. - // We use CSS class names like cjk_fallback, hangul_fallback and - // brahmic_fallback. See ./unicodeScripts.js for the set of possible - // script names - - var script = scriptFromCodepoint(this.text.charCodeAt(0)); - - if (script) { - this.classes.push(script + "_fallback"); - } - - if (/[îïíì]/.test(this.text)) { - // add ī when we add Extended Latin - this.text = iCombinations[this.text]; - } - } - - var _proto4 = SymbolNode.prototype; - - _proto4.hasClass = function hasClass(className) { - return utils.contains(this.classes, className); - } - /** - * Creates a text node or span from a symbol node. Note that a span is only - * created if it is needed. - */ - ; - - _proto4.toNode = function toNode() { - var node = document.createTextNode(this.text); - var span = null; - - if (this.italic > 0) { - span = document.createElement("span"); - span.style.marginRight = this.italic + "em"; - } - - if (this.classes.length > 0) { - span = span || document.createElement("span"); - span.className = createClass(this.classes); - } - - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type. - - span.style[style] = this.style[style]; - } - } - - if (span) { - span.appendChild(node); - return span; - } else { - return node; - } - } - /** - * Creates markup for a symbol node. - */ - ; - - _proto4.toMarkup = function toMarkup() { - // TODO(alpert): More duplication than I'd like from - // span.prototype.toMarkup and symbolNode.prototype.toNode... - var needsSpan = false; - var markup = "<span"; - - if (this.classes.length) { - needsSpan = true; - markup += " class=\""; - markup += utils.escape(createClass(this.classes)); - markup += "\""; - } - - var styles = ""; - - if (this.italic > 0) { - styles += "margin-right:" + this.italic + "em;"; - } - - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; - } - } - - if (styles) { - needsSpan = true; - markup += " style=\"" + utils.escape(styles) + "\""; - } - - var escaped = utils.escape(this.text); - - if (needsSpan) { - markup += ">"; - markup += escaped; - markup += "</span>"; - return markup; - } else { - return escaped; - } - }; - - return SymbolNode; -}(); -/** - * SVG nodes are used to render stretchy wide elements. - */ - -var SvgNode = /*#__PURE__*/function () { - function SvgNode(children, attributes) { - this.children = void 0; - this.attributes = void 0; - this.children = children || []; - this.attributes = attributes || {}; - } - - var _proto5 = SvgNode.prototype; - - _proto5.toNode = function toNode() { - var svgNS = "http://www.w3.org/2000/svg"; - var node = document.createElementNS(svgNS, "svg"); // Apply attributes - - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - node.setAttribute(attr, this.attributes[attr]); - } - } - - for (var i = 0; i < this.children.length; i++) { - node.appendChild(this.children[i].toNode()); - } - - return node; - }; - - _proto5.toMarkup = function toMarkup() { - var markup = "<svg"; // Apply attributes - - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - markup += " " + attr + "='" + this.attributes[attr] + "'"; - } - } - - markup += ">"; - - for (var i = 0; i < this.children.length; i++) { - markup += this.children[i].toMarkup(); - } - - markup += "</svg>"; - return markup; - }; - - return SvgNode; -}(); -var PathNode = /*#__PURE__*/function () { - function PathNode(pathName, alternate) { - this.pathName = void 0; - this.alternate = void 0; - this.pathName = pathName; - this.alternate = alternate; // Used only for \sqrt, \phase, & tall delims - } - - var _proto6 = PathNode.prototype; - - _proto6.toNode = function toNode() { - var svgNS = "http://www.w3.org/2000/svg"; - var node = document.createElementNS(svgNS, "path"); - - if (this.alternate) { - node.setAttribute("d", this.alternate); - } else { - node.setAttribute("d", path[this.pathName]); - } - - return node; - }; - - _proto6.toMarkup = function toMarkup() { - if (this.alternate) { - return "<path d='" + this.alternate + "'/>"; - } else { - return "<path d='" + path[this.pathName] + "'/>"; - } - }; - - return PathNode; -}(); -var LineNode = /*#__PURE__*/function () { - function LineNode(attributes) { - this.attributes = void 0; - this.attributes = attributes || {}; - } - - var _proto7 = LineNode.prototype; - - _proto7.toNode = function toNode() { - var svgNS = "http://www.w3.org/2000/svg"; - var node = document.createElementNS(svgNS, "line"); // Apply attributes - - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - node.setAttribute(attr, this.attributes[attr]); - } - } - - return node; - }; - - _proto7.toMarkup = function toMarkup() { - var markup = "<line"; - - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - markup += " " + attr + "='" + this.attributes[attr] + "'"; - } - } - - markup += "/>"; - return markup; - }; - - return LineNode; -}(); -function assertSymbolDomNode(group) { - if (group instanceof SymbolNode) { - return group; - } else { - throw new Error("Expected symbolNode but got " + String(group) + "."); - } -} -function assertSpan(group) { - if (group instanceof Span) { - return group; - } else { - throw new Error("Expected span<HtmlDomNode> but got " + String(group) + "."); - } -} ;// CONCATENATED MODULE: ./src/fontMetricsData.js // This file is GENERATED by buildMetrics.sh. DO NOT MODIFY. /* harmony default export */ var fontMetricsData = ({ @@ -2016,6 +1591,7 @@ function assertSpan(group) { "8764": [-0.10889, 0.39111, 0, 0, 0.89444], "8768": [0.19444, 0.69444, 0, 0, 0.31944], "8771": [0.00222, 0.50222, 0, 0, 0.89444], + "8773": [0.027, 0.638, 0, 0, 0.894], "8776": [0.02444, 0.52444, 0, 0, 0.89444], "8781": [0.00222, 0.50222, 0, 0, 0.89444], "8801": [0.00222, 0.50222, 0, 0, 0.89444], @@ -2472,7 +2048,7 @@ function assertSpan(group) { "8221": [0, 0.69444, 0, 0, 0.5], "8224": [0.19444, 0.69444, 0, 0, 0.44445], "8225": [0.19444, 0.69444, 0, 0, 0.44445], - "8230": [0, 0.12, 0, 0, 1.172], + "8230": [0, 0.123, 0, 0, 1.172], "8242": [0, 0.55556, 0, 0, 0.275], "8407": [0, 0.71444, 0.15382, 0, 0.5], "8463": [0, 0.68889, 0, 0, 0.54028], @@ -2533,10 +2109,10 @@ function assertSpan(group) { "8764": [-0.13313, 0.36687, 0, 0, 0.77778], "8768": [0.19444, 0.69444, 0, 0, 0.27778], "8771": [-0.03625, 0.46375, 0, 0, 0.77778], - "8773": [-0.022, 0.589, 0, 0, 1.0], + "8773": [-0.022, 0.589, 0, 0, 0.778], "8776": [-0.01688, 0.48312, 0, 0, 0.77778], "8781": [-0.03625, 0.46375, 0, 0, 0.77778], - "8784": [-0.133, 0.67, 0, 0, 0.778], + "8784": [-0.133, 0.673, 0, 0, 0.778], "8801": [-0.03625, 0.46375, 0, 0, 0.77778], "8804": [0.13597, 0.63597, 0, 0, 0.77778], "8805": [0.13597, 0.63597, 0, 0, 0.77778], @@ -2567,9 +2143,9 @@ function assertSpan(group) { "8901": [-0.05555, 0.44445, 0, 0, 0.27778], "8902": [-0.03472, 0.46528, 0, 0, 0.5], "8904": [0.005, 0.505, 0, 0, 0.9], - "8942": [0.03, 0.9, 0, 0, 0.278], - "8943": [-0.19, 0.31, 0, 0, 1.172], - "8945": [-0.1, 0.82, 0, 0, 1.282], + "8942": [0.03, 0.903, 0, 0, 0.278], + "8943": [-0.19, 0.313, 0, 0, 1.172], + "8945": [-0.1, 0.823, 0, 0, 1.282], "8968": [0.25, 0.75, 0, 0, 0.44445], "8969": [0.25, 0.75, 0, 0, 0.44445], "8970": [0.25, 0.75, 0, 0, 0.44445], @@ -2577,7 +2153,7 @@ function assertSpan(group) { "8994": [-0.14236, 0.35764, 0, 0, 1.0], "8995": [-0.14236, 0.35764, 0, 0, 1.0], "9136": [0.244, 0.744, 0, 0, 0.412], - "9137": [0.244, 0.744, 0, 0, 0.412], + "9137": [0.244, 0.745, 0, 0, 0.412], "9651": [0.19444, 0.69444, 0, 0, 0.88889], "9657": [-0.03472, 0.46528, 0, 0, 0.5], "9661": [0.19444, 0.69444, 0, 0, 0.88889], @@ -2593,7 +2169,7 @@ function assertSpan(group) { "10216": [0.25, 0.75, 0, 0, 0.38889], "10217": [0.25, 0.75, 0, 0, 0.38889], "10222": [0.244, 0.744, 0, 0, 0.412], - "10223": [0.244, 0.744, 0, 0, 0.412], + "10223": [0.244, 0.745, 0, 0, 0.412], "10229": [0.011, 0.511, 0, 0, 1.609], "10230": [0.011, 0.511, 0, 0, 1.638], "10231": [0.011, 0.511, 0, 0, 1.859], @@ -3637,11 +3213,9 @@ var sigmasAndXis = { var extraCharacterMap = { // Latin-1 'Å': 'A', - 'Ç': 'C', 'Ð': 'D', 'Þ': 'o', 'å': 'a', - 'ç': 'c', 'ð': 'd', 'þ': 'o', // Cyrillic @@ -3793,6 +3367,996 @@ function getGlobalMetrics(size) { return fontMetricsBySizeIndex[sizeIndex]; } +;// CONCATENATED MODULE: ./src/Options.js +/** + * This file contains information about the options that the Parser carries + * around with it while parsing. Data is held in an `Options` object, and when + * recursing, a new `Options` object can be created with the `.with*` and + * `.reset` functions. + */ + +var sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize]. +// The size mappings are taken from TeX with \normalsize=10pt. +[1, 1, 1], // size1: [5, 5, 5] \tiny +[2, 1, 1], // size2: [6, 5, 5] +[3, 1, 1], // size3: [7, 5, 5] \scriptsize +[4, 2, 1], // size4: [8, 6, 5] \footnotesize +[5, 2, 1], // size5: [9, 6, 5] \small +[6, 3, 1], // size6: [10, 7, 5] \normalsize +[7, 4, 2], // size7: [12, 8, 6] \large +[8, 6, 3], // size8: [14.4, 10, 7] \Large +[9, 7, 6], // size9: [17.28, 12, 10] \LARGE +[10, 8, 7], // size10: [20.74, 14.4, 12] \huge +[11, 10, 9] // size11: [24.88, 20.74, 17.28] \HUGE +]; +var sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if +// you change size indexes, change that function. +0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488]; + +var sizeAtStyle = function sizeAtStyle(size, style) { + return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1]; +}; // In these types, "" (empty string) means "no change". + + +/** + * This is the main options class. It contains the current style, size, color, + * and font. + * + * Options objects should not be modified. To create a new Options with + * different properties, call a `.having*` method. + */ +var Options = /*#__PURE__*/function () { + // A font family applies to a group of fonts (i.e. SansSerif), while a font + // represents a specific font (i.e. SansSerif Bold). + // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm + + /** + * The base size index. + */ + function Options(data) { + this.style = void 0; + this.color = void 0; + this.size = void 0; + this.textSize = void 0; + this.phantom = void 0; + this.font = void 0; + this.fontFamily = void 0; + this.fontWeight = void 0; + this.fontShape = void 0; + this.sizeMultiplier = void 0; + this.maxSize = void 0; + this.minRuleThickness = void 0; + this._fontMetrics = void 0; + this.style = data.style; + this.color = data.color; + this.size = data.size || Options.BASESIZE; + this.textSize = data.textSize || this.size; + this.phantom = !!data.phantom; + this.font = data.font || ""; + this.fontFamily = data.fontFamily || ""; + this.fontWeight = data.fontWeight || ''; + this.fontShape = data.fontShape || ''; + this.sizeMultiplier = sizeMultipliers[this.size - 1]; + this.maxSize = data.maxSize; + this.minRuleThickness = data.minRuleThickness; + this._fontMetrics = undefined; + } + /** + * Returns a new options object with the same properties as "this". Properties + * from "extension" will be copied to the new options object. + */ + + + var _proto = Options.prototype; + + _proto.extend = function extend(extension) { + var data = { + style: this.style, + size: this.size, + textSize: this.textSize, + color: this.color, + phantom: this.phantom, + font: this.font, + fontFamily: this.fontFamily, + fontWeight: this.fontWeight, + fontShape: this.fontShape, + maxSize: this.maxSize, + minRuleThickness: this.minRuleThickness + }; + + for (var key in extension) { + if (extension.hasOwnProperty(key)) { + data[key] = extension[key]; + } + } + + return new Options(data); + } + /** + * Return an options object with the given style. If `this.style === style`, + * returns `this`. + */ + ; + + _proto.havingStyle = function havingStyle(style) { + if (this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: sizeAtStyle(this.textSize, style) + }); + } + } + /** + * Return an options object with a cramped version of the current style. If + * the current style is cramped, returns `this`. + */ + ; + + _proto.havingCrampedStyle = function havingCrampedStyle() { + return this.havingStyle(this.style.cramp()); + } + /** + * Return an options object with the given size and in at least `\textstyle`. + * Returns `this` if appropriate. + */ + ; + + _proto.havingSize = function havingSize(size) { + if (this.size === size && this.textSize === size) { + return this; + } else { + return this.extend({ + style: this.style.text(), + size: size, + textSize: size, + sizeMultiplier: sizeMultipliers[size - 1] + }); + } + } + /** + * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, + * changes to at least `\textstyle`. + */ + ; + + _proto.havingBaseStyle = function havingBaseStyle(style) { + style = style || this.style.text(); + var wantSize = sizeAtStyle(Options.BASESIZE, style); + + if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: wantSize + }); + } + } + /** + * Remove the effect of sizing changes such as \Huge. + * Keep the effect of the current style, such as \scriptstyle. + */ + ; + + _proto.havingBaseSizing = function havingBaseSizing() { + var size; + + switch (this.style.id) { + case 4: + case 5: + size = 3; // normalsize in scriptstyle + + break; + + case 6: + case 7: + size = 1; // normalsize in scriptscriptstyle + + break; + + default: + size = 6; + // normalsize in textstyle or displaystyle + } + + return this.extend({ + style: this.style.text(), + size: size + }); + } + /** + * Create a new options object with the given color. + */ + ; + + _proto.withColor = function withColor(color) { + return this.extend({ + color: color + }); + } + /** + * Create a new options object with "phantom" set to true. + */ + ; + + _proto.withPhantom = function withPhantom() { + return this.extend({ + phantom: true + }); + } + /** + * Creates a new options object with the given math font or old text font. + * @type {[type]} + */ + ; + + _proto.withFont = function withFont(font) { + return this.extend({ + font: font + }); + } + /** + * Create a new options objects with the given fontFamily. + */ + ; + + _proto.withTextFontFamily = function withTextFontFamily(fontFamily) { + return this.extend({ + fontFamily: fontFamily, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + ; + + _proto.withTextFontWeight = function withTextFontWeight(fontWeight) { + return this.extend({ + fontWeight: fontWeight, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + ; + + _proto.withTextFontShape = function withTextFontShape(fontShape) { + return this.extend({ + fontShape: fontShape, + font: "" + }); + } + /** + * Return the CSS sizing classes required to switch from enclosing options + * `oldOptions` to `this`. Returns an array of classes. + */ + ; + + _proto.sizingClasses = function sizingClasses(oldOptions) { + if (oldOptions.size !== this.size) { + return ["sizing", "reset-size" + oldOptions.size, "size" + this.size]; + } else { + return []; + } + } + /** + * Return the CSS sizing classes required to switch to the base size. Like + * `this.havingSize(BASESIZE).sizingClasses(this)`. + */ + ; + + _proto.baseSizingClasses = function baseSizingClasses() { + if (this.size !== Options.BASESIZE) { + return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE]; + } else { + return []; + } + } + /** + * Return the font metrics for this size. + */ + ; + + _proto.fontMetrics = function fontMetrics() { + if (!this._fontMetrics) { + this._fontMetrics = getGlobalMetrics(this.size); + } + + return this._fontMetrics; + } + /** + * Gets the CSS color of the current options object + */ + ; + + _proto.getColor = function getColor() { + if (this.phantom) { + return "transparent"; + } else { + return this.color; + } + }; + + return Options; +}(); + +Options.BASESIZE = 6; +/* harmony default export */ var src_Options = (Options); +;// CONCATENATED MODULE: ./src/units.js +/** + * This file does conversion between units. In particular, it provides + * calculateSize to convert other units into ems. + */ + + // This table gives the number of TeX pts in one of each *absolute* TeX unit. +// Thus, multiplying a length by this number converts the length from units +// into pts. Dividing the result by ptPerEm gives the number of ems +// *assuming* a font size of ptPerEm (normal size, normal style). + +var ptPerUnit = { + // https://en.wikibooks.org/wiki/LaTeX/Lengths and + // https://tex.stackexchange.com/a/8263 + "pt": 1, + // TeX point + "mm": 7227 / 2540, + // millimeter + "cm": 7227 / 254, + // centimeter + "in": 72.27, + // inch + "bp": 803 / 800, + // big (PostScript) points + "pc": 12, + // pica + "dd": 1238 / 1157, + // didot + "cc": 14856 / 1157, + // cicero (12 didot) + "nd": 685 / 642, + // new didot + "nc": 1370 / 107, + // new cicero (12 new didot) + "sp": 1 / 65536, + // scaled point (TeX's internal smallest unit) + // https://tex.stackexchange.com/a/41371 + "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX + +}; // Dictionary of relative units, for fast validity testing. + +var relativeUnit = { + "ex": true, + "em": true, + "mu": true +}; + +/** + * Determine whether the specified unit (either a string defining the unit + * or a "size" parse node containing a unit field) is valid. + */ +var validUnit = function validUnit(unit) { + if (typeof unit !== "string") { + unit = unit.unit; + } + + return unit in ptPerUnit || unit in relativeUnit || unit === "ex"; +}; +/* + * Convert a "size" parse node (with numeric "number" and string "unit" fields, + * as parsed by functions.js argType "size") into a CSS em value for the + * current style/scale. `options` gives the current options. + */ + +var calculateSize = function calculateSize(sizeValue, options) { + var scale; + + if (sizeValue.unit in ptPerUnit) { + // Absolute units + scale = ptPerUnit[sizeValue.unit] // Convert unit to pt + / options.fontMetrics().ptPerEm // Convert pt to CSS em + / options.sizeMultiplier; // Unscale to make absolute units + } else if (sizeValue.unit === "mu") { + // `mu` units scale with scriptstyle/scriptscriptstyle. + scale = options.fontMetrics().cssEmPerMu; + } else { + // Other relative units always refer to the *textstyle* font + // in the current size. + var unitOptions; + + if (options.style.isTight()) { + // isTight() means current style is script/scriptscript. + unitOptions = options.havingStyle(options.style.text()); + } else { + unitOptions = options; + } // TODO: In TeX these units are relative to the quad of the current + // *text* font, e.g. cmr10. KaTeX instead uses values from the + // comparably-sized *Computer Modern symbol* font. At 10pt, these + // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641; + // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$. + // TeX \showlists shows a kern of 1.13889 * fontsize; + // KaTeX shows a kern of 1.171 * fontsize. + + + if (sizeValue.unit === "ex") { + scale = unitOptions.fontMetrics().xHeight; + } else if (sizeValue.unit === "em") { + scale = unitOptions.fontMetrics().quad; + } else { + throw new src_ParseError("Invalid unit: '" + sizeValue.unit + "'"); + } + + if (unitOptions !== options) { + scale *= unitOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + return Math.min(sizeValue.number * scale, options.maxSize); +}; +/** + * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See + * https://github.com/KaTeX/KaTeX/pull/2460. + */ + +var makeEm = function makeEm(n) { + return +n.toFixed(4) + "em"; +}; +;// CONCATENATED MODULE: ./src/domTree.js +/** + * These objects store the data about the DOM nodes we create, as well as some + * extra data. They can then be transformed into real DOM nodes with the + * `toNode` function or HTML markup using `toMarkup`. They are useful for both + * storing extra properties on the nodes, as well as providing a way to easily + * work with the DOM. + * + * Similar functions for working with MathML nodes exist in mathMLTree.js. + * + * TODO: refactor `span` and `anchor` into common superclass when + * target environments support class inheritance + */ + + + + + + +/** + * Create an HTML className based on a list of classes. In addition to joining + * with spaces, we also remove empty classes. + */ +var createClass = function createClass(classes) { + return classes.filter(function (cls) { + return cls; + }).join(" "); +}; + +var initNode = function initNode(classes, options, style) { + this.classes = classes || []; + this.attributes = {}; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = style || {}; + + if (options) { + if (options.style.isTight()) { + this.classes.push("mtight"); + } + + var color = options.getColor(); + + if (color) { + this.style.color = color; + } + } +}; +/** + * Convert into an HTML node + */ + + +var _toNode = function toNode(tagName) { + var node = document.createElement(tagName); // Apply the class + + node.className = createClass(this.classes); // Apply inline styles + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe Flow doesn't seem to understand span.style's type. + node.style[style] = this.style[style]; + } + } // Apply attributes + + + for (var attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } // Append the children, also as HTML nodes + + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; +}; +/** + * Convert into an HTML markup string + */ + + +var _toMarkup = function toMarkup(tagName) { + var markup = "<" + tagName; // Add the class + + if (this.classes.length) { + markup += " class=\"" + utils.escape(createClass(this.classes)) + "\""; + } + + var styles = ""; // Add the styles, after hyphenation + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + markup += " style=\"" + utils.escape(styles) + "\""; + } // Add the attributes + + + for (var attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + markup += " " + attr + "=\"" + utils.escape(this.attributes[attr]) + "\""; + } + } + + markup += ">"; // Add the markup of the children, also as markup + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += "</" + tagName + ">"; + return markup; +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. +// This type does not include all CSS properties. Additional properties should +// be added as needed. + + +/** + * This node represents a span node, with a className, a list of children, and + * an inline style. It also contains information about its height, depth, and + * maxFontSize. + * + * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan + * otherwise. This typesafety is important when HTML builders access a span's + * children. + */ +var Span = /*#__PURE__*/function () { + function Span(classes, children, options, style) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.width = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options, style); + this.children = children || []; + } + /** + * Sets an arbitrary attribute on the span. Warning: use this wisely. Not + * all browsers support attributes the same, and having too many custom + * attributes is probably bad. + */ + + + var _proto = Span.prototype; + + _proto.setAttribute = function setAttribute(attribute, value) { + this.attributes[attribute] = value; + }; + + _proto.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + }; + + _proto.toNode = function toNode() { + return _toNode.call(this, "span"); + }; + + _proto.toMarkup = function toMarkup() { + return _toMarkup.call(this, "span"); + }; + + return Span; +}(); +/** + * This node represents an anchor (<a>) element with a hyperlink. See `span` + * for further details. + */ + +var Anchor = /*#__PURE__*/function () { + function Anchor(href, classes, children, options) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options); + this.children = children || []; + this.setAttribute('href', href); + } + + var _proto2 = Anchor.prototype; + + _proto2.setAttribute = function setAttribute(attribute, value) { + this.attributes[attribute] = value; + }; + + _proto2.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + }; + + _proto2.toNode = function toNode() { + return _toNode.call(this, "a"); + }; + + _proto2.toMarkup = function toMarkup() { + return _toMarkup.call(this, "a"); + }; + + return Anchor; +}(); +/** + * This node represents an image embed (<img>) element. + */ + +var Img = /*#__PURE__*/function () { + function Img(src, alt, style) { + this.src = void 0; + this.alt = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.alt = alt; + this.src = src; + this.classes = ["mord"]; + this.style = style; + } + + var _proto3 = Img.prototype; + + _proto3.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + }; + + _proto3.toNode = function toNode() { + var node = document.createElement("img"); + node.src = this.src; + node.alt = this.alt; + node.className = "mord"; // Apply inline styles + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe + node.style[style] = this.style[style]; + } + } + + return node; + }; + + _proto3.toMarkup = function toMarkup() { + var markup = "<img src='" + this.src + " 'alt='" + this.alt + "' "; // Add the styles, after hyphenation + + var styles = ""; + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + markup += " style=\"" + utils.escape(styles) + "\""; + } + + markup += "'/>"; + return markup; + }; + + return Img; +}(); +var iCombinations = { + 'î': "\u0131\u0302", + 'ï': "\u0131\u0308", + 'í': "\u0131\u0301", + // 'ī': '\u0131\u0304', // enable when we add Extended Latin + 'ì': "\u0131\u0300" +}; +/** + * A symbol node contains information about a single symbol. It either renders + * to a single text node, or a span with a single text node in it, depending on + * whether it has CSS classes, styles, or needs italic correction. + */ + +var SymbolNode = /*#__PURE__*/function () { + function SymbolNode(text, height, depth, italic, skew, width, classes, style) { + this.text = void 0; + this.height = void 0; + this.depth = void 0; + this.italic = void 0; + this.skew = void 0; + this.width = void 0; + this.maxFontSize = void 0; + this.classes = void 0; + this.style = void 0; + this.text = text; + this.height = height || 0; + this.depth = depth || 0; + this.italic = italic || 0; + this.skew = skew || 0; + this.width = width || 0; + this.classes = classes || []; + this.style = style || {}; + this.maxFontSize = 0; // Mark text from non-Latin scripts with specific classes so that we + // can specify which fonts to use. This allows us to render these + // characters with a serif font in situations where the browser would + // either default to a sans serif or render a placeholder character. + // We use CSS class names like cjk_fallback, hangul_fallback and + // brahmic_fallback. See ./unicodeScripts.js for the set of possible + // script names + + var script = scriptFromCodepoint(this.text.charCodeAt(0)); + + if (script) { + this.classes.push(script + "_fallback"); + } + + if (/[îïíì]/.test(this.text)) { + // add ī when we add Extended Latin + this.text = iCombinations[this.text]; + } + } + + var _proto4 = SymbolNode.prototype; + + _proto4.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + } + /** + * Creates a text node or span from a symbol node. Note that a span is only + * created if it is needed. + */ + ; + + _proto4.toNode = function toNode() { + var node = document.createTextNode(this.text); + var span = null; + + if (this.italic > 0) { + span = document.createElement("span"); + span.style.marginRight = makeEm(this.italic); + } + + if (this.classes.length > 0) { + span = span || document.createElement("span"); + span.className = createClass(this.classes); + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type. + + span.style[style] = this.style[style]; + } + } + + if (span) { + span.appendChild(node); + return span; + } else { + return node; + } + } + /** + * Creates markup for a symbol node. + */ + ; + + _proto4.toMarkup = function toMarkup() { + // TODO(alpert): More duplication than I'd like from + // span.prototype.toMarkup and symbolNode.prototype.toNode... + var needsSpan = false; + var markup = "<span"; + + if (this.classes.length) { + needsSpan = true; + markup += " class=\""; + markup += utils.escape(createClass(this.classes)); + markup += "\""; + } + + var styles = ""; + + if (this.italic > 0) { + styles += "margin-right:" + this.italic + "em;"; + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + needsSpan = true; + markup += " style=\"" + utils.escape(styles) + "\""; + } + + var escaped = utils.escape(this.text); + + if (needsSpan) { + markup += ">"; + markup += escaped; + markup += "</span>"; + return markup; + } else { + return escaped; + } + }; + + return SymbolNode; +}(); +/** + * SVG nodes are used to render stretchy wide elements. + */ + +var SvgNode = /*#__PURE__*/function () { + function SvgNode(children, attributes) { + this.children = void 0; + this.attributes = void 0; + this.children = children || []; + this.attributes = attributes || {}; + } + + var _proto5 = SvgNode.prototype; + + _proto5.toNode = function toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "svg"); // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + }; + + _proto5.toMarkup = function toMarkup() { + var markup = "<svg xmlns=\"http://www.w3.org/2000/svg\""; // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + markup += " " + attr + "='" + this.attributes[attr] + "'"; + } + } + + markup += ">"; + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += "</svg>"; + return markup; + }; + + return SvgNode; +}(); +var PathNode = /*#__PURE__*/function () { + function PathNode(pathName, alternate) { + this.pathName = void 0; + this.alternate = void 0; + this.pathName = pathName; + this.alternate = alternate; // Used only for \sqrt, \phase, & tall delims + } + + var _proto6 = PathNode.prototype; + + _proto6.toNode = function toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "path"); + + if (this.alternate) { + node.setAttribute("d", this.alternate); + } else { + node.setAttribute("d", path[this.pathName]); + } + + return node; + }; + + _proto6.toMarkup = function toMarkup() { + if (this.alternate) { + return "<path d='" + this.alternate + "'/>"; + } else { + return "<path d='" + path[this.pathName] + "'/>"; + } + }; + + return PathNode; +}(); +var LineNode = /*#__PURE__*/function () { + function LineNode(attributes) { + this.attributes = void 0; + this.attributes = attributes || {}; + } + + var _proto7 = LineNode.prototype; + + _proto7.toNode = function toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "line"); // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + return node; + }; + + _proto7.toMarkup = function toMarkup() { + var markup = "<line"; + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + markup += " " + attr + "='" + this.attributes[attr] + "'"; + } + } + + markup += "/>"; + return markup; + }; + + return LineNode; +}(); +function assertSymbolDomNode(group) { + if (group instanceof SymbolNode) { + return group; + } else { + throw new Error("Expected symbolNode but got " + String(group) + "."); + } +} +function assertSpan(group) { + if (group instanceof Span) { + return group; + } else { + throw new Error("Expected span<HtmlDomNode> but got " + String(group) + "."); + } +} ;// CONCATENATED MODULE: ./src/symbols.js /** * This file holds a list of all no-argument functions and single-character @@ -3918,8 +4482,10 @@ defineSymbol(math, main, textord, "\u211C", "\\Re", true); defineSymbol(math, main, textord, "\u2661", "\\heartsuit", true); defineSymbol(math, main, textord, "\u2111", "\\Im", true); defineSymbol(math, main, textord, "\u2660", "\\spadesuit", true); -defineSymbol(symbols_text, main, textord, "\xA7", "\\S", true); -defineSymbol(symbols_text, main, textord, "\xB6", "\\P", true); // Math and Text +defineSymbol(math, main, textord, "\xA7", "\\S", true); +defineSymbol(symbols_text, main, textord, "\xA7", "\\S"); +defineSymbol(math, main, textord, "\xB6", "\\P", true); +defineSymbol(symbols_text, main, textord, "\xB6", "\\P"); // Math and Text defineSymbol(math, main, textord, "\u2020", "\\dag"); defineSymbol(symbols_text, main, textord, "\u2020", "\\dag"); @@ -4295,9 +4861,9 @@ defineSymbol(math, main, mathord, "\u03D6", "\\varpi", true); defineSymbol(math, main, mathord, "\u03F1", "\\varrho", true); defineSymbol(math, main, mathord, "\u03C2", "\\varsigma", true); defineSymbol(math, main, mathord, "\u03C6", "\\varphi", true); -defineSymbol(math, main, bin, "\u2217", "*"); +defineSymbol(math, main, bin, "\u2217", "*", true); defineSymbol(math, main, bin, "+", "+"); -defineSymbol(math, main, bin, "\u2212", "-"); +defineSymbol(math, main, bin, "\u2212", "-", true); defineSymbol(math, main, bin, "\u22C5", "\\cdot", true); defineSymbol(math, main, bin, "\u2218", "\\circ"); defineSymbol(math, main, bin, "\xF7", "\\div", true); @@ -4345,13 +4911,11 @@ defineSymbol(math, main, rel, "\u2192", "\\to"); defineSymbol(math, ams, rel, "\u2271", "\\ngeq", true); defineSymbol(math, ams, rel, "\u2270", "\\nleq", true); defineSymbol(math, main, spacing, "\xA0", "\\ "); -defineSymbol(math, main, spacing, "\xA0", "~"); defineSymbol(math, main, spacing, "\xA0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{% defineSymbol(math, main, spacing, "\xA0", "\\nobreakspace"); defineSymbol(symbols_text, main, spacing, "\xA0", "\\ "); defineSymbol(symbols_text, main, spacing, "\xA0", " "); -defineSymbol(symbols_text, main, spacing, "\xA0", "~"); defineSymbol(symbols_text, main, spacing, "\xA0", "\\space"); defineSymbol(symbols_text, main, spacing, "\xA0", "\\nobreakspace"); defineSymbol(math, main, spacing, null, "\\nobreak"); @@ -4480,6 +5044,8 @@ defineSymbol(symbols_text, main, accent, "\u02D8", "\\u"); // breve defineSymbol(symbols_text, main, accent, "\u02D9", "\\."); // dot above +defineSymbol(symbols_text, main, accent, "\xB8", "\\c"); // cedilla + defineSymbol(symbols_text, main, accent, "\u02DA", "\\r"); // ring above defineSymbol(symbols_text, main, accent, "\u02C7", "\\v"); // caron @@ -4661,7 +5227,7 @@ for (var _i4 = 0; _i4 < 10; _i4++) { // TODO(edemaine): Fix this. -var extraLatin = "\xC7\xD0\xDE\xE7\xFE"; +var extraLatin = "\xD0\xDE\xFE"; for (var _i5 = 0; _i5 < extraLatin.length; _i5++) { var _ch5 = extraLatin.charAt(_i5); @@ -4753,434 +5319,6 @@ var wideCharacterFont = function wideCharacterFont(wideChar, mode) { throw new src_ParseError("Unsupported character: " + wideChar); } }; -;// CONCATENATED MODULE: ./src/Options.js -/** - * This file contains information about the options that the Parser carries - * around with it while parsing. Data is held in an `Options` object, and when - * recursing, a new `Options` object can be created with the `.with*` and - * `.reset` functions. - */ - -var sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize]. -// The size mappings are taken from TeX with \normalsize=10pt. -[1, 1, 1], // size1: [5, 5, 5] \tiny -[2, 1, 1], // size2: [6, 5, 5] -[3, 1, 1], // size3: [7, 5, 5] \scriptsize -[4, 2, 1], // size4: [8, 6, 5] \footnotesize -[5, 2, 1], // size5: [9, 6, 5] \small -[6, 3, 1], // size6: [10, 7, 5] \normalsize -[7, 4, 2], // size7: [12, 8, 6] \large -[8, 6, 3], // size8: [14.4, 10, 7] \Large -[9, 7, 6], // size9: [17.28, 12, 10] \LARGE -[10, 8, 7], // size10: [20.74, 14.4, 12] \huge -[11, 10, 9] // size11: [24.88, 20.74, 17.28] \HUGE -]; -var sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if -// you change size indexes, change that function. -0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488]; - -var sizeAtStyle = function sizeAtStyle(size, style) { - return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1]; -}; // In these types, "" (empty string) means "no change". - - -/** - * This is the main options class. It contains the current style, size, color, - * and font. - * - * Options objects should not be modified. To create a new Options with - * different properties, call a `.having*` method. - */ -var Options = /*#__PURE__*/function () { - // A font family applies to a group of fonts (i.e. SansSerif), while a font - // represents a specific font (i.e. SansSerif Bold). - // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm - - /** - * The base size index. - */ - function Options(data) { - this.style = void 0; - this.color = void 0; - this.size = void 0; - this.textSize = void 0; - this.phantom = void 0; - this.font = void 0; - this.fontFamily = void 0; - this.fontWeight = void 0; - this.fontShape = void 0; - this.sizeMultiplier = void 0; - this.maxSize = void 0; - this.minRuleThickness = void 0; - this._fontMetrics = void 0; - this.style = data.style; - this.color = data.color; - this.size = data.size || Options.BASESIZE; - this.textSize = data.textSize || this.size; - this.phantom = !!data.phantom; - this.font = data.font || ""; - this.fontFamily = data.fontFamily || ""; - this.fontWeight = data.fontWeight || ''; - this.fontShape = data.fontShape || ''; - this.sizeMultiplier = sizeMultipliers[this.size - 1]; - this.maxSize = data.maxSize; - this.minRuleThickness = data.minRuleThickness; - this._fontMetrics = undefined; - } - /** - * Returns a new options object with the same properties as "this". Properties - * from "extension" will be copied to the new options object. - */ - - - var _proto = Options.prototype; - - _proto.extend = function extend(extension) { - var data = { - style: this.style, - size: this.size, - textSize: this.textSize, - color: this.color, - phantom: this.phantom, - font: this.font, - fontFamily: this.fontFamily, - fontWeight: this.fontWeight, - fontShape: this.fontShape, - maxSize: this.maxSize, - minRuleThickness: this.minRuleThickness - }; - - for (var key in extension) { - if (extension.hasOwnProperty(key)) { - data[key] = extension[key]; - } - } - - return new Options(data); - } - /** - * Return an options object with the given style. If `this.style === style`, - * returns `this`. - */ - ; - - _proto.havingStyle = function havingStyle(style) { - if (this.style === style) { - return this; - } else { - return this.extend({ - style: style, - size: sizeAtStyle(this.textSize, style) - }); - } - } - /** - * Return an options object with a cramped version of the current style. If - * the current style is cramped, returns `this`. - */ - ; - - _proto.havingCrampedStyle = function havingCrampedStyle() { - return this.havingStyle(this.style.cramp()); - } - /** - * Return an options object with the given size and in at least `\textstyle`. - * Returns `this` if appropriate. - */ - ; - - _proto.havingSize = function havingSize(size) { - if (this.size === size && this.textSize === size) { - return this; - } else { - return this.extend({ - style: this.style.text(), - size: size, - textSize: size, - sizeMultiplier: sizeMultipliers[size - 1] - }); - } - } - /** - * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, - * changes to at least `\textstyle`. - */ - ; - - _proto.havingBaseStyle = function havingBaseStyle(style) { - style = style || this.style.text(); - var wantSize = sizeAtStyle(Options.BASESIZE, style); - - if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) { - return this; - } else { - return this.extend({ - style: style, - size: wantSize - }); - } - } - /** - * Remove the effect of sizing changes such as \Huge. - * Keep the effect of the current style, such as \scriptstyle. - */ - ; - - _proto.havingBaseSizing = function havingBaseSizing() { - var size; - - switch (this.style.id) { - case 4: - case 5: - size = 3; // normalsize in scriptstyle - - break; - - case 6: - case 7: - size = 1; // normalsize in scriptscriptstyle - - break; - - default: - size = 6; - // normalsize in textstyle or displaystyle - } - - return this.extend({ - style: this.style.text(), - size: size - }); - } - /** - * Create a new options object with the given color. - */ - ; - - _proto.withColor = function withColor(color) { - return this.extend({ - color: color - }); - } - /** - * Create a new options object with "phantom" set to true. - */ - ; - - _proto.withPhantom = function withPhantom() { - return this.extend({ - phantom: true - }); - } - /** - * Creates a new options object with the given math font or old text font. - * @type {[type]} - */ - ; - - _proto.withFont = function withFont(font) { - return this.extend({ - font: font - }); - } - /** - * Create a new options objects with the given fontFamily. - */ - ; - - _proto.withTextFontFamily = function withTextFontFamily(fontFamily) { - return this.extend({ - fontFamily: fontFamily, - font: "" - }); - } - /** - * Creates a new options object with the given font weight - */ - ; - - _proto.withTextFontWeight = function withTextFontWeight(fontWeight) { - return this.extend({ - fontWeight: fontWeight, - font: "" - }); - } - /** - * Creates a new options object with the given font weight - */ - ; - - _proto.withTextFontShape = function withTextFontShape(fontShape) { - return this.extend({ - fontShape: fontShape, - font: "" - }); - } - /** - * Return the CSS sizing classes required to switch from enclosing options - * `oldOptions` to `this`. Returns an array of classes. - */ - ; - - _proto.sizingClasses = function sizingClasses(oldOptions) { - if (oldOptions.size !== this.size) { - return ["sizing", "reset-size" + oldOptions.size, "size" + this.size]; - } else { - return []; - } - } - /** - * Return the CSS sizing classes required to switch to the base size. Like - * `this.havingSize(BASESIZE).sizingClasses(this)`. - */ - ; - - _proto.baseSizingClasses = function baseSizingClasses() { - if (this.size !== Options.BASESIZE) { - return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE]; - } else { - return []; - } - } - /** - * Return the font metrics for this size. - */ - ; - - _proto.fontMetrics = function fontMetrics() { - if (!this._fontMetrics) { - this._fontMetrics = getGlobalMetrics(this.size); - } - - return this._fontMetrics; - } - /** - * Gets the CSS color of the current options object - */ - ; - - _proto.getColor = function getColor() { - if (this.phantom) { - return "transparent"; - } else { - return this.color; - } - }; - - return Options; -}(); - -Options.BASESIZE = 6; -/* harmony default export */ var src_Options = (Options); -;// CONCATENATED MODULE: ./src/units.js -/** - * This file does conversion between units. In particular, it provides - * calculateSize to convert other units into ems. - */ - - // This table gives the number of TeX pts in one of each *absolute* TeX unit. -// Thus, multiplying a length by this number converts the length from units -// into pts. Dividing the result by ptPerEm gives the number of ems -// *assuming* a font size of ptPerEm (normal size, normal style). - -var ptPerUnit = { - // https://en.wikibooks.org/wiki/LaTeX/Lengths and - // https://tex.stackexchange.com/a/8263 - "pt": 1, - // TeX point - "mm": 7227 / 2540, - // millimeter - "cm": 7227 / 254, - // centimeter - "in": 72.27, - // inch - "bp": 803 / 800, - // big (PostScript) points - "pc": 12, - // pica - "dd": 1238 / 1157, - // didot - "cc": 14856 / 1157, - // cicero (12 didot) - "nd": 685 / 642, - // new didot - "nc": 1370 / 107, - // new cicero (12 new didot) - "sp": 1 / 65536, - // scaled point (TeX's internal smallest unit) - // https://tex.stackexchange.com/a/41371 - "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX - -}; // Dictionary of relative units, for fast validity testing. - -var relativeUnit = { - "ex": true, - "em": true, - "mu": true -}; - -/** - * Determine whether the specified unit (either a string defining the unit - * or a "size" parse node containing a unit field) is valid. - */ -var validUnit = function validUnit(unit) { - if (typeof unit !== "string") { - unit = unit.unit; - } - - return unit in ptPerUnit || unit in relativeUnit || unit === "ex"; -}; -/* - * Convert a "size" parse node (with numeric "number" and string "unit" fields, - * as parsed by functions.js argType "size") into a CSS em value for the - * current style/scale. `options` gives the current options. - */ - -var calculateSize = function calculateSize(sizeValue, options) { - var scale; - - if (sizeValue.unit in ptPerUnit) { - // Absolute units - scale = ptPerUnit[sizeValue.unit] // Convert unit to pt - / options.fontMetrics().ptPerEm // Convert pt to CSS em - / options.sizeMultiplier; // Unscale to make absolute units - } else if (sizeValue.unit === "mu") { - // `mu` units scale with scriptstyle/scriptscriptstyle. - scale = options.fontMetrics().cssEmPerMu; - } else { - // Other relative units always refer to the *textstyle* font - // in the current size. - var unitOptions; - - if (options.style.isTight()) { - // isTight() means current style is script/scriptscript. - unitOptions = options.havingStyle(options.style.text()); - } else { - unitOptions = options; - } // TODO: In TeX these units are relative to the quad of the current - // *text* font, e.g. cmr10. KaTeX instead uses values from the - // comparably-sized *Computer Modern symbol* font. At 10pt, these - // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641; - // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$. - // TeX \showlists shows a kern of 1.13889 * fontsize; - // KaTeX shows a kern of 1.171 * fontsize. - - - if (sizeValue.unit === "ex") { - scale = unitOptions.fontMetrics().xHeight; - } else if (sizeValue.unit === "em") { - scale = unitOptions.fontMetrics().quad; - } else { - throw new src_ParseError("Invalid unit: '" + sizeValue.unit + "'"); - } - - if (unitOptions !== options) { - scale *= unitOptions.sizeMultiplier / options.sizeMultiplier; - } - } - - return Math.min(sizeValue.number * scale, options.maxSize); -}; ;// CONCATENATED MODULE: ./src/buildCommon.js /* eslint no-console:0 */ @@ -5500,7 +5638,7 @@ var makeSvgSpan = function makeSvgSpan(classes, children, options, style) { var makeLineSpan = function makeLineSpan(className, options, thickness) { var line = makeSpan([className], [], options); line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness); - line.style.borderBottomWidth = line.height + "em"; + line.style.borderBottomWidth = makeEm(line.height); line.maxFontSize = 1.0; return line; }; @@ -5640,7 +5778,7 @@ var makeVList = function makeVList(params, options) { pstrutSize += 2; var pstrut = makeSpan(["pstrut"], []); - pstrut.style.height = pstrutSize + "em"; // Create a new list of actual children at the correct offsets + pstrut.style.height = makeEm(pstrutSize); // Create a new list of actual children at the correct offsets var realChildren = []; var minPos = depth; @@ -5657,7 +5795,7 @@ var makeVList = function makeVList(params, options) { var classes = _child.wrapperClasses || []; var style = _child.wrapperStyle || {}; var childWrap = makeSpan(classes, [pstrut, _elem], undefined, style); - childWrap.style.top = -pstrutSize - currPos - _elem.depth + "em"; + childWrap.style.top = makeEm(-pstrutSize - currPos - _elem.depth); if (_child.marginLeft) { childWrap.style.marginLeft = _child.marginLeft; @@ -5679,7 +5817,7 @@ var makeVList = function makeVList(params, options) { var vlist = makeSpan(["vlist"], realChildren); - vlist.style.height = maxPos + "em"; // A second row is used if necessary to represent the vlist's depth. + vlist.style.height = makeEm(maxPos); // A second row is used if necessary to represent the vlist's depth. var rows; @@ -5691,7 +5829,7 @@ var makeVList = function makeVList(params, options) { // So we put another empty span inside the depth strut span. var emptySpan = makeSpan([], []); var depthStrut = makeSpan(["vlist"], [emptySpan]); - depthStrut.style.height = -minPos + "em"; // Safari wants the first row to have inline content; otherwise it + depthStrut.style.height = makeEm(-minPos); // Safari wants the first row to have inline content; otherwise it // puts the bottom of the *second* row on the baseline. var topStrut = makeSpan(["vlist-s"], [new SymbolNode("\u200B")]); @@ -5718,7 +5856,7 @@ var makeGlue = function makeGlue(measurement, options) { // Make an empty span for the space var rule = makeSpan(["mspace"], [], options); var size = calculateSize(measurement, options); - rule.style.marginRight = size + "em"; + rule.style.marginRight = makeEm(size); return rule; }; // Takes font options, and returns the appropriate fontLookup name @@ -5840,17 +5978,17 @@ var staticSvg = function staticSvg(value, options) { height = _svgData$value[2]; var path = new PathNode(pathName); var svgNode = new SvgNode([path], { - "width": width + "em", - "height": height + "em", + "width": makeEm(width), + "height": makeEm(height), // Override CSS rule `.katex svg { width: 100% }` - "style": "width:" + width + "em", + "style": "width:" + makeEm(width), "viewBox": "0 0 " + 1000 * width + " " + 1000 * height, "preserveAspectRatio": "xMinYMin" }); var span = makeSvgSpan(["overlay"], [svgNode], options); span.height = height; - span.style.height = height + "em"; - span.style.width = width + "em"; + span.style.height = makeEm(height); + span.style.width = makeEm(width); return span; }; @@ -6079,6 +6217,7 @@ var ordargument = function ordargument(arg) { + var buildHTML_makeSpan = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`) // depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6, // and the text before Rule 19. @@ -6338,8 +6477,12 @@ function buildHTMLUnbreakable(children, options) { // falls at the depth of the expression. var strut = buildHTML_makeSpan(["strut"]); - strut.style.height = body.height + body.depth + "em"; - strut.style.verticalAlign = -body.depth + "em"; + strut.style.height = makeEm(body.height + body.depth); + + if (body.depth) { + strut.style.verticalAlign = makeEm(-body.depth); + } + body.children.unshift(strut); return body; } @@ -6433,8 +6576,11 @@ function buildHTML(tree, options) { if (tagChild) { var strut = tagChild.children[0]; - strut.style.height = htmlNode.height + htmlNode.depth + "em"; - strut.style.verticalAlign = -htmlNode.depth + "em"; + strut.style.height = makeEm(htmlNode.height + htmlNode.depth); + + if (htmlNode.depth) { + strut.style.verticalAlign = makeEm(-htmlNode.depth); + } } return htmlNode; @@ -6452,6 +6598,7 @@ function buildHTML(tree, options) { + function newDocumentFragment(children) { return new DocumentFragment(children); } @@ -6646,7 +6793,7 @@ var SpaceNode = /*#__PURE__*/function () { return document.createTextNode(this.character); } else { var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace"); - node.setAttribute("width", this.width + "em"); + node.setAttribute("width", makeEm(this.width)); return node; } } @@ -6659,7 +6806,7 @@ var SpaceNode = /*#__PURE__*/function () { if (this.character) { return "<mtext>" + this.character + "</mtext>"; } else { - return "<mspace width=\"" + this.width + "em\"/>"; + return "<mspace width=\"" + makeEm(this.width) + "\"/>"; } } /** @@ -7008,6 +7155,7 @@ var buildHTMLTree = function buildHTMLTree(tree, expression, settings) { + var stretchyCodePoint = { widehat: "^", widecheck: "ˇ", @@ -7050,13 +7198,13 @@ var stretchyCodePoint = { // Not a perfect match. xleftequilibrium: "\u21CB", // None better available. - "\\\\cdrightarrow": "\u2192", - "\\\\cdleftarrow": "\u2190", - "\\\\cdlongequal": "=" + "\\cdrightarrow": "\u2192", + "\\cdleftarrow": "\u2190", + "\\cdlongequal": "=" }; var mathMLnode = function mathMLnode(label) { - var node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label])]); + var node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\/, '')])]); node.setAttribute("stretchy", "true"); return node; }; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts. @@ -7205,7 +7353,7 @@ var svgSpan = function svgSpan(group, options) { var path = new PathNode(pathName); var svgNode = new SvgNode([path], { "width": "100%", - "height": _height + "em", + "height": makeEm(_height), "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight, "preserveAspectRatio": "none" }); @@ -7247,7 +7395,7 @@ var svgSpan = function svgSpan(group, options) { var _svgNode = new SvgNode([_path], { "width": "400em", - "height": _height2 + "em", + "height": makeEm(_height2), "viewBox": "0 0 " + viewBoxWidth + " " + _viewBoxHeight, "preserveAspectRatio": aligns[i] + " slice" }); @@ -7261,7 +7409,7 @@ var svgSpan = function svgSpan(group, options) { height: _height2 }; } else { - _span.style.height = _height2 + "em"; + _span.style.height = makeEm(_height2); spans.push(_span); } } @@ -7283,10 +7431,10 @@ var svgSpan = function svgSpan(group, options) { span.height = height; - span.style.height = height + "em"; + span.style.height = makeEm(height); if (minWidth > 0) { - span.style.minWidth = minWidth + "em"; + span.style.minWidth = makeEm(minWidth); } return span; @@ -7335,13 +7483,13 @@ var encloseSpan = function encloseSpan(inner, label, topPad, bottomPad, options) var svgNode = new SvgNode(lines, { "width": "100%", - "height": totalHeight + "em" + "height": makeEm(totalHeight) }); img = buildCommon.makeSvgSpan([], [svgNode], options); } img.height = totalHeight; - img.style.height = totalHeight + "em"; + img.style.height = makeEm(totalHeight); return img; }; @@ -7402,6 +7550,7 @@ function checkSymbolNodeType(node) { + // NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but // also "supsub" since an accent can affect super/subscripting. var htmlBuilder = function htmlBuilder(grp, options) { @@ -7456,10 +7605,11 @@ var htmlBuilder = function htmlBuilder(grp, options) { // removed with getBaseElem might contain things like \color which // we can't get rid of. // TODO(emily): Find a better way to get the skew - } // calculate the amount of space between the body and the accent + } + var accentBelow = group.label === "\\c"; // calculate the amount of space between the body and the accent - var clearance = Math.min(body.height, options.fontMetrics().xHeight); // Build the accent + var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent var accentBody; @@ -7485,6 +7635,10 @@ var htmlBuilder = function htmlBuilder(grp, options) { accent.italic = 0; width = accent.width; + + if (accentBelow) { + clearance += accent.depth; + } } accentBody = buildCommon.makeSpan(["accent-body"], [accent]); // "Full" accents expand the width of the resulting symbol to be @@ -7508,7 +7662,7 @@ var htmlBuilder = function htmlBuilder(grp, options) { left -= width / 2; } - accentBody.style.left = left + "em"; // \textcircled uses the \bigcirc glyph, so it needs some + accentBody.style.left = makeEm(left); // \textcircled uses the \bigcirc glyph, so it needs some // vertical adjustment to match LaTeX. if (group.label === "\\textcircled") { @@ -7540,8 +7694,8 @@ var htmlBuilder = function htmlBuilder(grp, options) { elem: accentBody, wrapperClasses: ["svg-align"], wrapperStyle: skew > 0 ? { - width: "calc(100% - " + 2 * skew + "em)", - marginLeft: 2 * skew + "em" + width: "calc(100% - " + makeEm(2 * skew) + ")", + marginLeft: makeEm(2 * skew) } : undefined }] }, options); @@ -7600,18 +7754,26 @@ defineFunction({ defineFunction({ type: "accent", - names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\r", "\\H", "\\v", "\\textcircled"], + names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\c", "\\r", "\\H", "\\v", "\\textcircled"], props: { numArgs: 1, allowedInText: true, - allowedInMath: false, + allowedInMath: true, + // unless in strict mode argTypes: ["primitive"] }, handler: function handler(context, args) { var base = args[0]; + var mode = context.parser.mode; + + if (mode === "math") { + context.parser.settings.reportNonstrict("mathVsTextAccents", "LaTeX's accent " + context.funcName + " works only in text mode"); + mode = "text"; + } + return { type: "accent", - mode: context.parser.mode, + mode: mode, label: context.funcName, isStretchy: false, isShifty: true, @@ -7822,6 +7984,7 @@ defineFunction({ + var cdArrowFunctionName = { ">": "\\\\cdrightarrow", "<": "\\\\cdleftarrow", @@ -8084,7 +8247,7 @@ defineFunction({ var newOptions = options.havingStyle(options.style.sup()); var label = buildCommon.wrapFragment(buildGroup(group.label, newOptions, options), options); label.classes.push("cd-label-" + group.side); - label.style.bottom = 0.8 - label.depth + "em"; // Zero out label height & depth, so vertical align of arrow is set + label.style.bottom = makeEm(0.8 - label.depth); // Zero out label height & depth, so vertical align of arrow is set // by the arrow height, not by the label. label.height = 0; @@ -8161,15 +8324,25 @@ defineFunction({ } var code = parseInt(number); + var text; if (isNaN(code)) { - throw new src_ParseError("\\@char has non-numeric argument " + number); + throw new src_ParseError("\\@char has non-numeric argument " + number); // If we drop IE support, the following code could be replaced with + // text = String.fromCodePoint(code) + } else if (code < 0 || code >= 0x10ffff) { + throw new src_ParseError("\\@char with invalid code point " + number); + } else if (code <= 0xffff) { + text = String.fromCharCode(code); + } else { + // Astral code point; split into surrogate halves + code -= 0x10000; + text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00); } return { type: "textord", mode: parser.mode, - text: String.fromCharCode(code) + text: text }; } }); @@ -8285,7 +8458,7 @@ defineFunction({ span.classes.push("newline"); if (group.size) { - span.style.marginTop = calculateSize(group.size, options) + "em"; + span.style.marginTop = makeEm(calculateSize(group.size, options)); } } @@ -8298,7 +8471,7 @@ defineFunction({ node.setAttribute("linebreak", "newline"); if (group.size) { - node.setAttribute("height", calculateSize(group.size, options) + "em"); + node.setAttribute("height", makeEm(calculateSize(group.size, options))); } } @@ -8564,6 +8737,7 @@ defineFunction({ + /** * Get the metrics for a given symbol and font, after transformation (i.e. * after following replacement from symbols.js) @@ -8598,7 +8772,7 @@ var centerSpan = function centerSpan(span, options, style) { var newOptions = options.havingBaseStyle(style); var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight; span.classes.push("delimcenter"); - span.style.top = shift + "em"; + span.style.top = makeEm(shift); span.height -= shift; span.depth += shift; }; @@ -8671,20 +8845,20 @@ var makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) { var makeInner = function makeInner(ch, height, options) { // Create a span with inline SVG for the inner part of a tall stacked delimiter. - var width = fontMetricsData["Size4-Regular"][ch.charCodeAt(0)] ? fontMetricsData["Size4-Regular"][ch.charCodeAt(0)][4].toFixed(3) : fontMetricsData["Size1-Regular"][ch.charCodeAt(0)][4].toFixed(3); + var width = fontMetricsData["Size4-Regular"][ch.charCodeAt(0)] ? fontMetricsData["Size4-Regular"][ch.charCodeAt(0)][4] : fontMetricsData["Size1-Regular"][ch.charCodeAt(0)][4]; var path = new PathNode("inner", innerPath(ch, Math.round(1000 * height))); var svgNode = new SvgNode([path], { - "width": width + "em", - "height": height + "em", + "width": makeEm(width), + "height": makeEm(height), // Override CSS rule `.katex svg { width: 100% }` - "style": "width:" + width + "em", + "style": "width:" + makeEm(width), "viewBox": "0 0 " + 1000 * width + " " + Math.round(1000 * height), "preserveAspectRatio": "xMinYMin" }); var span = buildCommon.makeSvgSpan([], [svgNode], options); span.height = height; - span.style.height = height + "em"; - span.style.width = width + "em"; + span.style.height = makeEm(height); + span.style.width = makeEm(width); return { type: "elem", elem: span @@ -8893,7 +9067,7 @@ var sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraViniculum, var svg = new SvgNode([pathNode], { // Note: 1000:1 ratio of viewBox to document em width. "width": "400em", - "height": height + "em", + "height": makeEm(height), "viewBox": "0 0 400000 " + viewBoxHeight, "preserveAspectRatio": "xMinYMin slice" }); @@ -8962,7 +9136,7 @@ var makeSqrtImage = function makeSqrtImage(height, options) { } span.height = texHeight; - span.style.height = spanHeight + "em"; + span.style.height = makeEm(spanHeight); return { span: span, advanceWidth: advanceWidth, @@ -9218,6 +9392,7 @@ var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, optio + // Extra data needed for the delimiter handler down below var delimiterSizes = { "\\bigl": { @@ -9347,8 +9522,9 @@ defineFunction({ } node.setAttribute("stretchy", "true"); - node.setAttribute("minsize", delimiter.sizeToMaxHeight[group.size] + "em"); - node.setAttribute("maxsize", delimiter.sizeToMaxHeight[group.size] + "em"); + var size = makeEm(delimiter.sizeToMaxHeight[group.size]); + node.setAttribute("minsize", size); + node.setAttribute("maxsize", size); return node; } }); @@ -9607,19 +9783,19 @@ var enclose_htmlBuilder = function htmlBuilder(group, options) { scale = scale / newOptions.sizeMultiplier; var angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle. - inner.style.paddingLeft = angleHeight / 2 + lineWeight + "em"; // Create an SVG + inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight); // Create an SVG var viewBoxHeight = Math.floor(1000 * angleHeight * scale); var path = phasePath(viewBoxHeight); var svgNode = new SvgNode([new PathNode("phase", path)], { "width": "400em", - "height": viewBoxHeight / 1000 + "em", + "height": makeEm(viewBoxHeight / 1000), "viewBox": "0 0 400000 " + viewBoxHeight, "preserveAspectRatio": "xMinYMin slice" }); // Wrap it in a span with overflow: hidden. img = buildCommon.makeSvgSpan(["hide-tail"], [svgNode], options); - img.style.height = angleHeight + "em"; + img.style.height = makeEm(angleHeight); imgShift = inner.depth + lineWeight + clearance; } else { // Add horizontal padding @@ -9658,10 +9834,10 @@ var enclose_htmlBuilder = function htmlBuilder(group, options) { if (/fbox|boxed|fcolorbox/.test(label)) { img.style.borderStyle = "solid"; - img.style.borderWidth = ruleThickness + "em"; + img.style.borderWidth = makeEm(ruleThickness); } else if (label === "angl" && ruleThickness !== 0.049) { - img.style.borderTopWidth = ruleThickness + "em"; - img.style.borderRightWidth = ruleThickness + "em"; + img.style.borderTopWidth = makeEm(ruleThickness); + img.style.borderRightWidth = makeEm(ruleThickness); } imgShift = inner.depth + bottomPad; @@ -9931,6 +10107,109 @@ function defineEnvironment(_ref) { _mathmlGroupBuilders[type] = mathmlBuilder; } } +;// CONCATENATED MODULE: ./src/defineMacro.js + + +/** + * All registered global/built-in macros. + * `macros.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `macros.js`. + */ +var _macros = {}; // This function might one day accept an additional argument and do more things. + +function defineMacro(name, body) { + _macros[name] = body; +} +;// CONCATENATED MODULE: ./src/SourceLocation.js +/** + * Lexing or parsing positional information for error reporting. + * This object is immutable. + */ +var SourceLocation = /*#__PURE__*/function () { + // The + prefix indicates that these fields aren't writeable + // Lexer holding the input string. + // Start offset, zero-based inclusive. + // End offset, zero-based exclusive. + function SourceLocation(lexer, start, end) { + this.lexer = void 0; + this.start = void 0; + this.end = void 0; + this.lexer = lexer; + this.start = start; + this.end = end; + } + /** + * Merges two `SourceLocation`s from location providers, given they are + * provided in order of appearance. + * - Returns the first one's location if only the first is provided. + * - Returns a merged range of the first and the last if both are provided + * and their lexers match. + * - Otherwise, returns null. + */ + + + SourceLocation.range = function range(first, second) { + if (!second) { + return first && first.loc; + } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) { + return null; + } else { + return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end); + } + }; + + return SourceLocation; +}(); + + +;// CONCATENATED MODULE: ./src/Token.js + +/** + * Interface required to break circular dependency between Token, Lexer, and + * ParseError. + */ + +/** + * The resulting token returned from `lex`. + * + * It consists of the token text plus some position information. + * The position information is essentially a range in an input string, + * but instead of referencing the bare input string, we refer to the lexer. + * That way it is possible to attach extra metadata to the input string, + * like for example a file name or similar. + * + * The position information is optional, so it is OK to construct synthetic + * tokens if appropriate. Not providing available position information may + * lead to degraded error reporting, though. + */ +var Token = /*#__PURE__*/function () { + // don't expand the token + // used in \noexpand + function Token(text, // the text of this token + loc) { + this.text = void 0; + this.loc = void 0; + this.noexpand = void 0; + this.treatAsRelax = void 0; + this.text = text; + this.loc = loc; + } + /** + * Given a pair of tokens (this and endToken), compute a `Token` encompassing + * the whole input range enclosed by these two. + */ + + + var _proto = Token.prototype; + + _proto.range = function range(endToken, // last token of the range, inclusive + text // the text of the newly constructed token + ) { + return new Token(text, SourceLocation.range(this, endToken)); + }; + + return Token; +}(); ;// CONCATENATED MODULE: ./src/environments/array.js @@ -9946,6 +10225,8 @@ function defineEnvironment(_ref) { + + // Helper functions function getHLines(parser) { // Return an array. The array length = number of hlines. @@ -9970,7 +10251,19 @@ var validateAmsEnvironmentContext = function validateAmsEnvironmentContext(conte if (!settings.displayMode) { throw new src_ParseError("{" + context.envName + "} can be used only in" + " display mode."); } -}; +}; // autoTag (an argument to parseArray) can be one of three values: +// * undefined: Regular (not-top-level) array; no tags on each row +// * true: Automatic equation numbering, overridable by \tag +// * false: Tags allowed on each row, but no automatic numbering +// This function *doesn't* work with the "split" environment name. + + +function getAutoTag(name) { + if (name.indexOf("ed") === -1) { + return name.indexOf("*") === -1; + } // return undefined; + +} /** * Parse the body of the environment, with rows delimited by \\ and * columns delimited by &, and create a nested list in row-major order @@ -9985,8 +10278,9 @@ function parseArray(parser, _ref, style) { cols = _ref.cols, arraystretch = _ref.arraystretch, colSeparationType = _ref.colSeparationType, - addEqnNum = _ref.addEqnNum, + autoTag = _ref.autoTag, singleRow = _ref.singleRow, + emptySingleRow = _ref.emptySingleRow, maxNumCols = _ref.maxNumCols, leqno = _ref.leqno; parser.gullet.beginGroup(); @@ -10018,7 +10312,29 @@ function parseArray(parser, _ref, style) { var row = []; var body = [row]; var rowGaps = []; - var hLinesBeforeRow = []; // Test for \hline at the top of the array. + var hLinesBeforeRow = []; + var tags = autoTag != null ? [] : undefined; // amsmath uses \global\@eqnswtrue and \global\@eqnswfalse to represent + // whether this row should have an equation number. Simulate this with + // a \@eqnsw macro set to 1 or 0. + + function beginRow() { + if (autoTag) { + parser.gullet.macros.set("\\@eqnsw", "1", true); + } + } + + function endRow() { + if (tags) { + if (parser.gullet.macros.get("\\df@tag")) { + tags.push(parser.subparse([new Token("\\df@tag")])); + parser.gullet.macros.set("\\df@tag", undefined, true); + } else { + tags.push(Boolean(autoTag) && parser.gullet.macros.get("\\@eqnsw") === "1"); + } + } + } + + beginRow(); // Test for \hline at the top of the array. hLinesBeforeRow.push(getHLines(parser)); @@ -10059,10 +10375,12 @@ function parseArray(parser, _ref, style) { parser.consume(); } else if (next === "\\end") { - // Arrays terminate newlines with `\crcr` which consumes a `\cr` if - // the last line is empty. + endRow(); // Arrays terminate newlines with `\crcr` which consumes a `\cr` if + // the last line is empty. However, AMS environments keep the + // empty row if it's the only one. // NOTE: Currently, `cell` is the last item added into `row`. - if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0) { + + if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) { body.pop(); } @@ -10083,11 +10401,13 @@ function parseArray(parser, _ref, style) { size = parser.parseSizeGroup(true); } - rowGaps.push(size ? size.value : null); // check for \hline(s) following the row separator + rowGaps.push(size ? size.value : null); + endRow(); // check for \hline(s) following the row separator hLinesBeforeRow.push(getHLines(parser)); row = []; body.push(row); + beginRow(); } else { throw new src_ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken); } @@ -10108,7 +10428,7 @@ function parseArray(parser, _ref, style) { hskipBeforeAndAfter: hskipBeforeAndAfter, hLinesBeforeRow: hLinesBeforeRow, colSeparationType: colSeparationType, - addEqnNum: addEqnNum, + tags: tags, leqno: leqno }; } // Decides on a style for cells in an array according to whether the given @@ -10246,20 +10566,35 @@ var array_htmlBuilder = function htmlBuilder(group, options) { var cols = []; var colSep; var colDescrNum; - var eqnNumSpans = []; + var tagSpans = []; - if (group.addEqnNum) { - // An environment with automatic equation numbers. - // Create node(s) that will trigger CSS counter increment. + if (group.tags && group.tags.some(function (tag) { + return tag; + })) { + // An environment with manual tags and/or automatic equation numbers. + // Create node(s), the latter of which trigger CSS counter increment. for (r = 0; r < nr; ++r) { var rw = body[r]; var shift = rw.pos - offset; - var eqnTag = buildCommon.makeSpan(["eqn-num"], [], options); - eqnTag.depth = rw.depth; - eqnTag.height = rw.height; - eqnNumSpans.push({ + var tag = group.tags[r]; + var tagSpan = void 0; + + if (tag === true) { + // automatic numbering + tagSpan = buildCommon.makeSpan(["eqn-num"], [], options); + } else if (tag === false) { + // \nonumber/\notag or starred environment + tagSpan = buildCommon.makeSpan([], [], options); + } else { + // manual \tag + tagSpan = buildCommon.makeSpan([], buildExpression(tag, options, true), options); + } + + tagSpan.depth = rw.depth; + tagSpan.height = rw.height; + tagSpans.push({ type: "elem", - elem: eqnTag, + elem: tagSpan, shift: shift }); } @@ -10276,18 +10611,24 @@ var array_htmlBuilder = function htmlBuilder(group, options) { // between them. if (!firstSeparator) { colSep = buildCommon.makeSpan(["arraycolsep"], []); - colSep.style.width = options.fontMetrics().doubleRuleSep + "em"; + colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep); cols.push(colSep); } if (colDescr.separator === "|" || colDescr.separator === ":") { var lineType = colDescr.separator === "|" ? "solid" : "dashed"; var separator = buildCommon.makeSpan(["vertical-separator"], [], options); - separator.style.height = totalHeight + "em"; - separator.style.borderRightWidth = ruleThickness + "em"; + separator.style.height = makeEm(totalHeight); + separator.style.borderRightWidth = makeEm(ruleThickness); separator.style.borderRightStyle = lineType; - separator.style.margin = "0 -" + ruleThickness / 2 + "em"; - separator.style.verticalAlign = -(totalHeight - offset) + "em"; + separator.style.margin = "0 " + makeEm(-ruleThickness / 2); + + var _shift = totalHeight - offset; + + if (_shift) { + separator.style.verticalAlign = makeEm(-_shift); + } + cols.push(separator); } else { throw new src_ParseError("Invalid separator type: " + colDescr.separator); @@ -10309,7 +10650,7 @@ var array_htmlBuilder = function htmlBuilder(group, options) { if (sepwidth !== 0) { colSep = buildCommon.makeSpan(["arraycolsep"], []); - colSep.style.width = sepwidth + "em"; + colSep.style.width = makeEm(sepwidth); cols.push(colSep); } } @@ -10324,14 +10665,14 @@ var array_htmlBuilder = function htmlBuilder(group, options) { continue; } - var _shift = row.pos - offset; + var _shift2 = row.pos - offset; elem.depth = row.depth; elem.height = row.height; col.push({ type: "elem", elem: elem, - shift: _shift + shift: _shift2 }); } @@ -10347,7 +10688,7 @@ var array_htmlBuilder = function htmlBuilder(group, options) { if (sepwidth !== 0) { colSep = buildCommon.makeSpan(["arraycolsep"], []); - colSep.style.width = sepwidth + "em"; + colSep.style.width = makeEm(sepwidth); cols.push(colSep); } } @@ -10389,12 +10730,12 @@ var array_htmlBuilder = function htmlBuilder(group, options) { }, options); } - if (!group.addEqnNum) { + if (tagSpans.length === 0) { return buildCommon.makeSpan(["mord"], [body], options); } else { var eqnNumCol = buildCommon.makeVList({ positionType: "individualShift", - children: eqnNumSpans + children: tagSpans }, options); eqnNumCol = buildCommon.makeSpan(["tag"], [eqnNumCol], options); return buildCommon.makeFragment([body, eqnNumCol]); @@ -10420,7 +10761,7 @@ var array_mathmlBuilder = function mathmlBuilder(group, options) { row.push(new mathMLTree.MathNode("mtd", [buildMathML_buildGroup(rw[j], options)])); } - if (group.addEqnNum) { + if (group.tags && group.tags[i]) { row.unshift(glue); row.push(glue); @@ -10447,7 +10788,7 @@ var array_mathmlBuilder = function mathmlBuilder(group, options) { var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray} : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0); - table.setAttribute("rowspacing", gap.toFixed(4) + "em"); // MathML table lines go only between cells. + table.setAttribute("rowspacing", makeEm(gap)); // MathML table lines go only between cells. // To place a line on an edge we'll use <menclose>, if necessary. var menclose = ""; @@ -10555,12 +10896,14 @@ var alignedHandler = function alignedHandler(context, args) { var cols = []; var separationType = context.envName.indexOf("at") > -1 ? "alignat" : "align"; + var isSplit = context.envName === "split"; var res = parseArray(context.parser, { cols: cols, addJot: true, - addEqnNum: context.envName === "align" || context.envName === "alignat", + autoTag: isSplit ? undefined : getAutoTag(context.envName), + emptySingleRow: true, colSeparationType: separationType, - maxNumCols: context.envName === "split" ? 2 : undefined, + maxNumCols: isSplit ? 2 : undefined, leqno: context.parser.settings.leqno }, "display"); // Determining number of columns. // 1. If the first argument is given, we use it as a number of columns, @@ -10747,7 +11090,10 @@ defineEnvironment({ var res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs. - res.cols = new Array(res.body[0].length).fill({ + var numCols = Math.max.apply(Math, [0].concat(res.body.map(function (row) { + return row.length; + }))); + res.cols = new Array(numCols).fill({ type: "align", align: colAlign }); @@ -10908,7 +11254,8 @@ defineEnvironment({ }], addJot: true, colSeparationType: "gather", - addEqnNum: context.envName === "gather", + autoTag: getAutoTag(context.envName), + emptySingleRow: true, leqno: context.parser.settings.leqno }; return parseArray(context.parser, res, "display"); @@ -10938,7 +11285,8 @@ defineEnvironment({ handler: function handler(context) { validateAmsEnvironmentContext(context); var res = { - addEqnNum: context.envName === "equation", + autoTag: getAutoTag(context.envName), + emptySingleRow: true, singleRow: true, maxNumCols: 1, leqno: context.parser.settings.leqno @@ -10960,7 +11308,9 @@ defineEnvironment({ }, htmlBuilder: array_htmlBuilder, mathmlBuilder: array_mathmlBuilder -}); // Catch \hline outside array environment +}); +defineMacro("\\nonumber", "\\gdef\\@eqnsw{0}"); +defineMacro("\\notag", "\\nonumber"); // Catch \hline outside array environment defineFunction({ type: "text", @@ -11069,7 +11419,7 @@ function mclass_mathmlBuilder(group, options) { var inner = buildMathML_buildExpression(group.body, options); if (group.mclass === "minner") { - return mathMLTree.newDocumentFragment(inner); + node = new mathMLTree.MathNode("mpadded", inner); } else if (group.mclass === "mord") { if (group.isCharacterBox) { node = inner[0]; @@ -11097,6 +11447,10 @@ function mclass_mathmlBuilder(group, options) { } else if (group.mclass === "mopen" || group.mclass === "mclose") { node.attributes.lspace = "0em"; node.attributes.rspace = "0em"; + } else if (group.mclass === "minner") { + node.attributes.lspace = "0.0556em"; // 1 mu is the most likely option + + node.attributes.width = "+0.1111em"; } // MathML <mo> default space is 5/18 em, so <mrel> needs no action. // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo @@ -11485,6 +11839,8 @@ var genfrac_htmlBuilder = function htmlBuilder(group, options) { if (style.size === src_Style.DISPLAY.size) { delimSize = options.fontMetrics().delim1; + } else if (style.size === src_Style.SCRIPTSCRIPT.size) { + delimSize = options.havingStyle(src_Style.SCRIPT).fontMetrics().delim2; } else { delimSize = options.fontMetrics().delim2; } @@ -11516,7 +11872,7 @@ var genfrac_mathmlBuilder = function mathmlBuilder(group, options) { node.setAttribute("linethickness", "0px"); } else if (group.barSize) { var ruleWidth = calculateSize(group.barSize, options); - node.setAttribute("linethickness", ruleWidth + "em"); + node.setAttribute("linethickness", makeEm(ruleWidth)); } var style = adjustStyle(group.size, options.style); @@ -12377,7 +12733,6 @@ defineFunction({ if (group.totalheight.number > 0) { depth = calculateSize(group.totalheight, options) - height; - depth = Number(depth.toFixed(2)); } var width = 0; @@ -12387,15 +12742,15 @@ defineFunction({ } var style = { - height: height + depth + "em" + height: makeEm(height + depth) }; if (width > 0) { - style.width = width + "em"; + style.width = makeEm(width); } if (depth > 0) { - style.verticalAlign = -depth + "em"; + style.verticalAlign = makeEm(-depth); } var node = new Img(group.src, group.alt, style); @@ -12411,15 +12766,14 @@ defineFunction({ if (group.totalheight.number > 0) { depth = calculateSize(group.totalheight, options) - height; - depth = depth.toFixed(2); - node.setAttribute("valign", "-" + depth + "em"); + node.setAttribute("valign", makeEm(-depth)); } - node.setAttribute("height", height + depth + "em"); + node.setAttribute("height", makeEm(height + depth)); if (group.width.number > 0) { var width = calculateSize(group.width, options); - node.setAttribute("width", width + "em"); + node.setAttribute("width", makeEm(width)); } node.setAttribute("src", group.src); @@ -12490,6 +12844,7 @@ defineFunction({ + defineFunction({ type: "lap", names: ["\\mathllap", "\\mathrlap", "\\mathclap"], @@ -12529,8 +12884,12 @@ defineFunction({ // This code resolved issue #1153 var strut = buildCommon.makeSpan(["strut"]); - strut.style.height = node.height + node.depth + "em"; - strut.style.verticalAlign = -node.depth + "em"; + strut.style.height = makeEm(node.height + node.depth); + + if (node.depth) { + strut.style.verticalAlign = makeEm(-node.depth); + } + node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall. // This code resolves issue #1234 @@ -12650,9 +13009,12 @@ defineFunction({ ;// CONCATENATED MODULE: ./src/functions/utils/assembleSupSub.js -// For an operator with limits, assemble the base, sup, and sub into a span. + + // For an operator with limits, assemble the base, sup, and sub into a span. + var assembleSupSub = function assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift) { base = buildCommon.makeSpan([], [base]); + var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup); var sub; var sup; // We manually have to handle the superscripts and subscripts. This, // aside from the kern calculations, is copied from supsub. @@ -12689,7 +13051,7 @@ var assembleSupSub = function assembleSupSub(base, supGroup, subGroup, options, }, { type: "elem", elem: sub.elem, - marginLeft: -slant + "em" + marginLeft: makeEm(-slant) }, { type: "kern", size: sub.kern @@ -12702,7 +13064,7 @@ var assembleSupSub = function assembleSupSub(base, supGroup, subGroup, options, }, { type: "elem", elem: sup.elem, - marginLeft: slant + "em" + marginLeft: makeEm(slant) }, { type: "kern", size: options.fontMetrics().bigOpSpacing5 @@ -12723,7 +13085,7 @@ var assembleSupSub = function assembleSupSub(base, supGroup, subGroup, options, }, { type: "elem", elem: sub.elem, - marginLeft: -slant + "em" + marginLeft: makeEm(-slant) }, { type: "kern", size: sub.kern @@ -12747,7 +13109,7 @@ var assembleSupSub = function assembleSupSub(base, supGroup, subGroup, options, }, { type: "elem", elem: sup.elem, - marginLeft: slant + "em" + marginLeft: makeEm(slant) }, { type: "kern", size: options.fontMetrics().bigOpSpacing5 @@ -12760,7 +13122,17 @@ var assembleSupSub = function assembleSupSub(base, supGroup, subGroup, options, return base; } - return buildCommon.makeSpan(["mop", "op-limits"], [finalGroup], options); + var parts = [finalGroup]; + + if (sub && slant !== 0 && !subIsSingleCharacter) { + // A negative margin-left was applied to the lower limit. + // Avoid an overlap by placing a spacer on the left on the group. + var spacer = buildCommon.makeSpan(["mspace"], [], options); + spacer.style.marginRight = makeEm(slant); + parts.unshift(spacer); + } + + return buildCommon.makeSpan(["mop", "op-limits"], parts, options); }; ;// CONCATENATED MODULE: ./src/functions/op.js // Limits, symbols @@ -12774,6 +13146,7 @@ var assembleSupSub = function assembleSupSub(base, supGroup, subGroup, options, + // Most operators have a large successor symbol, but these don't. var noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also // "supsub" since some of them (like \int) can affect super/subscripting. @@ -12887,7 +13260,7 @@ var op_htmlBuilder = function htmlBuilder(grp, options) { } else { if (baseShift) { base.style.position = "relative"; - base.style.top = baseShift + "em"; + base.style.top = makeEm(baseShift); } return base; @@ -13082,6 +13455,7 @@ defineFunction({ + // NOTE: Unlike most `htmlBuilder`s, this one handles not only // "operatorname", but also "supsub" since \operatorname* can // affect super/subscripting. @@ -13212,7 +13586,7 @@ var operatorname_mathmlBuilder = function mathmlBuilder(group, options) { defineFunction({ type: "operatorname", - names: ["\\operatorname", "\\operatorname*"], + names: ["\\operatorname@", "\\operatornamewithlimits"], props: { numArgs: 1 }, @@ -13224,7 +13598,7 @@ defineFunction({ type: "operatorname", mode: parser.mode, body: ordargument(body), - alwaysHandleSupSub: funcName === "\\operatorname*", + alwaysHandleSupSub: funcName === "\\operatornamewithlimits", limits: false, parentIsSupSub: false }; @@ -13232,6 +13606,7 @@ defineFunction({ htmlBuilder: operatorname_htmlBuilder, mathmlBuilder: operatorname_mathmlBuilder }); +defineMacro("\\operatorname", "\\@ifstar\\operatornamewithlimits\\operatorname@"); ;// CONCATENATED MODULE: ./src/functions/ordgroup.js @@ -13462,6 +13837,23 @@ defineFunction({ return node; } }); +;// CONCATENATED MODULE: ./src/functions/relax.js + +defineFunction({ + type: "internal", + names: ["\\relax"], + props: { + numArgs: 0, + allowedInText: true + }, + handler: function handler(_ref) { + var parser = _ref.parser; + return { + type: "internal", + mode: parser.mode + }; + } +}); ;// CONCATENATED MODULE: ./src/functions/rule.js @@ -13497,9 +13889,9 @@ defineFunction({ var height = calculateSize(group.height, options); var shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size - rule.style.borderRightWidth = width + "em"; - rule.style.borderTopWidth = height + "em"; - rule.style.bottom = shift + "em"; // Record the height and width + rule.style.borderRightWidth = makeEm(width); + rule.style.borderTopWidth = makeEm(height); + rule.style.bottom = makeEm(shift); // Record the height and width rule.width = width; rule.height = height + shift; @@ -13517,18 +13909,18 @@ defineFunction({ var color = options.color && options.getColor() || "black"; var rule = new mathMLTree.MathNode("mspace"); rule.setAttribute("mathbackground", color); - rule.setAttribute("width", width + "em"); - rule.setAttribute("height", height + "em"); + rule.setAttribute("width", makeEm(width)); + rule.setAttribute("height", makeEm(height)); var wrapper = new mathMLTree.MathNode("mpadded", [rule]); if (shift >= 0) { - wrapper.setAttribute("height", "+" + shift + "em"); + wrapper.setAttribute("height", makeEm(shift)); } else { - wrapper.setAttribute("height", shift + "em"); - wrapper.setAttribute("depth", "+" + -shift + "em"); + wrapper.setAttribute("height", makeEm(shift)); + wrapper.setAttribute("depth", makeEm(-shift)); } - wrapper.setAttribute("voffset", shift + "em"); + wrapper.setAttribute("voffset", makeEm(shift)); return wrapper; } }); @@ -13538,6 +13930,7 @@ defineFunction({ + function sizingGroup(value, options, baseOptions) { var inner = buildExpression(value, options, false); var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize @@ -13599,7 +13992,7 @@ defineFunction({ // that we're passing an options parameter we should be able to fix // this. - node.setAttribute("mathsize", newOptions.sizeMultiplier + "em"); + node.setAttribute("mathsize", makeEm(newOptions.sizeMultiplier)); return node; } }); @@ -13723,6 +14116,7 @@ defineFunction({ + defineFunction({ type: "sqrt", names: ["\\sqrt"], @@ -13781,7 +14175,7 @@ defineFunction({ var imgShift = img.height - inner.height - lineClearance - ruleWidth; - inner.style.paddingLeft = advanceWidth + "em"; // Overlay the image and the argument. + inner.style.paddingLeft = makeEm(advanceWidth); // Overlay the image and the argument. var body = buildCommon.makeVList({ positionType: "firstBaseline", @@ -13909,6 +14303,7 @@ defineFunction({ + /** * Sometimes, groups perform special rules when they have superscripts or * subscripts attached to them. This function lets the `supsub` group know that @@ -14000,7 +14395,7 @@ defineFunctionBuilders({ var multiplier = options.sizeMultiplier; - var marginRight = 0.5 / metrics.ptPerEm / multiplier + "em"; + var marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier); var marginLeft = null; if (subm) { @@ -14011,7 +14406,7 @@ defineFunctionBuilders({ if (base instanceof SymbolNode || isOiint) { // $FlowFixMe - marginLeft = -base.italic + "em"; + marginLeft = makeEm(-base.italic); } } @@ -14602,95 +14997,7 @@ var functions = _functions; -;// CONCATENATED MODULE: ./src/SourceLocation.js -/** - * Lexing or parsing positional information for error reporting. - * This object is immutable. - */ -var SourceLocation = /*#__PURE__*/function () { - // The + prefix indicates that these fields aren't writeable - // Lexer holding the input string. - // Start offset, zero-based inclusive. - // End offset, zero-based exclusive. - function SourceLocation(lexer, start, end) { - this.lexer = void 0; - this.start = void 0; - this.end = void 0; - this.lexer = lexer; - this.start = start; - this.end = end; - } - /** - * Merges two `SourceLocation`s from location providers, given they are - * provided in order of appearance. - * - Returns the first one's location if only the first is provided. - * - Returns a merged range of the first and the last if both are provided - * and their lexers match. - * - Otherwise, returns null. - */ - - - SourceLocation.range = function range(first, second) { - if (!second) { - return first && first.loc; - } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) { - return null; - } else { - return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end); - } - }; - - return SourceLocation; -}(); - - -;// CONCATENATED MODULE: ./src/Token.js - -/** - * Interface required to break circular dependency between Token, Lexer, and - * ParseError. - */ - -/** - * The resulting token returned from `lex`. - * - * It consists of the token text plus some position information. - * The position information is essentially a range in an input string, - * but instead of referencing the bare input string, we refer to the lexer. - * That way it is possible to attach extra metadata to the input string, - * like for example a file name or similar. - * - * The position information is optional, so it is OK to construct synthetic - * tokens if appropriate. Not providing available position information may - * lead to degraded error reporting, though. - */ -var Token = /*#__PURE__*/function () { - // don't expand the token - // used in \noexpand - function Token(text, // the text of this token - loc) { - this.text = void 0; - this.loc = void 0; - this.noexpand = void 0; - this.treatAsRelax = void 0; - this.text = text; - this.loc = loc; - } - /** - * Given a pair of tokens (this and endToken), compute a `Token` encompassing - * the whole input range enclosed by these two. - */ - - - var _proto = Token.prototype; - - _proto.range = function range(endToken, // last token of the range, inclusive - text) { - return new Token(text, SourceLocation.range(this, endToken)); - }; - return Token; -}(); ;// CONCATENATED MODULE: ./src/Lexer.js /** * The Lexer class handles tokenizing the input in various ways. Since our @@ -14717,8 +15024,16 @@ var Token = /*#__PURE__*/function () { * - does not match bare surrogate code units * - matches any BMP character except for those just described * - matches any valid Unicode surrogate pair - * - matches a backslash followed by one or more letters - * - matches a backslash followed by any BMP character, including newline + * - matches a backslash followed by one or more whitespace characters + * - matches a backslash followed by one or more letters then whitespace + * - matches a backslash followed by any BMP character + * Capturing groups: + * [1] regular whitespace + * [2] backslash followed by whitespace + * [3] anything else, which may include: + * [4] left character of \verb* + * [5] left character of \verb + * [6] backslash followed by word, excluding any trailing whitespace * Just because the Lexer matches something doesn't mean it's valid input: * If there is no matching function or symbol definition, the Parser will * still reject the input. @@ -14726,25 +15041,26 @@ var Token = /*#__PURE__*/function () { var spaceRegexString = "[ \r\n\t]"; var controlWordRegexString = "\\\\[a-zA-Z@]+"; var controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]"; -var controlWordWhitespaceRegexString = "" + controlWordRegexString + spaceRegexString + "*"; -var controlWordWhitespaceRegex = new RegExp("^(" + controlWordRegexString + ")" + spaceRegexString + "*$"); +var controlWordWhitespaceRegexString = "(" + controlWordRegexString + ")" + spaceRegexString + "*"; +var controlSpaceRegexString = "\\\\(\n|[ \r\t]+\n?)[ \r\t]*"; var combiningDiacriticalMarkString = "[\u0300-\u036F]"; var combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + "+$"); -var tokenRegexString = "(" + spaceRegexString + "+)|" + // whitespace +var tokenRegexString = "(" + spaceRegexString + "+)|" + ( // whitespace +controlSpaceRegexString + "|") + // \whitespace "([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + ( // single codepoint combiningDiacriticalMarkString + "*") + // ...plus accents "|[\uD800-\uDBFF][\uDC00-\uDFFF]" + ( // surrogate pair combiningDiacriticalMarkString + "*") + // ...plus accents -"|\\\\verb\\*([^]).*?\\3" + // \verb* -"|\\\\verb([^*a-zA-Z]).*?\\4" + // \verb unstarred -"|\\\\operatorname\\*" + ( // \operatorname* +"|\\\\verb\\*([^]).*?\\4" + // \verb* +"|\\\\verb([^*a-zA-Z]).*?\\5" + ( // \verb unstarred "|" + controlWordWhitespaceRegexString) + ( // \macroName + spaces "|" + controlSymbolRegexString + ")"); // \\, \', etc. /** Main Lexer class */ var Lexer = /*#__PURE__*/function () { - // category codes, only supports comment characters (14) for now + // Category codes. The lexer only supports comment characters (14) for now. + // MacroExpander additionally distinguishes active (13). function Lexer(input, settings) { this.input = void 0; this.settings = void 0; @@ -14755,7 +15071,9 @@ var Lexer = /*#__PURE__*/function () { this.settings = settings; this.tokenRegex = new RegExp(tokenRegexString, 'g'); this.catcodes = { - "%": 14 // comment character + "%": 14, + // comment character + "~": 13 // active character }; } @@ -14784,7 +15102,7 @@ var Lexer = /*#__PURE__*/function () { throw new src_ParseError("Unexpected character: '" + input[pos] + "'", new Token(input[pos], new SourceLocation(this, pos, pos + 1))); } - var text = match[2] || " "; + var text = match[6] || match[3] || (match[2] ? "\\ " : " "); if (this.catcodes[text] === 14) { // comment character @@ -14799,13 +15117,6 @@ var Lexer = /*#__PURE__*/function () { } return this.lex(); - } // Trim any trailing whitespace from control word match - - - var controlMatch = text.match(controlWordWhitespaceRegex); - - if (controlMatch) { - text = controlMatch[1]; } return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex)); @@ -14872,7 +15183,7 @@ var Namespace = /*#__PURE__*/function () { for (var undef in undefs) { if (undefs.hasOwnProperty(undef)) { - if (undefs[undef] === undefined) { + if (undefs[undef] == null) { delete this.current[undef]; } else { this.current[undef] = undefs[undef]; @@ -14881,6 +15192,17 @@ var Namespace = /*#__PURE__*/function () { } } /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + ; + + _proto.endGroups = function endGroups() { + while (this.undefStack.length > 0) { + this.endGroup(); + } + } + /** * Detect whether `name` has a definition. Equivalent to * `get(name) != null`. */ @@ -14911,6 +15233,7 @@ var Namespace = /*#__PURE__*/function () { * Local set() sets the current value and (when appropriate) adds an undo * operation to the undo stack. Global set() may change the undo * operation at every level, so takes time linear in their number. + * A value of undefined means to delete existing definitions. */ ; @@ -14942,7 +15265,11 @@ var Namespace = /*#__PURE__*/function () { } } - this.current[name] = value; + if (value == null) { + delete this.current[name]; + } else { + this.current[name] = value; + } }; return Namespace; @@ -14954,18 +15281,16 @@ var Namespace = /*#__PURE__*/function () { * Predefined macros for KaTeX. * This can be used to define some commands in terms of others. */ +// Export global macros object from defineMacro +var macros = _macros; +/* harmony default export */ var src_macros = (macros); -var builtinMacros = {}; -/* harmony default export */ var macros = (builtinMacros); // This function might one day accept an additional argument and do more things. - -function defineMacro(name, body) { - builtinMacros[name] = body; -} ////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////// // macro tools defineMacro("\\noexpand", function (context) { @@ -15225,11 +15550,13 @@ defineMacro("\\show", function (context) { defineMacro("\\bgroup", "{"); defineMacro("\\egroup", "}"); // Symbols from latex.ltx: +// \def~{\nobreakspace{}} // \def\lq{`} // \def\rq{'} // \def \aa {\r a} // \def \AA {\r A} +defineMacro("~", "\\nobreakspace"); defineMacro("\\lq", "`"); defineMacro("\\rq", "'"); defineMacro("\\aa", "\\r a"); @@ -15340,7 +15667,7 @@ defineMacro("\\varOmega", "\\mathit{\\Omega}"); //\newcommand{\substack}[1]{\sub defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); // \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript // \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} -defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} +defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); // \def\iff{\DOTSB\;\Longleftrightarrow\;} // \def\implies{\DOTSB\;\Longrightarrow\;} @@ -15584,7 +15911,7 @@ defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5e // We compute the corresponding \raisebox when A is rendered in \normalsize // \scriptstyle, which has a scale factor of 0.7 (see Options.js). -var latexRaiseA = fontMetricsData["Main-Regular"]["T".charCodeAt(0)][1] - 0.7 * fontMetricsData["Main-Regular"]["A".charCodeAt(0)][1] + "em"; +var latexRaiseA = makeEm(fontMetricsData["Main-Regular"]["T".charCodeAt(0)][1] - 0.7 * fontMetricsData["Main-Regular"]["A".charCodeAt(0)][1]); defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}"); // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} @@ -15874,8 +16201,6 @@ defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}"); // List of commands that act like macros but aren't defined as a macro, // function, or symbol. Used in `isDefined`. var implicitCommands = { - "\\relax": true, - // MacroExpander.js "^": true, // Parser.js "_": true, @@ -15898,7 +16223,7 @@ var MacroExpander = /*#__PURE__*/function () { this.expansionCount = 0; this.feed(input); // Make new global namespace - this.macros = new Namespace(macros, settings.macros); + this.macros = new Namespace(src_macros, settings.macros); this.mode = mode; this.stack = []; // contains tokens in REVERSE order } @@ -15938,6 +16263,15 @@ var MacroExpander = /*#__PURE__*/function () { this.macros.endGroup(); } /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + ; + + _proto.endGroups = function endGroups() { + this.macros.endGroups(); + } + /** * Returns the topmost token on the stack, without expanding it. * Similar in behavior to TeX's `\futurelet`. */ @@ -16237,15 +16571,13 @@ var MacroExpander = /*#__PURE__*/function () { var expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded. if (expanded instanceof Token) { - // \relax stops the expansion, but shouldn't get returned (a - // null return value couldn't get implemented as a function). // the token after \noexpand is interpreted as if its meaning // were ‘\relax’ - if (expanded.text === "\\relax" || expanded.treatAsRelax) { - this.stack.pop(); - } else { - return this.stack.pop(); // === expanded + if (expanded.treatAsRelax) { + expanded.text = "\\relax"; } + + return this.stack.pop(); // === expanded } } // Flow unable to figure out that this pathway is impossible. // https://github.com/facebook/flow/issues/4808 @@ -16318,6 +16650,16 @@ var MacroExpander = /*#__PURE__*/function () { if (definition == null) { // mainly checking for undefined here return definition; + } // If a single character has an associated catcode other than 13 + // (active character), then don't expand it. + + + if (name.length === 1) { + var catcode = this.lexer.catcodes[name]; + + if (catcode != null && catcode !== 13) { + return; + } } var expansion = typeof definition === "function" ? definition(this) : definition; @@ -16434,6 +16776,9 @@ var unicodeAccents = { }, "̋": { "text": "\\H" + }, + "̧": { + "text": "\\c" } }; var unicodeSymbols = { @@ -16458,11 +16803,14 @@ var unicodeSymbols = { "ǻ": "ǻ", "ḃ": "ḃ", "ć": "ć", + "ḉ": "ḉ", "č": "č", "ĉ": "ĉ", "ċ": "ċ", + "ç": "ç", "ď": "ď", "ḋ": "ḋ", + "ḑ": "ḑ", "é": "é", "è": "è", "ë": "ë", @@ -16471,12 +16819,14 @@ var unicodeSymbols = { "ḗ": "ḗ", "ḕ": "ḕ", "ĕ": "ĕ", + "ḝ": "ḝ", "ě": "ě", "ê": "ê", "ế": "ế", "ề": "ề", "ễ": "ễ", "ė": "ė", + "ȩ": "ȩ", "ḟ": "ḟ", "ǵ": "ǵ", "ḡ": "ḡ", @@ -16484,10 +16834,12 @@ var unicodeSymbols = { "ǧ": "ǧ", "ĝ": "ĝ", "ġ": "ġ", + "ģ": "ģ", "ḧ": "ḧ", "ȟ": "ȟ", "ĥ": "ĥ", "ḣ": "ḣ", + "ḩ": "ḩ", "í": "í", "ì": "ì", "ï": "ï", @@ -16501,8 +16853,10 @@ var unicodeSymbols = { "ĵ": "ĵ", "ḱ": "ḱ", "ǩ": "ǩ", + "ķ": "ķ", "ĺ": "ĺ", "ľ": "ľ", + "ļ": "ļ", "ḿ": "ḿ", "ṁ": "ṁ", "ń": "ń", @@ -16510,6 +16864,7 @@ var unicodeSymbols = { "ñ": "ñ", "ň": "ň", "ṅ": "ṅ", + "ņ": "ņ", "ó": "ó", "ò": "ò", "ö": "ö", @@ -16535,15 +16890,18 @@ var unicodeSymbols = { "ŕ": "ŕ", "ř": "ř", "ṙ": "ṙ", + "ŗ": "ŗ", "ś": "ś", "ṥ": "ṥ", "š": "š", "ṧ": "ṧ", "ŝ": "ŝ", "ṡ": "ṡ", + "ş": "ş", "ẗ": "ẗ", "ť": "ť", "ṫ": "ṫ", + "ţ": "ţ", "ú": "ú", "ù": "ù", "ü": "ü", @@ -16602,11 +16960,14 @@ var unicodeSymbols = { "Ǻ": "Ǻ", "Ḃ": "Ḃ", "Ć": "Ć", + "Ḉ": "Ḉ", "Č": "Č", "Ĉ": "Ĉ", "Ċ": "Ċ", + "Ç": "Ç", "Ď": "Ď", "Ḋ": "Ḋ", + "Ḑ": "Ḑ", "É": "É", "È": "È", "Ë": "Ë", @@ -16615,12 +16976,14 @@ var unicodeSymbols = { "Ḗ": "Ḗ", "Ḕ": "Ḕ", "Ĕ": "Ĕ", + "Ḝ": "Ḝ", "Ě": "Ě", "Ê": "Ê", "Ế": "Ế", "Ề": "Ề", "Ễ": "Ễ", "Ė": "Ė", + "Ȩ": "Ȩ", "Ḟ": "Ḟ", "Ǵ": "Ǵ", "Ḡ": "Ḡ", @@ -16628,10 +16991,12 @@ var unicodeSymbols = { "Ǧ": "Ǧ", "Ĝ": "Ĝ", "Ġ": "Ġ", + "Ģ": "Ģ", "Ḧ": "Ḧ", "Ȟ": "Ȟ", "Ĥ": "Ĥ", "Ḣ": "Ḣ", + "Ḩ": "Ḩ", "Í": "Í", "Ì": "Ì", "Ï": "Ï", @@ -16645,8 +17010,10 @@ var unicodeSymbols = { "Ĵ": "Ĵ", "Ḱ": "Ḱ", "Ǩ": "Ǩ", + "Ķ": "Ķ", "Ĺ": "Ĺ", "Ľ": "Ľ", + "Ļ": "Ļ", "Ḿ": "Ḿ", "Ṁ": "Ṁ", "Ń": "Ń", @@ -16654,6 +17021,7 @@ var unicodeSymbols = { "Ñ": "Ñ", "Ň": "Ň", "Ṅ": "Ṅ", + "Ņ": "Ņ", "Ó": "Ó", "Ò": "Ò", "Ö": "Ö", @@ -16679,14 +17047,17 @@ var unicodeSymbols = { "Ŕ": "Ŕ", "Ř": "Ř", "Ṙ": "Ṙ", + "Ŗ": "Ŗ", "Ś": "Ś", "Ṥ": "Ṥ", "Š": "Š", "Ṧ": "Ṧ", "Ŝ": "Ŝ", "Ṡ": "Ṡ", + "Ş": "Ş", "Ť": "Ť", "Ṫ": "Ṫ", + "Ţ": "Ţ", "Ú": "Ú", "Ù": "Ù", "Ü": "Ü", @@ -16872,17 +17243,40 @@ var Parser = /*#__PURE__*/function () { if (this.settings.colorIsTextColor) { this.gullet.macros.set("\\color", "\\textcolor"); - } // Try to parse the input + } + try { + // Try to parse the input + var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end - var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end + this.expect("EOF"); // End the group namespace for the expression - this.expect("EOF"); // End the group namespace for the expression + if (!this.settings.globalGroup) { + this.gullet.endGroup(); + } - if (!this.settings.globalGroup) { - this.gullet.endGroup(); + return parse; // Close any leftover groups in case of a parse error. + } finally { + this.gullet.endGroups(); } + } + /** + * Fully parse a separate sequence of tokens as a separate job. + * Tokens should be specified in reverse order, as in a MacroDefinition. + */ + ; + + _proto.subparse = function subparse(tokens) { + // Save the next token from the current job. + var oldToken = this.nextToken; + this.consume(); // Run the new job, terminating it with an excess '}' + this.gullet.pushToken(new Token("}")); + this.gullet.pushTokens(tokens); + var parse = this.parseExpression(false); + this.expect("}"); // Restore the next token from the current job. + + this.nextToken = oldToken; return parse; }; @@ -17006,7 +17400,8 @@ var Parser = /*#__PURE__*/function () { */ ; - _proto.handleSupSubscript = function handleSupSubscript(name) { + _proto.handleSupSubscript = function handleSupSubscript(name // For error reporting. + ) { var symbolToken = this.fetch(); var symbol = symbolToken.text; this.consume(); @@ -17080,10 +17475,10 @@ var Parser = /*#__PURE__*/function () { var limits = lex.text === "\\limits"; base.limits = limits; base.alwaysHandleSupSub = true; - } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub) { - var _limits = lex.text === "\\limits"; - - base.limits = _limits; + } else if (base && base.type === "operatorname") { + if (base.alwaysHandleSupSub) { + base.limits = lex.text === "\\limits"; + } } else { throw new src_ParseError("Limit controls must follow a math operator", lex); } @@ -17163,7 +17558,8 @@ var Parser = /*#__PURE__*/function () { */ ; - _proto.parseFunction = function parseFunction(breakOnTokenText, name) { + _proto.parseFunction = function parseFunction(breakOnTokenText, name // For determining its context + ) { var token = this.fetch(); var func = token.text; var funcData = src_functions[func]; @@ -17365,7 +17761,8 @@ var Parser = /*#__PURE__*/function () { */ ; - _proto.parseRegexGroup = function parseRegexGroup(regex, modeName) { + _proto.parseRegexGroup = function parseRegexGroup(regex, modeName // Used to describe the mode in error messages. + ) { var firstToken = this.fetch(); var lastToken = firstToken; var str = ""; @@ -17478,9 +17875,13 @@ var Parser = /*#__PURE__*/function () { _proto.parseUrlGroup = function parseUrlGroup(optional) { this.gullet.lexer.setCatcode("%", 13); // active character + this.gullet.lexer.setCatcode("~", 12); // other character + var res = this.parseStringGroup("url", optional); this.gullet.lexer.setCatcode("%", 14); // comment character + this.gullet.lexer.setCatcode("~", 13); // active character + if (res == null) { return null; } // hyperref package allows backslashes alone in href, but doesn't @@ -17766,7 +18167,7 @@ var Parser = /*#__PURE__*/function () { throw new src_ParseError("Unknown accent ' " + accent + "'", nucleus); } - var command = unicodeAccents[accent][this.mode]; + var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text; if (!command) { throw new src_ParseError("Accent " + accent + " unsupported in " + this.mode + " mode", nucleus); @@ -17802,6 +18203,7 @@ Parser.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"]; + /** * Parses an expression using a Parser, then returns the parsed result. */ @@ -17824,12 +18226,11 @@ var parseTree = function parseTree(toParse, settings) { throw new src_ParseError("\\tag works only in display equations"); } - parser.gullet.feed("\\df@tag"); tree = [{ type: "tag", mode: "text", body: tree, - tag: parser.parse() + tag: parser.subparse([new Token("\\df@tag")]) }]; } @@ -17950,7 +18351,7 @@ var renderToHTMLTree = function renderToHTMLTree(expression, options) { /** * Current KaTeX version */ - version: "0.13.2", + version: "0.15.2", /** * Renders the given LaTeX into an HTML+MathML combination, and adds @@ -17970,6 +18371,11 @@ var renderToHTMLTree = function renderToHTMLTree(expression, options) { ParseError: src_ParseError, /** + * The shema of Settings + */ + SETTINGS_SCHEMA: SETTINGS_SCHEMA, + + /** * Parses the given LaTeX into KaTeX's internal parse tree structure, * without rendering to HTML or MathML. * @@ -18043,7 +18449,7 @@ var renderToHTMLTree = function renderToHTMLTree(expression, options) { /* harmony default export */ var katex_webpack = (katex); -__webpack_exports__ = __webpack_exports__.default; +__webpack_exports__ = __webpack_exports__["default"]; /******/ return __webpack_exports__; /******/ })() ; diff --git a/static/webfonts/KaTeX_AMS-Regular.woff b/static/webfonts/KaTeX_AMS-Regular.woff Binary files differdeleted file mode 100644 index 9b82678..0000000 --- a/static/webfonts/KaTeX_AMS-Regular.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_AMS-Regular.woff2 b/static/webfonts/KaTeX_AMS-Regular.woff2 Binary files differnew file mode 100644 index 0000000..0acaaff --- /dev/null +++ b/static/webfonts/KaTeX_AMS-Regular.woff2 diff --git a/static/webfonts/KaTeX_Caligraphic-Bold.woff b/static/webfonts/KaTeX_Caligraphic-Bold.woff Binary files differdeleted file mode 100644 index d0e5f82..0000000 --- a/static/webfonts/KaTeX_Caligraphic-Bold.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Caligraphic-Bold.woff2 b/static/webfonts/KaTeX_Caligraphic-Bold.woff2 Binary files differnew file mode 100644 index 0000000..f390922 --- /dev/null +++ b/static/webfonts/KaTeX_Caligraphic-Bold.woff2 diff --git a/static/webfonts/KaTeX_Caligraphic-Regular.woff b/static/webfonts/KaTeX_Caligraphic-Regular.woff Binary files differdeleted file mode 100644 index 325fa0a..0000000 --- a/static/webfonts/KaTeX_Caligraphic-Regular.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Caligraphic-Regular.woff2 b/static/webfonts/KaTeX_Caligraphic-Regular.woff2 Binary files differnew file mode 100644 index 0000000..75344a1 --- /dev/null +++ b/static/webfonts/KaTeX_Caligraphic-Regular.woff2 diff --git a/static/webfonts/KaTeX_Fraktur-Bold.woff b/static/webfonts/KaTeX_Fraktur-Bold.woff Binary files differdeleted file mode 100644 index 25a39ae..0000000 --- a/static/webfonts/KaTeX_Fraktur-Bold.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Fraktur-Bold.woff2 b/static/webfonts/KaTeX_Fraktur-Bold.woff2 Binary files differnew file mode 100644 index 0000000..395f28b --- /dev/null +++ b/static/webfonts/KaTeX_Fraktur-Bold.woff2 diff --git a/static/webfonts/KaTeX_Fraktur-Regular.woff b/static/webfonts/KaTeX_Fraktur-Regular.woff Binary files differdeleted file mode 100644 index e042e7c..0000000 --- a/static/webfonts/KaTeX_Fraktur-Regular.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Fraktur-Regular.woff2 b/static/webfonts/KaTeX_Fraktur-Regular.woff2 Binary files differnew file mode 100644 index 0000000..735f694 --- /dev/null +++ b/static/webfonts/KaTeX_Fraktur-Regular.woff2 diff --git a/static/webfonts/KaTeX_Main-Bold.woff b/static/webfonts/KaTeX_Main-Bold.woff Binary files differdeleted file mode 100644 index 49ee886..0000000 --- a/static/webfonts/KaTeX_Main-Bold.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Main-Bold.woff2 b/static/webfonts/KaTeX_Main-Bold.woff2 Binary files differnew file mode 100644 index 0000000..ab2ad21 --- /dev/null +++ b/static/webfonts/KaTeX_Main-Bold.woff2 diff --git a/static/webfonts/KaTeX_Main-BoldItalic.woff b/static/webfonts/KaTeX_Main-BoldItalic.woff Binary files differdeleted file mode 100644 index d6ea5a6..0000000 --- a/static/webfonts/KaTeX_Main-BoldItalic.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Main-BoldItalic.woff2 b/static/webfonts/KaTeX_Main-BoldItalic.woff2 Binary files differnew file mode 100644 index 0000000..5931794 --- /dev/null +++ b/static/webfonts/KaTeX_Main-BoldItalic.woff2 diff --git a/static/webfonts/KaTeX_Main-Italic.woff b/static/webfonts/KaTeX_Main-Italic.woff Binary files differdeleted file mode 100644 index 3728e33..0000000 --- a/static/webfonts/KaTeX_Main-Italic.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Main-Italic.woff2 b/static/webfonts/KaTeX_Main-Italic.woff2 Binary files differnew file mode 100644 index 0000000..b50920e --- /dev/null +++ b/static/webfonts/KaTeX_Main-Italic.woff2 diff --git a/static/webfonts/KaTeX_Main-Regular.woff b/static/webfonts/KaTeX_Main-Regular.woff Binary files differdeleted file mode 100644 index 5c681b1..0000000 --- a/static/webfonts/KaTeX_Main-Regular.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Main-Regular.woff2 b/static/webfonts/KaTeX_Main-Regular.woff2 Binary files differnew file mode 100644 index 0000000..eb24a7b --- /dev/null +++ b/static/webfonts/KaTeX_Main-Regular.woff2 diff --git a/static/webfonts/KaTeX_Math-BoldItalic.woff b/static/webfonts/KaTeX_Math-BoldItalic.woff Binary files differdeleted file mode 100644 index b1aebf3..0000000 --- a/static/webfonts/KaTeX_Math-BoldItalic.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Math-BoldItalic.woff2 b/static/webfonts/KaTeX_Math-BoldItalic.woff2 Binary files differnew file mode 100644 index 0000000..2965702 --- /dev/null +++ b/static/webfonts/KaTeX_Math-BoldItalic.woff2 diff --git a/static/webfonts/KaTeX_Math-Italic.woff b/static/webfonts/KaTeX_Math-Italic.woff Binary files differdeleted file mode 100644 index 3126ebe..0000000 --- a/static/webfonts/KaTeX_Math-Italic.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Math-Italic.woff2 b/static/webfonts/KaTeX_Math-Italic.woff2 Binary files differnew file mode 100644 index 0000000..215c143 --- /dev/null +++ b/static/webfonts/KaTeX_Math-Italic.woff2 diff --git a/static/webfonts/KaTeX_SansSerif-Bold.woff b/static/webfonts/KaTeX_SansSerif-Bold.woff Binary files differdeleted file mode 100644 index 42ee227..0000000 --- a/static/webfonts/KaTeX_SansSerif-Bold.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_SansSerif-Bold.woff2 b/static/webfonts/KaTeX_SansSerif-Bold.woff2 Binary files differnew file mode 100644 index 0000000..cfaa3bd --- /dev/null +++ b/static/webfonts/KaTeX_SansSerif-Bold.woff2 diff --git a/static/webfonts/KaTeX_SansSerif-Italic.woff b/static/webfonts/KaTeX_SansSerif-Italic.woff Binary files differdeleted file mode 100644 index b4c1660..0000000 --- a/static/webfonts/KaTeX_SansSerif-Italic.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_SansSerif-Italic.woff2 b/static/webfonts/KaTeX_SansSerif-Italic.woff2 Binary files differnew file mode 100644 index 0000000..349c06d --- /dev/null +++ b/static/webfonts/KaTeX_SansSerif-Italic.woff2 diff --git a/static/webfonts/KaTeX_SansSerif-Regular.woff b/static/webfonts/KaTeX_SansSerif-Regular.woff Binary files differdeleted file mode 100644 index b068a8e..0000000 --- a/static/webfonts/KaTeX_SansSerif-Regular.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_SansSerif-Regular.woff2 b/static/webfonts/KaTeX_SansSerif-Regular.woff2 Binary files differnew file mode 100644 index 0000000..a90eea8 --- /dev/null +++ b/static/webfonts/KaTeX_SansSerif-Regular.woff2 diff --git a/static/webfonts/KaTeX_Script-Regular.woff b/static/webfonts/KaTeX_Script-Regular.woff Binary files differdeleted file mode 100644 index fe4cb84..0000000 --- a/static/webfonts/KaTeX_Script-Regular.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Script-Regular.woff2 b/static/webfonts/KaTeX_Script-Regular.woff2 Binary files differnew file mode 100644 index 0000000..b3048fc --- /dev/null +++ b/static/webfonts/KaTeX_Script-Regular.woff2 diff --git a/static/webfonts/KaTeX_Size1-Regular.woff b/static/webfonts/KaTeX_Size1-Regular.woff Binary files differdeleted file mode 100644 index ae27c24..0000000 --- a/static/webfonts/KaTeX_Size1-Regular.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Size1-Regular.woff2 b/static/webfonts/KaTeX_Size1-Regular.woff2 Binary files differnew file mode 100644 index 0000000..c5a8462 --- /dev/null +++ b/static/webfonts/KaTeX_Size1-Regular.woff2 diff --git a/static/webfonts/KaTeX_Size2-Regular.woff b/static/webfonts/KaTeX_Size2-Regular.woff Binary files differdeleted file mode 100644 index 8285fed..0000000 --- a/static/webfonts/KaTeX_Size2-Regular.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Size2-Regular.woff2 b/static/webfonts/KaTeX_Size2-Regular.woff2 Binary files differnew file mode 100644 index 0000000..e1bccfe --- /dev/null +++ b/static/webfonts/KaTeX_Size2-Regular.woff2 diff --git a/static/webfonts/KaTeX_Size3-Regular.woff b/static/webfonts/KaTeX_Size3-Regular.woff Binary files differdeleted file mode 100644 index 03bb311..0000000 --- a/static/webfonts/KaTeX_Size3-Regular.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Size3-Regular.woff2 b/static/webfonts/KaTeX_Size3-Regular.woff2 Binary files differnew file mode 100644 index 0000000..249a286 --- /dev/null +++ b/static/webfonts/KaTeX_Size3-Regular.woff2 diff --git a/static/webfonts/KaTeX_Size4-Regular.woff b/static/webfonts/KaTeX_Size4-Regular.woff Binary files differdeleted file mode 100644 index 5c99d77..0000000 --- a/static/webfonts/KaTeX_Size4-Regular.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Size4-Regular.woff2 b/static/webfonts/KaTeX_Size4-Regular.woff2 Binary files differnew file mode 100644 index 0000000..680c130 --- /dev/null +++ b/static/webfonts/KaTeX_Size4-Regular.woff2 diff --git a/static/webfonts/KaTeX_Typewriter-Regular.woff b/static/webfonts/KaTeX_Typewriter-Regular.woff Binary files differdeleted file mode 100644 index ea5be72..0000000 --- a/static/webfonts/KaTeX_Typewriter-Regular.woff +++ /dev/null diff --git a/static/webfonts/KaTeX_Typewriter-Regular.woff2 b/static/webfonts/KaTeX_Typewriter-Regular.woff2 Binary files differnew file mode 100644 index 0000000..771f1af --- /dev/null +++ b/static/webfonts/KaTeX_Typewriter-Regular.woff2 diff --git a/static/webfonts/fa-brands-400.woff b/static/webfonts/fa-brands-400.woff Binary files differdeleted file mode 100644 index db70e73..0000000 --- a/static/webfonts/fa-brands-400.woff +++ /dev/null diff --git a/static/webfonts/fa-brands-400.woff2 b/static/webfonts/fa-brands-400.woff2 Binary files differnew file mode 100644 index 0000000..73c5c12 --- /dev/null +++ b/static/webfonts/fa-brands-400.woff2 diff --git a/static/webfonts/fa-regular-400.woff b/static/webfonts/fa-regular-400.woff Binary files differdeleted file mode 100644 index e9f54b1..0000000 --- a/static/webfonts/fa-regular-400.woff +++ /dev/null diff --git a/static/webfonts/fa-regular-400.woff2 b/static/webfonts/fa-regular-400.woff2 Binary files differnew file mode 100644 index 0000000..c9291c7 --- /dev/null +++ b/static/webfonts/fa-regular-400.woff2 diff --git a/static/webfonts/fa-solid-900.woff b/static/webfonts/fa-solid-900.woff Binary files differdeleted file mode 100644 index 73c1a4d..0000000 --- a/static/webfonts/fa-solid-900.woff +++ /dev/null diff --git a/static/webfonts/fa-solid-900.woff2 b/static/webfonts/fa-solid-900.woff2 Binary files differnew file mode 100644 index 0000000..c7bd59c --- /dev/null +++ b/static/webfonts/fa-solid-900.woff2 |