diff --git a/404.html b/404.html index 8eef15c..eff0e05 100644 --- a/404.html +++ b/404.html @@ -14,8 +14,8 @@ - - + + @@ -27,7 +27,7 @@ openairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/CODE_OF_CONDUCT.html b/CODE_OF_CONDUCT.html index 29a0eb9..46e1ada 100644 --- a/CODE_OF_CONDUCT.html +++ b/CODE_OF_CONDUCT.html @@ -1,5 +1,5 @@ -Contributor Covenant Code of Conduct • openairmaps +Contributor Covenant Code of Conduct • openairmaps Skip to contents @@ -7,7 +7,7 @@ openairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/CONTRIBUTING.html b/CONTRIBUTING.html index 172ae62..50edcdf 100644 --- a/CONTRIBUTING.html +++ b/CONTRIBUTING.html @@ -1,5 +1,5 @@ -Contributing to openairmaps • openairmaps +Contributing to openairmaps • openairmaps Skip to contents @@ -7,7 +7,7 @@ openairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/LICENSE.html b/LICENSE.html index ebae513..4ddd28f 100644 --- a/LICENSE.html +++ b/LICENSE.html @@ -1,5 +1,5 @@ -GNU General Public License • openairmaps +GNU General Public License • openairmaps Skip to contents @@ -7,7 +7,7 @@ openairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/articles/index.html b/articles/index.html index 88f1332..d605b05 100644 --- a/articles/index.html +++ b/articles/index.html @@ -1,5 +1,5 @@ -Articles • openairmaps +Articles • openairmaps Skip to contents @@ -7,7 +7,7 @@ openairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/articles/openairmaps.html b/articles/openairmaps.html index f21b2e3..9f92990 100644 --- a/articles/openairmaps.html +++ b/articles/openairmaps.html @@ -14,8 +14,8 @@ - - + + @@ -26,7 +26,7 @@ openairmaps - 0.9.0.9005 + 0.9.0.9006 @@ -123,7 +123,7 @@ Acess UK Monitoring Da year = 2020, control = "variable") - + Polar Plot Maps diff --git a/articles/openairmaps_files/figure-html/polarstatic-1.png b/articles/openairmaps_files/figure-html/polarstatic-1.png index cf56981..d905d96 100644 Binary files a/articles/openairmaps_files/figure-html/polarstatic-1.png and b/articles/openairmaps_files/figure-html/polarstatic-1.png differ diff --git a/authors.html b/authors.html index 6882378..78753f4 100644 --- a/authors.html +++ b/authors.html @@ -1,5 +1,5 @@ -Authors and Citation • openairmaps +Authors and Citation • openairmaps Skip to contents @@ -7,7 +7,7 @@ openairmaps - 0.9.0.9005 + 0.9.0.9006 @@ -51,14 +51,14 @@ Citation Davison J, Carslaw D (2024). openairmaps: Create Maps of Air Pollution Data. -R package version 0.9.0.9005, +R package version 0.9.0.9006, https://github.com/davidcarslaw/openairmaps, https://davidcarslaw.github.io/openairmaps/. @Manual{, title = {openairmaps: Create Maps of Air Pollution Data}, author = {Jack Davison and David Carslaw}, year = {2024}, - note = {R package version 0.9.0.9005, + note = {R package version 0.9.0.9006, https://github.com/davidcarslaw/openairmaps}, url = {https://davidcarslaw.github.io/openairmaps/}, } diff --git a/deps/data-deps.txt b/deps/data-deps.txt index 8aa49e2..ca4dfd9 100644 --- a/deps/data-deps.txt +++ b/deps/data-deps.txt @@ -2,8 +2,8 @@ - - + + diff --git a/deps/font-awesome-6.5.2/css/all.css b/deps/font-awesome-6.5.2/css/all.css new file mode 100644 index 0000000..151dd57 --- /dev/null +++ b/deps/font-awesome-6.5.2/css/all.css @@ -0,0 +1,8028 @@ +/*! + * Font Awesome Free 6.5.2 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 2024 Fonticons, Inc. + */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, +.fa-classic, +.fa-sharp, +.fas, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.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: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + 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; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + 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, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -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, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -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, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -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, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -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, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -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, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -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-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -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; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 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); } } + +@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% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, 0)); + transform: rotate(var(--fa-rotate-angle, 0)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + 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-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-table-cells-column-lock::before { + content: "\e678"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.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-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.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-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.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-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.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-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-table-cells-row-lock::before { + content: "\e67a"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.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-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.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-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.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-style-family-brands: 'Font Awesome 6 Brands'; + --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"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-pixiv:before { + content: "\e640"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-jxl:before { + content: "\e67b"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-brave:before { + content: "\e63c"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-opensuse:before { + content: "\e62b"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-square-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-square-letterboxd:before { + content: "\e62e"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-shoelace:before { + content: "\e60c"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-google-scholar:before { + content: "\e63b"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-signal-messenger:before { + content: "\e663"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-mintbit:before { + content: "\e62f"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-brave-reverse:before { + content: "\e63d"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-web-awesome:before { + content: "\e682"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-letterboxd:before { + content: "\e62d"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-square-web-awesome-stroke:before { + content: "\e684"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-upwork:before { + content: "\e641"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-square-upwork:before { + content: "\e67c"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-square-web-awesome:before { + content: "\e683"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-bluesky:before { + content: "\e671"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-webflow:before { + content: "\e65c"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +.far, +.fa-regular { + font-weight: 400; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 900; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); } diff --git a/deps/font-awesome-6.5.2/css/all.min.css b/deps/font-awesome-6.5.2/css/all.min.css new file mode 100644 index 0000000..269bcee --- /dev/null +++ b/deps/font-awesome-6.5.2/css/all.min.css @@ -0,0 +1,9 @@ +/*! + * Font Awesome Free 6.5.2 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 2024 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-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,0s);animation-delay:var(--fa-animation-delay,0s);-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(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-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(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-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)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-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(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-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-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-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-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-beat-fade,.fa-bounce,.fa-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;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration: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) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.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%,to{opacity:var(--fa-beat-fade-opacity,.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%,to{-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%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,0));transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} + +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-table-cells-column-lock:before{content:"\e678"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-table-cells-row-lock:before{content:"\e67a"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.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}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--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"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-jxl:before{content:"\e67b"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before,.fa-square-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-square-letterboxd:before{content:"\e62e"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-shoelace:before{content:"\e60c"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-google-scholar:before{content:"\e63b"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-signal-messenger:before{content:"\e663"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-mintbit:before{content:"\e62f"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-brave-reverse:before{content:"\e63d"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-web-awesome:before{content:"\e682"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-letterboxd:before{content:"\e62d"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-square-web-awesome-stroke:before{content:"\e684"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-upwork:before{content:"\e641"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-square-upwork:before{content:"\e67c"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-square-web-awesome:before{content:"\e683"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-bluesky:before{content:"\e671"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-webflow:before{content:"\e65c"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); } \ No newline at end of file diff --git a/deps/font-awesome-6.5.2/css/v4-shims.css b/deps/font-awesome-6.5.2/css/v4-shims.css new file mode 100644 index 0000000..ea60ea4 --- /dev/null +++ b/deps/font-awesome-6.5.2/css/v4-shims.css @@ -0,0 +1,2194 @@ +/*! + * Font Awesome Free 6.5.2 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 2024 Fonticons, Inc. + */ +.fa.fa-glass:before { + content: "\f000"; } + +.fa.fa-envelope-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-envelope-o:before { + content: "\f0e0"; } + +.fa.fa-star-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-o:before { + content: "\f005"; } + +.fa.fa-remove:before { + content: "\f00d"; } + +.fa.fa-close:before { + content: "\f00d"; } + +.fa.fa-gear:before { + content: "\f013"; } + +.fa.fa-trash-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-trash-o:before { + content: "\f2ed"; } + +.fa.fa-home:before { + content: "\f015"; } + +.fa.fa-file-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-o:before { + content: "\f15b"; } + +.fa.fa-clock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-clock-o:before { + content: "\f017"; } + +.fa.fa-arrow-circle-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-down:before { + content: "\f358"; } + +.fa.fa-arrow-circle-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-up:before { + content: "\f35b"; } + +.fa.fa-play-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-play-circle-o:before { + content: "\f144"; } + +.fa.fa-repeat:before { + content: "\f01e"; } + +.fa.fa-rotate-right:before { + content: "\f01e"; } + +.fa.fa-refresh:before { + content: "\f021"; } + +.fa.fa-list-alt { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-list-alt:before { + content: "\f022"; } + +.fa.fa-dedent:before { + content: "\f03b"; } + +.fa.fa-video-camera:before { + content: "\f03d"; } + +.fa.fa-picture-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-picture-o:before { + content: "\f03e"; } + +.fa.fa-photo { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-photo:before { + content: "\f03e"; } + +.fa.fa-image { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-image:before { + content: "\f03e"; } + +.fa.fa-map-marker:before { + content: "\f3c5"; } + +.fa.fa-pencil-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-pencil-square-o:before { + content: "\f044"; } + +.fa.fa-edit { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-edit:before { + content: "\f044"; } + +.fa.fa-share-square-o:before { + content: "\f14d"; } + +.fa.fa-check-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-check-square-o:before { + content: "\f14a"; } + +.fa.fa-arrows:before { + content: "\f0b2"; } + +.fa.fa-times-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-circle-o:before { + content: "\f057"; } + +.fa.fa-check-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-check-circle-o:before { + content: "\f058"; } + +.fa.fa-mail-forward:before { + content: "\f064"; } + +.fa.fa-expand:before { + content: "\f424"; } + +.fa.fa-compress:before { + content: "\f422"; } + +.fa.fa-eye { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-eye-slash { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-warning:before { + content: "\f071"; } + +.fa.fa-calendar:before { + content: "\f073"; } + +.fa.fa-arrows-v:before { + content: "\f338"; } + +.fa.fa-arrows-h:before { + content: "\f337"; } + +.fa.fa-bar-chart:before { + content: "\e0e3"; } + +.fa.fa-bar-chart-o:before { + content: "\e0e3"; } + +.fa.fa-twitter-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-twitter-square:before { + content: "\f081"; } + +.fa.fa-facebook-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-square:before { + content: "\f082"; } + +.fa.fa-gears:before { + content: "\f085"; } + +.fa.fa-thumbs-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-up:before { + content: "\f164"; } + +.fa.fa-thumbs-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-down:before { + content: "\f165"; } + +.fa.fa-heart-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-heart-o:before { + content: "\f004"; } + +.fa.fa-sign-out:before { + content: "\f2f5"; } + +.fa.fa-linkedin-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linkedin-square:before { + content: "\f08c"; } + +.fa.fa-thumb-tack:before { + content: "\f08d"; } + +.fa.fa-external-link:before { + content: "\f35d"; } + +.fa.fa-sign-in:before { + content: "\f2f6"; } + +.fa.fa-github-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-github-square:before { + content: "\f092"; } + +.fa.fa-lemon-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-lemon-o:before { + content: "\f094"; } + +.fa.fa-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-square-o:before { + content: "\f0c8"; } + +.fa.fa-bookmark-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bookmark-o:before { + content: "\f02e"; } + +.fa.fa-twitter { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook:before { + content: "\f39e"; } + +.fa.fa-facebook-f { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-f:before { + content: "\f39e"; } + +.fa.fa-github { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-credit-card { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-feed:before { + content: "\f09e"; } + +.fa.fa-hdd-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hdd-o:before { + content: "\f0a0"; } + +.fa.fa-hand-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-right:before { + content: "\f0a4"; } + +.fa.fa-hand-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-left:before { + content: "\f0a5"; } + +.fa.fa-hand-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-up:before { + content: "\f0a6"; } + +.fa.fa-hand-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-down:before { + content: "\f0a7"; } + +.fa.fa-globe:before { + content: "\f57d"; } + +.fa.fa-tasks:before { + content: "\f828"; } + +.fa.fa-arrows-alt:before { + content: "\f31e"; } + +.fa.fa-group:before { + content: "\f0c0"; } + +.fa.fa-chain:before { + content: "\f0c1"; } + +.fa.fa-cut:before { + content: "\f0c4"; } + +.fa.fa-files-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-files-o:before { + content: "\f0c5"; } + +.fa.fa-floppy-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-floppy-o:before { + content: "\f0c7"; } + +.fa.fa-save { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-save:before { + content: "\f0c7"; } + +.fa.fa-navicon:before { + content: "\f0c9"; } + +.fa.fa-reorder:before { + content: "\f0c9"; } + +.fa.fa-magic:before { + content: "\e2ca"; } + +.fa.fa-pinterest { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa.fa-google-plus-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa.fa-google-plus { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus:before { + content: "\f0d5"; } + +.fa.fa-money:before { + content: "\f3d1"; } + +.fa.fa-unsorted:before { + content: "\f0dc"; } + +.fa.fa-sort-desc:before { + content: "\f0dd"; } + +.fa.fa-sort-asc:before { + content: "\f0de"; } + +.fa.fa-linkedin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linkedin:before { + content: "\f0e1"; } + +.fa.fa-rotate-left:before { + content: "\f0e2"; } + +.fa.fa-legal:before { + content: "\f0e3"; } + +.fa.fa-tachometer:before { + content: "\f625"; } + +.fa.fa-dashboard:before { + content: "\f625"; } + +.fa.fa-comment-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-comment-o:before { + content: "\f075"; } + +.fa.fa-comments-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-comments-o:before { + content: "\f086"; } + +.fa.fa-flash:before { + content: "\f0e7"; } + +.fa.fa-clipboard:before { + content: "\f0ea"; } + +.fa.fa-lightbulb-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-lightbulb-o:before { + content: "\f0eb"; } + +.fa.fa-exchange:before { + content: "\f362"; } + +.fa.fa-cloud-download:before { + content: "\f0ed"; } + +.fa.fa-cloud-upload:before { + content: "\f0ee"; } + +.fa.fa-bell-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bell-o:before { + content: "\f0f3"; } + +.fa.fa-cutlery:before { + content: "\f2e7"; } + +.fa.fa-file-text-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-text-o:before { + content: "\f15c"; } + +.fa.fa-building-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-building-o:before { + content: "\f1ad"; } + +.fa.fa-hospital-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hospital-o:before { + content: "\f0f8"; } + +.fa.fa-tablet:before { + content: "\f3fa"; } + +.fa.fa-mobile:before { + content: "\f3cd"; } + +.fa.fa-mobile-phone:before { + content: "\f3cd"; } + +.fa.fa-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-circle-o:before { + content: "\f111"; } + +.fa.fa-mail-reply:before { + content: "\f3e5"; } + +.fa.fa-github-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-folder-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-folder-o:before { + content: "\f07b"; } + +.fa.fa-folder-open-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-folder-open-o:before { + content: "\f07c"; } + +.fa.fa-smile-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-smile-o:before { + content: "\f118"; } + +.fa.fa-frown-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-frown-o:before { + content: "\f119"; } + +.fa.fa-meh-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-meh-o:before { + content: "\f11a"; } + +.fa.fa-keyboard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-keyboard-o:before { + content: "\f11c"; } + +.fa.fa-flag-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-flag-o:before { + content: "\f024"; } + +.fa.fa-mail-reply-all:before { + content: "\f122"; } + +.fa.fa-star-half-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-o:before { + content: "\f5c0"; } + +.fa.fa-star-half-empty { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-empty:before { + content: "\f5c0"; } + +.fa.fa-star-half-full { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-full:before { + content: "\f5c0"; } + +.fa.fa-code-fork:before { + content: "\f126"; } + +.fa.fa-chain-broken:before { + content: "\f127"; } + +.fa.fa-unlink:before { + content: "\f127"; } + +.fa.fa-calendar-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-o:before { + content: "\f133"; } + +.fa.fa-maxcdn { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-html5 { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-css3 { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-unlock-alt:before { + content: "\f09c"; } + +.fa.fa-minus-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-minus-square-o:before { + content: "\f146"; } + +.fa.fa-level-up:before { + content: "\f3bf"; } + +.fa.fa-level-down:before { + content: "\f3be"; } + +.fa.fa-pencil-square:before { + content: "\f14b"; } + +.fa.fa-external-link-square:before { + content: "\f360"; } + +.fa.fa-compass { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down:before { + content: "\f150"; } + +.fa.fa-toggle-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-down:before { + content: "\f150"; } + +.fa.fa-caret-square-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-up:before { + content: "\f151"; } + +.fa.fa-toggle-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-up:before { + content: "\f151"; } + +.fa.fa-caret-square-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-right:before { + content: "\f152"; } + +.fa.fa-toggle-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-right:before { + content: "\f152"; } + +.fa.fa-eur:before { + content: "\f153"; } + +.fa.fa-euro:before { + content: "\f153"; } + +.fa.fa-gbp:before { + content: "\f154"; } + +.fa.fa-usd:before { + content: "\24"; } + +.fa.fa-dollar:before { + content: "\24"; } + +.fa.fa-inr:before { + content: "\e1bc"; } + +.fa.fa-rupee:before { + content: "\e1bc"; } + +.fa.fa-jpy:before { + content: "\f157"; } + +.fa.fa-cny:before { + content: "\f157"; } + +.fa.fa-rmb:before { + content: "\f157"; } + +.fa.fa-yen:before { + content: "\f157"; } + +.fa.fa-rub:before { + content: "\f158"; } + +.fa.fa-ruble:before { + content: "\f158"; } + +.fa.fa-rouble:before { + content: "\f158"; } + +.fa.fa-krw:before { + content: "\f159"; } + +.fa.fa-won:before { + content: "\f159"; } + +.fa.fa-btc { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin:before { + content: "\f15a"; } + +.fa.fa-file-text:before { + content: "\f15c"; } + +.fa.fa-sort-alpha-asc:before { + content: "\f15d"; } + +.fa.fa-sort-alpha-desc:before { + content: "\f881"; } + +.fa.fa-sort-amount-asc:before { + content: "\f884"; } + +.fa.fa-sort-amount-desc:before { + content: "\f160"; } + +.fa.fa-sort-numeric-asc:before { + content: "\f162"; } + +.fa.fa-sort-numeric-desc:before { + content: "\f886"; } + +.fa.fa-youtube-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-youtube-square:before { + content: "\f431"; } + +.fa.fa-youtube { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing-square:before { + content: "\f169"; } + +.fa.fa-youtube-play { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-youtube-play:before { + content: "\f167"; } + +.fa.fa-dropbox { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stack-overflow { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-instagram { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-flickr { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-adn { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square:before { + content: "\f171"; } + +.fa.fa-tumblr { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square:before { + content: "\f174"; } + +.fa.fa-long-arrow-down:before { + content: "\f309"; } + +.fa.fa-long-arrow-up:before { + content: "\f30c"; } + +.fa.fa-long-arrow-left:before { + content: "\f30a"; } + +.fa.fa-long-arrow-right:before { + content: "\f30b"; } + +.fa.fa-apple { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-windows { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-android { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linux { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-dribbble { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-skype { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-foursquare { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-trello { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gratipay { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gittip { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gittip:before { + content: "\f184"; } + +.fa.fa-sun-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sun-o:before { + content: "\f185"; } + +.fa.fa-moon-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-moon-o:before { + content: "\f186"; } + +.fa.fa-vk { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-weibo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-renren { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pagelines { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stack-exchange { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right:before { + content: "\f35a"; } + +.fa.fa-arrow-circle-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-left:before { + content: "\f359"; } + +.fa.fa-caret-square-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-left:before { + content: "\f191"; } + +.fa.fa-toggle-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-left:before { + content: "\f191"; } + +.fa.fa-dot-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-dot-circle-o:before { + content: "\f192"; } + +.fa.fa-vimeo-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo-square:before { + content: "\f194"; } + +.fa.fa-try:before { + content: "\e2bb"; } + +.fa.fa-turkish-lira:before { + content: "\e2bb"; } + +.fa.fa-plus-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-plus-square-o:before { + content: "\f0fe"; } + +.fa.fa-slack { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wordpress { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-openid { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-institution:before { + content: "\f19c"; } + +.fa.fa-bank:before { + content: "\f19c"; } + +.fa.fa-mortar-board:before { + content: "\f19d"; } + +.fa.fa-yahoo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square:before { + content: "\f1a2"; } + +.fa.fa-stumbleupon-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stumbleupon { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-delicious { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-digg { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-pp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-drupal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-joomla { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance-square:before { + content: "\f1b5"; } + +.fa.fa-steam { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-steam-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-steam-square:before { + content: "\f1b7"; } + +.fa.fa-automobile:before { + content: "\f1b9"; } + +.fa.fa-cab:before { + content: "\f1ba"; } + +.fa.fa-spotify { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-deviantart { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-soundcloud { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-file-pdf-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-pdf-o:before { + content: "\f1c1"; } + +.fa.fa-file-word-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-word-o:before { + content: "\f1c2"; } + +.fa.fa-file-excel-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-excel-o:before { + content: "\f1c3"; } + +.fa.fa-file-powerpoint-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-powerpoint-o:before { + content: "\f1c4"; } + +.fa.fa-file-image-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-image-o:before { + content: "\f1c5"; } + +.fa.fa-file-photo-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-photo-o:before { + content: "\f1c5"; } + +.fa.fa-file-picture-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-picture-o:before { + content: "\f1c5"; } + +.fa.fa-file-archive-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-archive-o:before { + content: "\f1c6"; } + +.fa.fa-file-zip-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-zip-o:before { + content: "\f1c6"; } + +.fa.fa-file-audio-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-audio-o:before { + content: "\f1c7"; } + +.fa.fa-file-sound-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-sound-o:before { + content: "\f1c7"; } + +.fa.fa-file-video-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-video-o:before { + content: "\f1c8"; } + +.fa.fa-file-movie-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-movie-o:before { + content: "\f1c8"; } + +.fa.fa-file-code-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-code-o:before { + content: "\f1c9"; } + +.fa.fa-vine { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-codepen { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-jsfiddle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-life-bouy:before { + content: "\f1cd"; } + +.fa.fa-life-buoy:before { + content: "\f1cd"; } + +.fa.fa-life-saver:before { + content: "\f1cd"; } + +.fa.fa-support:before { + content: "\f1cd"; } + +.fa.fa-circle-o-notch:before { + content: "\f1ce"; } + +.fa.fa-rebel { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ra { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ra:before { + content: "\f1d0"; } + +.fa.fa-resistance { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-resistance:before { + content: "\f1d0"; } + +.fa.fa-empire { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ge { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ge:before { + content: "\f1d1"; } + +.fa.fa-git-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-git-square:before { + content: "\f1d2"; } + +.fa.fa-git { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-hacker-news { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square:before { + content: "\f1d4"; } + +.fa.fa-yc-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc-square:before { + content: "\f1d4"; } + +.fa.fa-tencent-weibo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-qq { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-weixin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wechat { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wechat:before { + content: "\f1d7"; } + +.fa.fa-send:before { + content: "\f1d8"; } + +.fa.fa-paper-plane-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-paper-plane-o:before { + content: "\f1d8"; } + +.fa.fa-send-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-send-o:before { + content: "\f1d8"; } + +.fa.fa-circle-thin { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-circle-thin:before { + content: "\f111"; } + +.fa.fa-header:before { + content: "\f1dc"; } + +.fa.fa-futbol-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-futbol-o:before { + content: "\f1e3"; } + +.fa.fa-soccer-ball-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-soccer-ball-o:before { + content: "\f1e3"; } + +.fa.fa-slideshare { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-twitch { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yelp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-newspaper-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-newspaper-o:before { + content: "\f1ea"; } + +.fa.fa-paypal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-wallet { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-visa { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-mastercard { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-discover { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-amex { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-paypal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-stripe { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bell-slash-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bell-slash-o:before { + content: "\f1f6"; } + +.fa.fa-trash:before { + content: "\f2ed"; } + +.fa.fa-copyright { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-eyedropper:before { + content: "\f1fb"; } + +.fa.fa-area-chart:before { + content: "\f1fe"; } + +.fa.fa-pie-chart:before { + content: "\f200"; } + +.fa.fa-line-chart:before { + content: "\f201"; } + +.fa.fa-lastfm { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square:before { + content: "\f203"; } + +.fa.fa-ioxhost { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-angellist { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-cc:before { + content: "\f20a"; } + +.fa.fa-ils:before { + content: "\f20b"; } + +.fa.fa-shekel:before { + content: "\f20b"; } + +.fa.fa-sheqel:before { + content: "\f20b"; } + +.fa.fa-buysellads { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-connectdevelop { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-dashcube { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-forumbee { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-leanpub { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-sellsy { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-shirtsinbulk { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-simplybuilt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-skyatlas { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-diamond { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-diamond:before { + content: "\f3a5"; } + +.fa.fa-transgender:before { + content: "\f224"; } + +.fa.fa-intersex:before { + content: "\f224"; } + +.fa.fa-transgender-alt:before { + content: "\f225"; } + +.fa.fa-facebook-official { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-official:before { + content: "\f09a"; } + +.fa.fa-pinterest-p { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-whatsapp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-hotel:before { + content: "\f236"; } + +.fa.fa-viacoin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-medium { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc:before { + content: "\f23b"; } + +.fa.fa-optin-monster { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-opencart { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-expeditedssl { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-battery-4:before { + content: "\f240"; } + +.fa.fa-battery:before { + content: "\f240"; } + +.fa.fa-battery-3:before { + content: "\f241"; } + +.fa.fa-battery-2:before { + content: "\f242"; } + +.fa.fa-battery-1:before { + content: "\f243"; } + +.fa.fa-battery-0:before { + content: "\f244"; } + +.fa.fa-object-group { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-object-ungroup { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o:before { + content: "\f249"; } + +.fa.fa-cc-jcb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-diners-club { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-clone { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hourglass-o:before { + content: "\f254"; } + +.fa.fa-hourglass-1:before { + content: "\f251"; } + +.fa.fa-hourglass-2:before { + content: "\f252"; } + +.fa.fa-hourglass-3:before { + content: "\f253"; } + +.fa.fa-hand-rock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-rock-o:before { + content: "\f255"; } + +.fa.fa-hand-grab-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-grab-o:before { + content: "\f255"; } + +.fa.fa-hand-paper-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-paper-o:before { + content: "\f256"; } + +.fa.fa-hand-stop-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-stop-o:before { + content: "\f256"; } + +.fa.fa-hand-scissors-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-scissors-o:before { + content: "\f257"; } + +.fa.fa-hand-lizard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-lizard-o:before { + content: "\f258"; } + +.fa.fa-hand-spock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-spock-o:before { + content: "\f259"; } + +.fa.fa-hand-pointer-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-pointer-o:before { + content: "\f25a"; } + +.fa.fa-hand-peace-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-peace-o:before { + content: "\f25b"; } + +.fa.fa-registered { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-creative-commons { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gg { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gg-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa.fa-get-pocket { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wikipedia-w { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-safari { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-chrome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-firefox { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-opera { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-internet-explorer { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-television:before { + content: "\f26c"; } + +.fa.fa-contao { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-500px { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-amazon { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-calendar-plus-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-plus-o:before { + content: "\f271"; } + +.fa.fa-calendar-minus-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-minus-o:before { + content: "\f272"; } + +.fa.fa-calendar-times-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-times-o:before { + content: "\f273"; } + +.fa.fa-calendar-check-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-check-o:before { + content: "\f274"; } + +.fa.fa-map-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-map-o:before { + content: "\f279"; } + +.fa.fa-commenting:before { + content: "\f4ad"; } + +.fa.fa-commenting-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-commenting-o:before { + content: "\f4ad"; } + +.fa.fa-houzz { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo:before { + content: "\f27d"; } + +.fa.fa-black-tie { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fonticons { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-alien { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-edge { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-credit-card-alt:before { + content: "\f09d"; } + +.fa.fa-codiepie { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-modx { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fort-awesome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-usb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-product-hunt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-mixcloud { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-scribd { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pause-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-pause-circle-o:before { + content: "\f28b"; } + +.fa.fa-stop-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-stop-circle-o:before { + content: "\f28d"; } + +.fa.fa-bluetooth { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bluetooth-b { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gitlab { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpbeginner { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpforms { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-envira { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt:before { + content: "\f368"; } + +.fa.fa-question-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-question-circle-o:before { + content: "\f059"; } + +.fa.fa-volume-control-phone:before { + content: "\f2a0"; } + +.fa.fa-asl-interpreting:before { + content: "\f2a3"; } + +.fa.fa-deafness:before { + content: "\f2a4"; } + +.fa.fa-hard-of-hearing:before { + content: "\f2a4"; } + +.fa.fa-glide { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-glide-g { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-signing:before { + content: "\f2a7"; } + +.fa.fa-viadeo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa.fa-snapchat { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa.fa-snapchat-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa.fa-pied-piper { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-first-order { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yoast { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-themeisle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official:before { + content: "\f2b3"; } + +.fa.fa-google-plus-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-circle:before { + content: "\f2b3"; } + +.fa.fa-font-awesome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fa { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fa:before { + content: "\f2b4"; } + +.fa.fa-handshake-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-handshake-o:before { + content: "\f2b5"; } + +.fa.fa-envelope-open-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-envelope-open-o:before { + content: "\f2b6"; } + +.fa.fa-linode { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-address-book-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-address-book-o:before { + content: "\f2b9"; } + +.fa.fa-vcard:before { + content: "\f2bb"; } + +.fa.fa-address-card-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-address-card-o:before { + content: "\f2bb"; } + +.fa.fa-vcard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-vcard-o:before { + content: "\f2bb"; } + +.fa.fa-user-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-user-circle-o:before { + content: "\f2bd"; } + +.fa.fa-user-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-user-o:before { + content: "\f007"; } + +.fa.fa-id-badge { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-drivers-license:before { + content: "\f2c2"; } + +.fa.fa-id-card-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-id-card-o:before { + content: "\f2c2"; } + +.fa.fa-drivers-license-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-drivers-license-o:before { + content: "\f2c2"; } + +.fa.fa-quora { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-free-code-camp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-telegram { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-thermometer-4:before { + content: "\f2c7"; } + +.fa.fa-thermometer:before { + content: "\f2c7"; } + +.fa.fa-thermometer-3:before { + content: "\f2c8"; } + +.fa.fa-thermometer-2:before { + content: "\f2c9"; } + +.fa.fa-thermometer-1:before { + content: "\f2ca"; } + +.fa.fa-thermometer-0:before { + content: "\f2cb"; } + +.fa.fa-bathtub:before { + content: "\f2cd"; } + +.fa.fa-s15:before { + content: "\f2cd"; } + +.fa.fa-window-maximize { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-window-restore { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle:before { + content: "\f410"; } + +.fa.fa-window-close-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-window-close-o:before { + content: "\f410"; } + +.fa.fa-times-rectangle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle-o:before { + content: "\f410"; } + +.fa.fa-bandcamp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-grav { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-etsy { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-imdb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ravelry { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-eercast { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-eercast:before { + content: "\f2da"; } + +.fa.fa-snowflake-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-snowflake-o:before { + content: "\f2dc"; } + +.fa.fa-superpowers { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpexplorer { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-meetup { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } diff --git a/deps/font-awesome-6.5.2/css/v4-shims.min.css b/deps/font-awesome-6.5.2/css/v4-shims.min.css new file mode 100644 index 0000000..09baf5f --- /dev/null +++ b/deps/font-awesome-6.5.2/css/v4-shims.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.2 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 2024 Fonticons, Inc. + */ +.fa.fa-glass:before{content:"\f000"}.fa.fa-envelope-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-star-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-home:before{content:"\f015"}.fa.fa-file-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-list-alt:before{content:"\f022"}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-edit{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-edit:before{content:"\f044"}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart-o:before,.fa.fa-bar-chart:before{content:"\e0e3"}.fa.fa-twitter-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-twitter-square:before{content:"\f081"}.fa.fa-facebook-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-square:before{content:"\f082"}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-github-square:before{content:"\f092"}.fa.fa-lemon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-globe:before{content:"\f57d"}.fa.fa-tasks:before{content:"\f828"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-cut:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-save{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-save:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-magic:before{content:"\e2ca"}.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pinterest-square:before{content:"\f0d3"}.fa.fa-google-plus-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-square:before{content:"\f0d4"}.fa.fa-google-plus{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f625"}.fa.fa-comment-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard:before{content:"\f0ea"}.fa.fa-lightbulb-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f0ed"}.fa.fa-cloud-upload:before{content:"\f0ee"}.fa.fa-bell-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f5c0"}.fa.fa-star-half-empty{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f5c0"}.fa.fa-star-half-full{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f5c0"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before,.fa.fa-unlink:before{content:"\f127"}.fa.fa-calendar-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-unlock-alt:before{content:"\f09c"}.fa.fa-minus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\24"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\e1bc"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f884"}.fa.fa-sort-amount-desc:before{content:"\f160"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-youtube-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-square:before{content:"\f431"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-xing-square:before{content:"\f169"}.fa.fa-youtube-play{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-tumblr-square:before{content:"\f174"}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo-square:before{content:"\f194"}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\e2bb"}.fa.fa-plus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-google,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-yahoo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-reddit-square:before{content:"\f1a2"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-behance-square:before{content:"\f1b5"}.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-steam-square:before{content:"\f1b7"}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-life-bouy:before,.fa.fa-life-buoy:before,.fa.fa-life-saver:before,.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-git-square:before{content:"\f1d2"}.fa.fa-git,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-futbol-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-lastfm-square:before{content:"\f203"}.fa.fa-angellist,.fa.fa-ioxhost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before,.fa.fa-transgender:before{content:"\f224"}.fa.fa-transgender-alt:before{content:"\f225"}.fa.fa-facebook-official{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-clone{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-creative-commons,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-odnoklassniki-square:before{content:"\f264"}.fa.fa-chrome,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-internet-explorer,.fa.fa-opera,.fa.fa-safari,.fa.fa-wikipedia-w{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-viadeo,.fa.fa-viadeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-viadeo-square:before{content:"\f2aa"}.fa.fa-snapchat,.fa.fa-snapchat-ghost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-ghost:before{content:"\f2ab"}.fa.fa-snapchat-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-square:before{content:"\f2ad"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-themeisle,.fa.fa-yoast{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-meetup,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 6 Brands";font-weight:400} \ No newline at end of file diff --git a/deps/font-awesome-6.5.2/webfonts/fa-brands-400.ttf b/deps/font-awesome-6.5.2/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000..1fbb1f7 Binary files /dev/null and b/deps/font-awesome-6.5.2/webfonts/fa-brands-400.ttf differ diff --git a/deps/font-awesome-6.5.2/webfonts/fa-brands-400.woff2 b/deps/font-awesome-6.5.2/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000..5d28021 Binary files /dev/null and b/deps/font-awesome-6.5.2/webfonts/fa-brands-400.woff2 differ diff --git a/deps/font-awesome-6.5.2/webfonts/fa-regular-400.ttf b/deps/font-awesome-6.5.2/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000..549d68d Binary files /dev/null and b/deps/font-awesome-6.5.2/webfonts/fa-regular-400.ttf differ diff --git a/deps/font-awesome-6.5.2/webfonts/fa-regular-400.woff2 b/deps/font-awesome-6.5.2/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000..18400d7 Binary files /dev/null and b/deps/font-awesome-6.5.2/webfonts/fa-regular-400.woff2 differ diff --git a/deps/font-awesome-6.5.2/webfonts/fa-solid-900.ttf b/deps/font-awesome-6.5.2/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000..bb2a869 Binary files /dev/null and b/deps/font-awesome-6.5.2/webfonts/fa-solid-900.ttf differ diff --git a/deps/font-awesome-6.5.2/webfonts/fa-solid-900.woff2 b/deps/font-awesome-6.5.2/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..758dd4f Binary files /dev/null and b/deps/font-awesome-6.5.2/webfonts/fa-solid-900.woff2 differ diff --git a/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.ttf b/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.ttf new file mode 100644 index 0000000..8c5864c Binary files /dev/null and b/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.ttf differ diff --git a/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.woff2 b/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.woff2 new file mode 100644 index 0000000..f94bec2 Binary files /dev/null and b/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.woff2 differ diff --git a/index.html b/index.html index a54d9c9..dec2c05 100644 --- a/index.html +++ b/index.html @@ -14,8 +14,8 @@ - - + + @@ -29,7 +29,7 @@ openairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/news/index.html b/news/index.html index d84fd01..92d838a 100644 --- a/news/index.html +++ b/news/index.html @@ -1,5 +1,5 @@ -Changelog • openairmaps +Changelog • openairmaps Skip to contents @@ -7,7 +7,7 @@ openairmaps - 0.9.0.9005 + 0.9.0.9006 @@ -48,6 +48,7 @@ Bug fixesdiffMap() colour scale will no longer appear inverted compared to openair::polarDiff(). Fixed an issue in which quickTextHTML() would incorrectly format non breaking spaces when doing, e.g., quickTextHTML("ug/m3"). The order in which trajMapStatic() draws points and paths has been tweaked, which should ensure that markers are drawn on top of their respective path, rather than on top of all paths. +buildPopup() will now work correctly if no type is provided. diff --git a/pkgdown.yml b/pkgdown.yml index 8515ede..afff0d5 100644 --- a/pkgdown.yml +++ b/pkgdown.yml @@ -3,7 +3,7 @@ pkgdown: 2.1.1 pkgdown_sha: ~ articles: articles/openairmaps: openairmaps.html -last_built: 2024-11-11T13:08Z +last_built: 2024-11-18T17:23Z urls: reference: https://davidcarslaw.github.io/openairmaps/reference article: https://davidcarslaw.github.io/openairmaps/articles diff --git a/reference/addPolarMarkers.html b/reference/addPolarMarkers.html index b213c17..5c8c586 100644 --- a/reference/addPolarMarkers.html +++ b/reference/addPolarMarkers.html @@ -1,5 +1,5 @@ -Add polar markers to leaflet map — addPolarMarkers • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/addTrajPaths.html b/reference/addTrajPaths.html index bce5e00..19e61c5 100644 --- a/reference/addTrajPaths.html +++ b/reference/addTrajPaths.html @@ -1,5 +1,5 @@ -Add trajectory paths to leaflet map — addTrajPaths • openairmapsBuild a Complex Popup for a Leaflet Map — buildPopup • openairmapsBivariate polar 'difference' plots on dynamic and static maps — diffMap • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/freqMap.html b/reference/freqMap.html index e4ff943..3feba65 100644 --- a/reference/freqMap.html +++ b/reference/freqMap.html @@ -1,5 +1,5 @@ -Polar frequency plots on dynamic and static maps — freqMap • openairmapsPolar frequency plots on dynamic and static maps — freqMap • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/index.html b/reference/index.html index f27f53e..e073529 100644 --- a/reference/index.html +++ b/reference/index.html @@ -1,5 +1,5 @@ -Package index • openairmaps +Package index • openairmaps Skip to contents @@ -7,7 +7,7 @@ openairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/networkMap.html b/reference/networkMap.html index ec6894b..e54b52f 100644 --- a/reference/networkMap.html +++ b/reference/networkMap.html @@ -1,5 +1,5 @@ -Create a leaflet map of air quality measurement network sites — networkMap • openairmapsCreate a leaflet map of air quality measurement network sites — networkMap • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/openairmaps-package.html b/reference/openairmaps-package.html index 1513a1e..49ddf8d 100644 --- a/reference/openairmaps-package.html +++ b/reference/openairmaps-package.html @@ -1,5 +1,5 @@ -openairmaps: Create Maps of Air Pollution Data — openairmaps-package • openairmapsopenairmaps: Create Maps of Air Pollution Data — openairmaps-package • openairmaps Skip to contents @@ -9,7 +9,7 @@ openairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/percentileMap.html b/reference/percentileMap.html index 21fba89..91555ac 100644 --- a/reference/percentileMap.html +++ b/reference/percentileMap.html @@ -1,5 +1,5 @@ -Percentile roses on dynamic and static maps — percentileMap • openairmapsPercentile roses on dynamic and static maps — percentileMap • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/pipe.html b/reference/pipe.html index 2f0adf9..530910f 100644 --- a/reference/pipe.html +++ b/reference/pipe.html @@ -1,5 +1,5 @@ -Pipe operator — %>% • openairmaps +Pipe operator — %>% • openairmaps Skip to contents @@ -7,7 +7,7 @@ openairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/polarMap.html b/reference/polarMap.html index 6a3c8d5..737947f 100644 --- a/reference/polarMap.html +++ b/reference/polarMap.html @@ -1,5 +1,5 @@ -Bivariate polar plots on dynamic and static maps — polarMap • openairmapsBivariate polar plots on dynamic and static maps — polarMap • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/polar_data.html b/reference/polar_data.html index 534e230..3cde301 100644 --- a/reference/polar_data.html +++ b/reference/polar_data.html @@ -1,5 +1,5 @@ -Example data for polar mapping functions — polar_data • openairmapsExample data for polar mapping functions — polar_data • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/pollroseMap.html b/reference/pollroseMap.html index 919d416..2b7166d 100644 --- a/reference/pollroseMap.html +++ b/reference/pollroseMap.html @@ -1,5 +1,5 @@ -Pollution roses on dynamic and static maps — pollroseMap • openairmapsPollution roses on dynamic and static maps — pollroseMap • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/quickTextHTML.html b/reference/quickTextHTML.html index 7fd5a4b..d64d96a 100644 --- a/reference/quickTextHTML.html +++ b/reference/quickTextHTML.html @@ -1,5 +1,5 @@ -Automatic text formatting for openairmaps — quickTextHTML • openairmapsAutomatic text formatting for openairmaps — quickTextHTML • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/searchNetwork.html b/reference/searchNetwork.html index fba7d25..b8cea71 100644 --- a/reference/searchNetwork.html +++ b/reference/searchNetwork.html @@ -1,5 +1,5 @@ -Geographically search the air quality networks made available by openair::importMeta() — searchNetwork • openairmapsGeographically search the air quality networks made available by openair::importMeta() — searchNetwork • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/trajLevelMap.html b/reference/trajLevelMap.html index 4fc9973..e646906 100644 --- a/reference/trajLevelMap.html +++ b/reference/trajLevelMap.html @@ -1,5 +1,5 @@ -Trajectory level plots in leaflet — trajLevelMap • openairmapsTrajectory level plots in leaflet — trajLevelMap • openairmaps Skip to contents @@ -9,7 +9,7 @@ openairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/trajLevelMapStatic.html b/reference/trajLevelMapStatic.html index 79bb898..e251e36 100644 --- a/reference/trajLevelMapStatic.html +++ b/reference/trajLevelMapStatic.html @@ -1,5 +1,5 @@ -Trajectory level plots in ggplot2 — trajLevelMapStatic • openairmapsTrajectory level plots in ggplot2 — trajLevelMapStatic • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/trajMap.html b/reference/trajMap.html index 8ac0448..d37dde8 100644 --- a/reference/trajMap.html +++ b/reference/trajMap.html @@ -1,5 +1,5 @@ -Trajectory line plots in leaflet — trajMap • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/trajMapStatic.html b/reference/trajMapStatic.html index 5112e13..0acfbb1 100644 --- a/reference/trajMapStatic.html +++ b/reference/trajMapStatic.html @@ -1,5 +1,5 @@ -Trajectory line plots in ggplot2 — trajMapStatic • openairmapsTrajectory line plots in ggplot2 — trajMapStatic • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/traj_data.html b/reference/traj_data.html index 282c08f..d4366c5 100644 --- a/reference/traj_data.html +++ b/reference/traj_data.html @@ -1,5 +1,5 @@ -Example data for trajectory mapping functions — traj_data • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/reference/windroseMap.html b/reference/windroseMap.html index b2bd727..0ddf1ca 100644 --- a/reference/windroseMap.html +++ b/reference/windroseMap.html @@ -1,5 +1,5 @@ -Wind roses on dynamic and static maps — windroseMap • openairmapsWind roses on dynamic and static maps — windroseMap • openairmapsopenairmaps - 0.9.0.9005 + 0.9.0.9006 diff --git a/search.json b/search.json index d7e8ec3..d0de4fe 100644 --- a/search.json +++ b/search.json @@ -1 +1 @@ -[{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, caste, colour, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behaviour contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behaviour include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement davison.jack.jd@gmail.com. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behaviour deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behaviour inappropriate. public apology may requested.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behaviour. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behaviour. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.1, available https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. Community Impact Guidelines inspired Mozilla’s code conduct enforcement ladder. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https://www.contributor-covenant.org/translations.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to openairmaps","title":"Contributing to openairmaps","text":"outlines propose change openairmaps.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CONTRIBUTING.html","id":"fixing-typos","dir":"","previous_headings":"","what":"Fixing typos","title":"Contributing to openairmaps","text":"can fix typos, spelling mistakes, grammatical errors documentation directly using GitHub web interface, long changes made source file. generally means ’ll need edit roxygen2 comments .R, .Rd file. can find .R file generates .Rd reading comment first line.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CONTRIBUTING.html","id":"bigger-changes","dir":"","previous_headings":"","what":"Bigger changes","title":"Contributing to openairmaps","text":"want make bigger change, ’s good idea first file issue make sure someone team agrees ’s needed. ’ve found bug, please file issue illustrates bug minimal reprex.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"Bigger changes","what":"Pull request process","title":"Contributing to openairmaps","text":"Fork package clone onto computer. haven’t done , recommend using usethis::create_from_github(\"davidcarslaw/openairmaps\", fork = TRUE). Install development dependencies devtools::install_dev_deps(), make sure package passes R CMD check running devtools::check(). R CMD check doesn’t pass cleanly, ’s good idea ask help continuing. Create Git branch pull request (PR). recommend using usethis::pr_init(\"brief-description--change\"). Make changes, commit git, create PR running usethis::pr_push(), following prompts browser. title PR briefly describe change. body PR contain Fixes #issue-number. user-facing changes, add bullet top NEWS.md (.e. just first header).","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CONTRIBUTING.html","id":"code-style","dir":"","previous_headings":"Bigger changes","what":"Code style","title":"Contributing to openairmaps","text":"Care taken new code follows style similar rest openair openairmaps. user-facing example exported functions written “lowerCamelCase” (.e., polarMap() rather polar_map()). use roxygen2, Markdown syntax, documentation.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to openairmaps","text":"Please note openairmaps project released Contributor Code Conduct. contributing project agree abide terms.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"GNU General Public License","title":"GNU General Public License","text":"Version 3, 29 June 2007Copyright © 2007 Free Software Foundation, Inc. Everyone permitted copy distribute verbatim copies license document, changing allowed.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"preamble","dir":"","previous_headings":"","what":"Preamble","title":"GNU General Public License","text":"GNU General Public License free, copyleft license software kinds works. licenses software practical works designed take away freedom share change works. contrast, GNU General Public License intended guarantee freedom share change versions program–make sure remains free software users. , Free Software Foundation, use GNU General Public License software; applies also work released way authors. can apply programs, . speak free software, referring freedom, price. General Public Licenses designed make sure freedom distribute copies free software (charge wish), receive source code can get want , can change software use pieces new free programs, know can things. protect rights, need prevent others denying rights asking surrender rights. Therefore, certain responsibilities distribute copies software, modify : responsibilities respect freedom others. example, distribute copies program, whether gratis fee, must pass recipients freedoms received. must make sure , , receive can get source code. must show terms know rights. Developers use GNU GPL protect rights two steps: (1) assert copyright software, (2) offer License giving legal permission copy, distribute /modify . developers’ authors’ protection, GPL clearly explains warranty free software. users’ authors’ sake, GPL requires modified versions marked changed, problems attributed erroneously authors previous versions. devices designed deny users access install run modified versions software inside , although manufacturer can . fundamentally incompatible aim protecting users’ freedom change software. systematic pattern abuse occurs area products individuals use, precisely unacceptable. Therefore, designed version GPL prohibit practice products. problems arise substantially domains, stand ready extend provision domains future versions GPL, needed protect freedom users. Finally, every program threatened constantly software patents. States allow patents restrict development use software general-purpose computers, , wish avoid special danger patents applied free program make effectively proprietary. prevent , GPL assures patents used render program non-free. precise terms conditions copying, distribution modification follow.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_0-definitions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"0. Definitions","title":"GNU General Public License","text":"“License” refers version 3 GNU General Public License. “Copyright” also means copyright-like laws apply kinds works, semiconductor masks. “Program” refers copyrightable work licensed License. licensee addressed “”. “Licensees” “recipients” may individuals organizations. “modify” work means copy adapt part work fashion requiring copyright permission, making exact copy. resulting work called “modified version” earlier work work “based ” earlier work. “covered work” means either unmodified Program work based Program. “propagate” work means anything , without permission, make directly secondarily liable infringement applicable copyright law, except executing computer modifying private copy. Propagation includes copying, distribution (without modification), making available public, countries activities well. “convey” work means kind propagation enables parties make receive copies. Mere interaction user computer network, transfer copy, conveying. interactive user interface displays “Appropriate Legal Notices” extent includes convenient prominently visible feature (1) displays appropriate copyright notice, (2) tells user warranty work (except extent warranties provided), licensees may convey work License, view copy License. interface presents list user commands options, menu, prominent item list meets criterion.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_1-source-code","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"1. Source Code","title":"GNU General Public License","text":"“source code” work means preferred form work making modifications . “Object code” means non-source form work. “Standard Interface” means interface either official standard defined recognized standards body, , case interfaces specified particular programming language, one widely used among developers working language. “System Libraries” executable work include anything, work whole, () included normal form packaging Major Component, part Major Component, (b) serves enable use work Major Component, implement Standard Interface implementation available public source code form. “Major Component”, context, means major essential component (kernel, window system, ) specific operating system () executable work runs, compiler used produce work, object code interpreter used run . “Corresponding Source” work object code form means source code needed generate, install, (executable work) run object code modify work, including scripts control activities. However, include work’s System Libraries, general-purpose tools generally available free programs used unmodified performing activities part work. example, Corresponding Source includes interface definition files associated source files work, source code shared libraries dynamically linked subprograms work specifically designed require, intimate data communication control flow subprograms parts work. Corresponding Source need include anything users can regenerate automatically parts Corresponding Source. Corresponding Source work source code form work.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_2-basic-permissions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"2. Basic Permissions","title":"GNU General Public License","text":"rights granted License granted term copyright Program, irrevocable provided stated conditions met. License explicitly affirms unlimited permission run unmodified Program. output running covered work covered License output, given content, constitutes covered work. License acknowledges rights fair use equivalent, provided copyright law. may make, run propagate covered works convey, without conditions long license otherwise remains force. may convey covered works others sole purpose make modifications exclusively , provide facilities running works, provided comply terms License conveying material control copyright. thus making running covered works must exclusively behalf, direction control, terms prohibit making copies copyrighted material outside relationship . Conveying circumstances permitted solely conditions stated . Sublicensing allowed; section 10 makes unnecessary.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_3-protecting-users-legal-rights-from-anti-circumvention-law","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"3. Protecting Users’ Legal Rights From Anti-Circumvention Law","title":"GNU General Public License","text":"covered work shall deemed part effective technological measure applicable law fulfilling obligations article 11 WIPO copyright treaty adopted 20 December 1996, similar laws prohibiting restricting circumvention measures. convey covered work, waive legal power forbid circumvention technological measures extent circumvention effected exercising rights License respect covered work, disclaim intention limit operation modification work means enforcing, work’s users, third parties’ legal rights forbid circumvention technological measures.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_4-conveying-verbatim-copies","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"4. Conveying Verbatim Copies","title":"GNU General Public License","text":"may convey verbatim copies Program’s source code receive , medium, provided conspicuously appropriately publish copy appropriate copyright notice; keep intact notices stating License non-permissive terms added accord section 7 apply code; keep intact notices absence warranty; give recipients copy License along Program. may charge price price copy convey, may offer support warranty protection fee.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_5-conveying-modified-source-versions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"5. Conveying Modified Source Versions","title":"GNU General Public License","text":"may convey work based Program, modifications produce Program, form source code terms section 4, provided also meet conditions: ) work must carry prominent notices stating modified , giving relevant date. b) work must carry prominent notices stating released License conditions added section 7. requirement modifies requirement section 4 “keep intact notices”. c) must license entire work, whole, License anyone comes possession copy. License therefore apply, along applicable section 7 additional terms, whole work, parts, regardless packaged. License gives permission license work way, invalidate permission separately received . d) work interactive user interfaces, must display Appropriate Legal Notices; however, Program interactive interfaces display Appropriate Legal Notices, work need make . compilation covered work separate independent works, nature extensions covered work, combined form larger program, volume storage distribution medium, called “aggregate” compilation resulting copyright used limit access legal rights compilation’s users beyond individual works permit. Inclusion covered work aggregate cause License apply parts aggregate.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_6-conveying-non-source-forms","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"6. Conveying Non-Source Forms","title":"GNU General Public License","text":"may convey covered work object code form terms sections 4 5, provided also convey machine-readable Corresponding Source terms License, one ways: ) Convey object code , embodied , physical product (including physical distribution medium), accompanied Corresponding Source fixed durable physical medium customarily used software interchange. b) Convey object code , embodied , physical product (including physical distribution medium), accompanied written offer, valid least three years valid long offer spare parts customer support product model, give anyone possesses object code either (1) copy Corresponding Source software product covered License, durable physical medium customarily used software interchange, price reasonable cost physically performing conveying source, (2) access copy Corresponding Source network server charge. c) Convey individual copies object code copy written offer provide Corresponding Source. alternative allowed occasionally noncommercially, received object code offer, accord subsection 6b. d) Convey object code offering access designated place (gratis charge), offer equivalent access Corresponding Source way place charge. need require recipients copy Corresponding Source along object code. place copy object code network server, Corresponding Source may different server (operated third party) supports equivalent copying facilities, provided maintain clear directions next object code saying find Corresponding Source. Regardless server hosts Corresponding Source, remain obligated ensure available long needed satisfy requirements. e) Convey object code using peer--peer transmission, provided inform peers object code Corresponding Source work offered general public charge subsection 6d. separable portion object code, whose source code excluded Corresponding Source System Library, need included conveying object code work. “User Product” either (1) “consumer product”, means tangible personal property normally used personal, family, household purposes, (2) anything designed sold incorporation dwelling. determining whether product consumer product, doubtful cases shall resolved favor coverage. particular product received particular user, “normally used” refers typical common use class product, regardless status particular user way particular user actually uses, expects expected use, product. product consumer product regardless whether product substantial commercial, industrial non-consumer uses, unless uses represent significant mode use product. “Installation Information” User Product means methods, procedures, authorization keys, information required install execute modified versions covered work User Product modified version Corresponding Source. information must suffice ensure continued functioning modified object code case prevented interfered solely modification made. convey object code work section , , specifically use , User Product, conveying occurs part transaction right possession use User Product transferred recipient perpetuity fixed term (regardless transaction characterized), Corresponding Source conveyed section must accompanied Installation Information. requirement apply neither third party retains ability install modified object code User Product (example, work installed ROM). requirement provide Installation Information include requirement continue provide support service, warranty, updates work modified installed recipient, User Product modified installed. Access network may denied modification materially adversely affects operation network violates rules protocols communication across network. Corresponding Source conveyed, Installation Information provided, accord section must format publicly documented (implementation available public source code form), must require special password key unpacking, reading copying.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_7-additional-terms","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"7. Additional Terms","title":"GNU General Public License","text":"“Additional permissions” terms supplement terms License making exceptions one conditions. Additional permissions applicable entire Program shall treated though included License, extent valid applicable law. additional permissions apply part Program, part may used separately permissions, entire Program remains governed License without regard additional permissions. convey copy covered work, may option remove additional permissions copy, part . (Additional permissions may written require removal certain cases modify work.) may place additional permissions material, added covered work, can give appropriate copyright permission. Notwithstanding provision License, material add covered work, may (authorized copyright holders material) supplement terms License terms: ) Disclaiming warranty limiting liability differently terms sections 15 16 License; b) Requiring preservation specified reasonable legal notices author attributions material Appropriate Legal Notices displayed works containing ; c) Prohibiting misrepresentation origin material, requiring modified versions material marked reasonable ways different original version; d) Limiting use publicity purposes names licensors authors material; e) Declining grant rights trademark law use trade names, trademarks, service marks; f) Requiring indemnification licensors authors material anyone conveys material (modified versions ) contractual assumptions liability recipient, liability contractual assumptions directly impose licensors authors. non-permissive additional terms considered “restrictions” within meaning section 10. Program received , part , contains notice stating governed License along term restriction, may remove term. license document contains restriction permits relicensing conveying License, may add covered work material governed terms license document, provided restriction survive relicensing conveying. add terms covered work accord section, must place, relevant source files, statement additional terms apply files, notice indicating find applicable terms. Additional terms, permissive non-permissive, may stated form separately written license, stated exceptions; requirements apply either way.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_8-termination","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"8. Termination","title":"GNU General Public License","text":"may propagate modify covered work except expressly provided License. attempt otherwise propagate modify void, automatically terminate rights License (including patent licenses granted third paragraph section 11). However, cease violation License, license particular copyright holder reinstated () provisionally, unless copyright holder explicitly finally terminates license, (b) permanently, copyright holder fails notify violation reasonable means prior 60 days cessation. Moreover, license particular copyright holder reinstated permanently copyright holder notifies violation reasonable means, first time received notice violation License (work) copyright holder, cure violation prior 30 days receipt notice. Termination rights section terminate licenses parties received copies rights License. rights terminated permanently reinstated, qualify receive new licenses material section 10.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_9-acceptance-not-required-for-having-copies","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"9. Acceptance Not Required for Having Copies","title":"GNU General Public License","text":"required accept License order receive run copy Program. Ancillary propagation covered work occurring solely consequence using peer--peer transmission receive copy likewise require acceptance. However, nothing License grants permission propagate modify covered work. actions infringe copyright accept License. Therefore, modifying propagating covered work, indicate acceptance License .","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_10-automatic-licensing-of-downstream-recipients","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"10. Automatic Licensing of Downstream Recipients","title":"GNU General Public License","text":"time convey covered work, recipient automatically receives license original licensors, run, modify propagate work, subject License. responsible enforcing compliance third parties License. “entity transaction” transaction transferring control organization, substantially assets one, subdividing organization, merging organizations. propagation covered work results entity transaction, party transaction receives copy work also receives whatever licenses work party’s predecessor interest give previous paragraph, plus right possession Corresponding Source work predecessor interest, predecessor can get reasonable efforts. may impose restrictions exercise rights granted affirmed License. example, may impose license fee, royalty, charge exercise rights granted License, may initiate litigation (including cross-claim counterclaim lawsuit) alleging patent claim infringed making, using, selling, offering sale, importing Program portion .","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_11-patents","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"11. Patents","title":"GNU General Public License","text":"“contributor” copyright holder authorizes use License Program work Program based. work thus licensed called contributor’s “contributor version”. contributor’s “essential patent claims” patent claims owned controlled contributor, whether already acquired hereafter acquired, infringed manner, permitted License, making, using, selling contributor version, include claims infringed consequence modification contributor version. purposes definition, “control” includes right grant patent sublicenses manner consistent requirements License. contributor grants non-exclusive, worldwide, royalty-free patent license contributor’s essential patent claims, make, use, sell, offer sale, import otherwise run, modify propagate contents contributor version. following three paragraphs, “patent license” express agreement commitment, however denominated, enforce patent (express permission practice patent covenant sue patent infringement). “grant” patent license party means make agreement commitment enforce patent party. convey covered work, knowingly relying patent license, Corresponding Source work available anyone copy, free charge terms License, publicly available network server readily accessible means, must either (1) cause Corresponding Source available, (2) arrange deprive benefit patent license particular work, (3) arrange, manner consistent requirements License, extend patent license downstream recipients. “Knowingly relying” means actual knowledge , patent license, conveying covered work country, recipient’s use covered work country, infringe one identifiable patents country reason believe valid. , pursuant connection single transaction arrangement, convey, propagate procuring conveyance , covered work, grant patent license parties receiving covered work authorizing use, propagate, modify convey specific copy covered work, patent license grant automatically extended recipients covered work works based . patent license “discriminatory” include within scope coverage, prohibits exercise , conditioned non-exercise one rights specifically granted License. may convey covered work party arrangement third party business distributing software, make payment third party based extent activity conveying work, third party grants, parties receive covered work , discriminatory patent license () connection copies covered work conveyed (copies made copies), (b) primarily connection specific products compilations contain covered work, unless entered arrangement, patent license granted, prior 28 March 2007. Nothing License shall construed excluding limiting implied license defenses infringement may otherwise available applicable patent law.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_12-no-surrender-of-others-freedom","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"12. No Surrender of Others’ Freedom","title":"GNU General Public License","text":"conditions imposed (whether court order, agreement otherwise) contradict conditions License, excuse conditions License. convey covered work satisfy simultaneously obligations License pertinent obligations, consequence may convey . example, agree terms obligate collect royalty conveying convey Program, way satisfy terms License refrain entirely conveying Program.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_13-use-with-the-gnu-affero-general-public-license","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"13. Use with the GNU Affero General Public License","title":"GNU General Public License","text":"Notwithstanding provision License, permission link combine covered work work licensed version 3 GNU Affero General Public License single combined work, convey resulting work. terms License continue apply part covered work, special requirements GNU Affero General Public License, section 13, concerning interaction network apply combination .","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_14-revised-versions-of-this-license","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"14. Revised Versions of this License","title":"GNU General Public License","text":"Free Software Foundation may publish revised /new versions GNU General Public License time time. new versions similar spirit present version, may differ detail address new problems concerns. version given distinguishing version number. Program specifies certain numbered version GNU General Public License “later version” applies , option following terms conditions either numbered version later version published Free Software Foundation. Program specify version number GNU General Public License, may choose version ever published Free Software Foundation. Program specifies proxy can decide future versions GNU General Public License can used, proxy’s public statement acceptance version permanently authorizes choose version Program. Later license versions may give additional different permissions. However, additional obligations imposed author copyright holder result choosing follow later version.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_15-disclaimer-of-warranty","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"15. Disclaimer of Warranty","title":"GNU General Public License","text":"WARRANTY PROGRAM, EXTENT PERMITTED APPLICABLE LAW. EXCEPT OTHERWISE STATED WRITING COPYRIGHT HOLDERS /PARTIES PROVIDE PROGRAM “” WITHOUT WARRANTY KIND, EITHER EXPRESSED IMPLIED, INCLUDING, LIMITED , IMPLIED WARRANTIES MERCHANTABILITY FITNESS PARTICULAR PURPOSE. ENTIRE RISK QUALITY PERFORMANCE PROGRAM . PROGRAM PROVE DEFECTIVE, ASSUME COST NECESSARY SERVICING, REPAIR CORRECTION.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_16-limitation-of-liability","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"16. Limitation of Liability","title":"GNU General Public License","text":"EVENT UNLESS REQUIRED APPLICABLE LAW AGREED WRITING COPYRIGHT HOLDER, PARTY MODIFIES /CONVEYS PROGRAM PERMITTED , LIABLE DAMAGES, INCLUDING GENERAL, SPECIAL, INCIDENTAL CONSEQUENTIAL DAMAGES ARISING USE INABILITY USE PROGRAM (INCLUDING LIMITED LOSS DATA DATA RENDERED INACCURATE LOSSES SUSTAINED THIRD PARTIES FAILURE PROGRAM OPERATE PROGRAMS), EVEN HOLDER PARTY ADVISED POSSIBILITY DAMAGES.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_17-interpretation-of-sections-15-and-16","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"17. Interpretation of Sections 15 and 16","title":"GNU General Public License","text":"disclaimer warranty limitation liability provided given local legal effect according terms, reviewing courts shall apply local law closely approximates absolute waiver civil liability connection Program, unless warranty assumption liability accompanies copy Program return fee. END TERMS CONDITIONS","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"how-to-apply-these-terms-to-your-new-programs","dir":"","previous_headings":"","what":"How to Apply These Terms to Your New Programs","title":"GNU General Public License","text":"develop new program, want greatest possible use public, best way achieve make free software everyone can redistribute change terms. , attach following notices program. safest attach start source file effectively state exclusion warranty; file least “copyright” line pointer full notice found. Also add information contact electronic paper mail. program terminal interaction, make output short notice like starts interactive mode: hypothetical commands show w show c show appropriate parts General Public License. course, program’s commands might different; GUI interface, use “box”. also get employer (work programmer) school, , sign “copyright disclaimer” program, necessary. information , apply follow GNU GPL, see . GNU General Public License permit incorporating program proprietary programs. program subroutine library, may consider useful permit linking proprietary applications library. want , use GNU Lesser General Public License instead License. first, please read .","code":" Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free software, and you are welcome to redistribute it under certain conditions; type 'show c' for details."},{"path":"https://davidcarslaw.github.io/openairmaps/articles/openairmaps.html","id":"acess-uk-monitoring-data-with-latlng-information","dir":"Articles","previous_headings":"","what":"Acess UK Monitoring Data with Lat/Lng Information","title":"Examples of {openairmaps} Functionality","text":"openair::importUKAQ() meta argument appends latitude longitude site returned data. using data importUKAQ(), ensure data coordinate data appended similar way. find sites import data , can visualise UK monitoring networks using networkMap(). Alternatively, searchNetwork() allow target specific region.","code":"london_data <- openair::importUKAQ(site = c(\"my1\", \"hors\", \"cll2\"), year = 2020, meta = TRUE) london_data #> # A tibble: 26,352 × 22 #> source site code date nox no2 no o3 so2 pm10 #> #> 1 aurn London … CLL2 2020-01-01 00:00:00 61.9 40.0 14.3 1.33 1.21 44.9 #> 2 aurn London … CLL2 2020-01-01 01:00:00 62.3 37.9 15.9 1.60 1.73 48.5 #> 3 aurn London … CLL2 2020-01-01 02:00:00 68.7 37.2 20.5 2.00 1.23 49.1 #> 4 aurn London … CLL2 2020-01-01 03:00:00 60.2 36.5 15.5 2.05 1.23 53.1 #> 5 aurn London … CLL2 2020-01-01 04:00:00 34.9 28.2 4.32 7.58 1.23 46.3 #> 6 aurn London … CLL2 2020-01-01 05:00:00 32.4 27.7 3.06 7.33 0.844 43.7 #> 7 aurn London … CLL2 2020-01-01 06:00:00 35.8 29.9 3.84 6.64 1.23 46.1 #> 8 aurn London … CLL2 2020-01-01 07:00:00 46.3 36.2 6.60 4.29 1.23 42.7 #> 9 aurn London … CLL2 2020-01-01 08:00:00 116. 40.6 49.1 1.70 2.66 42.8 #> 10 aurn London … CLL2 2020-01-01 09:00:00 127. 41.6 55.5 2.05 3.18 42.1 #> # ℹ 26,342 more rows #> # ℹ 12 more variables: pm2.5 , v10 , v2.5 , nv10 , #> # nv2.5 , ws , wd , air_temp , co , latitude , #> # longitude , site_type names(london_data) #> [1] \"source\" \"site\" \"code\" \"date\" \"nox\" \"no2\" #> [7] \"no\" \"o3\" \"so2\" \"pm10\" \"pm2.5\" \"v10\" #> [13] \"v2.5\" \"nv10\" \"nv2.5\" \"ws\" \"wd\" \"air_temp\" #> [19] \"co\" \"latitude\" \"longitude\" \"site_type\" networkMap(source = c(\"aurn\", \"aqe\"), year = 2020, control = \"variable\")"},{"path":"https://davidcarslaw.github.io/openairmaps/articles/openairmaps.html","id":"polar-plot-maps","dir":"Articles","previous_headings":"","what":"Polar Plot Maps","title":"Examples of {openairmaps} Functionality","text":"polarMap() family includes polarMap(), annulusMap(), freqMap(), percentileMap(), windroseMap(), pollroseMap(), diffMap(), work similarly create interactive air quality maps: setting static TRUE recieve static version map, may useful academic articles.","code":"polarMap(london_data, c(\"no2\", \"pm10\"), popup = c(\"site\", \"site_type\"), label = \"site\") polarMap(london_data, c(\"no2\", \"pm10\"), static = TRUE, d.icon = 100)"},{"path":"https://davidcarslaw.github.io/openairmaps/articles/openairmaps.html","id":"trajectory-maps","dir":"Articles","previous_headings":"","what":"Trajectory Maps","title":"Examples of {openairmaps} Functionality","text":"trajMap() almost identical arguments openair::trajPlot(), likewise trajLevelMap() openair::trajLevel().","code":"trajMap(traj_data, colour = \"pm10\") trajLevelMap(traj_data)"},{"path":"https://davidcarslaw.github.io/openairmaps/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Jack Davison. Maintainer, author. David Carslaw. Author.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Davison J, Carslaw D (2024). openairmaps: Create Maps Air Pollution Data. R package version 0.9.0.9005, https://github.com/davidcarslaw/openairmaps, https://davidcarslaw.github.io/openairmaps/.","code":"@Manual{, title = {openairmaps: Create Maps of Air Pollution Data}, author = {Jack Davison and David Carslaw}, year = {2024}, note = {R package version 0.9.0.9005, https://github.com/davidcarslaw/openairmaps}, url = {https://davidcarslaw.github.io/openairmaps/}, }"},{"path":[]},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/index.html","id":"id_-core-features","dir":"","previous_headings":"","what":"💡 Core Features","title":"Create Maps of Air Pollution Data","text":"openairmaps developed pace align openair R’s modern geospatial ecosystem. Network visualisation many UK-based monitoring networks networkMap(), can also searched using searchNetwork(). Directional analysis maps place openair::polarPlot() “polar coordinate” plots maps. Trajectory analysis maps (trajMap() trajLevelMap()) interactive implementations openair::trajPlot() family. Flexible map conditioning aligned openair type option easily condition maps season, day week, . Map building utilities building popups interactive maps, formatting common pollutant names units, converting UK postcodes lat/lng coordinates.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/index.html","id":"id_-documentation","dir":"","previous_headings":"","what":"📖 Documentation","title":"Create Maps of Air Pollution Data","text":"openairmaps functions fully documented; access documentation using R IDE choice. Documentation also hosted online package website. guide openair toolkit can found online book, contains lots code snippets, demonstrations functionality, ideas application openair’s various functions.","code":"?openairmaps::polarMap"},{"path":"https://davidcarslaw.github.io/openairmaps/index.html","id":"id_️-installation","dir":"","previous_headings":"","what":"🗃️ Installation","title":"Create Maps of Air Pollution Data","text":"openairmaps can installed CRAN : can also install development version openairmaps GitHub using pak: 🏛️ openairmaps primarily maintained Jack Davison. 📃 openairmaps licensed GNU General Public License. 🧑💻 Contributions welcome wider community. See contributing guide code conduct information.","code":"install.packages(\"openairmaps\") # install.packages(\"pak\") pak::pak(\"davidcarslaw/openairmaps\")"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addPolarMarkers.html","id":null,"dir":"Reference","previous_headings":"","what":"Add polar markers to leaflet map — addPolarMarkers","title":"Add polar markers to leaflet map — addPolarMarkers","text":"function similar (identical ) leaflet::addMarkers() leaflet::addCircleMarkers() functions leaflet, allows users add openair directional analysis plots leaflet map control groups layerIds \"--one\" functions like polarMap().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addPolarMarkers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add polar markers to leaflet map — addPolarMarkers","text":"","code":"addPolarMarkers( map, pollutant, fun = openair::polarPlot, lng = NULL, lat = NULL, layerId = NULL, group = NULL, popup = NULL, popupOptions = NULL, label = NULL, labelOptions = NULL, options = leaflet::markerOptions(), clusterOptions = NULL, clusterId = NULL, key = FALSE, d.icon = 200, d.fig = 3.5, data = leaflet::getMapData(map), ... ) addPolarDiffMarkers( map, pollutant, before = leaflet::getMapData(map), after = leaflet::getMapData(map), lng = NULL, lat = NULL, layerId = NULL, group = NULL, popup = NULL, popupOptions = NULL, label = NULL, labelOptions = NULL, options = leaflet::markerOptions(), clusterOptions = NULL, clusterId = NULL, key = FALSE, d.icon = 200, d.fig = 3.5, ... )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addPolarMarkers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add polar markers to leaflet map — addPolarMarkers","text":"map map widget object created leaflet() pollutant name pollutant plot. Note , fun = openair::windRose, must set pollutant = \"ws\". fun openair directional analysis plotting function. Supported functions include openair::polarPlot() (default), openair::polarAnnulus(), openair::polarFreq(), openair::percentileRose(), openair::pollutionRose() openair::windRose(). openair::polarDiff(), use addPolarDiffMarkers(). lng decimal longitude. lat decimal latitude. layerId layer id group name group newly created layers belong (clearGroup addLayersControl purposes). Human-friendly group names permitted–need short, identifier-style names. number layers even different types layers (e.g. markers polygons) can share group name. popup column data used popup. popupOptions Vector popupOptions provide popups label column data used label. labelOptions Vector labelOptions provide label options label. Default NULL options list extra options tile layers, popups, paths (circles, rectangles, polygons, ...), map elements clusterOptions NULL, markers clustered using Leaflet.markercluster; can use markerClusterOptions() specify marker cluster options clusterId id marker cluster layer key key marker drawn? Default FALSE. d.icon diameter plot map pixels. affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using openair inches. affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. data data frame. data frame must contain data plot choice openair directional analysis plot, includes wind speed (ws), wind direction (wd), column representing concentration pollutant. addition, data must include decimal latitude longitude. default, data object provided leaflet::leaflet() initially, can overridden. ... arguments plotting function (e.g. period openair::polarAnnulus()). , data frame represents /case. See openair::polarPlot() details different input requirements. default, data object provided leaflet::leaflet() initially, least one overridden.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addPolarMarkers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add polar markers to leaflet map — addPolarMarkers","text":"leaflet object.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addPolarMarkers.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Add polar markers to leaflet map — addPolarMarkers","text":"addPolarMarkers(): Add one-table polar marker (e.g., openair::polarPlot()) addPolarDiffMarkers(): Add two-table openair::polarDiff() marker.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addPolarMarkers.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add polar markers to leaflet map — addPolarMarkers","text":"","code":"if (FALSE) { # \\dontrun{ library(leaflet) library(openair) # different types of polar plot on one map leaflet(data = polar_data) %>% addTiles() %>% addPolarMarkers(\"ws\", fun = openair::windRose, group = \"Wind Rose\" ) %>% addPolarMarkers(\"nox\", fun = openair::polarPlot, group = \"Polar Plot\" ) %>% addLayersControl( baseGroups = c(\"Wind Rose\", \"Polar Plot\") ) # use of polar diff (NB: both 'before' and 'after' inherit from `leaflet()`, # so at least one should be overridden - in this case 'after') leaflet(data = polar_data) %>% addTiles() %>% addPolarDiffMarkers(\"nox\", after = dplyr::mutate(polar_data, nox = jitter(nox, 5)) ) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addTrajPaths.html","id":null,"dir":"Reference","previous_headings":"","what":"Add trajectory paths to leaflet map — addTrajPaths","title":"Add trajectory paths to leaflet map — addTrajPaths","text":"function similar (identical ) leaflet::addMarkers() function leaflet, allows users add trajectory paths leaflet map control groups layerIds \"--one\" functions like trajMap().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addTrajPaths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add trajectory paths to leaflet map — addTrajPaths","text":"","code":"addTrajPaths( map, lng = \"lon\", lat = \"lat\", layerId = NULL, group = NULL, data = leaflet::getMapData(map), npoints = 12, ... )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addTrajPaths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add trajectory paths to leaflet map — addTrajPaths","text":"map map widget object created leaflet::leaflet(). lng decimal longitude. lat decimal latitude. layerId base string layer id. actual layer IDs format \"layerId-linenum\" lines \"layerId_linenum-pointnum\" points. example, first point first trajectory path \"layerId-1-1\". group name group newly created layers belong (leaflet::clearGroup() leaflet::addLayersControl() purposes). Human-friendly group names permitted–need short, identifier-style names. number layers even different types layers (e.g. markers polygons) can share group name. data Data frame, result importing trajectory file using openair::importTraj(). default, data object provided leaflet::leaflet() initially, can overridden. npoints dot placed every npoints along full trajectory. hourly back trajectories points plotted every npoints hours. helps understand air masses particular times get feel speed air (points closer together correspond slower moving air masses). Defaults 12. ... arguments pass leaflet::addCircleMarkers() leaflet::addPolylines(). use color argument, important ensure vector supply length one avoid issues leaflet::addPolylines() (.e., use color = ~ pal(nox)[1]). Note opacity controls opacity lines fillOpacity opacity markers.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addTrajPaths.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add trajectory paths to leaflet map — addTrajPaths","text":"leaflet object.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addTrajPaths.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Add trajectory paths to leaflet map — addTrajPaths","text":"addTrajPaths() can powerful way quickly plotting trajectories leaflet map, users take care due additional arguments passed leaflet::addCircleMarkers() leaflet::addPolylines(). particular, users weary use color argument. Specifically, color passed vector length greater one, multiple polylines drawn top one another. best affect opacity, worst significantly impact performance R final leaflet map. mitigate , please ensure vector passed color length one. simple want whole path colour, difficult want colour pollutant, example. easiest way achieve write loop use another iterative approach (e.g. purrr package) add one path per arrival date. example provided Examples.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addTrajPaths.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add trajectory paths to leaflet map — addTrajPaths","text":"","code":"if (FALSE) { # \\dontrun{ library(leaflet) library(openairmaps) pal <- colorNumeric(palette = \"viridis\", domain = traj_data$nox) map <- leaflet() %>% addTiles() for (i in seq(length(unique(traj_data$date)))) { data <- dplyr::filter(traj_data, date == unique(traj_data$date)[i]) map <- map %>% addTrajPaths( data = data, color = pal(data$nox)[1] ) } map } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/annulusMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Polar annulus plots on dynamic and static maps — annulusMap","title":"Polar annulus plots on dynamic and static maps — annulusMap","text":"annulusMap() function creates map using polar annulus plots markers. number pollutants can specified using pollutant argument, multiple layers markers can created using type. default, maps dynamic can panned, zoomed, otherwise interacted . Using static argument allows static images produced instead.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/annulusMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Polar annulus plots on dynamic and static maps — annulusMap","text":"","code":"annulusMap( data, pollutant = NULL, period = \"hour\", limits = \"free\", latitude = NULL, longitude = NULL, crs = 4326, type = NULL, popup = NULL, label = NULL, provider = \"OpenStreetMap\", cols = \"turbo\", alpha = 1, key = FALSE, legend = TRUE, legend.position = NULL, legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control.autotext = TRUE, d.icon = 200, d.fig = 3.5, static = FALSE, static.nrow = NULL, progress = TRUE, ..., control = NULL )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/annulusMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Polar annulus plots on dynamic and static maps — annulusMap","text":"data Input data table pollutant, wind, geo-spatial information. required | scope: dynamic & static data frame. data frame must contain data plot directional analysis marker, includes wind speed (ws), wind direction (wd), column representing concentration pollutant. addition, data must include decimal latitude longitude (X/Y coordinate used conjunction crs). pollutant Pollutant name(s). required | scope: dynamic & static column name(s) pollutant(s) plot. multiple pollutants specified non-pairwise statistic supplied, type argument longer able used : Dynamic: pollutants can toggled using \"layer control\" menu. Static:: pollutants appear different panel. Multiple pollutants prohibit use type argument non-pairwise statistics. period Temporal period radial axis. default: \"hour\" | scope: dynamic & static Options \"hour\" (default, plot diurnal variations), \"season\" plot variation throughout year, \"weekday\" plot day week variation \"trend\" plot trend wind direction. limits Specifier plot colour scale bounds. default: \"free\" | scope: dynamic & static One : \"fixed\" ensures markers use colour scale. \"free\" (default) allows markers use different colour scales. numeric vector form c(lower, upper) used define colour scale. example, limits = c(0, 100) force plot limits span 0-100. latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. type method condition data separate plotting. default: NULL | scope: dynamic & static Used splitting input data different groups, passed type argument openair::cutData(). type specified: Dynamic: different data splits can toggled using \"layer control\" menu. Static:: data splits appear different panel. type used multiple pollutant columns provided. popup Content marker popups dynamic maps. default: NULL | scope: dynamic Columns used HTML content marker popups dynamic maps. Popups may useful show information individual sites (e.g., site names, codes, types, etc.). vector column names provided passed buildPopup() using default values. label Content marker hover-dynamic maps. default: NULL | scope: dynamic Column used HTML content hover-labels. Labels useful reasons popups, though typically shorter. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. cols Colours use plotting. default: \"turbo\" | scope: dynamic & static colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. legend Draw shared legend? default: TRUE | scope: dynamic & static markers share colour scale (e.g., limits != \"free\" polarMap()), shared legend created side map? legend.position Position shared legend. default: NULL | scope: dynamic & static legend = TRUE, legend placed? Dynamic: One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). Static:: One \"top\", \"right\", \"bottom\" \"left\". Passed legend.position argument ggplot2::theme(). legend.title Title legend. default: NULL | scope: dynamic & static default, legend.title = NULL, function attempt provide sensible legend title. legend.title allows users overwrite - example, include units contextual information. dynamic maps, users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE | scope: dynamic & static legend.title.autotext = TRUE, legend.title first run quickTextHTML() (dynamic) openair::quickText() (static). control.collapsed Show layer control collapsed? default: FALSE | scope: dynamic dynamic maps, \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" | scope: dynamic type != NULL, multiple pollutants specified, \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.autotext Automatically format content layer control menu? default: TRUE | scope: dynamic control.autotext = TRUE, content \"layer control\" interface first run quickTextHTML(). d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. static Produce static map? default: FALSE controls whether dynamic static map produced. former default broadly useful, latter may preferable DOCX PDF outputs (e.g., academic papers). static.nrow Number rows static map. default: NULL | scope: static Controls number rows panels static map multiple pollutants type specified; passed nrow argument ggplot2::facet_wrap(). default, NULL, results roughly square grid panels. progress Show progress bar? default: TRUE | scope: dynamic & static default, progress bar shown visualise function's progress creating individual polar markers. option allows turned , desired. ... Arguments passed openair::polarAnnulus resolution Two plot resolutions can set: “normal” “fine” (default). local.tz results calculated local time includes treatment daylight savings time (DST)? default consider DST issues, provided data imported without DST offset. Emissions activity tends occur local time e.g. rush hour 8 every day. clocks go forward spring, emissions effectively released atmosphere typically 1 hour earlier summertime .e. DST applies. plotting diurnal profiles, effect “smearing-” concentrations. Sometimes, useful approach express time local time. correction tends produce better-defined diurnal profiles concentration (variables) allows better comparison made emissions/activity data. set FALSE GMT used. Examples usage include local.tz = \"Europe/London\", local.tz = \"America/New_York\". See cutData import details. statistic statistic applied wind speed/direction bin. Can “mean” (default), “median”, “max” (maximum), “frequency”. “stdev” (standard deviation), “weighted.mean” “cpf” (Conditional Probability Function). smoothing involved, colour scale statistics provide indication overall pattern interpreted concentration units e.g. statistic = \"weighted.mean\" bin mean multiplied bin frequency divided total frequency. many cases using polarFreq better. Setting statistic = \"weighted.mean\" can useful provides indication concentration * frequency occurrence highlight wind speed/direction conditions dominate overall mean. percentile statistic = \"percentile\" statistic = \"cpf\" percentile used, expressed 0 100. Note percentile value calculated wind speed, wind direction ‘bins’. reason can also useful set min.bin ensure sufficient number points available estimate percentile. See quantile details percentiles calculated. width width annulus; can “normal” (default), “thin” “fat”. min.bin minimum number points allowed wind speed/wind direction bin. default 1. value two requires least 2 valid records bin ; bins less 2 valid records set NA. Care taken using value > 1 risk removing real data points. recommended consider data care. Also, polarFreq function can use circumstances. exclude.missing Setting option TRUE (default) removes points plot far original data. smoothing routines produce predictions points data exist .e. predict. removing points far original data produces plot clear original data lie. set FALSE missing data interpolated. date.pad type = \"trend\" (default), date.pad = TRUE pad-missing data beginning first year end last year. purpose ensure trend plot begins ends beginning end year. force.positive default TRUE. Sometimes smoothing data steep gradients possible predicted values negative. force.positive = TRUE ensures predictions remain positive. useful several reasons. First, lots missing data interpolation needed can result artefacts predictions far original data. Second, known beforehand data positive, option carries assumption prediction. likely time setting force.positive = FALSE background concentrations first subtracted resulting data legitimately negative. vast majority situations expected user need alter default option. k smoothing value supplied gam temporal wind direction components, respectively. cases e.g. trend plot less 1-year data smoothing default values may become noisy affected outliers. Choosing lower value k (say 10) may help produce better plot. normalise TRUE concentrations normalised dividing mean value. done fitting smooth surface. option particularly useful one interested patterns concentrations several pollutants different scales e.g. NOx CO. Often useful one pollutant chosen. key.header Adds additional text/labels scale key. example, passing options key.header = \"header\", key.footer = \"footer1\" adds addition text scale key. arguments passed drawOpenKey via quickText, applying auto.text argument, handle formatting. key.footer see key.footer. key.position Location scale key plotted. Allowed arguments currently include \"top\", \"right\", \"bottom\" \"left\". auto.text Either TRUE (default) FALSE. TRUE titles axis labels automatically try format pollutant names units properly e.g. subscripting `2' NO2. control Deprecated. Please use type.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/annulusMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Polar annulus plots on dynamic and static maps — annulusMap","text":"Either: Dynamic: leaflet object Static: ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/annulusMap.html","id":"customisation-of-static-maps-using-ggplot-","dir":"Reference","previous_headings":"","what":"Customisation of static maps using ggplot2","title":"Polar annulus plots on dynamic and static maps — annulusMap","text":"outputs static directional analysis functions ggplot2 figures, customisation possible using functions ggplot2::theme(), ggplot2::guides() ggplot2::labs(). multiple pollutants specified, subscripting (e.g., \"x\" \"NOx\") achieved using ggtext package. Therefore choose override plot theme, recommended use [ggplot2::theme()] [ggtext::element_markdown()] define strip.text parameter. arguments like limits, percentile breaks defined, legend automatically added figure. Legends can removed using ggplot2::theme(legend.position = \"none\"), customised using ggplot2::guides() either color = ggplot2::guide_colourbar() continuous legends fill = ggplot2::guide_legend() discrete legends.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/annulusMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Polar annulus plots on dynamic and static maps — annulusMap","text":"","code":"if (FALSE) { # \\dontrun{ annulusMap(polar_data, pollutant = \"nox\", period = \"hour\", provider = \"CartoDB.Voyager\" ) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/buildPopup.html","id":null,"dir":"Reference","previous_headings":"","what":"Build a Complex Popup for a Leaflet Map — buildPopup","title":"Build a Complex Popup for a Leaflet Map — buildPopup","text":"Group dataframe together latitude/longitude columns create HTML popup user-defined columns. default, unique values character columns collapsed comma-separated lists, numeric columns averaged, date columns presented range. function returns input dataframe appended \"popup\" column, can used popup argument function like polarMap().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/buildPopup.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Build a Complex Popup for a Leaflet Map — buildPopup","text":"","code":"buildPopup( data, columns, latitude = NULL, longitude = NULL, type = NULL, fun.character = function(x) paste(unique(x), collapse = \", \"), fun.numeric = function(x) signif(mean(x, na.rm = TRUE), 3), fun.dttm = function(x) paste(lubridate::floor_date(range(x, na.rm = TRUE), \"day\"), collapse = \" to \"), ... )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/buildPopup.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Build a Complex Popup for a Leaflet Map — buildPopup","text":"data Input data table geo-spatial information. required data frame containing latitude longitude information go used function polarMap(). columns character vector column names include popup. required Summaries selected columns appear popup. named vector provided, names vector used place raw column names. See Examples information. latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). type column passed type argument another function. default: NULL Column used type argument mapping functions. needs used type going used polarMap() another similar function, expect different values different map layers (example, calculating mean pollutant concentration). fun.character function summarise character factor columns. default: function(x) paste(unique(x), collapse = \", \") default collapses unique values comma-separated list. fun.numeric function summarise numeric columns. default: function(x) signif(mean(x, na.rm = TRUE), 3) default takes mean three significant figures. numeric summaries may interest, maximum, minimum, standard deviation, . fun.dttm function summarise date columns. default: function(x) paste(lubridate::floor_date(range(x, na.rm = TRUE), \"day\"), collapse = \" \") default presents date range. statistics interest start end dates. ... currently used.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/buildPopup.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Build a Complex Popup for a Leaflet Map — buildPopup","text":"tibble::tibble()","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/buildPopup.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Build a Complex Popup for a Leaflet Map — buildPopup","text":"","code":"if (FALSE) { # \\dontrun{ buildPopup( data = polar_data, columns = c( \"Site\" = \"site\", \"Site Type\" = \"site_type\", \"Date Range\" = \"date\" ) ) %>% polarMap(\"nox\", popup = \"popup\") } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/convertPostcode.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert a UK postcode to a latitude/longitude pair — convertPostcode","title":"Convert a UK postcode to a latitude/longitude pair — convertPostcode","text":"much simpler implementation tools found PostcodesioR R package, intended use searchNetwork() function.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/convertPostcode.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert a UK postcode to a latitude/longitude pair — convertPostcode","text":"","code":"convertPostcode(postcode)"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/convertPostcode.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Convert a UK postcode to a latitude/longitude pair — convertPostcode","text":"https://postcodes.io/","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/convertPostcode.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert a UK postcode to a latitude/longitude pair — convertPostcode","text":"postcode valid UK postcode. required string containing single valid UK postcode, e.g., \"SW1A 1AA\".","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/convertPostcode.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert a UK postcode to a latitude/longitude pair — convertPostcode","text":"list containing latitude, longitude, input postcode.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/convertPostcode.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert a UK postcode to a latitude/longitude pair — convertPostcode","text":"","code":"# convert a UK postcode convertPostcode(\"SW1A1AA\") #> $lat #> [1] 51.50101 #> #> $lng #> [1] -0.141588 #> #> $postcode #> [1] \"SW1A 1AA\" #> if (FALSE) { # \\dontrun{ # use with `searchNetwork()` palace <- convertPostcode(\"SW1A1AA\") searchNetwork(lat = palace$lat, lng = palace$lng, max_dist = 10) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/deprecated-static-polar-maps.html","id":null,"dir":"Reference","previous_headings":"","what":"Deprecated static directional analysis functions — polarMapStatic","title":"Deprecated static directional analysis functions — polarMapStatic","text":"Static direction analysis mapping functions deprecated favour combined functions (e.g., polarMap()), present consistent, unified API users simply swap two output formats.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/deprecated-static-polar-maps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Deprecated static directional analysis functions — polarMapStatic","text":"","code":"polarMapStatic( data, pollutant = NULL, x = \"ws\", limits = \"free\", upper = \"fixed\", latitude = NULL, longitude = NULL, crs = 4326, provider = \"osm\", facet = NULL, cols = \"turbo\", alpha = 1, key = FALSE, facet.nrow = NULL, d.icon = 150, d.fig = 3, ... ) diffMapStatic( before, after, pollutant = NULL, limits = \"free\", x = \"ws\", latitude = NULL, longitude = NULL, crs = 4326, provider = \"osm\", facet = NULL, cols = c(\"#002F70\", \"#3167BB\", \"#879FDB\", \"#C8D2F1\", \"#F6F6F6\", \"#F4C8C8\", \"#DA8A8B\", \"#AE4647\", \"#5F1415\"), alpha = 1, key = FALSE, facet.nrow = NULL, d.icon = 150, d.fig = 3, ... ) annulusMapStatic( data, pollutant = NULL, period = \"hour\", facet = NULL, limits = \"free\", latitude = NULL, longitude = NULL, crs = 4326, provider = \"osm\", cols = \"turbo\", alpha = 1, key = FALSE, facet.nrow = NULL, d.icon = 150, d.fig = 3, ... ) windroseMapStatic( data, ws.int = 2, breaks = 4, facet = NULL, latitude = NULL, longitude = NULL, crs = 4326, provider = \"osm\", cols = \"turbo\", alpha = 1, key = FALSE, facet.nrow = NULL, d.icon = 150, d.fig = 3, ... ) pollroseMapStatic( data, pollutant = NULL, statistic = \"prop.count\", breaks = NULL, facet = NULL, latitude = NULL, longitude = NULL, crs = 4326, provider = \"osm\", cols = \"turbo\", alpha = 1, key = FALSE, facet.nrow = NULL, d.icon = 150, d.fig = 3, ... ) percentileMapStatic( data, pollutant = NULL, percentile = c(25, 50, 75, 90, 95), intervals = \"fixed\", latitude = NULL, longitude = NULL, crs = 4326, provider = \"osm\", facet = NULL, cols = \"turbo\", alpha = 1, key = FALSE, facet.nrow = NULL, d.icon = 150, d.fig = 3, ... ) freqMapStatic( data, pollutant = NULL, statistic = \"mean\", breaks = \"free\", latitude = NULL, longitude = NULL, crs = 4326, provider = \"osm\", facet = NULL, cols = \"turbo\", alpha = 1, key = FALSE, facet.nrow = NULL, d.icon = 150, d.fig = 3, ... )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/deprecated-static-polar-maps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Deprecated static directional analysis functions — polarMapStatic","text":"data Input data table pollutant, wind, geo-spatial information. required | scope: dynamic & static data frame. data frame must contain data plot directional analysis marker, includes wind speed (ws), wind direction (wd), column representing concentration pollutant. addition, data must include decimal latitude longitude (X/Y coordinate used conjunction crs). pollutant Pollutant name(s). required | scope: dynamic & static column name(s) pollutant(s) plot. multiple pollutants specified non-pairwise statistic supplied, type argument longer able used : Dynamic: pollutants can toggled using \"layer control\" menu. Static:: pollutants appear different panel. Multiple pollutants prohibit use type argument non-pairwise statistics. x radial axis variable. default: \"ws\" | scope: dynamic & static column name radial axis variable use openair::polarPlot(). Defaults using wind speed, \"ws\", meteorological variables ambient temperature atmospheric stability may useful. limits Specifier plot colour scale bounds. default: \"free\" | scope: dynamic & static One : \"fixed\" ensures markers use colour scale. \"free\" (default) allows markers use different colour scales. numeric vector form c(lower, upper) used define colour scale. example, limits = c(0, 100) force plot limits span 0-100. upper Specifier polar plot radial axis upper boundary. default: \"fixed\" | scope: dynamic & static One : \"fixed\" (default) ensures markers use radial axis scale. \"free\" allows markers use different radial axis scales. numeric value, used upper limit radial axis scale. latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. facet Passed type argument relevant polarMap() family function. cols Colours use plotting. default: \"turbo\" | scope: dynamic & static colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. facet.nrow Passed static.nrow argument relevant polarMap() family function. d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. ... Passed polar plotting function data frame represents \"\" case. See polarPlot() details different input requirements. data frame represents \"\" case. See polarPlot() details different input requirements. period Temporal period radial axis. default: \"hour\" | scope: dynamic & static Options \"hour\" (default, plot diurnal variations), \"season\" plot variation throughout year, \"weekday\" plot day week variation \"trend\" plot trend wind direction. ws.int wind speed interval colour axis. default: 2 | scope: dynamic & static wind speed interval. Default 2 m/s low met masts low mean wind speeds value 1 0.5 m/s may better. breaks Specifier number breaks colour axis. default: 4 | scope: dynamic & static commonly, number break points wind speed openair::windRose(). ws.int default 2, default breaks, 4, generates break points 2, 4, 6, 8. Breaks can also used set specific break points. example, argument `breaks = c(0, 1, 10, 100)“ breaks data segments <1, 1-10, 10-100, >100. statistic statistic applied data bin plot default: \"prop.mean\" | scope: dynamic & static Options currently include \"prop.count\", \"prop.mean\" \"abs.count\". \"prop.count\" sizes bins according proportion frequency measurements. Similarly, \"prop.mean\" sizes bins according relative contribution mean. \"abs.count\" provides absolute count measurements bin. percentile percentile values colour scale bin. default: c(25, 50, 75, 90, 95) | scope: dynamic & static percentile value(s) plot using openair::percentileRose(). Must vector values 0 100. percentile = NA mean line shown. intervals Specifier percentile rose radial axis intervals. default: \"fixed\" | scope: dynamic & static One : \"fixed\" (default) ensures markers use radial axis scale. \"free\" allows markers use different radial axis scales. numeric vector defining sequence numbers use intervals, e.g., intervals = c(0, 10, 30, 50).","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/deprecated-static-polar-maps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Deprecated static directional analysis functions — polarMapStatic","text":"ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/diffMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Bivariate polar 'difference' plots on dynamic and static maps — diffMap","title":"Bivariate polar 'difference' plots on dynamic and static maps — diffMap","text":"diffMap() function creates map using bivariate polar plots markers. number pollutants can specified using pollutant argument, multiple layers markers can created using type. default, maps dynamic can panned, zoomed, otherwise interacted . Using static argument allows static images produced instead.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/diffMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Bivariate polar 'difference' plots on dynamic and static maps — diffMap","text":"","code":"diffMap( before, after, pollutant = NULL, x = \"ws\", limits = \"free\", latitude = NULL, longitude = NULL, crs = 4326, type = NULL, popup = NULL, label = NULL, provider = \"OpenStreetMap\", cols = rev(openair::openColours(\"RdBu\", 10)), alpha = 1, key = FALSE, legend = TRUE, legend.position = NULL, legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control.autotext = TRUE, d.icon = 200, d.fig = 3.5, static = FALSE, static.nrow = NULL, progress = TRUE, ..., control = NULL )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/diffMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Bivariate polar 'difference' plots on dynamic and static maps — diffMap","text":"data frame represents \"\" case. See polarPlot() details different input requirements. data frame represents \"\" case. See polarPlot() details different input requirements. pollutant Mandatory. pollutant name corresponding variable data frame supplied e.g. pollutant = \"nox\". can also one pollutant specified e.g. pollutant = c(\"nox\", \"no2\"). main use using two pollutants model evaluation two species expected similar concentrations. saves user stacking data possible work columns data directly. typical use pollutant = c(\"obs\", \"mod\") compare two columns “obs” (observations) “mod” (modelled values). pair-wise statistics Pearson correlation regression techniques plotted, pollutant takes two elements . example, pollutant = c(\"bc\", \"pm25\") \"bc\" function \"pm25\". x Name variable plot wind direction polar coordinates, default wind speed, “ws”. limits Limits plot colour scale. default: \"free\" | scope: dynamic & static One : \"free\" (default) allows markers use different colour scales. numeric vector form c(lower, upper) used define colour scale. example, limits = c(-10, 10) force plot limits span -10 10. recommended use symmetrical limit scale (along \"diverging\" colour palette) effective visualisation. Note \"fixed\" option supported diffMap(). latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. type method condition data separate plotting. default: NULL | scope: dynamic & static Used splitting input data different groups, passed type argument openair::cutData(). type specified: Dynamic: different data splits can toggled using \"layer control\" menu. Static:: data splits appear different panel. type used multiple pollutant columns provided. popup Content marker popups dynamic maps. default: NULL | scope: dynamic Columns used HTML content marker popups dynamic maps. Popups may useful show information individual sites (e.g., site names, codes, types, etc.). vector column names provided passed buildPopup() using default values. label Content marker hover-dynamic maps. default: NULL | scope: dynamic Column used HTML content hover-labels. Labels useful reasons popups, though typically shorter. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. cols Colours use plotting. default: rev(openair::openColours(\"RdBu\", 10)) | scope: dynamic & static colours used plotting, passed openair::openColours(). recommended use \"diverging\" colour palette (along symmetrical limit scale) effective visualisation. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. legend Draw shared legend? default: TRUE | scope: dynamic & static markers share colour scale (e.g., limits != \"free\" polarMap()), shared legend created side map? legend.position Position shared legend. default: NULL | scope: dynamic & static legend = TRUE, legend placed? Dynamic: One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). Static:: One \"top\", \"right\", \"bottom\" \"left\". Passed legend.position argument ggplot2::theme(). legend.title Title legend. default: NULL | scope: dynamic & static default, legend.title = NULL, function attempt provide sensible legend title. legend.title allows users overwrite - example, include units contextual information. dynamic maps, users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE | scope: dynamic & static legend.title.autotext = TRUE, legend.title first run quickTextHTML() (dynamic) openair::quickText() (static). control.collapsed Show layer control collapsed? default: FALSE | scope: dynamic dynamic maps, \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" | scope: dynamic type != NULL, multiple pollutants specified, \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.autotext Automatically format content layer control menu? default: TRUE | scope: dynamic control.autotext = TRUE, content \"layer control\" interface first run quickTextHTML(). d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. static Produce static map? default: FALSE controls whether dynamic static map produced. former default broadly useful, latter may preferable DOCX PDF outputs (e.g., academic papers). static.nrow Number rows static map. default: NULL | scope: static Controls number rows panels static map multiple pollutants type specified; passed nrow argument ggplot2::facet_wrap(). default, NULL, results roughly square grid panels. progress Show progress bar? default: TRUE | scope: dynamic & static default, progress bar shown visualise function's progress creating individual polar markers. option allows turned , desired. ... Arguments passed openair::polarPlot wd Name wind direction field. statistic statistic applied wind speed/direction bin. smoothing involved, colour scale statistics provide indication overall pattern interpreted concentration units e.g. statistic = \"weighted.mean\" bin mean multiplied bin frequency divided total frequency. many cases using polarFreq better. Setting statistic = \"weighted.mean\" can useful provides indication concentration * frequency occurrence highlight wind speed/direction conditions dominate overall mean.Can : “mean” (default), “median”, “max” (maximum), “frequency”. “stdev” (standard deviation), “weighted.mean”. statistic = \"nwr\" Implements Non-parametric Wind Regression approach Henry et al. (2009) uses kernel smoothers. openair implementation identical Gaussian kernels used wind direction speed. smoothing controlled ws_spread wd_spread. statistic = \"cpf\" conditional probability function (CPF) plotted single (usually high) percentile level supplied. CPF defined CPF = /ny, number samples y bin (default wind direction, wind speed interval) mixing ratios greater overall percentile concentration, ny total number samples wind sector (see Ashbaugh et al., 1985). Note percentile intervals can also considered; see percentile details. statistic = \"r\" statistic = \"Pearson\", Pearson correlation coefficient calculated two pollutants. calculation involves weighted Pearson correlation coefficient, weighted Gaussian kernels wind direction radial variable (default wind speed). weight assigned values close wind speed-direction interval. Kernel weighting used ensure data used rather relying potentially small number values wind speed-direction interval. statistic = \"Spearman\", Spearman correlation coefficient calculated two pollutants. calculation involves weighted Spearman correlation coefficient, weighted Gaussian kernels wind direction radial variable (default wind speed). weight assigned values close wind speed-direction interval. Kernel weighting used ensure data used rather relying potentially small number values wind speed-direction interval. \"robust_slope\" another option pair-wise statistics \"quantile.slope\", uses quantile regression estimate slope particular quantile level (see also tau setting quantile level). \"york_slope\" another option pair-wise statistics uses York regression method estimate slope. method uncertainties x y used determination slope. uncertainties provided x_error y_error — see . exclude.missing Setting option TRUE (default) removes points plot far original data. smoothing routines produce predictions points data exist .e. predict. removing points far original data produces plot clear original data lie. set FALSE missing data interpolated. uncertainty uncertainty calculated surface shown? TRUE three plots produced scale showing predicted surface together estimated lower upper uncertainties 95% confidence interval. Calculating uncertainties useful understand whether features real . example, high wind speeds data greater uncertainty predicted values. uncertainties calculated using GAM weighting done frequency measurements wind speed-direction bin. Note uncertainties calculated type set \"default\". percentile statistic = \"percentile\" percentile used, expressed 0 100. Note percentile value calculated wind speed, wind direction ‘bins’. reason can also useful set min.bin ensure sufficient number points available estimate percentile. See quantile details percentiles calculated. percentile also used Conditional Probability Function (CPF) plots. percentile can length two, case percentile interval considered use CPF. example, percentile = c(90, 100) plot CPF concentrations 90 100th percentiles. Percentile intervals can useful identifying specific sources. addition, percentile can also length 3. third value ‘trim’ value applied. calculating percentile intervals many can cover low values useful information. trim value ensures values greater equal trim * mean value considered percentile intervals calculated. effect extract detail many source signatures. See manual examples. Finally, trim value less zero percentile range interpreted absolute concentration values subsetting carried directly. weights edges plot may data points wind speed-direction interval, situations distort plot concentrations high. weights applies weighting reduce influence. example default single data point exists weighting factor 0.25 two points 0.5. apply weighting use data , use weights = c(1, 1, 1). alternative -weighting points can removed altogether using min.bin. min.bin minimum number points allowed wind speed/wind direction bin. default 1. value two requires least 2 valid records bin ; bins less 2 valid records set NA. Care taken using value > 1 risk removing real data points. recommended consider data care. Also, polarFreq function can use circumstances. mis.col min.bin > 1 can useful show data removed plots. done shading missing data mis.col. highlight missing data min.bin > 1 choose mis.col = \"transparent\". upper sets upper limit wind speed used. Often relatively data points high wind speeds plotting can reduce useful information plot. force.positive default TRUE. Sometimes smoothing data steep gradients possible predicted values negative. force.positive = TRUE ensures predictions remain positive. useful several reasons. First, lots missing data interpolation needed can result artefacts predictions far original data. Second, known beforehand data positive, option carries assumption prediction. likely time setting force.positive = FALSE background concentrations first subtracted resulting data legitimately negative. vast majority situations expected user need alter default option. k smoothing parameter used gam function package mgcv. Typically, value around 100 (default) seems suitable resolve important features plot. appropriate choice k problem-dependent; extensive testing polar plots many different problems suggests value k 100 suitable. Setting k higher values tend affect surface predictions much add computation time. Lower values k increase smoothing. Sometimes data plot polarPlot fail. circumstances can worth lowering value k. normalise TRUE concentrations normalised dividing mean value. done fitting smooth surface. option particularly useful one interested patterns concentrations several pollutants different scales e.g. NOx CO. Often useful one pollutant chosen. auto.text Either TRUE (default) FALSE. TRUE titles axis labels automatically try format pollutant names units properly e.g. subscripting `2' NO2. ws_spread value sigma used Gaussian kernel weighting wind speed statistic = \"nwr\" correlation regression statistics used r. Default 0.5. wd_spread value sigma used Gaussian kernel weighting wind direction statistic = \"nwr\" correlation regression statistics used r. Default 4. x_error x error / uncertainty used statistic = \"york_slope\". y_error y error / uncertainty used statistic = \"york_slope\". kernel Type kernel used weighting procedure correlation regression techniques used. \"gaussian\" supported may enhanced future. formula.label pair-wise statistics regression slopes calculated plotted, formula label displayed? formula.label also determine whether concentration information printed statistic = \"cpf\". tau quantile estimated statistic set \"quantile.slope\". Default 0.5 equal median ignored \"quantile.slope\" used. plot plot produced? FALSE can useful analysing data extract plot components plotting ways. control Deprecated. Please use type.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/diffMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Bivariate polar 'difference' plots on dynamic and static maps — diffMap","text":"Either: Dynamic: leaflet object Static: ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/diffMap.html","id":"customisation-of-static-maps-using-ggplot-","dir":"Reference","previous_headings":"","what":"Customisation of static maps using ggplot2","title":"Bivariate polar 'difference' plots on dynamic and static maps — diffMap","text":"outputs static directional analysis functions ggplot2 figures, customisation possible using functions ggplot2::theme(), ggplot2::guides() ggplot2::labs(). multiple pollutants specified, subscripting (e.g., \"x\" \"NOx\") achieved using ggtext package. Therefore choose override plot theme, recommended use [ggplot2::theme()] [ggtext::element_markdown()] define strip.text parameter. arguments like limits, percentile breaks defined, legend automatically added figure. Legends can removed using ggplot2::theme(legend.position = \"none\"), customised using ggplot2::guides() either color = ggplot2::guide_colourbar() continuous legends fill = ggplot2::guide_legend() discrete legends.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/diffMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Bivariate polar 'difference' plots on dynamic and static maps — diffMap","text":"","code":"if (FALSE) { # \\dontrun{ # NB: \"after\" is some dummy data to demonstrate functionality diffMap( before = polar_data, after = dplyr::mutate(polar_data, nox = jitter(nox, factor = 5)), pollutant = \"nox\" ) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/freqMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Polar frequency plots on dynamic and static maps — freqMap","title":"Polar frequency plots on dynamic and static maps — freqMap","text":"freqMap() function creates map using polar frequency plots markers. number pollutants can specified using pollutant argument, multiple layers markers can created using type. default, maps dynamic can panned, zoomed, otherwise interacted . Using static argument allows static images produced instead.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/freqMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Polar frequency plots on dynamic and static maps — freqMap","text":"","code":"freqMap( data, pollutant = NULL, statistic = \"mean\", breaks = \"free\", latitude = NULL, longitude = NULL, crs = 4326, type = NULL, popup = NULL, label = NULL, provider = \"OpenStreetMap\", cols = \"turbo\", alpha = 1, key = FALSE, legend = TRUE, legend.position = NULL, legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control.autotext = TRUE, d.icon = 200, d.fig = 3.5, static = FALSE, static.nrow = NULL, progress = TRUE, ..., control = NULL )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/freqMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Polar frequency plots on dynamic and static maps — freqMap","text":"data Input data table pollutant, wind, geo-spatial information. required | scope: dynamic & static data frame. data frame must contain data plot directional analysis marker, includes wind speed (ws), wind direction (wd), column representing concentration pollutant. addition, data must include decimal latitude longitude (X/Y coordinate used conjunction crs). pollutant Pollutant name(s). required | scope: dynamic & static column name(s) pollutant(s) plot. multiple pollutants specified non-pairwise statistic supplied, type argument longer able used : Dynamic: pollutants can toggled using \"layer control\" menu. Static:: pollutants appear different panel. Multiple pollutants prohibit use type argument non-pairwise statistics. statistic statistic applied wind speed/direction bin. default: \"mean\" | scope: dynamic & static Can \"frequency\", \"mean\", \"median\", \"max\" (maximum), \"stdev\" (standard deviation) \"weighted.mean\". option \"frequency\" simplest plots frequency wind speed/direction different bins. scale therefore shows counts bin. option \"mean\" (default) plot mean concentration pollutant (see next point) wind speed/direction bins, . Finally, \"weighted.mean\" plot concentration pollutant weighted wind speed/direction. segment therefore provides percentage overall contribution total concentration. Note options \"frequency\", necessary also provide name pollutant. See function openair::cutData() details. breaks Specifier breaks plot colour scale. default: \"free\" | scope: dynamic & static One : \"fixed\" ensures markers use colour scale. \"free\" (default) allows markers use different colour scales. numeric vector defining sequence numbers use breaks. sequence represent one equal spacing, e.g., breaks = seq(0, 100, 10) - scale 0-10 intervals 10, flexible sequence, e.g., breaks = c(0, 1, 5, 7, 10), may useful situations. latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. type method condition data separate plotting. default: NULL | scope: dynamic & static Used splitting input data different groups, passed type argument openair::cutData(). type specified: Dynamic: different data splits can toggled using \"layer control\" menu. Static:: data splits appear different panel. type used multiple pollutant columns provided. popup Content marker popups dynamic maps. default: NULL | scope: dynamic Columns used HTML content marker popups dynamic maps. Popups may useful show information individual sites (e.g., site names, codes, types, etc.). vector column names provided passed buildPopup() using default values. label Content marker hover-dynamic maps. default: NULL | scope: dynamic Column used HTML content hover-labels. Labels useful reasons popups, though typically shorter. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. cols Colours use plotting. default: \"turbo\" | scope: dynamic & static colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. legend Draw shared legend? default: TRUE | scope: dynamic & static markers share colour scale (e.g., limits != \"free\" polarMap()), shared legend created side map? legend.position Position shared legend. default: NULL | scope: dynamic & static legend = TRUE, legend placed? Dynamic: One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). Static:: One \"top\", \"right\", \"bottom\" \"left\". Passed legend.position argument ggplot2::theme(). legend.title Title legend. default: NULL | scope: dynamic & static default, legend.title = NULL, function attempt provide sensible legend title. legend.title allows users overwrite - example, include units contextual information. dynamic maps, users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE | scope: dynamic & static legend.title.autotext = TRUE, legend.title first run quickTextHTML() (dynamic) openair::quickText() (static). control.collapsed Show layer control collapsed? default: FALSE | scope: dynamic dynamic maps, \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" | scope: dynamic type != NULL, multiple pollutants specified, \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.autotext Automatically format content layer control menu? default: TRUE | scope: dynamic control.autotext = TRUE, content \"layer control\" interface first run quickTextHTML(). d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. static Produce static map? default: FALSE controls whether dynamic static map produced. former default broadly useful, latter may preferable DOCX PDF outputs (e.g., academic papers). static.nrow Number rows static map. default: NULL | scope: static Controls number rows panels static map multiple pollutants type specified; passed nrow argument ggplot2::facet_wrap(). default, NULL, results roughly square grid panels. progress Show progress bar? default: TRUE | scope: dynamic & static default, progress bar shown visualise function's progress creating individual polar markers. option allows turned , desired. ... Arguments passed openair::polarFreq ws.int Wind speed interval assumed. cases e.g. low met mast, interval 0.5 may appropriate. wd.nint Number intervals wind direction. grid.line Radial spacing grid lines. trans transformation applied? Sometimes producing plots kind can dominated high points. default therefore TRUE square-root transform applied. results non-linear scale (usually) better representation distribution. set FALSE linear scale used. min.bin minimum number points allowed wind speed/wind direction bin. default 1. value two requires least 2 valid records bin ; bins less 2 valid records set NA. Care taken using value > 1 risk removing real data points. recommended consider data care. Also, polarFreq function can use circumstances. ws.upper user-defined upper wind speed use. useful ensuring consistent scale different plots. example, always ensure wind speeds displayed 1-10, set ws.int = 10. offset offset controls size ‘hole’ middle expressed percentage maximum wind speed. Setting higher offset e.g. 50 useful statistic = \"weighted.mean\" ws.int greater maximum wind speed. See example . border.col colour boundary wind speed/direction bin. default transparent. Another useful choice sometimes \"white\". key.header Adds additional text/labels scale key. example, passing options key.header = \"header\", key.footer = \"footer1\" adds addition text scale key. arguments passed drawOpenKey via quickText, applying auto.text argument, handle formatting. key.footer see key.footer. key.position Location scale key plotted. Allowed arguments currently include \"top\", \"right\", \"bottom\" \"left\". auto.text Either TRUE (default) FALSE. TRUE titles axis labels automatically try format pollutant names units properly e.g. subscripting `2' NO2. control Deprecated. Please use type.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/freqMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Polar frequency plots on dynamic and static maps — freqMap","text":"Either: Dynamic: leaflet object Static: ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/freqMap.html","id":"customisation-of-static-maps-using-ggplot-","dir":"Reference","previous_headings":"","what":"Customisation of static maps using ggplot2","title":"Polar frequency plots on dynamic and static maps — freqMap","text":"outputs static directional analysis functions ggplot2 figures, customisation possible using functions ggplot2::theme(), ggplot2::guides() ggplot2::labs(). multiple pollutants specified, subscripting (e.g., \"x\" \"NOx\") achieved using ggtext package. Therefore choose override plot theme, recommended use [ggplot2::theme()] [ggtext::element_markdown()] define strip.text parameter. arguments like limits, percentile breaks defined, legend automatically added figure. Legends can removed using ggplot2::theme(legend.position = \"none\"), customised using ggplot2::guides() either color = ggplot2::guide_colourbar() continuous legends fill = ggplot2::guide_legend() discrete legends.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/freqMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Polar frequency plots on dynamic and static maps — freqMap","text":"","code":"if (FALSE) { # \\dontrun{ freqMap(polar_data, pollutant = \"nox\", statistic = \"mean\", provider = \"CartoDB.Voyager\" ) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/networkMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a leaflet map of air quality measurement network sites — networkMap","title":"Create a leaflet map of air quality measurement network sites — networkMap","text":"function uses openair::importMeta() obtain metadata measurement sites uses create attractive leaflet map. default map created readers may toggle vector base map satellite/aerial image, although users can customise control menu using provider control parameters.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/networkMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a leaflet map of air quality measurement network sites — networkMap","text":"","code":"networkMap( source = \"aurn\", control = NULL, year = NULL, cluster = TRUE, provider = c(Default = \"OpenStreetMap\", Satellite = \"Esri.WorldImagery\"), legend = TRUE, legend.position = \"topright\", control.collapsed = FALSE, control.position = \"topright\" )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/networkMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a leaflet map of air quality measurement network sites — networkMap","text":"source One UK European monitoring networks. default: \"aurn\" One air quality networks data available openair. Available networks include: \"aurn\", UK Automatic Urban Rural Network. \"aqe\", Air Quality England Network. \"saqn\", Scottish Air Quality Network. \"waqn\", Welsh Air Quality Network. \"ni\", Northern Ireland Air Quality Network. \"local\", Locally managed air quality networks England. \"kcl\", King's College London networks. \"europe\", European AirBase/e-reporting data. two additional options provided convenience: \"ukaq\" return metadata networks data imported importUKAQ() (.e., AURN, AQE, SAQN, WAQN, NI, local networks). \"\" import available metadata (.e., \"ukaq\" plus \"kcl\" \"europe\"). control Option create 'layer control' menu. default: NULL string specify categories \"layer control\" menu, allow readers select different site categories. Choices include: \"variable\" toggle different pollutants \"site_type\" different site classifications \"agglomeration\", \"zone\" \"local_authority\" different regions UK \"network\" different monitoring networks, one source provided. year year, range years, filter data. default: NULL default, networkMap() visualises sites currently operational. year allows users show sites open specific year, range years. See openair::importMeta() information. cluster Cluster markers together zoomed ? default: TRUE cluster = TRUE, markers clustered together. may useful sources like \"kcl\" many markers close together. Defaults TRUE, forced TRUE source = \"europe\" due large number sites. provider basemap(s) used. default: c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\") number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) legend Draw shared legend? default: TRUE multiple sources defined, shared legend created side map? legend.position Position legend default: \"topright\" shared legend placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.collapsed Show layer control collapsed? default: FALSE \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/networkMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a leaflet map of air quality measurement network sites — networkMap","text":"leaflet object.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/networkMap.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a leaflet map of air quality measurement network sites — networkMap","text":"selecting multiple data sources using source, please mindful can overlap different networks. example, air quality site Scotland may part AURN SAQN. networkMap() show one marker sites, uses order source arguments provided hierarchy assign sites networks. aforementioned AURN & SAQN site therefore SAQN code displayed source = c(\"saqn\", \"aurn\"), AURN code displayed source = c(\"aurn\", \"saqn\"). hierarchy also reflected control = \"network\" used. leaflet markers part multiple groups, AURN & SAQN site part \"SAQN\" layer control group source = c(\"saqn\", \"aurn\") \"AURN\" layer control group source = c(\"aurn\", \"saqn\").","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/networkMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a leaflet map of air quality measurement network sites — networkMap","text":"","code":"if (FALSE) { # \\dontrun{ # view one network, grouped by site type networkMap(source = \"aurn\", control = \"site_type\") # view multiple networks, grouped by network networkMap(source = c(\"aurn\", \"waqn\", \"saqn\"), control = \"network\") } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/openairmaps-package.html","id":null,"dir":"Reference","previous_headings":"","what":"openairmaps: Create Maps of Air Pollution Data — openairmaps-package","title":"openairmaps: Create Maps of Air Pollution Data — openairmaps-package","text":"Combine air quality data analysis methods 'openair' JavaScript 'Leaflet' (https://leafletjs.com/) library. Functionality includes plotting site maps, \"directional analysis\" figures polar plots, air mass trajectories.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/openairmaps-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"openairmaps: Create Maps of Air Pollution Data — openairmaps-package","text":"companion package openair, UK NERC- Defra-funded R package analysis data pertaining pollution monitoring dispersion modelling. R ecosystem developed, R Markdown , recently, Quarto emerged capable tools combining data analysis document preparation. approaches can render typical .docx .pdf outputs, one common output formats HTML document. format many strengths, key one interactivity; HTML widgets allow documents informative engaging. Numerous packages developed easily develop interactive widgets, plotly dygraphs plots, DT tables, leaflet maps. openairmaps package concerns making leaflet maps. Air quality data analysis — particularly pertains long term monitoring data — naturally lends visualised spatially map. Monitoring networks geographically distributed, ignoring geographical context may lead incomplete insights best incorrect conclusions worst! Furthermore, many air quality analysis tools directional, asking questions data along lines “elevated concentrations come North, South, East West?” natural question follows “well, actually North/South/East/West causing elevated concentrations?” — map can help answer question straightforwardly. openairmaps package contains functions visualise UK air quality networks, place \"polar analysis\" markers (like openair polar plot) airmass trajectory paths maps. uses similar syntax openair package, make moving two relatively seamless.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/openairmaps-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"openairmaps: Create Maps of Air Pollution Data — openairmaps-package","text":"Maintainer: Jack Davison jack.davison@ricardo.com (ORCID) Authors: David Carslaw david.carslaw@york.ac.uk (ORCID)","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/percentileMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Percentile roses on dynamic and static maps — percentileMap","title":"Percentile roses on dynamic and static maps — percentileMap","text":"percentileMap() function creates map using polar percentile roses markers. number pollutants can specified using pollutant argument, multiple layers markers can created using type. default, maps dynamic can panned, zoomed, otherwise interacted . Using static argument allows static images produced instead.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/percentileMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Percentile roses on dynamic and static maps — percentileMap","text":"","code":"percentileMap( data, pollutant = NULL, percentile = c(25, 50, 75, 90, 95), intervals = \"fixed\", latitude = NULL, longitude = NULL, crs = 4326, type = NULL, popup = NULL, label = NULL, provider = \"OpenStreetMap\", cols = \"turbo\", alpha = 1, key = FALSE, legend = TRUE, legend.position = NULL, legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control.autotext = TRUE, d.icon = 200, d.fig = 3.5, static = FALSE, static.nrow = NULL, progress = TRUE, ..., control = NULL )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/percentileMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Percentile roses on dynamic and static maps — percentileMap","text":"data Input data table pollutant, wind, geo-spatial information. required | scope: dynamic & static data frame. data frame must contain data plot directional analysis marker, includes wind speed (ws), wind direction (wd), column representing concentration pollutant. addition, data must include decimal latitude longitude (X/Y coordinate used conjunction crs). pollutant Pollutant name(s). required | scope: dynamic & static column name(s) pollutant(s) plot. multiple pollutants specified non-pairwise statistic supplied, type argument longer able used : Dynamic: pollutants can toggled using \"layer control\" menu. Static:: pollutants appear different panel. Multiple pollutants prohibit use type argument non-pairwise statistics. percentile percentile values colour scale bin. default: c(25, 50, 75, 90, 95) | scope: dynamic & static percentile value(s) plot using openair::percentileRose(). Must vector values 0 100. percentile = NA mean line shown. intervals Specifier percentile rose radial axis intervals. default: \"fixed\" | scope: dynamic & static One : \"fixed\" (default) ensures markers use radial axis scale. \"free\" allows markers use different radial axis scales. numeric vector defining sequence numbers use intervals, e.g., intervals = c(0, 10, 30, 50). latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. type method condition data separate plotting. default: NULL | scope: dynamic & static Used splitting input data different groups, passed type argument openair::cutData(). type specified: Dynamic: different data splits can toggled using \"layer control\" menu. Static:: data splits appear different panel. type used multiple pollutant columns provided. popup Content marker popups dynamic maps. default: NULL | scope: dynamic Columns used HTML content marker popups dynamic maps. Popups may useful show information individual sites (e.g., site names, codes, types, etc.). vector column names provided passed buildPopup() using default values. label Content marker hover-dynamic maps. default: NULL | scope: dynamic Column used HTML content hover-labels. Labels useful reasons popups, though typically shorter. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. cols Colours use plotting. default: \"turbo\" | scope: dynamic & static colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. legend Draw shared legend? default: TRUE | scope: dynamic & static markers share colour scale (e.g., limits != \"free\" polarMap()), shared legend created side map? legend.position Position shared legend. default: NULL | scope: dynamic & static legend = TRUE, legend placed? Dynamic: One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). Static:: One \"top\", \"right\", \"bottom\" \"left\". Passed legend.position argument ggplot2::theme(). legend.title Title legend. default: NULL | scope: dynamic & static default, legend.title = NULL, function attempt provide sensible legend title. legend.title allows users overwrite - example, include units contextual information. dynamic maps, users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE | scope: dynamic & static legend.title.autotext = TRUE, legend.title first run quickTextHTML() (dynamic) openair::quickText() (static). control.collapsed Show layer control collapsed? default: FALSE | scope: dynamic dynamic maps, \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" | scope: dynamic type != NULL, multiple pollutants specified, \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.autotext Automatically format content layer control menu? default: TRUE | scope: dynamic control.autotext = TRUE, content \"layer control\" interface first run quickTextHTML(). d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. static Produce static map? default: FALSE controls whether dynamic static map produced. former default broadly useful, latter may preferable DOCX PDF outputs (e.g., academic papers). static.nrow Number rows static map. default: NULL | scope: static Controls number rows panels static map multiple pollutants type specified; passed nrow argument ggplot2::facet_wrap(). default, NULL, results roughly square grid panels. progress Show progress bar? default: TRUE | scope: dynamic & static default, progress bar shown visualise function's progress creating individual polar markers. option allows turned , desired. ... Arguments passed openair::percentileRose wd Name wind direction field. smooth wind direction data smoothed using cyclic spline? method method = \"default\" supplied percentiles wind direction calculated. method = \"cpf\" conditional probability function (CPF) plotted single (usually high) percentile level supplied. CPF defined CPF = /ny, number samples wind sector y mixing ratios greater overall percentile concentration, ny total number samples wind sector (see Ashbaugh et al., 1985). angle Default angle “spokes” smooth = FALSE. mean Show mean wind direction line? mean.lty Line type mean line. mean.lwd Line width mean line. mean.col Line colour mean line. fill percentile intervals filled (default) lines drawn (fill = FALSE). angle.scale Sometimes placement scale may interfere interesting feature. user can therefore set angle.scale value 0 360 degrees mitigate problems. example angle.scale = 45 draw scale heading NE direction. auto.text Either TRUE (default) FALSE. TRUE titles axis labels automatically try format pollutant names units properly e.g. subscripting `2' NO2. key.header Adds additional text/labels scale key. example, passing options key.header = \"header\", key.footer = \"footer1\" adds addition text scale key. arguments passed drawOpenKey via quickText, applying auto.text argument, handle formatting. key.footer see key.footer. key.position Location scale key plotted. Allowed arguments currently include \"top\", \"right\", \"bottom\" \"left\". control Deprecated. Please use type.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/percentileMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Percentile roses on dynamic and static maps — percentileMap","text":"Either: Dynamic: leaflet object Static: ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/percentileMap.html","id":"customisation-of-static-maps-using-ggplot-","dir":"Reference","previous_headings":"","what":"Customisation of static maps using ggplot2","title":"Percentile roses on dynamic and static maps — percentileMap","text":"outputs static directional analysis functions ggplot2 figures, customisation possible using functions ggplot2::theme(), ggplot2::guides() ggplot2::labs(). multiple pollutants specified, subscripting (e.g., \"x\" \"NOx\") achieved using ggtext package. Therefore choose override plot theme, recommended use [ggplot2::theme()] [ggtext::element_markdown()] define strip.text parameter. arguments like limits, percentile breaks defined, legend automatically added figure. Legends can removed using ggplot2::theme(legend.position = \"none\"), customised using ggplot2::guides() either color = ggplot2::guide_colourbar() continuous legends fill = ggplot2::guide_legend() discrete legends.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/percentileMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Percentile roses on dynamic and static maps — percentileMap","text":"","code":"if (FALSE) { # \\dontrun{ percentileMap(polar_data, pollutant = \"nox\", provider = \"CartoDB.Voyager\" ) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pipe.html","id":null,"dir":"Reference","previous_headings":"","what":"Pipe operator — %>%","title":"Pipe operator — %>%","text":"See magrittr::[\\%>\\%][magrittr::pipe] details.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pipe.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Pipe operator — %>%","text":"","code":"lhs %>% rhs"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pipe.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Pipe operator — %>%","text":"lhs value magrittr placeholder. rhs function call using magrittr semantics.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pipe.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Pipe operator — %>%","text":"result calling rhs(lhs).","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polarMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Bivariate polar plots on dynamic and static maps — polarMap","title":"Bivariate polar plots on dynamic and static maps — polarMap","text":"polarMap() function creates map using bivariate polar plots markers. number pollutants can specified using pollutant argument, multiple layers markers can created using type. default, maps dynamic can panned, zoomed, otherwise interacted . Using static argument allows static images produced instead.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polarMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Bivariate polar plots on dynamic and static maps — polarMap","text":"","code":"polarMap( data, pollutant = NULL, x = \"ws\", limits = \"free\", upper = \"fixed\", latitude = NULL, longitude = NULL, crs = 4326, type = NULL, popup = NULL, label = NULL, provider = \"OpenStreetMap\", cols = \"turbo\", alpha = 1, key = FALSE, legend = TRUE, legend.position = NULL, legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control.autotext = TRUE, d.icon = 200, d.fig = 3.5, static = FALSE, static.nrow = NULL, progress = TRUE, ..., control = NULL )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polarMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Bivariate polar plots on dynamic and static maps — polarMap","text":"data Input data table pollutant, wind, geo-spatial information. required | scope: dynamic & static data frame. data frame must contain data plot directional analysis marker, includes wind speed (ws), wind direction (wd), column representing concentration pollutant. addition, data must include decimal latitude longitude (X/Y coordinate used conjunction crs). pollutant Pollutant name(s). required | scope: dynamic & static column name(s) pollutant(s) plot. multiple pollutants specified non-pairwise statistic supplied, type argument longer able used : Dynamic: pollutants can toggled using \"layer control\" menu. Static:: pollutants appear different panel. Multiple pollutants prohibit use type argument non-pairwise statistics. x radial axis variable. default: \"ws\" | scope: dynamic & static column name radial axis variable use openair::polarPlot(). Defaults using wind speed, \"ws\", meteorological variables ambient temperature atmospheric stability may useful. limits Specifier plot colour scale bounds. default: \"free\" | scope: dynamic & static One : \"fixed\" ensures markers use colour scale. \"free\" (default) allows markers use different colour scales. numeric vector form c(lower, upper) used define colour scale. example, limits = c(0, 100) force plot limits span 0-100. upper Specifier polar plot radial axis upper boundary. default: \"fixed\" | scope: dynamic & static One : \"fixed\" (default) ensures markers use radial axis scale. \"free\" allows markers use different radial axis scales. numeric value, used upper limit radial axis scale. latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. type method condition data separate plotting. default: NULL | scope: dynamic & static Used splitting input data different groups, passed type argument openair::cutData(). type specified: Dynamic: different data splits can toggled using \"layer control\" menu. Static:: data splits appear different panel. type used multiple pollutant columns provided. popup Content marker popups dynamic maps. default: NULL | scope: dynamic Columns used HTML content marker popups dynamic maps. Popups may useful show information individual sites (e.g., site names, codes, types, etc.). vector column names provided passed buildPopup() using default values. label Content marker hover-dynamic maps. default: NULL | scope: dynamic Column used HTML content hover-labels. Labels useful reasons popups, though typically shorter. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. cols Colours use plotting. default: \"turbo\" | scope: dynamic & static colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. legend Draw shared legend? default: TRUE | scope: dynamic & static markers share colour scale (e.g., limits != \"free\" polarMap()), shared legend created side map? legend.position Position shared legend. default: NULL | scope: dynamic & static legend = TRUE, legend placed? Dynamic: One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). Static:: One \"top\", \"right\", \"bottom\" \"left\". Passed legend.position argument ggplot2::theme(). legend.title Title legend. default: NULL | scope: dynamic & static default, legend.title = NULL, function attempt provide sensible legend title. legend.title allows users overwrite - example, include units contextual information. dynamic maps, users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE | scope: dynamic & static legend.title.autotext = TRUE, legend.title first run quickTextHTML() (dynamic) openair::quickText() (static). control.collapsed Show layer control collapsed? default: FALSE | scope: dynamic dynamic maps, \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" | scope: dynamic type != NULL, multiple pollutants specified, \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.autotext Automatically format content layer control menu? default: TRUE | scope: dynamic control.autotext = TRUE, content \"layer control\" interface first run quickTextHTML(). d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. static Produce static map? default: FALSE controls whether dynamic static map produced. former default broadly useful, latter may preferable DOCX PDF outputs (e.g., academic papers). static.nrow Number rows static map. default: NULL | scope: static Controls number rows panels static map multiple pollutants type specified; passed nrow argument ggplot2::facet_wrap(). default, NULL, results roughly square grid panels. progress Show progress bar? default: TRUE | scope: dynamic & static default, progress bar shown visualise function's progress creating individual polar markers. option allows turned , desired. ... Arguments passed openair::polarPlot wd Name wind direction field. statistic statistic applied wind speed/direction bin. smoothing involved, colour scale statistics provide indication overall pattern interpreted concentration units e.g. statistic = \"weighted.mean\" bin mean multiplied bin frequency divided total frequency. many cases using polarFreq better. Setting statistic = \"weighted.mean\" can useful provides indication concentration * frequency occurrence highlight wind speed/direction conditions dominate overall mean.Can : “mean” (default), “median”, “max” (maximum), “frequency”. “stdev” (standard deviation), “weighted.mean”. statistic = \"nwr\" Implements Non-parametric Wind Regression approach Henry et al. (2009) uses kernel smoothers. openair implementation identical Gaussian kernels used wind direction speed. smoothing controlled ws_spread wd_spread. statistic = \"cpf\" conditional probability function (CPF) plotted single (usually high) percentile level supplied. CPF defined CPF = /ny, number samples y bin (default wind direction, wind speed interval) mixing ratios greater overall percentile concentration, ny total number samples wind sector (see Ashbaugh et al., 1985). Note percentile intervals can also considered; see percentile details. statistic = \"r\" statistic = \"Pearson\", Pearson correlation coefficient calculated two pollutants. calculation involves weighted Pearson correlation coefficient, weighted Gaussian kernels wind direction radial variable (default wind speed). weight assigned values close wind speed-direction interval. Kernel weighting used ensure data used rather relying potentially small number values wind speed-direction interval. statistic = \"Spearman\", Spearman correlation coefficient calculated two pollutants. calculation involves weighted Spearman correlation coefficient, weighted Gaussian kernels wind direction radial variable (default wind speed). weight assigned values close wind speed-direction interval. Kernel weighting used ensure data used rather relying potentially small number values wind speed-direction interval. \"robust_slope\" another option pair-wise statistics \"quantile.slope\", uses quantile regression estimate slope particular quantile level (see also tau setting quantile level). \"york_slope\" another option pair-wise statistics uses York regression method estimate slope. method uncertainties x y used determination slope. uncertainties provided x_error y_error — see . exclude.missing Setting option TRUE (default) removes points plot far original data. smoothing routines produce predictions points data exist .e. predict. removing points far original data produces plot clear original data lie. set FALSE missing data interpolated. uncertainty uncertainty calculated surface shown? TRUE three plots produced scale showing predicted surface together estimated lower upper uncertainties 95% confidence interval. Calculating uncertainties useful understand whether features real . example, high wind speeds data greater uncertainty predicted values. uncertainties calculated using GAM weighting done frequency measurements wind speed-direction bin. Note uncertainties calculated type set \"default\". percentile statistic = \"percentile\" percentile used, expressed 0 100. Note percentile value calculated wind speed, wind direction ‘bins’. reason can also useful set min.bin ensure sufficient number points available estimate percentile. See quantile details percentiles calculated. percentile also used Conditional Probability Function (CPF) plots. percentile can length two, case percentile interval considered use CPF. example, percentile = c(90, 100) plot CPF concentrations 90 100th percentiles. Percentile intervals can useful identifying specific sources. addition, percentile can also length 3. third value ‘trim’ value applied. calculating percentile intervals many can cover low values useful information. trim value ensures values greater equal trim * mean value considered percentile intervals calculated. effect extract detail many source signatures. See manual examples. Finally, trim value less zero percentile range interpreted absolute concentration values subsetting carried directly. weights edges plot may data points wind speed-direction interval, situations distort plot concentrations high. weights applies weighting reduce influence. example default single data point exists weighting factor 0.25 two points 0.5. apply weighting use data , use weights = c(1, 1, 1). alternative -weighting points can removed altogether using min.bin. min.bin minimum number points allowed wind speed/wind direction bin. default 1. value two requires least 2 valid records bin ; bins less 2 valid records set NA. Care taken using value > 1 risk removing real data points. recommended consider data care. Also, polarFreq function can use circumstances. mis.col min.bin > 1 can useful show data removed plots. done shading missing data mis.col. highlight missing data min.bin > 1 choose mis.col = \"transparent\". angle.scale Sometimes placement scale may interfere interesting feature. user can therefore set angle.scale value 0 360 degrees mitigate problems. example angle.scale = 45 draw scale heading NE direction. units units shown polar axis scale. force.positive default TRUE. Sometimes smoothing data steep gradients possible predicted values negative. force.positive = TRUE ensures predictions remain positive. useful several reasons. First, lots missing data interpolation needed can result artefacts predictions far original data. Second, known beforehand data positive, option carries assumption prediction. likely time setting force.positive = FALSE background concentrations first subtracted resulting data legitimately negative. vast majority situations expected user need alter default option. k smoothing parameter used gam function package mgcv. Typically, value around 100 (default) seems suitable resolve important features plot. appropriate choice k problem-dependent; extensive testing polar plots many different problems suggests value k 100 suitable. Setting k higher values tend affect surface predictions much add computation time. Lower values k increase smoothing. Sometimes data plot polarPlot fail. circumstances can worth lowering value k. normalise TRUE concentrations normalised dividing mean value. done fitting smooth surface. option particularly useful one interested patterns concentrations several pollutants different scales e.g. NOx CO. Often useful one pollutant chosen. key.header Adds additional text/labels scale key. example, passing options key.header = \"header\", key.footer = \"footer1\" adds addition text scale key. arguments passed drawOpenKey via quickText, applying auto.text argument, handle formatting. key.footer see key.footer. key.position Location scale key plotted. Allowed arguments currently include \"top\", \"right\", \"bottom\" \"left\". auto.text Either TRUE (default) FALSE. TRUE titles axis labels automatically try format pollutant names units properly e.g. subscripting `2' NO2. ws_spread value sigma used Gaussian kernel weighting wind speed statistic = \"nwr\" correlation regression statistics used r. Default 0.5. wd_spread value sigma used Gaussian kernel weighting wind direction statistic = \"nwr\" correlation regression statistics used r. Default 4. x_error x error / uncertainty used statistic = \"york_slope\". y_error y error / uncertainty used statistic = \"york_slope\". kernel Type kernel used weighting procedure correlation regression techniques used. \"gaussian\" supported may enhanced future. formula.label pair-wise statistics regression slopes calculated plotted, formula label displayed? formula.label also determine whether concentration information printed statistic = \"cpf\". tau quantile estimated statistic set \"quantile.slope\". Default 0.5 equal median ignored \"quantile.slope\" used. control Deprecated. Please use type.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polarMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Bivariate polar plots on dynamic and static maps — polarMap","text":"Either: Dynamic: leaflet object Static: ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polarMap.html","id":"customisation-of-static-maps-using-ggplot-","dir":"Reference","previous_headings":"","what":"Customisation of static maps using ggplot2","title":"Bivariate polar plots on dynamic and static maps — polarMap","text":"outputs static directional analysis functions ggplot2 figures, customisation possible using functions ggplot2::theme(), ggplot2::guides() ggplot2::labs(). multiple pollutants specified, subscripting (e.g., \"x\" \"NOx\") achieved using ggtext package. Therefore choose override plot theme, recommended use [ggplot2::theme()] [ggtext::element_markdown()] define strip.text parameter. arguments like limits, percentile breaks defined, legend automatically added figure. Legends can removed using ggplot2::theme(legend.position = \"none\"), customised using ggplot2::guides() either color = ggplot2::guide_colourbar() continuous legends fill = ggplot2::guide_legend() discrete legends.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polarMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Bivariate polar plots on dynamic and static maps — polarMap","text":"","code":"if (FALSE) { # \\dontrun{ polarMap(polar_data, pollutant = \"nox\", x = \"ws\", provider = \"CartoDB.Voyager\" ) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polar_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Example data for polar mapping functions — polar_data","title":"Example data for polar mapping functions — polar_data","text":"polar_data dataset provided example dataset part openairmaps package. dataset contains hourly measurements air pollutant concentrations, location meteorological data.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polar_data.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Example data for polar mapping functions — polar_data","text":"Data frame example data four sites London 2009. date date time measurement nox, no2, pm2.5, pm10 Pollutant concentrations site site name. Useful use popup label arguments openairmaps functions. latitude, longitude Decimal latitude longitude sites. site.type Site type site (either \"Urban Traffic\" \"Urban Background\"). wd Wind direction, degrees North, numeric vector. ws Wind speed, m/s, numeric vector. visibility visibility metres. air_temp Air temperature degrees Celcius.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polar_data.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Example data for polar mapping functions — polar_data","text":"polar_data compiled data using openair::importAURN() function openair package meteorological data worldmet package.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polar_data.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Example data for polar mapping functions — polar_data","text":"polar_data supplied openairmaps package example dataset use documented examples.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polar_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Example data for polar mapping functions — polar_data","text":"","code":"# basic structure head(polar_data) #> # A tibble: 6 × 13 #> date nox no2 pm2.5 pm10 site lat lon site_type wd #> #> 1 2009-01-01 00:00:00 113 46 42 46 Lond… 51.5 -0.126 Urban Ba… 58.9 #> 2 2009-01-01 01:00:00 40 32 45 49 Lond… 51.5 -0.126 Urban Ba… 74.5 #> 3 2009-01-01 02:00:00 48 36 43 46 Lond… 51.5 -0.126 Urban Ba… 30 #> 4 2009-01-01 03:00:00 36 29 37 NA Lond… 51.5 -0.126 Urban Ba… 45 #> 5 2009-01-01 04:00:00 40 32 36 38 Lond… 51.5 -0.126 Urban Ba… 70 #> 6 2009-01-01 05:00:00 50 36 33 32 Lond… 51.5 -0.126 Urban Ba… 46.6 #> # ℹ 3 more variables: ws , visibility , air_temp "},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pollroseMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Pollution roses on dynamic and static maps — pollroseMap","title":"Pollution roses on dynamic and static maps — pollroseMap","text":"pollroseMap() function creates map using pollution roses markers. number pollutants can specified using pollutant argument, multiple layers markers can created using type. default, maps dynamic can panned, zoomed, otherwise interacted . Using static argument allows static images produced instead.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pollroseMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Pollution roses on dynamic and static maps — pollroseMap","text":"","code":"pollroseMap( data, pollutant = NULL, statistic = \"prop.count\", breaks = NULL, latitude = NULL, longitude = NULL, crs = 4326, type = NULL, popup = NULL, label = NULL, provider = \"OpenStreetMap\", cols = \"turbo\", alpha = 1, key = FALSE, legend = TRUE, legend.position = NULL, legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control.autotext = TRUE, d.icon = 200, d.fig = 3.5, static = FALSE, static.nrow = NULL, progress = TRUE, ..., control = NULL )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pollroseMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Pollution roses on dynamic and static maps — pollroseMap","text":"data Input data table pollutant, wind, geo-spatial information. required | scope: dynamic & static data frame. data frame must contain data plot directional analysis marker, includes wind speed (ws), wind direction (wd), column representing concentration pollutant. addition, data must include decimal latitude longitude (X/Y coordinate used conjunction crs). pollutant Pollutant name(s). required | scope: dynamic & static column name(s) pollutant(s) plot. multiple pollutants specified non-pairwise statistic supplied, type argument longer able used : Dynamic: pollutants can toggled using \"layer control\" menu. Static:: pollutants appear different panel. Multiple pollutants prohibit use type argument non-pairwise statistics. statistic statistic applied data bin plot default: \"prop.mean\" | scope: dynamic & static Options currently include \"prop.count\", \"prop.mean\" \"abs.count\". \"prop.count\" sizes bins according proportion frequency measurements. Similarly, \"prop.mean\" sizes bins according relative contribution mean. \"abs.count\" provides absolute count measurements bin. breaks Specifier number breaks colour axis. default: NULL | scope: dynamic & static commonly, number break points. specified, marker independently break supplied data approximately 6 sensible break points. breaks specified, markers use break points. Breaks can also used set specific break points. example, argument breaks = c(0, 1, 10, 100) breaks data segments <1, 1-10, 10-100, >100. latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. type method condition data separate plotting. default: NULL | scope: dynamic & static Used splitting input data different groups, passed type argument openair::cutData(). type specified: Dynamic: different data splits can toggled using \"layer control\" menu. Static:: data splits appear different panel. type used multiple pollutant columns provided. popup Content marker popups dynamic maps. default: NULL | scope: dynamic Columns used HTML content marker popups dynamic maps. Popups may useful show information individual sites (e.g., site names, codes, types, etc.). vector column names provided passed buildPopup() using default values. label Content marker hover-dynamic maps. default: NULL | scope: dynamic Column used HTML content hover-labels. Labels useful reasons popups, though typically shorter. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. cols Colours use plotting. default: \"turbo\" | scope: dynamic & static colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. legend Draw shared legend? default: TRUE | scope: dynamic & static markers share colour scale (e.g., limits != \"free\" polarMap()), shared legend created side map? legend.position Position shared legend. default: NULL | scope: dynamic & static legend = TRUE, legend placed? Dynamic: One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). Static:: One \"top\", \"right\", \"bottom\" \"left\". Passed legend.position argument ggplot2::theme(). legend.title Title legend. default: NULL | scope: dynamic & static default, legend.title = NULL, function attempt provide sensible legend title. legend.title allows users overwrite - example, include units contextual information. dynamic maps, users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE | scope: dynamic & static legend.title.autotext = TRUE, legend.title first run quickTextHTML() (dynamic) openair::quickText() (static). control.collapsed Show layer control collapsed? default: FALSE | scope: dynamic dynamic maps, \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" | scope: dynamic type != NULL, multiple pollutants specified, \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.autotext Automatically format content layer control menu? default: TRUE | scope: dynamic control.autotext = TRUE, content \"layer control\" interface first run quickTextHTML(). d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. static Produce static map? default: FALSE controls whether dynamic static map produced. former default broadly useful, latter may preferable DOCX PDF outputs (e.g., academic papers). static.nrow Number rows static map. default: NULL | scope: static Controls number rows panels static map multiple pollutants type specified; passed nrow argument ggplot2::facet_wrap(). default, NULL, results roughly square grid panels. progress Show progress bar? default: TRUE | scope: dynamic & static default, progress bar shown visualise function's progress creating individual polar markers. option allows turned , desired. ... Arguments passed openair::pollutionRose key.footer Adds additional text/labels scale key. See key.header information. key.position Location scale key plotted. Allowed arguments currently include “top”, “right”, “bottom” “left”. paddle Either TRUE FALSE. TRUE plots rose using 'paddle' style spokes. FALSE plots rose using 'wedge' style spokes. seg paddle = TRUE, seg determines width segments. example, seg = 0.5 produce segments 0.5 * angle. normalise TRUE wind direction segment normalised equal one. useful showing concentrations (parameters) contribute wind sector proportion time wind direction low. line showing probability wind directions particular wind sector also shown. control Deprecated. Please use type.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pollroseMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Pollution roses on dynamic and static maps — pollroseMap","text":"Either: Dynamic: leaflet object Static: ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pollroseMap.html","id":"customisation-of-static-maps-using-ggplot-","dir":"Reference","previous_headings":"","what":"Customisation of static maps using ggplot2","title":"Pollution roses on dynamic and static maps — pollroseMap","text":"outputs static directional analysis functions ggplot2 figures, customisation possible using functions ggplot2::theme(), ggplot2::guides() ggplot2::labs(). multiple pollutants specified, subscripting (e.g., \"x\" \"NOx\") achieved using ggtext package. Therefore choose override plot theme, recommended use [ggplot2::theme()] [ggtext::element_markdown()] define strip.text parameter. arguments like limits, percentile breaks defined, legend automatically added figure. Legends can removed using ggplot2::theme(legend.position = \"none\"), customised using ggplot2::guides() either color = ggplot2::guide_colourbar() continuous legends fill = ggplot2::guide_legend() discrete legends.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pollroseMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Pollution roses on dynamic and static maps — pollroseMap","text":"","code":"if (FALSE) { # \\dontrun{ pollroseMap(polar_data, pollutant = \"nox\", statistic = \"prop.count\", provider = \"CartoDB.Voyager\" ) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/quickTextHTML.html","id":null,"dir":"Reference","previous_headings":"","what":"Automatic text formatting for openairmaps — quickTextHTML","title":"Automatic text formatting for openairmaps — quickTextHTML","text":"Workhorse function automatically applies routine text formatting common pollutant names may used HTML widgets produced openairmaps.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/quickTextHTML.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Automatic text formatting for openairmaps — quickTextHTML","text":"","code":"quickTextHTML(text)"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/quickTextHTML.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Automatic text formatting for openairmaps — quickTextHTML","text":"text character vector. required character vector containing common pollutant names formatted. Commonly, insert super- subscript HTML tags, e.g., \"NO2\" replaced \"NO2\".","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/quickTextHTML.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Automatic text formatting for openairmaps — quickTextHTML","text":"character vector","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/quickTextHTML.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Automatic text formatting for openairmaps — quickTextHTML","text":"quickTextHTML() routine formatting lookup table. screens supplied character vector text automatically applies formatting recognised character sub-series properly render HTML.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/quickTextHTML.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Automatic text formatting for openairmaps — quickTextHTML","text":"Jack Davison.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/quickTextHTML.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Automatic text formatting for openairmaps — quickTextHTML","text":"","code":"labs <- c(\"no2\", \"o3\", \"so2\") quickTextHTML(labs) #> [1] \"NO2<\/sub>\" \"O3<\/sub>\" \"SO2<\/sub>\""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/searchNetwork.html","id":null,"dir":"Reference","previous_headings":"","what":"Geographically search the air quality networks made available by openair::importMeta() — searchNetwork","title":"Geographically search the air quality networks made available by openair::importMeta() — searchNetwork","text":"networkMap() visualises entire UK air quality networks, searchNetwork() can subset specific networks find air quality sites near specific site interest (example, location known industrial activity, centroid specific urban area).","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/searchNetwork.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Geographically search the air quality networks made available by openair::importMeta() — searchNetwork","text":"","code":"searchNetwork( lat, lng, source = \"aurn\", year = NULL, site_type = NULL, variable = NULL, max_dist = NULL, n = NULL, crs = 4326, map = TRUE )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/searchNetwork.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Geographically search the air quality networks made available by openair::importMeta() — searchNetwork","text":"lat, lng decimal latitude(Y)/longitude(X). required Values representing decimal latitude longitude (Y/X coordinate using different crs) site interest. source One UK European monitoring networks. default: \"aurn\" One air quality networks data available openair. Available networks include: \"aurn\", UK Automatic Urban Rural Network. \"aqe\", Air Quality England Network. \"saqn\", Scottish Air Quality Network. \"waqn\", Welsh Air Quality Network. \"ni\", Northern Ireland Air Quality Network. \"local\", Locally managed air quality networks England. \"kcl\", King's College London networks. \"europe\", European AirBase/e-reporting data. two additional options provided convenience: \"ukaq\" return metadata networks data imported importUKAQ() (.e., AURN, AQE, SAQN, WAQN, NI, local networks). \"\" import available metadata (.e., \"ukaq\" plus \"kcl\" \"europe\"). year year, range years, filter data. default: NULL default, networkMap() visualises sites currently operational. year allows users show sites open specific year, range years. See openair::importMeta() information. site_type One site types subset site metadata. default: NULL site_type specified, sites type searched . example, site_type = \"urban background\" search urban background sites. variable One variables interest subset site metadata. default: NULL variable specified, sites measuring least one pollutants searched . example, variable = c(\"pm10\", \"co\") search sites measure PM10 /CO. max_dist maximum distance location interest kilometres. default: NULL max_dist specified, sites within max_dist kilometres lat / lng coordinate searched . n maximum number sites return. default: NULL n specified, n sites returned. Note filtering step applied last, site_type, variable, max_dist. crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. map Return map? default: TRUE TRUE, default, searchNetwork() return leaflet map. FALSE, instead return tibble.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/searchNetwork.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Geographically search the air quality networks made available by openair::importMeta() — searchNetwork","text":"Either tibble leaflet map.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/searchNetwork.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Geographically search the air quality networks made available by openair::importMeta() — searchNetwork","text":"Data subsetting progresses order arguments given; first source year, site_type variable, max_dist, finally n.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/searchNetwork.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Geographically search the air quality networks made available by openair::importMeta() — searchNetwork","text":"","code":"if (FALSE) { # \\dontrun{ # get all AURN sites open in 2020 within 20 km of Buckingham Palace palace <- convertPostcode(\"SW1A1AA\") searchNetwork(lat = palace$lat, lng = palace$lng, max_dist = 20, year = 2020) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Trajectory level plots in leaflet — trajLevelMap","title":"Trajectory level plots in leaflet — trajLevelMap","text":"function plots back trajectories leaflet map. function requires data imported using openair::importTraj() function.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trajectory level plots in leaflet — trajLevelMap","text":"","code":"trajLevelMap( data, longitude = \"lon\", latitude = \"lat\", pollutant, type = NULL, smooth = FALSE, statistic = \"frequency\", percentile = 90, lon.inc = 1, lat.inc = 1, min.bin = 1, .combine = NA, sigma = 1.5, cols = \"turbo\", alpha = 0.5, tile.border = NA, provider = \"OpenStreetMap\", legend.position = \"topright\", legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\" )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trajectory level plots in leaflet — trajLevelMap","text":"data data frame containing HYSPLIT trajectory, perhaps accessed openair::importTraj(). required data frame containing HYSPLIT model outputs. data obtained using openair::importTraj(). latitude, longitude decimal latitude/longitude. default: \"lat\" / \"lon\" Column names representing decimal latitude longitude. pollutant Pollutant plotted. default trajectory height used. type method condition data separate plotting. default: NULL Used splitting trajectories different groups can selected using \"layer control\" menu. Passed openair::cutData(). smooth trajectory surface smoothed? Defaults FALSE. Note , smooth = TRUE, popup information available. statistic Statistic use trajLevel(). default, function plot trajectory frequencies (statistic = \"frequency\"). alternative way viewing trajectory frequencies, argument method = \"hexbin\" can used. case hexagonal binning trajectory points (.e., point every three hours along back trajectory). plot shows trajectory frequencies uses hexagonal binning. also various ways plotting concentrations. possible set statistic = \"difference\". case trajectories associated concentration greater percentile compared full set trajectories understand differences frequencies origin air masses. comparison made comparing percentage change gridded frequencies. example, plot show top 10\\ tend originate air-mass origins east. statistic = \"pscf\" Potential Source Contribution Function map produced. statistic method interacts percentile. statistic = \"cwt\" concentration weighted trajectories plotted. statistic = \"sqtba\" Simplified Quantitative Transport Bias Analysis undertaken. statistic method interacts .combine sigma. percentile percentile concentration pollutant trajectories compared. lon.inc, lat.inc longitude latitude intervals used binning data. min.bin minimum number unique points grid cell. Counts min.bin set missing. .combine statistic \"SQTBA\" possible combine lots receptor locations derive single map. .combine identifies column differentiates different sites (commonly column named \"site\"). Note individual site maps normalised first dividing mean value. sigma SQTBA approach sigma determines amount back trajectory spread based Gaussian plume equation. Values literature suggest 5.4 km one hour. However, testing suggests lower values reveal source regions effectively introducing much noise. cols colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Opacity tiles. Must 0 1. tile.border Colour use border binned tiles. Defaults NA, draws border. provider basemap used. default: \"OpenStreetMap\" single leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. legend.position Position shared legend. default: \"topright\" legend placed? One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). NULL defaults \"topright\". legend.title Title legend. default: NULL default, legend.title = NULL, function attempt provide sensible legend title based colour. legend.title allows users overwrite - example, include units contextual information. Users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE legend.title.autotext = TRUE, legend.title first run quickTextHTML(). control.collapsed Show layer control collapsed? default: FALSE \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trajectory level plots in leaflet — trajLevelMap","text":"leaflet object.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Trajectory level plots in leaflet — trajLevelMap","text":"","code":"if (FALSE) { # \\dontrun{ trajLevelMap(traj_data, pollutant = \"pm2.5\", statistic = \"pscf\", min.bin = 10) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMapStatic.html","id":null,"dir":"Reference","previous_headings":"","what":"Trajectory level plots in ggplot2 — trajLevelMapStatic","title":"Trajectory level plots in ggplot2 — trajLevelMapStatic","text":"function plots back trajectories ggplot2 map. function requires data imported using openair::importTraj() function. ggplot2 implementation openair::trajLevel() many arguments, flexible post-hoc changes.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMapStatic.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trajectory level plots in ggplot2 — trajLevelMapStatic","text":"","code":"trajLevelMapStatic( data, longitude = \"lon\", latitude = \"lat\", pollutant, type = NULL, smooth = FALSE, statistic = \"frequency\", percentile = 90, lon.inc = 1, lat.inc = 1, min.bin = 1, .combine = NA, sigma = 1.5, alpha = 0.5, tile.border = NA, xlim = NULL, ylim = NULL, crs = sf::st_crs(4326), map = TRUE, map.fill = \"grey85\", map.colour = \"grey75\", map.alpha = 0.8, map.lwd = 0.5, map.lty = 1, facet = NULL, ... )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMapStatic.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trajectory level plots in ggplot2 — trajLevelMapStatic","text":"data data frame containing HYSPLIT trajectory, perhaps accessed openair::importTraj(). required data frame containing HYSPLIT model outputs. data obtained using openair::importTraj(). latitude, longitude decimal latitude/longitude. default: \"lat\" / \"lon\" Column names representing decimal latitude longitude. pollutant Pollutant plotted. default trajectory height used. type method condition data separate plotting. default: NULL Used splitting trajectories different groups can selected using \"layer control\" menu. Passed openair::cutData(). smooth trajectory surface smoothed? Defaults FALSE. Note smoothing may cause plot render slower, consider setting crs sf::st_crs(4326) NULL. statistic Statistic use trajLevel(). default, function plot trajectory frequencies (statistic = \"frequency\"). alternative way viewing trajectory frequencies, argument method = \"hexbin\" can used. case hexagonal binning trajectory points (.e., point every three hours along back trajectory). plot shows trajectory frequencies uses hexagonal binning. also various ways plotting concentrations. possible set statistic = \"difference\". case trajectories associated concentration greater percentile compared full set trajectories understand differences frequencies origin air masses. comparison made comparing percentage change gridded frequencies. example, plot show top 10\\ tend originate air-mass origins east. statistic = \"pscf\" Potential Source Contribution Function map produced. statistic method interacts percentile. statistic = \"cwt\" concentration weighted trajectories plotted. statistic = \"sqtba\" Simplified Quantitative Transport Bias Analysis undertaken. statistic method interacts .combine sigma. percentile percentile concentration pollutant trajectories compared. lon.inc, lat.inc longitude latitude intervals used binning data. min.bin minimum number unique points grid cell. Counts min.bin set missing. .combine statistic \"SQTBA\" possible combine lots receptor locations derive single map. .combine identifies column differentiates different sites (commonly column named \"site\"). Note individual site maps normalised first dividing mean value. sigma SQTBA approach sigma determines amount back trajectory spread based Gaussian plume equation. Values literature suggest 5.4 km one hour. However, testing suggests lower values reveal source regions effectively introducing much noise. alpha Opacity tiles. Must 0 1. tile.border Colour use border binned tiles. Defaults NA, draws border. xlim, ylim x- y-limits plot. default: NULL numeric vector length two defining x-/y-limits map, passed ggplot2::coord_sf(). NULL, limits estimated based lat/lon ranges input data. crs coordinate reference system (CRS) data projected plotting. Defaults latitude/longitude (sf::st_crs(4326)). map Draw base map? default: TRUE Draws geometries countries trajectory paths. map.fill Colour use fill polygons base map. default: \"grey85\" See colors() colour options. Alternatively, hexadecimal color code can provided. map.colour Colour use polygon borders base map. default: \"grey75\" See colors() colour options. Alternatively, hexadecimal color code can provided. map.alpha Transparency base map polygons. default: 0.8 Must 0 (fully transparent) 1 (fully opaque). map.lwd Line width base map polygon borders. default: 0.5 numeric value. map.lty Line type base map polygon borders. default: 1 See ggplot2::scale_linetype() common examples. default, 1, draws solid lines. facet Deprecated. Please use type. ... Arguments passed ggplot2::coord_sf expand TRUE, default, adds small expansion factor limits ensure data axes overlap. FALSE, limits taken exactly data xlim/ylim. datum CRS provides datum use generating graticules. label_graticule Character vector indicating graticule lines labeled . Meridians run north-south, letters \"N\" \"S\" indicate labeled north south end points, respectively. Parallels run east-west, letters \"E\" \"W\" indicate labeled east west end points, respectively. Thus, label_graticule = \"SW\" label meridians south end parallels west end, whereas label_graticule = \"EW\" label parallels ends meridians . meridians parallels can general intersect side plot panel, choice label_graticule labels guaranteed reside one particular side plot panel. Also, label_graticule can cause labeling artifacts, particular graticule line coincides edge plot panel. circumstances, label_axes generally yield better results used instead. parameter can used alone combination label_axes. label_axes Character vector named list character values specifying graticule lines (meridians parallels) labeled side plot. Meridians indicated \"E\" (East) parallels \"N\" (North). Default \"--EN\", specifies (clockwise top) labels top, none right, meridians bottom, parallels left. Alternatively, setting specified list(bottom = \"E\", left = \"N\"). parameter can used alone combination label_graticule. lims_method Method specifying scale limits converted limits plot region. effect default_crs = NULL. non-linear CRS (e.g., perspective centered around North pole), available methods yield widely differing results, may want try various options. Methods currently implemented include \"cross\" (default), \"box\", \"orthogonal\", \"geometry_bbox\". method \"cross\", limits along one direction (e.g., longitude) applied midpoint direction (e.g., latitude). method avoids excessively large limits rotated coordinate systems means sometimes limits need expanded little extreme data points included final plot region. contrast, method \"box\", box generated limits along directions, limits projected coordinates chosen entire box visible. method can yield plot regions large. Finally, method \"orthogonal\" applies limits separately along axis, method \"geometry_bbox\" ignores limit information except bounding boxes objects geometry aesthetic. ndiscr Number segments use discretising graticule lines; try increasing number graticules look incorrect. default default coordinate system? FALSE (default), replacing coordinate system another one creates message alerting user coordinate system replaced. TRUE, warning suppressed. clip drawing clipped extent plot panel? setting \"\" (default) means yes, setting \"\" means . cases, default \"\" changed, setting clip = \"\" can cause unexpected results. allows drawing data points anywhere plot, including plot margins. limits set via xlim ylim data points fall outside limits, data points may show places axes, legend, plot title, plot margins.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMapStatic.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trajectory level plots in ggplot2 — trajLevelMapStatic","text":"ggplot2 plot","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Trajectory line plots in leaflet — trajMap","title":"Trajectory line plots in leaflet — trajMap","text":"function plots back trajectories leaflet map. function requires data imported using openair::importTraj() function. Options provided colour individual trajectories (e.g., pollutant concentrations) create \"layer control\" menus show/hide different layers.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trajectory line plots in leaflet — trajMap","text":"","code":"trajMap( data, longitude = \"lon\", latitude = \"lat\", colour = NULL, type = NULL, cols = \"default\", alpha = 0.5, npoints = 12, provider = \"OpenStreetMap\", legend.position = \"topright\", legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control = NULL, ... )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trajectory line plots in leaflet — trajMap","text":"data data frame containing HYSPLIT trajectory, perhaps accessed openair::importTraj(). required data frame containing HYSPLIT model outputs. data obtained using openair::importTraj(). latitude, longitude decimal latitude/longitude. default: \"lat\" / \"lon\" Column names representing decimal latitude longitude. colour Column used colouring trajectory. default: NULL column may numeric, character, factor date(time). commonly pollutant concentration joined (e.g., dplyr::left_join()) trajectory data \"date\". type method condition data separate plotting. default: NULL Used splitting trajectories different groups can selected using \"layer control\" menu. Passed openair::cutData(). cols Colours use plotting. default: \"default\" colours used plotting, passed openair::openColours(). alpha Transparency value trajectories. default: 1 value 0 (fully transparent) 1 (fully opaque). npoints Interval points placed along trajectory paths. default: 12 dot placed every npoints along full trajectory. hourly back trajectories points plotted every npoints hours. helps understand air masses particular times get feel speed air (points closer together correspond slower moving air masses). Defaults 12. provider basemap used. default: \"OpenStreetMap\" single leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. legend.position Position shared legend. default: \"topright\" legend placed? One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). NULL defaults \"topright\". legend.title Title legend. default: NULL default, legend.title = NULL, function attempt provide sensible legend title based colour. legend.title allows users overwrite - example, include units contextual information. Users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE legend.title.autotext = TRUE, legend.title first run quickTextHTML(). control.collapsed Show layer control collapsed? default: FALSE \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control Deprecated. Please use type. ... Arguments passed openair::cutData hemisphere Can \"northern\" \"southern\", used split data seasons. n.levels Number quantiles split numeric data . start.day day week type = \"weekday\" start ? user can change start day supplying integer 0 6. Sunday = 0, Monday = 1, ... example start weekday plots Saturday, choose start.day = 6. .axis logical (TRUE/FALSE), used request shortened cut labels axes. local.tz Used identifying whether date daylight savings time (DST) applied . Examples include local.tz = \"Europe/London\", local.tz = \"America/New_York\" .e. time zones assume DST. https://en.wikipedia.org/wiki/List_of_zoneinfo_time_zones shows time zones valid systems. important original data GMT (UTC) fixed offset GMT. See import openair manual information import data ensure DST applied.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trajectory line plots in leaflet — trajMap","text":"leaflet object.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Trajectory line plots in leaflet — trajMap","text":"","code":"if (FALSE) { # \\dontrun{ trajMap(traj_data, colour = \"pm10\") } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMapStatic.html","id":null,"dir":"Reference","previous_headings":"","what":"Trajectory line plots in ggplot2 — trajMapStatic","title":"Trajectory line plots in ggplot2 — trajMapStatic","text":"function plots back trajectories using ggplot2. function requires data imported using openair::importTraj(). ggplot2 implementation openair::trajPlot() many arguments, flexible post-hoc changes.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMapStatic.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trajectory line plots in ggplot2 — trajMapStatic","text":"","code":"trajMapStatic( data, colour = \"height\", type = NULL, group = NULL, size = NULL, linewidth = size, longitude = \"lon\", latitude = \"lat\", npoints = 12, xlim = NULL, ylim = NULL, crs = sf::st_crs(3812), origin = TRUE, map = TRUE, map.fill = \"grey85\", map.colour = \"grey75\", map.alpha = 0.8, map.lwd = 0.5, map.lty = 1, facet = NULL, ... )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMapStatic.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trajectory line plots in ggplot2 — trajMapStatic","text":"data data frame containing HYSPLIT trajectory, perhaps accessed openair::importTraj(). required data frame containing HYSPLIT model outputs. data obtained using openair::importTraj(). colour Data column map colour trajectories. default: NULL column may numeric, character, factor date(time). commonly pollutant concentration joined (e.g., dplyr::left_join()) trajectory data \"date\". scale can edited fact using ggplot2::scale_color_continuous() similar. type method condition data separate plotting. default: NULL Used splitting trajectories different groups appear different panels. Passed openair::cutData(). group Column use distinguish different trajectory paths. default: NULL default, trajectory paths distinguished using arrival date. group allows additional columns used (e.g., \"receptor\" multiple receptors plotted). size, linewidth Data column map size/width trajectory marker/paths, absolute size value. default: NULL Similar colour argument, defines column map size circular markers width paths. scales can edited fact using ggplot2::scale_size_continuous(), ggplot2::scale_linewidth_continuous(), similar. numeric, value directly provided ggplot2::geom_point(size = ) ggplot2::geom_path(linewidth = ). latitude, longitude decimal latitude/longitude. default: \"lat\" / \"lon\" Column names representing decimal latitude longitude. npoints Interval points placed along trajectory paths. default: 12 dot placed every npoints along full trajectory. hourly back trajectories points plotted every npoints hours. helps understand air masses particular times get feel speed air (points closer together correspond slower moving air masses). Defaults 12. xlim, ylim x- y-limits plot. default: NULL numeric vector length two defining x-/y-limits map, passed ggplot2::coord_sf(). NULL, limits estimated based lat/lon ranges input data. crs coordinate reference system (CRS) data projected plotting. default: sf::st_crs(3812) argument defaults Lambert projection, can take coordinate reference system pass crs argument ggplot2::coord_sf(). Alternatively, crs can set NULL, typically render map quicker may cause countries far equator large areas appear distorted. origin Draw receptor point circle? default: TRUE TRUE, receptor point(s) marked black circles. map Draw base map? default: TRUE Draws geometries countries trajectory paths. map.fill Colour use fill polygons base map. default: \"grey85\" See colors() colour options. Alternatively, hexadecimal color code can provided. map.colour Colour use polygon borders base map. default: \"grey75\" See colors() colour options. Alternatively, hexadecimal color code can provided. map.alpha Transparency base map polygons. default: 0.8 Must 0 (fully transparent) 1 (fully opaque). map.lwd Line width base map polygon borders. default: 0.5 numeric value. map.lty Line type base map polygon borders. default: 1 See ggplot2::scale_linetype() common examples. default, 1, draws solid lines. facet Deprecated. Please use type. ... Arguments passed openair::cutData hemisphere Can \"northern\" \"southern\", used split data seasons. n.levels Number quantiles split numeric data . start.day day week type = \"weekday\" start ? user can change start day supplying integer 0 6. Sunday = 0, Monday = 1, ... example start weekday plots Saturday, choose start.day = 6. .axis logical (TRUE/FALSE), used request shortened cut labels axes. local.tz Used identifying whether date daylight savings time (DST) applied . Examples include local.tz = \"Europe/London\", local.tz = \"America/New_York\" .e. time zones assume DST. https://en.wikipedia.org/wiki/List_of_zoneinfo_time_zones shows time zones valid systems. important original data GMT (UTC) fixed offset GMT. See import openair manual information import data ensure DST applied.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMapStatic.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trajectory line plots in ggplot2 — trajMapStatic","text":"ggplot2 plot","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMapStatic.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Trajectory line plots in ggplot2 — trajMapStatic","text":"","code":"if (FALSE) { # \\dontrun{ # colour by height trajMapStatic(traj_data) + ggplot2::scale_color_gradientn(colors = openair::openColours()) # colour by PM10, log transform scale trajMapStatic(traj_data, colour = \"pm10\") + ggplot2::scale_color_viridis_c(trans = \"log10\") + ggplot2::labs(color = openair::quickText(\"PM10\")) # color by PM2.5, lat/lon projection trajMapStatic(traj_data, colour = \"pm2.5\", crs = sf::st_crs(4326)) + ggplot2::scale_color_viridis_c(option = \"turbo\") + ggplot2::labs(color = openair::quickText(\"PM2.5\")) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/traj_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Example data for trajectory mapping functions — traj_data","title":"Example data for trajectory mapping functions — traj_data","text":"traj_data dataset provided example dataset part openairmaps package. dataset contains HYSPLIT back trajectory data air mass parcels arriving London 2009. joined air quality pollutant concentrations \"London N. Kensington\" AURN urban background monitoring site.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/traj_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Example data for trajectory mapping functions — traj_data","text":"","code":"traj_data"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/traj_data.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Example data for trajectory mapping functions — traj_data","text":"data frame 53940 rows 10 variables: date arrival time air-mass receptor receptor number year Trajectory year month Trajectory month day Trajectory day hour Trajectory hour hour.inc Trajectory hour offset arrival date lat Latitude lon Longitude height Height trajectory m pressure Pressure trajectory Pa date2 Date trajectory nox Concentration oxides nitrogen (+ NO2) no2 Concentration nitrogen dioxide (NO2) o3 Concentration ozone (O3) pm10 Concentration particulates (PM10) pm2.5 Concentration fine particulates (PM2.5)","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/traj_data.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Example data for trajectory mapping functions — traj_data","text":"traj_data compiled data using openair::importTraj() function openair package air quality data openair::importAURN() function.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/traj_data.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Example data for trajectory mapping functions — traj_data","text":"traj_data supplied openairmaps package example dataset use documented examples.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/traj_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Example data for trajectory mapping functions — traj_data","text":"","code":"# basic structure head(traj_data) #> # A tibble: 6 × 17 #> date receptor year month day hour hour.inc lat lon #> #> 1 2010-04-15 00:00:00 1 2010 4 15 0 0 51.5 -0.1 #> 2 2010-04-15 00:00:00 1 2010 4 14 23 -1 51.7 0.139 #> 3 2010-04-15 00:00:00 1 2010 4 14 22 -2 51.9 0.378 #> 4 2010-04-15 00:00:00 1 2010 4 14 21 -3 52.1 0.618 #> 5 2010-04-15 00:00:00 1 2010 4 14 20 -4 52.2 0.859 #> 6 2010-04-15 00:00:00 1 2010 4 14 19 -5 52.4 1.10 #> # ℹ 8 more variables: height , pressure , date2 , nox , #> # no2 , o3 , pm2.5 , pm10 "},{"path":"https://davidcarslaw.github.io/openairmaps/reference/windroseMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Wind roses on dynamic and static maps — windroseMap","title":"Wind roses on dynamic and static maps — windroseMap","text":"windroseMap() function creates map using wind roses markers. Multiple layers markers can created using type argument. default, maps dynamic can panned, zoomed, otherwise interacted . Using static argument allows static images produced instead.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/windroseMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Wind roses on dynamic and static maps — windroseMap","text":"","code":"windroseMap( data, ws.int = 2, breaks = 4, latitude = NULL, longitude = NULL, crs = 4326, type = NULL, popup = NULL, label = NULL, provider = \"OpenStreetMap\", cols = \"turbo\", alpha = 1, key = FALSE, legend = TRUE, legend.position = NULL, legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control.autotext = TRUE, d.icon = 200, d.fig = 3.5, static = FALSE, static.nrow = NULL, progress = TRUE, ..., control = NULL )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/windroseMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Wind roses on dynamic and static maps — windroseMap","text":"data Input data table wind geo-spatial information. required | scope: dynamic & static data frame. data frame must contain data plot directional analysis marker, includes wind speed (ws) wind direction (wd). addition, data must include decimal latitude longitude (X/Y coordinate used conjunction crs). ws.int wind speed interval colour axis. default: 2 | scope: dynamic & static wind speed interval. Default 2 m/s low met masts low mean wind speeds value 1 0.5 m/s may better. breaks Specifier number breaks colour axis. default: 4 | scope: dynamic & static commonly, number break points wind speed openair::windRose(). ws.int default 2, default breaks, 4, generates break points 2, 4, 6, 8. Breaks can also used set specific break points. example, argument `breaks = c(0, 1, 10, 100)“ breaks data segments <1, 1-10, 10-100, >100. latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. type method condition data separate plotting. default: NULL | scope: dynamic & static Used splitting input data different groups, passed type argument openair::cutData(). type specified: Dynamic: different data splits can toggled using \"layer control\" menu. Static:: data splits appear different panel. type used multiple pollutant columns provided. popup Content marker popups dynamic maps. default: NULL | scope: dynamic Columns used HTML content marker popups dynamic maps. Popups may useful show information individual sites (e.g., site names, codes, types, etc.). vector column names provided passed buildPopup() using default values. label Content marker hover-dynamic maps. default: NULL | scope: dynamic Column used HTML content hover-labels. Labels useful reasons popups, though typically shorter. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. cols Colours use plotting. default: \"turbo\" | scope: dynamic & static colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. legend Draw shared legend? default: TRUE | scope: dynamic & static markers share colour scale (e.g., limits != \"free\" polarMap()), shared legend created side map? legend.position Position shared legend. default: NULL | scope: dynamic & static legend = TRUE, legend placed? Dynamic: One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). Static:: One \"top\", \"right\", \"bottom\" \"left\". Passed legend.position argument ggplot2::theme(). legend.title Title legend. default: NULL | scope: dynamic & static default, legend.title = NULL, function attempt provide sensible legend title. legend.title allows users overwrite - example, include units contextual information. dynamic maps, users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE | scope: dynamic & static legend.title.autotext = TRUE, legend.title first run quickTextHTML() (dynamic) openair::quickText() (static). control.collapsed Show layer control collapsed? default: FALSE | scope: dynamic dynamic maps, \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" | scope: dynamic type != NULL, multiple pollutants specified, \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.autotext Automatically format content layer control menu? default: TRUE | scope: dynamic control.autotext = TRUE, content \"layer control\" interface first run quickTextHTML(). d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. static Produce static map? default: FALSE controls whether dynamic static map produced. former default broadly useful, latter may preferable DOCX PDF outputs (e.g., academic papers). static.nrow Number rows static map. default: NULL | scope: static Controls number rows panels static map multiple pollutants type specified; passed nrow argument ggplot2::facet_wrap(). default, NULL, results roughly square grid panels. progress Show progress bar? default: TRUE | scope: dynamic & static default, progress bar shown visualise function's progress creating individual polar markers. option allows turned , desired. ... Arguments passed openair::windRose ws Name column representing wind speed. wd Name column representing wind direction. ws2,wd2 user can supply second set wind speed wind direction values first can compared. See pollutionRose() details. angle Default angle “spokes” 30. potentially useful angles 45 10. Note width wind speed interval may need adjusting using width. bias.corr angle divide exactly 360 bias introduced frequencies wind direction already supplied rounded nearest 10 degrees, often case. example, angle = 22.5, N, E, S, W include 3 wind sectors angles two. bias correction can made correct problem. simple method according Applequist (2012) used adjust frequencies. grid.line Grid line interval use. NULL, default, assigned based available data range. However, can also forced specific value, e.g. grid.line = 10. grid.line can also list control interval, line type colour. example grid.line = list(value = 10, lty = 5, col = \"purple\"). width paddle = TRUE, adjustment factor width wind speed intervals. example, width = 1.5 make paddle width 1.5 times wider. seg paddle = TRUE, seg determines width segments. example, seg = 0.5 produce segments 0.5 * angle. auto.text Either TRUE (default) FALSE. TRUE titles axis labels automatically try format pollutant names units properly, e.g., subscripting ‘2’ NO2. offset size 'hole' middle plot, expressed percentage polar axis scale, default 10. normalise TRUE wind direction segment normalised equal one. useful showing concentrations (parameters) contribute wind sector proportion time wind direction low. line showing probability wind directions particular wind sector also shown. max.freq Controls scaling used setting maximum value radial limits. useful ensure several plots use radial limits. paddle Either TRUE FALSE. TRUE plots rose using 'paddle' style spokes. FALSE plots rose using 'wedge' style spokes. key.header Adds additional text/labels scale key. example, passing windRose(mydata, key.header = \"ws\") adds addition text scale header. Note: argument passed drawOpenKey() via quickText(), applying auto.text argument, handle formatting. key.footer Adds additional text/labels scale key. See key.header information. key.position Location scale key plotted. Allowed arguments currently include “top”, “right”, “bottom” “left”. dig.lab number significant figures scientific number formatting used break point key labelling. Default 5. include.lowest Logical. FALSE (default), first interval left exclusive right inclusive. TRUE, first interval left right inclusive. Passed include.lowest argument cut(). statistic statistic applied data bin plot. Options currently include “prop.count”, “prop.mean” “abs.count”. default “prop.count” sizes bins according proportion frequency measurements. Similarly, “prop.mean” sizes bins according relative contribution mean. “abs.count” provides absolute count measurements bin. pollutant Alternative data series sampled instead wind speed. windRose() default NULL equivalent pollutant = \"ws\". Use pollutionRose(). angle.scale scale default shown 315 degree angle. Sometimes placement scale may interfere interesting feature. user can therefore set angle.scale another value (0 360 degrees) mitigate problems. example angle.scale = 45 draw scale heading NE direction. border Border colour shaded areas. Default border. control Deprecated. Please use type.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/windroseMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Wind roses on dynamic and static maps — windroseMap","text":"Either: Dynamic: leaflet object Static: ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/windroseMap.html","id":"customisation-of-static-maps-using-ggplot-","dir":"Reference","previous_headings":"","what":"Customisation of static maps using ggplot2","title":"Wind roses on dynamic and static maps — windroseMap","text":"outputs static directional analysis functions ggplot2 figures, customisation possible using functions ggplot2::theme(), ggplot2::guides() ggplot2::labs(). multiple pollutants specified, subscripting (e.g., \"x\" \"NOx\") achieved using ggtext package. Therefore choose override plot theme, recommended use [ggplot2::theme()] [ggtext::element_markdown()] define strip.text parameter. arguments like limits, percentile breaks defined, legend automatically added figure. Legends can removed using ggplot2::theme(legend.position = \"none\"), customised using ggplot2::guides() either color = ggplot2::guide_colourbar() continuous legends fill = ggplot2::guide_legend() discrete legends.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/windroseMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Wind roses on dynamic and static maps — windroseMap","text":"","code":"if (FALSE) { # \\dontrun{ windroseMap(polar_data, provider = \"CartoDB.Voyager\" ) } # }"},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-development-version","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps (development version)","text":"Pairwise statistics (e.g., \"robust_slope\") now supported polarMap(). (#72) polarMap() family gained progress argument, allowing users switch progress bar . trajMapStatic() gained size linewidth arguments, directly map onto arguments ggplot2::geom_point() ggplot2::geom_path(), respectively. can either column data (like colour), can absolute value (e.g., 2L). Note , default, linewidth takes value size, can set independently.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-development-version","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps (development version)","text":"Vectors greater length 1 passed popup polarMap() argument longer error type = NULL. ... successfully pass openair::cutData() polarMap() trajMap() families functions. default diffMap() colour scale longer appear inverted compared openair::polarDiff(). Fixed issue quickTextHTML() incorrectly format non breaking spaces , e.g., quickTextHTML(\"ug/m3\"). order trajMapStatic() draws points paths tweaked, ensure markers drawn top respective path, rather top paths.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-090","dir":"Changelog","previous_headings":"","what":"openairmaps 0.9.0","title":"openairmaps 0.9.0","text":"CRAN release: 2024-05-19","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"breaking-changes-0-9-0","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"openairmaps 0.9.0","text":"BREAKING: polarMapStatic() family now powered ggspatial rather ggmap require API key. means ggmap argument removed provider argument added. benefits switch include greater number available base maps (see: rosm::osm.types()) ability simply change extent map axes using ggplot2::coord_sf(). (#52) BREAKING: control facet arguments deprecated favour type functions. arguments eventually removed, version openairmaps users warned away use. brings openairmaps -line openair package. BREAKING: names cols arguments buildPopup() coalesced single columns argument less verbose function usage. BREAKING: collapse.control argument renamed control.collapsed draw.legend argument legend. allow options sit nicely new argument family members - legend.title, legend.title.autotext, legend.position, .","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-9-0","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.9.0","text":"polarMapStatic() family functions combined polarMap() family, static maps available accessed using static argument. (#59) polarMapStatic() family therefore deprecated, later removed openairmaps. justification follows: combined functions allows simple, consistent API users (e.g., avoiding needing switch facet control). use static argument allows simple switching dynamic static maps. example, researcher may wish use dynamic maps data exploration, switch static map placement PDF report. Recent developments meant arguments capability functions started align regardless (e.g., provider, crs). Combining functions reduced repetition source code openairmaps, reducing likelihood oversights bugs, allowing rapid development. crs argument added polarMap() polarMapStatic() families searchNetwork(). argument allows users specify data using alternative coordinate system standard longitude/latitude (e.g., British National Grid CRS). Alternate CRS re-projected longitude/latitude plotting expected leaflet / ggspatial. (#56) Users now greater control positions legends layer control menus, titles legends, throughout openairmaps functions, including polarMap() family, trajMap() family, networkMap(). Popups dynamic polarMap() family now near top plot rather centre. obscure less plot marker visible. (#55) quickTextHTML()’s lookup table gained new pollutants units, ignores input case text consistently. Two examples use openairmaps shiny added package. Run shiny::runExample(package = \"openairmaps\") view . (#60)","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-0-9-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps 0.9.0","text":"Legends drawn polarMapStatic() function now render using recent versions ggplot2. addTrajPaths() layerId argument now implemented sensible way ensure geometry unique layerId can therefore interacted shiny context. layerId now base actual layerId built, real layerId form BASE-LN-PN LN line number PN point number. example, layerId = \"traj\", first point first line ID \"traj-1-1\", second point first line ID \"traj-1-2\", first point second line ID \"traj-2-1\", . “illegal” file path characters can now used columns provided type argument polarMap() family. relevant users allow provide custom HTML tags - e.g., formatting superscripts, subscripts, . (#63) colours legend networkMap() now better align actual colours markers, layer control menu control = \"variable\" now presented nicer order clearer labels.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-081","dir":"Changelog","previous_headings":"","what":"openairmaps 0.8.1","title":"openairmaps 0.8.1","text":"CRAN release: 2023-11-03 minor release openairmaps, released mainly fix issue ggmap also adding new functionality polar marker maps.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"breaking-changes-0-8-1","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"openairmaps 0.8.1","text":"BREAKING: arguments addPolarMarkers() rejigged move “data” “pollutant”, owing new use leaflet::getMapData(). (#45) BREAKING: default arguments polarMap()-family functions changed , e.g., NULL \"free\" \"fixed\". (#34) BREAKING: Due changes ggmap, static polar plotting functions now require users provide ggmap object. zoom argument also removed. specifically related partnership Stamen Stadia put stamen tiles behind API. See https://maps.stamen.com/stadia-partnership/ https://github.com/dkahle/ggmap/issues/353 information. (#52)","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-8-1","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.8.1","text":"Several “limit” arguments can now take one three options: “fixed” (forces markers share scales), “free” (allows use different scales), numeric vector define scales. (#34) arguments defaults include: polarMap(): upper (fixed); limits (free) annulusMap(): limits (free) freqMap(): breaks (free) percentileMap(): intervals (fixed) Added searchNetwork(), allows users find local air quality monitoring sites specifying target latitude longitude. Function arguments allow site metadata subset (example, site type, pollutants measured, distance target). Added convertPostcode(), converts valid UK postcode latitude/longitude pair. intended used searchNetwork(). “data” argument addPolarMarkers() addTrajPaths() “” “” arguments addPolarDiffMarkers() now default leaflet::getMapData(map). makes use less verbose creating multiple polar plots underlying data, likely common use-case. (#45) networkMap() popups now contain links associated network websites. example, popup London Marylebone Road networkMap(\"aurn\") now contains link https://uk-air.defra.gov.uk/networks/site-info?site_id=MY1. networks supported exception “europe”. (#39) addPolarMarkers() addPolarDiffMarkers() now “options” arguments leaflet::addMarkers(). means , example, polar markers can clustered (https://leafletjs.com/reference.html#marker). (#38) polarMap() family networkMap() provider argument can now take named vector. names used layer control menu, length(provider) > 1. (#42)","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-080","dir":"Changelog","previous_headings":"","what":"openairmaps 0.8.0","title":"openairmaps 0.8.0","text":"CRAN release: 2023-03-31 minor release adding range quality life features, adding two new experimental functions, fixing bugs.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-8-0","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.8.0","text":"trajMapStatic() trajLevelMapStatic() added two new experimental functions provide ggplot2 equivalents openair::trajPlot() openair::trajLevel(). (#28) experimental long term place functions uncertain; definitely need ggplot2 incarnation trajectory plotting functions, whether sit openair, {ggopenair} openairmaps named clear. control facet arguments polar marker mapping functions (static interactive) trajectory mapping functions now passed openair::cutData(). popup argument interactive polar marker mapping functions can now take vector column names. one column provided, automatically passed buildPopup() using default values. trajLevelMap() now control argument, maps directly onto type argument openair::trajLevel(). Like control arguments elsewhere openairmaps, creates “layer control” menu. networkMap() now uses different coloured markers different networks. one network specified, draw.legend set TRUE, legend also drawn quick identification different data sources. (#30) Deprecations now managed lifecycle package. currently applies type argument.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-0-8-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps 0.8.0","text":"Fixed issues multiple addPolarMarkers() chained together show plot. Fixed issue ... pollutant weren’t passed addPolarMarkers(). (#27) Fixed issue trajMap() caused recent updates dplyr forcats. Fixed issue polarMapStatic() others turn factor facet levels characters. Specifically, meant , example, months year alphabetical order. Now factor levels, including resulting pass cutData(), now honoured facet argument. (#31) Fixed issue polarMapStatic() others error trying draw legend.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-070","dir":"Changelog","previous_headings":"","what":"openairmaps 0.7.0","title":"openairmaps 0.7.0","text":"CRAN release: 2023-02-09 minor release containing several important new features expand scope package. also comes several minor breaking changes improve consistency within openairmaps openair.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"breaking-changes-0-7-0","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"openairmaps 0.7.0","text":"BREAKING: fig.width, fig.height, iconHeight iconWidth arguments replaced d.fig d.icon. two main justifications behind : ensures consistency across openairmaps, making easier switch static HTML map types. Polar markers almost always going circular (.e., width = height) one argument streamline things. users wish non-circular markers, vector length two form c(width, height) provide functionality. BREAKING: arguments addPolarMarkers() put sensible order, leading data, pollutant fun. BREAKING: date argument networkMap() replaced year. (#26)","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-7-0","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.7.0","text":"Added “static” equivalents polar marker maps written ggplot2. interactive HTML maps preferred, static equivalents may appropriate , e.g., academic publications. (#19) ggplot2 functions can identified “Static” appended function name. example, polarMap() leaflet polar plot map, whereas polarMapStatic() ggplot2 equivalent. Currently, “static” versions trajectory maps served openair::trajPlot() openair::trajLevel(), may space future ggmap equivalents openairmaps. Added diffMap() diffMapStatic() openair::polarDiff() polarMap() polarMapStatic() openair::polarPlot() (#17). Also added addPolarDiffMarkers(), equivalent addPolarMarkers(). (#25) Added alpha argument directional analysis polar mapping functions, just polarMap(). (#14) Fixed alpha work Windows MacOS forcing use “cairo” device save plots. (#14) Polar marker maps addPolarMarkers() now show progress bar creating markers takes seconds (commonly polarMap() annulusMap(), particularly multiple pollutants/control groups). networkMap() can now pass new year option importMeta().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-061","dir":"Changelog","previous_headings":"","what":"openairmaps 0.6.1","title":"openairmaps 0.6.1","text":"CRAN release: 2023-01-09 patch release primarily fix bugs openairmaps, implement new default colour scheme recent openair update.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-6-1","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.6.1","text":"Functions now use Google’s “turbo” colour palette rather “jet” default. palette advantages using “jet” can read https://ai.googleblog.com/2019/08/turbo-improved-rainbow-colormap-.html.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-0-6-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps 0.6.1","text":"Fixed issue polar marker maps (e.g., polarMap()) generic addPolarMarkers() function lat/lon info Southern Hemisphere misalign markers. Hat tip Deanna Tuxford James noticing issue. (#18) Fixed issue networkMap() control = \"variable\" fail show pollutants.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-060","dir":"Changelog","previous_headings":"","what":"openairmaps 0.6.0","title":"openairmaps 0.6.0","text":"CRAN release: 2022-11-28 minor release, mainly focusing enhancing ability polar markers shared colour scales, also incorporating new features network visualisation.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-6-0","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.6.0","text":"directional analysis maps can now limits provided (can “limits”, “breaks”, “percentiles”, etc., depending function). always possible ..., now explicitly listed option. (#12) limits defined directional analysis function, shared legend now drawn top-right map. functionality can disabled setting draw.legend FALSE. (#12) Added buildPopup() function, allows users easily construct HTML popups use “popup” argument directional analysis maps (leaflet maps widely). default options fig.width fig.height now 3.5 rather 4. appears remove visual artefacts makes axis labels legible. networkMap() now supports multiple sources. example, using source = c(\"aurn\", \"saqn\") show AURN SAQN one map. may useful users interested air quality specific region UK (e.g., users may wish locate AURN, AQE locally managed sites near given urban centre). (#16) networkMap() now supports source = \"local\". Multiple basemap providers can now used networkMap(). networkMap(), trajMap() polar directional analysis maps gained collapse.control argument, controls whether control menu starts collapsed . defaults FALSE, means control menu collapsed. documentation improved; function parameters consistent functions arguments passed openair via ... now explicitly listed.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-0-6-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps 0.6.0","text":"“alpha” option removed directional analysis functions except polarMap() ever worked polarMap().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-051","dir":"Changelog","previous_headings":"","what":"openairmaps 0.5.1","title":"openairmaps 0.5.1","text":"CRAN release: 2022-10-20 patch release designed fix major bug v0.5.0.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-0-5-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps 0.5.1","text":"Fixed issue causing markers duplicated pollutant information missing certain sites.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-050","dir":"Changelog","previous_headings":"","what":"openairmaps 0.5.0","title":"openairmaps 0.5.0","text":"CRAN release: 2022-10-19 minor release centred around addition control argument, allows arbitrary columns used “layer control” menus.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"breaking-changes-0-5-0","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"openairmaps 0.5.0","text":"functions now use latitude longitude distinguish site types. Therefore, “type” now deprecated. Maps using old system still render, popups displayed. users, restore previous site labels simply rewrite type = \"site\" popup = \"site\". (#10) default values “pollutant” removed. users relying default update code explicitly state pollutant = \"nox\".","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-5-0","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.5.0","text":"functions now possess “control” argument, allows users create “layer control” menu arbitrary column. Appropriate columns may produced using openair::cutData(), openair::splitByDate(), user-defined dplyr::case_when()/dplyr::if_else() column transformation. (#9) functions now possess “popup” “label” arguments, control pop-hover-labels, respectively. allows users define popup label column, even non-unique ones. example, multiple sites can labelled identical site types. (#10) functions now try guess latitude/longitude column provided, similar leaflet. (#10) Updated many error messages warnings use cli broadly descriptive.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-0-5-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps 0.5.0","text":"trajMap() can now coloured date. Fixed issue trajMap() cause user-defined colours work.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-043","dir":"Changelog","previous_headings":"","what":"openairmaps 0.4.3","title":"openairmaps 0.4.3","text":"CRAN release: 2022-09-13 patch release adding small number refinements.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"breaking-changes-0-4-3","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"openairmaps 0.4.3","text":"polar_data column names changed “latitude” “longitude” “lat” “lon” reflect defaults polarMap() family. trajMap() trajLevelMap() now use argument names “latitude” “longitude” match polarMap() family.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-4-3","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.4.3","text":"trajLevelMap() now contains lat.inc lon.inc arguments.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-042","dir":"Changelog","previous_headings":"","what":"openairmaps 0.4.2","title":"openairmaps 0.4.2","text":"patch release fix bug trajLevelMap().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-0-4-2","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps 0.4.2","text":"trajLevelMap() now works statistic = \"frequency\" without “pollutant”.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-041","dir":"Changelog","previous_headings":"","what":"openairmaps 0.4.1","title":"openairmaps 0.4.1","text":"first CRAN release openairmaps.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"features-0-4-1","dir":"Changelog","previous_headings":"","what":"Features","title":"openairmaps 0.4.1","text":"currently three streams functionality openairmaps: networkMap() visualises openair::importMeta() networks. polarMap() family allow openair directional analysis plots used leaflet markers. trajMap() family leaflet equivalents openair::trajPlot() openair::trajMap(). two main classes functions: *Map() functions easy--use functions create leaflet maps ground-. similar openair functions. add*() functions flexible allow users add layers existing leaflet maps. designed similar leaflet “add” functions like addMarkers().","code":""}] +[{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, caste, colour, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behaviour contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behaviour include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement davison.jack.jd@gmail.com. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behaviour deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behaviour inappropriate. public apology may requested.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behaviour. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behaviour. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.1, available https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. Community Impact Guidelines inspired Mozilla’s code conduct enforcement ladder. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https://www.contributor-covenant.org/translations.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to openairmaps","title":"Contributing to openairmaps","text":"outlines propose change openairmaps.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CONTRIBUTING.html","id":"fixing-typos","dir":"","previous_headings":"","what":"Fixing typos","title":"Contributing to openairmaps","text":"can fix typos, spelling mistakes, grammatical errors documentation directly using GitHub web interface, long changes made source file. generally means ’ll need edit roxygen2 comments .R, .Rd file. can find .R file generates .Rd reading comment first line.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CONTRIBUTING.html","id":"bigger-changes","dir":"","previous_headings":"","what":"Bigger changes","title":"Contributing to openairmaps","text":"want make bigger change, ’s good idea first file issue make sure someone team agrees ’s needed. ’ve found bug, please file issue illustrates bug minimal reprex.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"Bigger changes","what":"Pull request process","title":"Contributing to openairmaps","text":"Fork package clone onto computer. haven’t done , recommend using usethis::create_from_github(\"davidcarslaw/openairmaps\", fork = TRUE). Install development dependencies devtools::install_dev_deps(), make sure package passes R CMD check running devtools::check(). R CMD check doesn’t pass cleanly, ’s good idea ask help continuing. Create Git branch pull request (PR). recommend using usethis::pr_init(\"brief-description--change\"). Make changes, commit git, create PR running usethis::pr_push(), following prompts browser. title PR briefly describe change. body PR contain Fixes #issue-number. user-facing changes, add bullet top NEWS.md (.e. just first header).","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CONTRIBUTING.html","id":"code-style","dir":"","previous_headings":"Bigger changes","what":"Code style","title":"Contributing to openairmaps","text":"Care taken new code follows style similar rest openair openairmaps. user-facing example exported functions written “lowerCamelCase” (.e., polarMap() rather polar_map()). use roxygen2, Markdown syntax, documentation.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to openairmaps","text":"Please note openairmaps project released Contributor Code Conduct. contributing project agree abide terms.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"GNU General Public License","title":"GNU General Public License","text":"Version 3, 29 June 2007Copyright © 2007 Free Software Foundation, Inc. Everyone permitted copy distribute verbatim copies license document, changing allowed.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"preamble","dir":"","previous_headings":"","what":"Preamble","title":"GNU General Public License","text":"GNU General Public License free, copyleft license software kinds works. licenses software practical works designed take away freedom share change works. contrast, GNU General Public License intended guarantee freedom share change versions program–make sure remains free software users. , Free Software Foundation, use GNU General Public License software; applies also work released way authors. can apply programs, . speak free software, referring freedom, price. General Public Licenses designed make sure freedom distribute copies free software (charge wish), receive source code can get want , can change software use pieces new free programs, know can things. protect rights, need prevent others denying rights asking surrender rights. Therefore, certain responsibilities distribute copies software, modify : responsibilities respect freedom others. example, distribute copies program, whether gratis fee, must pass recipients freedoms received. must make sure , , receive can get source code. must show terms know rights. Developers use GNU GPL protect rights two steps: (1) assert copyright software, (2) offer License giving legal permission copy, distribute /modify . developers’ authors’ protection, GPL clearly explains warranty free software. users’ authors’ sake, GPL requires modified versions marked changed, problems attributed erroneously authors previous versions. devices designed deny users access install run modified versions software inside , although manufacturer can . fundamentally incompatible aim protecting users’ freedom change software. systematic pattern abuse occurs area products individuals use, precisely unacceptable. Therefore, designed version GPL prohibit practice products. problems arise substantially domains, stand ready extend provision domains future versions GPL, needed protect freedom users. Finally, every program threatened constantly software patents. States allow patents restrict development use software general-purpose computers, , wish avoid special danger patents applied free program make effectively proprietary. prevent , GPL assures patents used render program non-free. precise terms conditions copying, distribution modification follow.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_0-definitions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"0. Definitions","title":"GNU General Public License","text":"“License” refers version 3 GNU General Public License. “Copyright” also means copyright-like laws apply kinds works, semiconductor masks. “Program” refers copyrightable work licensed License. licensee addressed “”. “Licensees” “recipients” may individuals organizations. “modify” work means copy adapt part work fashion requiring copyright permission, making exact copy. resulting work called “modified version” earlier work work “based ” earlier work. “covered work” means either unmodified Program work based Program. “propagate” work means anything , without permission, make directly secondarily liable infringement applicable copyright law, except executing computer modifying private copy. Propagation includes copying, distribution (without modification), making available public, countries activities well. “convey” work means kind propagation enables parties make receive copies. Mere interaction user computer network, transfer copy, conveying. interactive user interface displays “Appropriate Legal Notices” extent includes convenient prominently visible feature (1) displays appropriate copyright notice, (2) tells user warranty work (except extent warranties provided), licensees may convey work License, view copy License. interface presents list user commands options, menu, prominent item list meets criterion.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_1-source-code","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"1. Source Code","title":"GNU General Public License","text":"“source code” work means preferred form work making modifications . “Object code” means non-source form work. “Standard Interface” means interface either official standard defined recognized standards body, , case interfaces specified particular programming language, one widely used among developers working language. “System Libraries” executable work include anything, work whole, () included normal form packaging Major Component, part Major Component, (b) serves enable use work Major Component, implement Standard Interface implementation available public source code form. “Major Component”, context, means major essential component (kernel, window system, ) specific operating system () executable work runs, compiler used produce work, object code interpreter used run . “Corresponding Source” work object code form means source code needed generate, install, (executable work) run object code modify work, including scripts control activities. However, include work’s System Libraries, general-purpose tools generally available free programs used unmodified performing activities part work. example, Corresponding Source includes interface definition files associated source files work, source code shared libraries dynamically linked subprograms work specifically designed require, intimate data communication control flow subprograms parts work. Corresponding Source need include anything users can regenerate automatically parts Corresponding Source. Corresponding Source work source code form work.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_2-basic-permissions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"2. Basic Permissions","title":"GNU General Public License","text":"rights granted License granted term copyright Program, irrevocable provided stated conditions met. License explicitly affirms unlimited permission run unmodified Program. output running covered work covered License output, given content, constitutes covered work. License acknowledges rights fair use equivalent, provided copyright law. may make, run propagate covered works convey, without conditions long license otherwise remains force. may convey covered works others sole purpose make modifications exclusively , provide facilities running works, provided comply terms License conveying material control copyright. thus making running covered works must exclusively behalf, direction control, terms prohibit making copies copyrighted material outside relationship . Conveying circumstances permitted solely conditions stated . Sublicensing allowed; section 10 makes unnecessary.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_3-protecting-users-legal-rights-from-anti-circumvention-law","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"3. Protecting Users’ Legal Rights From Anti-Circumvention Law","title":"GNU General Public License","text":"covered work shall deemed part effective technological measure applicable law fulfilling obligations article 11 WIPO copyright treaty adopted 20 December 1996, similar laws prohibiting restricting circumvention measures. convey covered work, waive legal power forbid circumvention technological measures extent circumvention effected exercising rights License respect covered work, disclaim intention limit operation modification work means enforcing, work’s users, third parties’ legal rights forbid circumvention technological measures.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_4-conveying-verbatim-copies","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"4. Conveying Verbatim Copies","title":"GNU General Public License","text":"may convey verbatim copies Program’s source code receive , medium, provided conspicuously appropriately publish copy appropriate copyright notice; keep intact notices stating License non-permissive terms added accord section 7 apply code; keep intact notices absence warranty; give recipients copy License along Program. may charge price price copy convey, may offer support warranty protection fee.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_5-conveying-modified-source-versions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"5. Conveying Modified Source Versions","title":"GNU General Public License","text":"may convey work based Program, modifications produce Program, form source code terms section 4, provided also meet conditions: ) work must carry prominent notices stating modified , giving relevant date. b) work must carry prominent notices stating released License conditions added section 7. requirement modifies requirement section 4 “keep intact notices”. c) must license entire work, whole, License anyone comes possession copy. License therefore apply, along applicable section 7 additional terms, whole work, parts, regardless packaged. License gives permission license work way, invalidate permission separately received . d) work interactive user interfaces, must display Appropriate Legal Notices; however, Program interactive interfaces display Appropriate Legal Notices, work need make . compilation covered work separate independent works, nature extensions covered work, combined form larger program, volume storage distribution medium, called “aggregate” compilation resulting copyright used limit access legal rights compilation’s users beyond individual works permit. Inclusion covered work aggregate cause License apply parts aggregate.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_6-conveying-non-source-forms","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"6. Conveying Non-Source Forms","title":"GNU General Public License","text":"may convey covered work object code form terms sections 4 5, provided also convey machine-readable Corresponding Source terms License, one ways: ) Convey object code , embodied , physical product (including physical distribution medium), accompanied Corresponding Source fixed durable physical medium customarily used software interchange. b) Convey object code , embodied , physical product (including physical distribution medium), accompanied written offer, valid least three years valid long offer spare parts customer support product model, give anyone possesses object code either (1) copy Corresponding Source software product covered License, durable physical medium customarily used software interchange, price reasonable cost physically performing conveying source, (2) access copy Corresponding Source network server charge. c) Convey individual copies object code copy written offer provide Corresponding Source. alternative allowed occasionally noncommercially, received object code offer, accord subsection 6b. d) Convey object code offering access designated place (gratis charge), offer equivalent access Corresponding Source way place charge. need require recipients copy Corresponding Source along object code. place copy object code network server, Corresponding Source may different server (operated third party) supports equivalent copying facilities, provided maintain clear directions next object code saying find Corresponding Source. Regardless server hosts Corresponding Source, remain obligated ensure available long needed satisfy requirements. e) Convey object code using peer--peer transmission, provided inform peers object code Corresponding Source work offered general public charge subsection 6d. separable portion object code, whose source code excluded Corresponding Source System Library, need included conveying object code work. “User Product” either (1) “consumer product”, means tangible personal property normally used personal, family, household purposes, (2) anything designed sold incorporation dwelling. determining whether product consumer product, doubtful cases shall resolved favor coverage. particular product received particular user, “normally used” refers typical common use class product, regardless status particular user way particular user actually uses, expects expected use, product. product consumer product regardless whether product substantial commercial, industrial non-consumer uses, unless uses represent significant mode use product. “Installation Information” User Product means methods, procedures, authorization keys, information required install execute modified versions covered work User Product modified version Corresponding Source. information must suffice ensure continued functioning modified object code case prevented interfered solely modification made. convey object code work section , , specifically use , User Product, conveying occurs part transaction right possession use User Product transferred recipient perpetuity fixed term (regardless transaction characterized), Corresponding Source conveyed section must accompanied Installation Information. requirement apply neither third party retains ability install modified object code User Product (example, work installed ROM). requirement provide Installation Information include requirement continue provide support service, warranty, updates work modified installed recipient, User Product modified installed. Access network may denied modification materially adversely affects operation network violates rules protocols communication across network. Corresponding Source conveyed, Installation Information provided, accord section must format publicly documented (implementation available public source code form), must require special password key unpacking, reading copying.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_7-additional-terms","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"7. Additional Terms","title":"GNU General Public License","text":"“Additional permissions” terms supplement terms License making exceptions one conditions. Additional permissions applicable entire Program shall treated though included License, extent valid applicable law. additional permissions apply part Program, part may used separately permissions, entire Program remains governed License without regard additional permissions. convey copy covered work, may option remove additional permissions copy, part . (Additional permissions may written require removal certain cases modify work.) may place additional permissions material, added covered work, can give appropriate copyright permission. Notwithstanding provision License, material add covered work, may (authorized copyright holders material) supplement terms License terms: ) Disclaiming warranty limiting liability differently terms sections 15 16 License; b) Requiring preservation specified reasonable legal notices author attributions material Appropriate Legal Notices displayed works containing ; c) Prohibiting misrepresentation origin material, requiring modified versions material marked reasonable ways different original version; d) Limiting use publicity purposes names licensors authors material; e) Declining grant rights trademark law use trade names, trademarks, service marks; f) Requiring indemnification licensors authors material anyone conveys material (modified versions ) contractual assumptions liability recipient, liability contractual assumptions directly impose licensors authors. non-permissive additional terms considered “restrictions” within meaning section 10. Program received , part , contains notice stating governed License along term restriction, may remove term. license document contains restriction permits relicensing conveying License, may add covered work material governed terms license document, provided restriction survive relicensing conveying. add terms covered work accord section, must place, relevant source files, statement additional terms apply files, notice indicating find applicable terms. Additional terms, permissive non-permissive, may stated form separately written license, stated exceptions; requirements apply either way.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_8-termination","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"8. Termination","title":"GNU General Public License","text":"may propagate modify covered work except expressly provided License. attempt otherwise propagate modify void, automatically terminate rights License (including patent licenses granted third paragraph section 11). However, cease violation License, license particular copyright holder reinstated () provisionally, unless copyright holder explicitly finally terminates license, (b) permanently, copyright holder fails notify violation reasonable means prior 60 days cessation. Moreover, license particular copyright holder reinstated permanently copyright holder notifies violation reasonable means, first time received notice violation License (work) copyright holder, cure violation prior 30 days receipt notice. Termination rights section terminate licenses parties received copies rights License. rights terminated permanently reinstated, qualify receive new licenses material section 10.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_9-acceptance-not-required-for-having-copies","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"9. Acceptance Not Required for Having Copies","title":"GNU General Public License","text":"required accept License order receive run copy Program. Ancillary propagation covered work occurring solely consequence using peer--peer transmission receive copy likewise require acceptance. However, nothing License grants permission propagate modify covered work. actions infringe copyright accept License. Therefore, modifying propagating covered work, indicate acceptance License .","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_10-automatic-licensing-of-downstream-recipients","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"10. Automatic Licensing of Downstream Recipients","title":"GNU General Public License","text":"time convey covered work, recipient automatically receives license original licensors, run, modify propagate work, subject License. responsible enforcing compliance third parties License. “entity transaction” transaction transferring control organization, substantially assets one, subdividing organization, merging organizations. propagation covered work results entity transaction, party transaction receives copy work also receives whatever licenses work party’s predecessor interest give previous paragraph, plus right possession Corresponding Source work predecessor interest, predecessor can get reasonable efforts. may impose restrictions exercise rights granted affirmed License. example, may impose license fee, royalty, charge exercise rights granted License, may initiate litigation (including cross-claim counterclaim lawsuit) alleging patent claim infringed making, using, selling, offering sale, importing Program portion .","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_11-patents","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"11. Patents","title":"GNU General Public License","text":"“contributor” copyright holder authorizes use License Program work Program based. work thus licensed called contributor’s “contributor version”. contributor’s “essential patent claims” patent claims owned controlled contributor, whether already acquired hereafter acquired, infringed manner, permitted License, making, using, selling contributor version, include claims infringed consequence modification contributor version. purposes definition, “control” includes right grant patent sublicenses manner consistent requirements License. contributor grants non-exclusive, worldwide, royalty-free patent license contributor’s essential patent claims, make, use, sell, offer sale, import otherwise run, modify propagate contents contributor version. following three paragraphs, “patent license” express agreement commitment, however denominated, enforce patent (express permission practice patent covenant sue patent infringement). “grant” patent license party means make agreement commitment enforce patent party. convey covered work, knowingly relying patent license, Corresponding Source work available anyone copy, free charge terms License, publicly available network server readily accessible means, must either (1) cause Corresponding Source available, (2) arrange deprive benefit patent license particular work, (3) arrange, manner consistent requirements License, extend patent license downstream recipients. “Knowingly relying” means actual knowledge , patent license, conveying covered work country, recipient’s use covered work country, infringe one identifiable patents country reason believe valid. , pursuant connection single transaction arrangement, convey, propagate procuring conveyance , covered work, grant patent license parties receiving covered work authorizing use, propagate, modify convey specific copy covered work, patent license grant automatically extended recipients covered work works based . patent license “discriminatory” include within scope coverage, prohibits exercise , conditioned non-exercise one rights specifically granted License. may convey covered work party arrangement third party business distributing software, make payment third party based extent activity conveying work, third party grants, parties receive covered work , discriminatory patent license () connection copies covered work conveyed (copies made copies), (b) primarily connection specific products compilations contain covered work, unless entered arrangement, patent license granted, prior 28 March 2007. Nothing License shall construed excluding limiting implied license defenses infringement may otherwise available applicable patent law.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_12-no-surrender-of-others-freedom","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"12. No Surrender of Others’ Freedom","title":"GNU General Public License","text":"conditions imposed (whether court order, agreement otherwise) contradict conditions License, excuse conditions License. convey covered work satisfy simultaneously obligations License pertinent obligations, consequence may convey . example, agree terms obligate collect royalty conveying convey Program, way satisfy terms License refrain entirely conveying Program.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_13-use-with-the-gnu-affero-general-public-license","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"13. Use with the GNU Affero General Public License","title":"GNU General Public License","text":"Notwithstanding provision License, permission link combine covered work work licensed version 3 GNU Affero General Public License single combined work, convey resulting work. terms License continue apply part covered work, special requirements GNU Affero General Public License, section 13, concerning interaction network apply combination .","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_14-revised-versions-of-this-license","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"14. Revised Versions of this License","title":"GNU General Public License","text":"Free Software Foundation may publish revised /new versions GNU General Public License time time. new versions similar spirit present version, may differ detail address new problems concerns. version given distinguishing version number. Program specifies certain numbered version GNU General Public License “later version” applies , option following terms conditions either numbered version later version published Free Software Foundation. Program specify version number GNU General Public License, may choose version ever published Free Software Foundation. Program specifies proxy can decide future versions GNU General Public License can used, proxy’s public statement acceptance version permanently authorizes choose version Program. Later license versions may give additional different permissions. However, additional obligations imposed author copyright holder result choosing follow later version.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_15-disclaimer-of-warranty","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"15. Disclaimer of Warranty","title":"GNU General Public License","text":"WARRANTY PROGRAM, EXTENT PERMITTED APPLICABLE LAW. EXCEPT OTHERWISE STATED WRITING COPYRIGHT HOLDERS /PARTIES PROVIDE PROGRAM “” WITHOUT WARRANTY KIND, EITHER EXPRESSED IMPLIED, INCLUDING, LIMITED , IMPLIED WARRANTIES MERCHANTABILITY FITNESS PARTICULAR PURPOSE. ENTIRE RISK QUALITY PERFORMANCE PROGRAM . PROGRAM PROVE DEFECTIVE, ASSUME COST NECESSARY SERVICING, REPAIR CORRECTION.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_16-limitation-of-liability","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"16. Limitation of Liability","title":"GNU General Public License","text":"EVENT UNLESS REQUIRED APPLICABLE LAW AGREED WRITING COPYRIGHT HOLDER, PARTY MODIFIES /CONVEYS PROGRAM PERMITTED , LIABLE DAMAGES, INCLUDING GENERAL, SPECIAL, INCIDENTAL CONSEQUENTIAL DAMAGES ARISING USE INABILITY USE PROGRAM (INCLUDING LIMITED LOSS DATA DATA RENDERED INACCURATE LOSSES SUSTAINED THIRD PARTIES FAILURE PROGRAM OPERATE PROGRAMS), EVEN HOLDER PARTY ADVISED POSSIBILITY DAMAGES.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"id_17-interpretation-of-sections-15-and-16","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"17. Interpretation of Sections 15 and 16","title":"GNU General Public License","text":"disclaimer warranty limitation liability provided given local legal effect according terms, reviewing courts shall apply local law closely approximates absolute waiver civil liability connection Program, unless warranty assumption liability accompanies copy Program return fee. END TERMS CONDITIONS","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/LICENSE.html","id":"how-to-apply-these-terms-to-your-new-programs","dir":"","previous_headings":"","what":"How to Apply These Terms to Your New Programs","title":"GNU General Public License","text":"develop new program, want greatest possible use public, best way achieve make free software everyone can redistribute change terms. , attach following notices program. safest attach start source file effectively state exclusion warranty; file least “copyright” line pointer full notice found. Also add information contact electronic paper mail. program terminal interaction, make output short notice like starts interactive mode: hypothetical commands show w show c show appropriate parts General Public License. course, program’s commands might different; GUI interface, use “box”. also get employer (work programmer) school, , sign “copyright disclaimer” program, necessary. information , apply follow GNU GPL, see . GNU General Public License permit incorporating program proprietary programs. program subroutine library, may consider useful permit linking proprietary applications library. want , use GNU Lesser General Public License instead License. first, please read .","code":" Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free software, and you are welcome to redistribute it under certain conditions; type 'show c' for details."},{"path":"https://davidcarslaw.github.io/openairmaps/articles/openairmaps.html","id":"acess-uk-monitoring-data-with-latlng-information","dir":"Articles","previous_headings":"","what":"Acess UK Monitoring Data with Lat/Lng Information","title":"Examples of {openairmaps} Functionality","text":"openair::importUKAQ() meta argument appends latitude longitude site returned data. using data importUKAQ(), ensure data coordinate data appended similar way. find sites import data , can visualise UK monitoring networks using networkMap(). Alternatively, searchNetwork() allow target specific region.","code":"london_data <- openair::importUKAQ(site = c(\"my1\", \"hors\", \"cll2\"), year = 2020, meta = TRUE) london_data #> # A tibble: 26,352 × 22 #> source site code date nox no2 no o3 so2 pm10 #> #> 1 aurn London … CLL2 2020-01-01 00:00:00 61.9 40.0 14.3 1.33 1.21 44.9 #> 2 aurn London … CLL2 2020-01-01 01:00:00 62.3 37.9 15.9 1.60 1.73 48.5 #> 3 aurn London … CLL2 2020-01-01 02:00:00 68.7 37.2 20.5 2.00 1.23 49.1 #> 4 aurn London … CLL2 2020-01-01 03:00:00 60.2 36.5 15.5 2.05 1.23 53.1 #> 5 aurn London … CLL2 2020-01-01 04:00:00 34.9 28.2 4.32 7.58 1.23 46.3 #> 6 aurn London … CLL2 2020-01-01 05:00:00 32.4 27.7 3.06 7.33 0.844 43.7 #> 7 aurn London … CLL2 2020-01-01 06:00:00 35.8 29.9 3.84 6.64 1.23 46.1 #> 8 aurn London … CLL2 2020-01-01 07:00:00 46.3 36.2 6.60 4.29 1.23 42.7 #> 9 aurn London … CLL2 2020-01-01 08:00:00 116. 40.6 49.1 1.70 2.66 42.8 #> 10 aurn London … CLL2 2020-01-01 09:00:00 127. 41.6 55.5 2.05 3.18 42.1 #> # ℹ 26,342 more rows #> # ℹ 12 more variables: pm2.5 , v10 , v2.5 , nv10 , #> # nv2.5 , ws , wd , air_temp , co , latitude , #> # longitude , site_type names(london_data) #> [1] \"source\" \"site\" \"code\" \"date\" \"nox\" \"no2\" #> [7] \"no\" \"o3\" \"so2\" \"pm10\" \"pm2.5\" \"v10\" #> [13] \"v2.5\" \"nv10\" \"nv2.5\" \"ws\" \"wd\" \"air_temp\" #> [19] \"co\" \"latitude\" \"longitude\" \"site_type\" networkMap(source = c(\"aurn\", \"aqe\"), year = 2020, control = \"variable\")"},{"path":"https://davidcarslaw.github.io/openairmaps/articles/openairmaps.html","id":"polar-plot-maps","dir":"Articles","previous_headings":"","what":"Polar Plot Maps","title":"Examples of {openairmaps} Functionality","text":"polarMap() family includes polarMap(), annulusMap(), freqMap(), percentileMap(), windroseMap(), pollroseMap(), diffMap(), work similarly create interactive air quality maps: setting static TRUE recieve static version map, may useful academic articles.","code":"polarMap(london_data, c(\"no2\", \"pm10\"), popup = c(\"site\", \"site_type\"), label = \"site\") polarMap(london_data, c(\"no2\", \"pm10\"), static = TRUE, d.icon = 100)"},{"path":"https://davidcarslaw.github.io/openairmaps/articles/openairmaps.html","id":"trajectory-maps","dir":"Articles","previous_headings":"","what":"Trajectory Maps","title":"Examples of {openairmaps} Functionality","text":"trajMap() almost identical arguments openair::trajPlot(), likewise trajLevelMap() openair::trajLevel().","code":"trajMap(traj_data, colour = \"pm10\") trajLevelMap(traj_data)"},{"path":"https://davidcarslaw.github.io/openairmaps/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Jack Davison. Maintainer, author. David Carslaw. Author.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Davison J, Carslaw D (2024). openairmaps: Create Maps Air Pollution Data. R package version 0.9.0.9006, https://github.com/davidcarslaw/openairmaps, https://davidcarslaw.github.io/openairmaps/.","code":"@Manual{, title = {openairmaps: Create Maps of Air Pollution Data}, author = {Jack Davison and David Carslaw}, year = {2024}, note = {R package version 0.9.0.9006, https://github.com/davidcarslaw/openairmaps}, url = {https://davidcarslaw.github.io/openairmaps/}, }"},{"path":[]},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/index.html","id":"id_-core-features","dir":"","previous_headings":"","what":"💡 Core Features","title":"Create Maps of Air Pollution Data","text":"openairmaps developed pace align openair R’s modern geospatial ecosystem. Network visualisation many UK-based monitoring networks networkMap(), can also searched using searchNetwork(). Directional analysis maps place openair::polarPlot() “polar coordinate” plots maps. Trajectory analysis maps (trajMap() trajLevelMap()) interactive implementations openair::trajPlot() family. Flexible map conditioning aligned openair type option easily condition maps season, day week, . Map building utilities building popups interactive maps, formatting common pollutant names units, converting UK postcodes lat/lng coordinates.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/index.html","id":"id_-documentation","dir":"","previous_headings":"","what":"📖 Documentation","title":"Create Maps of Air Pollution Data","text":"openairmaps functions fully documented; access documentation using R IDE choice. Documentation also hosted online package website. guide openair toolkit can found online book, contains lots code snippets, demonstrations functionality, ideas application openair’s various functions.","code":"?openairmaps::polarMap"},{"path":"https://davidcarslaw.github.io/openairmaps/index.html","id":"id_️-installation","dir":"","previous_headings":"","what":"🗃️ Installation","title":"Create Maps of Air Pollution Data","text":"openairmaps can installed CRAN : can also install development version openairmaps GitHub using pak: 🏛️ openairmaps primarily maintained Jack Davison. 📃 openairmaps licensed GNU General Public License. 🧑💻 Contributions welcome wider community. See contributing guide code conduct information.","code":"install.packages(\"openairmaps\") # install.packages(\"pak\") pak::pak(\"davidcarslaw/openairmaps\")"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addPolarMarkers.html","id":null,"dir":"Reference","previous_headings":"","what":"Add polar markers to leaflet map — addPolarMarkers","title":"Add polar markers to leaflet map — addPolarMarkers","text":"function similar (identical ) leaflet::addMarkers() leaflet::addCircleMarkers() functions leaflet, allows users add openair directional analysis plots leaflet map control groups layerIds \"--one\" functions like polarMap().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addPolarMarkers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add polar markers to leaflet map — addPolarMarkers","text":"","code":"addPolarMarkers( map, pollutant, fun = openair::polarPlot, lng = NULL, lat = NULL, layerId = NULL, group = NULL, popup = NULL, popupOptions = NULL, label = NULL, labelOptions = NULL, options = leaflet::markerOptions(), clusterOptions = NULL, clusterId = NULL, key = FALSE, d.icon = 200, d.fig = 3.5, data = leaflet::getMapData(map), ... ) addPolarDiffMarkers( map, pollutant, before = leaflet::getMapData(map), after = leaflet::getMapData(map), lng = NULL, lat = NULL, layerId = NULL, group = NULL, popup = NULL, popupOptions = NULL, label = NULL, labelOptions = NULL, options = leaflet::markerOptions(), clusterOptions = NULL, clusterId = NULL, key = FALSE, d.icon = 200, d.fig = 3.5, ... )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addPolarMarkers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add polar markers to leaflet map — addPolarMarkers","text":"map map widget object created leaflet() pollutant name pollutant plot. Note , fun = openair::windRose, must set pollutant = \"ws\". fun openair directional analysis plotting function. Supported functions include openair::polarPlot() (default), openair::polarAnnulus(), openair::polarFreq(), openair::percentileRose(), openair::pollutionRose() openair::windRose(). openair::polarDiff(), use addPolarDiffMarkers(). lng decimal longitude. lat decimal latitude. layerId layer id group name group newly created layers belong (clearGroup addLayersControl purposes). Human-friendly group names permitted–need short, identifier-style names. number layers even different types layers (e.g. markers polygons) can share group name. popup column data used popup. popupOptions Vector popupOptions provide popups label column data used label. labelOptions Vector labelOptions provide label options label. Default NULL options list extra options tile layers, popups, paths (circles, rectangles, polygons, ...), map elements clusterOptions NULL, markers clustered using Leaflet.markercluster; can use markerClusterOptions() specify marker cluster options clusterId id marker cluster layer key key marker drawn? Default FALSE. d.icon diameter plot map pixels. affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using openair inches. affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. data data frame. data frame must contain data plot choice openair directional analysis plot, includes wind speed (ws), wind direction (wd), column representing concentration pollutant. addition, data must include decimal latitude longitude. default, data object provided leaflet::leaflet() initially, can overridden. ... arguments plotting function (e.g. period openair::polarAnnulus()). , data frame represents /case. See openair::polarPlot() details different input requirements. default, data object provided leaflet::leaflet() initially, least one overridden.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addPolarMarkers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add polar markers to leaflet map — addPolarMarkers","text":"leaflet object.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addPolarMarkers.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Add polar markers to leaflet map — addPolarMarkers","text":"addPolarMarkers(): Add one-table polar marker (e.g., openair::polarPlot()) addPolarDiffMarkers(): Add two-table openair::polarDiff() marker.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addPolarMarkers.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add polar markers to leaflet map — addPolarMarkers","text":"","code":"if (FALSE) { # \\dontrun{ library(leaflet) library(openair) # different types of polar plot on one map leaflet(data = polar_data) %>% addTiles() %>% addPolarMarkers(\"ws\", fun = openair::windRose, group = \"Wind Rose\" ) %>% addPolarMarkers(\"nox\", fun = openair::polarPlot, group = \"Polar Plot\" ) %>% addLayersControl( baseGroups = c(\"Wind Rose\", \"Polar Plot\") ) # use of polar diff (NB: both 'before' and 'after' inherit from `leaflet()`, # so at least one should be overridden - in this case 'after') leaflet(data = polar_data) %>% addTiles() %>% addPolarDiffMarkers(\"nox\", after = dplyr::mutate(polar_data, nox = jitter(nox, 5)) ) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addTrajPaths.html","id":null,"dir":"Reference","previous_headings":"","what":"Add trajectory paths to leaflet map — addTrajPaths","title":"Add trajectory paths to leaflet map — addTrajPaths","text":"function similar (identical ) leaflet::addMarkers() function leaflet, allows users add trajectory paths leaflet map control groups layerIds \"--one\" functions like trajMap().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addTrajPaths.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add trajectory paths to leaflet map — addTrajPaths","text":"","code":"addTrajPaths( map, lng = \"lon\", lat = \"lat\", layerId = NULL, group = NULL, data = leaflet::getMapData(map), npoints = 12, ... )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addTrajPaths.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add trajectory paths to leaflet map — addTrajPaths","text":"map map widget object created leaflet::leaflet(). lng decimal longitude. lat decimal latitude. layerId base string layer id. actual layer IDs format \"layerId-linenum\" lines \"layerId_linenum-pointnum\" points. example, first point first trajectory path \"layerId-1-1\". group name group newly created layers belong (leaflet::clearGroup() leaflet::addLayersControl() purposes). Human-friendly group names permitted–need short, identifier-style names. number layers even different types layers (e.g. markers polygons) can share group name. data Data frame, result importing trajectory file using openair::importTraj(). default, data object provided leaflet::leaflet() initially, can overridden. npoints dot placed every npoints along full trajectory. hourly back trajectories points plotted every npoints hours. helps understand air masses particular times get feel speed air (points closer together correspond slower moving air masses). Defaults 12. ... arguments pass leaflet::addCircleMarkers() leaflet::addPolylines(). use color argument, important ensure vector supply length one avoid issues leaflet::addPolylines() (.e., use color = ~ pal(nox)[1]). Note opacity controls opacity lines fillOpacity opacity markers.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addTrajPaths.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add trajectory paths to leaflet map — addTrajPaths","text":"leaflet object.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addTrajPaths.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Add trajectory paths to leaflet map — addTrajPaths","text":"addTrajPaths() can powerful way quickly plotting trajectories leaflet map, users take care due additional arguments passed leaflet::addCircleMarkers() leaflet::addPolylines(). particular, users weary use color argument. Specifically, color passed vector length greater one, multiple polylines drawn top one another. best affect opacity, worst significantly impact performance R final leaflet map. mitigate , please ensure vector passed color length one. simple want whole path colour, difficult want colour pollutant, example. easiest way achieve write loop use another iterative approach (e.g. purrr package) add one path per arrival date. example provided Examples.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/addTrajPaths.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add trajectory paths to leaflet map — addTrajPaths","text":"","code":"if (FALSE) { # \\dontrun{ library(leaflet) library(openairmaps) pal <- colorNumeric(palette = \"viridis\", domain = traj_data$nox) map <- leaflet() %>% addTiles() for (i in seq(length(unique(traj_data$date)))) { data <- dplyr::filter(traj_data, date == unique(traj_data$date)[i]) map <- map %>% addTrajPaths( data = data, color = pal(data$nox)[1] ) } map } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/annulusMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Polar annulus plots on dynamic and static maps — annulusMap","title":"Polar annulus plots on dynamic and static maps — annulusMap","text":"annulusMap() function creates map using polar annulus plots markers. number pollutants can specified using pollutant argument, multiple layers markers can created using type. default, maps dynamic can panned, zoomed, otherwise interacted . Using static argument allows static images produced instead.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/annulusMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Polar annulus plots on dynamic and static maps — annulusMap","text":"","code":"annulusMap( data, pollutant = NULL, period = \"hour\", limits = \"free\", latitude = NULL, longitude = NULL, crs = 4326, type = NULL, popup = NULL, label = NULL, provider = \"OpenStreetMap\", cols = \"turbo\", alpha = 1, key = FALSE, legend = TRUE, legend.position = NULL, legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control.autotext = TRUE, d.icon = 200, d.fig = 3.5, static = FALSE, static.nrow = NULL, progress = TRUE, ..., control = NULL )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/annulusMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Polar annulus plots on dynamic and static maps — annulusMap","text":"data Input data table pollutant, wind, geo-spatial information. required | scope: dynamic & static data frame. data frame must contain data plot directional analysis marker, includes wind speed (ws), wind direction (wd), column representing concentration pollutant. addition, data must include decimal latitude longitude (X/Y coordinate used conjunction crs). pollutant Pollutant name(s). required | scope: dynamic & static column name(s) pollutant(s) plot. multiple pollutants specified non-pairwise statistic supplied, type argument longer able used : Dynamic: pollutants can toggled using \"layer control\" menu. Static:: pollutants appear different panel. Multiple pollutants prohibit use type argument non-pairwise statistics. period Temporal period radial axis. default: \"hour\" | scope: dynamic & static Options \"hour\" (default, plot diurnal variations), \"season\" plot variation throughout year, \"weekday\" plot day week variation \"trend\" plot trend wind direction. limits Specifier plot colour scale bounds. default: \"free\" | scope: dynamic & static One : \"fixed\" ensures markers use colour scale. \"free\" (default) allows markers use different colour scales. numeric vector form c(lower, upper) used define colour scale. example, limits = c(0, 100) force plot limits span 0-100. latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. type method condition data separate plotting. default: NULL | scope: dynamic & static Used splitting input data different groups, passed type argument openair::cutData(). type specified: Dynamic: different data splits can toggled using \"layer control\" menu. Static:: data splits appear different panel. type used multiple pollutant columns provided. popup Content marker popups dynamic maps. default: NULL | scope: dynamic Columns used HTML content marker popups dynamic maps. Popups may useful show information individual sites (e.g., site names, codes, types, etc.). vector column names provided passed buildPopup() using default values. label Content marker hover-dynamic maps. default: NULL | scope: dynamic Column used HTML content hover-labels. Labels useful reasons popups, though typically shorter. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. cols Colours use plotting. default: \"turbo\" | scope: dynamic & static colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. legend Draw shared legend? default: TRUE | scope: dynamic & static markers share colour scale (e.g., limits != \"free\" polarMap()), shared legend created side map? legend.position Position shared legend. default: NULL | scope: dynamic & static legend = TRUE, legend placed? Dynamic: One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). Static:: One \"top\", \"right\", \"bottom\" \"left\". Passed legend.position argument ggplot2::theme(). legend.title Title legend. default: NULL | scope: dynamic & static default, legend.title = NULL, function attempt provide sensible legend title. legend.title allows users overwrite - example, include units contextual information. dynamic maps, users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE | scope: dynamic & static legend.title.autotext = TRUE, legend.title first run quickTextHTML() (dynamic) openair::quickText() (static). control.collapsed Show layer control collapsed? default: FALSE | scope: dynamic dynamic maps, \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" | scope: dynamic type != NULL, multiple pollutants specified, \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.autotext Automatically format content layer control menu? default: TRUE | scope: dynamic control.autotext = TRUE, content \"layer control\" interface first run quickTextHTML(). d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. static Produce static map? default: FALSE controls whether dynamic static map produced. former default broadly useful, latter may preferable DOCX PDF outputs (e.g., academic papers). static.nrow Number rows static map. default: NULL | scope: static Controls number rows panels static map multiple pollutants type specified; passed nrow argument ggplot2::facet_wrap(). default, NULL, results roughly square grid panels. progress Show progress bar? default: TRUE | scope: dynamic & static default, progress bar shown visualise function's progress creating individual polar markers. option allows turned , desired. ... Arguments passed openair::polarAnnulus resolution Two plot resolutions can set: “normal” “fine” (default). local.tz results calculated local time includes treatment daylight savings time (DST)? default consider DST issues, provided data imported without DST offset. Emissions activity tends occur local time e.g. rush hour 8 every day. clocks go forward spring, emissions effectively released atmosphere typically 1 hour earlier summertime .e. DST applies. plotting diurnal profiles, effect “smearing-” concentrations. Sometimes, useful approach express time local time. correction tends produce better-defined diurnal profiles concentration (variables) allows better comparison made emissions/activity data. set FALSE GMT used. Examples usage include local.tz = \"Europe/London\", local.tz = \"America/New_York\". See cutData import details. statistic statistic applied wind speed/direction bin. Can “mean” (default), “median”, “max” (maximum), “frequency”. “stdev” (standard deviation), “weighted.mean” “cpf” (Conditional Probability Function). smoothing involved, colour scale statistics provide indication overall pattern interpreted concentration units e.g. statistic = \"weighted.mean\" bin mean multiplied bin frequency divided total frequency. many cases using polarFreq better. Setting statistic = \"weighted.mean\" can useful provides indication concentration * frequency occurrence highlight wind speed/direction conditions dominate overall mean. percentile statistic = \"percentile\" statistic = \"cpf\" percentile used, expressed 0 100. Note percentile value calculated wind speed, wind direction ‘bins’. reason can also useful set min.bin ensure sufficient number points available estimate percentile. See quantile details percentiles calculated. width width annulus; can “normal” (default), “thin” “fat”. min.bin minimum number points allowed wind speed/wind direction bin. default 1. value two requires least 2 valid records bin ; bins less 2 valid records set NA. Care taken using value > 1 risk removing real data points. recommended consider data care. Also, polarFreq function can use circumstances. exclude.missing Setting option TRUE (default) removes points plot far original data. smoothing routines produce predictions points data exist .e. predict. removing points far original data produces plot clear original data lie. set FALSE missing data interpolated. date.pad type = \"trend\" (default), date.pad = TRUE pad-missing data beginning first year end last year. purpose ensure trend plot begins ends beginning end year. force.positive default TRUE. Sometimes smoothing data steep gradients possible predicted values negative. force.positive = TRUE ensures predictions remain positive. useful several reasons. First, lots missing data interpolation needed can result artefacts predictions far original data. Second, known beforehand data positive, option carries assumption prediction. likely time setting force.positive = FALSE background concentrations first subtracted resulting data legitimately negative. vast majority situations expected user need alter default option. k smoothing value supplied gam temporal wind direction components, respectively. cases e.g. trend plot less 1-year data smoothing default values may become noisy affected outliers. Choosing lower value k (say 10) may help produce better plot. normalise TRUE concentrations normalised dividing mean value. done fitting smooth surface. option particularly useful one interested patterns concentrations several pollutants different scales e.g. NOx CO. Often useful one pollutant chosen. key.header Adds additional text/labels scale key. example, passing options key.header = \"header\", key.footer = \"footer1\" adds addition text scale key. arguments passed drawOpenKey via quickText, applying auto.text argument, handle formatting. key.footer see key.footer. key.position Location scale key plotted. Allowed arguments currently include \"top\", \"right\", \"bottom\" \"left\". auto.text Either TRUE (default) FALSE. TRUE titles axis labels automatically try format pollutant names units properly e.g. subscripting `2' NO2. control Deprecated. Please use type.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/annulusMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Polar annulus plots on dynamic and static maps — annulusMap","text":"Either: Dynamic: leaflet object Static: ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/annulusMap.html","id":"customisation-of-static-maps-using-ggplot-","dir":"Reference","previous_headings":"","what":"Customisation of static maps using ggplot2","title":"Polar annulus plots on dynamic and static maps — annulusMap","text":"outputs static directional analysis functions ggplot2 figures, customisation possible using functions ggplot2::theme(), ggplot2::guides() ggplot2::labs(). multiple pollutants specified, subscripting (e.g., \"x\" \"NOx\") achieved using ggtext package. Therefore choose override plot theme, recommended use [ggplot2::theme()] [ggtext::element_markdown()] define strip.text parameter. arguments like limits, percentile breaks defined, legend automatically added figure. Legends can removed using ggplot2::theme(legend.position = \"none\"), customised using ggplot2::guides() either color = ggplot2::guide_colourbar() continuous legends fill = ggplot2::guide_legend() discrete legends.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/annulusMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Polar annulus plots on dynamic and static maps — annulusMap","text":"","code":"if (FALSE) { # \\dontrun{ annulusMap(polar_data, pollutant = \"nox\", period = \"hour\", provider = \"CartoDB.Voyager\" ) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/buildPopup.html","id":null,"dir":"Reference","previous_headings":"","what":"Build a Complex Popup for a Leaflet Map — buildPopup","title":"Build a Complex Popup for a Leaflet Map — buildPopup","text":"Group dataframe together latitude/longitude columns create HTML popup user-defined columns. default, unique values character columns collapsed comma-separated lists, numeric columns averaged, date columns presented range. function returns input dataframe appended \"popup\" column, can used popup argument function like polarMap().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/buildPopup.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Build a Complex Popup for a Leaflet Map — buildPopup","text":"","code":"buildPopup( data, columns, latitude = NULL, longitude = NULL, type = NULL, fun.character = function(x) paste(unique(x), collapse = \", \"), fun.numeric = function(x) signif(mean(x, na.rm = TRUE), 3), fun.dttm = function(x) paste(lubridate::floor_date(range(x, na.rm = TRUE), \"day\"), collapse = \" to \"), ... )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/buildPopup.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Build a Complex Popup for a Leaflet Map — buildPopup","text":"data Input data table geo-spatial information. required data frame containing latitude longitude information go used function polarMap(). columns character vector column names include popup. required Summaries selected columns appear popup. named vector provided, names vector used place raw column names. See Examples information. latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). type column passed type argument another function. default: NULL Column used type argument mapping functions. needs used type going used polarMap() another similar function, expect different values different map layers (example, calculating mean pollutant concentration). fun.character function summarise character factor columns. default: function(x) paste(unique(x), collapse = \", \") default collapses unique values comma-separated list. fun.numeric function summarise numeric columns. default: function(x) signif(mean(x, na.rm = TRUE), 3) default takes mean three significant figures. numeric summaries may interest, maximum, minimum, standard deviation, . fun.dttm function summarise date columns. default: function(x) paste(lubridate::floor_date(range(x, na.rm = TRUE), \"day\"), collapse = \" \") default presents date range. statistics interest start end dates. ... currently used.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/buildPopup.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Build a Complex Popup for a Leaflet Map — buildPopup","text":"tibble::tibble()","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/buildPopup.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Build a Complex Popup for a Leaflet Map — buildPopup","text":"","code":"if (FALSE) { # \\dontrun{ buildPopup( data = polar_data, columns = c( \"Site\" = \"site\", \"Site Type\" = \"site_type\", \"Date Range\" = \"date\" ) ) %>% polarMap(\"nox\", popup = \"popup\") } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/convertPostcode.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert a UK postcode to a latitude/longitude pair — convertPostcode","title":"Convert a UK postcode to a latitude/longitude pair — convertPostcode","text":"much simpler implementation tools found PostcodesioR R package, intended use searchNetwork() function.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/convertPostcode.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert a UK postcode to a latitude/longitude pair — convertPostcode","text":"","code":"convertPostcode(postcode)"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/convertPostcode.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Convert a UK postcode to a latitude/longitude pair — convertPostcode","text":"https://postcodes.io/","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/convertPostcode.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert a UK postcode to a latitude/longitude pair — convertPostcode","text":"postcode valid UK postcode. required string containing single valid UK postcode, e.g., \"SW1A 1AA\".","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/convertPostcode.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert a UK postcode to a latitude/longitude pair — convertPostcode","text":"list containing latitude, longitude, input postcode.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/convertPostcode.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert a UK postcode to a latitude/longitude pair — convertPostcode","text":"","code":"# convert a UK postcode convertPostcode(\"SW1A1AA\") #> $lat #> [1] 51.50101 #> #> $lng #> [1] -0.141588 #> #> $postcode #> [1] \"SW1A 1AA\" #> if (FALSE) { # \\dontrun{ # use with `searchNetwork()` palace <- convertPostcode(\"SW1A1AA\") searchNetwork(lat = palace$lat, lng = palace$lng, max_dist = 10) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/deprecated-static-polar-maps.html","id":null,"dir":"Reference","previous_headings":"","what":"Deprecated static directional analysis functions — polarMapStatic","title":"Deprecated static directional analysis functions — polarMapStatic","text":"Static direction analysis mapping functions deprecated favour combined functions (e.g., polarMap()), present consistent, unified API users simply swap two output formats.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/deprecated-static-polar-maps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Deprecated static directional analysis functions — polarMapStatic","text":"","code":"polarMapStatic( data, pollutant = NULL, x = \"ws\", limits = \"free\", upper = \"fixed\", latitude = NULL, longitude = NULL, crs = 4326, provider = \"osm\", facet = NULL, cols = \"turbo\", alpha = 1, key = FALSE, facet.nrow = NULL, d.icon = 150, d.fig = 3, ... ) diffMapStatic( before, after, pollutant = NULL, limits = \"free\", x = \"ws\", latitude = NULL, longitude = NULL, crs = 4326, provider = \"osm\", facet = NULL, cols = c(\"#002F70\", \"#3167BB\", \"#879FDB\", \"#C8D2F1\", \"#F6F6F6\", \"#F4C8C8\", \"#DA8A8B\", \"#AE4647\", \"#5F1415\"), alpha = 1, key = FALSE, facet.nrow = NULL, d.icon = 150, d.fig = 3, ... ) annulusMapStatic( data, pollutant = NULL, period = \"hour\", facet = NULL, limits = \"free\", latitude = NULL, longitude = NULL, crs = 4326, provider = \"osm\", cols = \"turbo\", alpha = 1, key = FALSE, facet.nrow = NULL, d.icon = 150, d.fig = 3, ... ) windroseMapStatic( data, ws.int = 2, breaks = 4, facet = NULL, latitude = NULL, longitude = NULL, crs = 4326, provider = \"osm\", cols = \"turbo\", alpha = 1, key = FALSE, facet.nrow = NULL, d.icon = 150, d.fig = 3, ... ) pollroseMapStatic( data, pollutant = NULL, statistic = \"prop.count\", breaks = NULL, facet = NULL, latitude = NULL, longitude = NULL, crs = 4326, provider = \"osm\", cols = \"turbo\", alpha = 1, key = FALSE, facet.nrow = NULL, d.icon = 150, d.fig = 3, ... ) percentileMapStatic( data, pollutant = NULL, percentile = c(25, 50, 75, 90, 95), intervals = \"fixed\", latitude = NULL, longitude = NULL, crs = 4326, provider = \"osm\", facet = NULL, cols = \"turbo\", alpha = 1, key = FALSE, facet.nrow = NULL, d.icon = 150, d.fig = 3, ... ) freqMapStatic( data, pollutant = NULL, statistic = \"mean\", breaks = \"free\", latitude = NULL, longitude = NULL, crs = 4326, provider = \"osm\", facet = NULL, cols = \"turbo\", alpha = 1, key = FALSE, facet.nrow = NULL, d.icon = 150, d.fig = 3, ... )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/deprecated-static-polar-maps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Deprecated static directional analysis functions — polarMapStatic","text":"data Input data table pollutant, wind, geo-spatial information. required | scope: dynamic & static data frame. data frame must contain data plot directional analysis marker, includes wind speed (ws), wind direction (wd), column representing concentration pollutant. addition, data must include decimal latitude longitude (X/Y coordinate used conjunction crs). pollutant Pollutant name(s). required | scope: dynamic & static column name(s) pollutant(s) plot. multiple pollutants specified non-pairwise statistic supplied, type argument longer able used : Dynamic: pollutants can toggled using \"layer control\" menu. Static:: pollutants appear different panel. Multiple pollutants prohibit use type argument non-pairwise statistics. x radial axis variable. default: \"ws\" | scope: dynamic & static column name radial axis variable use openair::polarPlot(). Defaults using wind speed, \"ws\", meteorological variables ambient temperature atmospheric stability may useful. limits Specifier plot colour scale bounds. default: \"free\" | scope: dynamic & static One : \"fixed\" ensures markers use colour scale. \"free\" (default) allows markers use different colour scales. numeric vector form c(lower, upper) used define colour scale. example, limits = c(0, 100) force plot limits span 0-100. upper Specifier polar plot radial axis upper boundary. default: \"fixed\" | scope: dynamic & static One : \"fixed\" (default) ensures markers use radial axis scale. \"free\" allows markers use different radial axis scales. numeric value, used upper limit radial axis scale. latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. facet Passed type argument relevant polarMap() family function. cols Colours use plotting. default: \"turbo\" | scope: dynamic & static colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. facet.nrow Passed static.nrow argument relevant polarMap() family function. d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. ... Passed polar plotting function data frame represents \"\" case. See polarPlot() details different input requirements. data frame represents \"\" case. See polarPlot() details different input requirements. period Temporal period radial axis. default: \"hour\" | scope: dynamic & static Options \"hour\" (default, plot diurnal variations), \"season\" plot variation throughout year, \"weekday\" plot day week variation \"trend\" plot trend wind direction. ws.int wind speed interval colour axis. default: 2 | scope: dynamic & static wind speed interval. Default 2 m/s low met masts low mean wind speeds value 1 0.5 m/s may better. breaks Specifier number breaks colour axis. default: 4 | scope: dynamic & static commonly, number break points wind speed openair::windRose(). ws.int default 2, default breaks, 4, generates break points 2, 4, 6, 8. Breaks can also used set specific break points. example, argument `breaks = c(0, 1, 10, 100)“ breaks data segments <1, 1-10, 10-100, >100. statistic statistic applied data bin plot default: \"prop.mean\" | scope: dynamic & static Options currently include \"prop.count\", \"prop.mean\" \"abs.count\". \"prop.count\" sizes bins according proportion frequency measurements. Similarly, \"prop.mean\" sizes bins according relative contribution mean. \"abs.count\" provides absolute count measurements bin. percentile percentile values colour scale bin. default: c(25, 50, 75, 90, 95) | scope: dynamic & static percentile value(s) plot using openair::percentileRose(). Must vector values 0 100. percentile = NA mean line shown. intervals Specifier percentile rose radial axis intervals. default: \"fixed\" | scope: dynamic & static One : \"fixed\" (default) ensures markers use radial axis scale. \"free\" allows markers use different radial axis scales. numeric vector defining sequence numbers use intervals, e.g., intervals = c(0, 10, 30, 50).","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/deprecated-static-polar-maps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Deprecated static directional analysis functions — polarMapStatic","text":"ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/diffMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Bivariate polar 'difference' plots on dynamic and static maps — diffMap","title":"Bivariate polar 'difference' plots on dynamic and static maps — diffMap","text":"diffMap() function creates map using bivariate polar plots markers. number pollutants can specified using pollutant argument, multiple layers markers can created using type. default, maps dynamic can panned, zoomed, otherwise interacted . Using static argument allows static images produced instead.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/diffMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Bivariate polar 'difference' plots on dynamic and static maps — diffMap","text":"","code":"diffMap( before, after, pollutant = NULL, x = \"ws\", limits = \"free\", latitude = NULL, longitude = NULL, crs = 4326, type = NULL, popup = NULL, label = NULL, provider = \"OpenStreetMap\", cols = rev(openair::openColours(\"RdBu\", 10)), alpha = 1, key = FALSE, legend = TRUE, legend.position = NULL, legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control.autotext = TRUE, d.icon = 200, d.fig = 3.5, static = FALSE, static.nrow = NULL, progress = TRUE, ..., control = NULL )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/diffMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Bivariate polar 'difference' plots on dynamic and static maps — diffMap","text":"data frame represents \"\" case. See polarPlot() details different input requirements. data frame represents \"\" case. See polarPlot() details different input requirements. pollutant Mandatory. pollutant name corresponding variable data frame supplied e.g. pollutant = \"nox\". can also one pollutant specified e.g. pollutant = c(\"nox\", \"no2\"). main use using two pollutants model evaluation two species expected similar concentrations. saves user stacking data possible work columns data directly. typical use pollutant = c(\"obs\", \"mod\") compare two columns “obs” (observations) “mod” (modelled values). pair-wise statistics Pearson correlation regression techniques plotted, pollutant takes two elements . example, pollutant = c(\"bc\", \"pm25\") \"bc\" function \"pm25\". x Name variable plot wind direction polar coordinates, default wind speed, “ws”. limits Limits plot colour scale. default: \"free\" | scope: dynamic & static One : \"free\" (default) allows markers use different colour scales. numeric vector form c(lower, upper) used define colour scale. example, limits = c(-10, 10) force plot limits span -10 10. recommended use symmetrical limit scale (along \"diverging\" colour palette) effective visualisation. Note \"fixed\" option supported diffMap(). latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. type method condition data separate plotting. default: NULL | scope: dynamic & static Used splitting input data different groups, passed type argument openair::cutData(). type specified: Dynamic: different data splits can toggled using \"layer control\" menu. Static:: data splits appear different panel. type used multiple pollutant columns provided. popup Content marker popups dynamic maps. default: NULL | scope: dynamic Columns used HTML content marker popups dynamic maps. Popups may useful show information individual sites (e.g., site names, codes, types, etc.). vector column names provided passed buildPopup() using default values. label Content marker hover-dynamic maps. default: NULL | scope: dynamic Column used HTML content hover-labels. Labels useful reasons popups, though typically shorter. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. cols Colours use plotting. default: rev(openair::openColours(\"RdBu\", 10)) | scope: dynamic & static colours used plotting, passed openair::openColours(). recommended use \"diverging\" colour palette (along symmetrical limit scale) effective visualisation. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. legend Draw shared legend? default: TRUE | scope: dynamic & static markers share colour scale (e.g., limits != \"free\" polarMap()), shared legend created side map? legend.position Position shared legend. default: NULL | scope: dynamic & static legend = TRUE, legend placed? Dynamic: One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). Static:: One \"top\", \"right\", \"bottom\" \"left\". Passed legend.position argument ggplot2::theme(). legend.title Title legend. default: NULL | scope: dynamic & static default, legend.title = NULL, function attempt provide sensible legend title. legend.title allows users overwrite - example, include units contextual information. dynamic maps, users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE | scope: dynamic & static legend.title.autotext = TRUE, legend.title first run quickTextHTML() (dynamic) openair::quickText() (static). control.collapsed Show layer control collapsed? default: FALSE | scope: dynamic dynamic maps, \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" | scope: dynamic type != NULL, multiple pollutants specified, \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.autotext Automatically format content layer control menu? default: TRUE | scope: dynamic control.autotext = TRUE, content \"layer control\" interface first run quickTextHTML(). d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. static Produce static map? default: FALSE controls whether dynamic static map produced. former default broadly useful, latter may preferable DOCX PDF outputs (e.g., academic papers). static.nrow Number rows static map. default: NULL | scope: static Controls number rows panels static map multiple pollutants type specified; passed nrow argument ggplot2::facet_wrap(). default, NULL, results roughly square grid panels. progress Show progress bar? default: TRUE | scope: dynamic & static default, progress bar shown visualise function's progress creating individual polar markers. option allows turned , desired. ... Arguments passed openair::polarPlot wd Name wind direction field. statistic statistic applied wind speed/direction bin. smoothing involved, colour scale statistics provide indication overall pattern interpreted concentration units e.g. statistic = \"weighted.mean\" bin mean multiplied bin frequency divided total frequency. many cases using polarFreq better. Setting statistic = \"weighted.mean\" can useful provides indication concentration * frequency occurrence highlight wind speed/direction conditions dominate overall mean.Can : “mean” (default), “median”, “max” (maximum), “frequency”. “stdev” (standard deviation), “weighted.mean”. statistic = \"nwr\" Implements Non-parametric Wind Regression approach Henry et al. (2009) uses kernel smoothers. openair implementation identical Gaussian kernels used wind direction speed. smoothing controlled ws_spread wd_spread. statistic = \"cpf\" conditional probability function (CPF) plotted single (usually high) percentile level supplied. CPF defined CPF = /ny, number samples y bin (default wind direction, wind speed interval) mixing ratios greater overall percentile concentration, ny total number samples wind sector (see Ashbaugh et al., 1985). Note percentile intervals can also considered; see percentile details. statistic = \"r\" statistic = \"Pearson\", Pearson correlation coefficient calculated two pollutants. calculation involves weighted Pearson correlation coefficient, weighted Gaussian kernels wind direction radial variable (default wind speed). weight assigned values close wind speed-direction interval. Kernel weighting used ensure data used rather relying potentially small number values wind speed-direction interval. statistic = \"Spearman\", Spearman correlation coefficient calculated two pollutants. calculation involves weighted Spearman correlation coefficient, weighted Gaussian kernels wind direction radial variable (default wind speed). weight assigned values close wind speed-direction interval. Kernel weighting used ensure data used rather relying potentially small number values wind speed-direction interval. \"robust_slope\" another option pair-wise statistics \"quantile.slope\", uses quantile regression estimate slope particular quantile level (see also tau setting quantile level). \"york_slope\" another option pair-wise statistics uses York regression method estimate slope. method uncertainties x y used determination slope. uncertainties provided x_error y_error — see . exclude.missing Setting option TRUE (default) removes points plot far original data. smoothing routines produce predictions points data exist .e. predict. removing points far original data produces plot clear original data lie. set FALSE missing data interpolated. uncertainty uncertainty calculated surface shown? TRUE three plots produced scale showing predicted surface together estimated lower upper uncertainties 95% confidence interval. Calculating uncertainties useful understand whether features real . example, high wind speeds data greater uncertainty predicted values. uncertainties calculated using GAM weighting done frequency measurements wind speed-direction bin. Note uncertainties calculated type set \"default\". percentile statistic = \"percentile\" percentile used, expressed 0 100. Note percentile value calculated wind speed, wind direction ‘bins’. reason can also useful set min.bin ensure sufficient number points available estimate percentile. See quantile details percentiles calculated. percentile also used Conditional Probability Function (CPF) plots. percentile can length two, case percentile interval considered use CPF. example, percentile = c(90, 100) plot CPF concentrations 90 100th percentiles. Percentile intervals can useful identifying specific sources. addition, percentile can also length 3. third value ‘trim’ value applied. calculating percentile intervals many can cover low values useful information. trim value ensures values greater equal trim * mean value considered percentile intervals calculated. effect extract detail many source signatures. See manual examples. Finally, trim value less zero percentile range interpreted absolute concentration values subsetting carried directly. weights edges plot may data points wind speed-direction interval, situations distort plot concentrations high. weights applies weighting reduce influence. example default single data point exists weighting factor 0.25 two points 0.5. apply weighting use data , use weights = c(1, 1, 1). alternative -weighting points can removed altogether using min.bin. min.bin minimum number points allowed wind speed/wind direction bin. default 1. value two requires least 2 valid records bin ; bins less 2 valid records set NA. Care taken using value > 1 risk removing real data points. recommended consider data care. Also, polarFreq function can use circumstances. mis.col min.bin > 1 can useful show data removed plots. done shading missing data mis.col. highlight missing data min.bin > 1 choose mis.col = \"transparent\". upper sets upper limit wind speed used. Often relatively data points high wind speeds plotting can reduce useful information plot. force.positive default TRUE. Sometimes smoothing data steep gradients possible predicted values negative. force.positive = TRUE ensures predictions remain positive. useful several reasons. First, lots missing data interpolation needed can result artefacts predictions far original data. Second, known beforehand data positive, option carries assumption prediction. likely time setting force.positive = FALSE background concentrations first subtracted resulting data legitimately negative. vast majority situations expected user need alter default option. k smoothing parameter used gam function package mgcv. Typically, value around 100 (default) seems suitable resolve important features plot. appropriate choice k problem-dependent; extensive testing polar plots many different problems suggests value k 100 suitable. Setting k higher values tend affect surface predictions much add computation time. Lower values k increase smoothing. Sometimes data plot polarPlot fail. circumstances can worth lowering value k. normalise TRUE concentrations normalised dividing mean value. done fitting smooth surface. option particularly useful one interested patterns concentrations several pollutants different scales e.g. NOx CO. Often useful one pollutant chosen. auto.text Either TRUE (default) FALSE. TRUE titles axis labels automatically try format pollutant names units properly e.g. subscripting `2' NO2. ws_spread value sigma used Gaussian kernel weighting wind speed statistic = \"nwr\" correlation regression statistics used r. Default 0.5. wd_spread value sigma used Gaussian kernel weighting wind direction statistic = \"nwr\" correlation regression statistics used r. Default 4. x_error x error / uncertainty used statistic = \"york_slope\". y_error y error / uncertainty used statistic = \"york_slope\". kernel Type kernel used weighting procedure correlation regression techniques used. \"gaussian\" supported may enhanced future. formula.label pair-wise statistics regression slopes calculated plotted, formula label displayed? formula.label also determine whether concentration information printed statistic = \"cpf\". tau quantile estimated statistic set \"quantile.slope\". Default 0.5 equal median ignored \"quantile.slope\" used. plot plot produced? FALSE can useful analysing data extract plot components plotting ways. control Deprecated. Please use type.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/diffMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Bivariate polar 'difference' plots on dynamic and static maps — diffMap","text":"Either: Dynamic: leaflet object Static: ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/diffMap.html","id":"customisation-of-static-maps-using-ggplot-","dir":"Reference","previous_headings":"","what":"Customisation of static maps using ggplot2","title":"Bivariate polar 'difference' plots on dynamic and static maps — diffMap","text":"outputs static directional analysis functions ggplot2 figures, customisation possible using functions ggplot2::theme(), ggplot2::guides() ggplot2::labs(). multiple pollutants specified, subscripting (e.g., \"x\" \"NOx\") achieved using ggtext package. Therefore choose override plot theme, recommended use [ggplot2::theme()] [ggtext::element_markdown()] define strip.text parameter. arguments like limits, percentile breaks defined, legend automatically added figure. Legends can removed using ggplot2::theme(legend.position = \"none\"), customised using ggplot2::guides() either color = ggplot2::guide_colourbar() continuous legends fill = ggplot2::guide_legend() discrete legends.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/diffMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Bivariate polar 'difference' plots on dynamic and static maps — diffMap","text":"","code":"if (FALSE) { # \\dontrun{ # NB: \"after\" is some dummy data to demonstrate functionality diffMap( before = polar_data, after = dplyr::mutate(polar_data, nox = jitter(nox, factor = 5)), pollutant = \"nox\" ) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/freqMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Polar frequency plots on dynamic and static maps — freqMap","title":"Polar frequency plots on dynamic and static maps — freqMap","text":"freqMap() function creates map using polar frequency plots markers. number pollutants can specified using pollutant argument, multiple layers markers can created using type. default, maps dynamic can panned, zoomed, otherwise interacted . Using static argument allows static images produced instead.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/freqMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Polar frequency plots on dynamic and static maps — freqMap","text":"","code":"freqMap( data, pollutant = NULL, statistic = \"mean\", breaks = \"free\", latitude = NULL, longitude = NULL, crs = 4326, type = NULL, popup = NULL, label = NULL, provider = \"OpenStreetMap\", cols = \"turbo\", alpha = 1, key = FALSE, legend = TRUE, legend.position = NULL, legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control.autotext = TRUE, d.icon = 200, d.fig = 3.5, static = FALSE, static.nrow = NULL, progress = TRUE, ..., control = NULL )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/freqMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Polar frequency plots on dynamic and static maps — freqMap","text":"data Input data table pollutant, wind, geo-spatial information. required | scope: dynamic & static data frame. data frame must contain data plot directional analysis marker, includes wind speed (ws), wind direction (wd), column representing concentration pollutant. addition, data must include decimal latitude longitude (X/Y coordinate used conjunction crs). pollutant Pollutant name(s). required | scope: dynamic & static column name(s) pollutant(s) plot. multiple pollutants specified non-pairwise statistic supplied, type argument longer able used : Dynamic: pollutants can toggled using \"layer control\" menu. Static:: pollutants appear different panel. Multiple pollutants prohibit use type argument non-pairwise statistics. statistic statistic applied wind speed/direction bin. default: \"mean\" | scope: dynamic & static Can \"frequency\", \"mean\", \"median\", \"max\" (maximum), \"stdev\" (standard deviation) \"weighted.mean\". option \"frequency\" simplest plots frequency wind speed/direction different bins. scale therefore shows counts bin. option \"mean\" (default) plot mean concentration pollutant (see next point) wind speed/direction bins, . Finally, \"weighted.mean\" plot concentration pollutant weighted wind speed/direction. segment therefore provides percentage overall contribution total concentration. Note options \"frequency\", necessary also provide name pollutant. See function openair::cutData() details. breaks Specifier breaks plot colour scale. default: \"free\" | scope: dynamic & static One : \"fixed\" ensures markers use colour scale. \"free\" (default) allows markers use different colour scales. numeric vector defining sequence numbers use breaks. sequence represent one equal spacing, e.g., breaks = seq(0, 100, 10) - scale 0-10 intervals 10, flexible sequence, e.g., breaks = c(0, 1, 5, 7, 10), may useful situations. latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. type method condition data separate plotting. default: NULL | scope: dynamic & static Used splitting input data different groups, passed type argument openair::cutData(). type specified: Dynamic: different data splits can toggled using \"layer control\" menu. Static:: data splits appear different panel. type used multiple pollutant columns provided. popup Content marker popups dynamic maps. default: NULL | scope: dynamic Columns used HTML content marker popups dynamic maps. Popups may useful show information individual sites (e.g., site names, codes, types, etc.). vector column names provided passed buildPopup() using default values. label Content marker hover-dynamic maps. default: NULL | scope: dynamic Column used HTML content hover-labels. Labels useful reasons popups, though typically shorter. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. cols Colours use plotting. default: \"turbo\" | scope: dynamic & static colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. legend Draw shared legend? default: TRUE | scope: dynamic & static markers share colour scale (e.g., limits != \"free\" polarMap()), shared legend created side map? legend.position Position shared legend. default: NULL | scope: dynamic & static legend = TRUE, legend placed? Dynamic: One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). Static:: One \"top\", \"right\", \"bottom\" \"left\". Passed legend.position argument ggplot2::theme(). legend.title Title legend. default: NULL | scope: dynamic & static default, legend.title = NULL, function attempt provide sensible legend title. legend.title allows users overwrite - example, include units contextual information. dynamic maps, users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE | scope: dynamic & static legend.title.autotext = TRUE, legend.title first run quickTextHTML() (dynamic) openair::quickText() (static). control.collapsed Show layer control collapsed? default: FALSE | scope: dynamic dynamic maps, \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" | scope: dynamic type != NULL, multiple pollutants specified, \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.autotext Automatically format content layer control menu? default: TRUE | scope: dynamic control.autotext = TRUE, content \"layer control\" interface first run quickTextHTML(). d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. static Produce static map? default: FALSE controls whether dynamic static map produced. former default broadly useful, latter may preferable DOCX PDF outputs (e.g., academic papers). static.nrow Number rows static map. default: NULL | scope: static Controls number rows panels static map multiple pollutants type specified; passed nrow argument ggplot2::facet_wrap(). default, NULL, results roughly square grid panels. progress Show progress bar? default: TRUE | scope: dynamic & static default, progress bar shown visualise function's progress creating individual polar markers. option allows turned , desired. ... Arguments passed openair::polarFreq ws.int Wind speed interval assumed. cases e.g. low met mast, interval 0.5 may appropriate. wd.nint Number intervals wind direction. grid.line Radial spacing grid lines. trans transformation applied? Sometimes producing plots kind can dominated high points. default therefore TRUE square-root transform applied. results non-linear scale (usually) better representation distribution. set FALSE linear scale used. min.bin minimum number points allowed wind speed/wind direction bin. default 1. value two requires least 2 valid records bin ; bins less 2 valid records set NA. Care taken using value > 1 risk removing real data points. recommended consider data care. Also, polarFreq function can use circumstances. ws.upper user-defined upper wind speed use. useful ensuring consistent scale different plots. example, always ensure wind speeds displayed 1-10, set ws.int = 10. offset offset controls size ‘hole’ middle expressed percentage maximum wind speed. Setting higher offset e.g. 50 useful statistic = \"weighted.mean\" ws.int greater maximum wind speed. See example . border.col colour boundary wind speed/direction bin. default transparent. Another useful choice sometimes \"white\". key.header Adds additional text/labels scale key. example, passing options key.header = \"header\", key.footer = \"footer1\" adds addition text scale key. arguments passed drawOpenKey via quickText, applying auto.text argument, handle formatting. key.footer see key.footer. key.position Location scale key plotted. Allowed arguments currently include \"top\", \"right\", \"bottom\" \"left\". auto.text Either TRUE (default) FALSE. TRUE titles axis labels automatically try format pollutant names units properly e.g. subscripting `2' NO2. control Deprecated. Please use type.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/freqMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Polar frequency plots on dynamic and static maps — freqMap","text":"Either: Dynamic: leaflet object Static: ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/freqMap.html","id":"customisation-of-static-maps-using-ggplot-","dir":"Reference","previous_headings":"","what":"Customisation of static maps using ggplot2","title":"Polar frequency plots on dynamic and static maps — freqMap","text":"outputs static directional analysis functions ggplot2 figures, customisation possible using functions ggplot2::theme(), ggplot2::guides() ggplot2::labs(). multiple pollutants specified, subscripting (e.g., \"x\" \"NOx\") achieved using ggtext package. Therefore choose override plot theme, recommended use [ggplot2::theme()] [ggtext::element_markdown()] define strip.text parameter. arguments like limits, percentile breaks defined, legend automatically added figure. Legends can removed using ggplot2::theme(legend.position = \"none\"), customised using ggplot2::guides() either color = ggplot2::guide_colourbar() continuous legends fill = ggplot2::guide_legend() discrete legends.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/freqMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Polar frequency plots on dynamic and static maps — freqMap","text":"","code":"if (FALSE) { # \\dontrun{ freqMap(polar_data, pollutant = \"nox\", statistic = \"mean\", provider = \"CartoDB.Voyager\" ) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/networkMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a leaflet map of air quality measurement network sites — networkMap","title":"Create a leaflet map of air quality measurement network sites — networkMap","text":"function uses openair::importMeta() obtain metadata measurement sites uses create attractive leaflet map. default map created readers may toggle vector base map satellite/aerial image, although users can customise control menu using provider control parameters.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/networkMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a leaflet map of air quality measurement network sites — networkMap","text":"","code":"networkMap( source = \"aurn\", control = NULL, year = NULL, cluster = TRUE, provider = c(Default = \"OpenStreetMap\", Satellite = \"Esri.WorldImagery\"), legend = TRUE, legend.position = \"topright\", control.collapsed = FALSE, control.position = \"topright\" )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/networkMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a leaflet map of air quality measurement network sites — networkMap","text":"source One UK European monitoring networks. default: \"aurn\" One air quality networks data available openair. Available networks include: \"aurn\", UK Automatic Urban Rural Network. \"aqe\", Air Quality England Network. \"saqn\", Scottish Air Quality Network. \"waqn\", Welsh Air Quality Network. \"ni\", Northern Ireland Air Quality Network. \"local\", Locally managed air quality networks England. \"kcl\", King's College London networks. \"europe\", European AirBase/e-reporting data. two additional options provided convenience: \"ukaq\" return metadata networks data imported importUKAQ() (.e., AURN, AQE, SAQN, WAQN, NI, local networks). \"\" import available metadata (.e., \"ukaq\" plus \"kcl\" \"europe\"). control Option create 'layer control' menu. default: NULL string specify categories \"layer control\" menu, allow readers select different site categories. Choices include: \"variable\" toggle different pollutants \"site_type\" different site classifications \"agglomeration\", \"zone\" \"local_authority\" different regions UK \"network\" different monitoring networks, one source provided. year year, range years, filter data. default: NULL default, networkMap() visualises sites currently operational. year allows users show sites open specific year, range years. See openair::importMeta() information. cluster Cluster markers together zoomed ? default: TRUE cluster = TRUE, markers clustered together. may useful sources like \"kcl\" many markers close together. Defaults TRUE, forced TRUE source = \"europe\" due large number sites. provider basemap(s) used. default: c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\") number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) legend Draw shared legend? default: TRUE multiple sources defined, shared legend created side map? legend.position Position legend default: \"topright\" shared legend placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.collapsed Show layer control collapsed? default: FALSE \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/networkMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a leaflet map of air quality measurement network sites — networkMap","text":"leaflet object.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/networkMap.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a leaflet map of air quality measurement network sites — networkMap","text":"selecting multiple data sources using source, please mindful can overlap different networks. example, air quality site Scotland may part AURN SAQN. networkMap() show one marker sites, uses order source arguments provided hierarchy assign sites networks. aforementioned AURN & SAQN site therefore SAQN code displayed source = c(\"saqn\", \"aurn\"), AURN code displayed source = c(\"aurn\", \"saqn\"). hierarchy also reflected control = \"network\" used. leaflet markers part multiple groups, AURN & SAQN site part \"SAQN\" layer control group source = c(\"saqn\", \"aurn\") \"AURN\" layer control group source = c(\"aurn\", \"saqn\").","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/networkMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a leaflet map of air quality measurement network sites — networkMap","text":"","code":"if (FALSE) { # \\dontrun{ # view one network, grouped by site type networkMap(source = \"aurn\", control = \"site_type\") # view multiple networks, grouped by network networkMap(source = c(\"aurn\", \"waqn\", \"saqn\"), control = \"network\") } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/openairmaps-package.html","id":null,"dir":"Reference","previous_headings":"","what":"openairmaps: Create Maps of Air Pollution Data — openairmaps-package","title":"openairmaps: Create Maps of Air Pollution Data — openairmaps-package","text":"Combine air quality data analysis methods 'openair' JavaScript 'Leaflet' (https://leafletjs.com/) library. Functionality includes plotting site maps, \"directional analysis\" figures polar plots, air mass trajectories.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/openairmaps-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"openairmaps: Create Maps of Air Pollution Data — openairmaps-package","text":"companion package openair, UK NERC- Defra-funded R package analysis data pertaining pollution monitoring dispersion modelling. R ecosystem developed, R Markdown , recently, Quarto emerged capable tools combining data analysis document preparation. approaches can render typical .docx .pdf outputs, one common output formats HTML document. format many strengths, key one interactivity; HTML widgets allow documents informative engaging. Numerous packages developed easily develop interactive widgets, plotly dygraphs plots, DT tables, leaflet maps. openairmaps package concerns making leaflet maps. Air quality data analysis — particularly pertains long term monitoring data — naturally lends visualised spatially map. Monitoring networks geographically distributed, ignoring geographical context may lead incomplete insights best incorrect conclusions worst! Furthermore, many air quality analysis tools directional, asking questions data along lines “elevated concentrations come North, South, East West?” natural question follows “well, actually North/South/East/West causing elevated concentrations?” — map can help answer question straightforwardly. openairmaps package contains functions visualise UK air quality networks, place \"polar analysis\" markers (like openair polar plot) airmass trajectory paths maps. uses similar syntax openair package, make moving two relatively seamless.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/openairmaps-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"openairmaps: Create Maps of Air Pollution Data — openairmaps-package","text":"Maintainer: Jack Davison jack.davison@ricardo.com (ORCID) Authors: David Carslaw david.carslaw@york.ac.uk (ORCID)","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/percentileMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Percentile roses on dynamic and static maps — percentileMap","title":"Percentile roses on dynamic and static maps — percentileMap","text":"percentileMap() function creates map using polar percentile roses markers. number pollutants can specified using pollutant argument, multiple layers markers can created using type. default, maps dynamic can panned, zoomed, otherwise interacted . Using static argument allows static images produced instead.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/percentileMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Percentile roses on dynamic and static maps — percentileMap","text":"","code":"percentileMap( data, pollutant = NULL, percentile = c(25, 50, 75, 90, 95), intervals = \"fixed\", latitude = NULL, longitude = NULL, crs = 4326, type = NULL, popup = NULL, label = NULL, provider = \"OpenStreetMap\", cols = \"turbo\", alpha = 1, key = FALSE, legend = TRUE, legend.position = NULL, legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control.autotext = TRUE, d.icon = 200, d.fig = 3.5, static = FALSE, static.nrow = NULL, progress = TRUE, ..., control = NULL )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/percentileMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Percentile roses on dynamic and static maps — percentileMap","text":"data Input data table pollutant, wind, geo-spatial information. required | scope: dynamic & static data frame. data frame must contain data plot directional analysis marker, includes wind speed (ws), wind direction (wd), column representing concentration pollutant. addition, data must include decimal latitude longitude (X/Y coordinate used conjunction crs). pollutant Pollutant name(s). required | scope: dynamic & static column name(s) pollutant(s) plot. multiple pollutants specified non-pairwise statistic supplied, type argument longer able used : Dynamic: pollutants can toggled using \"layer control\" menu. Static:: pollutants appear different panel. Multiple pollutants prohibit use type argument non-pairwise statistics. percentile percentile values colour scale bin. default: c(25, 50, 75, 90, 95) | scope: dynamic & static percentile value(s) plot using openair::percentileRose(). Must vector values 0 100. percentile = NA mean line shown. intervals Specifier percentile rose radial axis intervals. default: \"fixed\" | scope: dynamic & static One : \"fixed\" (default) ensures markers use radial axis scale. \"free\" allows markers use different radial axis scales. numeric vector defining sequence numbers use intervals, e.g., intervals = c(0, 10, 30, 50). latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. type method condition data separate plotting. default: NULL | scope: dynamic & static Used splitting input data different groups, passed type argument openair::cutData(). type specified: Dynamic: different data splits can toggled using \"layer control\" menu. Static:: data splits appear different panel. type used multiple pollutant columns provided. popup Content marker popups dynamic maps. default: NULL | scope: dynamic Columns used HTML content marker popups dynamic maps. Popups may useful show information individual sites (e.g., site names, codes, types, etc.). vector column names provided passed buildPopup() using default values. label Content marker hover-dynamic maps. default: NULL | scope: dynamic Column used HTML content hover-labels. Labels useful reasons popups, though typically shorter. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. cols Colours use plotting. default: \"turbo\" | scope: dynamic & static colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. legend Draw shared legend? default: TRUE | scope: dynamic & static markers share colour scale (e.g., limits != \"free\" polarMap()), shared legend created side map? legend.position Position shared legend. default: NULL | scope: dynamic & static legend = TRUE, legend placed? Dynamic: One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). Static:: One \"top\", \"right\", \"bottom\" \"left\". Passed legend.position argument ggplot2::theme(). legend.title Title legend. default: NULL | scope: dynamic & static default, legend.title = NULL, function attempt provide sensible legend title. legend.title allows users overwrite - example, include units contextual information. dynamic maps, users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE | scope: dynamic & static legend.title.autotext = TRUE, legend.title first run quickTextHTML() (dynamic) openair::quickText() (static). control.collapsed Show layer control collapsed? default: FALSE | scope: dynamic dynamic maps, \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" | scope: dynamic type != NULL, multiple pollutants specified, \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.autotext Automatically format content layer control menu? default: TRUE | scope: dynamic control.autotext = TRUE, content \"layer control\" interface first run quickTextHTML(). d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. static Produce static map? default: FALSE controls whether dynamic static map produced. former default broadly useful, latter may preferable DOCX PDF outputs (e.g., academic papers). static.nrow Number rows static map. default: NULL | scope: static Controls number rows panels static map multiple pollutants type specified; passed nrow argument ggplot2::facet_wrap(). default, NULL, results roughly square grid panels. progress Show progress bar? default: TRUE | scope: dynamic & static default, progress bar shown visualise function's progress creating individual polar markers. option allows turned , desired. ... Arguments passed openair::percentileRose wd Name wind direction field. smooth wind direction data smoothed using cyclic spline? method method = \"default\" supplied percentiles wind direction calculated. method = \"cpf\" conditional probability function (CPF) plotted single (usually high) percentile level supplied. CPF defined CPF = /ny, number samples wind sector y mixing ratios greater overall percentile concentration, ny total number samples wind sector (see Ashbaugh et al., 1985). angle Default angle “spokes” smooth = FALSE. mean Show mean wind direction line? mean.lty Line type mean line. mean.lwd Line width mean line. mean.col Line colour mean line. fill percentile intervals filled (default) lines drawn (fill = FALSE). angle.scale Sometimes placement scale may interfere interesting feature. user can therefore set angle.scale value 0 360 degrees mitigate problems. example angle.scale = 45 draw scale heading NE direction. auto.text Either TRUE (default) FALSE. TRUE titles axis labels automatically try format pollutant names units properly e.g. subscripting `2' NO2. key.header Adds additional text/labels scale key. example, passing options key.header = \"header\", key.footer = \"footer1\" adds addition text scale key. arguments passed drawOpenKey via quickText, applying auto.text argument, handle formatting. key.footer see key.footer. key.position Location scale key plotted. Allowed arguments currently include \"top\", \"right\", \"bottom\" \"left\". control Deprecated. Please use type.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/percentileMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Percentile roses on dynamic and static maps — percentileMap","text":"Either: Dynamic: leaflet object Static: ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/percentileMap.html","id":"customisation-of-static-maps-using-ggplot-","dir":"Reference","previous_headings":"","what":"Customisation of static maps using ggplot2","title":"Percentile roses on dynamic and static maps — percentileMap","text":"outputs static directional analysis functions ggplot2 figures, customisation possible using functions ggplot2::theme(), ggplot2::guides() ggplot2::labs(). multiple pollutants specified, subscripting (e.g., \"x\" \"NOx\") achieved using ggtext package. Therefore choose override plot theme, recommended use [ggplot2::theme()] [ggtext::element_markdown()] define strip.text parameter. arguments like limits, percentile breaks defined, legend automatically added figure. Legends can removed using ggplot2::theme(legend.position = \"none\"), customised using ggplot2::guides() either color = ggplot2::guide_colourbar() continuous legends fill = ggplot2::guide_legend() discrete legends.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/percentileMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Percentile roses on dynamic and static maps — percentileMap","text":"","code":"if (FALSE) { # \\dontrun{ percentileMap(polar_data, pollutant = \"nox\", provider = \"CartoDB.Voyager\" ) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pipe.html","id":null,"dir":"Reference","previous_headings":"","what":"Pipe operator — %>%","title":"Pipe operator — %>%","text":"See magrittr::[\\%>\\%][magrittr::pipe] details.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pipe.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Pipe operator — %>%","text":"","code":"lhs %>% rhs"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pipe.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Pipe operator — %>%","text":"lhs value magrittr placeholder. rhs function call using magrittr semantics.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pipe.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Pipe operator — %>%","text":"result calling rhs(lhs).","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polarMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Bivariate polar plots on dynamic and static maps — polarMap","title":"Bivariate polar plots on dynamic and static maps — polarMap","text":"polarMap() function creates map using bivariate polar plots markers. number pollutants can specified using pollutant argument, multiple layers markers can created using type. default, maps dynamic can panned, zoomed, otherwise interacted . Using static argument allows static images produced instead.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polarMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Bivariate polar plots on dynamic and static maps — polarMap","text":"","code":"polarMap( data, pollutant = NULL, x = \"ws\", limits = \"free\", upper = \"fixed\", latitude = NULL, longitude = NULL, crs = 4326, type = NULL, popup = NULL, label = NULL, provider = \"OpenStreetMap\", cols = \"turbo\", alpha = 1, key = FALSE, legend = TRUE, legend.position = NULL, legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control.autotext = TRUE, d.icon = 200, d.fig = 3.5, static = FALSE, static.nrow = NULL, progress = TRUE, ..., control = NULL )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polarMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Bivariate polar plots on dynamic and static maps — polarMap","text":"data Input data table pollutant, wind, geo-spatial information. required | scope: dynamic & static data frame. data frame must contain data plot directional analysis marker, includes wind speed (ws), wind direction (wd), column representing concentration pollutant. addition, data must include decimal latitude longitude (X/Y coordinate used conjunction crs). pollutant Pollutant name(s). required | scope: dynamic & static column name(s) pollutant(s) plot. multiple pollutants specified non-pairwise statistic supplied, type argument longer able used : Dynamic: pollutants can toggled using \"layer control\" menu. Static:: pollutants appear different panel. Multiple pollutants prohibit use type argument non-pairwise statistics. x radial axis variable. default: \"ws\" | scope: dynamic & static column name radial axis variable use openair::polarPlot(). Defaults using wind speed, \"ws\", meteorological variables ambient temperature atmospheric stability may useful. limits Specifier plot colour scale bounds. default: \"free\" | scope: dynamic & static One : \"fixed\" ensures markers use colour scale. \"free\" (default) allows markers use different colour scales. numeric vector form c(lower, upper) used define colour scale. example, limits = c(0, 100) force plot limits span 0-100. upper Specifier polar plot radial axis upper boundary. default: \"fixed\" | scope: dynamic & static One : \"fixed\" (default) ensures markers use radial axis scale. \"free\" allows markers use different radial axis scales. numeric value, used upper limit radial axis scale. latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. type method condition data separate plotting. default: NULL | scope: dynamic & static Used splitting input data different groups, passed type argument openair::cutData(). type specified: Dynamic: different data splits can toggled using \"layer control\" menu. Static:: data splits appear different panel. type used multiple pollutant columns provided. popup Content marker popups dynamic maps. default: NULL | scope: dynamic Columns used HTML content marker popups dynamic maps. Popups may useful show information individual sites (e.g., site names, codes, types, etc.). vector column names provided passed buildPopup() using default values. label Content marker hover-dynamic maps. default: NULL | scope: dynamic Column used HTML content hover-labels. Labels useful reasons popups, though typically shorter. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. cols Colours use plotting. default: \"turbo\" | scope: dynamic & static colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. legend Draw shared legend? default: TRUE | scope: dynamic & static markers share colour scale (e.g., limits != \"free\" polarMap()), shared legend created side map? legend.position Position shared legend. default: NULL | scope: dynamic & static legend = TRUE, legend placed? Dynamic: One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). Static:: One \"top\", \"right\", \"bottom\" \"left\". Passed legend.position argument ggplot2::theme(). legend.title Title legend. default: NULL | scope: dynamic & static default, legend.title = NULL, function attempt provide sensible legend title. legend.title allows users overwrite - example, include units contextual information. dynamic maps, users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE | scope: dynamic & static legend.title.autotext = TRUE, legend.title first run quickTextHTML() (dynamic) openair::quickText() (static). control.collapsed Show layer control collapsed? default: FALSE | scope: dynamic dynamic maps, \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" | scope: dynamic type != NULL, multiple pollutants specified, \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.autotext Automatically format content layer control menu? default: TRUE | scope: dynamic control.autotext = TRUE, content \"layer control\" interface first run quickTextHTML(). d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. static Produce static map? default: FALSE controls whether dynamic static map produced. former default broadly useful, latter may preferable DOCX PDF outputs (e.g., academic papers). static.nrow Number rows static map. default: NULL | scope: static Controls number rows panels static map multiple pollutants type specified; passed nrow argument ggplot2::facet_wrap(). default, NULL, results roughly square grid panels. progress Show progress bar? default: TRUE | scope: dynamic & static default, progress bar shown visualise function's progress creating individual polar markers. option allows turned , desired. ... Arguments passed openair::polarPlot wd Name wind direction field. statistic statistic applied wind speed/direction bin. smoothing involved, colour scale statistics provide indication overall pattern interpreted concentration units e.g. statistic = \"weighted.mean\" bin mean multiplied bin frequency divided total frequency. many cases using polarFreq better. Setting statistic = \"weighted.mean\" can useful provides indication concentration * frequency occurrence highlight wind speed/direction conditions dominate overall mean.Can : “mean” (default), “median”, “max” (maximum), “frequency”. “stdev” (standard deviation), “weighted.mean”. statistic = \"nwr\" Implements Non-parametric Wind Regression approach Henry et al. (2009) uses kernel smoothers. openair implementation identical Gaussian kernels used wind direction speed. smoothing controlled ws_spread wd_spread. statistic = \"cpf\" conditional probability function (CPF) plotted single (usually high) percentile level supplied. CPF defined CPF = /ny, number samples y bin (default wind direction, wind speed interval) mixing ratios greater overall percentile concentration, ny total number samples wind sector (see Ashbaugh et al., 1985). Note percentile intervals can also considered; see percentile details. statistic = \"r\" statistic = \"Pearson\", Pearson correlation coefficient calculated two pollutants. calculation involves weighted Pearson correlation coefficient, weighted Gaussian kernels wind direction radial variable (default wind speed). weight assigned values close wind speed-direction interval. Kernel weighting used ensure data used rather relying potentially small number values wind speed-direction interval. statistic = \"Spearman\", Spearman correlation coefficient calculated two pollutants. calculation involves weighted Spearman correlation coefficient, weighted Gaussian kernels wind direction radial variable (default wind speed). weight assigned values close wind speed-direction interval. Kernel weighting used ensure data used rather relying potentially small number values wind speed-direction interval. \"robust_slope\" another option pair-wise statistics \"quantile.slope\", uses quantile regression estimate slope particular quantile level (see also tau setting quantile level). \"york_slope\" another option pair-wise statistics uses York regression method estimate slope. method uncertainties x y used determination slope. uncertainties provided x_error y_error — see . exclude.missing Setting option TRUE (default) removes points plot far original data. smoothing routines produce predictions points data exist .e. predict. removing points far original data produces plot clear original data lie. set FALSE missing data interpolated. uncertainty uncertainty calculated surface shown? TRUE three plots produced scale showing predicted surface together estimated lower upper uncertainties 95% confidence interval. Calculating uncertainties useful understand whether features real . example, high wind speeds data greater uncertainty predicted values. uncertainties calculated using GAM weighting done frequency measurements wind speed-direction bin. Note uncertainties calculated type set \"default\". percentile statistic = \"percentile\" percentile used, expressed 0 100. Note percentile value calculated wind speed, wind direction ‘bins’. reason can also useful set min.bin ensure sufficient number points available estimate percentile. See quantile details percentiles calculated. percentile also used Conditional Probability Function (CPF) plots. percentile can length two, case percentile interval considered use CPF. example, percentile = c(90, 100) plot CPF concentrations 90 100th percentiles. Percentile intervals can useful identifying specific sources. addition, percentile can also length 3. third value ‘trim’ value applied. calculating percentile intervals many can cover low values useful information. trim value ensures values greater equal trim * mean value considered percentile intervals calculated. effect extract detail many source signatures. See manual examples. Finally, trim value less zero percentile range interpreted absolute concentration values subsetting carried directly. weights edges plot may data points wind speed-direction interval, situations distort plot concentrations high. weights applies weighting reduce influence. example default single data point exists weighting factor 0.25 two points 0.5. apply weighting use data , use weights = c(1, 1, 1). alternative -weighting points can removed altogether using min.bin. min.bin minimum number points allowed wind speed/wind direction bin. default 1. value two requires least 2 valid records bin ; bins less 2 valid records set NA. Care taken using value > 1 risk removing real data points. recommended consider data care. Also, polarFreq function can use circumstances. mis.col min.bin > 1 can useful show data removed plots. done shading missing data mis.col. highlight missing data min.bin > 1 choose mis.col = \"transparent\". angle.scale Sometimes placement scale may interfere interesting feature. user can therefore set angle.scale value 0 360 degrees mitigate problems. example angle.scale = 45 draw scale heading NE direction. units units shown polar axis scale. force.positive default TRUE. Sometimes smoothing data steep gradients possible predicted values negative. force.positive = TRUE ensures predictions remain positive. useful several reasons. First, lots missing data interpolation needed can result artefacts predictions far original data. Second, known beforehand data positive, option carries assumption prediction. likely time setting force.positive = FALSE background concentrations first subtracted resulting data legitimately negative. vast majority situations expected user need alter default option. k smoothing parameter used gam function package mgcv. Typically, value around 100 (default) seems suitable resolve important features plot. appropriate choice k problem-dependent; extensive testing polar plots many different problems suggests value k 100 suitable. Setting k higher values tend affect surface predictions much add computation time. Lower values k increase smoothing. Sometimes data plot polarPlot fail. circumstances can worth lowering value k. normalise TRUE concentrations normalised dividing mean value. done fitting smooth surface. option particularly useful one interested patterns concentrations several pollutants different scales e.g. NOx CO. Often useful one pollutant chosen. key.header Adds additional text/labels scale key. example, passing options key.header = \"header\", key.footer = \"footer1\" adds addition text scale key. arguments passed drawOpenKey via quickText, applying auto.text argument, handle formatting. key.footer see key.footer. key.position Location scale key plotted. Allowed arguments currently include \"top\", \"right\", \"bottom\" \"left\". auto.text Either TRUE (default) FALSE. TRUE titles axis labels automatically try format pollutant names units properly e.g. subscripting `2' NO2. ws_spread value sigma used Gaussian kernel weighting wind speed statistic = \"nwr\" correlation regression statistics used r. Default 0.5. wd_spread value sigma used Gaussian kernel weighting wind direction statistic = \"nwr\" correlation regression statistics used r. Default 4. x_error x error / uncertainty used statistic = \"york_slope\". y_error y error / uncertainty used statistic = \"york_slope\". kernel Type kernel used weighting procedure correlation regression techniques used. \"gaussian\" supported may enhanced future. formula.label pair-wise statistics regression slopes calculated plotted, formula label displayed? formula.label also determine whether concentration information printed statistic = \"cpf\". tau quantile estimated statistic set \"quantile.slope\". Default 0.5 equal median ignored \"quantile.slope\" used. control Deprecated. Please use type.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polarMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Bivariate polar plots on dynamic and static maps — polarMap","text":"Either: Dynamic: leaflet object Static: ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polarMap.html","id":"customisation-of-static-maps-using-ggplot-","dir":"Reference","previous_headings":"","what":"Customisation of static maps using ggplot2","title":"Bivariate polar plots on dynamic and static maps — polarMap","text":"outputs static directional analysis functions ggplot2 figures, customisation possible using functions ggplot2::theme(), ggplot2::guides() ggplot2::labs(). multiple pollutants specified, subscripting (e.g., \"x\" \"NOx\") achieved using ggtext package. Therefore choose override plot theme, recommended use [ggplot2::theme()] [ggtext::element_markdown()] define strip.text parameter. arguments like limits, percentile breaks defined, legend automatically added figure. Legends can removed using ggplot2::theme(legend.position = \"none\"), customised using ggplot2::guides() either color = ggplot2::guide_colourbar() continuous legends fill = ggplot2::guide_legend() discrete legends.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polarMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Bivariate polar plots on dynamic and static maps — polarMap","text":"","code":"if (FALSE) { # \\dontrun{ polarMap(polar_data, pollutant = \"nox\", x = \"ws\", provider = \"CartoDB.Voyager\" ) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polar_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Example data for polar mapping functions — polar_data","title":"Example data for polar mapping functions — polar_data","text":"polar_data dataset provided example dataset part openairmaps package. dataset contains hourly measurements air pollutant concentrations, location meteorological data.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polar_data.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Example data for polar mapping functions — polar_data","text":"Data frame example data four sites London 2009. date date time measurement nox, no2, pm2.5, pm10 Pollutant concentrations site site name. Useful use popup label arguments openairmaps functions. latitude, longitude Decimal latitude longitude sites. site.type Site type site (either \"Urban Traffic\" \"Urban Background\"). wd Wind direction, degrees North, numeric vector. ws Wind speed, m/s, numeric vector. visibility visibility metres. air_temp Air temperature degrees Celcius.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polar_data.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Example data for polar mapping functions — polar_data","text":"polar_data compiled data using openair::importAURN() function openair package meteorological data worldmet package.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polar_data.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Example data for polar mapping functions — polar_data","text":"polar_data supplied openairmaps package example dataset use documented examples.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/polar_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Example data for polar mapping functions — polar_data","text":"","code":"# basic structure head(polar_data) #> # A tibble: 6 × 13 #> date nox no2 pm2.5 pm10 site lat lon site_type wd #> #> 1 2009-01-01 00:00:00 113 46 42 46 Lond… 51.5 -0.126 Urban Ba… 58.9 #> 2 2009-01-01 01:00:00 40 32 45 49 Lond… 51.5 -0.126 Urban Ba… 74.5 #> 3 2009-01-01 02:00:00 48 36 43 46 Lond… 51.5 -0.126 Urban Ba… 30 #> 4 2009-01-01 03:00:00 36 29 37 NA Lond… 51.5 -0.126 Urban Ba… 45 #> 5 2009-01-01 04:00:00 40 32 36 38 Lond… 51.5 -0.126 Urban Ba… 70 #> 6 2009-01-01 05:00:00 50 36 33 32 Lond… 51.5 -0.126 Urban Ba… 46.6 #> # ℹ 3 more variables: ws , visibility , air_temp "},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pollroseMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Pollution roses on dynamic and static maps — pollroseMap","title":"Pollution roses on dynamic and static maps — pollroseMap","text":"pollroseMap() function creates map using pollution roses markers. number pollutants can specified using pollutant argument, multiple layers markers can created using type. default, maps dynamic can panned, zoomed, otherwise interacted . Using static argument allows static images produced instead.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pollroseMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Pollution roses on dynamic and static maps — pollroseMap","text":"","code":"pollroseMap( data, pollutant = NULL, statistic = \"prop.count\", breaks = NULL, latitude = NULL, longitude = NULL, crs = 4326, type = NULL, popup = NULL, label = NULL, provider = \"OpenStreetMap\", cols = \"turbo\", alpha = 1, key = FALSE, legend = TRUE, legend.position = NULL, legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control.autotext = TRUE, d.icon = 200, d.fig = 3.5, static = FALSE, static.nrow = NULL, progress = TRUE, ..., control = NULL )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pollroseMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Pollution roses on dynamic and static maps — pollroseMap","text":"data Input data table pollutant, wind, geo-spatial information. required | scope: dynamic & static data frame. data frame must contain data plot directional analysis marker, includes wind speed (ws), wind direction (wd), column representing concentration pollutant. addition, data must include decimal latitude longitude (X/Y coordinate used conjunction crs). pollutant Pollutant name(s). required | scope: dynamic & static column name(s) pollutant(s) plot. multiple pollutants specified non-pairwise statistic supplied, type argument longer able used : Dynamic: pollutants can toggled using \"layer control\" menu. Static:: pollutants appear different panel. Multiple pollutants prohibit use type argument non-pairwise statistics. statistic statistic applied data bin plot default: \"prop.mean\" | scope: dynamic & static Options currently include \"prop.count\", \"prop.mean\" \"abs.count\". \"prop.count\" sizes bins according proportion frequency measurements. Similarly, \"prop.mean\" sizes bins according relative contribution mean. \"abs.count\" provides absolute count measurements bin. breaks Specifier number breaks colour axis. default: NULL | scope: dynamic & static commonly, number break points. specified, marker independently break supplied data approximately 6 sensible break points. breaks specified, markers use break points. Breaks can also used set specific break points. example, argument breaks = c(0, 1, 10, 100) breaks data segments <1, 1-10, 10-100, >100. latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. type method condition data separate plotting. default: NULL | scope: dynamic & static Used splitting input data different groups, passed type argument openair::cutData(). type specified: Dynamic: different data splits can toggled using \"layer control\" menu. Static:: data splits appear different panel. type used multiple pollutant columns provided. popup Content marker popups dynamic maps. default: NULL | scope: dynamic Columns used HTML content marker popups dynamic maps. Popups may useful show information individual sites (e.g., site names, codes, types, etc.). vector column names provided passed buildPopup() using default values. label Content marker hover-dynamic maps. default: NULL | scope: dynamic Column used HTML content hover-labels. Labels useful reasons popups, though typically shorter. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. cols Colours use plotting. default: \"turbo\" | scope: dynamic & static colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. legend Draw shared legend? default: TRUE | scope: dynamic & static markers share colour scale (e.g., limits != \"free\" polarMap()), shared legend created side map? legend.position Position shared legend. default: NULL | scope: dynamic & static legend = TRUE, legend placed? Dynamic: One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). Static:: One \"top\", \"right\", \"bottom\" \"left\". Passed legend.position argument ggplot2::theme(). legend.title Title legend. default: NULL | scope: dynamic & static default, legend.title = NULL, function attempt provide sensible legend title. legend.title allows users overwrite - example, include units contextual information. dynamic maps, users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE | scope: dynamic & static legend.title.autotext = TRUE, legend.title first run quickTextHTML() (dynamic) openair::quickText() (static). control.collapsed Show layer control collapsed? default: FALSE | scope: dynamic dynamic maps, \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" | scope: dynamic type != NULL, multiple pollutants specified, \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.autotext Automatically format content layer control menu? default: TRUE | scope: dynamic control.autotext = TRUE, content \"layer control\" interface first run quickTextHTML(). d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. static Produce static map? default: FALSE controls whether dynamic static map produced. former default broadly useful, latter may preferable DOCX PDF outputs (e.g., academic papers). static.nrow Number rows static map. default: NULL | scope: static Controls number rows panels static map multiple pollutants type specified; passed nrow argument ggplot2::facet_wrap(). default, NULL, results roughly square grid panels. progress Show progress bar? default: TRUE | scope: dynamic & static default, progress bar shown visualise function's progress creating individual polar markers. option allows turned , desired. ... Arguments passed openair::pollutionRose key.footer Adds additional text/labels scale key. See key.header information. key.position Location scale key plotted. Allowed arguments currently include “top”, “right”, “bottom” “left”. paddle Either TRUE FALSE. TRUE plots rose using 'paddle' style spokes. FALSE plots rose using 'wedge' style spokes. seg paddle = TRUE, seg determines width segments. example, seg = 0.5 produce segments 0.5 * angle. normalise TRUE wind direction segment normalised equal one. useful showing concentrations (parameters) contribute wind sector proportion time wind direction low. line showing probability wind directions particular wind sector also shown. control Deprecated. Please use type.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pollroseMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Pollution roses on dynamic and static maps — pollroseMap","text":"Either: Dynamic: leaflet object Static: ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pollroseMap.html","id":"customisation-of-static-maps-using-ggplot-","dir":"Reference","previous_headings":"","what":"Customisation of static maps using ggplot2","title":"Pollution roses on dynamic and static maps — pollroseMap","text":"outputs static directional analysis functions ggplot2 figures, customisation possible using functions ggplot2::theme(), ggplot2::guides() ggplot2::labs(). multiple pollutants specified, subscripting (e.g., \"x\" \"NOx\") achieved using ggtext package. Therefore choose override plot theme, recommended use [ggplot2::theme()] [ggtext::element_markdown()] define strip.text parameter. arguments like limits, percentile breaks defined, legend automatically added figure. Legends can removed using ggplot2::theme(legend.position = \"none\"), customised using ggplot2::guides() either color = ggplot2::guide_colourbar() continuous legends fill = ggplot2::guide_legend() discrete legends.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/pollroseMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Pollution roses on dynamic and static maps — pollroseMap","text":"","code":"if (FALSE) { # \\dontrun{ pollroseMap(polar_data, pollutant = \"nox\", statistic = \"prop.count\", provider = \"CartoDB.Voyager\" ) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/quickTextHTML.html","id":null,"dir":"Reference","previous_headings":"","what":"Automatic text formatting for openairmaps — quickTextHTML","title":"Automatic text formatting for openairmaps — quickTextHTML","text":"Workhorse function automatically applies routine text formatting common pollutant names may used HTML widgets produced openairmaps.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/quickTextHTML.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Automatic text formatting for openairmaps — quickTextHTML","text":"","code":"quickTextHTML(text)"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/quickTextHTML.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Automatic text formatting for openairmaps — quickTextHTML","text":"text character vector. required character vector containing common pollutant names formatted. Commonly, insert super- subscript HTML tags, e.g., \"NO2\" replaced \"NO2\".","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/quickTextHTML.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Automatic text formatting for openairmaps — quickTextHTML","text":"character vector","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/quickTextHTML.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Automatic text formatting for openairmaps — quickTextHTML","text":"quickTextHTML() routine formatting lookup table. screens supplied character vector text automatically applies formatting recognised character sub-series properly render HTML.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/quickTextHTML.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Automatic text formatting for openairmaps — quickTextHTML","text":"Jack Davison.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/quickTextHTML.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Automatic text formatting for openairmaps — quickTextHTML","text":"","code":"labs <- c(\"no2\", \"o3\", \"so2\") quickTextHTML(labs) #> [1] \"NO2<\/sub>\" \"O3<\/sub>\" \"SO2<\/sub>\""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/searchNetwork.html","id":null,"dir":"Reference","previous_headings":"","what":"Geographically search the air quality networks made available by openair::importMeta() — searchNetwork","title":"Geographically search the air quality networks made available by openair::importMeta() — searchNetwork","text":"networkMap() visualises entire UK air quality networks, searchNetwork() can subset specific networks find air quality sites near specific site interest (example, location known industrial activity, centroid specific urban area).","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/searchNetwork.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Geographically search the air quality networks made available by openair::importMeta() — searchNetwork","text":"","code":"searchNetwork( lat, lng, source = \"aurn\", year = NULL, site_type = NULL, variable = NULL, max_dist = NULL, n = NULL, crs = 4326, map = TRUE )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/searchNetwork.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Geographically search the air quality networks made available by openair::importMeta() — searchNetwork","text":"lat, lng decimal latitude(Y)/longitude(X). required Values representing decimal latitude longitude (Y/X coordinate using different crs) site interest. source One UK European monitoring networks. default: \"aurn\" One air quality networks data available openair. Available networks include: \"aurn\", UK Automatic Urban Rural Network. \"aqe\", Air Quality England Network. \"saqn\", Scottish Air Quality Network. \"waqn\", Welsh Air Quality Network. \"ni\", Northern Ireland Air Quality Network. \"local\", Locally managed air quality networks England. \"kcl\", King's College London networks. \"europe\", European AirBase/e-reporting data. two additional options provided convenience: \"ukaq\" return metadata networks data imported importUKAQ() (.e., AURN, AQE, SAQN, WAQN, NI, local networks). \"\" import available metadata (.e., \"ukaq\" plus \"kcl\" \"europe\"). year year, range years, filter data. default: NULL default, networkMap() visualises sites currently operational. year allows users show sites open specific year, range years. See openair::importMeta() information. site_type One site types subset site metadata. default: NULL site_type specified, sites type searched . example, site_type = \"urban background\" search urban background sites. variable One variables interest subset site metadata. default: NULL variable specified, sites measuring least one pollutants searched . example, variable = c(\"pm10\", \"co\") search sites measure PM10 /CO. max_dist maximum distance location interest kilometres. default: NULL max_dist specified, sites within max_dist kilometres lat / lng coordinate searched . n maximum number sites return. default: NULL n specified, n sites returned. Note filtering step applied last, site_type, variable, max_dist. crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. map Return map? default: TRUE TRUE, default, searchNetwork() return leaflet map. FALSE, instead return tibble.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/searchNetwork.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Geographically search the air quality networks made available by openair::importMeta() — searchNetwork","text":"Either tibble leaflet map.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/searchNetwork.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Geographically search the air quality networks made available by openair::importMeta() — searchNetwork","text":"Data subsetting progresses order arguments given; first source year, site_type variable, max_dist, finally n.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/searchNetwork.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Geographically search the air quality networks made available by openair::importMeta() — searchNetwork","text":"","code":"if (FALSE) { # \\dontrun{ # get all AURN sites open in 2020 within 20 km of Buckingham Palace palace <- convertPostcode(\"SW1A1AA\") searchNetwork(lat = palace$lat, lng = palace$lng, max_dist = 20, year = 2020) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Trajectory level plots in leaflet — trajLevelMap","title":"Trajectory level plots in leaflet — trajLevelMap","text":"function plots back trajectories leaflet map. function requires data imported using openair::importTraj() function.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trajectory level plots in leaflet — trajLevelMap","text":"","code":"trajLevelMap( data, longitude = \"lon\", latitude = \"lat\", pollutant, type = NULL, smooth = FALSE, statistic = \"frequency\", percentile = 90, lon.inc = 1, lat.inc = 1, min.bin = 1, .combine = NA, sigma = 1.5, cols = \"turbo\", alpha = 0.5, tile.border = NA, provider = \"OpenStreetMap\", legend.position = \"topright\", legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\" )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trajectory level plots in leaflet — trajLevelMap","text":"data data frame containing HYSPLIT trajectory, perhaps accessed openair::importTraj(). required data frame containing HYSPLIT model outputs. data obtained using openair::importTraj(). latitude, longitude decimal latitude/longitude. default: \"lat\" / \"lon\" Column names representing decimal latitude longitude. pollutant Pollutant plotted. default trajectory height used. type method condition data separate plotting. default: NULL Used splitting trajectories different groups can selected using \"layer control\" menu. Passed openair::cutData(). smooth trajectory surface smoothed? Defaults FALSE. Note , smooth = TRUE, popup information available. statistic Statistic use trajLevel(). default, function plot trajectory frequencies (statistic = \"frequency\"). alternative way viewing trajectory frequencies, argument method = \"hexbin\" can used. case hexagonal binning trajectory points (.e., point every three hours along back trajectory). plot shows trajectory frequencies uses hexagonal binning. also various ways plotting concentrations. possible set statistic = \"difference\". case trajectories associated concentration greater percentile compared full set trajectories understand differences frequencies origin air masses. comparison made comparing percentage change gridded frequencies. example, plot show top 10\\ tend originate air-mass origins east. statistic = \"pscf\" Potential Source Contribution Function map produced. statistic method interacts percentile. statistic = \"cwt\" concentration weighted trajectories plotted. statistic = \"sqtba\" Simplified Quantitative Transport Bias Analysis undertaken. statistic method interacts .combine sigma. percentile percentile concentration pollutant trajectories compared. lon.inc, lat.inc longitude latitude intervals used binning data. min.bin minimum number unique points grid cell. Counts min.bin set missing. .combine statistic \"SQTBA\" possible combine lots receptor locations derive single map. .combine identifies column differentiates different sites (commonly column named \"site\"). Note individual site maps normalised first dividing mean value. sigma SQTBA approach sigma determines amount back trajectory spread based Gaussian plume equation. Values literature suggest 5.4 km one hour. However, testing suggests lower values reveal source regions effectively introducing much noise. cols colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Opacity tiles. Must 0 1. tile.border Colour use border binned tiles. Defaults NA, draws border. provider basemap used. default: \"OpenStreetMap\" single leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. legend.position Position shared legend. default: \"topright\" legend placed? One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). NULL defaults \"topright\". legend.title Title legend. default: NULL default, legend.title = NULL, function attempt provide sensible legend title based colour. legend.title allows users overwrite - example, include units contextual information. Users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE legend.title.autotext = TRUE, legend.title first run quickTextHTML(). control.collapsed Show layer control collapsed? default: FALSE \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trajectory level plots in leaflet — trajLevelMap","text":"leaflet object.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Trajectory level plots in leaflet — trajLevelMap","text":"","code":"if (FALSE) { # \\dontrun{ trajLevelMap(traj_data, pollutant = \"pm2.5\", statistic = \"pscf\", min.bin = 10) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMapStatic.html","id":null,"dir":"Reference","previous_headings":"","what":"Trajectory level plots in ggplot2 — trajLevelMapStatic","title":"Trajectory level plots in ggplot2 — trajLevelMapStatic","text":"function plots back trajectories ggplot2 map. function requires data imported using openair::importTraj() function. ggplot2 implementation openair::trajLevel() many arguments, flexible post-hoc changes.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMapStatic.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trajectory level plots in ggplot2 — trajLevelMapStatic","text":"","code":"trajLevelMapStatic( data, longitude = \"lon\", latitude = \"lat\", pollutant, type = NULL, smooth = FALSE, statistic = \"frequency\", percentile = 90, lon.inc = 1, lat.inc = 1, min.bin = 1, .combine = NA, sigma = 1.5, alpha = 0.5, tile.border = NA, xlim = NULL, ylim = NULL, crs = sf::st_crs(4326), map = TRUE, map.fill = \"grey85\", map.colour = \"grey75\", map.alpha = 0.8, map.lwd = 0.5, map.lty = 1, facet = NULL, ... )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMapStatic.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trajectory level plots in ggplot2 — trajLevelMapStatic","text":"data data frame containing HYSPLIT trajectory, perhaps accessed openair::importTraj(). required data frame containing HYSPLIT model outputs. data obtained using openair::importTraj(). latitude, longitude decimal latitude/longitude. default: \"lat\" / \"lon\" Column names representing decimal latitude longitude. pollutant Pollutant plotted. default trajectory height used. type method condition data separate plotting. default: NULL Used splitting trajectories different groups can selected using \"layer control\" menu. Passed openair::cutData(). smooth trajectory surface smoothed? Defaults FALSE. Note smoothing may cause plot render slower, consider setting crs sf::st_crs(4326) NULL. statistic Statistic use trajLevel(). default, function plot trajectory frequencies (statistic = \"frequency\"). alternative way viewing trajectory frequencies, argument method = \"hexbin\" can used. case hexagonal binning trajectory points (.e., point every three hours along back trajectory). plot shows trajectory frequencies uses hexagonal binning. also various ways plotting concentrations. possible set statistic = \"difference\". case trajectories associated concentration greater percentile compared full set trajectories understand differences frequencies origin air masses. comparison made comparing percentage change gridded frequencies. example, plot show top 10\\ tend originate air-mass origins east. statistic = \"pscf\" Potential Source Contribution Function map produced. statistic method interacts percentile. statistic = \"cwt\" concentration weighted trajectories plotted. statistic = \"sqtba\" Simplified Quantitative Transport Bias Analysis undertaken. statistic method interacts .combine sigma. percentile percentile concentration pollutant trajectories compared. lon.inc, lat.inc longitude latitude intervals used binning data. min.bin minimum number unique points grid cell. Counts min.bin set missing. .combine statistic \"SQTBA\" possible combine lots receptor locations derive single map. .combine identifies column differentiates different sites (commonly column named \"site\"). Note individual site maps normalised first dividing mean value. sigma SQTBA approach sigma determines amount back trajectory spread based Gaussian plume equation. Values literature suggest 5.4 km one hour. However, testing suggests lower values reveal source regions effectively introducing much noise. alpha Opacity tiles. Must 0 1. tile.border Colour use border binned tiles. Defaults NA, draws border. xlim, ylim x- y-limits plot. default: NULL numeric vector length two defining x-/y-limits map, passed ggplot2::coord_sf(). NULL, limits estimated based lat/lon ranges input data. crs coordinate reference system (CRS) data projected plotting. Defaults latitude/longitude (sf::st_crs(4326)). map Draw base map? default: TRUE Draws geometries countries trajectory paths. map.fill Colour use fill polygons base map. default: \"grey85\" See colors() colour options. Alternatively, hexadecimal color code can provided. map.colour Colour use polygon borders base map. default: \"grey75\" See colors() colour options. Alternatively, hexadecimal color code can provided. map.alpha Transparency base map polygons. default: 0.8 Must 0 (fully transparent) 1 (fully opaque). map.lwd Line width base map polygon borders. default: 0.5 numeric value. map.lty Line type base map polygon borders. default: 1 See ggplot2::scale_linetype() common examples. default, 1, draws solid lines. facet Deprecated. Please use type. ... Arguments passed ggplot2::coord_sf expand TRUE, default, adds small expansion factor limits ensure data axes overlap. FALSE, limits taken exactly data xlim/ylim. datum CRS provides datum use generating graticules. label_graticule Character vector indicating graticule lines labeled . Meridians run north-south, letters \"N\" \"S\" indicate labeled north south end points, respectively. Parallels run east-west, letters \"E\" \"W\" indicate labeled east west end points, respectively. Thus, label_graticule = \"SW\" label meridians south end parallels west end, whereas label_graticule = \"EW\" label parallels ends meridians . meridians parallels can general intersect side plot panel, choice label_graticule labels guaranteed reside one particular side plot panel. Also, label_graticule can cause labeling artifacts, particular graticule line coincides edge plot panel. circumstances, label_axes generally yield better results used instead. parameter can used alone combination label_axes. label_axes Character vector named list character values specifying graticule lines (meridians parallels) labeled side plot. Meridians indicated \"E\" (East) parallels \"N\" (North). Default \"--EN\", specifies (clockwise top) labels top, none right, meridians bottom, parallels left. Alternatively, setting specified list(bottom = \"E\", left = \"N\"). parameter can used alone combination label_graticule. lims_method Method specifying scale limits converted limits plot region. effect default_crs = NULL. non-linear CRS (e.g., perspective centered around North pole), available methods yield widely differing results, may want try various options. Methods currently implemented include \"cross\" (default), \"box\", \"orthogonal\", \"geometry_bbox\". method \"cross\", limits along one direction (e.g., longitude) applied midpoint direction (e.g., latitude). method avoids excessively large limits rotated coordinate systems means sometimes limits need expanded little extreme data points included final plot region. contrast, method \"box\", box generated limits along directions, limits projected coordinates chosen entire box visible. method can yield plot regions large. Finally, method \"orthogonal\" applies limits separately along axis, method \"geometry_bbox\" ignores limit information except bounding boxes objects geometry aesthetic. ndiscr Number segments use discretising graticule lines; try increasing number graticules look incorrect. default default coordinate system? FALSE (default), replacing coordinate system another one creates message alerting user coordinate system replaced. TRUE, warning suppressed. clip drawing clipped extent plot panel? setting \"\" (default) means yes, setting \"\" means . cases, default \"\" changed, setting clip = \"\" can cause unexpected results. allows drawing data points anywhere plot, including plot margins. limits set via xlim ylim data points fall outside limits, data points may show places axes, legend, plot title, plot margins.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajLevelMapStatic.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trajectory level plots in ggplot2 — trajLevelMapStatic","text":"ggplot2 plot","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Trajectory line plots in leaflet — trajMap","title":"Trajectory line plots in leaflet — trajMap","text":"function plots back trajectories leaflet map. function requires data imported using openair::importTraj() function. Options provided colour individual trajectories (e.g., pollutant concentrations) create \"layer control\" menus show/hide different layers.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trajectory line plots in leaflet — trajMap","text":"","code":"trajMap( data, longitude = \"lon\", latitude = \"lat\", colour = NULL, type = NULL, cols = \"default\", alpha = 0.5, npoints = 12, provider = \"OpenStreetMap\", legend.position = \"topright\", legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control = NULL, ... )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trajectory line plots in leaflet — trajMap","text":"data data frame containing HYSPLIT trajectory, perhaps accessed openair::importTraj(). required data frame containing HYSPLIT model outputs. data obtained using openair::importTraj(). latitude, longitude decimal latitude/longitude. default: \"lat\" / \"lon\" Column names representing decimal latitude longitude. colour Column used colouring trajectory. default: NULL column may numeric, character, factor date(time). commonly pollutant concentration joined (e.g., dplyr::left_join()) trajectory data \"date\". type method condition data separate plotting. default: NULL Used splitting trajectories different groups can selected using \"layer control\" menu. Passed openair::cutData(). cols Colours use plotting. default: \"default\" colours used plotting, passed openair::openColours(). alpha Transparency value trajectories. default: 1 value 0 (fully transparent) 1 (fully opaque). npoints Interval points placed along trajectory paths. default: 12 dot placed every npoints along full trajectory. hourly back trajectories points plotted every npoints hours. helps understand air masses particular times get feel speed air (points closer together correspond slower moving air masses). Defaults 12. provider basemap used. default: \"OpenStreetMap\" single leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. legend.position Position shared legend. default: \"topright\" legend placed? One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). NULL defaults \"topright\". legend.title Title legend. default: NULL default, legend.title = NULL, function attempt provide sensible legend title based colour. legend.title allows users overwrite - example, include units contextual information. Users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE legend.title.autotext = TRUE, legend.title first run quickTextHTML(). control.collapsed Show layer control collapsed? default: FALSE \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control Deprecated. Please use type. ... Arguments passed openair::cutData hemisphere Can \"northern\" \"southern\", used split data seasons. n.levels Number quantiles split numeric data . start.day day week type = \"weekday\" start ? user can change start day supplying integer 0 6. Sunday = 0, Monday = 1, ... example start weekday plots Saturday, choose start.day = 6. .axis logical (TRUE/FALSE), used request shortened cut labels axes. local.tz Used identifying whether date daylight savings time (DST) applied . Examples include local.tz = \"Europe/London\", local.tz = \"America/New_York\" .e. time zones assume DST. https://en.wikipedia.org/wiki/List_of_zoneinfo_time_zones shows time zones valid systems. important original data GMT (UTC) fixed offset GMT. See import openair manual information import data ensure DST applied.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trajectory line plots in leaflet — trajMap","text":"leaflet object.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Trajectory line plots in leaflet — trajMap","text":"","code":"if (FALSE) { # \\dontrun{ trajMap(traj_data, colour = \"pm10\") } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMapStatic.html","id":null,"dir":"Reference","previous_headings":"","what":"Trajectory line plots in ggplot2 — trajMapStatic","title":"Trajectory line plots in ggplot2 — trajMapStatic","text":"function plots back trajectories using ggplot2. function requires data imported using openair::importTraj(). ggplot2 implementation openair::trajPlot() many arguments, flexible post-hoc changes.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMapStatic.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trajectory line plots in ggplot2 — trajMapStatic","text":"","code":"trajMapStatic( data, colour = \"height\", type = NULL, group = NULL, size = NULL, linewidth = size, longitude = \"lon\", latitude = \"lat\", npoints = 12, xlim = NULL, ylim = NULL, crs = sf::st_crs(3812), origin = TRUE, map = TRUE, map.fill = \"grey85\", map.colour = \"grey75\", map.alpha = 0.8, map.lwd = 0.5, map.lty = 1, facet = NULL, ... )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMapStatic.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trajectory line plots in ggplot2 — trajMapStatic","text":"data data frame containing HYSPLIT trajectory, perhaps accessed openair::importTraj(). required data frame containing HYSPLIT model outputs. data obtained using openair::importTraj(). colour Data column map colour trajectories. default: NULL column may numeric, character, factor date(time). commonly pollutant concentration joined (e.g., dplyr::left_join()) trajectory data \"date\". scale can edited fact using ggplot2::scale_color_continuous() similar. type method condition data separate plotting. default: NULL Used splitting trajectories different groups appear different panels. Passed openair::cutData(). group Column use distinguish different trajectory paths. default: NULL default, trajectory paths distinguished using arrival date. group allows additional columns used (e.g., \"receptor\" multiple receptors plotted). size, linewidth Data column map size/width trajectory marker/paths, absolute size value. default: NULL Similar colour argument, defines column map size circular markers width paths. scales can edited fact using ggplot2::scale_size_continuous(), ggplot2::scale_linewidth_continuous(), similar. numeric, value directly provided ggplot2::geom_point(size = ) ggplot2::geom_path(linewidth = ). latitude, longitude decimal latitude/longitude. default: \"lat\" / \"lon\" Column names representing decimal latitude longitude. npoints Interval points placed along trajectory paths. default: 12 dot placed every npoints along full trajectory. hourly back trajectories points plotted every npoints hours. helps understand air masses particular times get feel speed air (points closer together correspond slower moving air masses). Defaults 12. xlim, ylim x- y-limits plot. default: NULL numeric vector length two defining x-/y-limits map, passed ggplot2::coord_sf(). NULL, limits estimated based lat/lon ranges input data. crs coordinate reference system (CRS) data projected plotting. default: sf::st_crs(3812) argument defaults Lambert projection, can take coordinate reference system pass crs argument ggplot2::coord_sf(). Alternatively, crs can set NULL, typically render map quicker may cause countries far equator large areas appear distorted. origin Draw receptor point circle? default: TRUE TRUE, receptor point(s) marked black circles. map Draw base map? default: TRUE Draws geometries countries trajectory paths. map.fill Colour use fill polygons base map. default: \"grey85\" See colors() colour options. Alternatively, hexadecimal color code can provided. map.colour Colour use polygon borders base map. default: \"grey75\" See colors() colour options. Alternatively, hexadecimal color code can provided. map.alpha Transparency base map polygons. default: 0.8 Must 0 (fully transparent) 1 (fully opaque). map.lwd Line width base map polygon borders. default: 0.5 numeric value. map.lty Line type base map polygon borders. default: 1 See ggplot2::scale_linetype() common examples. default, 1, draws solid lines. facet Deprecated. Please use type. ... Arguments passed openair::cutData hemisphere Can \"northern\" \"southern\", used split data seasons. n.levels Number quantiles split numeric data . start.day day week type = \"weekday\" start ? user can change start day supplying integer 0 6. Sunday = 0, Monday = 1, ... example start weekday plots Saturday, choose start.day = 6. .axis logical (TRUE/FALSE), used request shortened cut labels axes. local.tz Used identifying whether date daylight savings time (DST) applied . Examples include local.tz = \"Europe/London\", local.tz = \"America/New_York\" .e. time zones assume DST. https://en.wikipedia.org/wiki/List_of_zoneinfo_time_zones shows time zones valid systems. important original data GMT (UTC) fixed offset GMT. See import openair manual information import data ensure DST applied.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMapStatic.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trajectory line plots in ggplot2 — trajMapStatic","text":"ggplot2 plot","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/trajMapStatic.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Trajectory line plots in ggplot2 — trajMapStatic","text":"","code":"if (FALSE) { # \\dontrun{ # colour by height trajMapStatic(traj_data) + ggplot2::scale_color_gradientn(colors = openair::openColours()) # colour by PM10, log transform scale trajMapStatic(traj_data, colour = \"pm10\") + ggplot2::scale_color_viridis_c(trans = \"log10\") + ggplot2::labs(color = openair::quickText(\"PM10\")) # color by PM2.5, lat/lon projection trajMapStatic(traj_data, colour = \"pm2.5\", crs = sf::st_crs(4326)) + ggplot2::scale_color_viridis_c(option = \"turbo\") + ggplot2::labs(color = openair::quickText(\"PM2.5\")) } # }"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/traj_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Example data for trajectory mapping functions — traj_data","title":"Example data for trajectory mapping functions — traj_data","text":"traj_data dataset provided example dataset part openairmaps package. dataset contains HYSPLIT back trajectory data air mass parcels arriving London 2009. joined air quality pollutant concentrations \"London N. Kensington\" AURN urban background monitoring site.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/traj_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Example data for trajectory mapping functions — traj_data","text":"","code":"traj_data"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/traj_data.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Example data for trajectory mapping functions — traj_data","text":"data frame 53940 rows 10 variables: date arrival time air-mass receptor receptor number year Trajectory year month Trajectory month day Trajectory day hour Trajectory hour hour.inc Trajectory hour offset arrival date lat Latitude lon Longitude height Height trajectory m pressure Pressure trajectory Pa date2 Date trajectory nox Concentration oxides nitrogen (+ NO2) no2 Concentration nitrogen dioxide (NO2) o3 Concentration ozone (O3) pm10 Concentration particulates (PM10) pm2.5 Concentration fine particulates (PM2.5)","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/traj_data.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Example data for trajectory mapping functions — traj_data","text":"traj_data compiled data using openair::importTraj() function openair package air quality data openair::importAURN() function.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/traj_data.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Example data for trajectory mapping functions — traj_data","text":"traj_data supplied openairmaps package example dataset use documented examples.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/traj_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Example data for trajectory mapping functions — traj_data","text":"","code":"# basic structure head(traj_data) #> # A tibble: 6 × 17 #> date receptor year month day hour hour.inc lat lon #> #> 1 2010-04-15 00:00:00 1 2010 4 15 0 0 51.5 -0.1 #> 2 2010-04-15 00:00:00 1 2010 4 14 23 -1 51.7 0.139 #> 3 2010-04-15 00:00:00 1 2010 4 14 22 -2 51.9 0.378 #> 4 2010-04-15 00:00:00 1 2010 4 14 21 -3 52.1 0.618 #> 5 2010-04-15 00:00:00 1 2010 4 14 20 -4 52.2 0.859 #> 6 2010-04-15 00:00:00 1 2010 4 14 19 -5 52.4 1.10 #> # ℹ 8 more variables: height , pressure , date2 , nox , #> # no2 , o3 , pm2.5 , pm10 "},{"path":"https://davidcarslaw.github.io/openairmaps/reference/windroseMap.html","id":null,"dir":"Reference","previous_headings":"","what":"Wind roses on dynamic and static maps — windroseMap","title":"Wind roses on dynamic and static maps — windroseMap","text":"windroseMap() function creates map using wind roses markers. Multiple layers markers can created using type argument. default, maps dynamic can panned, zoomed, otherwise interacted . Using static argument allows static images produced instead.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/windroseMap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Wind roses on dynamic and static maps — windroseMap","text":"","code":"windroseMap( data, ws.int = 2, breaks = 4, latitude = NULL, longitude = NULL, crs = 4326, type = NULL, popup = NULL, label = NULL, provider = \"OpenStreetMap\", cols = \"turbo\", alpha = 1, key = FALSE, legend = TRUE, legend.position = NULL, legend.title = NULL, legend.title.autotext = TRUE, control.collapsed = FALSE, control.position = \"topright\", control.autotext = TRUE, d.icon = 200, d.fig = 3.5, static = FALSE, static.nrow = NULL, progress = TRUE, ..., control = NULL )"},{"path":"https://davidcarslaw.github.io/openairmaps/reference/windroseMap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Wind roses on dynamic and static maps — windroseMap","text":"data Input data table wind geo-spatial information. required | scope: dynamic & static data frame. data frame must contain data plot directional analysis marker, includes wind speed (ws) wind direction (wd). addition, data must include decimal latitude longitude (X/Y coordinate used conjunction crs). ws.int wind speed interval colour axis. default: 2 | scope: dynamic & static wind speed interval. Default 2 m/s low met masts low mean wind speeds value 1 0.5 m/s may better. breaks Specifier number breaks colour axis. default: 4 | scope: dynamic & static commonly, number break points wind speed openair::windRose(). ws.int default 2, default breaks, 4, generates break points 2, 4, 6, 8. Breaks can also used set specific break points. example, argument `breaks = c(0, 1, 10, 100)“ breaks data segments <1, 1-10, 10-100, >100. latitude, longitude decimal latitude(Y)/longitude(X). default: NULL | scope: dynamic & static Column names representing decimal latitude longitude (Y/X coordinate using different crs). provided, automatically inferred data looking column named \"lat\"/\"latitude\" \"lon\"/\"lng\"/\"long\"/\"longitude\" (case-insensitively). crs coordinate reference system (CRS). default: 4326 | scope: dynamic & static coordinate reference system (CRS) data, passed sf::st_crs(). default EPSG:4326, CRS associated commonly used latitude longitude coordinates. Different coordinate systems can specified using crs (e.g., crs = 27700 British National Grid). Note non-lat/lng coordinate systems re-projected EPSG:4326 plotting map. type method condition data separate plotting. default: NULL | scope: dynamic & static Used splitting input data different groups, passed type argument openair::cutData(). type specified: Dynamic: different data splits can toggled using \"layer control\" menu. Static:: data splits appear different panel. type used multiple pollutant columns provided. popup Content marker popups dynamic maps. default: NULL | scope: dynamic Columns used HTML content marker popups dynamic maps. Popups may useful show information individual sites (e.g., site names, codes, types, etc.). vector column names provided passed buildPopup() using default values. label Content marker hover-dynamic maps. default: NULL | scope: dynamic Column used HTML content hover-labels. Labels useful reasons popups, though typically shorter. provider basemap(s) used. default: \"OpenStreetMap\" | scope: dynamic & static base map(s) used beneath polar markers. provided, default \"OpenStreetMap\"/\"osm\" dynamic static maps. Dynamic: number leaflet::providers. See http://leaflet-extras.github.io/leaflet-providers/preview/ list base maps can used. multiple base maps provided, can toggled using \"layer control\" interface. default, interface use provider names labels, users can define using named vector (e.g., c(\"Default\" = \"OpenStreetMap\", \"Satellite\" = \"Esri.WorldImagery\")) Static: One rosm::osm.types(). overlap static dynamic providers. example, {ggspatial} uses \"osm\" specify \"OpenStreetMap\". static providers provided dynamic maps vice versa, {openairmaps} attempt substitute correct provider string. cols Colours use plotting. default: \"turbo\" | scope: dynamic & static colours used plotting, passed openair::openColours(). default, \"turbo\", rainbow palette relatively perceptually uniform colours. Read palette https://research.google/blog/turbo--improved-rainbow-colormap--visualization/. alpha Transparency value polar markers. default: 1 | scope: dynamic & static value 0 (fully transparent) 1 (fully opaque). key Draw individual marker legends? default: FALSE | scope: dynamic & static Draw key individual marker? Potentially useful limits = \"free\", limited use otherwise. legend Draw shared legend? default: TRUE | scope: dynamic & static markers share colour scale (e.g., limits != \"free\" polarMap()), shared legend created side map? legend.position Position shared legend. default: NULL | scope: dynamic & static legend = TRUE, legend placed? Dynamic: One \"topright\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLegend(). Static:: One \"top\", \"right\", \"bottom\" \"left\". Passed legend.position argument ggplot2::theme(). legend.title Title legend. default: NULL | scope: dynamic & static default, legend.title = NULL, function attempt provide sensible legend title. legend.title allows users overwrite - example, include units contextual information. dynamic maps, users may wish use HTML tags format title. legend.title.autotext Automatically format title legend? default: TRUE | scope: dynamic & static legend.title.autotext = TRUE, legend.title first run quickTextHTML() (dynamic) openair::quickText() (static). control.collapsed Show layer control collapsed? default: FALSE | scope: dynamic dynamic maps, \"layer control\" interface collapsed? TRUE, users hover icon view options. control.position Position layer control menu default: \"topright\" | scope: dynamic type != NULL, multiple pollutants specified, \"layer control\" interface placed? One \"topleft\", \"topright\", \"bottomleft\" \"bottomright\". Passed position argument leaflet::addLayersControl(). control.autotext Automatically format content layer control menu? default: TRUE | scope: dynamic control.autotext = TRUE, content \"layer control\" interface first run quickTextHTML(). d.icon diameter plot map pixels. default: 200 | scope: dynamic & static affect size individual polar markers. Alternatively, vector form c(width, height) can provided non-circular marker desired. d.fig diameter plots produced using {openair} inches. default: 3.5 | scope: dynamic & static affect resolution markers map. Alternatively, vector form c(width, height) can provided non-circular marker desired. static Produce static map? default: FALSE controls whether dynamic static map produced. former default broadly useful, latter may preferable DOCX PDF outputs (e.g., academic papers). static.nrow Number rows static map. default: NULL | scope: static Controls number rows panels static map multiple pollutants type specified; passed nrow argument ggplot2::facet_wrap(). default, NULL, results roughly square grid panels. progress Show progress bar? default: TRUE | scope: dynamic & static default, progress bar shown visualise function's progress creating individual polar markers. option allows turned , desired. ... Arguments passed openair::windRose ws Name column representing wind speed. wd Name column representing wind direction. ws2,wd2 user can supply second set wind speed wind direction values first can compared. See pollutionRose() details. angle Default angle “spokes” 30. potentially useful angles 45 10. Note width wind speed interval may need adjusting using width. bias.corr angle divide exactly 360 bias introduced frequencies wind direction already supplied rounded nearest 10 degrees, often case. example, angle = 22.5, N, E, S, W include 3 wind sectors angles two. bias correction can made correct problem. simple method according Applequist (2012) used adjust frequencies. grid.line Grid line interval use. NULL, default, assigned based available data range. However, can also forced specific value, e.g. grid.line = 10. grid.line can also list control interval, line type colour. example grid.line = list(value = 10, lty = 5, col = \"purple\"). width paddle = TRUE, adjustment factor width wind speed intervals. example, width = 1.5 make paddle width 1.5 times wider. seg paddle = TRUE, seg determines width segments. example, seg = 0.5 produce segments 0.5 * angle. auto.text Either TRUE (default) FALSE. TRUE titles axis labels automatically try format pollutant names units properly, e.g., subscripting ‘2’ NO2. offset size 'hole' middle plot, expressed percentage polar axis scale, default 10. normalise TRUE wind direction segment normalised equal one. useful showing concentrations (parameters) contribute wind sector proportion time wind direction low. line showing probability wind directions particular wind sector also shown. max.freq Controls scaling used setting maximum value radial limits. useful ensure several plots use radial limits. paddle Either TRUE FALSE. TRUE plots rose using 'paddle' style spokes. FALSE plots rose using 'wedge' style spokes. key.header Adds additional text/labels scale key. example, passing windRose(mydata, key.header = \"ws\") adds addition text scale header. Note: argument passed drawOpenKey() via quickText(), applying auto.text argument, handle formatting. key.footer Adds additional text/labels scale key. See key.header information. key.position Location scale key plotted. Allowed arguments currently include “top”, “right”, “bottom” “left”. dig.lab number significant figures scientific number formatting used break point key labelling. Default 5. include.lowest Logical. FALSE (default), first interval left exclusive right inclusive. TRUE, first interval left right inclusive. Passed include.lowest argument cut(). statistic statistic applied data bin plot. Options currently include “prop.count”, “prop.mean” “abs.count”. default “prop.count” sizes bins according proportion frequency measurements. Similarly, “prop.mean” sizes bins according relative contribution mean. “abs.count” provides absolute count measurements bin. pollutant Alternative data series sampled instead wind speed. windRose() default NULL equivalent pollutant = \"ws\". Use pollutionRose(). angle.scale scale default shown 315 degree angle. Sometimes placement scale may interfere interesting feature. user can therefore set angle.scale another value (0 360 degrees) mitigate problems. example angle.scale = 45 draw scale heading NE direction. border Border colour shaded areas. Default border. control Deprecated. Please use type.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/windroseMap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Wind roses on dynamic and static maps — windroseMap","text":"Either: Dynamic: leaflet object Static: ggplot2 object using ggplot2::coord_sf() coordinates ggspatial basemap","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/reference/windroseMap.html","id":"customisation-of-static-maps-using-ggplot-","dir":"Reference","previous_headings":"","what":"Customisation of static maps using ggplot2","title":"Wind roses on dynamic and static maps — windroseMap","text":"outputs static directional analysis functions ggplot2 figures, customisation possible using functions ggplot2::theme(), ggplot2::guides() ggplot2::labs(). multiple pollutants specified, subscripting (e.g., \"x\" \"NOx\") achieved using ggtext package. Therefore choose override plot theme, recommended use [ggplot2::theme()] [ggtext::element_markdown()] define strip.text parameter. arguments like limits, percentile breaks defined, legend automatically added figure. Legends can removed using ggplot2::theme(legend.position = \"none\"), customised using ggplot2::guides() either color = ggplot2::guide_colourbar() continuous legends fill = ggplot2::guide_legend() discrete legends.","code":""},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/reference/windroseMap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Wind roses on dynamic and static maps — windroseMap","text":"","code":"if (FALSE) { # \\dontrun{ windroseMap(polar_data, provider = \"CartoDB.Voyager\" ) } # }"},{"path":[]},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-development-version","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps (development version)","text":"Pairwise statistics (e.g., \"robust_slope\") now supported polarMap(). (#72) polarMap() family gained progress argument, allowing users switch progress bar . trajMapStatic() gained size linewidth arguments, directly map onto arguments ggplot2::geom_point() ggplot2::geom_path(), respectively. can either column data (like colour), can absolute value (e.g., 2L). Note , default, linewidth takes value size, can set independently.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-development-version","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps (development version)","text":"Vectors greater length 1 passed popup polarMap() argument longer error type = NULL. ... successfully pass openair::cutData() polarMap() trajMap() families functions. default diffMap() colour scale longer appear inverted compared openair::polarDiff(). Fixed issue quickTextHTML() incorrectly format non breaking spaces , e.g., quickTextHTML(\"ug/m3\"). order trajMapStatic() draws points paths tweaked, ensure markers drawn top respective path, rather top paths. buildPopup() now work correctly type provided.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-090","dir":"Changelog","previous_headings":"","what":"openairmaps 0.9.0","title":"openairmaps 0.9.0","text":"CRAN release: 2024-05-19","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"breaking-changes-0-9-0","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"openairmaps 0.9.0","text":"BREAKING: polarMapStatic() family now powered ggspatial rather ggmap require API key. means ggmap argument removed provider argument added. benefits switch include greater number available base maps (see: rosm::osm.types()) ability simply change extent map axes using ggplot2::coord_sf(). (#52) BREAKING: control facet arguments deprecated favour type functions. arguments eventually removed, version openairmaps users warned away use. brings openairmaps -line openair package. BREAKING: names cols arguments buildPopup() coalesced single columns argument less verbose function usage. BREAKING: collapse.control argument renamed control.collapsed draw.legend argument legend. allow options sit nicely new argument family members - legend.title, legend.title.autotext, legend.position, .","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-9-0","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.9.0","text":"polarMapStatic() family functions combined polarMap() family, static maps available accessed using static argument. (#59) polarMapStatic() family therefore deprecated, later removed openairmaps. justification follows: combined functions allows simple, consistent API users (e.g., avoiding needing switch facet control). use static argument allows simple switching dynamic static maps. example, researcher may wish use dynamic maps data exploration, switch static map placement PDF report. Recent developments meant arguments capability functions started align regardless (e.g., provider, crs). Combining functions reduced repetition source code openairmaps, reducing likelihood oversights bugs, allowing rapid development. crs argument added polarMap() polarMapStatic() families searchNetwork(). argument allows users specify data using alternative coordinate system standard longitude/latitude (e.g., British National Grid CRS). Alternate CRS re-projected longitude/latitude plotting expected leaflet / ggspatial. (#56) Users now greater control positions legends layer control menus, titles legends, throughout openairmaps functions, including polarMap() family, trajMap() family, networkMap(). Popups dynamic polarMap() family now near top plot rather centre. obscure less plot marker visible. (#55) quickTextHTML()’s lookup table gained new pollutants units, ignores input case text consistently. Two examples use openairmaps shiny added package. Run shiny::runExample(package = \"openairmaps\") view . (#60)","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-0-9-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps 0.9.0","text":"Legends drawn polarMapStatic() function now render using recent versions ggplot2. addTrajPaths() layerId argument now implemented sensible way ensure geometry unique layerId can therefore interacted shiny context. layerId now base actual layerId built, real layerId form BASE-LN-PN LN line number PN point number. example, layerId = \"traj\", first point first line ID \"traj-1-1\", second point first line ID \"traj-1-2\", first point second line ID \"traj-2-1\", . “illegal” file path characters can now used columns provided type argument polarMap() family. relevant users allow provide custom HTML tags - e.g., formatting superscripts, subscripts, . (#63) colours legend networkMap() now better align actual colours markers, layer control menu control = \"variable\" now presented nicer order clearer labels.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-081","dir":"Changelog","previous_headings":"","what":"openairmaps 0.8.1","title":"openairmaps 0.8.1","text":"CRAN release: 2023-11-03 minor release openairmaps, released mainly fix issue ggmap also adding new functionality polar marker maps.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"breaking-changes-0-8-1","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"openairmaps 0.8.1","text":"BREAKING: arguments addPolarMarkers() rejigged move “data” “pollutant”, owing new use leaflet::getMapData(). (#45) BREAKING: default arguments polarMap()-family functions changed , e.g., NULL \"free\" \"fixed\". (#34) BREAKING: Due changes ggmap, static polar plotting functions now require users provide ggmap object. zoom argument also removed. specifically related partnership Stamen Stadia put stamen tiles behind API. See https://maps.stamen.com/stadia-partnership/ https://github.com/dkahle/ggmap/issues/353 information. (#52)","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-8-1","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.8.1","text":"Several “limit” arguments can now take one three options: “fixed” (forces markers share scales), “free” (allows use different scales), numeric vector define scales. (#34) arguments defaults include: polarMap(): upper (fixed); limits (free) annulusMap(): limits (free) freqMap(): breaks (free) percentileMap(): intervals (fixed) Added searchNetwork(), allows users find local air quality monitoring sites specifying target latitude longitude. Function arguments allow site metadata subset (example, site type, pollutants measured, distance target). Added convertPostcode(), converts valid UK postcode latitude/longitude pair. intended used searchNetwork(). “data” argument addPolarMarkers() addTrajPaths() “” “” arguments addPolarDiffMarkers() now default leaflet::getMapData(map). makes use less verbose creating multiple polar plots underlying data, likely common use-case. (#45) networkMap() popups now contain links associated network websites. example, popup London Marylebone Road networkMap(\"aurn\") now contains link https://uk-air.defra.gov.uk/networks/site-info?site_id=MY1. networks supported exception “europe”. (#39) addPolarMarkers() addPolarDiffMarkers() now “options” arguments leaflet::addMarkers(). means , example, polar markers can clustered (https://leafletjs.com/reference.html#marker). (#38) polarMap() family networkMap() provider argument can now take named vector. names used layer control menu, length(provider) > 1. (#42)","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-080","dir":"Changelog","previous_headings":"","what":"openairmaps 0.8.0","title":"openairmaps 0.8.0","text":"CRAN release: 2023-03-31 minor release adding range quality life features, adding two new experimental functions, fixing bugs.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-8-0","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.8.0","text":"trajMapStatic() trajLevelMapStatic() added two new experimental functions provide ggplot2 equivalents openair::trajPlot() openair::trajLevel(). (#28) experimental long term place functions uncertain; definitely need ggplot2 incarnation trajectory plotting functions, whether sit openair, {ggopenair} openairmaps named clear. control facet arguments polar marker mapping functions (static interactive) trajectory mapping functions now passed openair::cutData(). popup argument interactive polar marker mapping functions can now take vector column names. one column provided, automatically passed buildPopup() using default values. trajLevelMap() now control argument, maps directly onto type argument openair::trajLevel(). Like control arguments elsewhere openairmaps, creates “layer control” menu. networkMap() now uses different coloured markers different networks. one network specified, draw.legend set TRUE, legend also drawn quick identification different data sources. (#30) Deprecations now managed lifecycle package. currently applies type argument.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-0-8-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps 0.8.0","text":"Fixed issues multiple addPolarMarkers() chained together show plot. Fixed issue ... pollutant weren’t passed addPolarMarkers(). (#27) Fixed issue trajMap() caused recent updates dplyr forcats. Fixed issue polarMapStatic() others turn factor facet levels characters. Specifically, meant , example, months year alphabetical order. Now factor levels, including resulting pass cutData(), now honoured facet argument. (#31) Fixed issue polarMapStatic() others error trying draw legend.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-070","dir":"Changelog","previous_headings":"","what":"openairmaps 0.7.0","title":"openairmaps 0.7.0","text":"CRAN release: 2023-02-09 minor release containing several important new features expand scope package. also comes several minor breaking changes improve consistency within openairmaps openair.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"breaking-changes-0-7-0","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"openairmaps 0.7.0","text":"BREAKING: fig.width, fig.height, iconHeight iconWidth arguments replaced d.fig d.icon. two main justifications behind : ensures consistency across openairmaps, making easier switch static HTML map types. Polar markers almost always going circular (.e., width = height) one argument streamline things. users wish non-circular markers, vector length two form c(width, height) provide functionality. BREAKING: arguments addPolarMarkers() put sensible order, leading data, pollutant fun. BREAKING: date argument networkMap() replaced year. (#26)","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-7-0","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.7.0","text":"Added “static” equivalents polar marker maps written ggplot2. interactive HTML maps preferred, static equivalents may appropriate , e.g., academic publications. (#19) ggplot2 functions can identified “Static” appended function name. example, polarMap() leaflet polar plot map, whereas polarMapStatic() ggplot2 equivalent. Currently, “static” versions trajectory maps served openair::trajPlot() openair::trajLevel(), may space future ggmap equivalents openairmaps. Added diffMap() diffMapStatic() openair::polarDiff() polarMap() polarMapStatic() openair::polarPlot() (#17). Also added addPolarDiffMarkers(), equivalent addPolarMarkers(). (#25) Added alpha argument directional analysis polar mapping functions, just polarMap(). (#14) Fixed alpha work Windows MacOS forcing use “cairo” device save plots. (#14) Polar marker maps addPolarMarkers() now show progress bar creating markers takes seconds (commonly polarMap() annulusMap(), particularly multiple pollutants/control groups). networkMap() can now pass new year option importMeta().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-061","dir":"Changelog","previous_headings":"","what":"openairmaps 0.6.1","title":"openairmaps 0.6.1","text":"CRAN release: 2023-01-09 patch release primarily fix bugs openairmaps, implement new default colour scheme recent openair update.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-6-1","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.6.1","text":"Functions now use Google’s “turbo” colour palette rather “jet” default. palette advantages using “jet” can read https://ai.googleblog.com/2019/08/turbo-improved-rainbow-colormap-.html.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-0-6-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps 0.6.1","text":"Fixed issue polar marker maps (e.g., polarMap()) generic addPolarMarkers() function lat/lon info Southern Hemisphere misalign markers. Hat tip Deanna Tuxford James noticing issue. (#18) Fixed issue networkMap() control = \"variable\" fail show pollutants.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-060","dir":"Changelog","previous_headings":"","what":"openairmaps 0.6.0","title":"openairmaps 0.6.0","text":"CRAN release: 2022-11-28 minor release, mainly focusing enhancing ability polar markers shared colour scales, also incorporating new features network visualisation.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-6-0","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.6.0","text":"directional analysis maps can now limits provided (can “limits”, “breaks”, “percentiles”, etc., depending function). always possible ..., now explicitly listed option. (#12) limits defined directional analysis function, shared legend now drawn top-right map. functionality can disabled setting draw.legend FALSE. (#12) Added buildPopup() function, allows users easily construct HTML popups use “popup” argument directional analysis maps (leaflet maps widely). default options fig.width fig.height now 3.5 rather 4. appears remove visual artefacts makes axis labels legible. networkMap() now supports multiple sources. example, using source = c(\"aurn\", \"saqn\") show AURN SAQN one map. may useful users interested air quality specific region UK (e.g., users may wish locate AURN, AQE locally managed sites near given urban centre). (#16) networkMap() now supports source = \"local\". Multiple basemap providers can now used networkMap(). networkMap(), trajMap() polar directional analysis maps gained collapse.control argument, controls whether control menu starts collapsed . defaults FALSE, means control menu collapsed. documentation improved; function parameters consistent functions arguments passed openair via ... now explicitly listed.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-0-6-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps 0.6.0","text":"“alpha” option removed directional analysis functions except polarMap() ever worked polarMap().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-051","dir":"Changelog","previous_headings":"","what":"openairmaps 0.5.1","title":"openairmaps 0.5.1","text":"CRAN release: 2022-10-20 patch release designed fix major bug v0.5.0.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-0-5-1","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps 0.5.1","text":"Fixed issue causing markers duplicated pollutant information missing certain sites.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-050","dir":"Changelog","previous_headings":"","what":"openairmaps 0.5.0","title":"openairmaps 0.5.0","text":"CRAN release: 2022-10-19 minor release centred around addition control argument, allows arbitrary columns used “layer control” menus.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"breaking-changes-0-5-0","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"openairmaps 0.5.0","text":"functions now use latitude longitude distinguish site types. Therefore, “type” now deprecated. Maps using old system still render, popups displayed. users, restore previous site labels simply rewrite type = \"site\" popup = \"site\". (#10) default values “pollutant” removed. users relying default update code explicitly state pollutant = \"nox\".","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-5-0","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.5.0","text":"functions now possess “control” argument, allows users create “layer control” menu arbitrary column. Appropriate columns may produced using openair::cutData(), openair::splitByDate(), user-defined dplyr::case_when()/dplyr::if_else() column transformation. (#9) functions now possess “popup” “label” arguments, control pop-hover-labels, respectively. allows users define popup label column, even non-unique ones. example, multiple sites can labelled identical site types. (#10) functions now try guess latitude/longitude column provided, similar leaflet. (#10) Updated many error messages warnings use cli broadly descriptive.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-0-5-0","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps 0.5.0","text":"trajMap() can now coloured date. Fixed issue trajMap() cause user-defined colours work.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-043","dir":"Changelog","previous_headings":"","what":"openairmaps 0.4.3","title":"openairmaps 0.4.3","text":"CRAN release: 2022-09-13 patch release adding small number refinements.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"breaking-changes-0-4-3","dir":"Changelog","previous_headings":"","what":"Breaking changes","title":"openairmaps 0.4.3","text":"polar_data column names changed “latitude” “longitude” “lat” “lon” reflect defaults polarMap() family. trajMap() trajLevelMap() now use argument names “latitude” “longitude” match polarMap() family.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"new-features-0-4-3","dir":"Changelog","previous_headings":"","what":"New features","title":"openairmaps 0.4.3","text":"trajLevelMap() now contains lat.inc lon.inc arguments.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-042","dir":"Changelog","previous_headings":"","what":"openairmaps 0.4.2","title":"openairmaps 0.4.2","text":"patch release fix bug trajLevelMap().","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"bug-fixes-0-4-2","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"openairmaps 0.4.2","text":"trajLevelMap() now works statistic = \"frequency\" without “pollutant”.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"openairmaps-041","dir":"Changelog","previous_headings":"","what":"openairmaps 0.4.1","title":"openairmaps 0.4.1","text":"first CRAN release openairmaps.","code":""},{"path":"https://davidcarslaw.github.io/openairmaps/news/index.html","id":"features-0-4-1","dir":"Changelog","previous_headings":"","what":"Features","title":"openairmaps 0.4.1","text":"currently three streams functionality openairmaps: networkMap() visualises openair::importMeta() networks. polarMap() family allow openair directional analysis plots used leaflet markers. trajMap() family leaflet equivalents openair::trajPlot() openair::trajMap(). two main classes functions: *Map() functions easy--use functions create leaflet maps ground-. similar openair functions. add*() functions flexible allow users add layers existing leaflet maps. designed similar leaflet “add” functions like addMarkers().","code":""}]
Davison J, Carslaw D (2024). openairmaps: Create Maps of Air Pollution Data. -R package version 0.9.0.9005, +R package version 0.9.0.9006, https://github.com/davidcarslaw/openairmaps, https://davidcarslaw.github.io/openairmaps/.
@Manual{, title = {openairmaps: Create Maps of Air Pollution Data}, author = {Jack Davison and David Carslaw}, year = {2024}, - note = {R package version 0.9.0.9005, + note = {R package version 0.9.0.9006, https://github.com/davidcarslaw/openairmaps}, url = {https://davidcarslaw.github.io/openairmaps/}, }
openair::polarDiff()
Fixed an issue in which quickTextHTML() would incorrectly format non breaking spaces when doing, e.g., quickTextHTML("ug/m3").
quickTextHTML()
quickTextHTML("ug/m3")
The order in which trajMapStatic() draws points and paths has been tweaked, which should ensure that markers are drawn on top of their respective path, rather than on top of all paths.
trajMapStatic()
buildPopup() will now work correctly if no type is provided.
buildPopup()
type