Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dataCobra/hugo-vitae.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md8
-rw-r--r--layouts/_default/terms.html2
-rw-r--r--layouts/partials/head.html4
-rw-r--r--layouts/partials/header.html4
-rw-r--r--static/css/all.css7657
-rw-r--r--static/css/katex.css70
-rw-r--r--static/js/auto-render.js10
-rw-r--r--static/js/katex.js2972
-rw-r--r--static/webfonts/KaTeX_AMS-Regular.woffbin36920 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_AMS-Regular.woff2bin0 -> 28076 bytes
-rw-r--r--static/webfonts/KaTeX_Caligraphic-Bold.woffbin9384 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Caligraphic-Bold.woff2bin0 -> 6912 bytes
-rw-r--r--static/webfonts/KaTeX_Caligraphic-Regular.woffbin9160 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Caligraphic-Regular.woff2bin0 -> 6908 bytes
-rw-r--r--static/webfonts/KaTeX_Fraktur-Bold.woffbin16216 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Fraktur-Bold.woff2bin0 -> 11348 bytes
-rw-r--r--static/webfonts/KaTeX_Fraktur-Regular.woffbin15884 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Fraktur-Regular.woff2bin0 -> 11316 bytes
-rw-r--r--static/webfonts/KaTeX_Main-Bold.woffbin35060 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Main-Bold.woff2bin0 -> 25324 bytes
-rw-r--r--static/webfonts/KaTeX_Main-BoldItalic.woffbin24504 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Main-BoldItalic.woff2bin0 -> 16780 bytes
-rw-r--r--static/webfonts/KaTeX_Main-Italic.woffbin25360 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Main-Italic.woff2bin0 -> 16988 bytes
-rw-r--r--static/webfonts/KaTeX_Main-Regular.woffbin37864 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Main-Regular.woff2bin0 -> 26272 bytes
-rw-r--r--static/webfonts/KaTeX_Math-BoldItalic.woffbin23988 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Math-BoldItalic.woff2bin0 -> 16400 bytes
-rw-r--r--static/webfonts/KaTeX_Math-Italic.woffbin24672 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Math-Italic.woff2bin0 -> 16440 bytes
-rw-r--r--static/webfonts/KaTeX_SansSerif-Bold.woffbin17988 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_SansSerif-Bold.woff2bin0 -> 12216 bytes
-rw-r--r--static/webfonts/KaTeX_SansSerif-Italic.woffbin17052 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_SansSerif-Italic.woff2bin0 -> 12028 bytes
-rw-r--r--static/webfonts/KaTeX_SansSerif-Regular.woffbin15724 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_SansSerif-Regular.woff2bin0 -> 10344 bytes
-rw-r--r--static/webfonts/KaTeX_Script-Regular.woffbin13000 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Script-Regular.woff2bin0 -> 9644 bytes
-rw-r--r--static/webfonts/KaTeX_Size1-Regular.woffbin6304 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Size1-Regular.woff2bin0 -> 5468 bytes
-rw-r--r--static/webfonts/KaTeX_Size2-Regular.woffbin6016 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Size2-Regular.woff2bin0 -> 5208 bytes
-rw-r--r--static/webfonts/KaTeX_Size3-Regular.woffbin4156 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Size3-Regular.woff2bin0 -> 3624 bytes
-rw-r--r--static/webfonts/KaTeX_Size4-Regular.woffbin5828 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Size4-Regular.woff2bin0 -> 4928 bytes
-rw-r--r--static/webfonts/KaTeX_Typewriter-Regular.woffbin19708 -> 0 bytes
-rw-r--r--static/webfonts/KaTeX_Typewriter-Regular.woff2bin0 -> 13568 bytes
-rw-r--r--static/webfonts/fa-brands-400.woffbin90060 -> 0 bytes
-rw-r--r--static/webfonts/fa-brands-400.woff2bin0 -> 104544 bytes
-rw-r--r--static/webfonts/fa-regular-400.woffbin16276 -> 0 bytes
-rw-r--r--static/webfonts/fa-regular-400.woff2bin0 -> 23900 bytes
-rw-r--r--static/webfonts/fa-solid-900.woffbin101652 -> 0 bytes
-rw-r--r--static/webfonts/fa-solid-900.woff2bin0 -> 126828 bytes
54 files changed, 6747 insertions, 3980 deletions
diff --git a/README.md b/README.md
index 52339d6..b429a73 100644
--- a/README.md
+++ b/README.md
@@ -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
deleted file mode 100644
index 9b82678..0000000
--- a/static/webfonts/KaTeX_AMS-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_AMS-Regular.woff2 b/static/webfonts/KaTeX_AMS-Regular.woff2
new file mode 100644
index 0000000..0acaaff
--- /dev/null
+++ b/static/webfonts/KaTeX_AMS-Regular.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Caligraphic-Bold.woff b/static/webfonts/KaTeX_Caligraphic-Bold.woff
deleted file mode 100644
index d0e5f82..0000000
--- a/static/webfonts/KaTeX_Caligraphic-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Caligraphic-Bold.woff2 b/static/webfonts/KaTeX_Caligraphic-Bold.woff2
new file mode 100644
index 0000000..f390922
--- /dev/null
+++ b/static/webfonts/KaTeX_Caligraphic-Bold.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Caligraphic-Regular.woff b/static/webfonts/KaTeX_Caligraphic-Regular.woff
deleted file mode 100644
index 325fa0a..0000000
--- a/static/webfonts/KaTeX_Caligraphic-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Caligraphic-Regular.woff2 b/static/webfonts/KaTeX_Caligraphic-Regular.woff2
new file mode 100644
index 0000000..75344a1
--- /dev/null
+++ b/static/webfonts/KaTeX_Caligraphic-Regular.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Fraktur-Bold.woff b/static/webfonts/KaTeX_Fraktur-Bold.woff
deleted file mode 100644
index 25a39ae..0000000
--- a/static/webfonts/KaTeX_Fraktur-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Fraktur-Bold.woff2 b/static/webfonts/KaTeX_Fraktur-Bold.woff2
new file mode 100644
index 0000000..395f28b
--- /dev/null
+++ b/static/webfonts/KaTeX_Fraktur-Bold.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Fraktur-Regular.woff b/static/webfonts/KaTeX_Fraktur-Regular.woff
deleted file mode 100644
index e042e7c..0000000
--- a/static/webfonts/KaTeX_Fraktur-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Fraktur-Regular.woff2 b/static/webfonts/KaTeX_Fraktur-Regular.woff2
new file mode 100644
index 0000000..735f694
--- /dev/null
+++ b/static/webfonts/KaTeX_Fraktur-Regular.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Main-Bold.woff b/static/webfonts/KaTeX_Main-Bold.woff
deleted file mode 100644
index 49ee886..0000000
--- a/static/webfonts/KaTeX_Main-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Main-Bold.woff2 b/static/webfonts/KaTeX_Main-Bold.woff2
new file mode 100644
index 0000000..ab2ad21
--- /dev/null
+++ b/static/webfonts/KaTeX_Main-Bold.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Main-BoldItalic.woff b/static/webfonts/KaTeX_Main-BoldItalic.woff
deleted file mode 100644
index d6ea5a6..0000000
--- a/static/webfonts/KaTeX_Main-BoldItalic.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Main-BoldItalic.woff2 b/static/webfonts/KaTeX_Main-BoldItalic.woff2
new file mode 100644
index 0000000..5931794
--- /dev/null
+++ b/static/webfonts/KaTeX_Main-BoldItalic.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Main-Italic.woff b/static/webfonts/KaTeX_Main-Italic.woff
deleted file mode 100644
index 3728e33..0000000
--- a/static/webfonts/KaTeX_Main-Italic.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Main-Italic.woff2 b/static/webfonts/KaTeX_Main-Italic.woff2
new file mode 100644
index 0000000..b50920e
--- /dev/null
+++ b/static/webfonts/KaTeX_Main-Italic.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Main-Regular.woff b/static/webfonts/KaTeX_Main-Regular.woff
deleted file mode 100644
index 5c681b1..0000000
--- a/static/webfonts/KaTeX_Main-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Main-Regular.woff2 b/static/webfonts/KaTeX_Main-Regular.woff2
new file mode 100644
index 0000000..eb24a7b
--- /dev/null
+++ b/static/webfonts/KaTeX_Main-Regular.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Math-BoldItalic.woff b/static/webfonts/KaTeX_Math-BoldItalic.woff
deleted file mode 100644
index b1aebf3..0000000
--- a/static/webfonts/KaTeX_Math-BoldItalic.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Math-BoldItalic.woff2 b/static/webfonts/KaTeX_Math-BoldItalic.woff2
new file mode 100644
index 0000000..2965702
--- /dev/null
+++ b/static/webfonts/KaTeX_Math-BoldItalic.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Math-Italic.woff b/static/webfonts/KaTeX_Math-Italic.woff
deleted file mode 100644
index 3126ebe..0000000
--- a/static/webfonts/KaTeX_Math-Italic.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Math-Italic.woff2 b/static/webfonts/KaTeX_Math-Italic.woff2
new file mode 100644
index 0000000..215c143
--- /dev/null
+++ b/static/webfonts/KaTeX_Math-Italic.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_SansSerif-Bold.woff b/static/webfonts/KaTeX_SansSerif-Bold.woff
deleted file mode 100644
index 42ee227..0000000
--- a/static/webfonts/KaTeX_SansSerif-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_SansSerif-Bold.woff2 b/static/webfonts/KaTeX_SansSerif-Bold.woff2
new file mode 100644
index 0000000..cfaa3bd
--- /dev/null
+++ b/static/webfonts/KaTeX_SansSerif-Bold.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_SansSerif-Italic.woff b/static/webfonts/KaTeX_SansSerif-Italic.woff
deleted file mode 100644
index b4c1660..0000000
--- a/static/webfonts/KaTeX_SansSerif-Italic.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_SansSerif-Italic.woff2 b/static/webfonts/KaTeX_SansSerif-Italic.woff2
new file mode 100644
index 0000000..349c06d
--- /dev/null
+++ b/static/webfonts/KaTeX_SansSerif-Italic.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_SansSerif-Regular.woff b/static/webfonts/KaTeX_SansSerif-Regular.woff
deleted file mode 100644
index b068a8e..0000000
--- a/static/webfonts/KaTeX_SansSerif-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_SansSerif-Regular.woff2 b/static/webfonts/KaTeX_SansSerif-Regular.woff2
new file mode 100644
index 0000000..a90eea8
--- /dev/null
+++ b/static/webfonts/KaTeX_SansSerif-Regular.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Script-Regular.woff b/static/webfonts/KaTeX_Script-Regular.woff
deleted file mode 100644
index fe4cb84..0000000
--- a/static/webfonts/KaTeX_Script-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Script-Regular.woff2 b/static/webfonts/KaTeX_Script-Regular.woff2
new file mode 100644
index 0000000..b3048fc
--- /dev/null
+++ b/static/webfonts/KaTeX_Script-Regular.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Size1-Regular.woff b/static/webfonts/KaTeX_Size1-Regular.woff
deleted file mode 100644
index ae27c24..0000000
--- a/static/webfonts/KaTeX_Size1-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Size1-Regular.woff2 b/static/webfonts/KaTeX_Size1-Regular.woff2
new file mode 100644
index 0000000..c5a8462
--- /dev/null
+++ b/static/webfonts/KaTeX_Size1-Regular.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Size2-Regular.woff b/static/webfonts/KaTeX_Size2-Regular.woff
deleted file mode 100644
index 8285fed..0000000
--- a/static/webfonts/KaTeX_Size2-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Size2-Regular.woff2 b/static/webfonts/KaTeX_Size2-Regular.woff2
new file mode 100644
index 0000000..e1bccfe
--- /dev/null
+++ b/static/webfonts/KaTeX_Size2-Regular.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Size3-Regular.woff b/static/webfonts/KaTeX_Size3-Regular.woff
deleted file mode 100644
index 03bb311..0000000
--- a/static/webfonts/KaTeX_Size3-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Size3-Regular.woff2 b/static/webfonts/KaTeX_Size3-Regular.woff2
new file mode 100644
index 0000000..249a286
--- /dev/null
+++ b/static/webfonts/KaTeX_Size3-Regular.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Size4-Regular.woff b/static/webfonts/KaTeX_Size4-Regular.woff
deleted file mode 100644
index 5c99d77..0000000
--- a/static/webfonts/KaTeX_Size4-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Size4-Regular.woff2 b/static/webfonts/KaTeX_Size4-Regular.woff2
new file mode 100644
index 0000000..680c130
--- /dev/null
+++ b/static/webfonts/KaTeX_Size4-Regular.woff2
Binary files differ
diff --git a/static/webfonts/KaTeX_Typewriter-Regular.woff b/static/webfonts/KaTeX_Typewriter-Regular.woff
deleted file mode 100644
index ea5be72..0000000
--- a/static/webfonts/KaTeX_Typewriter-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/KaTeX_Typewriter-Regular.woff2 b/static/webfonts/KaTeX_Typewriter-Regular.woff2
new file mode 100644
index 0000000..771f1af
--- /dev/null
+++ b/static/webfonts/KaTeX_Typewriter-Regular.woff2
Binary files differ
diff --git a/static/webfonts/fa-brands-400.woff b/static/webfonts/fa-brands-400.woff
deleted file mode 100644
index db70e73..0000000
--- a/static/webfonts/fa-brands-400.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/fa-brands-400.woff2 b/static/webfonts/fa-brands-400.woff2
new file mode 100644
index 0000000..73c5c12
--- /dev/null
+++ b/static/webfonts/fa-brands-400.woff2
Binary files differ
diff --git a/static/webfonts/fa-regular-400.woff b/static/webfonts/fa-regular-400.woff
deleted file mode 100644
index e9f54b1..0000000
--- a/static/webfonts/fa-regular-400.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/fa-regular-400.woff2 b/static/webfonts/fa-regular-400.woff2
new file mode 100644
index 0000000..c9291c7
--- /dev/null
+++ b/static/webfonts/fa-regular-400.woff2
Binary files differ
diff --git a/static/webfonts/fa-solid-900.woff b/static/webfonts/fa-solid-900.woff
deleted file mode 100644
index 73c1a4d..0000000
--- a/static/webfonts/fa-solid-900.woff
+++ /dev/null
Binary files differ
diff --git a/static/webfonts/fa-solid-900.woff2 b/static/webfonts/fa-solid-900.woff2
new file mode 100644
index 0000000..c7bd59c
--- /dev/null
+++ b/static/webfonts/fa-solid-900.woff2
Binary files differ