diff --git a/.github/workflows/code-format.yaml b/.github/workflows/code-format.yaml new file mode 100644 index 0000000..37457c3 --- /dev/null +++ b/.github/workflows/code-format.yaml @@ -0,0 +1,19 @@ +# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs + +name: Code format + +on: pull_request + +jobs: + code-format: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + cache: 'npm' + - run: npm ci + - run: npm run format-check diff --git a/.prettierrc.json b/.prettierrc.json index 17a23d0..3f0896e 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,7 +1,7 @@ - { "$schema": "https://json.schemastore.org/prettierrc", "semi": false, "singleQuote": true, - "printWidth": 100 + "printWidth": 100, + "trailingComma": "es5" } diff --git a/README.md b/README.md index 852e82d..36a181b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # client -This template should help get you started developing with Vue 3 in Vite. +This is the client SPA for DomoticASW, it is deployed as a submodule inside DomoticASW's server. ## Recommended IDE Setup @@ -14,9 +14,10 @@ TypeScript cannot handle type information for `.vue` imports by default, so we r See [Vite Configuration Reference](https://vite.dev/config/). -## Project Setup +## Setup ```sh +./setup.sh npm install ``` diff --git a/hooks/pre-commit b/hooks/pre-commit new file mode 100755 index 0000000..e8bc3ed --- /dev/null +++ b/hooks/pre-commit @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. + +# Redirect output to stderr. +exec 1>&2 + +if ! npm run format-check; then + echo Run \"npm run format\" to fix + exit 1 +fi diff --git a/package.json b/package.json index 7534450..5522765 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "type-check": "vue-tsc --build", "lint": "eslint .", "lint-fix": "npm run lint --fix", - "format": "prettier --write src/" + "format": "prettier --write src/", + "format-check": "prettier --check src/" }, "dependencies": { "@tailwindcss/vite": "^4.1.11", diff --git a/src/App.vue b/src/App.vue index 6fa3bca..610a7f5 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3,19 +3,19 @@ import { RouterView } from 'vue-router' import LoadingOverlay from './components/LoadingOverlay.vue' import ErrorPresenter from './components/ErrorPresenter.vue' import SuccessPresenter from './components/SuccessPresenter.vue' +import DeviceGroupsDialog from './components/DeviceGroupsDialog.vue' diff --git a/src/api/Deserializer.ts b/src/api/Deserializer.ts index c78cc60..f1cb7d3 100644 --- a/src/api/Deserializer.ts +++ b/src/api/Deserializer.ts @@ -13,8 +13,8 @@ export type Deserializer = (json: unknown) => T export function Deserializer( checkDeserializable: (obj: unknown) => obj is From, deserialize: (obj: From) => To, - deserializationError?: (obj: unknown) => string): Deserializer { - + deserializationError?: (obj: unknown) => string +): Deserializer { return (json) => { if (checkDeserializable(json)) { return deserialize(json) @@ -29,19 +29,18 @@ export function arrayDeserializer(itemDeserializer: Deserializer): Deseria if (!Array.isArray(obj)) { throw DeserializeError(`Expecting an array but ${typeof obj} was found`) } - return obj.map(item => itemDeserializer(item)) + return obj.map((item) => itemDeserializer(item)) } } function isBoolean(o: unknown): o is boolean { - return o != undefined && typeof o == "boolean" + return o != undefined && typeof o == 'boolean' } -export const booleanDeserializer: Deserializer = - Deserializer( - isBoolean, - (obj) => obj, - (obj) => `Expecting a boolean but ${typeof obj} was found` - ) +export const booleanDeserializer: Deserializer = Deserializer( + isBoolean, + (obj) => obj, + (obj) => `Expecting a boolean but ${typeof obj} was found` +) export interface DeserializeError { message: string @@ -50,7 +49,7 @@ export interface DeserializeError { export function DeserializeError(cause?: string): DeserializeError { return { - message: "There was an error while deserializing a response from the server.", - cause + message: 'There was an error while deserializing a response from the server.', + cause, } } diff --git a/src/api/IdDTO.ts b/src/api/IdDTO.ts index f341a2d..b6c4713 100644 --- a/src/api/IdDTO.ts +++ b/src/api/IdDTO.ts @@ -1,17 +1,15 @@ -import { Deserializer } from "./Deserializer"; +import { Deserializer } from './Deserializer' export interface IdDTO { id: string } export function isIdDTO(o: unknown): o is IdDTO { - return o != undefined && typeof o == "object" && - "id" in o && typeof o.id == "string" + return o != undefined && typeof o == 'object' && 'id' in o && typeof o.id == 'string' } -export const idDeserializer = - Deserializer( - isIdDTO, - (dto) => dto.id, - (obj) => `Unable to deserialize ${obj} into a string id since it was not an IdDTO` - ) +export const idDeserializer = Deserializer( + isIdDTO, + (dto) => dto.id, + (obj) => `Unable to deserialize ${obj} into a string id since it was not an IdDTO` +) diff --git a/src/api/ServerError.ts b/src/api/ServerError.ts index 05a9f5b..2330251 100644 --- a/src/api/ServerError.ts +++ b/src/api/ServerError.ts @@ -1,4 +1,4 @@ -import { Deserializer } from "./Deserializer" +import { Deserializer } from './Deserializer' export interface ServerError { __brand: string @@ -7,9 +7,14 @@ export interface ServerError { } export function isServerError(o: unknown): o is ServerError { - return o != undefined && typeof o == "object" && - "__brand" in o && typeof o.__brand == "string" && - "message" in o && typeof o.message == "string" + return ( + o != undefined && + typeof o == 'object' && + '__brand' in o && + typeof o.__brand == 'string' && + 'message' in o && + typeof o.message == 'string' + ) } export const toServerErrorDeserializer: Deserializer = Deserializer( diff --git a/src/api/api.ts b/src/api/api.ts index 8f61d65..a762134 100644 --- a/src/api/api.ts +++ b/src/api/api.ts @@ -1,13 +1,17 @@ -import { DeserializeError, type Deserializer } from "./Deserializer" -import { toServerErrorDeserializer } from "./ServerError" +import { DeserializeError, type Deserializer } from './Deserializer' +import { toServerErrorDeserializer } from './ServerError' /** * Does the same as `request` plus setting the Authorization header to token if it is not already set. */ -export async function authorizedRequest(url: RequestInfo | URL, token: string, init?: RequestInit): Promise { +export async function authorizedRequest( + url: RequestInfo | URL, + token: string, + init?: RequestInit +): Promise { const headers = new Headers(init?.headers) // Ensuring that the type of init.headers is Headers - if (!headers.has("Authorization")) { - headers.append("Authorization", token) + if (!headers.has('Authorization')) { + headers.append('Authorization', token) } return await request(url, { ...init, headers }) } @@ -21,8 +25,8 @@ export async function authorizedRequest(url: RequestInfo | URL, token: string, i */ export async function request(url: RequestInfo | URL, init?: RequestInit): Promise { const headers = new Headers(init?.headers) // Ensuring that the type of init.headers is Headers - if (!headers.has("Content-Type")) { - headers.append("Content-Type", "application/json") + if (!headers.has('Content-Type')) { + headers.append('Content-Type', 'application/json') } const response = await fetch(url, { ...init, headers }) if (!response.ok) { @@ -41,14 +45,14 @@ export async function deserializeBody(res: Response, deserializer: Deserializ // Passing through a text representation as res.json() uses JSON.parse and will fail in case of empty body const bodyAsText = await res.text() if (bodyAsText.trim().length == 0) { - throw DeserializeError("Response body was empty") + throw DeserializeError('Response body was empty') } let body: object try { body = JSON.parse(bodyAsText) } catch (e) { - throw DeserializeError("Unable to parse json from response body.\n" + (e as Error).message) + throw DeserializeError('Unable to parse json from response body.\n' + (e as Error).message) } if (!res.ok) { diff --git a/src/api/devices-management/dtos/device-groups/DeviceGroupDTO.ts b/src/api/devices-management/dtos/device-groups/DeviceGroupDTO.ts index 10a6bb5..7a07569 100644 --- a/src/api/devices-management/dtos/device-groups/DeviceGroupDTO.ts +++ b/src/api/devices-management/dtos/device-groups/DeviceGroupDTO.ts @@ -1,6 +1,6 @@ -import { DeviceGroupId, type DeviceGroup } from "@/model/devices-management/DeviceGroup" -import { Deserializer } from "../../../Deserializer" -import { deviceDeserializer, isDeviceDTO, type DeviceDTO } from "../devices/DeviceDTO" +import { DeviceGroupId, type DeviceGroup } from '@/model/devices-management/DeviceGroup' +import { Deserializer } from '../../../Deserializer' +import { deviceDeserializer, isDeviceDTO, type DeviceDTO } from '../devices/DeviceDTO' export interface DeviceGroupDTO { id: string @@ -9,19 +9,25 @@ export interface DeviceGroupDTO { } export function isDeviceGroupDTO(o: unknown): o is DeviceGroupDTO { - return o != undefined && typeof o === "object" && - "id" in o && typeof o.id === "string" && - "name" in o && typeof o.name === "string" && - "devices" in o && Array.isArray(o.devices) && o.devices.every(isDeviceDTO) + return ( + o != undefined && + typeof o === 'object' && + 'id' in o && + typeof o.id === 'string' && + 'name' in o && + typeof o.name === 'string' && + 'devices' in o && + Array.isArray(o.devices) && + o.devices.every(isDeviceDTO) + ) } -export const deviceGroupDeserializer = - Deserializer( - isDeviceGroupDTO, - (dto) => ({ - id: DeviceGroupId(dto.id), - name: dto.name, - devices: dto.devices.map(deviceDeserializer) - }), - (obj) => `Unable to parse ${obj} into a DeviceGroup since it was not a DeviceGroupDTO` - ) +export const deviceGroupDeserializer = Deserializer( + isDeviceGroupDTO, + (dto) => ({ + id: DeviceGroupId(dto.id), + name: dto.name, + devices: dto.devices.map(deviceDeserializer), + }), + (obj) => `Unable to parse ${obj} into a DeviceGroup since it was not a DeviceGroupDTO` +) diff --git a/src/api/devices-management/dtos/devices/ColorDTO.ts b/src/api/devices-management/dtos/devices/ColorDTO.ts index 5b03e2c..9480a00 100644 --- a/src/api/devices-management/dtos/devices/ColorDTO.ts +++ b/src/api/devices-management/dtos/devices/ColorDTO.ts @@ -1,23 +1,27 @@ - -import { Color } from "@/model/devices-management/Types"; -import { Deserializer } from "../../../Deserializer"; +import { Color } from '@/model/devices-management/Types' +import { Deserializer } from '../../../Deserializer' export interface ColorDTO { - readonly r: number; - readonly g: number; - readonly b: number; + readonly r: number + readonly g: number + readonly b: number } export function isColorDTO(o: unknown): o is ColorDTO { - return o != undefined && typeof o == "object" && - "r" in o && typeof o.r == "number" && - "g" in o && typeof o.g == "number" && - "b" in o && typeof o.b == "number" + return ( + o != undefined && + typeof o == 'object' && + 'r' in o && + typeof o.r == 'number' && + 'g' in o && + typeof o.g == 'number' && + 'b' in o && + typeof o.b == 'number' + ) } -export const colorDeserializer = - Deserializer( - isColorDTO, - (dto) => Color(dto.r, dto.g, dto.b), - (obj) => `Unable to deserialize ${obj} into a Color since it was not a ColorDTO` - ) +export const colorDeserializer = Deserializer( + isColorDTO, + (dto) => Color(dto.r, dto.g, dto.b), + (obj) => `Unable to deserialize ${obj} into a Color since it was not a ColorDTO` +) diff --git a/src/api/devices-management/dtos/devices/DeviceActionDTO.ts b/src/api/devices-management/dtos/devices/DeviceActionDTO.ts index 0c17608..0c85b40 100644 --- a/src/api/devices-management/dtos/devices/DeviceActionDTO.ts +++ b/src/api/devices-management/dtos/devices/DeviceActionDTO.ts @@ -1,6 +1,10 @@ -import { DeviceActionId, type DeviceAction } from "@/model/devices-management/Device" -import { Deserializer } from "../../../Deserializer" -import { isTypeConstraintsDTO, typeConstraintsDeserializer, type TypeConstraintsDTO } from "./TypeConstraintsDTO" +import { DeviceActionId, type DeviceAction } from '@/model/devices-management/Device' +import { Deserializer } from '../../../Deserializer' +import { + isTypeConstraintsDTO, + typeConstraintsDeserializer, + type TypeConstraintsDTO, +} from './TypeConstraintsDTO' export interface DeviceActionDTO { readonly id: string @@ -10,22 +14,26 @@ export interface DeviceActionDTO { } export function isDeviceActionDTO(o: unknown): o is DeviceActionDTO { - return o != undefined && typeof o == "object" && - "id" in o && typeof o.id == "string" && - "name" in o && typeof o.name == "string" && - ("description" in o ? typeof o.description == "string" : true) && - "inputTypeConstraints" in o && isTypeConstraintsDTO(o.inputTypeConstraints) + return ( + o != undefined && + typeof o == 'object' && + 'id' in o && + typeof o.id == 'string' && + 'name' in o && + typeof o.name == 'string' && + ('description' in o ? typeof o.description == 'string' : true) && + 'inputTypeConstraints' in o && + isTypeConstraintsDTO(o.inputTypeConstraints) + ) } - -export const deviceActionDeserializer = - Deserializer>( - isDeviceActionDTO, - (dto) => ({ - id: DeviceActionId(dto.id), - name: dto.name, - description: dto.description, - inputTypeConstraints: typeConstraintsDeserializer(dto.inputTypeConstraints) - }), - (obj) => `Unable to deserialize ${obj} into a DeviceAction since it was not a DeviceActionDTO` - ) +export const deviceActionDeserializer = Deserializer>( + isDeviceActionDTO, + (dto) => ({ + id: DeviceActionId(dto.id), + name: dto.name, + description: dto.description, + inputTypeConstraints: typeConstraintsDeserializer(dto.inputTypeConstraints), + }), + (obj) => `Unable to deserialize ${obj} into a DeviceAction since it was not a DeviceActionDTO` +) diff --git a/src/api/devices-management/dtos/devices/DeviceAddressDTO.ts b/src/api/devices-management/dtos/devices/DeviceAddressDTO.ts index 7af6884..d818988 100644 --- a/src/api/devices-management/dtos/devices/DeviceAddressDTO.ts +++ b/src/api/devices-management/dtos/devices/DeviceAddressDTO.ts @@ -1,23 +1,27 @@ -import type { DeviceAddress } from "@/model/devices-management/Device"; -import { Deserializer } from "../../../Deserializer"; +import type { DeviceAddress } from '@/model/devices-management/Device' +import { Deserializer } from '../../../Deserializer' export interface DeviceAddressDTO { - host: string; - port: number; + host: string + port: number } export function isDeviceAddressDTO(o: unknown): o is DeviceAddressDTO { - return o != undefined && typeof o == "object" && - "host" in o && typeof o.host == "string" && - "port" in o && typeof o.port == "number" + return ( + o != undefined && + typeof o == 'object' && + 'host' in o && + typeof o.host == 'string' && + 'port' in o && + typeof o.port == 'number' + ) } -export const deviceAddressDeserializer = - Deserializer( - isDeviceAddressDTO, - (dto) => ({ - host: dto.host, - port: dto.port - }), - (obj) => `Unable to deserialize ${obj} into a DeviceAddress since it was not a DeviceAddressDTO` - ) +export const deviceAddressDeserializer = Deserializer( + isDeviceAddressDTO, + (dto) => ({ + host: dto.host, + port: dto.port, + }), + (obj) => `Unable to deserialize ${obj} into a DeviceAddress since it was not a DeviceAddressDTO` +) diff --git a/src/api/devices-management/dtos/devices/DeviceDTO.ts b/src/api/devices-management/dtos/devices/DeviceDTO.ts index dd80c12..e287fb8 100644 --- a/src/api/devices-management/dtos/devices/DeviceDTO.ts +++ b/src/api/devices-management/dtos/devices/DeviceDTO.ts @@ -1,10 +1,26 @@ -import { DeviceId, type Device } from "@/model/devices-management/Device" -import { arrayDeserializer, Deserializer } from "../../../Deserializer" -import { deviceAddressDeserializer, isDeviceAddressDTO, type DeviceAddressDTO } from "./DeviceAddressDTO" -import { deviceStatusDeserializer, isDeviceStatusDTO, type DeviceStatusDTO } from "./DeviceStatusDTO" -import { deviceEventDeserializer, isDeviceEventDTO, type DeviceEventDTO } from "./DeviceEventDTO" -import { deviceActionDeserializer, isDeviceActionDTO, type DeviceActionDTO } from "./DeviceActionDTO" -import { devicePropertyDeserializer, isDevicePropertyDTO, type DevicePropertyDTO } from "./DevicePropertyDTO" +import { DeviceId, type Device } from '@/model/devices-management/Device' +import { arrayDeserializer, Deserializer } from '../../../Deserializer' +import { + deviceAddressDeserializer, + isDeviceAddressDTO, + type DeviceAddressDTO, +} from './DeviceAddressDTO' +import { + deviceStatusDeserializer, + isDeviceStatusDTO, + type DeviceStatusDTO, +} from './DeviceStatusDTO' +import { deviceEventDeserializer, isDeviceEventDTO, type DeviceEventDTO } from './DeviceEventDTO' +import { + deviceActionDeserializer, + isDeviceActionDTO, + type DeviceActionDTO, +} from './DeviceActionDTO' +import { + devicePropertyDeserializer, + isDevicePropertyDTO, + type DevicePropertyDTO, +} from './DevicePropertyDTO' export interface DeviceDTO { readonly id: string @@ -17,28 +33,39 @@ export interface DeviceDTO { } export function isDeviceDTO(o: unknown): o is DeviceDTO { - return o != undefined && typeof o == "object" && - "id" in o && typeof o.id == "string" && - "name" in o && typeof o.name == "string" && - "address" in o && isDeviceAddressDTO(o.address) && - "status" in o && isDeviceStatusDTO(o.status) && - "properties" in o && Array.isArray(o.properties) && o.properties.every(p => isDevicePropertyDTO(p)) && - "actions" in o && Array.isArray(o.actions) && o.actions.every(a => isDeviceActionDTO(a)) && - "events" in o && Array.isArray(o.events) && o.events.every(e => isDeviceEventDTO(e)) + return ( + o != undefined && + typeof o == 'object' && + 'id' in o && + typeof o.id == 'string' && + 'name' in o && + typeof o.name == 'string' && + 'address' in o && + isDeviceAddressDTO(o.address) && + 'status' in o && + isDeviceStatusDTO(o.status) && + 'properties' in o && + Array.isArray(o.properties) && + o.properties.every((p) => isDevicePropertyDTO(p)) && + 'actions' in o && + Array.isArray(o.actions) && + o.actions.every((a) => isDeviceActionDTO(a)) && + 'events' in o && + Array.isArray(o.events) && + o.events.every((e) => isDeviceEventDTO(e)) + ) } - -export const deviceDeserializer = - Deserializer( - isDeviceDTO, - (dto) => ({ - id: DeviceId(dto.id), - name: dto.name, - address: deviceAddressDeserializer(dto.address), - status: deviceStatusDeserializer(dto.status), - properties: arrayDeserializer(devicePropertyDeserializer)(dto.properties), - actions: arrayDeserializer(deviceActionDeserializer)(dto.actions), - events: arrayDeserializer(deviceEventDeserializer)(dto.events) - }), - (obj) => `Unable to deserialize ${obj} into a Device since it was not a DeviceDTO` - ) +export const deviceDeserializer = Deserializer( + isDeviceDTO, + (dto) => ({ + id: DeviceId(dto.id), + name: dto.name, + address: deviceAddressDeserializer(dto.address), + status: deviceStatusDeserializer(dto.status), + properties: arrayDeserializer(devicePropertyDeserializer)(dto.properties), + actions: arrayDeserializer(deviceActionDeserializer)(dto.actions), + events: arrayDeserializer(deviceEventDeserializer)(dto.events), + }), + (obj) => `Unable to deserialize ${obj} into a Device since it was not a DeviceDTO` +) diff --git a/src/api/devices-management/dtos/devices/DeviceEventDTO.ts b/src/api/devices-management/dtos/devices/DeviceEventDTO.ts index 2666f93..6dc1114 100644 --- a/src/api/devices-management/dtos/devices/DeviceEventDTO.ts +++ b/src/api/devices-management/dtos/devices/DeviceEventDTO.ts @@ -1,18 +1,16 @@ -import type { DeviceEvent } from "@/model/devices-management/Device"; -import { Deserializer } from "../../../Deserializer"; +import type { DeviceEvent } from '@/model/devices-management/Device' +import { Deserializer } from '../../../Deserializer' export interface DeviceEventDTO { - readonly name: string; + readonly name: string } export function isDeviceEventDTO(o: unknown): o is DeviceEventDTO { - return o != undefined && typeof o == "object" && - "name" in o && typeof o.name == "string" + return o != undefined && typeof o == 'object' && 'name' in o && typeof o.name == 'string' } -export const deviceEventDeserializer = - Deserializer( - isDeviceEventDTO, - (dto) => ({ name: dto.name }), - (obj) => `Unable to deserialize ${obj} into a DeviceEvent since it was not a DeviceEventDTO` - ) +export const deviceEventDeserializer = Deserializer( + isDeviceEventDTO, + (dto) => ({ name: dto.name }), + (obj) => `Unable to deserialize ${obj} into a DeviceEvent since it was not a DeviceEventDTO` +) diff --git a/src/api/devices-management/dtos/devices/DevicePropertyDTO.ts b/src/api/devices-management/dtos/devices/DevicePropertyDTO.ts index 133192d..748268f 100644 --- a/src/api/devices-management/dtos/devices/DevicePropertyDTO.ts +++ b/src/api/devices-management/dtos/devices/DevicePropertyDTO.ts @@ -1,8 +1,16 @@ -import { DevicePropertyId, type DeviceProperty } from "@/model/devices-management/Device" -import { Deserializer } from "../../../Deserializer" -import { isTypeConstraintsDTO, typeConstraintsDeserializer, type TypeConstraintsDTO } from "./TypeConstraintsDTO" -import { deviceActionDeserializer, isDeviceActionDTO, type DeviceActionDTO } from "./DeviceActionDTO" -import { colorDeserializer, isColorDTO } from "./ColorDTO" +import { DevicePropertyId, type DeviceProperty } from '@/model/devices-management/Device' +import { Deserializer } from '../../../Deserializer' +import { + isTypeConstraintsDTO, + typeConstraintsDeserializer, + type TypeConstraintsDTO, +} from './TypeConstraintsDTO' +import { + deviceActionDeserializer, + isDeviceActionDTO, + type DeviceActionDTO, +} from './DeviceActionDTO' +import { colorDeserializer, isColorDTO } from './ColorDTO' export interface DevicePropertyDTO { readonly id: string @@ -13,32 +21,36 @@ export interface DevicePropertyDTO { } export function isDevicePropertyDTO(o: unknown): o is DevicePropertyDTO { - return o != undefined && typeof o == "object" && - "id" in o && typeof o.id == "string" && - "name" in o && typeof o.name == "string" && - "value" in o && - (("setter" in o && o.setter != undefined) ? isDeviceActionDTO(o.setter) : true) && - "typeConstraints" in o && isTypeConstraintsDTO(o.typeConstraints) + return ( + o != undefined && + typeof o == 'object' && + 'id' in o && + typeof o.id == 'string' && + 'name' in o && + typeof o.name == 'string' && + 'value' in o && + ('setter' in o && o.setter != undefined ? isDeviceActionDTO(o.setter) : true) && + 'typeConstraints' in o && + isTypeConstraintsDTO(o.typeConstraints) + ) } - -export const devicePropertyDeserializer = - Deserializer>( - isDevicePropertyDTO, - (dto) => { - let value: unknown - if (isColorDTO(dto.value)) { - value = colorDeserializer(dto.value) - } else { - value = dto.value - } - return { - id: DevicePropertyId(dto.id), - name: dto.name, - value: value, - setter: dto.setter ? deviceActionDeserializer(dto.setter) : undefined, - typeConstraints: typeConstraintsDeserializer(dto.typeConstraints) - } - }, - (obj) => `Unable to deserialize ${obj} into a DeviceProperty since it was not a DevicePropertyDTO` - ) +export const devicePropertyDeserializer = Deserializer>( + isDevicePropertyDTO, + (dto) => { + let value: unknown + if (isColorDTO(dto.value)) { + value = colorDeserializer(dto.value) + } else { + value = dto.value + } + return { + id: DevicePropertyId(dto.id), + name: dto.name, + value: value, + setter: dto.setter ? deviceActionDeserializer(dto.setter) : undefined, + typeConstraints: typeConstraintsDeserializer(dto.typeConstraints), + } + }, + (obj) => `Unable to deserialize ${obj} into a DeviceProperty since it was not a DevicePropertyDTO` +) diff --git a/src/api/devices-management/dtos/devices/DeviceStatusDTO.ts b/src/api/devices-management/dtos/devices/DeviceStatusDTO.ts index d826b90..97fe5bb 100644 --- a/src/api/devices-management/dtos/devices/DeviceStatusDTO.ts +++ b/src/api/devices-management/dtos/devices/DeviceStatusDTO.ts @@ -1,16 +1,18 @@ -import { DeviceStatus } from "@/model/devices-management/Device"; -import { Deserializer } from "../../../Deserializer"; +import { DeviceStatus } from '@/model/devices-management/Device' +import { Deserializer } from '../../../Deserializer' export type DeviceStatusDTO = string export function isDeviceStatusDTO(o: unknown): o is DeviceStatusDTO { - return o != undefined && typeof o == "string" && + return ( + o != undefined && + typeof o == 'string' && Object.values(DeviceStatus).includes(o as DeviceStatus) + ) } -export const deviceStatusDeserializer = - Deserializer( - isDeviceStatusDTO, - (dto) => (dto as DeviceStatus), - (obj) => `Unable to deserialize ${obj} into a DeviceStatus since it was not a DeviceStatusDTO` - ) +export const deviceStatusDeserializer = Deserializer( + isDeviceStatusDTO, + (dto) => dto as DeviceStatus, + (obj) => `Unable to deserialize ${obj} into a DeviceStatus since it was not a DeviceStatusDTO` +) diff --git a/src/api/devices-management/dtos/devices/DiscoveredDeviceDTO.ts b/src/api/devices-management/dtos/devices/DiscoveredDeviceDTO.ts index 43a9b35..8ecdc60 100644 --- a/src/api/devices-management/dtos/devices/DiscoveredDeviceDTO.ts +++ b/src/api/devices-management/dtos/devices/DiscoveredDeviceDTO.ts @@ -1,6 +1,13 @@ -import { Deserializer } from "../../../Deserializer" -import { deviceAddressDeserializer, isDeviceAddressDTO, type DeviceAddressDTO } from "./DeviceAddressDTO" -import { DiscoveredDeviceId, type DiscoveredDevice } from "@/model/devices-management/DiscoveredDevice" +import { Deserializer } from '../../../Deserializer' +import { + deviceAddressDeserializer, + isDeviceAddressDTO, + type DeviceAddressDTO, +} from './DeviceAddressDTO' +import { + DiscoveredDeviceId, + type DiscoveredDevice, +} from '@/model/devices-management/DiscoveredDevice' export interface DiscoveredDeviceDTO { id: string @@ -9,19 +16,25 @@ export interface DiscoveredDeviceDTO { } export function isDiscoveredDeviceDTO(o: unknown): o is DiscoveredDeviceDTO { - return o != undefined && typeof o == "object" && - "id" in o && typeof o.id == "string" && - "name" in o && typeof o.name == "string" && - "address" in o && isDeviceAddressDTO(o.address) + return ( + o != undefined && + typeof o == 'object' && + 'id' in o && + typeof o.id == 'string' && + 'name' in o && + typeof o.name == 'string' && + 'address' in o && + isDeviceAddressDTO(o.address) + ) } -export const discoveredDeviceDeserializer = - Deserializer( - isDiscoveredDeviceDTO, - (dto) => ({ - id: DiscoveredDeviceId(dto.id), - name: dto.name, - address: deviceAddressDeserializer(dto.address) - }), - (obj) => `Unable to deserialize ${obj} into a DiscoveredDevice since it was not a DiscoveredDeviceDTO` - ) +export const discoveredDeviceDeserializer = Deserializer( + isDiscoveredDeviceDTO, + (dto) => ({ + id: DiscoveredDeviceId(dto.id), + name: dto.name, + address: deviceAddressDeserializer(dto.address), + }), + (obj) => + `Unable to deserialize ${obj} into a DiscoveredDevice since it was not a DiscoveredDeviceDTO` +) diff --git a/src/api/devices-management/dtos/devices/RegisterDeviceDTO.ts b/src/api/devices-management/dtos/devices/RegisterDeviceDTO.ts index 1a0719d..5a3819d 100644 --- a/src/api/devices-management/dtos/devices/RegisterDeviceDTO.ts +++ b/src/api/devices-management/dtos/devices/RegisterDeviceDTO.ts @@ -1,6 +1,6 @@ export interface RegisterDeviceDTO { deviceAddress: { - host: string, + host: string port: number } } diff --git a/src/api/devices-management/dtos/devices/TypeConstraintsDTO.ts b/src/api/devices-management/dtos/devices/TypeConstraintsDTO.ts index be4ea2b..3de8e7c 100644 --- a/src/api/devices-management/dtos/devices/TypeConstraintsDTO.ts +++ b/src/api/devices-management/dtos/devices/TypeConstraintsDTO.ts @@ -1,83 +1,143 @@ -import { DeserializeError, Deserializer } from "../../../Deserializer"; -import { DoubleRange, Enum, IntRange, NoneBoolean, NoneColor, NoneDouble, NoneInt, NoneString, NoneVoid, type TypeConstraints } from "@/model/devices-management/Types"; -import { TypeDTO } from "./TypeDTO"; +import { DeserializeError, Deserializer } from '../../../Deserializer' +import { + DoubleRange, + Enum, + IntRange, + NoneBoolean, + NoneColor, + NoneDouble, + NoneInt, + NoneString, + NoneVoid, + type TypeConstraints, +} from '@/model/devices-management/Types' +import { TypeDTO } from './TypeDTO' export type TypeConstraintsDTO = EnumDTO | IntRangeDTO | DoubleRangeDTO | NoneDTO export interface EnumDTO { - readonly __brand: "Enum" + readonly __brand: 'Enum' readonly type: TypeDTO.StringType readonly values: string[] } export interface IntRangeDTO { - readonly __brand: "IntRange" + readonly __brand: 'IntRange' readonly type: TypeDTO.IntType readonly min: number readonly max: number } export interface DoubleRangeDTO { - readonly __brand: "DoubleRange" + readonly __brand: 'DoubleRange' readonly type: TypeDTO.DoubleType readonly min: number readonly max: number } export interface NoneDTO { - readonly __brand: "None" + readonly __brand: 'None' readonly type: TypeDTO } export function isTypeConstraintsDTO(o: unknown): o is TypeConstraintsDTO { - return isEnumTypeConstraintsDTO(o) || + return ( + isEnumTypeConstraintsDTO(o) || isIntRangeTypeConstraintsDTO(o) || isDoubleRangeTypeConstraintsDTO(o) || isNoneTypeConstraintsDTO(o) + ) } function isEnumTypeConstraintsDTO(o: unknown): o is EnumDTO { - return o != undefined && typeof o == "object" && - "__brand" in o && typeof o.__brand == "string" && o.__brand == "Enum" && - "type" in o && typeof o.type == "string" && o.type == TypeDTO.StringType && - "values" in o && Array.isArray(o.values) && o.values.every(v => typeof v == "string") + return ( + o != undefined && + typeof o == 'object' && + '__brand' in o && + typeof o.__brand == 'string' && + o.__brand == 'Enum' && + 'type' in o && + typeof o.type == 'string' && + o.type == TypeDTO.StringType && + 'values' in o && + Array.isArray(o.values) && + o.values.every((v) => typeof v == 'string') + ) } function isIntRangeTypeConstraintsDTO(o: unknown): o is IntRangeDTO { - return o != undefined && typeof o == "object" && - "__brand" in o && typeof o.__brand == "string" && o.__brand == "IntRange" && - "type" in o && typeof o.type == "string" && o.type == TypeDTO.IntType && - "min" in o && typeof o.min == "number" && - "max" in o && typeof o.max == "number" + return ( + o != undefined && + typeof o == 'object' && + '__brand' in o && + typeof o.__brand == 'string' && + o.__brand == 'IntRange' && + 'type' in o && + typeof o.type == 'string' && + o.type == TypeDTO.IntType && + 'min' in o && + typeof o.min == 'number' && + 'max' in o && + typeof o.max == 'number' + ) } function isDoubleRangeTypeConstraintsDTO(o: unknown): o is DoubleRangeDTO { - return o != undefined && typeof o == "object" && - "__brand" in o && typeof o.__brand == "string" && o.__brand == "DoubleRange" && - "type" in o && typeof o.type == "string" && o.type == TypeDTO.DoubleType && - "min" in o && typeof o.min == "number" && - "max" in o && typeof o.max == "number" + return ( + o != undefined && + typeof o == 'object' && + '__brand' in o && + typeof o.__brand == 'string' && + o.__brand == 'DoubleRange' && + 'type' in o && + typeof o.type == 'string' && + o.type == TypeDTO.DoubleType && + 'min' in o && + typeof o.min == 'number' && + 'max' in o && + typeof o.max == 'number' + ) } function isNoneTypeConstraintsDTO(o: unknown): o is NoneDTO { - return o != undefined && typeof o == "object" && - "__brand" in o && typeof o.__brand == "string" && o.__brand == "None" && - "type" in o && typeof o.type == "string" && Object.values(TypeDTO).some(t => t == o.type) + return ( + o != undefined && + typeof o == 'object' && + '__brand' in o && + typeof o.__brand == 'string' && + o.__brand == 'None' && + 'type' in o && + typeof o.type == 'string' && + Object.values(TypeDTO).some((t) => t == o.type) + ) } - -export const typeConstraintsDeserializer = - Deserializer>( - isTypeConstraintsDTO, - (dto) => { - if (isIntRangeTypeConstraintsDTO(dto)) { return IntRange(dto.min, dto.max) } - else if (isDoubleRangeTypeConstraintsDTO(dto)) { return DoubleRange(dto.min, dto.max) } - else if (isEnumTypeConstraintsDTO(dto)) { return Enum(new Set(dto.values)) } - else if (isNoneTypeConstraintsDTO(dto)) { - switch (dto.type) { - case TypeDTO.BooleanType: return NoneBoolean() - case TypeDTO.IntType: return NoneInt() - case TypeDTO.DoubleType: return NoneDouble() - case TypeDTO.StringType: return NoneString() - case TypeDTO.ColorType: return NoneColor() - case TypeDTO.VoidType: return NoneVoid() - } - } else { - throw DeserializeError("It was not possible to serialize a TypeConstraintsDTO into any of [IntRangeDTO, DoubleRangeDTO, EnumDTO, NoneDTO]") +export const typeConstraintsDeserializer = Deserializer< + TypeConstraintsDTO, + TypeConstraints +>( + isTypeConstraintsDTO, + (dto) => { + if (isIntRangeTypeConstraintsDTO(dto)) { + return IntRange(dto.min, dto.max) + } else if (isDoubleRangeTypeConstraintsDTO(dto)) { + return DoubleRange(dto.min, dto.max) + } else if (isEnumTypeConstraintsDTO(dto)) { + return Enum(new Set(dto.values)) + } else if (isNoneTypeConstraintsDTO(dto)) { + switch (dto.type) { + case TypeDTO.BooleanType: + return NoneBoolean() + case TypeDTO.IntType: + return NoneInt() + case TypeDTO.DoubleType: + return NoneDouble() + case TypeDTO.StringType: + return NoneString() + case TypeDTO.ColorType: + return NoneColor() + case TypeDTO.VoidType: + return NoneVoid() } - }, - (obj) => `Unable to deserialize ${obj} into a TypeConstraints since it was not a TypeConstraintsDTO` - ) + } else { + throw DeserializeError( + 'It was not possible to serialize a TypeConstraintsDTO into any of [IntRangeDTO, DoubleRangeDTO, EnumDTO, NoneDTO]' + ) + } + }, + (obj) => + `Unable to deserialize ${obj} into a TypeConstraints since it was not a TypeConstraintsDTO` +) diff --git a/src/api/devices-management/dtos/devices/TypeDTO.ts b/src/api/devices-management/dtos/devices/TypeDTO.ts index aa09425..be61237 100644 --- a/src/api/devices-management/dtos/devices/TypeDTO.ts +++ b/src/api/devices-management/dtos/devices/TypeDTO.ts @@ -1,32 +1,36 @@ -import { Deserializer } from "../../../Deserializer"; -import { Type } from "@/model/Type"; +import { Deserializer } from '../../../Deserializer' +import { Type } from '@/model/Type' export enum TypeDTO { - IntType = "IntType", - DoubleType = "DoubleType", - BooleanType = "BooleanType", - ColorType = "ColorType", - StringType = "StringType", - VoidType = "VoidType" + IntType = 'IntType', + DoubleType = 'DoubleType', + BooleanType = 'BooleanType', + ColorType = 'ColorType', + StringType = 'StringType', + VoidType = 'VoidType', } export function isTypeDTO(o: unknown): o is TypeDTO { - return o != undefined && typeof o == "string" && - Object.values(TypeDTO).includes(o as TypeDTO) + return o != undefined && typeof o == 'string' && Object.values(TypeDTO).includes(o as TypeDTO) } -export const typeDeserializer = - Deserializer( - isTypeDTO, - (dto) => { - switch (dto) { - case TypeDTO.IntType: return Type.IntType - case TypeDTO.DoubleType: return Type.DoubleType - case TypeDTO.BooleanType: return Type.BooleanType - case TypeDTO.ColorType: return Type.ColorType - case TypeDTO.StringType: return Type.StringType - case TypeDTO.VoidType: return Type.VoidType - } - }, - (obj) => `Unable to deserialize ${obj} into a Type since it was not a TypeDTO` - ) +export const typeDeserializer = Deserializer( + isTypeDTO, + (dto) => { + switch (dto) { + case TypeDTO.IntType: + return Type.IntType + case TypeDTO.DoubleType: + return Type.DoubleType + case TypeDTO.BooleanType: + return Type.BooleanType + case TypeDTO.ColorType: + return Type.ColorType + case TypeDTO.StringType: + return Type.StringType + case TypeDTO.VoidType: + return Type.VoidType + } + }, + (obj) => `Unable to deserialize ${obj} into a Type since it was not a TypeDTO` +) diff --git a/src/api/devices-management/requests/device-groups.ts b/src/api/devices-management/requests/device-groups.ts index 69029a1..a0e6b70 100644 --- a/src/api/devices-management/requests/device-groups.ts +++ b/src/api/devices-management/requests/device-groups.ts @@ -1,12 +1,12 @@ -import { authorizedRequest, deserializeBody } from "@/api/api" -import { arrayDeserializer } from "@/api/Deserializer" -import { DeviceGroupId, type DeviceGroup } from "@/model/devices-management/DeviceGroup" -import { deviceGroupDeserializer } from "../dtos/device-groups/DeviceGroupDTO" -import { idDeserializer } from "../../IdDTO" -import type { DeviceId } from "@/model/devices-management/Device" -import type { RenameDeviceGroupDTO } from "../dtos/device-groups/RenameDeviceGroupDTO" -import type { CreateDeviceGroupDTO } from "../dtos/device-groups/CreateDeviceGroupDTO" -import type { AddDeviceToDeviceGroupDTO } from "../dtos/device-groups/AddDeviceToDeviceGroupDTO" +import { authorizedRequest, deserializeBody } from '@/api/api' +import { arrayDeserializer } from '@/api/Deserializer' +import { DeviceGroupId, type DeviceGroup } from '@/model/devices-management/DeviceGroup' +import { deviceGroupDeserializer } from '../dtos/device-groups/DeviceGroupDTO' +import { idDeserializer } from '../../IdDTO' +import type { DeviceId } from '@/model/devices-management/Device' +import type { RenameDeviceGroupDTO } from '../dtos/device-groups/RenameDeviceGroupDTO' +import type { CreateDeviceGroupDTO } from '../dtos/device-groups/CreateDeviceGroupDTO' +import type { AddDeviceToDeviceGroupDTO } from '../dtos/device-groups/AddDeviceToDeviceGroupDTO' export async function createDeviceGroup(name: string, token: string): Promise { const body: CreateDeviceGroupDTO = { name } @@ -18,7 +18,11 @@ export async function createDeviceGroup(name: string, token: string): Promise { +export async function renameDeviceGroup( + id: DeviceGroupId, + newName: string, + token: string +): Promise { const body: RenameDeviceGroupDTO = { name: newName } await authorizedRequest(`/api/deviceGroups/${id}`, token, { method: 'POST', @@ -30,7 +34,11 @@ export async function deleteDeviceGroup(id: DeviceGroupId, token: string): Promi await authorizedRequest(`/api/deviceGroups/${id}`, token, { method: 'DELETE' }) } -export async function addDeviceToDeviceGroup(groupId: DeviceGroupId, deviceId: DeviceId, token: string): Promise { +export async function addDeviceToDeviceGroup( + groupId: DeviceGroupId, + deviceId: DeviceId, + token: string +): Promise { const body: AddDeviceToDeviceGroupDTO = { deviceId } await authorizedRequest(`/api/deviceGroups/${groupId}/device`, token, { method: 'POST', @@ -38,7 +46,11 @@ export async function addDeviceToDeviceGroup(groupId: DeviceGroupId, deviceId: D }) } -export async function removeDeviceFromDeviceGroup(groupId: DeviceGroupId, deviceId: DeviceId, token: string): Promise { +export async function removeDeviceFromDeviceGroup( + groupId: DeviceGroupId, + deviceId: DeviceId, + token: string +): Promise { await authorizedRequest(`/api/deviceGroups/${groupId}/device/${deviceId}`, token, { method: 'DELETE', }) diff --git a/src/api/devices-management/requests/devices.ts b/src/api/devices-management/requests/devices.ts index d89492a..c6e11e8 100644 --- a/src/api/devices-management/requests/devices.ts +++ b/src/api/devices-management/requests/devices.ts @@ -1,12 +1,17 @@ -import { authorizedRequest, deserializeBody } from "@/api/api" -import { deviceDeserializer } from "../dtos/devices/DeviceDTO" -import { discoveredDeviceDeserializer } from "../dtos/devices/DiscoveredDeviceDTO" -import { arrayDeserializer } from "@/api/Deserializer" -import type { Device, DeviceActionId, DeviceAddress, DeviceId } from "@/model/devices-management/Device" -import type { DiscoveredDevice } from "@/model/devices-management/DiscoveredDevice" -import type { RenameDeviceDTO } from "../dtos/devices/RenameDeviceDTO" -import type { RegisterDeviceDTO } from "../dtos/devices/RegisterDeviceDTO" -import type { ExecuteDeviceActionDTO } from "../dtos/devices/ExecuteDeviceActionDTO" +import { authorizedRequest, deserializeBody } from '@/api/api' +import { deviceDeserializer } from '../dtos/devices/DeviceDTO' +import { discoveredDeviceDeserializer } from '../dtos/devices/DiscoveredDeviceDTO' +import { arrayDeserializer } from '@/api/Deserializer' +import type { + Device, + DeviceActionId, + DeviceAddress, + DeviceId, +} from '@/model/devices-management/Device' +import type { DiscoveredDevice } from '@/model/devices-management/DiscoveredDevice' +import type { RenameDeviceDTO } from '../dtos/devices/RenameDeviceDTO' +import type { RegisterDeviceDTO } from '../dtos/devices/RegisterDeviceDTO' +import type { ExecuteDeviceActionDTO } from '../dtos/devices/ExecuteDeviceActionDTO' export async function renameDevice(id: DeviceId, newName: string, token: string): Promise { const body: RenameDeviceDTO = { name: newName } @@ -43,7 +48,12 @@ export async function getAllDiscoveredDevices(token: string): Promise { +export async function executeAction( + deviceId: DeviceId, + actionId: DeviceActionId, + input: unknown | undefined, + token: string +): Promise { const body: ExecuteDeviceActionDTO = { input } await authorizedRequest(`/api/devices/${deviceId}/actions/${actionId}/execute`, token, { method: 'POST', diff --git a/src/api/notifications-management/dtos/NotificationDTO.ts b/src/api/notifications-management/dtos/NotificationDTO.ts index 0309bcd..a1f56e9 100644 --- a/src/api/notifications-management/dtos/NotificationDTO.ts +++ b/src/api/notifications-management/dtos/NotificationDTO.ts @@ -1,18 +1,16 @@ -import { Deserializer } from "@/api/Deserializer" -import type { Notification } from "@/model/notifications-management/Notification" +import { Deserializer } from '@/api/Deserializer' +import type { Notification } from '@/model/notifications-management/Notification' export interface NotificationDTO { readonly message: string } export function isNotificationDTO(o: unknown): o is NotificationDTO { - return o != undefined && typeof o == "object" && - "message" in o && typeof o.message == "string" + return o != undefined && typeof o == 'object' && 'message' in o && typeof o.message == 'string' } -export const notificationDeserializer = - Deserializer( - isNotificationDTO, - (dto) => ({ message: dto.message }), - (obj) => `Unable to deserialize ${obj} into a Notification since it was not a NotificationDTO` - ) +export const notificationDeserializer = Deserializer( + isNotificationDTO, + (dto) => ({ message: dto.message }), + (obj) => `Unable to deserialize ${obj} into a Notification since it was not a NotificationDTO` +) diff --git a/src/api/notifications-management/dtos/SubscribeForDeviceOfflineNotificationsDTO.ts b/src/api/notifications-management/dtos/SubscribeForDeviceOfflineNotificationsDTO.ts index d1fe8b2..3a4be9b 100644 --- a/src/api/notifications-management/dtos/SubscribeForDeviceOfflineNotificationsDTO.ts +++ b/src/api/notifications-management/dtos/SubscribeForDeviceOfflineNotificationsDTO.ts @@ -1,4 +1,3 @@ - export interface SubscribeForDeviceOfflineNotificationsDTO { deviceId: string } diff --git a/src/api/notifications-management/requests.ts b/src/api/notifications-management/requests.ts index 70b130c..8bc5c08 100644 --- a/src/api/notifications-management/requests.ts +++ b/src/api/notifications-management/requests.ts @@ -1,12 +1,15 @@ -import type { DeviceId } from "@/model/devices-management/Device" -import type { Notification } from "@/model/notifications-management/Notification" -import { authorizedRequest, deserializeBody } from "../api" -import type { SubscribeForDeviceOfflineNotificationsDTO } from "./dtos/SubscribeForDeviceOfflineNotificationsDTO" -import { notificationDeserializer, type NotificationDTO } from "./dtos/NotificationDTO" -import { booleanDeserializer } from "../Deserializer" -import { io, type Socket } from "socket.io-client" +import type { DeviceId } from '@/model/devices-management/Device' +import type { Notification } from '@/model/notifications-management/Notification' +import { authorizedRequest, deserializeBody } from '../api' +import type { SubscribeForDeviceOfflineNotificationsDTO } from './dtos/SubscribeForDeviceOfflineNotificationsDTO' +import { notificationDeserializer, type NotificationDTO } from './dtos/NotificationDTO' +import { booleanDeserializer } from '../Deserializer' +import { io, type Socket } from 'socket.io-client' -export async function subscribeForDeviceOfflineNotifications(deviceId: DeviceId, token: string): Promise { +export async function subscribeForDeviceOfflineNotifications( + deviceId: DeviceId, + token: string +): Promise { const body: SubscribeForDeviceOfflineNotificationsDTO = { deviceId } await authorizedRequest(`/api/notifications`, token, { method: 'POST', @@ -14,16 +17,25 @@ export async function subscribeForDeviceOfflineNotifications(deviceId: DeviceId, }) } -export async function unsubscribeForDeviceOfflineNotifications(deviceId: DeviceId, token: string): Promise { +export async function unsubscribeForDeviceOfflineNotifications( + deviceId: DeviceId, + token: string +): Promise { await authorizedRequest(`/api/notifications/${deviceId}`, token, { method: 'DELETE' }) } -export async function isSubscribedForDeviceOfflineNotifications(deviceId: DeviceId, token: string): Promise { +export async function isSubscribedForDeviceOfflineNotifications( + deviceId: DeviceId, + token: string +): Promise { const response = await authorizedRequest(`/api/notifications/${deviceId}`, token) return await deserializeBody(response, booleanDeserializer) } -export function openSocketIOForNotifications(email: string, onReceivedNotification: (notification: Notification) => void): Socket { +export function openSocketIOForNotifications( + email: string, + onReceivedNotification: (notification: Notification) => void +): Socket { const socket = io() .on('connect', () => socket.emit('login', { email: email })) .on('notification', (data: NotificationDTO) => { diff --git a/src/api/permission-management/dtos/GetUserDevicePermissionDTO.ts b/src/api/permission-management/dtos/GetUserDevicePermissionDTO.ts index 1e11583..afb8256 100644 --- a/src/api/permission-management/dtos/GetUserDevicePermissionDTO.ts +++ b/src/api/permission-management/dtos/GetUserDevicePermissionDTO.ts @@ -20,10 +20,12 @@ export function isGetUserDevicePermissionDTO(o: unknown): o is GetUseDevicePermi export const userDevicePermissionDeserializer = Deserializer< GetUseDevicePermissionDTO, UserDevicePermission ->(isGetUserDevicePermissionDTO, +>( + isGetUserDevicePermissionDTO, (dto) => ({ - email: dto.email, - deviceId: dto.deviceId, - }), - (obj) => `Unable to deserialize ${obj} into a UserDevicePermission since it was not a GetUseDevicePermissionDTO` + email: dto.email, + deviceId: dto.deviceId, + }), + (obj) => + `Unable to deserialize ${obj} into a UserDevicePermission since it was not a GetUseDevicePermissionDTO` ) diff --git a/src/api/permission-management/requests/permissions.ts b/src/api/permission-management/requests/permissions.ts index 8096949..41c1953 100644 --- a/src/api/permission-management/requests/permissions.ts +++ b/src/api/permission-management/requests/permissions.ts @@ -1,24 +1,34 @@ -import { authorizedRequest, deserializeBody } from "@/api/api"; -import { arrayDeserializer } from "@/api/Deserializer"; -import { userDevicePermissionDeserializer } from "../dtos/GetUserDevicePermissionDTO"; -import type { UserDevicePermission } from "@/model/permission-management/UserDevicePermission"; +import { authorizedRequest, deserializeBody } from '@/api/api' +import { arrayDeserializer } from '@/api/Deserializer' +import { userDevicePermissionDeserializer } from '../dtos/GetUserDevicePermissionDTO' +import type { UserDevicePermission } from '@/model/permission-management/UserDevicePermission' - -export async function getUserDevicesPermissions(email: string, token: string): Promise { - const res = await authorizedRequest(`/api/permissions/user-device-all/${email}`, token); - return await deserializeBody(res, arrayDeserializer(userDevicePermissionDeserializer)); +export async function getUserDevicesPermissions( + email: string, + token: string +): Promise { + const res = await authorizedRequest(`/api/permissions/user-device-all/${email}`, token) + return await deserializeBody(res, arrayDeserializer(userDevicePermissionDeserializer)) } -export async function setUserDevicePermission(email: string, deviceId: string, token: string): Promise { - await authorizedRequest(`/api/permissions/user-device/${deviceId}`, token, { - method: 'POST', - body: JSON.stringify({ "email": email }), - }); +export async function setUserDevicePermission( + email: string, + deviceId: string, + token: string +): Promise { + await authorizedRequest(`/api/permissions/user-device/${deviceId}`, token, { + method: 'POST', + body: JSON.stringify({ email: email }), + }) } -export async function deleteUserDevicePermission(email: string, deviceId: string, token: string): Promise { - await authorizedRequest(`/api/permissions/user-device/${deviceId}`, token, { - method: 'DELETE', - body: JSON.stringify({ "email": email }), - }); -} \ No newline at end of file +export async function deleteUserDevicePermission( + email: string, + deviceId: string, + token: string +): Promise { + await authorizedRequest(`/api/permissions/user-device/${deviceId}`, token, { + method: 'DELETE', + body: JSON.stringify({ email: email }), + }) +} diff --git a/src/api/permissions-management/GetEditListDTO.ts b/src/api/permissions-management/GetEditListDTO.ts index ff87df3..8d85c5b 100644 --- a/src/api/permissions-management/GetEditListDTO.ts +++ b/src/api/permissions-management/GetEditListDTO.ts @@ -25,5 +25,5 @@ export const editListDeserializer = Deserializer( id: dto.id, users: dto.users, } - }, + } ) diff --git a/src/api/permissions-management/GetTaskListDTO.ts b/src/api/permissions-management/GetTaskListDTO.ts index 8c42121..75e197c 100644 --- a/src/api/permissions-management/GetTaskListDTO.ts +++ b/src/api/permissions-management/GetTaskListDTO.ts @@ -30,5 +30,5 @@ export const taskListDeserializer = Deserializer( blacklist: dto.blacklist, whitelist: dto.whitelist, } - }, + } ) diff --git a/src/api/scripts/dtos/GetAutomationDTO.ts b/src/api/scripts/dtos/GetAutomationDTO.ts index c80b255..69b72d6 100644 --- a/src/api/scripts/dtos/GetAutomationDTO.ts +++ b/src/api/scripts/dtos/GetAutomationDTO.ts @@ -1,4 +1,9 @@ -import { AutomationId, type Automation, type DeviceEventTrigger, type PeriodTrigger } from '@/model/scripts/Script' +import { + AutomationId, + type Automation, + type DeviceEventTrigger, + type PeriodTrigger, +} from '@/model/scripts/Script' import { arrayDeserializer, Deserializer } from '../../Deserializer' import type { GetTaskDTO } from './GetTaskDTO' import { instructionsDeserializer, isGetInstructionDTO } from './GetInstructionDTO' @@ -50,7 +55,7 @@ const periodTriggerDeserializer = Deserializer( @@ -60,7 +65,7 @@ const deviceEventTriggerDeserializer = Deserializer : periodTriggerDeserializer(dto.trigger), instructions: instructionsDeserializer(dto.instructions), } - }, + } ) export const automationsDeserializer = arrayDeserializer(automationDeserializer) diff --git a/src/api/scripts/dtos/GetConditionDTO.ts b/src/api/scripts/dtos/GetConditionDTO.ts index 5884b9c..6bcf6aa 100644 --- a/src/api/scripts/dtos/GetConditionDTO.ts +++ b/src/api/scripts/dtos/GetConditionDTO.ts @@ -58,5 +58,5 @@ export const conditionDeserializer = Deserializer( negate: dto.negate, conditionOperatorType: conditionOperatorTypeDeserializer(dto.conditionOperatorType), } - }, + } ) diff --git a/src/api/scripts/dtos/GetInstructionDTO.ts b/src/api/scripts/dtos/GetInstructionDTO.ts index 2a9645c..4dedb6f 100644 --- a/src/api/scripts/dtos/GetInstructionDTO.ts +++ b/src/api/scripts/dtos/GetInstructionDTO.ts @@ -17,20 +17,25 @@ import { isGetInstructionTypeDTO, type GetInstructionTypeDTO, } from './GetInstructionTypeDTO' -import { isTypeDTO, typeDeserializer, type TypeDTO } from '@/api/devices-management/dtos/devices/TypeDTO' +import { + isTypeDTO, + typeDeserializer, + type TypeDTO, +} from '@/api/devices-management/dtos/devices/TypeDTO' import { DeviceActionId, DeviceId, DevicePropertyId } from '@/model/devices-management/Device' +import { TaskId } from '@/model/scripts/Script' export interface GetInstructionDTO { type: GetInstructionTypeDTO instruction: - | GetSendNotificationInstructionDTO - | GetWaitInstructionDTO - | GetStartTaskInstructionDTO - | GetDeviceActionInstructionDTO - | GetCreateConstantInstructionDTO - | GetCreateDevicePropertyConstantInstructionDTO - | GetIfInstructionDTO - | GetIfElseInstructionDTO + | GetSendNotificationInstructionDTO + | GetWaitInstructionDTO + | GetStartTaskInstructionDTO + | GetDeviceActionInstructionDTO + | GetCreateConstantInstructionDTO + | GetCreateDevicePropertyConstantInstructionDTO + | GetIfInstructionDTO + | GetIfElseInstructionDTO } interface GetSendNotificationInstructionDTO { @@ -119,7 +124,7 @@ function isGetCreateConstantInstructionDTO(o: unknown): o is GetCreateConstantIn } function isGetCreateDevicePropertyConstantInstructionDTO( - o: unknown, + o: unknown ): o is GetCreateDevicePropertyConstantInstructionDTO { return ( o != undefined && @@ -197,16 +202,16 @@ export const waitInstructionDeserializer = Deserializer( isGetStartTaskInstructionDTO, (dto) => { return { - taskId: dto.taskId, + taskId: TaskId(dto.taskId), } - }, + } ) export const deviceActionInstructionDeserializer = Deserializer< @@ -250,7 +255,7 @@ export const ifInstructionDeserializer = Deserializer( type: instructionTypeDeserializer(dto.type), instruction: deserializeInstruction(dto.instruction), } - }, + } ) export const instructionsDeserializer = arrayDeserializer(instructionDeserializer) diff --git a/src/api/scripts/dtos/GetInstructionTypeDTO.ts b/src/api/scripts/dtos/GetInstructionTypeDTO.ts index ad1e58a..39624ac 100644 --- a/src/api/scripts/dtos/GetInstructionTypeDTO.ts +++ b/src/api/scripts/dtos/GetInstructionTypeDTO.ts @@ -24,14 +24,22 @@ export const instructionTypeDeserializer = Deserializer { switch (dto) { - case GetInstructionTypeDTO.CreateConstantInstruction: return InstructionType.CreateConstantInstruction - case GetInstructionTypeDTO.CreateDevicePropertyConstantInstruction: return InstructionType.CreateDevicePropertyConstantInstruction - case GetInstructionTypeDTO.DeviceActionInstruction: return InstructionType.DeviceActionInstruction - case GetInstructionTypeDTO.IfInstruction: return InstructionType.IfInstruction - case GetInstructionTypeDTO.IfElseInstruction: return InstructionType.IfElseInstruction - case GetInstructionTypeDTO.SendNotificationInstruction: return InstructionType.SendNotificationInstruction - case GetInstructionTypeDTO.StartTaskInstruction: return InstructionType.StartTaskInstruction - case GetInstructionTypeDTO.WaitInstruction: return InstructionType.WaitInstruction + case GetInstructionTypeDTO.CreateConstantInstruction: + return InstructionType.CreateConstantInstruction + case GetInstructionTypeDTO.CreateDevicePropertyConstantInstruction: + return InstructionType.CreateDevicePropertyConstantInstruction + case GetInstructionTypeDTO.DeviceActionInstruction: + return InstructionType.DeviceActionInstruction + case GetInstructionTypeDTO.IfInstruction: + return InstructionType.IfInstruction + case GetInstructionTypeDTO.IfElseInstruction: + return InstructionType.IfElseInstruction + case GetInstructionTypeDTO.SendNotificationInstruction: + return InstructionType.SendNotificationInstruction + case GetInstructionTypeDTO.StartTaskInstruction: + return InstructionType.StartTaskInstruction + case GetInstructionTypeDTO.WaitInstruction: + return InstructionType.WaitInstruction } - }, + } ) diff --git a/src/api/scripts/requests/automations.ts b/src/api/scripts/requests/automations.ts index ac22c17..764e40e 100644 --- a/src/api/scripts/requests/automations.ts +++ b/src/api/scripts/requests/automations.ts @@ -1,12 +1,12 @@ import { authorizedRequest, deserializeBody } from '@/api/api' import type { AutomationId, Trigger } from '@/model/scripts/Script' import { automationDeserializer, automationsDeserializer } from '../dtos/GetAutomationDTO' -import type { Instruction } from '@/model/scripts/Instruction'; +import type { Instruction } from '@/model/scripts/Instruction' export async function editAutomation( id: AutomationId, - automation: { name: string, trigger: Trigger, instructions: Instruction[] }, - token: string, + automation: { name: string; trigger: Trigger; instructions: Instruction[] }, + token: string ): Promise { await authorizedRequest('/api/automations/' + id, token, { method: 'PATCH', @@ -19,8 +19,8 @@ export async function editAutomation( } export async function createAutomation( - automation: { name: string, trigger: Trigger, instructions: Instruction[] }, - token: string, + automation: { name: string; trigger: Trigger; instructions: Instruction[] }, + token: string ): Promise { await authorizedRequest('/api/automations/', token, { method: 'POST', @@ -39,7 +39,7 @@ export async function deleteAutomation(id: AutomationId, token: string): Promise export async function toggleAutomation( id: AutomationId, enabled: boolean, - token: string, + token: string ): Promise { await authorizedRequest('/api/automations/' + id, token, { method: 'POST', diff --git a/src/api/scripts/requests/tasks.ts b/src/api/scripts/requests/tasks.ts index 176d945..c6da430 100644 --- a/src/api/scripts/requests/tasks.ts +++ b/src/api/scripts/requests/tasks.ts @@ -6,7 +6,7 @@ import type { Instruction } from '@/model/scripts/Instruction' export async function editTask( id: TaskId, task: { name: string; instructions: Instruction[] }, - token: string, + token: string ): Promise { await authorizedRequest('/api/tasks/' + id, token, { method: 'PATCH', @@ -19,7 +19,7 @@ export async function editTask( export async function createTask( task: { name: string; instructions: Instruction[] }, - token: string, + token: string ): Promise { await authorizedRequest('/api/tasks/', token, { method: 'POST', diff --git a/src/api/users-management/dtos/GetRegistrationRequestDTO.ts b/src/api/users-management/dtos/GetRegistrationRequestDTO.ts index a8efb7a..1d10b30 100644 --- a/src/api/users-management/dtos/GetRegistrationRequestDTO.ts +++ b/src/api/users-management/dtos/GetRegistrationRequestDTO.ts @@ -1,24 +1,31 @@ -import { type RegistrationRequest } from "@/model/users-management/RegistrationRequest" -import { Deserializer } from "../../Deserializer" +import { type RegistrationRequest } from '@/model/users-management/RegistrationRequest' +import { Deserializer } from '../../Deserializer' export interface GetRegistrationRequestDTO { - nickname: string; - email: string; + nickname: string + email: string } export function isGetRegistrationRequestDTO(o: unknown): o is GetRegistrationRequestDTO { - return o != undefined && typeof o == "object" && - "nickname" in o && typeof o.nickname == "string" && - "email" in o && typeof o.email == "string" + return ( + o != undefined && + typeof o == 'object' && + 'nickname' in o && + typeof o.nickname == 'string' && + 'email' in o && + typeof o.email == 'string' + ) } -export const registrationRequestDeserializer = - Deserializer( - isGetRegistrationRequestDTO, - (dto) => ({ - nickname: dto.nickname, - email: dto.email, - }), - (obj) => `Unable to deserialize ${obj} into a RegistrationRequest since it was not a GetRegistrationRequestDTO` - ) - \ No newline at end of file +export const registrationRequestDeserializer = Deserializer< + GetRegistrationRequestDTO, + RegistrationRequest +>( + isGetRegistrationRequestDTO, + (dto) => ({ + nickname: dto.nickname, + email: dto.email, + }), + (obj) => + `Unable to deserialize ${obj} into a RegistrationRequest since it was not a GetRegistrationRequestDTO` +) diff --git a/src/api/users-management/dtos/GetTokenDTO.ts b/src/api/users-management/dtos/GetTokenDTO.ts index 582fb78..623677f 100644 --- a/src/api/users-management/dtos/GetTokenDTO.ts +++ b/src/api/users-management/dtos/GetTokenDTO.ts @@ -1,17 +1,15 @@ -import { Deserializer } from "../../Deserializer" +import { Deserializer } from '../../Deserializer' export interface GetTokenDTO { - source: string; + source: string } export function isGetTokenDTO(o: unknown): o is GetTokenDTO { - return o != undefined && typeof o == "object" && - "source" in o && typeof o.source == "string"; + return o != undefined && typeof o == 'object' && 'source' in o && typeof o.source == 'string' } -export const tokenDeserializer = - Deserializer( - isGetTokenDTO, - (dto) => dto.source, - (obj) => `Unable to deserialize ${obj} into a string since it was not a GetTokenDTO` - ); \ No newline at end of file +export const tokenDeserializer = Deserializer( + isGetTokenDTO, + (dto) => dto.source, + (obj) => `Unable to deserialize ${obj} into a string since it was not a GetTokenDTO` +) diff --git a/src/api/users-management/dtos/GetUserDTO.ts b/src/api/users-management/dtos/GetUserDTO.ts index d6b9217..65a4d4f 100644 --- a/src/api/users-management/dtos/GetUserDTO.ts +++ b/src/api/users-management/dtos/GetUserDTO.ts @@ -1,31 +1,36 @@ -import { type GetRegistrationRequestDTO } from "./GetRegistrationRequestDTO"; -import { Role, type User } from "@/model/users-management/User" -import { arrayDeserializer, Deserializer } from "../../Deserializer" +import { type GetRegistrationRequestDTO } from './GetRegistrationRequestDTO' +import { Role, type User } from '@/model/users-management/User' +import { arrayDeserializer, Deserializer } from '../../Deserializer' export interface GetUserDTO extends GetRegistrationRequestDTO { - role: Role; + role: Role } export function isGetUserDTO(o: unknown): o is GetUserDTO { - return o != undefined && typeof o == "object" && - "nickname" in o && typeof o.nickname == "string" && - "email" in o && typeof o.email == "string" && - "role" in o && isRole(o.role) + return ( + o != undefined && + typeof o == 'object' && + 'nickname' in o && + typeof o.nickname == 'string' && + 'email' in o && + typeof o.email == 'string' && + 'role' in o && + isRole(o.role) + ) } export function isRole(value: unknown): value is Role { - return Object.values(Role).includes(value as Role); + return Object.values(Role).includes(value as Role) } -export const userDeserializer = - Deserializer( - isGetUserDTO, - (dto) => ({ - nickname: dto.nickname, - email: dto.email, - role: dto.role - }), - (obj) => `Unable to deserialize ${obj} into a User since it was not a GetUserDTO` - ) +export const userDeserializer = Deserializer( + isGetUserDTO, + (dto) => ({ + nickname: dto.nickname, + email: dto.email, + role: dto.role, + }), + (obj) => `Unable to deserialize ${obj} into a User since it was not a GetUserDTO` +) export const usersDeserializer = arrayDeserializer(userDeserializer) diff --git a/src/api/users-management/dtos/GetUserInfoDTO.ts b/src/api/users-management/dtos/GetUserInfoDTO.ts index 3eac1b2..f2da8f0 100644 --- a/src/api/users-management/dtos/GetUserInfoDTO.ts +++ b/src/api/users-management/dtos/GetUserInfoDTO.ts @@ -1,27 +1,33 @@ -import { type UserInfo } from "@/model/users-management/User" -import { Deserializer } from "../../Deserializer" -import { isRole, type GetUserDTO } from "./GetUserDTO"; +import { type UserInfo } from '@/model/users-management/User' +import { Deserializer } from '../../Deserializer' +import { isRole, type GetUserDTO } from './GetUserDTO' -export interface GetUserInfoDTO extends GetUserDTO { - token: string; +export interface GetUserInfoDTO extends GetUserDTO { + token: string } export function isGetUserInfoDTO(o: unknown): o is GetUserInfoDTO { - return o != undefined && typeof o == "object" && - "nickname" in o && typeof o.nickname == "string" && - "email" in o && typeof o.email == "string" && - "role" in o && isRole(o.role) && - "token" in o && typeof o.token == "string"; + return ( + o != undefined && + typeof o == 'object' && + 'nickname' in o && + typeof o.nickname == 'string' && + 'email' in o && + typeof o.email == 'string' && + 'role' in o && + isRole(o.role) && + 'token' in o && + typeof o.token == 'string' + ) } -export const userDeserializer = - Deserializer( - isGetUserInfoDTO, - (dto) => ({ - nickname: dto.nickname, - email: dto.email, - role: dto.role, - token: dto.token - }), - (obj) => `Unable to deserialize ${obj} into a User since it was not a GetUserInfoDTO` - ) +export const userDeserializer = Deserializer( + isGetUserInfoDTO, + (dto) => ({ + nickname: dto.nickname, + email: dto.email, + role: dto.role, + token: dto.token, + }), + (obj) => `Unable to deserialize ${obj} into a User since it was not a GetUserInfoDTO` +) diff --git a/src/api/users-management/requests/users.ts b/src/api/users-management/requests/users.ts index 5814b01..64a7c7b 100644 --- a/src/api/users-management/requests/users.ts +++ b/src/api/users-management/requests/users.ts @@ -1,23 +1,28 @@ -import * as api from '@/api/api'; -import type { CompleteRegistrationRequest, RegistrationRequest } from '@/model/users-management/RegistrationRequest'; -import type { User } from '@/model/users-management/User'; -import { tokenDeserializer } from '../dtos/GetTokenDTO'; -import { userDeserializer, usersDeserializer } from '../dtos/GetUserDTO'; -import { arrayDeserializer } from '@/api/Deserializer'; -import { registrationRequestDeserializer } from '../dtos/GetRegistrationRequestDTO'; - -export async function userRegistrationRequest(registrationRequest: CompleteRegistrationRequest): Promise { +import * as api from '@/api/api' +import type { + CompleteRegistrationRequest, + RegistrationRequest, +} from '@/model/users-management/RegistrationRequest' +import type { User } from '@/model/users-management/User' +import { tokenDeserializer } from '../dtos/GetTokenDTO' +import { userDeserializer, usersDeserializer } from '../dtos/GetUserDTO' +import { arrayDeserializer } from '@/api/Deserializer' +import { registrationRequestDeserializer } from '../dtos/GetRegistrationRequestDTO' + +export async function userRegistrationRequest( + registrationRequest: CompleteRegistrationRequest +): Promise { await api.request('/api/registrationRequests', { method: 'POST', - body: JSON.stringify(registrationRequest) - }); + body: JSON.stringify(registrationRequest), + }) } export async function updateUser(token: string, body: Record): Promise { await api.authorizedRequest('/api/users', token, { method: 'PATCH', body: JSON.stringify(body), - }); + }) } export async function deleteUser(token: string, email: string): Promise { @@ -41,9 +46,9 @@ export async function approveRegistrationRequest(token: string, email: string): export async function login(email: string, password: string): Promise { const res = await api.request('/api/users/login', { method: 'POST', - body: JSON.stringify({ email, password }) - }); - return await api.deserializeBody(res, tokenDeserializer); + body: JSON.stringify({ email, password }), + }) + return await api.deserializeBody(res, tokenDeserializer) } export async function getAllRegistrationRequests(token: string): Promise { @@ -52,11 +57,11 @@ export async function getAllRegistrationRequests(token: string): Promise { - const res = await api.authorizedRequest('/api/user', token); - return await api.deserializeBody(res, userDeserializer); + const res = await api.authorizedRequest('/api/user', token) + return await api.deserializeBody(res, userDeserializer) } export async function getAllUsers(token: string): Promise { - const res = await api.authorizedRequest('/api/users', token); - return await api.deserializeBody(res, usersDeserializer); + const res = await api.authorizedRequest('/api/users', token) + return await api.deserializeBody(res, usersDeserializer) } diff --git a/src/assets/fonts/all.css b/src/assets/fonts/all.css index 6366629..551ca70 100644 --- a/src/assets/fonts/all.css +++ b/src/assets/fonts/all.css @@ -4,8 +4,9 @@ * Copyright 2024 Fonticons, Inc. */ .fa { - font-family: var(--fa-style-family, "Font Awesome 6 Free"); - font-weight: var(--fa-style, 900); } + font-family: var(--fa-style-family, 'Font Awesome 6 Free'); + font-weight: var(--fa-style, 900); +} .fas, .far, @@ -20,7 +21,8 @@ font-style: normal; font-variant: normal; line-height: 1; - text-rendering: auto; } + text-rendering: auto; +} .fas::before, .far::before, @@ -29,111 +31,137 @@ .fa-regular::before, .fa-brands::before, .fa::before { - content: var(--fa); } + content: var(--fa); +} .fa-classic, .fas, .fa-solid, .far, .fa-regular { - font-family: 'Font Awesome 6 Free'; } + font-family: 'Font Awesome 6 Free'; +} .fa-brands, .fab { - font-family: 'Font Awesome 6 Brands'; } + font-family: 'Font Awesome 6 Brands'; +} .fa-1x { - font-size: 1em; } + font-size: 1em; +} .fa-2x { - font-size: 2em; } + font-size: 2em; +} .fa-3x { - font-size: 3em; } + font-size: 3em; +} .fa-4x { - font-size: 4em; } + font-size: 4em; +} .fa-5x { - font-size: 5em; } + font-size: 5em; +} .fa-6x { - font-size: 6em; } + font-size: 6em; +} .fa-7x { - font-size: 7em; } + font-size: 7em; +} .fa-8x { - font-size: 8em; } + font-size: 8em; +} .fa-9x { - font-size: 9em; } + font-size: 9em; +} .fa-10x { - font-size: 10em; } + font-size: 10em; +} .fa-2xs { font-size: 0.625em; line-height: 0.1em; - vertical-align: 0.225em; } + vertical-align: 0.225em; +} .fa-xs { font-size: 0.75em; line-height: 0.08333em; - vertical-align: 0.125em; } + vertical-align: 0.125em; +} .fa-sm { font-size: 0.875em; line-height: 0.07143em; - vertical-align: 0.05357em; } + vertical-align: 0.05357em; +} .fa-lg { font-size: 1.25em; line-height: 0.05em; - vertical-align: -0.075em; } + vertical-align: -0.075em; +} .fa-xl { font-size: 1.5em; line-height: 0.04167em; - vertical-align: -0.125em; } + vertical-align: -0.125em; +} .fa-2xl { font-size: 2em; line-height: 0.03125em; - vertical-align: -0.1875em; } + vertical-align: -0.1875em; +} .fa-fw { text-align: center; - width: 1.25em; } + 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; } + padding-left: 0; +} +.fa-ul > li { + position: relative; +} .fa-li { left: calc(-1 * var(--fa-li-width, 2em)); position: absolute; text-align: center; width: var(--fa-li-width, 2em); - line-height: inherit; } + 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); } + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); +} .fa-pull-left { float: left; - margin-right: var(--fa-pull-margin, 0.3em); } + margin-right: var(--fa-pull-margin, 0.3em); +} .fa-pull-right { float: right; - margin-left: var(--fa-pull-margin, 0.3em); } + margin-left: var(--fa-pull-margin, 0.3em); +} .fa-beat { animation-name: fa-beat; @@ -141,7 +169,8 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-timing-function: var(--fa-animation-timing, ease-in-out); } + animation-timing-function: var(--fa-animation-timing, ease-in-out); +} .fa-bounce { animation-name: fa-bounce; @@ -149,7 +178,8 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - 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 { animation-name: fa-fade; @@ -157,7 +187,8 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - 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 { animation-name: fa-beat-fade; @@ -165,7 +196,8 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - 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 { animation-name: fa-flip; @@ -173,7 +205,8 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-timing-function: var(--fa-animation-timing, ease-in-out); } + animation-timing-function: var(--fa-animation-timing, ease-in-out); +} .fa-shake { animation-name: fa-shake; @@ -181,7 +214,8 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-timing-function: var(--fa-animation-timing, linear); } + animation-timing-function: var(--fa-animation-timing, linear); +} .fa-spin { animation-name: fa-spin; @@ -189,10 +223,12 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 2s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-timing-function: var(--fa-animation-timing, linear); } + animation-timing-function: var(--fa-animation-timing, linear); +} .fa-spin-reverse { - --fa-animation-direction: reverse; } + --fa-animation-direction: reverse; +} .fa-pulse, .fa-spin-pulse { @@ -200,7 +236,8 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - 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, @@ -216,93 +253,146 @@ animation-duration: 1ms; animation-iteration-count: 1; transition-delay: 0s; - transition-duration: 0s; } } + transition-duration: 0s; + } +} @keyframes fa-beat { - 0%, 90% { - transform: scale(1); } + 0%, + 90% { + transform: scale(1); + } 45% { - transform: scale(var(--fa-beat-scale, 1.25)); } } + transform: scale(var(--fa-beat-scale, 1.25)); + } +} @keyframes fa-bounce { 0% { - transform: scale(1, 1) translateY(0); } + transform: scale(1, 1) translateY(0); + } 10% { - 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% { - 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% { - 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% { - transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + } 64% { - transform: scale(1, 1) translateY(0); } + transform: scale(1, 1) translateY(0); + } 100% { - transform: scale(1, 1) translateY(0); } } + transform: scale(1, 1) translateY(0); + } +} @keyframes fa-fade { 50% { - opacity: var(--fa-fade-opacity, 0.4); } } + opacity: var(--fa-fade-opacity, 0.4); + } +} @keyframes fa-beat-fade { - 0%, 100% { + 0%, + 100% { opacity: var(--fa-beat-fade-opacity, 0.4); - transform: scale(1); } + transform: scale(1); + } 50% { opacity: 1; - transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + transform: scale(var(--fa-beat-fade-scale, 1.125)); + } +} @keyframes fa-flip { 50% { - 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-shake { 0% { - transform: rotate(-15deg); } + transform: rotate(-15deg); + } 4% { - transform: rotate(15deg); } - 8%, 24% { - transform: rotate(-18deg); } - 12%, 28% { - transform: rotate(18deg); } + transform: rotate(15deg); + } + 8%, + 24% { + transform: rotate(-18deg); + } + 12%, + 28% { + transform: rotate(18deg); + } 16% { - transform: rotate(-22deg); } + transform: rotate(-22deg); + } 20% { - transform: rotate(22deg); } + transform: rotate(22deg); + } 32% { - transform: rotate(-12deg); } + transform: rotate(-12deg); + } 36% { - transform: rotate(12deg); } - 40%, 100% { - transform: rotate(0deg); } } + transform: rotate(12deg); + } + 40%, + 100% { + transform: rotate(0deg); + } +} @keyframes fa-spin { 0% { - transform: rotate(0deg); } + transform: rotate(0deg); + } 100% { - transform: rotate(360deg); } } + transform: rotate(360deg); + } +} .fa-rotate-90 { - transform: rotate(90deg); } + transform: rotate(90deg); +} .fa-rotate-180 { - transform: rotate(180deg); } + transform: rotate(180deg); +} .fa-rotate-270 { - transform: rotate(270deg); } + transform: rotate(270deg); +} .fa-flip-horizontal { - transform: scale(-1, 1); } + transform: scale(-1, 1); +} .fa-flip-vertical { - transform: scale(1, -1); } + transform: scale(1, -1); +} .fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { - transform: scale(-1, -1); } + transform: scale(-1, -1); +} .fa-rotate-by { - transform: rotate(var(--fa-rotate-angle, 0)); } + transform: rotate(var(--fa-rotate-angle, 0)); +} .fa-stack { display: inline-block; @@ -310,7 +400,8 @@ line-height: 2em; position: relative; vertical-align: middle; - width: 2.5em; } + width: 2.5em; +} .fa-stack-1x, .fa-stack-2x { @@ -318,5905 +409,7871 @@ position: absolute; text-align: center; width: 100%; - z-index: var(--fa-stack-z-index, auto); } + z-index: var(--fa-stack-z-index, auto); +} .fa-stack-1x { - line-height: inherit; } + line-height: inherit; +} .fa-stack-2x { - font-size: 2em; } + font-size: 2em; +} .fa-inverse { - color: var(--fa-inverse, #fff); } + color: var(--fa-inverse, #fff); +} /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .fa-0 { - --fa: "\30"; } + --fa: '\30'; +} .fa-1 { - --fa: "\31"; } + --fa: '\31'; +} .fa-2 { - --fa: "\32"; } + --fa: '\32'; +} .fa-3 { - --fa: "\33"; } + --fa: '\33'; +} .fa-4 { - --fa: "\34"; } + --fa: '\34'; +} .fa-5 { - --fa: "\35"; } + --fa: '\35'; +} .fa-6 { - --fa: "\36"; } + --fa: '\36'; +} .fa-7 { - --fa: "\37"; } + --fa: '\37'; +} .fa-8 { - --fa: "\38"; } + --fa: '\38'; +} .fa-9 { - --fa: "\39"; } + --fa: '\39'; +} .fa-fill-drip { - --fa: "\f576"; } + --fa: '\f576'; +} .fa-arrows-to-circle { - --fa: "\e4bd"; } + --fa: '\e4bd'; +} .fa-circle-chevron-right { - --fa: "\f138"; } + --fa: '\f138'; +} .fa-chevron-circle-right { - --fa: "\f138"; } + --fa: '\f138'; +} .fa-at { - --fa: "\40"; } + --fa: '\40'; +} .fa-trash-can { - --fa: "\f2ed"; } + --fa: '\f2ed'; +} .fa-trash-alt { - --fa: "\f2ed"; } + --fa: '\f2ed'; +} .fa-text-height { - --fa: "\f034"; } + --fa: '\f034'; +} .fa-user-xmark { - --fa: "\f235"; } + --fa: '\f235'; +} .fa-user-times { - --fa: "\f235"; } + --fa: '\f235'; +} .fa-stethoscope { - --fa: "\f0f1"; } + --fa: '\f0f1'; +} .fa-message { - --fa: "\f27a"; } + --fa: '\f27a'; +} .fa-comment-alt { - --fa: "\f27a"; } + --fa: '\f27a'; +} .fa-info { - --fa: "\f129"; } + --fa: '\f129'; +} .fa-down-left-and-up-right-to-center { - --fa: "\f422"; } + --fa: '\f422'; +} .fa-compress-alt { - --fa: "\f422"; } + --fa: '\f422'; +} .fa-explosion { - --fa: "\e4e9"; } + --fa: '\e4e9'; +} .fa-file-lines { - --fa: "\f15c"; } + --fa: '\f15c'; +} .fa-file-alt { - --fa: "\f15c"; } + --fa: '\f15c'; +} .fa-file-text { - --fa: "\f15c"; } + --fa: '\f15c'; +} .fa-wave-square { - --fa: "\f83e"; } + --fa: '\f83e'; +} .fa-ring { - --fa: "\f70b"; } + --fa: '\f70b'; +} .fa-building-un { - --fa: "\e4d9"; } + --fa: '\e4d9'; +} .fa-dice-three { - --fa: "\f527"; } + --fa: '\f527'; +} .fa-calendar-days { - --fa: "\f073"; } + --fa: '\f073'; +} .fa-calendar-alt { - --fa: "\f073"; } + --fa: '\f073'; +} .fa-anchor-circle-check { - --fa: "\e4aa"; } + --fa: '\e4aa'; +} .fa-building-circle-arrow-right { - --fa: "\e4d1"; } + --fa: '\e4d1'; +} .fa-volleyball { - --fa: "\f45f"; } + --fa: '\f45f'; +} .fa-volleyball-ball { - --fa: "\f45f"; } + --fa: '\f45f'; +} .fa-arrows-up-to-line { - --fa: "\e4c2"; } + --fa: '\e4c2'; +} .fa-sort-down { - --fa: "\f0dd"; } + --fa: '\f0dd'; +} .fa-sort-desc { - --fa: "\f0dd"; } + --fa: '\f0dd'; +} .fa-circle-minus { - --fa: "\f056"; } + --fa: '\f056'; +} .fa-minus-circle { - --fa: "\f056"; } + --fa: '\f056'; +} .fa-door-open { - --fa: "\f52b"; } + --fa: '\f52b'; +} .fa-right-from-bracket { - --fa: "\f2f5"; } + --fa: '\f2f5'; +} .fa-sign-out-alt { - --fa: "\f2f5"; } + --fa: '\f2f5'; +} .fa-atom { - --fa: "\f5d2"; } + --fa: '\f5d2'; +} .fa-soap { - --fa: "\e06e"; } + --fa: '\e06e'; +} .fa-icons { - --fa: "\f86d"; } + --fa: '\f86d'; +} .fa-heart-music-camera-bolt { - --fa: "\f86d"; } + --fa: '\f86d'; +} .fa-microphone-lines-slash { - --fa: "\f539"; } + --fa: '\f539'; +} .fa-microphone-alt-slash { - --fa: "\f539"; } + --fa: '\f539'; +} .fa-bridge-circle-check { - --fa: "\e4c9"; } + --fa: '\e4c9'; +} .fa-pump-medical { - --fa: "\e06a"; } + --fa: '\e06a'; +} .fa-fingerprint { - --fa: "\f577"; } + --fa: '\f577'; +} .fa-hand-point-right { - --fa: "\f0a4"; } + --fa: '\f0a4'; +} .fa-magnifying-glass-location { - --fa: "\f689"; } + --fa: '\f689'; +} .fa-search-location { - --fa: "\f689"; } + --fa: '\f689'; +} .fa-forward-step { - --fa: "\f051"; } + --fa: '\f051'; +} .fa-step-forward { - --fa: "\f051"; } + --fa: '\f051'; +} .fa-face-smile-beam { - --fa: "\f5b8"; } + --fa: '\f5b8'; +} .fa-smile-beam { - --fa: "\f5b8"; } + --fa: '\f5b8'; +} .fa-flag-checkered { - --fa: "\f11e"; } + --fa: '\f11e'; +} .fa-football { - --fa: "\f44e"; } + --fa: '\f44e'; +} .fa-football-ball { - --fa: "\f44e"; } + --fa: '\f44e'; +} .fa-school-circle-exclamation { - --fa: "\e56c"; } + --fa: '\e56c'; +} .fa-crop { - --fa: "\f125"; } + --fa: '\f125'; +} .fa-angles-down { - --fa: "\f103"; } + --fa: '\f103'; +} .fa-angle-double-down { - --fa: "\f103"; } + --fa: '\f103'; +} .fa-users-rectangle { - --fa: "\e594"; } + --fa: '\e594'; +} .fa-people-roof { - --fa: "\e537"; } + --fa: '\e537'; +} .fa-people-line { - --fa: "\e534"; } + --fa: '\e534'; +} .fa-beer-mug-empty { - --fa: "\f0fc"; } + --fa: '\f0fc'; +} .fa-beer { - --fa: "\f0fc"; } + --fa: '\f0fc'; +} .fa-diagram-predecessor { - --fa: "\e477"; } + --fa: '\e477'; +} .fa-arrow-up-long { - --fa: "\f176"; } + --fa: '\f176'; +} .fa-long-arrow-up { - --fa: "\f176"; } + --fa: '\f176'; +} .fa-fire-flame-simple { - --fa: "\f46a"; } + --fa: '\f46a'; +} .fa-burn { - --fa: "\f46a"; } + --fa: '\f46a'; +} .fa-person { - --fa: "\f183"; } + --fa: '\f183'; +} .fa-male { - --fa: "\f183"; } + --fa: '\f183'; +} .fa-laptop { - --fa: "\f109"; } + --fa: '\f109'; +} .fa-file-csv { - --fa: "\f6dd"; } + --fa: '\f6dd'; +} .fa-menorah { - --fa: "\f676"; } + --fa: '\f676'; +} .fa-truck-plane { - --fa: "\e58f"; } + --fa: '\e58f'; +} .fa-record-vinyl { - --fa: "\f8d9"; } + --fa: '\f8d9'; +} .fa-face-grin-stars { - --fa: "\f587"; } + --fa: '\f587'; +} .fa-grin-stars { - --fa: "\f587"; } + --fa: '\f587'; +} .fa-bong { - --fa: "\f55c"; } + --fa: '\f55c'; +} .fa-spaghetti-monster-flying { - --fa: "\f67b"; } + --fa: '\f67b'; +} .fa-pastafarianism { - --fa: "\f67b"; } + --fa: '\f67b'; +} .fa-arrow-down-up-across-line { - --fa: "\e4af"; } + --fa: '\e4af'; +} .fa-spoon { - --fa: "\f2e5"; } + --fa: '\f2e5'; +} .fa-utensil-spoon { - --fa: "\f2e5"; } + --fa: '\f2e5'; +} .fa-jar-wheat { - --fa: "\e517"; } + --fa: '\e517'; +} .fa-envelopes-bulk { - --fa: "\f674"; } + --fa: '\f674'; +} .fa-mail-bulk { - --fa: "\f674"; } + --fa: '\f674'; +} .fa-file-circle-exclamation { - --fa: "\e4eb"; } + --fa: '\e4eb'; +} .fa-circle-h { - --fa: "\f47e"; } + --fa: '\f47e'; +} .fa-hospital-symbol { - --fa: "\f47e"; } + --fa: '\f47e'; +} .fa-pager { - --fa: "\f815"; } + --fa: '\f815'; +} .fa-address-book { - --fa: "\f2b9"; } + --fa: '\f2b9'; +} .fa-contact-book { - --fa: "\f2b9"; } + --fa: '\f2b9'; +} .fa-strikethrough { - --fa: "\f0cc"; } + --fa: '\f0cc'; +} .fa-k { - --fa: "\4b"; } + --fa: '\4b'; +} .fa-landmark-flag { - --fa: "\e51c"; } + --fa: '\e51c'; +} .fa-pencil { - --fa: "\f303"; } + --fa: '\f303'; +} .fa-pencil-alt { - --fa: "\f303"; } + --fa: '\f303'; +} .fa-backward { - --fa: "\f04a"; } + --fa: '\f04a'; +} .fa-caret-right { - --fa: "\f0da"; } + --fa: '\f0da'; +} .fa-comments { - --fa: "\f086"; } + --fa: '\f086'; +} .fa-paste { - --fa: "\f0ea"; } + --fa: '\f0ea'; +} .fa-file-clipboard { - --fa: "\f0ea"; } + --fa: '\f0ea'; +} .fa-code-pull-request { - --fa: "\e13c"; } + --fa: '\e13c'; +} .fa-clipboard-list { - --fa: "\f46d"; } + --fa: '\f46d'; +} .fa-truck-ramp-box { - --fa: "\f4de"; } + --fa: '\f4de'; +} .fa-truck-loading { - --fa: "\f4de"; } + --fa: '\f4de'; +} .fa-user-check { - --fa: "\f4fc"; } + --fa: '\f4fc'; +} .fa-vial-virus { - --fa: "\e597"; } + --fa: '\e597'; +} .fa-sheet-plastic { - --fa: "\e571"; } + --fa: '\e571'; +} .fa-blog { - --fa: "\f781"; } + --fa: '\f781'; +} .fa-user-ninja { - --fa: "\f504"; } + --fa: '\f504'; +} .fa-person-arrow-up-from-line { - --fa: "\e539"; } + --fa: '\e539'; +} .fa-scroll-torah { - --fa: "\f6a0"; } + --fa: '\f6a0'; +} .fa-torah { - --fa: "\f6a0"; } + --fa: '\f6a0'; +} .fa-broom-ball { - --fa: "\f458"; } + --fa: '\f458'; +} .fa-quidditch { - --fa: "\f458"; } + --fa: '\f458'; +} .fa-quidditch-broom-ball { - --fa: "\f458"; } + --fa: '\f458'; +} .fa-toggle-off { - --fa: "\f204"; } + --fa: '\f204'; +} .fa-box-archive { - --fa: "\f187"; } + --fa: '\f187'; +} .fa-archive { - --fa: "\f187"; } + --fa: '\f187'; +} .fa-person-drowning { - --fa: "\e545"; } + --fa: '\e545'; +} .fa-arrow-down-9-1 { - --fa: "\f886"; } + --fa: '\f886'; +} .fa-sort-numeric-desc { - --fa: "\f886"; } + --fa: '\f886'; +} .fa-sort-numeric-down-alt { - --fa: "\f886"; } + --fa: '\f886'; +} .fa-face-grin-tongue-squint { - --fa: "\f58a"; } + --fa: '\f58a'; +} .fa-grin-tongue-squint { - --fa: "\f58a"; } + --fa: '\f58a'; +} .fa-spray-can { - --fa: "\f5bd"; } + --fa: '\f5bd'; +} .fa-truck-monster { - --fa: "\f63b"; } + --fa: '\f63b'; +} .fa-w { - --fa: "\57"; } + --fa: '\57'; +} .fa-earth-africa { - --fa: "\f57c"; } + --fa: '\f57c'; +} .fa-globe-africa { - --fa: "\f57c"; } + --fa: '\f57c'; +} .fa-rainbow { - --fa: "\f75b"; } + --fa: '\f75b'; +} .fa-circle-notch { - --fa: "\f1ce"; } + --fa: '\f1ce'; +} .fa-tablet-screen-button { - --fa: "\f3fa"; } + --fa: '\f3fa'; +} .fa-tablet-alt { - --fa: "\f3fa"; } + --fa: '\f3fa'; +} .fa-paw { - --fa: "\f1b0"; } + --fa: '\f1b0'; +} .fa-cloud { - --fa: "\f0c2"; } + --fa: '\f0c2'; +} .fa-trowel-bricks { - --fa: "\e58a"; } + --fa: '\e58a'; +} .fa-face-flushed { - --fa: "\f579"; } + --fa: '\f579'; +} .fa-flushed { - --fa: "\f579"; } + --fa: '\f579'; +} .fa-hospital-user { - --fa: "\f80d"; } + --fa: '\f80d'; +} .fa-tent-arrow-left-right { - --fa: "\e57f"; } + --fa: '\e57f'; +} .fa-gavel { - --fa: "\f0e3"; } + --fa: '\f0e3'; +} .fa-legal { - --fa: "\f0e3"; } + --fa: '\f0e3'; +} .fa-binoculars { - --fa: "\f1e5"; } + --fa: '\f1e5'; +} .fa-microphone-slash { - --fa: "\f131"; } + --fa: '\f131'; +} .fa-box-tissue { - --fa: "\e05b"; } + --fa: '\e05b'; +} .fa-motorcycle { - --fa: "\f21c"; } + --fa: '\f21c'; +} .fa-bell-concierge { - --fa: "\f562"; } + --fa: '\f562'; +} .fa-concierge-bell { - --fa: "\f562"; } + --fa: '\f562'; +} .fa-pen-ruler { - --fa: "\f5ae"; } + --fa: '\f5ae'; +} .fa-pencil-ruler { - --fa: "\f5ae"; } + --fa: '\f5ae'; +} .fa-people-arrows { - --fa: "\e068"; } + --fa: '\e068'; +} .fa-people-arrows-left-right { - --fa: "\e068"; } + --fa: '\e068'; +} .fa-mars-and-venus-burst { - --fa: "\e523"; } + --fa: '\e523'; +} .fa-square-caret-right { - --fa: "\f152"; } + --fa: '\f152'; +} .fa-caret-square-right { - --fa: "\f152"; } + --fa: '\f152'; +} .fa-scissors { - --fa: "\f0c4"; } + --fa: '\f0c4'; +} .fa-cut { - --fa: "\f0c4"; } + --fa: '\f0c4'; +} .fa-sun-plant-wilt { - --fa: "\e57a"; } + --fa: '\e57a'; +} .fa-toilets-portable { - --fa: "\e584"; } + --fa: '\e584'; +} .fa-hockey-puck { - --fa: "\f453"; } + --fa: '\f453'; +} .fa-table { - --fa: "\f0ce"; } + --fa: '\f0ce'; +} .fa-magnifying-glass-arrow-right { - --fa: "\e521"; } + --fa: '\e521'; +} .fa-tachograph-digital { - --fa: "\f566"; } + --fa: '\f566'; +} .fa-digital-tachograph { - --fa: "\f566"; } + --fa: '\f566'; +} .fa-users-slash { - --fa: "\e073"; } + --fa: '\e073'; +} .fa-clover { - --fa: "\e139"; } + --fa: '\e139'; +} .fa-reply { - --fa: "\f3e5"; } + --fa: '\f3e5'; +} .fa-mail-reply { - --fa: "\f3e5"; } + --fa: '\f3e5'; +} .fa-star-and-crescent { - --fa: "\f699"; } + --fa: '\f699'; +} .fa-house-fire { - --fa: "\e50c"; } + --fa: '\e50c'; +} .fa-square-minus { - --fa: "\f146"; } + --fa: '\f146'; +} .fa-minus-square { - --fa: "\f146"; } + --fa: '\f146'; +} .fa-helicopter { - --fa: "\f533"; } + --fa: '\f533'; +} .fa-compass { - --fa: "\f14e"; } + --fa: '\f14e'; +} .fa-square-caret-down { - --fa: "\f150"; } + --fa: '\f150'; +} .fa-caret-square-down { - --fa: "\f150"; } + --fa: '\f150'; +} .fa-file-circle-question { - --fa: "\e4ef"; } + --fa: '\e4ef'; +} .fa-laptop-code { - --fa: "\f5fc"; } + --fa: '\f5fc'; +} .fa-swatchbook { - --fa: "\f5c3"; } + --fa: '\f5c3'; +} .fa-prescription-bottle { - --fa: "\f485"; } + --fa: '\f485'; +} .fa-bars { - --fa: "\f0c9"; } + --fa: '\f0c9'; +} .fa-navicon { - --fa: "\f0c9"; } + --fa: '\f0c9'; +} .fa-people-group { - --fa: "\e533"; } + --fa: '\e533'; +} .fa-hourglass-end { - --fa: "\f253"; } + --fa: '\f253'; +} .fa-hourglass-3 { - --fa: "\f253"; } + --fa: '\f253'; +} .fa-heart-crack { - --fa: "\f7a9"; } + --fa: '\f7a9'; +} .fa-heart-broken { - --fa: "\f7a9"; } + --fa: '\f7a9'; +} .fa-square-up-right { - --fa: "\f360"; } + --fa: '\f360'; +} .fa-external-link-square-alt { - --fa: "\f360"; } + --fa: '\f360'; +} .fa-face-kiss-beam { - --fa: "\f597"; } + --fa: '\f597'; +} .fa-kiss-beam { - --fa: "\f597"; } + --fa: '\f597'; +} .fa-film { - --fa: "\f008"; } + --fa: '\f008'; +} .fa-ruler-horizontal { - --fa: "\f547"; } + --fa: '\f547'; +} .fa-people-robbery { - --fa: "\e536"; } + --fa: '\e536'; +} .fa-lightbulb { - --fa: "\f0eb"; } + --fa: '\f0eb'; +} .fa-caret-left { - --fa: "\f0d9"; } + --fa: '\f0d9'; +} .fa-circle-exclamation { - --fa: "\f06a"; } + --fa: '\f06a'; +} .fa-exclamation-circle { - --fa: "\f06a"; } + --fa: '\f06a'; +} .fa-school-circle-xmark { - --fa: "\e56d"; } + --fa: '\e56d'; +} .fa-arrow-right-from-bracket { - --fa: "\f08b"; } + --fa: '\f08b'; +} .fa-sign-out { - --fa: "\f08b"; } + --fa: '\f08b'; +} .fa-circle-chevron-down { - --fa: "\f13a"; } + --fa: '\f13a'; +} .fa-chevron-circle-down { - --fa: "\f13a"; } + --fa: '\f13a'; +} .fa-unlock-keyhole { - --fa: "\f13e"; } + --fa: '\f13e'; +} .fa-unlock-alt { - --fa: "\f13e"; } + --fa: '\f13e'; +} .fa-cloud-showers-heavy { - --fa: "\f740"; } + --fa: '\f740'; +} .fa-headphones-simple { - --fa: "\f58f"; } + --fa: '\f58f'; +} .fa-headphones-alt { - --fa: "\f58f"; } + --fa: '\f58f'; +} .fa-sitemap { - --fa: "\f0e8"; } + --fa: '\f0e8'; +} .fa-circle-dollar-to-slot { - --fa: "\f4b9"; } + --fa: '\f4b9'; +} .fa-donate { - --fa: "\f4b9"; } + --fa: '\f4b9'; +} .fa-memory { - --fa: "\f538"; } + --fa: '\f538'; +} .fa-road-spikes { - --fa: "\e568"; } + --fa: '\e568'; +} .fa-fire-burner { - --fa: "\e4f1"; } + --fa: '\e4f1'; +} .fa-flag { - --fa: "\f024"; } + --fa: '\f024'; +} .fa-hanukiah { - --fa: "\f6e6"; } + --fa: '\f6e6'; +} .fa-feather { - --fa: "\f52d"; } + --fa: '\f52d'; +} .fa-volume-low { - --fa: "\f027"; } + --fa: '\f027'; +} .fa-volume-down { - --fa: "\f027"; } + --fa: '\f027'; +} .fa-comment-slash { - --fa: "\f4b3"; } + --fa: '\f4b3'; +} .fa-cloud-sun-rain { - --fa: "\f743"; } + --fa: '\f743'; +} .fa-compress { - --fa: "\f066"; } + --fa: '\f066'; +} .fa-wheat-awn { - --fa: "\e2cd"; } + --fa: '\e2cd'; +} .fa-wheat-alt { - --fa: "\e2cd"; } + --fa: '\e2cd'; +} .fa-ankh { - --fa: "\f644"; } + --fa: '\f644'; +} .fa-hands-holding-child { - --fa: "\e4fa"; } + --fa: '\e4fa'; +} .fa-asterisk { - --fa: "\2a"; } + --fa: '\2a'; +} .fa-square-check { - --fa: "\f14a"; } + --fa: '\f14a'; +} .fa-check-square { - --fa: "\f14a"; } + --fa: '\f14a'; +} .fa-peseta-sign { - --fa: "\e221"; } + --fa: '\e221'; +} .fa-heading { - --fa: "\f1dc"; } + --fa: '\f1dc'; +} .fa-header { - --fa: "\f1dc"; } + --fa: '\f1dc'; +} .fa-ghost { - --fa: "\f6e2"; } + --fa: '\f6e2'; +} .fa-list { - --fa: "\f03a"; } + --fa: '\f03a'; +} .fa-list-squares { - --fa: "\f03a"; } + --fa: '\f03a'; +} .fa-square-phone-flip { - --fa: "\f87b"; } + --fa: '\f87b'; +} .fa-phone-square-alt { - --fa: "\f87b"; } + --fa: '\f87b'; +} .fa-cart-plus { - --fa: "\f217"; } + --fa: '\f217'; +} .fa-gamepad { - --fa: "\f11b"; } + --fa: '\f11b'; +} .fa-circle-dot { - --fa: "\f192"; } + --fa: '\f192'; +} .fa-dot-circle { - --fa: "\f192"; } + --fa: '\f192'; +} .fa-face-dizzy { - --fa: "\f567"; } + --fa: '\f567'; +} .fa-dizzy { - --fa: "\f567"; } + --fa: '\f567'; +} .fa-egg { - --fa: "\f7fb"; } + --fa: '\f7fb'; +} .fa-house-medical-circle-xmark { - --fa: "\e513"; } + --fa: '\e513'; +} .fa-campground { - --fa: "\f6bb"; } + --fa: '\f6bb'; +} .fa-folder-plus { - --fa: "\f65e"; } + --fa: '\f65e'; +} .fa-futbol { - --fa: "\f1e3"; } + --fa: '\f1e3'; +} .fa-futbol-ball { - --fa: "\f1e3"; } + --fa: '\f1e3'; +} .fa-soccer-ball { - --fa: "\f1e3"; } + --fa: '\f1e3'; +} .fa-paintbrush { - --fa: "\f1fc"; } + --fa: '\f1fc'; +} .fa-paint-brush { - --fa: "\f1fc"; } + --fa: '\f1fc'; +} .fa-lock { - --fa: "\f023"; } + --fa: '\f023'; +} .fa-gas-pump { - --fa: "\f52f"; } + --fa: '\f52f'; +} .fa-hot-tub-person { - --fa: "\f593"; } + --fa: '\f593'; +} .fa-hot-tub { - --fa: "\f593"; } + --fa: '\f593'; +} .fa-map-location { - --fa: "\f59f"; } + --fa: '\f59f'; +} .fa-map-marked { - --fa: "\f59f"; } + --fa: '\f59f'; +} .fa-house-flood-water { - --fa: "\e50e"; } + --fa: '\e50e'; +} .fa-tree { - --fa: "\f1bb"; } + --fa: '\f1bb'; +} .fa-bridge-lock { - --fa: "\e4cc"; } + --fa: '\e4cc'; +} .fa-sack-dollar { - --fa: "\f81d"; } + --fa: '\f81d'; +} .fa-pen-to-square { - --fa: "\f044"; } + --fa: '\f044'; +} .fa-edit { - --fa: "\f044"; } + --fa: '\f044'; +} .fa-car-side { - --fa: "\f5e4"; } + --fa: '\f5e4'; +} .fa-share-nodes { - --fa: "\f1e0"; } + --fa: '\f1e0'; +} .fa-share-alt { - --fa: "\f1e0"; } + --fa: '\f1e0'; +} .fa-heart-circle-minus { - --fa: "\e4ff"; } + --fa: '\e4ff'; +} .fa-hourglass-half { - --fa: "\f252"; } + --fa: '\f252'; +} .fa-hourglass-2 { - --fa: "\f252"; } + --fa: '\f252'; +} .fa-microscope { - --fa: "\f610"; } + --fa: '\f610'; +} .fa-sink { - --fa: "\e06d"; } + --fa: '\e06d'; +} .fa-bag-shopping { - --fa: "\f290"; } + --fa: '\f290'; +} .fa-shopping-bag { - --fa: "\f290"; } + --fa: '\f290'; +} .fa-arrow-down-z-a { - --fa: "\f881"; } + --fa: '\f881'; +} .fa-sort-alpha-desc { - --fa: "\f881"; } + --fa: '\f881'; +} .fa-sort-alpha-down-alt { - --fa: "\f881"; } + --fa: '\f881'; +} .fa-mitten { - --fa: "\f7b5"; } + --fa: '\f7b5'; +} .fa-person-rays { - --fa: "\e54d"; } + --fa: '\e54d'; +} .fa-users { - --fa: "\f0c0"; } + --fa: '\f0c0'; +} .fa-eye-slash { - --fa: "\f070"; } + --fa: '\f070'; +} .fa-flask-vial { - --fa: "\e4f3"; } + --fa: '\e4f3'; +} .fa-hand { - --fa: "\f256"; } + --fa: '\f256'; +} .fa-hand-paper { - --fa: "\f256"; } + --fa: '\f256'; +} .fa-om { - --fa: "\f679"; } + --fa: '\f679'; +} .fa-worm { - --fa: "\e599"; } + --fa: '\e599'; +} .fa-house-circle-xmark { - --fa: "\e50b"; } + --fa: '\e50b'; +} .fa-plug { - --fa: "\f1e6"; } + --fa: '\f1e6'; +} .fa-chevron-up { - --fa: "\f077"; } + --fa: '\f077'; +} .fa-hand-spock { - --fa: "\f259"; } + --fa: '\f259'; +} .fa-stopwatch { - --fa: "\f2f2"; } + --fa: '\f2f2'; +} .fa-face-kiss { - --fa: "\f596"; } + --fa: '\f596'; +} .fa-kiss { - --fa: "\f596"; } + --fa: '\f596'; +} .fa-bridge-circle-xmark { - --fa: "\e4cb"; } + --fa: '\e4cb'; +} .fa-face-grin-tongue { - --fa: "\f589"; } + --fa: '\f589'; +} .fa-grin-tongue { - --fa: "\f589"; } + --fa: '\f589'; +} .fa-chess-bishop { - --fa: "\f43a"; } + --fa: '\f43a'; +} .fa-face-grin-wink { - --fa: "\f58c"; } + --fa: '\f58c'; +} .fa-grin-wink { - --fa: "\f58c"; } + --fa: '\f58c'; +} .fa-ear-deaf { - --fa: "\f2a4"; } + --fa: '\f2a4'; +} .fa-deaf { - --fa: "\f2a4"; } + --fa: '\f2a4'; +} .fa-deafness { - --fa: "\f2a4"; } + --fa: '\f2a4'; +} .fa-hard-of-hearing { - --fa: "\f2a4"; } + --fa: '\f2a4'; +} .fa-road-circle-check { - --fa: "\e564"; } + --fa: '\e564'; +} .fa-dice-five { - --fa: "\f523"; } + --fa: '\f523'; +} .fa-square-rss { - --fa: "\f143"; } + --fa: '\f143'; +} .fa-rss-square { - --fa: "\f143"; } + --fa: '\f143'; +} .fa-land-mine-on { - --fa: "\e51b"; } + --fa: '\e51b'; +} .fa-i-cursor { - --fa: "\f246"; } + --fa: '\f246'; +} .fa-stamp { - --fa: "\f5bf"; } + --fa: '\f5bf'; +} .fa-stairs { - --fa: "\e289"; } + --fa: '\e289'; +} .fa-i { - --fa: "\49"; } + --fa: '\49'; +} .fa-hryvnia-sign { - --fa: "\f6f2"; } + --fa: '\f6f2'; +} .fa-hryvnia { - --fa: "\f6f2"; } + --fa: '\f6f2'; +} .fa-pills { - --fa: "\f484"; } + --fa: '\f484'; +} .fa-face-grin-wide { - --fa: "\f581"; } + --fa: '\f581'; +} .fa-grin-alt { - --fa: "\f581"; } + --fa: '\f581'; +} .fa-tooth { - --fa: "\f5c9"; } + --fa: '\f5c9'; +} .fa-v { - --fa: "\56"; } + --fa: '\56'; +} .fa-bangladeshi-taka-sign { - --fa: "\e2e6"; } + --fa: '\e2e6'; +} .fa-bicycle { - --fa: "\f206"; } + --fa: '\f206'; +} .fa-staff-snake { - --fa: "\e579"; } + --fa: '\e579'; +} .fa-rod-asclepius { - --fa: "\e579"; } + --fa: '\e579'; +} .fa-rod-snake { - --fa: "\e579"; } + --fa: '\e579'; +} .fa-staff-aesculapius { - --fa: "\e579"; } + --fa: '\e579'; +} .fa-head-side-cough-slash { - --fa: "\e062"; } + --fa: '\e062'; +} .fa-truck-medical { - --fa: "\f0f9"; } + --fa: '\f0f9'; +} .fa-ambulance { - --fa: "\f0f9"; } + --fa: '\f0f9'; +} .fa-wheat-awn-circle-exclamation { - --fa: "\e598"; } + --fa: '\e598'; +} .fa-snowman { - --fa: "\f7d0"; } + --fa: '\f7d0'; +} .fa-mortar-pestle { - --fa: "\f5a7"; } + --fa: '\f5a7'; +} .fa-road-barrier { - --fa: "\e562"; } + --fa: '\e562'; +} .fa-school { - --fa: "\f549"; } + --fa: '\f549'; +} .fa-igloo { - --fa: "\f7ae"; } + --fa: '\f7ae'; +} .fa-joint { - --fa: "\f595"; } + --fa: '\f595'; +} .fa-angle-right { - --fa: "\f105"; } + --fa: '\f105'; +} .fa-horse { - --fa: "\f6f0"; } + --fa: '\f6f0'; +} .fa-q { - --fa: "\51"; } + --fa: '\51'; +} .fa-g { - --fa: "\47"; } + --fa: '\47'; +} .fa-notes-medical { - --fa: "\f481"; } + --fa: '\f481'; +} .fa-temperature-half { - --fa: "\f2c9"; } + --fa: '\f2c9'; +} .fa-temperature-2 { - --fa: "\f2c9"; } + --fa: '\f2c9'; +} .fa-thermometer-2 { - --fa: "\f2c9"; } + --fa: '\f2c9'; +} .fa-thermometer-half { - --fa: "\f2c9"; } + --fa: '\f2c9'; +} .fa-dong-sign { - --fa: "\e169"; } + --fa: '\e169'; +} .fa-capsules { - --fa: "\f46b"; } + --fa: '\f46b'; +} .fa-poo-storm { - --fa: "\f75a"; } + --fa: '\f75a'; +} .fa-poo-bolt { - --fa: "\f75a"; } + --fa: '\f75a'; +} .fa-face-frown-open { - --fa: "\f57a"; } + --fa: '\f57a'; +} .fa-frown-open { - --fa: "\f57a"; } + --fa: '\f57a'; +} .fa-hand-point-up { - --fa: "\f0a6"; } + --fa: '\f0a6'; +} .fa-money-bill { - --fa: "\f0d6"; } + --fa: '\f0d6'; +} .fa-bookmark { - --fa: "\f02e"; } + --fa: '\f02e'; +} .fa-align-justify { - --fa: "\f039"; } + --fa: '\f039'; +} .fa-umbrella-beach { - --fa: "\f5ca"; } + --fa: '\f5ca'; +} .fa-helmet-un { - --fa: "\e503"; } + --fa: '\e503'; +} .fa-bullseye { - --fa: "\f140"; } + --fa: '\f140'; +} .fa-bacon { - --fa: "\f7e5"; } + --fa: '\f7e5'; +} .fa-hand-point-down { - --fa: "\f0a7"; } + --fa: '\f0a7'; +} .fa-arrow-up-from-bracket { - --fa: "\e09a"; } + --fa: '\e09a'; +} .fa-folder { - --fa: "\f07b"; } + --fa: '\f07b'; +} .fa-folder-blank { - --fa: "\f07b"; } + --fa: '\f07b'; +} .fa-file-waveform { - --fa: "\f478"; } + --fa: '\f478'; +} .fa-file-medical-alt { - --fa: "\f478"; } + --fa: '\f478'; +} .fa-radiation { - --fa: "\f7b9"; } + --fa: '\f7b9'; +} .fa-chart-simple { - --fa: "\e473"; } + --fa: '\e473'; +} .fa-mars-stroke { - --fa: "\f229"; } + --fa: '\f229'; +} .fa-vial { - --fa: "\f492"; } + --fa: '\f492'; +} .fa-gauge { - --fa: "\f624"; } + --fa: '\f624'; +} .fa-dashboard { - --fa: "\f624"; } + --fa: '\f624'; +} .fa-gauge-med { - --fa: "\f624"; } + --fa: '\f624'; +} .fa-tachometer-alt-average { - --fa: "\f624"; } + --fa: '\f624'; +} .fa-wand-magic-sparkles { - --fa: "\e2ca"; } + --fa: '\e2ca'; +} .fa-magic-wand-sparkles { - --fa: "\e2ca"; } + --fa: '\e2ca'; +} .fa-e { - --fa: "\45"; } + --fa: '\45'; +} .fa-pen-clip { - --fa: "\f305"; } + --fa: '\f305'; +} .fa-pen-alt { - --fa: "\f305"; } + --fa: '\f305'; +} .fa-bridge-circle-exclamation { - --fa: "\e4ca"; } + --fa: '\e4ca'; +} .fa-user { - --fa: "\f007"; } + --fa: '\f007'; +} .fa-school-circle-check { - --fa: "\e56b"; } + --fa: '\e56b'; +} .fa-dumpster { - --fa: "\f793"; } + --fa: '\f793'; +} .fa-van-shuttle { - --fa: "\f5b6"; } + --fa: '\f5b6'; +} .fa-shuttle-van { - --fa: "\f5b6"; } + --fa: '\f5b6'; +} .fa-building-user { - --fa: "\e4da"; } + --fa: '\e4da'; +} .fa-square-caret-left { - --fa: "\f191"; } + --fa: '\f191'; +} .fa-caret-square-left { - --fa: "\f191"; } + --fa: '\f191'; +} .fa-highlighter { - --fa: "\f591"; } + --fa: '\f591'; +} .fa-key { - --fa: "\f084"; } + --fa: '\f084'; +} .fa-bullhorn { - --fa: "\f0a1"; } + --fa: '\f0a1'; +} .fa-globe { - --fa: "\f0ac"; } + --fa: '\f0ac'; +} .fa-synagogue { - --fa: "\f69b"; } + --fa: '\f69b'; +} .fa-person-half-dress { - --fa: "\e548"; } + --fa: '\e548'; +} .fa-road-bridge { - --fa: "\e563"; } + --fa: '\e563'; +} .fa-location-arrow { - --fa: "\f124"; } + --fa: '\f124'; +} .fa-c { - --fa: "\43"; } + --fa: '\43'; +} .fa-tablet-button { - --fa: "\f10a"; } + --fa: '\f10a'; +} .fa-building-lock { - --fa: "\e4d6"; } + --fa: '\e4d6'; +} .fa-pizza-slice { - --fa: "\f818"; } + --fa: '\f818'; +} .fa-money-bill-wave { - --fa: "\f53a"; } + --fa: '\f53a'; +} .fa-chart-area { - --fa: "\f1fe"; } + --fa: '\f1fe'; +} .fa-area-chart { - --fa: "\f1fe"; } + --fa: '\f1fe'; +} .fa-house-flag { - --fa: "\e50d"; } + --fa: '\e50d'; +} .fa-person-circle-minus { - --fa: "\e540"; } + --fa: '\e540'; +} .fa-ban { - --fa: "\f05e"; } + --fa: '\f05e'; +} .fa-cancel { - --fa: "\f05e"; } + --fa: '\f05e'; +} .fa-camera-rotate { - --fa: "\e0d8"; } + --fa: '\e0d8'; +} .fa-spray-can-sparkles { - --fa: "\f5d0"; } + --fa: '\f5d0'; +} .fa-air-freshener { - --fa: "\f5d0"; } + --fa: '\f5d0'; +} .fa-star { - --fa: "\f005"; } + --fa: '\f005'; +} .fa-repeat { - --fa: "\f363"; } + --fa: '\f363'; +} .fa-cross { - --fa: "\f654"; } + --fa: '\f654'; +} .fa-box { - --fa: "\f466"; } + --fa: '\f466'; +} .fa-venus-mars { - --fa: "\f228"; } + --fa: '\f228'; +} .fa-arrow-pointer { - --fa: "\f245"; } + --fa: '\f245'; +} .fa-mouse-pointer { - --fa: "\f245"; } + --fa: '\f245'; +} .fa-maximize { - --fa: "\f31e"; } + --fa: '\f31e'; +} .fa-expand-arrows-alt { - --fa: "\f31e"; } + --fa: '\f31e'; +} .fa-charging-station { - --fa: "\f5e7"; } + --fa: '\f5e7'; +} .fa-shapes { - --fa: "\f61f"; } + --fa: '\f61f'; +} .fa-triangle-circle-square { - --fa: "\f61f"; } + --fa: '\f61f'; +} .fa-shuffle { - --fa: "\f074"; } + --fa: '\f074'; +} .fa-random { - --fa: "\f074"; } + --fa: '\f074'; +} .fa-person-running { - --fa: "\f70c"; } + --fa: '\f70c'; +} .fa-running { - --fa: "\f70c"; } + --fa: '\f70c'; +} .fa-mobile-retro { - --fa: "\e527"; } + --fa: '\e527'; +} .fa-grip-lines-vertical { - --fa: "\f7a5"; } + --fa: '\f7a5'; +} .fa-spider { - --fa: "\f717"; } + --fa: '\f717'; +} .fa-hands-bound { - --fa: "\e4f9"; } + --fa: '\e4f9'; +} .fa-file-invoice-dollar { - --fa: "\f571"; } + --fa: '\f571'; +} .fa-plane-circle-exclamation { - --fa: "\e556"; } + --fa: '\e556'; +} .fa-x-ray { - --fa: "\f497"; } + --fa: '\f497'; +} .fa-spell-check { - --fa: "\f891"; } + --fa: '\f891'; +} .fa-slash { - --fa: "\f715"; } + --fa: '\f715'; +} .fa-computer-mouse { - --fa: "\f8cc"; } + --fa: '\f8cc'; +} .fa-mouse { - --fa: "\f8cc"; } + --fa: '\f8cc'; +} .fa-arrow-right-to-bracket { - --fa: "\f090"; } + --fa: '\f090'; +} .fa-sign-in { - --fa: "\f090"; } + --fa: '\f090'; +} .fa-shop-slash { - --fa: "\e070"; } + --fa: '\e070'; +} .fa-store-alt-slash { - --fa: "\e070"; } + --fa: '\e070'; +} .fa-server { - --fa: "\f233"; } + --fa: '\f233'; +} .fa-virus-covid-slash { - --fa: "\e4a9"; } + --fa: '\e4a9'; +} .fa-shop-lock { - --fa: "\e4a5"; } + --fa: '\e4a5'; +} .fa-hourglass-start { - --fa: "\f251"; } + --fa: '\f251'; +} .fa-hourglass-1 { - --fa: "\f251"; } + --fa: '\f251'; +} .fa-blender-phone { - --fa: "\f6b6"; } + --fa: '\f6b6'; +} .fa-building-wheat { - --fa: "\e4db"; } + --fa: '\e4db'; +} .fa-person-breastfeeding { - --fa: "\e53a"; } + --fa: '\e53a'; +} .fa-right-to-bracket { - --fa: "\f2f6"; } + --fa: '\f2f6'; +} .fa-sign-in-alt { - --fa: "\f2f6"; } + --fa: '\f2f6'; +} .fa-venus { - --fa: "\f221"; } + --fa: '\f221'; +} .fa-passport { - --fa: "\f5ab"; } + --fa: '\f5ab'; +} .fa-thumbtack-slash { - --fa: "\e68f"; } + --fa: '\e68f'; +} .fa-thumb-tack-slash { - --fa: "\e68f"; } + --fa: '\e68f'; +} .fa-heart-pulse { - --fa: "\f21e"; } + --fa: '\f21e'; +} .fa-heartbeat { - --fa: "\f21e"; } + --fa: '\f21e'; +} .fa-people-carry-box { - --fa: "\f4ce"; } + --fa: '\f4ce'; +} .fa-people-carry { - --fa: "\f4ce"; } + --fa: '\f4ce'; +} .fa-temperature-high { - --fa: "\f769"; } + --fa: '\f769'; +} .fa-microchip { - --fa: "\f2db"; } + --fa: '\f2db'; +} .fa-crown { - --fa: "\f521"; } + --fa: '\f521'; +} .fa-weight-hanging { - --fa: "\f5cd"; } + --fa: '\f5cd'; +} .fa-xmarks-lines { - --fa: "\e59a"; } + --fa: '\e59a'; +} .fa-file-prescription { - --fa: "\f572"; } + --fa: '\f572'; +} .fa-weight-scale { - --fa: "\f496"; } + --fa: '\f496'; +} .fa-weight { - --fa: "\f496"; } + --fa: '\f496'; +} .fa-user-group { - --fa: "\f500"; } + --fa: '\f500'; +} .fa-user-friends { - --fa: "\f500"; } + --fa: '\f500'; +} .fa-arrow-up-a-z { - --fa: "\f15e"; } + --fa: '\f15e'; +} .fa-sort-alpha-up { - --fa: "\f15e"; } + --fa: '\f15e'; +} .fa-chess-knight { - --fa: "\f441"; } + --fa: '\f441'; +} .fa-face-laugh-squint { - --fa: "\f59b"; } + --fa: '\f59b'; +} .fa-laugh-squint { - --fa: "\f59b"; } + --fa: '\f59b'; +} .fa-wheelchair { - --fa: "\f193"; } + --fa: '\f193'; +} .fa-circle-arrow-up { - --fa: "\f0aa"; } + --fa: '\f0aa'; +} .fa-arrow-circle-up { - --fa: "\f0aa"; } + --fa: '\f0aa'; +} .fa-toggle-on { - --fa: "\f205"; } + --fa: '\f205'; +} .fa-person-walking { - --fa: "\f554"; } + --fa: '\f554'; +} .fa-walking { - --fa: "\f554"; } + --fa: '\f554'; +} .fa-l { - --fa: "\4c"; } + --fa: '\4c'; +} .fa-fire { - --fa: "\f06d"; } + --fa: '\f06d'; +} .fa-bed-pulse { - --fa: "\f487"; } + --fa: '\f487'; +} .fa-procedures { - --fa: "\f487"; } + --fa: '\f487'; +} .fa-shuttle-space { - --fa: "\f197"; } + --fa: '\f197'; +} .fa-space-shuttle { - --fa: "\f197"; } + --fa: '\f197'; +} .fa-face-laugh { - --fa: "\f599"; } + --fa: '\f599'; +} .fa-laugh { - --fa: "\f599"; } + --fa: '\f599'; +} .fa-folder-open { - --fa: "\f07c"; } + --fa: '\f07c'; +} .fa-heart-circle-plus { - --fa: "\e500"; } + --fa: '\e500'; +} .fa-code-fork { - --fa: "\e13b"; } + --fa: '\e13b'; +} .fa-city { - --fa: "\f64f"; } + --fa: '\f64f'; +} .fa-microphone-lines { - --fa: "\f3c9"; } + --fa: '\f3c9'; +} .fa-microphone-alt { - --fa: "\f3c9"; } + --fa: '\f3c9'; +} .fa-pepper-hot { - --fa: "\f816"; } + --fa: '\f816'; +} .fa-unlock { - --fa: "\f09c"; } + --fa: '\f09c'; +} .fa-colon-sign { - --fa: "\e140"; } + --fa: '\e140'; +} .fa-headset { - --fa: "\f590"; } + --fa: '\f590'; +} .fa-store-slash { - --fa: "\e071"; } + --fa: '\e071'; +} .fa-road-circle-xmark { - --fa: "\e566"; } + --fa: '\e566'; +} .fa-user-minus { - --fa: "\f503"; } + --fa: '\f503'; +} .fa-mars-stroke-up { - --fa: "\f22a"; } + --fa: '\f22a'; +} .fa-mars-stroke-v { - --fa: "\f22a"; } + --fa: '\f22a'; +} .fa-champagne-glasses { - --fa: "\f79f"; } + --fa: '\f79f'; +} .fa-glass-cheers { - --fa: "\f79f"; } + --fa: '\f79f'; +} .fa-clipboard { - --fa: "\f328"; } + --fa: '\f328'; +} .fa-house-circle-exclamation { - --fa: "\e50a"; } + --fa: '\e50a'; +} .fa-file-arrow-up { - --fa: "\f574"; } + --fa: '\f574'; +} .fa-file-upload { - --fa: "\f574"; } + --fa: '\f574'; +} .fa-wifi { - --fa: "\f1eb"; } + --fa: '\f1eb'; +} .fa-wifi-3 { - --fa: "\f1eb"; } + --fa: '\f1eb'; +} .fa-wifi-strong { - --fa: "\f1eb"; } + --fa: '\f1eb'; +} .fa-bath { - --fa: "\f2cd"; } + --fa: '\f2cd'; +} .fa-bathtub { - --fa: "\f2cd"; } + --fa: '\f2cd'; +} .fa-underline { - --fa: "\f0cd"; } + --fa: '\f0cd'; +} .fa-user-pen { - --fa: "\f4ff"; } + --fa: '\f4ff'; +} .fa-user-edit { - --fa: "\f4ff"; } + --fa: '\f4ff'; +} .fa-signature { - --fa: "\f5b7"; } + --fa: '\f5b7'; +} .fa-stroopwafel { - --fa: "\f551"; } + --fa: '\f551'; +} .fa-bold { - --fa: "\f032"; } + --fa: '\f032'; +} .fa-anchor-lock { - --fa: "\e4ad"; } + --fa: '\e4ad'; +} .fa-building-ngo { - --fa: "\e4d7"; } + --fa: '\e4d7'; +} .fa-manat-sign { - --fa: "\e1d5"; } + --fa: '\e1d5'; +} .fa-not-equal { - --fa: "\f53e"; } + --fa: '\f53e'; +} .fa-border-top-left { - --fa: "\f853"; } + --fa: '\f853'; +} .fa-border-style { - --fa: "\f853"; } + --fa: '\f853'; +} .fa-map-location-dot { - --fa: "\f5a0"; } + --fa: '\f5a0'; +} .fa-map-marked-alt { - --fa: "\f5a0"; } + --fa: '\f5a0'; +} .fa-jedi { - --fa: "\f669"; } + --fa: '\f669'; +} .fa-square-poll-vertical { - --fa: "\f681"; } + --fa: '\f681'; +} .fa-poll { - --fa: "\f681"; } + --fa: '\f681'; +} .fa-mug-hot { - --fa: "\f7b6"; } + --fa: '\f7b6'; +} .fa-car-battery { - --fa: "\f5df"; } + --fa: '\f5df'; +} .fa-battery-car { - --fa: "\f5df"; } + --fa: '\f5df'; +} .fa-gift { - --fa: "\f06b"; } + --fa: '\f06b'; +} .fa-dice-two { - --fa: "\f528"; } + --fa: '\f528'; +} .fa-chess-queen { - --fa: "\f445"; } + --fa: '\f445'; +} .fa-glasses { - --fa: "\f530"; } + --fa: '\f530'; +} .fa-chess-board { - --fa: "\f43c"; } + --fa: '\f43c'; +} .fa-building-circle-check { - --fa: "\e4d2"; } + --fa: '\e4d2'; +} .fa-person-chalkboard { - --fa: "\e53d"; } + --fa: '\e53d'; +} .fa-mars-stroke-right { - --fa: "\f22b"; } + --fa: '\f22b'; +} .fa-mars-stroke-h { - --fa: "\f22b"; } + --fa: '\f22b'; +} .fa-hand-back-fist { - --fa: "\f255"; } + --fa: '\f255'; +} .fa-hand-rock { - --fa: "\f255"; } + --fa: '\f255'; +} .fa-square-caret-up { - --fa: "\f151"; } + --fa: '\f151'; +} .fa-caret-square-up { - --fa: "\f151"; } + --fa: '\f151'; +} .fa-cloud-showers-water { - --fa: "\e4e4"; } + --fa: '\e4e4'; +} .fa-chart-bar { - --fa: "\f080"; } + --fa: '\f080'; +} .fa-bar-chart { - --fa: "\f080"; } + --fa: '\f080'; +} .fa-hands-bubbles { - --fa: "\e05e"; } + --fa: '\e05e'; +} .fa-hands-wash { - --fa: "\e05e"; } + --fa: '\e05e'; +} .fa-less-than-equal { - --fa: "\f537"; } + --fa: '\f537'; +} .fa-train { - --fa: "\f238"; } + --fa: '\f238'; +} .fa-eye-low-vision { - --fa: "\f2a8"; } + --fa: '\f2a8'; +} .fa-low-vision { - --fa: "\f2a8"; } + --fa: '\f2a8'; +} .fa-crow { - --fa: "\f520"; } + --fa: '\f520'; +} .fa-sailboat { - --fa: "\e445"; } + --fa: '\e445'; +} .fa-window-restore { - --fa: "\f2d2"; } + --fa: '\f2d2'; +} .fa-square-plus { - --fa: "\f0fe"; } + --fa: '\f0fe'; +} .fa-plus-square { - --fa: "\f0fe"; } + --fa: '\f0fe'; +} .fa-torii-gate { - --fa: "\f6a1"; } + --fa: '\f6a1'; +} .fa-frog { - --fa: "\f52e"; } + --fa: '\f52e'; +} .fa-bucket { - --fa: "\e4cf"; } + --fa: '\e4cf'; +} .fa-image { - --fa: "\f03e"; } + --fa: '\f03e'; +} .fa-microphone { - --fa: "\f130"; } + --fa: '\f130'; +} .fa-cow { - --fa: "\f6c8"; } + --fa: '\f6c8'; +} .fa-caret-up { - --fa: "\f0d8"; } + --fa: '\f0d8'; +} .fa-screwdriver { - --fa: "\f54a"; } + --fa: '\f54a'; +} .fa-folder-closed { - --fa: "\e185"; } + --fa: '\e185'; +} .fa-house-tsunami { - --fa: "\e515"; } + --fa: '\e515'; +} .fa-square-nfi { - --fa: "\e576"; } + --fa: '\e576'; +} .fa-arrow-up-from-ground-water { - --fa: "\e4b5"; } + --fa: '\e4b5'; +} .fa-martini-glass { - --fa: "\f57b"; } + --fa: '\f57b'; +} .fa-glass-martini-alt { - --fa: "\f57b"; } + --fa: '\f57b'; +} .fa-square-binary { - --fa: "\e69b"; } + --fa: '\e69b'; +} .fa-rotate-left { - --fa: "\f2ea"; } + --fa: '\f2ea'; +} .fa-rotate-back { - --fa: "\f2ea"; } + --fa: '\f2ea'; +} .fa-rotate-backward { - --fa: "\f2ea"; } + --fa: '\f2ea'; +} .fa-undo-alt { - --fa: "\f2ea"; } + --fa: '\f2ea'; +} .fa-table-columns { - --fa: "\f0db"; } + --fa: '\f0db'; +} .fa-columns { - --fa: "\f0db"; } + --fa: '\f0db'; +} .fa-lemon { - --fa: "\f094"; } + --fa: '\f094'; +} .fa-head-side-mask { - --fa: "\e063"; } + --fa: '\e063'; +} .fa-handshake { - --fa: "\f2b5"; } + --fa: '\f2b5'; +} .fa-gem { - --fa: "\f3a5"; } + --fa: '\f3a5'; +} .fa-dolly { - --fa: "\f472"; } + --fa: '\f472'; +} .fa-dolly-box { - --fa: "\f472"; } + --fa: '\f472'; +} .fa-smoking { - --fa: "\f48d"; } + --fa: '\f48d'; +} .fa-minimize { - --fa: "\f78c"; } + --fa: '\f78c'; +} .fa-compress-arrows-alt { - --fa: "\f78c"; } + --fa: '\f78c'; +} .fa-monument { - --fa: "\f5a6"; } + --fa: '\f5a6'; +} .fa-snowplow { - --fa: "\f7d2"; } + --fa: '\f7d2'; +} .fa-angles-right { - --fa: "\f101"; } + --fa: '\f101'; +} .fa-angle-double-right { - --fa: "\f101"; } + --fa: '\f101'; +} .fa-cannabis { - --fa: "\f55f"; } + --fa: '\f55f'; +} .fa-circle-play { - --fa: "\f144"; } + --fa: '\f144'; +} .fa-play-circle { - --fa: "\f144"; } + --fa: '\f144'; +} .fa-tablets { - --fa: "\f490"; } + --fa: '\f490'; +} .fa-ethernet { - --fa: "\f796"; } + --fa: '\f796'; +} .fa-euro-sign { - --fa: "\f153"; } + --fa: '\f153'; +} .fa-eur { - --fa: "\f153"; } + --fa: '\f153'; +} .fa-euro { - --fa: "\f153"; } + --fa: '\f153'; +} .fa-chair { - --fa: "\f6c0"; } + --fa: '\f6c0'; +} .fa-circle-check { - --fa: "\f058"; } + --fa: '\f058'; +} .fa-check-circle { - --fa: "\f058"; } + --fa: '\f058'; +} .fa-circle-stop { - --fa: "\f28d"; } + --fa: '\f28d'; +} .fa-stop-circle { - --fa: "\f28d"; } + --fa: '\f28d'; +} .fa-compass-drafting { - --fa: "\f568"; } + --fa: '\f568'; +} .fa-drafting-compass { - --fa: "\f568"; } + --fa: '\f568'; +} .fa-plate-wheat { - --fa: "\e55a"; } + --fa: '\e55a'; +} .fa-icicles { - --fa: "\f7ad"; } + --fa: '\f7ad'; +} .fa-person-shelter { - --fa: "\e54f"; } + --fa: '\e54f'; +} .fa-neuter { - --fa: "\f22c"; } + --fa: '\f22c'; +} .fa-id-badge { - --fa: "\f2c1"; } + --fa: '\f2c1'; +} .fa-marker { - --fa: "\f5a1"; } + --fa: '\f5a1'; +} .fa-face-laugh-beam { - --fa: "\f59a"; } + --fa: '\f59a'; +} .fa-laugh-beam { - --fa: "\f59a"; } + --fa: '\f59a'; +} .fa-helicopter-symbol { - --fa: "\e502"; } + --fa: '\e502'; +} .fa-universal-access { - --fa: "\f29a"; } + --fa: '\f29a'; +} .fa-circle-chevron-up { - --fa: "\f139"; } + --fa: '\f139'; +} .fa-chevron-circle-up { - --fa: "\f139"; } + --fa: '\f139'; +} .fa-lari-sign { - --fa: "\e1c8"; } + --fa: '\e1c8'; +} .fa-volcano { - --fa: "\f770"; } + --fa: '\f770'; +} .fa-person-walking-dashed-line-arrow-right { - --fa: "\e553"; } + --fa: '\e553'; +} .fa-sterling-sign { - --fa: "\f154"; } + --fa: '\f154'; +} .fa-gbp { - --fa: "\f154"; } + --fa: '\f154'; +} .fa-pound-sign { - --fa: "\f154"; } + --fa: '\f154'; +} .fa-viruses { - --fa: "\e076"; } + --fa: '\e076'; +} .fa-square-person-confined { - --fa: "\e577"; } + --fa: '\e577'; +} .fa-user-tie { - --fa: "\f508"; } + --fa: '\f508'; +} .fa-arrow-down-long { - --fa: "\f175"; } + --fa: '\f175'; +} .fa-long-arrow-down { - --fa: "\f175"; } + --fa: '\f175'; +} .fa-tent-arrow-down-to-line { - --fa: "\e57e"; } + --fa: '\e57e'; +} .fa-certificate { - --fa: "\f0a3"; } + --fa: '\f0a3'; +} .fa-reply-all { - --fa: "\f122"; } + --fa: '\f122'; +} .fa-mail-reply-all { - --fa: "\f122"; } + --fa: '\f122'; +} .fa-suitcase { - --fa: "\f0f2"; } + --fa: '\f0f2'; +} .fa-person-skating { - --fa: "\f7c5"; } + --fa: '\f7c5'; +} .fa-skating { - --fa: "\f7c5"; } + --fa: '\f7c5'; +} .fa-filter-circle-dollar { - --fa: "\f662"; } + --fa: '\f662'; +} .fa-funnel-dollar { - --fa: "\f662"; } + --fa: '\f662'; +} .fa-camera-retro { - --fa: "\f083"; } + --fa: '\f083'; +} .fa-circle-arrow-down { - --fa: "\f0ab"; } + --fa: '\f0ab'; +} .fa-arrow-circle-down { - --fa: "\f0ab"; } + --fa: '\f0ab'; +} .fa-file-import { - --fa: "\f56f"; } + --fa: '\f56f'; +} .fa-arrow-right-to-file { - --fa: "\f56f"; } + --fa: '\f56f'; +} .fa-square-arrow-up-right { - --fa: "\f14c"; } + --fa: '\f14c'; +} .fa-external-link-square { - --fa: "\f14c"; } + --fa: '\f14c'; +} .fa-box-open { - --fa: "\f49e"; } + --fa: '\f49e'; +} .fa-scroll { - --fa: "\f70e"; } + --fa: '\f70e'; +} .fa-spa { - --fa: "\f5bb"; } + --fa: '\f5bb'; +} .fa-location-pin-lock { - --fa: "\e51f"; } + --fa: '\e51f'; +} .fa-pause { - --fa: "\f04c"; } + --fa: '\f04c'; +} .fa-hill-avalanche { - --fa: "\e507"; } + --fa: '\e507'; +} .fa-temperature-empty { - --fa: "\f2cb"; } + --fa: '\f2cb'; +} .fa-temperature-0 { - --fa: "\f2cb"; } + --fa: '\f2cb'; +} .fa-thermometer-0 { - --fa: "\f2cb"; } + --fa: '\f2cb'; +} .fa-thermometer-empty { - --fa: "\f2cb"; } + --fa: '\f2cb'; +} .fa-bomb { - --fa: "\f1e2"; } + --fa: '\f1e2'; +} .fa-registered { - --fa: "\f25d"; } + --fa: '\f25d'; +} .fa-address-card { - --fa: "\f2bb"; } + --fa: '\f2bb'; +} .fa-contact-card { - --fa: "\f2bb"; } + --fa: '\f2bb'; +} .fa-vcard { - --fa: "\f2bb"; } + --fa: '\f2bb'; +} .fa-scale-unbalanced-flip { - --fa: "\f516"; } + --fa: '\f516'; +} .fa-balance-scale-right { - --fa: "\f516"; } + --fa: '\f516'; +} .fa-subscript { - --fa: "\f12c"; } + --fa: '\f12c'; +} .fa-diamond-turn-right { - --fa: "\f5eb"; } + --fa: '\f5eb'; +} .fa-directions { - --fa: "\f5eb"; } + --fa: '\f5eb'; +} .fa-burst { - --fa: "\e4dc"; } + --fa: '\e4dc'; +} .fa-house-laptop { - --fa: "\e066"; } + --fa: '\e066'; +} .fa-laptop-house { - --fa: "\e066"; } + --fa: '\e066'; +} .fa-face-tired { - --fa: "\f5c8"; } + --fa: '\f5c8'; +} .fa-tired { - --fa: "\f5c8"; } + --fa: '\f5c8'; +} .fa-money-bills { - --fa: "\e1f3"; } + --fa: '\e1f3'; +} .fa-smog { - --fa: "\f75f"; } + --fa: '\f75f'; +} .fa-crutch { - --fa: "\f7f7"; } + --fa: '\f7f7'; +} .fa-cloud-arrow-up { - --fa: "\f0ee"; } + --fa: '\f0ee'; +} .fa-cloud-upload { - --fa: "\f0ee"; } + --fa: '\f0ee'; +} .fa-cloud-upload-alt { - --fa: "\f0ee"; } + --fa: '\f0ee'; +} .fa-palette { - --fa: "\f53f"; } + --fa: '\f53f'; +} .fa-arrows-turn-right { - --fa: "\e4c0"; } + --fa: '\e4c0'; +} .fa-vest { - --fa: "\e085"; } + --fa: '\e085'; +} .fa-ferry { - --fa: "\e4ea"; } + --fa: '\e4ea'; +} .fa-arrows-down-to-people { - --fa: "\e4b9"; } + --fa: '\e4b9'; +} .fa-seedling { - --fa: "\f4d8"; } + --fa: '\f4d8'; +} .fa-sprout { - --fa: "\f4d8"; } + --fa: '\f4d8'; +} .fa-left-right { - --fa: "\f337"; } + --fa: '\f337'; +} .fa-arrows-alt-h { - --fa: "\f337"; } + --fa: '\f337'; +} .fa-boxes-packing { - --fa: "\e4c7"; } + --fa: '\e4c7'; +} .fa-circle-arrow-left { - --fa: "\f0a8"; } + --fa: '\f0a8'; +} .fa-arrow-circle-left { - --fa: "\f0a8"; } + --fa: '\f0a8'; +} .fa-group-arrows-rotate { - --fa: "\e4f6"; } + --fa: '\e4f6'; +} .fa-bowl-food { - --fa: "\e4c6"; } + --fa: '\e4c6'; +} .fa-candy-cane { - --fa: "\f786"; } + --fa: '\f786'; +} .fa-arrow-down-wide-short { - --fa: "\f160"; } + --fa: '\f160'; +} .fa-sort-amount-asc { - --fa: "\f160"; } + --fa: '\f160'; +} .fa-sort-amount-down { - --fa: "\f160"; } + --fa: '\f160'; +} .fa-cloud-bolt { - --fa: "\f76c"; } + --fa: '\f76c'; +} .fa-thunderstorm { - --fa: "\f76c"; } + --fa: '\f76c'; +} .fa-text-slash { - --fa: "\f87d"; } + --fa: '\f87d'; +} .fa-remove-format { - --fa: "\f87d"; } + --fa: '\f87d'; +} .fa-face-smile-wink { - --fa: "\f4da"; } + --fa: '\f4da'; +} .fa-smile-wink { - --fa: "\f4da"; } + --fa: '\f4da'; +} .fa-file-word { - --fa: "\f1c2"; } + --fa: '\f1c2'; +} .fa-file-powerpoint { - --fa: "\f1c4"; } + --fa: '\f1c4'; +} .fa-arrows-left-right { - --fa: "\f07e"; } + --fa: '\f07e'; +} .fa-arrows-h { - --fa: "\f07e"; } + --fa: '\f07e'; +} .fa-house-lock { - --fa: "\e510"; } + --fa: '\e510'; +} .fa-cloud-arrow-down { - --fa: "\f0ed"; } + --fa: '\f0ed'; +} .fa-cloud-download { - --fa: "\f0ed"; } + --fa: '\f0ed'; +} .fa-cloud-download-alt { - --fa: "\f0ed"; } + --fa: '\f0ed'; +} .fa-children { - --fa: "\e4e1"; } + --fa: '\e4e1'; +} .fa-chalkboard { - --fa: "\f51b"; } + --fa: '\f51b'; +} .fa-blackboard { - --fa: "\f51b"; } + --fa: '\f51b'; +} .fa-user-large-slash { - --fa: "\f4fa"; } + --fa: '\f4fa'; +} .fa-user-alt-slash { - --fa: "\f4fa"; } + --fa: '\f4fa'; +} .fa-envelope-open { - --fa: "\f2b6"; } + --fa: '\f2b6'; +} .fa-handshake-simple-slash { - --fa: "\e05f"; } + --fa: '\e05f'; +} .fa-handshake-alt-slash { - --fa: "\e05f"; } + --fa: '\e05f'; +} .fa-mattress-pillow { - --fa: "\e525"; } + --fa: '\e525'; +} .fa-guarani-sign { - --fa: "\e19a"; } + --fa: '\e19a'; +} .fa-arrows-rotate { - --fa: "\f021"; } + --fa: '\f021'; +} .fa-refresh { - --fa: "\f021"; } + --fa: '\f021'; +} .fa-sync { - --fa: "\f021"; } + --fa: '\f021'; +} .fa-fire-extinguisher { - --fa: "\f134"; } + --fa: '\f134'; +} .fa-cruzeiro-sign { - --fa: "\e152"; } + --fa: '\e152'; +} .fa-greater-than-equal { - --fa: "\f532"; } + --fa: '\f532'; +} .fa-shield-halved { - --fa: "\f3ed"; } + --fa: '\f3ed'; +} .fa-shield-alt { - --fa: "\f3ed"; } + --fa: '\f3ed'; +} .fa-book-atlas { - --fa: "\f558"; } + --fa: '\f558'; +} .fa-atlas { - --fa: "\f558"; } + --fa: '\f558'; +} .fa-virus { - --fa: "\e074"; } + --fa: '\e074'; +} .fa-envelope-circle-check { - --fa: "\e4e8"; } + --fa: '\e4e8'; +} .fa-layer-group { - --fa: "\f5fd"; } + --fa: '\f5fd'; +} .fa-arrows-to-dot { - --fa: "\e4be"; } + --fa: '\e4be'; +} .fa-archway { - --fa: "\f557"; } + --fa: '\f557'; +} .fa-heart-circle-check { - --fa: "\e4fd"; } + --fa: '\e4fd'; +} .fa-house-chimney-crack { - --fa: "\f6f1"; } + --fa: '\f6f1'; +} .fa-house-damage { - --fa: "\f6f1"; } + --fa: '\f6f1'; +} .fa-file-zipper { - --fa: "\f1c6"; } + --fa: '\f1c6'; +} .fa-file-archive { - --fa: "\f1c6"; } + --fa: '\f1c6'; +} .fa-square { - --fa: "\f0c8"; } + --fa: '\f0c8'; +} .fa-martini-glass-empty { - --fa: "\f000"; } + --fa: '\f000'; +} .fa-glass-martini { - --fa: "\f000"; } + --fa: '\f000'; +} .fa-couch { - --fa: "\f4b8"; } + --fa: '\f4b8'; +} .fa-cedi-sign { - --fa: "\e0df"; } + --fa: '\e0df'; +} .fa-italic { - --fa: "\f033"; } + --fa: '\f033'; +} .fa-table-cells-column-lock { - --fa: "\e678"; } + --fa: '\e678'; +} .fa-church { - --fa: "\f51d"; } + --fa: '\f51d'; +} .fa-comments-dollar { - --fa: "\f653"; } + --fa: '\f653'; +} .fa-democrat { - --fa: "\f747"; } + --fa: '\f747'; +} .fa-z { - --fa: "\5a"; } + --fa: '\5a'; +} .fa-person-skiing { - --fa: "\f7c9"; } + --fa: '\f7c9'; +} .fa-skiing { - --fa: "\f7c9"; } + --fa: '\f7c9'; +} .fa-road-lock { - --fa: "\e567"; } + --fa: '\e567'; +} .fa-a { - --fa: "\41"; } + --fa: '\41'; +} .fa-temperature-arrow-down { - --fa: "\e03f"; } + --fa: '\e03f'; +} .fa-temperature-down { - --fa: "\e03f"; } + --fa: '\e03f'; +} .fa-feather-pointed { - --fa: "\f56b"; } + --fa: '\f56b'; +} .fa-feather-alt { - --fa: "\f56b"; } + --fa: '\f56b'; +} .fa-p { - --fa: "\50"; } + --fa: '\50'; +} .fa-snowflake { - --fa: "\f2dc"; } + --fa: '\f2dc'; +} .fa-newspaper { - --fa: "\f1ea"; } + --fa: '\f1ea'; +} .fa-rectangle-ad { - --fa: "\f641"; } + --fa: '\f641'; +} .fa-ad { - --fa: "\f641"; } + --fa: '\f641'; +} .fa-circle-arrow-right { - --fa: "\f0a9"; } + --fa: '\f0a9'; +} .fa-arrow-circle-right { - --fa: "\f0a9"; } + --fa: '\f0a9'; +} .fa-filter-circle-xmark { - --fa: "\e17b"; } + --fa: '\e17b'; +} .fa-locust { - --fa: "\e520"; } + --fa: '\e520'; +} .fa-sort { - --fa: "\f0dc"; } + --fa: '\f0dc'; +} .fa-unsorted { - --fa: "\f0dc"; } + --fa: '\f0dc'; +} .fa-list-ol { - --fa: "\f0cb"; } + --fa: '\f0cb'; +} .fa-list-1-2 { - --fa: "\f0cb"; } + --fa: '\f0cb'; +} .fa-list-numeric { - --fa: "\f0cb"; } + --fa: '\f0cb'; +} .fa-person-dress-burst { - --fa: "\e544"; } + --fa: '\e544'; +} .fa-money-check-dollar { - --fa: "\f53d"; } + --fa: '\f53d'; +} .fa-money-check-alt { - --fa: "\f53d"; } + --fa: '\f53d'; +} .fa-vector-square { - --fa: "\f5cb"; } + --fa: '\f5cb'; +} .fa-bread-slice { - --fa: "\f7ec"; } + --fa: '\f7ec'; +} .fa-language { - --fa: "\f1ab"; } + --fa: '\f1ab'; +} .fa-face-kiss-wink-heart { - --fa: "\f598"; } + --fa: '\f598'; +} .fa-kiss-wink-heart { - --fa: "\f598"; } + --fa: '\f598'; +} .fa-filter { - --fa: "\f0b0"; } + --fa: '\f0b0'; +} .fa-question { - --fa: "\3f"; } + --fa: '\3f'; +} .fa-file-signature { - --fa: "\f573"; } + --fa: '\f573'; +} .fa-up-down-left-right { - --fa: "\f0b2"; } + --fa: '\f0b2'; +} .fa-arrows-alt { - --fa: "\f0b2"; } + --fa: '\f0b2'; +} .fa-house-chimney-user { - --fa: "\e065"; } + --fa: '\e065'; +} .fa-hand-holding-heart { - --fa: "\f4be"; } + --fa: '\f4be'; +} .fa-puzzle-piece { - --fa: "\f12e"; } + --fa: '\f12e'; +} .fa-money-check { - --fa: "\f53c"; } + --fa: '\f53c'; +} .fa-star-half-stroke { - --fa: "\f5c0"; } + --fa: '\f5c0'; +} .fa-star-half-alt { - --fa: "\f5c0"; } + --fa: '\f5c0'; +} .fa-code { - --fa: "\f121"; } + --fa: '\f121'; +} .fa-whiskey-glass { - --fa: "\f7a0"; } + --fa: '\f7a0'; +} .fa-glass-whiskey { - --fa: "\f7a0"; } + --fa: '\f7a0'; +} .fa-building-circle-exclamation { - --fa: "\e4d3"; } + --fa: '\e4d3'; +} .fa-magnifying-glass-chart { - --fa: "\e522"; } + --fa: '\e522'; +} .fa-arrow-up-right-from-square { - --fa: "\f08e"; } + --fa: '\f08e'; +} .fa-external-link { - --fa: "\f08e"; } + --fa: '\f08e'; +} .fa-cubes-stacked { - --fa: "\e4e6"; } + --fa: '\e4e6'; +} .fa-won-sign { - --fa: "\f159"; } + --fa: '\f159'; +} .fa-krw { - --fa: "\f159"; } + --fa: '\f159'; +} .fa-won { - --fa: "\f159"; } + --fa: '\f159'; +} .fa-virus-covid { - --fa: "\e4a8"; } + --fa: '\e4a8'; +} .fa-austral-sign { - --fa: "\e0a9"; } + --fa: '\e0a9'; +} .fa-f { - --fa: "\46"; } + --fa: '\46'; +} .fa-leaf { - --fa: "\f06c"; } + --fa: '\f06c'; +} .fa-road { - --fa: "\f018"; } + --fa: '\f018'; +} .fa-taxi { - --fa: "\f1ba"; } + --fa: '\f1ba'; +} .fa-cab { - --fa: "\f1ba"; } + --fa: '\f1ba'; +} .fa-person-circle-plus { - --fa: "\e541"; } + --fa: '\e541'; +} .fa-chart-pie { - --fa: "\f200"; } + --fa: '\f200'; +} .fa-pie-chart { - --fa: "\f200"; } + --fa: '\f200'; +} .fa-bolt-lightning { - --fa: "\e0b7"; } + --fa: '\e0b7'; +} .fa-sack-xmark { - --fa: "\e56a"; } + --fa: '\e56a'; +} .fa-file-excel { - --fa: "\f1c3"; } + --fa: '\f1c3'; +} .fa-file-contract { - --fa: "\f56c"; } + --fa: '\f56c'; +} .fa-fish-fins { - --fa: "\e4f2"; } + --fa: '\e4f2'; +} .fa-building-flag { - --fa: "\e4d5"; } + --fa: '\e4d5'; +} .fa-face-grin-beam { - --fa: "\f582"; } + --fa: '\f582'; +} .fa-grin-beam { - --fa: "\f582"; } + --fa: '\f582'; +} .fa-object-ungroup { - --fa: "\f248"; } + --fa: '\f248'; +} .fa-poop { - --fa: "\f619"; } + --fa: '\f619'; +} .fa-location-pin { - --fa: "\f041"; } + --fa: '\f041'; +} .fa-map-marker { - --fa: "\f041"; } + --fa: '\f041'; +} .fa-kaaba { - --fa: "\f66b"; } + --fa: '\f66b'; +} .fa-toilet-paper { - --fa: "\f71e"; } + --fa: '\f71e'; +} .fa-helmet-safety { - --fa: "\f807"; } + --fa: '\f807'; +} .fa-hard-hat { - --fa: "\f807"; } + --fa: '\f807'; +} .fa-hat-hard { - --fa: "\f807"; } + --fa: '\f807'; +} .fa-eject { - --fa: "\f052"; } + --fa: '\f052'; +} .fa-circle-right { - --fa: "\f35a"; } + --fa: '\f35a'; +} .fa-arrow-alt-circle-right { - --fa: "\f35a"; } + --fa: '\f35a'; +} .fa-plane-circle-check { - --fa: "\e555"; } + --fa: '\e555'; +} .fa-face-rolling-eyes { - --fa: "\f5a5"; } + --fa: '\f5a5'; +} .fa-meh-rolling-eyes { - --fa: "\f5a5"; } + --fa: '\f5a5'; +} .fa-object-group { - --fa: "\f247"; } + --fa: '\f247'; +} .fa-chart-line { - --fa: "\f201"; } + --fa: '\f201'; +} .fa-line-chart { - --fa: "\f201"; } + --fa: '\f201'; +} .fa-mask-ventilator { - --fa: "\e524"; } + --fa: '\e524'; +} .fa-arrow-right { - --fa: "\f061"; } + --fa: '\f061'; +} .fa-signs-post { - --fa: "\f277"; } + --fa: '\f277'; +} .fa-map-signs { - --fa: "\f277"; } + --fa: '\f277'; +} .fa-cash-register { - --fa: "\f788"; } + --fa: '\f788'; +} .fa-person-circle-question { - --fa: "\e542"; } + --fa: '\e542'; +} .fa-h { - --fa: "\48"; } + --fa: '\48'; +} .fa-tarp { - --fa: "\e57b"; } + --fa: '\e57b'; +} .fa-screwdriver-wrench { - --fa: "\f7d9"; } + --fa: '\f7d9'; +} .fa-tools { - --fa: "\f7d9"; } + --fa: '\f7d9'; +} .fa-arrows-to-eye { - --fa: "\e4bf"; } + --fa: '\e4bf'; +} .fa-plug-circle-bolt { - --fa: "\e55b"; } + --fa: '\e55b'; +} .fa-heart { - --fa: "\f004"; } + --fa: '\f004'; +} .fa-mars-and-venus { - --fa: "\f224"; } + --fa: '\f224'; +} .fa-house-user { - --fa: "\e1b0"; } + --fa: '\e1b0'; +} .fa-home-user { - --fa: "\e1b0"; } + --fa: '\e1b0'; +} .fa-dumpster-fire { - --fa: "\f794"; } + --fa: '\f794'; +} .fa-house-crack { - --fa: "\e3b1"; } + --fa: '\e3b1'; +} .fa-martini-glass-citrus { - --fa: "\f561"; } + --fa: '\f561'; +} .fa-cocktail { - --fa: "\f561"; } + --fa: '\f561'; +} .fa-face-surprise { - --fa: "\f5c2"; } + --fa: '\f5c2'; +} .fa-surprise { - --fa: "\f5c2"; } + --fa: '\f5c2'; +} .fa-bottle-water { - --fa: "\e4c5"; } + --fa: '\e4c5'; +} .fa-circle-pause { - --fa: "\f28b"; } + --fa: '\f28b'; +} .fa-pause-circle { - --fa: "\f28b"; } + --fa: '\f28b'; +} .fa-toilet-paper-slash { - --fa: "\e072"; } + --fa: '\e072'; +} .fa-apple-whole { - --fa: "\f5d1"; } + --fa: '\f5d1'; +} .fa-apple-alt { - --fa: "\f5d1"; } + --fa: '\f5d1'; +} .fa-kitchen-set { - --fa: "\e51a"; } + --fa: '\e51a'; +} .fa-r { - --fa: "\52"; } + --fa: '\52'; +} .fa-temperature-quarter { - --fa: "\f2ca"; } + --fa: '\f2ca'; +} .fa-temperature-1 { - --fa: "\f2ca"; } + --fa: '\f2ca'; +} .fa-thermometer-1 { - --fa: "\f2ca"; } + --fa: '\f2ca'; +} .fa-thermometer-quarter { - --fa: "\f2ca"; } + --fa: '\f2ca'; +} .fa-cube { - --fa: "\f1b2"; } + --fa: '\f1b2'; +} .fa-bitcoin-sign { - --fa: "\e0b4"; } + --fa: '\e0b4'; +} .fa-shield-dog { - --fa: "\e573"; } + --fa: '\e573'; +} .fa-solar-panel { - --fa: "\f5ba"; } + --fa: '\f5ba'; +} .fa-lock-open { - --fa: "\f3c1"; } + --fa: '\f3c1'; +} .fa-elevator { - --fa: "\e16d"; } + --fa: '\e16d'; +} .fa-money-bill-transfer { - --fa: "\e528"; } + --fa: '\e528'; +} .fa-money-bill-trend-up { - --fa: "\e529"; } + --fa: '\e529'; +} .fa-house-flood-water-circle-arrow-right { - --fa: "\e50f"; } + --fa: '\e50f'; +} .fa-square-poll-horizontal { - --fa: "\f682"; } + --fa: '\f682'; +} .fa-poll-h { - --fa: "\f682"; } + --fa: '\f682'; +} .fa-circle { - --fa: "\f111"; } + --fa: '\f111'; +} .fa-backward-fast { - --fa: "\f049"; } + --fa: '\f049'; +} .fa-fast-backward { - --fa: "\f049"; } + --fa: '\f049'; +} .fa-recycle { - --fa: "\f1b8"; } + --fa: '\f1b8'; +} .fa-user-astronaut { - --fa: "\f4fb"; } + --fa: '\f4fb'; +} .fa-plane-slash { - --fa: "\e069"; } + --fa: '\e069'; +} .fa-trademark { - --fa: "\f25c"; } + --fa: '\f25c'; +} .fa-basketball { - --fa: "\f434"; } + --fa: '\f434'; +} .fa-basketball-ball { - --fa: "\f434"; } + --fa: '\f434'; +} .fa-satellite-dish { - --fa: "\f7c0"; } + --fa: '\f7c0'; +} .fa-circle-up { - --fa: "\f35b"; } + --fa: '\f35b'; +} .fa-arrow-alt-circle-up { - --fa: "\f35b"; } + --fa: '\f35b'; +} .fa-mobile-screen-button { - --fa: "\f3cd"; } + --fa: '\f3cd'; +} .fa-mobile-alt { - --fa: "\f3cd"; } + --fa: '\f3cd'; +} .fa-volume-high { - --fa: "\f028"; } + --fa: '\f028'; +} .fa-volume-up { - --fa: "\f028"; } + --fa: '\f028'; +} .fa-users-rays { - --fa: "\e593"; } + --fa: '\e593'; +} .fa-wallet { - --fa: "\f555"; } + --fa: '\f555'; +} .fa-clipboard-check { - --fa: "\f46c"; } + --fa: '\f46c'; +} .fa-file-audio { - --fa: "\f1c7"; } + --fa: '\f1c7'; +} .fa-burger { - --fa: "\f805"; } + --fa: '\f805'; +} .fa-hamburger { - --fa: "\f805"; } + --fa: '\f805'; +} .fa-wrench { - --fa: "\f0ad"; } + --fa: '\f0ad'; +} .fa-bugs { - --fa: "\e4d0"; } + --fa: '\e4d0'; +} .fa-rupee-sign { - --fa: "\f156"; } + --fa: '\f156'; +} .fa-rupee { - --fa: "\f156"; } + --fa: '\f156'; +} .fa-file-image { - --fa: "\f1c5"; } + --fa: '\f1c5'; +} .fa-circle-question { - --fa: "\f059"; } + --fa: '\f059'; +} .fa-question-circle { - --fa: "\f059"; } + --fa: '\f059'; +} .fa-plane-departure { - --fa: "\f5b0"; } + --fa: '\f5b0'; +} .fa-handshake-slash { - --fa: "\e060"; } + --fa: '\e060'; +} .fa-book-bookmark { - --fa: "\e0bb"; } + --fa: '\e0bb'; +} .fa-code-branch { - --fa: "\f126"; } + --fa: '\f126'; +} .fa-hat-cowboy { - --fa: "\f8c0"; } + --fa: '\f8c0'; +} .fa-bridge { - --fa: "\e4c8"; } + --fa: '\e4c8'; +} .fa-phone-flip { - --fa: "\f879"; } + --fa: '\f879'; +} .fa-phone-alt { - --fa: "\f879"; } + --fa: '\f879'; +} .fa-truck-front { - --fa: "\e2b7"; } + --fa: '\e2b7'; +} .fa-cat { - --fa: "\f6be"; } + --fa: '\f6be'; +} .fa-anchor-circle-exclamation { - --fa: "\e4ab"; } + --fa: '\e4ab'; +} .fa-truck-field { - --fa: "\e58d"; } + --fa: '\e58d'; +} .fa-route { - --fa: "\f4d7"; } + --fa: '\f4d7'; +} .fa-clipboard-question { - --fa: "\e4e3"; } + --fa: '\e4e3'; +} .fa-panorama { - --fa: "\e209"; } + --fa: '\e209'; +} .fa-comment-medical { - --fa: "\f7f5"; } + --fa: '\f7f5'; +} .fa-teeth-open { - --fa: "\f62f"; } + --fa: '\f62f'; +} .fa-file-circle-minus { - --fa: "\e4ed"; } + --fa: '\e4ed'; +} .fa-tags { - --fa: "\f02c"; } + --fa: '\f02c'; +} .fa-wine-glass { - --fa: "\f4e3"; } + --fa: '\f4e3'; +} .fa-forward-fast { - --fa: "\f050"; } + --fa: '\f050'; +} .fa-fast-forward { - --fa: "\f050"; } + --fa: '\f050'; +} .fa-face-meh-blank { - --fa: "\f5a4"; } + --fa: '\f5a4'; +} .fa-meh-blank { - --fa: "\f5a4"; } + --fa: '\f5a4'; +} .fa-square-parking { - --fa: "\f540"; } + --fa: '\f540'; +} .fa-parking { - --fa: "\f540"; } + --fa: '\f540'; +} .fa-house-signal { - --fa: "\e012"; } + --fa: '\e012'; +} .fa-bars-progress { - --fa: "\f828"; } + --fa: '\f828'; +} .fa-tasks-alt { - --fa: "\f828"; } + --fa: '\f828'; +} .fa-faucet-drip { - --fa: "\e006"; } + --fa: '\e006'; +} .fa-cart-flatbed { - --fa: "\f474"; } + --fa: '\f474'; +} .fa-dolly-flatbed { - --fa: "\f474"; } + --fa: '\f474'; +} .fa-ban-smoking { - --fa: "\f54d"; } + --fa: '\f54d'; +} .fa-smoking-ban { - --fa: "\f54d"; } + --fa: '\f54d'; +} .fa-terminal { - --fa: "\f120"; } + --fa: '\f120'; +} .fa-mobile-button { - --fa: "\f10b"; } + --fa: '\f10b'; +} .fa-house-medical-flag { - --fa: "\e514"; } + --fa: '\e514'; +} .fa-basket-shopping { - --fa: "\f291"; } + --fa: '\f291'; +} .fa-shopping-basket { - --fa: "\f291"; } + --fa: '\f291'; +} .fa-tape { - --fa: "\f4db"; } + --fa: '\f4db'; +} .fa-bus-simple { - --fa: "\f55e"; } + --fa: '\f55e'; +} .fa-bus-alt { - --fa: "\f55e"; } + --fa: '\f55e'; +} .fa-eye { - --fa: "\f06e"; } + --fa: '\f06e'; +} .fa-face-sad-cry { - --fa: "\f5b3"; } + --fa: '\f5b3'; +} .fa-sad-cry { - --fa: "\f5b3"; } + --fa: '\f5b3'; +} .fa-audio-description { - --fa: "\f29e"; } + --fa: '\f29e'; +} .fa-person-military-to-person { - --fa: "\e54c"; } + --fa: '\e54c'; +} .fa-file-shield { - --fa: "\e4f0"; } + --fa: '\e4f0'; +} .fa-user-slash { - --fa: "\f506"; } + --fa: '\f506'; +} .fa-pen { - --fa: "\f304"; } + --fa: '\f304'; +} .fa-tower-observation { - --fa: "\e586"; } + --fa: '\e586'; +} .fa-file-code { - --fa: "\f1c9"; } + --fa: '\f1c9'; +} .fa-signal { - --fa: "\f012"; } + --fa: '\f012'; +} .fa-signal-5 { - --fa: "\f012"; } + --fa: '\f012'; +} .fa-signal-perfect { - --fa: "\f012"; } + --fa: '\f012'; +} .fa-bus { - --fa: "\f207"; } + --fa: '\f207'; +} .fa-heart-circle-xmark { - --fa: "\e501"; } + --fa: '\e501'; +} .fa-house-chimney { - --fa: "\e3af"; } + --fa: '\e3af'; +} .fa-home-lg { - --fa: "\e3af"; } + --fa: '\e3af'; +} .fa-window-maximize { - --fa: "\f2d0"; } + --fa: '\f2d0'; +} .fa-face-frown { - --fa: "\f119"; } + --fa: '\f119'; +} .fa-frown { - --fa: "\f119"; } + --fa: '\f119'; +} .fa-prescription { - --fa: "\f5b1"; } + --fa: '\f5b1'; +} .fa-shop { - --fa: "\f54f"; } + --fa: '\f54f'; +} .fa-store-alt { - --fa: "\f54f"; } + --fa: '\f54f'; +} .fa-floppy-disk { - --fa: "\f0c7"; } + --fa: '\f0c7'; +} .fa-save { - --fa: "\f0c7"; } + --fa: '\f0c7'; +} .fa-vihara { - --fa: "\f6a7"; } + --fa: '\f6a7'; +} .fa-scale-unbalanced { - --fa: "\f515"; } + --fa: '\f515'; +} .fa-balance-scale-left { - --fa: "\f515"; } + --fa: '\f515'; +} .fa-sort-up { - --fa: "\f0de"; } + --fa: '\f0de'; +} .fa-sort-asc { - --fa: "\f0de"; } + --fa: '\f0de'; +} .fa-comment-dots { - --fa: "\f4ad"; } + --fa: '\f4ad'; +} .fa-commenting { - --fa: "\f4ad"; } + --fa: '\f4ad'; +} .fa-plant-wilt { - --fa: "\e5aa"; } + --fa: '\e5aa'; +} .fa-diamond { - --fa: "\f219"; } + --fa: '\f219'; +} .fa-face-grin-squint { - --fa: "\f585"; } + --fa: '\f585'; +} .fa-grin-squint { - --fa: "\f585"; } + --fa: '\f585'; +} .fa-hand-holding-dollar { - --fa: "\f4c0"; } + --fa: '\f4c0'; +} .fa-hand-holding-usd { - --fa: "\f4c0"; } + --fa: '\f4c0'; +} .fa-chart-diagram { - --fa: "\e695"; } + --fa: '\e695'; +} .fa-bacterium { - --fa: "\e05a"; } + --fa: '\e05a'; +} .fa-hand-pointer { - --fa: "\f25a"; } + --fa: '\f25a'; +} .fa-drum-steelpan { - --fa: "\f56a"; } + --fa: '\f56a'; +} .fa-hand-scissors { - --fa: "\f257"; } + --fa: '\f257'; +} .fa-hands-praying { - --fa: "\f684"; } + --fa: '\f684'; +} .fa-praying-hands { - --fa: "\f684"; } + --fa: '\f684'; +} .fa-arrow-rotate-right { - --fa: "\f01e"; } + --fa: '\f01e'; +} .fa-arrow-right-rotate { - --fa: "\f01e"; } + --fa: '\f01e'; +} .fa-arrow-rotate-forward { - --fa: "\f01e"; } + --fa: '\f01e'; +} .fa-redo { - --fa: "\f01e"; } + --fa: '\f01e'; +} .fa-biohazard { - --fa: "\f780"; } + --fa: '\f780'; +} .fa-location-crosshairs { - --fa: "\f601"; } + --fa: '\f601'; +} .fa-location { - --fa: "\f601"; } + --fa: '\f601'; +} .fa-mars-double { - --fa: "\f227"; } + --fa: '\f227'; +} .fa-child-dress { - --fa: "\e59c"; } + --fa: '\e59c'; +} .fa-users-between-lines { - --fa: "\e591"; } + --fa: '\e591'; +} .fa-lungs-virus { - --fa: "\e067"; } + --fa: '\e067'; +} .fa-face-grin-tears { - --fa: "\f588"; } + --fa: '\f588'; +} .fa-grin-tears { - --fa: "\f588"; } + --fa: '\f588'; +} .fa-phone { - --fa: "\f095"; } + --fa: '\f095'; +} .fa-calendar-xmark { - --fa: "\f273"; } + --fa: '\f273'; +} .fa-calendar-times { - --fa: "\f273"; } + --fa: '\f273'; +} .fa-child-reaching { - --fa: "\e59d"; } + --fa: '\e59d'; +} .fa-head-side-virus { - --fa: "\e064"; } + --fa: '\e064'; +} .fa-user-gear { - --fa: "\f4fe"; } + --fa: '\f4fe'; +} .fa-user-cog { - --fa: "\f4fe"; } + --fa: '\f4fe'; +} .fa-arrow-up-1-9 { - --fa: "\f163"; } + --fa: '\f163'; +} .fa-sort-numeric-up { - --fa: "\f163"; } + --fa: '\f163'; +} .fa-door-closed { - --fa: "\f52a"; } + --fa: '\f52a'; +} .fa-shield-virus { - --fa: "\e06c"; } + --fa: '\e06c'; +} .fa-dice-six { - --fa: "\f526"; } + --fa: '\f526'; +} .fa-mosquito-net { - --fa: "\e52c"; } + --fa: '\e52c'; +} .fa-file-fragment { - --fa: "\e697"; } + --fa: '\e697'; +} .fa-bridge-water { - --fa: "\e4ce"; } + --fa: '\e4ce'; +} .fa-person-booth { - --fa: "\f756"; } + --fa: '\f756'; +} .fa-text-width { - --fa: "\f035"; } + --fa: '\f035'; +} .fa-hat-wizard { - --fa: "\f6e8"; } + --fa: '\f6e8'; +} .fa-pen-fancy { - --fa: "\f5ac"; } + --fa: '\f5ac'; +} .fa-person-digging { - --fa: "\f85e"; } + --fa: '\f85e'; +} .fa-digging { - --fa: "\f85e"; } + --fa: '\f85e'; +} .fa-trash { - --fa: "\f1f8"; } + --fa: '\f1f8'; +} .fa-gauge-simple { - --fa: "\f629"; } + --fa: '\f629'; +} .fa-gauge-simple-med { - --fa: "\f629"; } + --fa: '\f629'; +} .fa-tachometer-average { - --fa: "\f629"; } + --fa: '\f629'; +} .fa-book-medical { - --fa: "\f7e6"; } + --fa: '\f7e6'; +} .fa-poo { - --fa: "\f2fe"; } + --fa: '\f2fe'; +} .fa-quote-right { - --fa: "\f10e"; } + --fa: '\f10e'; +} .fa-quote-right-alt { - --fa: "\f10e"; } + --fa: '\f10e'; +} .fa-shirt { - --fa: "\f553"; } + --fa: '\f553'; +} .fa-t-shirt { - --fa: "\f553"; } + --fa: '\f553'; +} .fa-tshirt { - --fa: "\f553"; } + --fa: '\f553'; +} .fa-cubes { - --fa: "\f1b3"; } + --fa: '\f1b3'; +} .fa-divide { - --fa: "\f529"; } + --fa: '\f529'; +} .fa-tenge-sign { - --fa: "\f7d7"; } + --fa: '\f7d7'; +} .fa-tenge { - --fa: "\f7d7"; } + --fa: '\f7d7'; +} .fa-headphones { - --fa: "\f025"; } + --fa: '\f025'; +} .fa-hands-holding { - --fa: "\f4c2"; } + --fa: '\f4c2'; +} .fa-hands-clapping { - --fa: "\e1a8"; } + --fa: '\e1a8'; +} .fa-republican { - --fa: "\f75e"; } + --fa: '\f75e'; +} .fa-arrow-left { - --fa: "\f060"; } + --fa: '\f060'; +} .fa-person-circle-xmark { - --fa: "\e543"; } + --fa: '\e543'; +} .fa-ruler { - --fa: "\f545"; } + --fa: '\f545'; +} .fa-align-left { - --fa: "\f036"; } + --fa: '\f036'; +} .fa-dice-d6 { - --fa: "\f6d1"; } + --fa: '\f6d1'; +} .fa-restroom { - --fa: "\f7bd"; } + --fa: '\f7bd'; +} .fa-j { - --fa: "\4a"; } + --fa: '\4a'; +} .fa-users-viewfinder { - --fa: "\e595"; } + --fa: '\e595'; +} .fa-file-video { - --fa: "\f1c8"; } + --fa: '\f1c8'; +} .fa-up-right-from-square { - --fa: "\f35d"; } + --fa: '\f35d'; +} .fa-external-link-alt { - --fa: "\f35d"; } + --fa: '\f35d'; +} .fa-table-cells { - --fa: "\f00a"; } + --fa: '\f00a'; +} .fa-th { - --fa: "\f00a"; } + --fa: '\f00a'; +} .fa-file-pdf { - --fa: "\f1c1"; } + --fa: '\f1c1'; +} .fa-book-bible { - --fa: "\f647"; } + --fa: '\f647'; +} .fa-bible { - --fa: "\f647"; } + --fa: '\f647'; +} .fa-o { - --fa: "\4f"; } + --fa: '\4f'; +} .fa-suitcase-medical { - --fa: "\f0fa"; } + --fa: '\f0fa'; +} .fa-medkit { - --fa: "\f0fa"; } + --fa: '\f0fa'; +} .fa-user-secret { - --fa: "\f21b"; } + --fa: '\f21b'; +} .fa-otter { - --fa: "\f700"; } + --fa: '\f700'; +} .fa-person-dress { - --fa: "\f182"; } + --fa: '\f182'; +} .fa-female { - --fa: "\f182"; } + --fa: '\f182'; +} .fa-comment-dollar { - --fa: "\f651"; } + --fa: '\f651'; +} .fa-business-time { - --fa: "\f64a"; } + --fa: '\f64a'; +} .fa-briefcase-clock { - --fa: "\f64a"; } + --fa: '\f64a'; +} .fa-table-cells-large { - --fa: "\f009"; } + --fa: '\f009'; +} .fa-th-large { - --fa: "\f009"; } + --fa: '\f009'; +} .fa-book-tanakh { - --fa: "\f827"; } + --fa: '\f827'; +} .fa-tanakh { - --fa: "\f827"; } + --fa: '\f827'; +} .fa-phone-volume { - --fa: "\f2a0"; } + --fa: '\f2a0'; +} .fa-volume-control-phone { - --fa: "\f2a0"; } + --fa: '\f2a0'; +} .fa-hat-cowboy-side { - --fa: "\f8c1"; } + --fa: '\f8c1'; +} .fa-clipboard-user { - --fa: "\f7f3"; } + --fa: '\f7f3'; +} .fa-child { - --fa: "\f1ae"; } + --fa: '\f1ae'; +} .fa-lira-sign { - --fa: "\f195"; } + --fa: '\f195'; +} .fa-satellite { - --fa: "\f7bf"; } + --fa: '\f7bf'; +} .fa-plane-lock { - --fa: "\e558"; } + --fa: '\e558'; +} .fa-tag { - --fa: "\f02b"; } + --fa: '\f02b'; +} .fa-comment { - --fa: "\f075"; } + --fa: '\f075'; +} .fa-cake-candles { - --fa: "\f1fd"; } + --fa: '\f1fd'; +} .fa-birthday-cake { - --fa: "\f1fd"; } + --fa: '\f1fd'; +} .fa-cake { - --fa: "\f1fd"; } + --fa: '\f1fd'; +} .fa-envelope { - --fa: "\f0e0"; } + --fa: '\f0e0'; +} .fa-angles-up { - --fa: "\f102"; } + --fa: '\f102'; +} .fa-angle-double-up { - --fa: "\f102"; } + --fa: '\f102'; +} .fa-paperclip { - --fa: "\f0c6"; } + --fa: '\f0c6'; +} .fa-arrow-right-to-city { - --fa: "\e4b3"; } + --fa: '\e4b3'; +} .fa-ribbon { - --fa: "\f4d6"; } + --fa: '\f4d6'; +} .fa-lungs { - --fa: "\f604"; } + --fa: '\f604'; +} .fa-arrow-up-9-1 { - --fa: "\f887"; } + --fa: '\f887'; +} .fa-sort-numeric-up-alt { - --fa: "\f887"; } + --fa: '\f887'; +} .fa-litecoin-sign { - --fa: "\e1d3"; } + --fa: '\e1d3'; +} .fa-border-none { - --fa: "\f850"; } + --fa: '\f850'; +} .fa-circle-nodes { - --fa: "\e4e2"; } + --fa: '\e4e2'; +} .fa-parachute-box { - --fa: "\f4cd"; } + --fa: '\f4cd'; +} .fa-indent { - --fa: "\f03c"; } + --fa: '\f03c'; +} .fa-truck-field-un { - --fa: "\e58e"; } + --fa: '\e58e'; +} .fa-hourglass { - --fa: "\f254"; } + --fa: '\f254'; +} .fa-hourglass-empty { - --fa: "\f254"; } + --fa: '\f254'; +} .fa-mountain { - --fa: "\f6fc"; } + --fa: '\f6fc'; +} .fa-user-doctor { - --fa: "\f0f0"; } + --fa: '\f0f0'; +} .fa-user-md { - --fa: "\f0f0"; } + --fa: '\f0f0'; +} .fa-circle-info { - --fa: "\f05a"; } + --fa: '\f05a'; +} .fa-info-circle { - --fa: "\f05a"; } + --fa: '\f05a'; +} .fa-cloud-meatball { - --fa: "\f73b"; } + --fa: '\f73b'; +} .fa-camera { - --fa: "\f030"; } + --fa: '\f030'; +} .fa-camera-alt { - --fa: "\f030"; } + --fa: '\f030'; +} .fa-square-virus { - --fa: "\e578"; } + --fa: '\e578'; +} .fa-meteor { - --fa: "\f753"; } + --fa: '\f753'; +} .fa-car-on { - --fa: "\e4dd"; } + --fa: '\e4dd'; +} .fa-sleigh { - --fa: "\f7cc"; } + --fa: '\f7cc'; +} .fa-arrow-down-1-9 { - --fa: "\f162"; } + --fa: '\f162'; +} .fa-sort-numeric-asc { - --fa: "\f162"; } + --fa: '\f162'; +} .fa-sort-numeric-down { - --fa: "\f162"; } + --fa: '\f162'; +} .fa-hand-holding-droplet { - --fa: "\f4c1"; } + --fa: '\f4c1'; +} .fa-hand-holding-water { - --fa: "\f4c1"; } + --fa: '\f4c1'; +} .fa-water { - --fa: "\f773"; } + --fa: '\f773'; +} .fa-calendar-check { - --fa: "\f274"; } + --fa: '\f274'; +} .fa-braille { - --fa: "\f2a1"; } + --fa: '\f2a1'; +} .fa-prescription-bottle-medical { - --fa: "\f486"; } + --fa: '\f486'; +} .fa-prescription-bottle-alt { - --fa: "\f486"; } + --fa: '\f486'; +} .fa-landmark { - --fa: "\f66f"; } + --fa: '\f66f'; +} .fa-truck { - --fa: "\f0d1"; } + --fa: '\f0d1'; +} .fa-crosshairs { - --fa: "\f05b"; } + --fa: '\f05b'; +} .fa-person-cane { - --fa: "\e53c"; } + --fa: '\e53c'; +} .fa-tent { - --fa: "\e57d"; } + --fa: '\e57d'; +} .fa-vest-patches { - --fa: "\e086"; } + --fa: '\e086'; +} .fa-check-double { - --fa: "\f560"; } + --fa: '\f560'; +} .fa-arrow-down-a-z { - --fa: "\f15d"; } + --fa: '\f15d'; +} .fa-sort-alpha-asc { - --fa: "\f15d"; } + --fa: '\f15d'; +} .fa-sort-alpha-down { - --fa: "\f15d"; } + --fa: '\f15d'; +} .fa-money-bill-wheat { - --fa: "\e52a"; } + --fa: '\e52a'; +} .fa-cookie { - --fa: "\f563"; } + --fa: '\f563'; +} .fa-arrow-rotate-left { - --fa: "\f0e2"; } + --fa: '\f0e2'; +} .fa-arrow-left-rotate { - --fa: "\f0e2"; } + --fa: '\f0e2'; +} .fa-arrow-rotate-back { - --fa: "\f0e2"; } + --fa: '\f0e2'; +} .fa-arrow-rotate-backward { - --fa: "\f0e2"; } + --fa: '\f0e2'; +} .fa-undo { - --fa: "\f0e2"; } + --fa: '\f0e2'; +} .fa-hard-drive { - --fa: "\f0a0"; } + --fa: '\f0a0'; +} .fa-hdd { - --fa: "\f0a0"; } + --fa: '\f0a0'; +} .fa-face-grin-squint-tears { - --fa: "\f586"; } + --fa: '\f586'; +} .fa-grin-squint-tears { - --fa: "\f586"; } + --fa: '\f586'; +} .fa-dumbbell { - --fa: "\f44b"; } + --fa: '\f44b'; +} .fa-rectangle-list { - --fa: "\f022"; } + --fa: '\f022'; +} .fa-list-alt { - --fa: "\f022"; } + --fa: '\f022'; +} .fa-tarp-droplet { - --fa: "\e57c"; } + --fa: '\e57c'; +} .fa-house-medical-circle-check { - --fa: "\e511"; } + --fa: '\e511'; +} .fa-person-skiing-nordic { - --fa: "\f7ca"; } + --fa: '\f7ca'; +} .fa-skiing-nordic { - --fa: "\f7ca"; } + --fa: '\f7ca'; +} .fa-calendar-plus { - --fa: "\f271"; } + --fa: '\f271'; +} .fa-plane-arrival { - --fa: "\f5af"; } + --fa: '\f5af'; +} .fa-circle-left { - --fa: "\f359"; } + --fa: '\f359'; +} .fa-arrow-alt-circle-left { - --fa: "\f359"; } + --fa: '\f359'; +} .fa-train-subway { - --fa: "\f239"; } + --fa: '\f239'; +} .fa-subway { - --fa: "\f239"; } + --fa: '\f239'; +} .fa-chart-gantt { - --fa: "\e0e4"; } + --fa: '\e0e4'; +} .fa-indian-rupee-sign { - --fa: "\e1bc"; } + --fa: '\e1bc'; +} .fa-indian-rupee { - --fa: "\e1bc"; } + --fa: '\e1bc'; +} .fa-inr { - --fa: "\e1bc"; } + --fa: '\e1bc'; +} .fa-crop-simple { - --fa: "\f565"; } + --fa: '\f565'; +} .fa-crop-alt { - --fa: "\f565"; } + --fa: '\f565'; +} .fa-money-bill-1 { - --fa: "\f3d1"; } + --fa: '\f3d1'; +} .fa-money-bill-alt { - --fa: "\f3d1"; } + --fa: '\f3d1'; +} .fa-left-long { - --fa: "\f30a"; } + --fa: '\f30a'; +} .fa-long-arrow-alt-left { - --fa: "\f30a"; } + --fa: '\f30a'; +} .fa-dna { - --fa: "\f471"; } + --fa: '\f471'; +} .fa-virus-slash { - --fa: "\e075"; } + --fa: '\e075'; +} .fa-minus { - --fa: "\f068"; } + --fa: '\f068'; +} .fa-subtract { - --fa: "\f068"; } + --fa: '\f068'; +} .fa-chess { - --fa: "\f439"; } + --fa: '\f439'; +} .fa-arrow-left-long { - --fa: "\f177"; } + --fa: '\f177'; +} .fa-long-arrow-left { - --fa: "\f177"; } + --fa: '\f177'; +} .fa-plug-circle-check { - --fa: "\e55c"; } + --fa: '\e55c'; +} .fa-street-view { - --fa: "\f21d"; } + --fa: '\f21d'; +} .fa-franc-sign { - --fa: "\e18f"; } + --fa: '\e18f'; +} .fa-volume-off { - --fa: "\f026"; } + --fa: '\f026'; +} .fa-hands-asl-interpreting { - --fa: "\f2a3"; } + --fa: '\f2a3'; +} .fa-american-sign-language-interpreting { - --fa: "\f2a3"; } + --fa: '\f2a3'; +} .fa-asl-interpreting { - --fa: "\f2a3"; } + --fa: '\f2a3'; +} .fa-hands-american-sign-language-interpreting { - --fa: "\f2a3"; } + --fa: '\f2a3'; +} .fa-gear { - --fa: "\f013"; } + --fa: '\f013'; +} .fa-cog { - --fa: "\f013"; } + --fa: '\f013'; +} .fa-droplet-slash { - --fa: "\f5c7"; } + --fa: '\f5c7'; +} .fa-tint-slash { - --fa: "\f5c7"; } + --fa: '\f5c7'; +} .fa-mosque { - --fa: "\f678"; } + --fa: '\f678'; +} .fa-mosquito { - --fa: "\e52b"; } + --fa: '\e52b'; +} .fa-star-of-david { - --fa: "\f69a"; } + --fa: '\f69a'; +} .fa-person-military-rifle { - --fa: "\e54b"; } + --fa: '\e54b'; +} .fa-cart-shopping { - --fa: "\f07a"; } + --fa: '\f07a'; +} .fa-shopping-cart { - --fa: "\f07a"; } + --fa: '\f07a'; +} .fa-vials { - --fa: "\f493"; } + --fa: '\f493'; +} .fa-plug-circle-plus { - --fa: "\e55f"; } + --fa: '\e55f'; +} .fa-place-of-worship { - --fa: "\f67f"; } + --fa: '\f67f'; +} .fa-grip-vertical { - --fa: "\f58e"; } + --fa: '\f58e'; +} .fa-hexagon-nodes { - --fa: "\e699"; } + --fa: '\e699'; +} .fa-arrow-turn-up { - --fa: "\f148"; } + --fa: '\f148'; +} .fa-level-up { - --fa: "\f148"; } + --fa: '\f148'; +} .fa-u { - --fa: "\55"; } + --fa: '\55'; +} .fa-square-root-variable { - --fa: "\f698"; } + --fa: '\f698'; +} .fa-square-root-alt { - --fa: "\f698"; } + --fa: '\f698'; +} .fa-clock { - --fa: "\f017"; } + --fa: '\f017'; +} .fa-clock-four { - --fa: "\f017"; } + --fa: '\f017'; +} .fa-backward-step { - --fa: "\f048"; } + --fa: '\f048'; +} .fa-step-backward { - --fa: "\f048"; } + --fa: '\f048'; +} .fa-pallet { - --fa: "\f482"; } + --fa: '\f482'; +} .fa-faucet { - --fa: "\e005"; } + --fa: '\e005'; +} .fa-baseball-bat-ball { - --fa: "\f432"; } + --fa: '\f432'; +} .fa-s { - --fa: "\53"; } + --fa: '\53'; +} .fa-timeline { - --fa: "\e29c"; } + --fa: '\e29c'; +} .fa-keyboard { - --fa: "\f11c"; } + --fa: '\f11c'; +} .fa-caret-down { - --fa: "\f0d7"; } + --fa: '\f0d7'; +} .fa-house-chimney-medical { - --fa: "\f7f2"; } + --fa: '\f7f2'; +} .fa-clinic-medical { - --fa: "\f7f2"; } + --fa: '\f7f2'; +} .fa-temperature-three-quarters { - --fa: "\f2c8"; } + --fa: '\f2c8'; +} .fa-temperature-3 { - --fa: "\f2c8"; } + --fa: '\f2c8'; +} .fa-thermometer-3 { - --fa: "\f2c8"; } + --fa: '\f2c8'; +} .fa-thermometer-three-quarters { - --fa: "\f2c8"; } + --fa: '\f2c8'; +} .fa-mobile-screen { - --fa: "\f3cf"; } + --fa: '\f3cf'; +} .fa-mobile-android-alt { - --fa: "\f3cf"; } + --fa: '\f3cf'; +} .fa-plane-up { - --fa: "\e22d"; } + --fa: '\e22d'; +} .fa-piggy-bank { - --fa: "\f4d3"; } + --fa: '\f4d3'; +} .fa-battery-half { - --fa: "\f242"; } + --fa: '\f242'; +} .fa-battery-3 { - --fa: "\f242"; } + --fa: '\f242'; +} .fa-mountain-city { - --fa: "\e52e"; } + --fa: '\e52e'; +} .fa-coins { - --fa: "\f51e"; } + --fa: '\f51e'; +} .fa-khanda { - --fa: "\f66d"; } + --fa: '\f66d'; +} .fa-sliders { - --fa: "\f1de"; } + --fa: '\f1de'; +} .fa-sliders-h { - --fa: "\f1de"; } + --fa: '\f1de'; +} .fa-folder-tree { - --fa: "\f802"; } + --fa: '\f802'; +} .fa-network-wired { - --fa: "\f6ff"; } + --fa: '\f6ff'; +} .fa-map-pin { - --fa: "\f276"; } + --fa: '\f276'; +} .fa-hamsa { - --fa: "\f665"; } + --fa: '\f665'; +} .fa-cent-sign { - --fa: "\e3f5"; } + --fa: '\e3f5'; +} .fa-flask { - --fa: "\f0c3"; } + --fa: '\f0c3'; +} .fa-person-pregnant { - --fa: "\e31e"; } + --fa: '\e31e'; +} .fa-wand-sparkles { - --fa: "\f72b"; } + --fa: '\f72b'; +} .fa-ellipsis-vertical { - --fa: "\f142"; } + --fa: '\f142'; +} .fa-ellipsis-v { - --fa: "\f142"; } + --fa: '\f142'; +} .fa-ticket { - --fa: "\f145"; } + --fa: '\f145'; +} .fa-power-off { - --fa: "\f011"; } + --fa: '\f011'; +} .fa-right-long { - --fa: "\f30b"; } + --fa: '\f30b'; +} .fa-long-arrow-alt-right { - --fa: "\f30b"; } + --fa: '\f30b'; +} .fa-flag-usa { - --fa: "\f74d"; } + --fa: '\f74d'; +} .fa-laptop-file { - --fa: "\e51d"; } + --fa: '\e51d'; +} .fa-tty { - --fa: "\f1e4"; } + --fa: '\f1e4'; +} .fa-teletype { - --fa: "\f1e4"; } + --fa: '\f1e4'; +} .fa-diagram-next { - --fa: "\e476"; } + --fa: '\e476'; +} .fa-person-rifle { - --fa: "\e54e"; } + --fa: '\e54e'; +} .fa-house-medical-circle-exclamation { - --fa: "\e512"; } + --fa: '\e512'; +} .fa-closed-captioning { - --fa: "\f20a"; } + --fa: '\f20a'; +} .fa-person-hiking { - --fa: "\f6ec"; } + --fa: '\f6ec'; +} .fa-hiking { - --fa: "\f6ec"; } + --fa: '\f6ec'; +} .fa-venus-double { - --fa: "\f226"; } + --fa: '\f226'; +} .fa-images { - --fa: "\f302"; } + --fa: '\f302'; +} .fa-calculator { - --fa: "\f1ec"; } + --fa: '\f1ec'; +} .fa-people-pulling { - --fa: "\e535"; } + --fa: '\e535'; +} .fa-n { - --fa: "\4e"; } + --fa: '\4e'; +} .fa-cable-car { - --fa: "\f7da"; } + --fa: '\f7da'; +} .fa-tram { - --fa: "\f7da"; } + --fa: '\f7da'; +} .fa-cloud-rain { - --fa: "\f73d"; } + --fa: '\f73d'; +} .fa-building-circle-xmark { - --fa: "\e4d4"; } + --fa: '\e4d4'; +} .fa-ship { - --fa: "\f21a"; } + --fa: '\f21a'; +} .fa-arrows-down-to-line { - --fa: "\e4b8"; } + --fa: '\e4b8'; +} .fa-download { - --fa: "\f019"; } + --fa: '\f019'; +} .fa-face-grin { - --fa: "\f580"; } + --fa: '\f580'; +} .fa-grin { - --fa: "\f580"; } + --fa: '\f580'; +} .fa-delete-left { - --fa: "\f55a"; } + --fa: '\f55a'; +} .fa-backspace { - --fa: "\f55a"; } + --fa: '\f55a'; +} .fa-eye-dropper { - --fa: "\f1fb"; } + --fa: '\f1fb'; +} .fa-eye-dropper-empty { - --fa: "\f1fb"; } + --fa: '\f1fb'; +} .fa-eyedropper { - --fa: "\f1fb"; } + --fa: '\f1fb'; +} .fa-file-circle-check { - --fa: "\e5a0"; } + --fa: '\e5a0'; +} .fa-forward { - --fa: "\f04e"; } + --fa: '\f04e'; +} .fa-mobile { - --fa: "\f3ce"; } + --fa: '\f3ce'; +} .fa-mobile-android { - --fa: "\f3ce"; } + --fa: '\f3ce'; +} .fa-mobile-phone { - --fa: "\f3ce"; } + --fa: '\f3ce'; +} .fa-face-meh { - --fa: "\f11a"; } + --fa: '\f11a'; +} .fa-meh { - --fa: "\f11a"; } + --fa: '\f11a'; +} .fa-align-center { - --fa: "\f037"; } + --fa: '\f037'; +} .fa-book-skull { - --fa: "\f6b7"; } + --fa: '\f6b7'; +} .fa-book-dead { - --fa: "\f6b7"; } + --fa: '\f6b7'; +} .fa-id-card { - --fa: "\f2c2"; } + --fa: '\f2c2'; +} .fa-drivers-license { - --fa: "\f2c2"; } + --fa: '\f2c2'; +} .fa-outdent { - --fa: "\f03b"; } + --fa: '\f03b'; +} .fa-dedent { - --fa: "\f03b"; } + --fa: '\f03b'; +} .fa-heart-circle-exclamation { - --fa: "\e4fe"; } + --fa: '\e4fe'; +} .fa-house { - --fa: "\f015"; } + --fa: '\f015'; +} .fa-home { - --fa: "\f015"; } + --fa: '\f015'; +} .fa-home-alt { - --fa: "\f015"; } + --fa: '\f015'; +} .fa-home-lg-alt { - --fa: "\f015"; } + --fa: '\f015'; +} .fa-calendar-week { - --fa: "\f784"; } + --fa: '\f784'; +} .fa-laptop-medical { - --fa: "\f812"; } + --fa: '\f812'; +} .fa-b { - --fa: "\42"; } + --fa: '\42'; +} .fa-file-medical { - --fa: "\f477"; } + --fa: '\f477'; +} .fa-dice-one { - --fa: "\f525"; } + --fa: '\f525'; +} .fa-kiwi-bird { - --fa: "\f535"; } + --fa: '\f535'; +} .fa-arrow-right-arrow-left { - --fa: "\f0ec"; } + --fa: '\f0ec'; +} .fa-exchange { - --fa: "\f0ec"; } + --fa: '\f0ec'; +} .fa-rotate-right { - --fa: "\f2f9"; } + --fa: '\f2f9'; +} .fa-redo-alt { - --fa: "\f2f9"; } + --fa: '\f2f9'; +} .fa-rotate-forward { - --fa: "\f2f9"; } + --fa: '\f2f9'; +} .fa-utensils { - --fa: "\f2e7"; } + --fa: '\f2e7'; +} .fa-cutlery { - --fa: "\f2e7"; } + --fa: '\f2e7'; +} .fa-arrow-up-wide-short { - --fa: "\f161"; } + --fa: '\f161'; +} .fa-sort-amount-up { - --fa: "\f161"; } + --fa: '\f161'; +} .fa-mill-sign { - --fa: "\e1ed"; } + --fa: '\e1ed'; +} .fa-bowl-rice { - --fa: "\e2eb"; } + --fa: '\e2eb'; +} .fa-skull { - --fa: "\f54c"; } + --fa: '\f54c'; +} .fa-tower-broadcast { - --fa: "\f519"; } + --fa: '\f519'; +} .fa-broadcast-tower { - --fa: "\f519"; } + --fa: '\f519'; +} .fa-truck-pickup { - --fa: "\f63c"; } + --fa: '\f63c'; +} .fa-up-long { - --fa: "\f30c"; } + --fa: '\f30c'; +} .fa-long-arrow-alt-up { - --fa: "\f30c"; } + --fa: '\f30c'; +} .fa-stop { - --fa: "\f04d"; } + --fa: '\f04d'; +} .fa-code-merge { - --fa: "\f387"; } + --fa: '\f387'; +} .fa-upload { - --fa: "\f093"; } + --fa: '\f093'; +} .fa-hurricane { - --fa: "\f751"; } + --fa: '\f751'; +} .fa-mound { - --fa: "\e52d"; } + --fa: '\e52d'; +} .fa-toilet-portable { - --fa: "\e583"; } + --fa: '\e583'; +} .fa-compact-disc { - --fa: "\f51f"; } + --fa: '\f51f'; +} .fa-file-arrow-down { - --fa: "\f56d"; } + --fa: '\f56d'; +} .fa-file-download { - --fa: "\f56d"; } + --fa: '\f56d'; +} .fa-caravan { - --fa: "\f8ff"; } + --fa: '\f8ff'; +} .fa-shield-cat { - --fa: "\e572"; } + --fa: '\e572'; +} .fa-bolt { - --fa: "\f0e7"; } + --fa: '\f0e7'; +} .fa-zap { - --fa: "\f0e7"; } + --fa: '\f0e7'; +} .fa-glass-water { - --fa: "\e4f4"; } + --fa: '\e4f4'; +} .fa-oil-well { - --fa: "\e532"; } + --fa: '\e532'; +} .fa-vault { - --fa: "\e2c5"; } + --fa: '\e2c5'; +} .fa-mars { - --fa: "\f222"; } + --fa: '\f222'; +} .fa-toilet { - --fa: "\f7d8"; } + --fa: '\f7d8'; +} .fa-plane-circle-xmark { - --fa: "\e557"; } + --fa: '\e557'; +} .fa-yen-sign { - --fa: "\f157"; } + --fa: '\f157'; +} .fa-cny { - --fa: "\f157"; } + --fa: '\f157'; +} .fa-jpy { - --fa: "\f157"; } + --fa: '\f157'; +} .fa-rmb { - --fa: "\f157"; } + --fa: '\f157'; +} .fa-yen { - --fa: "\f157"; } + --fa: '\f157'; +} .fa-ruble-sign { - --fa: "\f158"; } + --fa: '\f158'; +} .fa-rouble { - --fa: "\f158"; } + --fa: '\f158'; +} .fa-rub { - --fa: "\f158"; } + --fa: '\f158'; +} .fa-ruble { - --fa: "\f158"; } + --fa: '\f158'; +} .fa-sun { - --fa: "\f185"; } + --fa: '\f185'; +} .fa-guitar { - --fa: "\f7a6"; } + --fa: '\f7a6'; +} .fa-face-laugh-wink { - --fa: "\f59c"; } + --fa: '\f59c'; +} .fa-laugh-wink { - --fa: "\f59c"; } + --fa: '\f59c'; +} .fa-horse-head { - --fa: "\f7ab"; } + --fa: '\f7ab'; +} .fa-bore-hole { - --fa: "\e4c3"; } + --fa: '\e4c3'; +} .fa-industry { - --fa: "\f275"; } + --fa: '\f275'; +} .fa-circle-down { - --fa: "\f358"; } + --fa: '\f358'; +} .fa-arrow-alt-circle-down { - --fa: "\f358"; } + --fa: '\f358'; +} .fa-arrows-turn-to-dots { - --fa: "\e4c1"; } + --fa: '\e4c1'; +} .fa-florin-sign { - --fa: "\e184"; } + --fa: '\e184'; +} .fa-arrow-down-short-wide { - --fa: "\f884"; } + --fa: '\f884'; +} .fa-sort-amount-desc { - --fa: "\f884"; } + --fa: '\f884'; +} .fa-sort-amount-down-alt { - --fa: "\f884"; } + --fa: '\f884'; +} .fa-less-than { - --fa: "\3c"; } + --fa: '\3c'; +} .fa-angle-down { - --fa: "\f107"; } + --fa: '\f107'; +} .fa-car-tunnel { - --fa: "\e4de"; } + --fa: '\e4de'; +} .fa-head-side-cough { - --fa: "\e061"; } + --fa: '\e061'; +} .fa-grip-lines { - --fa: "\f7a4"; } + --fa: '\f7a4'; +} .fa-thumbs-down { - --fa: "\f165"; } + --fa: '\f165'; +} .fa-user-lock { - --fa: "\f502"; } + --fa: '\f502'; +} .fa-arrow-right-long { - --fa: "\f178"; } + --fa: '\f178'; +} .fa-long-arrow-right { - --fa: "\f178"; } + --fa: '\f178'; +} .fa-anchor-circle-xmark { - --fa: "\e4ac"; } + --fa: '\e4ac'; +} .fa-ellipsis { - --fa: "\f141"; } + --fa: '\f141'; +} .fa-ellipsis-h { - --fa: "\f141"; } + --fa: '\f141'; +} .fa-chess-pawn { - --fa: "\f443"; } + --fa: '\f443'; +} .fa-kit-medical { - --fa: "\f479"; } + --fa: '\f479'; +} .fa-first-aid { - --fa: "\f479"; } + --fa: '\f479'; +} .fa-person-through-window { - --fa: "\e5a9"; } + --fa: '\e5a9'; +} .fa-toolbox { - --fa: "\f552"; } + --fa: '\f552'; +} .fa-hands-holding-circle { - --fa: "\e4fb"; } + --fa: '\e4fb'; +} .fa-bug { - --fa: "\f188"; } + --fa: '\f188'; +} .fa-credit-card { - --fa: "\f09d"; } + --fa: '\f09d'; +} .fa-credit-card-alt { - --fa: "\f09d"; } + --fa: '\f09d'; +} .fa-car { - --fa: "\f1b9"; } + --fa: '\f1b9'; +} .fa-automobile { - --fa: "\f1b9"; } + --fa: '\f1b9'; +} .fa-hand-holding-hand { - --fa: "\e4f7"; } + --fa: '\e4f7'; +} .fa-book-open-reader { - --fa: "\f5da"; } + --fa: '\f5da'; +} .fa-book-reader { - --fa: "\f5da"; } + --fa: '\f5da'; +} .fa-mountain-sun { - --fa: "\e52f"; } + --fa: '\e52f'; +} .fa-arrows-left-right-to-line { - --fa: "\e4ba"; } + --fa: '\e4ba'; +} .fa-dice-d20 { - --fa: "\f6cf"; } + --fa: '\f6cf'; +} .fa-truck-droplet { - --fa: "\e58c"; } + --fa: '\e58c'; +} .fa-file-circle-xmark { - --fa: "\e5a1"; } + --fa: '\e5a1'; +} .fa-temperature-arrow-up { - --fa: "\e040"; } + --fa: '\e040'; +} .fa-temperature-up { - --fa: "\e040"; } + --fa: '\e040'; +} .fa-medal { - --fa: "\f5a2"; } + --fa: '\f5a2'; +} .fa-bed { - --fa: "\f236"; } + --fa: '\f236'; +} .fa-square-h { - --fa: "\f0fd"; } + --fa: '\f0fd'; +} .fa-h-square { - --fa: "\f0fd"; } + --fa: '\f0fd'; +} .fa-podcast { - --fa: "\f2ce"; } + --fa: '\f2ce'; +} .fa-temperature-full { - --fa: "\f2c7"; } + --fa: '\f2c7'; +} .fa-temperature-4 { - --fa: "\f2c7"; } + --fa: '\f2c7'; +} .fa-thermometer-4 { - --fa: "\f2c7"; } + --fa: '\f2c7'; +} .fa-thermometer-full { - --fa: "\f2c7"; } + --fa: '\f2c7'; +} .fa-bell { - --fa: "\f0f3"; } + --fa: '\f0f3'; +} .fa-superscript { - --fa: "\f12b"; } + --fa: '\f12b'; +} .fa-plug-circle-xmark { - --fa: "\e560"; } + --fa: '\e560'; +} .fa-star-of-life { - --fa: "\f621"; } + --fa: '\f621'; +} .fa-phone-slash { - --fa: "\f3dd"; } + --fa: '\f3dd'; +} .fa-paint-roller { - --fa: "\f5aa"; } + --fa: '\f5aa'; +} .fa-handshake-angle { - --fa: "\f4c4"; } + --fa: '\f4c4'; +} .fa-hands-helping { - --fa: "\f4c4"; } + --fa: '\f4c4'; +} .fa-location-dot { - --fa: "\f3c5"; } + --fa: '\f3c5'; +} .fa-map-marker-alt { - --fa: "\f3c5"; } + --fa: '\f3c5'; +} .fa-file { - --fa: "\f15b"; } + --fa: '\f15b'; +} .fa-greater-than { - --fa: "\3e"; } + --fa: '\3e'; +} .fa-person-swimming { - --fa: "\f5c4"; } + --fa: '\f5c4'; +} .fa-swimmer { - --fa: "\f5c4"; } + --fa: '\f5c4'; +} .fa-arrow-down { - --fa: "\f063"; } + --fa: '\f063'; +} .fa-droplet { - --fa: "\f043"; } + --fa: '\f043'; +} .fa-tint { - --fa: "\f043"; } + --fa: '\f043'; +} .fa-eraser { - --fa: "\f12d"; } + --fa: '\f12d'; +} .fa-earth-americas { - --fa: "\f57d"; } + --fa: '\f57d'; +} .fa-earth { - --fa: "\f57d"; } + --fa: '\f57d'; +} .fa-earth-america { - --fa: "\f57d"; } + --fa: '\f57d'; +} .fa-globe-americas { - --fa: "\f57d"; } + --fa: '\f57d'; +} .fa-person-burst { - --fa: "\e53b"; } + --fa: '\e53b'; +} .fa-dove { - --fa: "\f4ba"; } + --fa: '\f4ba'; +} .fa-battery-empty { - --fa: "\f244"; } + --fa: '\f244'; +} .fa-battery-0 { - --fa: "\f244"; } + --fa: '\f244'; +} .fa-socks { - --fa: "\f696"; } + --fa: '\f696'; +} .fa-inbox { - --fa: "\f01c"; } + --fa: '\f01c'; +} .fa-section { - --fa: "\e447"; } + --fa: '\e447'; +} .fa-gauge-high { - --fa: "\f625"; } + --fa: '\f625'; +} .fa-tachometer-alt { - --fa: "\f625"; } + --fa: '\f625'; +} .fa-tachometer-alt-fast { - --fa: "\f625"; } + --fa: '\f625'; +} .fa-envelope-open-text { - --fa: "\f658"; } + --fa: '\f658'; +} .fa-hospital { - --fa: "\f0f8"; } + --fa: '\f0f8'; +} .fa-hospital-alt { - --fa: "\f0f8"; } + --fa: '\f0f8'; +} .fa-hospital-wide { - --fa: "\f0f8"; } + --fa: '\f0f8'; +} .fa-wine-bottle { - --fa: "\f72f"; } + --fa: '\f72f'; +} .fa-chess-rook { - --fa: "\f447"; } + --fa: '\f447'; +} .fa-bars-staggered { - --fa: "\f550"; } + --fa: '\f550'; +} .fa-reorder { - --fa: "\f550"; } + --fa: '\f550'; +} .fa-stream { - --fa: "\f550"; } + --fa: '\f550'; +} .fa-dharmachakra { - --fa: "\f655"; } + --fa: '\f655'; +} .fa-hotdog { - --fa: "\f80f"; } + --fa: '\f80f'; +} .fa-person-walking-with-cane { - --fa: "\f29d"; } + --fa: '\f29d'; +} .fa-blind { - --fa: "\f29d"; } + --fa: '\f29d'; +} .fa-drum { - --fa: "\f569"; } + --fa: '\f569'; +} .fa-ice-cream { - --fa: "\f810"; } + --fa: '\f810'; +} .fa-heart-circle-bolt { - --fa: "\e4fc"; } + --fa: '\e4fc'; +} .fa-fax { - --fa: "\f1ac"; } + --fa: '\f1ac'; +} .fa-paragraph { - --fa: "\f1dd"; } + --fa: '\f1dd'; +} .fa-check-to-slot { - --fa: "\f772"; } + --fa: '\f772'; +} .fa-vote-yea { - --fa: "\f772"; } + --fa: '\f772'; +} .fa-star-half { - --fa: "\f089"; } + --fa: '\f089'; +} .fa-boxes-stacked { - --fa: "\f468"; } + --fa: '\f468'; +} .fa-boxes { - --fa: "\f468"; } + --fa: '\f468'; +} .fa-boxes-alt { - --fa: "\f468"; } + --fa: '\f468'; +} .fa-link { - --fa: "\f0c1"; } + --fa: '\f0c1'; +} .fa-chain { - --fa: "\f0c1"; } + --fa: '\f0c1'; +} .fa-ear-listen { - --fa: "\f2a2"; } + --fa: '\f2a2'; +} .fa-assistive-listening-systems { - --fa: "\f2a2"; } + --fa: '\f2a2'; +} .fa-tree-city { - --fa: "\e587"; } + --fa: '\e587'; +} .fa-play { - --fa: "\f04b"; } + --fa: '\f04b'; +} .fa-font { - --fa: "\f031"; } + --fa: '\f031'; +} .fa-table-cells-row-lock { - --fa: "\e67a"; } + --fa: '\e67a'; +} .fa-rupiah-sign { - --fa: "\e23d"; } + --fa: '\e23d'; +} .fa-magnifying-glass { - --fa: "\f002"; } + --fa: '\f002'; +} .fa-search { - --fa: "\f002"; } + --fa: '\f002'; +} .fa-table-tennis-paddle-ball { - --fa: "\f45d"; } + --fa: '\f45d'; +} .fa-ping-pong-paddle-ball { - --fa: "\f45d"; } + --fa: '\f45d'; +} .fa-table-tennis { - --fa: "\f45d"; } + --fa: '\f45d'; +} .fa-person-dots-from-line { - --fa: "\f470"; } + --fa: '\f470'; +} .fa-diagnoses { - --fa: "\f470"; } + --fa: '\f470'; +} .fa-trash-can-arrow-up { - --fa: "\f82a"; } + --fa: '\f82a'; +} .fa-trash-restore-alt { - --fa: "\f82a"; } + --fa: '\f82a'; +} .fa-naira-sign { - --fa: "\e1f6"; } + --fa: '\e1f6'; +} .fa-cart-arrow-down { - --fa: "\f218"; } + --fa: '\f218'; +} .fa-walkie-talkie { - --fa: "\f8ef"; } + --fa: '\f8ef'; +} .fa-file-pen { - --fa: "\f31c"; } + --fa: '\f31c'; +} .fa-file-edit { - --fa: "\f31c"; } + --fa: '\f31c'; +} .fa-receipt { - --fa: "\f543"; } + --fa: '\f543'; +} .fa-square-pen { - --fa: "\f14b"; } + --fa: '\f14b'; +} .fa-pen-square { - --fa: "\f14b"; } + --fa: '\f14b'; +} .fa-pencil-square { - --fa: "\f14b"; } + --fa: '\f14b'; +} .fa-suitcase-rolling { - --fa: "\f5c1"; } + --fa: '\f5c1'; +} .fa-person-circle-exclamation { - --fa: "\e53f"; } + --fa: '\e53f'; +} .fa-chevron-down { - --fa: "\f078"; } + --fa: '\f078'; +} .fa-battery-full { - --fa: "\f240"; } + --fa: '\f240'; +} .fa-battery { - --fa: "\f240"; } + --fa: '\f240'; +} .fa-battery-5 { - --fa: "\f240"; } + --fa: '\f240'; +} .fa-skull-crossbones { - --fa: "\f714"; } + --fa: '\f714'; +} .fa-code-compare { - --fa: "\e13a"; } + --fa: '\e13a'; +} .fa-list-ul { - --fa: "\f0ca"; } + --fa: '\f0ca'; +} .fa-list-dots { - --fa: "\f0ca"; } + --fa: '\f0ca'; +} .fa-school-lock { - --fa: "\e56f"; } + --fa: '\e56f'; +} .fa-tower-cell { - --fa: "\e585"; } + --fa: '\e585'; +} .fa-down-long { - --fa: "\f309"; } + --fa: '\f309'; +} .fa-long-arrow-alt-down { - --fa: "\f309"; } + --fa: '\f309'; +} .fa-ranking-star { - --fa: "\e561"; } + --fa: '\e561'; +} .fa-chess-king { - --fa: "\f43f"; } + --fa: '\f43f'; +} .fa-person-harassing { - --fa: "\e549"; } + --fa: '\e549'; +} .fa-brazilian-real-sign { - --fa: "\e46c"; } + --fa: '\e46c'; +} .fa-landmark-dome { - --fa: "\f752"; } + --fa: '\f752'; +} .fa-landmark-alt { - --fa: "\f752"; } + --fa: '\f752'; +} .fa-arrow-up { - --fa: "\f062"; } + --fa: '\f062'; +} .fa-tv { - --fa: "\f26c"; } + --fa: '\f26c'; +} .fa-television { - --fa: "\f26c"; } + --fa: '\f26c'; +} .fa-tv-alt { - --fa: "\f26c"; } + --fa: '\f26c'; +} .fa-shrimp { - --fa: "\e448"; } + --fa: '\e448'; +} .fa-list-check { - --fa: "\f0ae"; } + --fa: '\f0ae'; +} .fa-tasks { - --fa: "\f0ae"; } + --fa: '\f0ae'; +} .fa-jug-detergent { - --fa: "\e519"; } + --fa: '\e519'; +} .fa-circle-user { - --fa: "\f2bd"; } + --fa: '\f2bd'; +} .fa-user-circle { - --fa: "\f2bd"; } + --fa: '\f2bd'; +} .fa-user-shield { - --fa: "\f505"; } + --fa: '\f505'; +} .fa-wind { - --fa: "\f72e"; } + --fa: '\f72e'; +} .fa-car-burst { - --fa: "\f5e1"; } + --fa: '\f5e1'; +} .fa-car-crash { - --fa: "\f5e1"; } + --fa: '\f5e1'; +} .fa-y { - --fa: "\59"; } + --fa: '\59'; +} .fa-person-snowboarding { - --fa: "\f7ce"; } + --fa: '\f7ce'; +} .fa-snowboarding { - --fa: "\f7ce"; } + --fa: '\f7ce'; +} .fa-truck-fast { - --fa: "\f48b"; } + --fa: '\f48b'; +} .fa-shipping-fast { - --fa: "\f48b"; } + --fa: '\f48b'; +} .fa-fish { - --fa: "\f578"; } + --fa: '\f578'; +} .fa-user-graduate { - --fa: "\f501"; } + --fa: '\f501'; +} .fa-circle-half-stroke { - --fa: "\f042"; } + --fa: '\f042'; +} .fa-adjust { - --fa: "\f042"; } + --fa: '\f042'; +} .fa-clapperboard { - --fa: "\e131"; } + --fa: '\e131'; +} .fa-circle-radiation { - --fa: "\f7ba"; } + --fa: '\f7ba'; +} .fa-radiation-alt { - --fa: "\f7ba"; } + --fa: '\f7ba'; +} .fa-baseball { - --fa: "\f433"; } + --fa: '\f433'; +} .fa-baseball-ball { - --fa: "\f433"; } + --fa: '\f433'; +} .fa-jet-fighter-up { - --fa: "\e518"; } + --fa: '\e518'; +} .fa-diagram-project { - --fa: "\f542"; } + --fa: '\f542'; +} .fa-project-diagram { - --fa: "\f542"; } + --fa: '\f542'; +} .fa-copy { - --fa: "\f0c5"; } + --fa: '\f0c5'; +} .fa-volume-xmark { - --fa: "\f6a9"; } + --fa: '\f6a9'; +} .fa-volume-mute { - --fa: "\f6a9"; } + --fa: '\f6a9'; +} .fa-volume-times { - --fa: "\f6a9"; } + --fa: '\f6a9'; +} .fa-hand-sparkles { - --fa: "\e05d"; } + --fa: '\e05d'; +} .fa-grip { - --fa: "\f58d"; } + --fa: '\f58d'; +} .fa-grip-horizontal { - --fa: "\f58d"; } + --fa: '\f58d'; +} .fa-share-from-square { - --fa: "\f14d"; } + --fa: '\f14d'; +} .fa-share-square { - --fa: "\f14d"; } + --fa: '\f14d'; +} .fa-child-combatant { - --fa: "\e4e0"; } + --fa: '\e4e0'; +} .fa-child-rifle { - --fa: "\e4e0"; } + --fa: '\e4e0'; +} .fa-gun { - --fa: "\e19b"; } + --fa: '\e19b'; +} .fa-square-phone { - --fa: "\f098"; } + --fa: '\f098'; +} .fa-phone-square { - --fa: "\f098"; } + --fa: '\f098'; +} .fa-plus { - --fa: "\2b"; } + --fa: '\2b'; +} .fa-add { - --fa: "\2b"; } + --fa: '\2b'; +} .fa-expand { - --fa: "\f065"; } + --fa: '\f065'; +} .fa-computer { - --fa: "\e4e5"; } + --fa: '\e4e5'; +} .fa-xmark { - --fa: "\f00d"; } + --fa: '\f00d'; +} .fa-close { - --fa: "\f00d"; } + --fa: '\f00d'; +} .fa-multiply { - --fa: "\f00d"; } + --fa: '\f00d'; +} .fa-remove { - --fa: "\f00d"; } + --fa: '\f00d'; +} .fa-times { - --fa: "\f00d"; } + --fa: '\f00d'; +} .fa-arrows-up-down-left-right { - --fa: "\f047"; } + --fa: '\f047'; +} .fa-arrows { - --fa: "\f047"; } + --fa: '\f047'; +} .fa-chalkboard-user { - --fa: "\f51c"; } + --fa: '\f51c'; +} .fa-chalkboard-teacher { - --fa: "\f51c"; } + --fa: '\f51c'; +} .fa-peso-sign { - --fa: "\e222"; } + --fa: '\e222'; +} .fa-building-shield { - --fa: "\e4d8"; } + --fa: '\e4d8'; +} .fa-baby { - --fa: "\f77c"; } + --fa: '\f77c'; +} .fa-users-line { - --fa: "\e592"; } + --fa: '\e592'; +} .fa-quote-left { - --fa: "\f10d"; } + --fa: '\f10d'; +} .fa-quote-left-alt { - --fa: "\f10d"; } + --fa: '\f10d'; +} .fa-tractor { - --fa: "\f722"; } + --fa: '\f722'; +} .fa-trash-arrow-up { - --fa: "\f829"; } + --fa: '\f829'; +} .fa-trash-restore { - --fa: "\f829"; } + --fa: '\f829'; +} .fa-arrow-down-up-lock { - --fa: "\e4b0"; } + --fa: '\e4b0'; +} .fa-lines-leaning { - --fa: "\e51e"; } + --fa: '\e51e'; +} .fa-ruler-combined { - --fa: "\f546"; } + --fa: '\f546'; +} .fa-copyright { - --fa: "\f1f9"; } + --fa: '\f1f9'; +} .fa-equals { - --fa: "\3d"; } + --fa: '\3d'; +} .fa-blender { - --fa: "\f517"; } + --fa: '\f517'; +} .fa-teeth { - --fa: "\f62e"; } + --fa: '\f62e'; +} .fa-shekel-sign { - --fa: "\f20b"; } + --fa: '\f20b'; +} .fa-ils { - --fa: "\f20b"; } + --fa: '\f20b'; +} .fa-shekel { - --fa: "\f20b"; } + --fa: '\f20b'; +} .fa-sheqel { - --fa: "\f20b"; } + --fa: '\f20b'; +} .fa-sheqel-sign { - --fa: "\f20b"; } + --fa: '\f20b'; +} .fa-map { - --fa: "\f279"; } + --fa: '\f279'; +} .fa-rocket { - --fa: "\f135"; } + --fa: '\f135'; +} .fa-photo-film { - --fa: "\f87c"; } + --fa: '\f87c'; +} .fa-photo-video { - --fa: "\f87c"; } + --fa: '\f87c'; +} .fa-folder-minus { - --fa: "\f65d"; } + --fa: '\f65d'; +} .fa-hexagon-nodes-bolt { - --fa: "\e69a"; } + --fa: '\e69a'; +} .fa-store { - --fa: "\f54e"; } + --fa: '\f54e'; +} .fa-arrow-trend-up { - --fa: "\e098"; } + --fa: '\e098'; +} .fa-plug-circle-minus { - --fa: "\e55e"; } + --fa: '\e55e'; +} .fa-sign-hanging { - --fa: "\f4d9"; } + --fa: '\f4d9'; +} .fa-sign { - --fa: "\f4d9"; } + --fa: '\f4d9'; +} .fa-bezier-curve { - --fa: "\f55b"; } + --fa: '\f55b'; +} .fa-bell-slash { - --fa: "\f1f6"; } + --fa: '\f1f6'; +} .fa-tablet { - --fa: "\f3fb"; } + --fa: '\f3fb'; +} .fa-tablet-android { - --fa: "\f3fb"; } + --fa: '\f3fb'; +} .fa-school-flag { - --fa: "\e56e"; } + --fa: '\e56e'; +} .fa-fill { - --fa: "\f575"; } + --fa: '\f575'; +} .fa-angle-up { - --fa: "\f106"; } + --fa: '\f106'; +} .fa-drumstick-bite { - --fa: "\f6d7"; } + --fa: '\f6d7'; +} .fa-holly-berry { - --fa: "\f7aa"; } + --fa: '\f7aa'; +} .fa-chevron-left { - --fa: "\f053"; } + --fa: '\f053'; +} .fa-bacteria { - --fa: "\e059"; } + --fa: '\e059'; +} .fa-hand-lizard { - --fa: "\f258"; } + --fa: '\f258'; +} .fa-notdef { - --fa: "\e1fe"; } + --fa: '\e1fe'; +} .fa-disease { - --fa: "\f7fa"; } + --fa: '\f7fa'; +} .fa-briefcase-medical { - --fa: "\f469"; } + --fa: '\f469'; +} .fa-genderless { - --fa: "\f22d"; } + --fa: '\f22d'; +} .fa-chevron-right { - --fa: "\f054"; } + --fa: '\f054'; +} .fa-retweet { - --fa: "\f079"; } + --fa: '\f079'; +} .fa-car-rear { - --fa: "\f5de"; } + --fa: '\f5de'; +} .fa-car-alt { - --fa: "\f5de"; } + --fa: '\f5de'; +} .fa-pump-soap { - --fa: "\e06b"; } + --fa: '\e06b'; +} .fa-video-slash { - --fa: "\f4e2"; } + --fa: '\f4e2'; +} .fa-battery-quarter { - --fa: "\f243"; } + --fa: '\f243'; +} .fa-battery-2 { - --fa: "\f243"; } + --fa: '\f243'; +} .fa-radio { - --fa: "\f8d7"; } + --fa: '\f8d7'; +} .fa-baby-carriage { - --fa: "\f77d"; } + --fa: '\f77d'; +} .fa-carriage-baby { - --fa: "\f77d"; } + --fa: '\f77d'; +} .fa-traffic-light { - --fa: "\f637"; } + --fa: '\f637'; +} .fa-thermometer { - --fa: "\f491"; } + --fa: '\f491'; +} .fa-vr-cardboard { - --fa: "\f729"; } + --fa: '\f729'; +} .fa-hand-middle-finger { - --fa: "\f806"; } + --fa: '\f806'; +} .fa-percent { - --fa: "\25"; } + --fa: '\25'; +} .fa-percentage { - --fa: "\25"; } + --fa: '\25'; +} .fa-truck-moving { - --fa: "\f4df"; } + --fa: '\f4df'; +} .fa-glass-water-droplet { - --fa: "\e4f5"; } + --fa: '\e4f5'; +} .fa-display { - --fa: "\e163"; } + --fa: '\e163'; +} .fa-face-smile { - --fa: "\f118"; } + --fa: '\f118'; +} .fa-smile { - --fa: "\f118"; } + --fa: '\f118'; +} .fa-thumbtack { - --fa: "\f08d"; } + --fa: '\f08d'; +} .fa-thumb-tack { - --fa: "\f08d"; } + --fa: '\f08d'; +} .fa-trophy { - --fa: "\f091"; } + --fa: '\f091'; +} .fa-person-praying { - --fa: "\f683"; } + --fa: '\f683'; +} .fa-pray { - --fa: "\f683"; } + --fa: '\f683'; +} .fa-hammer { - --fa: "\f6e3"; } + --fa: '\f6e3'; +} .fa-hand-peace { - --fa: "\f25b"; } + --fa: '\f25b'; +} .fa-rotate { - --fa: "\f2f1"; } + --fa: '\f2f1'; +} .fa-sync-alt { - --fa: "\f2f1"; } + --fa: '\f2f1'; +} .fa-spinner { - --fa: "\f110"; } + --fa: '\f110'; +} .fa-robot { - --fa: "\f544"; } + --fa: '\f544'; +} .fa-peace { - --fa: "\f67c"; } + --fa: '\f67c'; +} .fa-gears { - --fa: "\f085"; } + --fa: '\f085'; +} .fa-cogs { - --fa: "\f085"; } + --fa: '\f085'; +} .fa-warehouse { - --fa: "\f494"; } + --fa: '\f494'; +} .fa-arrow-up-right-dots { - --fa: "\e4b7"; } + --fa: '\e4b7'; +} .fa-splotch { - --fa: "\f5bc"; } + --fa: '\f5bc'; +} .fa-face-grin-hearts { - --fa: "\f584"; } + --fa: '\f584'; +} .fa-grin-hearts { - --fa: "\f584"; } + --fa: '\f584'; +} .fa-dice-four { - --fa: "\f524"; } + --fa: '\f524'; +} .fa-sim-card { - --fa: "\f7c4"; } + --fa: '\f7c4'; +} .fa-transgender { - --fa: "\f225"; } + --fa: '\f225'; +} .fa-transgender-alt { - --fa: "\f225"; } + --fa: '\f225'; +} .fa-mercury { - --fa: "\f223"; } + --fa: '\f223'; +} .fa-arrow-turn-down { - --fa: "\f149"; } + --fa: '\f149'; +} .fa-level-down { - --fa: "\f149"; } + --fa: '\f149'; +} .fa-person-falling-burst { - --fa: "\e547"; } + --fa: '\e547'; +} .fa-award { - --fa: "\f559"; } + --fa: '\f559'; +} .fa-ticket-simple { - --fa: "\f3ff"; } + --fa: '\f3ff'; +} .fa-ticket-alt { - --fa: "\f3ff"; } + --fa: '\f3ff'; +} .fa-building { - --fa: "\f1ad"; } + --fa: '\f1ad'; +} .fa-angles-left { - --fa: "\f100"; } + --fa: '\f100'; +} .fa-angle-double-left { - --fa: "\f100"; } + --fa: '\f100'; +} .fa-qrcode { - --fa: "\f029"; } + --fa: '\f029'; +} .fa-clock-rotate-left { - --fa: "\f1da"; } + --fa: '\f1da'; +} .fa-history { - --fa: "\f1da"; } + --fa: '\f1da'; +} .fa-face-grin-beam-sweat { - --fa: "\f583"; } + --fa: '\f583'; +} .fa-grin-beam-sweat { - --fa: "\f583"; } + --fa: '\f583'; +} .fa-file-export { - --fa: "\f56e"; } + --fa: '\f56e'; +} .fa-arrow-right-from-file { - --fa: "\f56e"; } + --fa: '\f56e'; +} .fa-shield { - --fa: "\f132"; } + --fa: '\f132'; +} .fa-shield-blank { - --fa: "\f132"; } + --fa: '\f132'; +} .fa-arrow-up-short-wide { - --fa: "\f885"; } + --fa: '\f885'; +} .fa-sort-amount-up-alt { - --fa: "\f885"; } + --fa: '\f885'; +} .fa-comment-nodes { - --fa: "\e696"; } + --fa: '\e696'; +} .fa-house-medical { - --fa: "\e3b2"; } + --fa: '\e3b2'; +} .fa-golf-ball-tee { - --fa: "\f450"; } + --fa: '\f450'; +} .fa-golf-ball { - --fa: "\f450"; } + --fa: '\f450'; +} .fa-circle-chevron-left { - --fa: "\f137"; } + --fa: '\f137'; +} .fa-chevron-circle-left { - --fa: "\f137"; } + --fa: '\f137'; +} .fa-house-chimney-window { - --fa: "\e00d"; } + --fa: '\e00d'; +} .fa-pen-nib { - --fa: "\f5ad"; } + --fa: '\f5ad'; +} .fa-tent-arrow-turn-left { - --fa: "\e580"; } + --fa: '\e580'; +} .fa-tents { - --fa: "\e582"; } + --fa: '\e582'; +} .fa-wand-magic { - --fa: "\f0d0"; } + --fa: '\f0d0'; +} .fa-magic { - --fa: "\f0d0"; } + --fa: '\f0d0'; +} .fa-dog { - --fa: "\f6d3"; } + --fa: '\f6d3'; +} .fa-carrot { - --fa: "\f787"; } + --fa: '\f787'; +} .fa-moon { - --fa: "\f186"; } + --fa: '\f186'; +} .fa-wine-glass-empty { - --fa: "\f5ce"; } + --fa: '\f5ce'; +} .fa-wine-glass-alt { - --fa: "\f5ce"; } + --fa: '\f5ce'; +} .fa-cheese { - --fa: "\f7ef"; } + --fa: '\f7ef'; +} .fa-yin-yang { - --fa: "\f6ad"; } + --fa: '\f6ad'; +} .fa-music { - --fa: "\f001"; } + --fa: '\f001'; +} .fa-code-commit { - --fa: "\f386"; } + --fa: '\f386'; +} .fa-temperature-low { - --fa: "\f76b"; } + --fa: '\f76b'; +} .fa-person-biking { - --fa: "\f84a"; } + --fa: '\f84a'; +} .fa-biking { - --fa: "\f84a"; } + --fa: '\f84a'; +} .fa-broom { - --fa: "\f51a"; } + --fa: '\f51a'; +} .fa-shield-heart { - --fa: "\e574"; } + --fa: '\e574'; +} .fa-gopuram { - --fa: "\f664"; } + --fa: '\f664'; +} .fa-earth-oceania { - --fa: "\e47b"; } + --fa: '\e47b'; +} .fa-globe-oceania { - --fa: "\e47b"; } + --fa: '\e47b'; +} .fa-square-xmark { - --fa: "\f2d3"; } + --fa: '\f2d3'; +} .fa-times-square { - --fa: "\f2d3"; } + --fa: '\f2d3'; +} .fa-xmark-square { - --fa: "\f2d3"; } + --fa: '\f2d3'; +} .fa-hashtag { - --fa: "\23"; } + --fa: '\23'; +} .fa-up-right-and-down-left-from-center { - --fa: "\f424"; } + --fa: '\f424'; +} .fa-expand-alt { - --fa: "\f424"; } + --fa: '\f424'; +} .fa-oil-can { - --fa: "\f613"; } + --fa: '\f613'; +} .fa-t { - --fa: "\54"; } + --fa: '\54'; +} .fa-hippo { - --fa: "\f6ed"; } + --fa: '\f6ed'; +} .fa-chart-column { - --fa: "\e0e3"; } + --fa: '\e0e3'; +} .fa-infinity { - --fa: "\f534"; } + --fa: '\f534'; +} .fa-vial-circle-check { - --fa: "\e596"; } + --fa: '\e596'; +} .fa-person-arrow-down-to-line { - --fa: "\e538"; } + --fa: '\e538'; +} .fa-voicemail { - --fa: "\f897"; } + --fa: '\f897'; +} .fa-fan { - --fa: "\f863"; } + --fa: '\f863'; +} .fa-person-walking-luggage { - --fa: "\e554"; } + --fa: '\e554'; +} .fa-up-down { - --fa: "\f338"; } + --fa: '\f338'; +} .fa-arrows-alt-v { - --fa: "\f338"; } + --fa: '\f338'; +} .fa-cloud-moon-rain { - --fa: "\f73c"; } + --fa: '\f73c'; +} .fa-calendar { - --fa: "\f133"; } + --fa: '\f133'; +} .fa-trailer { - --fa: "\e041"; } + --fa: '\e041'; +} .fa-bahai { - --fa: "\f666"; } + --fa: '\f666'; +} .fa-haykal { - --fa: "\f666"; } + --fa: '\f666'; +} .fa-sd-card { - --fa: "\f7c2"; } + --fa: '\f7c2'; +} .fa-dragon { - --fa: "\f6d5"; } + --fa: '\f6d5'; +} .fa-shoe-prints { - --fa: "\f54b"; } + --fa: '\f54b'; +} .fa-circle-plus { - --fa: "\f055"; } + --fa: '\f055'; +} .fa-plus-circle { - --fa: "\f055"; } + --fa: '\f055'; +} .fa-face-grin-tongue-wink { - --fa: "\f58b"; } + --fa: '\f58b'; +} .fa-grin-tongue-wink { - --fa: "\f58b"; } + --fa: '\f58b'; +} .fa-hand-holding { - --fa: "\f4bd"; } + --fa: '\f4bd'; +} .fa-plug-circle-exclamation { - --fa: "\e55d"; } + --fa: '\e55d'; +} .fa-link-slash { - --fa: "\f127"; } + --fa: '\f127'; +} .fa-chain-broken { - --fa: "\f127"; } + --fa: '\f127'; +} .fa-chain-slash { - --fa: "\f127"; } + --fa: '\f127'; +} .fa-unlink { - --fa: "\f127"; } + --fa: '\f127'; +} .fa-clone { - --fa: "\f24d"; } + --fa: '\f24d'; +} .fa-person-walking-arrow-loop-left { - --fa: "\e551"; } + --fa: '\e551'; +} .fa-arrow-up-z-a { - --fa: "\f882"; } + --fa: '\f882'; +} .fa-sort-alpha-up-alt { - --fa: "\f882"; } + --fa: '\f882'; +} .fa-fire-flame-curved { - --fa: "\f7e4"; } + --fa: '\f7e4'; +} .fa-fire-alt { - --fa: "\f7e4"; } + --fa: '\f7e4'; +} .fa-tornado { - --fa: "\f76f"; } + --fa: '\f76f'; +} .fa-file-circle-plus { - --fa: "\e494"; } + --fa: '\e494'; +} .fa-book-quran { - --fa: "\f687"; } + --fa: '\f687'; +} .fa-quran { - --fa: "\f687"; } + --fa: '\f687'; +} .fa-anchor { - --fa: "\f13d"; } + --fa: '\f13d'; +} .fa-border-all { - --fa: "\f84c"; } + --fa: '\f84c'; +} .fa-face-angry { - --fa: "\f556"; } + --fa: '\f556'; +} .fa-angry { - --fa: "\f556"; } + --fa: '\f556'; +} .fa-cookie-bite { - --fa: "\f564"; } + --fa: '\f564'; +} .fa-arrow-trend-down { - --fa: "\e097"; } + --fa: '\e097'; +} .fa-rss { - --fa: "\f09e"; } + --fa: '\f09e'; +} .fa-feed { - --fa: "\f09e"; } + --fa: '\f09e'; +} .fa-draw-polygon { - --fa: "\f5ee"; } + --fa: '\f5ee'; +} .fa-scale-balanced { - --fa: "\f24e"; } + --fa: '\f24e'; +} .fa-balance-scale { - --fa: "\f24e"; } + --fa: '\f24e'; +} .fa-gauge-simple-high { - --fa: "\f62a"; } + --fa: '\f62a'; +} .fa-tachometer { - --fa: "\f62a"; } + --fa: '\f62a'; +} .fa-tachometer-fast { - --fa: "\f62a"; } + --fa: '\f62a'; +} .fa-shower { - --fa: "\f2cc"; } + --fa: '\f2cc'; +} .fa-desktop { - --fa: "\f390"; } + --fa: '\f390'; +} .fa-desktop-alt { - --fa: "\f390"; } + --fa: '\f390'; +} .fa-m { - --fa: "\4d"; } + --fa: '\4d'; +} .fa-table-list { - --fa: "\f00b"; } + --fa: '\f00b'; +} .fa-th-list { - --fa: "\f00b"; } + --fa: '\f00b'; +} .fa-comment-sms { - --fa: "\f7cd"; } + --fa: '\f7cd'; +} .fa-sms { - --fa: "\f7cd"; } + --fa: '\f7cd'; +} .fa-book { - --fa: "\f02d"; } + --fa: '\f02d'; +} .fa-user-plus { - --fa: "\f234"; } + --fa: '\f234'; +} .fa-check { - --fa: "\f00c"; } + --fa: '\f00c'; +} .fa-battery-three-quarters { - --fa: "\f241"; } + --fa: '\f241'; +} .fa-battery-4 { - --fa: "\f241"; } + --fa: '\f241'; +} .fa-house-circle-check { - --fa: "\e509"; } + --fa: '\e509'; +} .fa-angle-left { - --fa: "\f104"; } + --fa: '\f104'; +} .fa-diagram-successor { - --fa: "\e47a"; } + --fa: '\e47a'; +} .fa-truck-arrow-right { - --fa: "\e58b"; } + --fa: '\e58b'; +} .fa-arrows-split-up-and-left { - --fa: "\e4bc"; } + --fa: '\e4bc'; +} .fa-hand-fist { - --fa: "\f6de"; } + --fa: '\f6de'; +} .fa-fist-raised { - --fa: "\f6de"; } + --fa: '\f6de'; +} .fa-cloud-moon { - --fa: "\f6c3"; } + --fa: '\f6c3'; +} .fa-briefcase { - --fa: "\f0b1"; } + --fa: '\f0b1'; +} .fa-person-falling { - --fa: "\e546"; } + --fa: '\e546'; +} .fa-image-portrait { - --fa: "\f3e0"; } + --fa: '\f3e0'; +} .fa-portrait { - --fa: "\f3e0"; } + --fa: '\f3e0'; +} .fa-user-tag { - --fa: "\f507"; } + --fa: '\f507'; +} .fa-rug { - --fa: "\e569"; } + --fa: '\e569'; +} .fa-earth-europe { - --fa: "\f7a2"; } + --fa: '\f7a2'; +} .fa-globe-europe { - --fa: "\f7a2"; } + --fa: '\f7a2'; +} .fa-cart-flatbed-suitcase { - --fa: "\f59d"; } + --fa: '\f59d'; +} .fa-luggage-cart { - --fa: "\f59d"; } + --fa: '\f59d'; +} .fa-rectangle-xmark { - --fa: "\f410"; } + --fa: '\f410'; +} .fa-rectangle-times { - --fa: "\f410"; } + --fa: '\f410'; +} .fa-times-rectangle { - --fa: "\f410"; } + --fa: '\f410'; +} .fa-window-close { - --fa: "\f410"; } + --fa: '\f410'; +} .fa-baht-sign { - --fa: "\e0ac"; } + --fa: '\e0ac'; +} .fa-book-open { - --fa: "\f518"; } + --fa: '\f518'; +} .fa-book-journal-whills { - --fa: "\f66a"; } + --fa: '\f66a'; +} .fa-journal-whills { - --fa: "\f66a"; } + --fa: '\f66a'; +} .fa-handcuffs { - --fa: "\e4f8"; } + --fa: '\e4f8'; +} .fa-triangle-exclamation { - --fa: "\f071"; } + --fa: '\f071'; +} .fa-exclamation-triangle { - --fa: "\f071"; } + --fa: '\f071'; +} .fa-warning { - --fa: "\f071"; } + --fa: '\f071'; +} .fa-database { - --fa: "\f1c0"; } + --fa: '\f1c0'; +} .fa-share { - --fa: "\f064"; } + --fa: '\f064'; +} .fa-mail-forward { - --fa: "\f064"; } + --fa: '\f064'; +} .fa-bottle-droplet { - --fa: "\e4c4"; } + --fa: '\e4c4'; +} .fa-mask-face { - --fa: "\e1d7"; } + --fa: '\e1d7'; +} .fa-hill-rockslide { - --fa: "\e508"; } + --fa: '\e508'; +} .fa-right-left { - --fa: "\f362"; } + --fa: '\f362'; +} .fa-exchange-alt { - --fa: "\f362"; } + --fa: '\f362'; +} .fa-paper-plane { - --fa: "\f1d8"; } + --fa: '\f1d8'; +} .fa-road-circle-exclamation { - --fa: "\e565"; } + --fa: '\e565'; +} .fa-dungeon { - --fa: "\f6d9"; } + --fa: '\f6d9'; +} .fa-align-right { - --fa: "\f038"; } + --fa: '\f038'; +} .fa-money-bill-1-wave { - --fa: "\f53b"; } + --fa: '\f53b'; +} .fa-money-bill-wave-alt { - --fa: "\f53b"; } + --fa: '\f53b'; +} .fa-life-ring { - --fa: "\f1cd"; } + --fa: '\f1cd'; +} .fa-hands { - --fa: "\f2a7"; } + --fa: '\f2a7'; +} .fa-sign-language { - --fa: "\f2a7"; } + --fa: '\f2a7'; +} .fa-signing { - --fa: "\f2a7"; } + --fa: '\f2a7'; +} .fa-calendar-day { - --fa: "\f783"; } + --fa: '\f783'; +} .fa-water-ladder { - --fa: "\f5c5"; } + --fa: '\f5c5'; +} .fa-ladder-water { - --fa: "\f5c5"; } + --fa: '\f5c5'; +} .fa-swimming-pool { - --fa: "\f5c5"; } + --fa: '\f5c5'; +} .fa-arrows-up-down { - --fa: "\f07d"; } + --fa: '\f07d'; +} .fa-arrows-v { - --fa: "\f07d"; } + --fa: '\f07d'; +} .fa-face-grimace { - --fa: "\f57f"; } + --fa: '\f57f'; +} .fa-grimace { - --fa: "\f57f"; } + --fa: '\f57f'; +} .fa-wheelchair-move { - --fa: "\e2ce"; } + --fa: '\e2ce'; +} .fa-wheelchair-alt { - --fa: "\e2ce"; } + --fa: '\e2ce'; +} .fa-turn-down { - --fa: "\f3be"; } + --fa: '\f3be'; +} .fa-level-down-alt { - --fa: "\f3be"; } + --fa: '\f3be'; +} .fa-person-walking-arrow-right { - --fa: "\e552"; } + --fa: '\e552'; +} .fa-square-envelope { - --fa: "\f199"; } + --fa: '\f199'; +} .fa-envelope-square { - --fa: "\f199"; } + --fa: '\f199'; +} .fa-dice { - --fa: "\f522"; } + --fa: '\f522'; +} .fa-bowling-ball { - --fa: "\f436"; } + --fa: '\f436'; +} .fa-brain { - --fa: "\f5dc"; } + --fa: '\f5dc'; +} .fa-bandage { - --fa: "\f462"; } + --fa: '\f462'; +} .fa-band-aid { - --fa: "\f462"; } + --fa: '\f462'; +} .fa-calendar-minus { - --fa: "\f272"; } + --fa: '\f272'; +} .fa-circle-xmark { - --fa: "\f057"; } + --fa: '\f057'; +} .fa-times-circle { - --fa: "\f057"; } + --fa: '\f057'; +} .fa-xmark-circle { - --fa: "\f057"; } + --fa: '\f057'; +} .fa-gifts { - --fa: "\f79c"; } + --fa: '\f79c'; +} .fa-hotel { - --fa: "\f594"; } + --fa: '\f594'; +} .fa-earth-asia { - --fa: "\f57e"; } + --fa: '\f57e'; +} .fa-globe-asia { - --fa: "\f57e"; } + --fa: '\f57e'; +} .fa-id-card-clip { - --fa: "\f47f"; } + --fa: '\f47f'; +} .fa-id-card-alt { - --fa: "\f47f"; } + --fa: '\f47f'; +} .fa-magnifying-glass-plus { - --fa: "\f00e"; } + --fa: '\f00e'; +} .fa-search-plus { - --fa: "\f00e"; } + --fa: '\f00e'; +} .fa-thumbs-up { - --fa: "\f164"; } + --fa: '\f164'; +} .fa-user-clock { - --fa: "\f4fd"; } + --fa: '\f4fd'; +} .fa-hand-dots { - --fa: "\f461"; } + --fa: '\f461'; +} .fa-allergies { - --fa: "\f461"; } + --fa: '\f461'; +} .fa-file-invoice { - --fa: "\f570"; } + --fa: '\f570'; +} .fa-window-minimize { - --fa: "\f2d1"; } + --fa: '\f2d1'; +} .fa-mug-saucer { - --fa: "\f0f4"; } + --fa: '\f0f4'; +} .fa-coffee { - --fa: "\f0f4"; } + --fa: '\f0f4'; +} .fa-brush { - --fa: "\f55d"; } + --fa: '\f55d'; +} .fa-file-half-dashed { - --fa: "\e698"; } + --fa: '\e698'; +} .fa-mask { - --fa: "\f6fa"; } + --fa: '\f6fa'; +} .fa-magnifying-glass-minus { - --fa: "\f010"; } + --fa: '\f010'; +} .fa-search-minus { - --fa: "\f010"; } + --fa: '\f010'; +} .fa-ruler-vertical { - --fa: "\f548"; } + --fa: '\f548'; +} .fa-user-large { - --fa: "\f406"; } + --fa: '\f406'; +} .fa-user-alt { - --fa: "\f406"; } + --fa: '\f406'; +} .fa-train-tram { - --fa: "\e5b4"; } + --fa: '\e5b4'; +} .fa-user-nurse { - --fa: "\f82f"; } + --fa: '\f82f'; +} .fa-syringe { - --fa: "\f48e"; } + --fa: '\f48e'; +} .fa-cloud-sun { - --fa: "\f6c4"; } + --fa: '\f6c4'; +} .fa-stopwatch-20 { - --fa: "\e06f"; } + --fa: '\e06f'; +} .fa-square-full { - --fa: "\f45c"; } + --fa: '\f45c'; +} .fa-magnet { - --fa: "\f076"; } + --fa: '\f076'; +} .fa-jar { - --fa: "\e516"; } + --fa: '\e516'; +} .fa-note-sticky { - --fa: "\f249"; } + --fa: '\f249'; +} .fa-sticky-note { - --fa: "\f249"; } + --fa: '\f249'; +} .fa-bug-slash { - --fa: "\e490"; } + --fa: '\e490'; +} .fa-arrow-up-from-water-pump { - --fa: "\e4b6"; } + --fa: '\e4b6'; +} .fa-bone { - --fa: "\f5d7"; } + --fa: '\f5d7'; +} .fa-table-cells-row-unlock { - --fa: "\e691"; } + --fa: '\e691'; +} .fa-user-injured { - --fa: "\f728"; } + --fa: '\f728'; +} .fa-face-sad-tear { - --fa: "\f5b4"; } + --fa: '\f5b4'; +} .fa-sad-tear { - --fa: "\f5b4"; } + --fa: '\f5b4'; +} .fa-plane { - --fa: "\f072"; } + --fa: '\f072'; +} .fa-tent-arrows-down { - --fa: "\e581"; } + --fa: '\e581'; +} .fa-exclamation { - --fa: "\21"; } + --fa: '\21'; +} .fa-arrows-spin { - --fa: "\e4bb"; } + --fa: '\e4bb'; +} .fa-print { - --fa: "\f02f"; } + --fa: '\f02f'; +} .fa-turkish-lira-sign { - --fa: "\e2bb"; } + --fa: '\e2bb'; +} .fa-try { - --fa: "\e2bb"; } + --fa: '\e2bb'; +} .fa-turkish-lira { - --fa: "\e2bb"; } + --fa: '\e2bb'; +} .fa-dollar-sign { - --fa: "\24"; } + --fa: '\24'; +} .fa-dollar { - --fa: "\24"; } + --fa: '\24'; +} .fa-usd { - --fa: "\24"; } + --fa: '\24'; +} .fa-x { - --fa: "\58"; } + --fa: '\58'; +} .fa-magnifying-glass-dollar { - --fa: "\f688"; } + --fa: '\f688'; +} .fa-search-dollar { - --fa: "\f688"; } + --fa: '\f688'; +} .fa-users-gear { - --fa: "\f509"; } + --fa: '\f509'; +} .fa-users-cog { - --fa: "\f509"; } + --fa: '\f509'; +} .fa-person-military-pointing { - --fa: "\e54a"; } + --fa: '\e54a'; +} .fa-building-columns { - --fa: "\f19c"; } + --fa: '\f19c'; +} .fa-bank { - --fa: "\f19c"; } + --fa: '\f19c'; +} .fa-institution { - --fa: "\f19c"; } + --fa: '\f19c'; +} .fa-museum { - --fa: "\f19c"; } + --fa: '\f19c'; +} .fa-university { - --fa: "\f19c"; } + --fa: '\f19c'; +} .fa-umbrella { - --fa: "\f0e9"; } + --fa: '\f0e9'; +} .fa-trowel { - --fa: "\e589"; } + --fa: '\e589'; +} .fa-d { - --fa: "\44"; } + --fa: '\44'; +} .fa-stapler { - --fa: "\e5af"; } + --fa: '\e5af'; +} .fa-masks-theater { - --fa: "\f630"; } + --fa: '\f630'; +} .fa-theater-masks { - --fa: "\f630"; } + --fa: '\f630'; +} .fa-kip-sign { - --fa: "\e1c4"; } + --fa: '\e1c4'; +} .fa-hand-point-left { - --fa: "\f0a5"; } + --fa: '\f0a5'; +} .fa-handshake-simple { - --fa: "\f4c6"; } + --fa: '\f4c6'; +} .fa-handshake-alt { - --fa: "\f4c6"; } + --fa: '\f4c6'; +} .fa-jet-fighter { - --fa: "\f0fb"; } + --fa: '\f0fb'; +} .fa-fighter-jet { - --fa: "\f0fb"; } + --fa: '\f0fb'; +} .fa-square-share-nodes { - --fa: "\f1e1"; } + --fa: '\f1e1'; +} .fa-share-alt-square { - --fa: "\f1e1"; } + --fa: '\f1e1'; +} .fa-barcode { - --fa: "\f02a"; } + --fa: '\f02a'; +} .fa-plus-minus { - --fa: "\e43c"; } + --fa: '\e43c'; +} .fa-video { - --fa: "\f03d"; } + --fa: '\f03d'; +} .fa-video-camera { - --fa: "\f03d"; } + --fa: '\f03d'; +} .fa-graduation-cap { - --fa: "\f19d"; } + --fa: '\f19d'; +} .fa-mortar-board { - --fa: "\f19d"; } + --fa: '\f19d'; +} .fa-hand-holding-medical { - --fa: "\e05c"; } + --fa: '\e05c'; +} .fa-person-circle-check { - --fa: "\e53e"; } + --fa: '\e53e'; +} .fa-turn-up { - --fa: "\f3bf"; } + --fa: '\f3bf'; +} .fa-level-up-alt { - --fa: "\f3bf"; } + --fa: '\f3bf'; +} .sr-only, .fa-sr-only { @@ -6228,7 +8285,8 @@ readers do not read off random characters that represent icons */ overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; - border-width: 0; } + border-width: 0; +} .sr-only-focusable:not(:focus), .fa-sr-only-focusable:not(:focus) { @@ -6240,1674 +8298,2233 @@ readers do not read off random characters that represent icons */ overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; - border-width: 0; } -:root, :host { + border-width: 0; +} +:root, +:host { --fa-style-family-brands: 'Font Awesome 6 Brands'; - --fa-font-brands: normal 400 1em/1 '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("./fa-brands-400.woff2") format("woff2"); } + src: url('./fa-brands-400.woff2') format('woff2'); +} .fab, .fa-brands { - font-weight: 400; } + font-weight: 400; +} .fa-monero { - --fa: "\f3d0"; } + --fa: '\f3d0'; +} .fa-hooli { - --fa: "\f427"; } + --fa: '\f427'; +} .fa-yelp { - --fa: "\f1e9"; } + --fa: '\f1e9'; +} .fa-cc-visa { - --fa: "\f1f0"; } + --fa: '\f1f0'; +} .fa-lastfm { - --fa: "\f202"; } + --fa: '\f202'; +} .fa-shopware { - --fa: "\f5b5"; } + --fa: '\f5b5'; +} .fa-creative-commons-nc { - --fa: "\f4e8"; } + --fa: '\f4e8'; +} .fa-aws { - --fa: "\f375"; } + --fa: '\f375'; +} .fa-redhat { - --fa: "\f7bc"; } + --fa: '\f7bc'; +} .fa-yoast { - --fa: "\f2b1"; } + --fa: '\f2b1'; +} .fa-cloudflare { - --fa: "\e07d"; } + --fa: '\e07d'; +} .fa-ups { - --fa: "\f7e0"; } + --fa: '\f7e0'; +} .fa-pixiv { - --fa: "\e640"; } + --fa: '\e640'; +} .fa-wpexplorer { - --fa: "\f2de"; } + --fa: '\f2de'; +} .fa-dyalog { - --fa: "\f399"; } + --fa: '\f399'; +} .fa-bity { - --fa: "\f37a"; } + --fa: '\f37a'; +} .fa-stackpath { - --fa: "\f842"; } + --fa: '\f842'; +} .fa-buysellads { - --fa: "\f20d"; } + --fa: '\f20d'; +} .fa-first-order { - --fa: "\f2b0"; } + --fa: '\f2b0'; +} .fa-modx { - --fa: "\f285"; } + --fa: '\f285'; +} .fa-guilded { - --fa: "\e07e"; } + --fa: '\e07e'; +} .fa-vnv { - --fa: "\f40b"; } + --fa: '\f40b'; +} .fa-square-js { - --fa: "\f3b9"; } + --fa: '\f3b9'; +} .fa-js-square { - --fa: "\f3b9"; } + --fa: '\f3b9'; +} .fa-microsoft { - --fa: "\f3ca"; } + --fa: '\f3ca'; +} .fa-qq { - --fa: "\f1d6"; } + --fa: '\f1d6'; +} .fa-orcid { - --fa: "\f8d2"; } + --fa: '\f8d2'; +} .fa-java { - --fa: "\f4e4"; } + --fa: '\f4e4'; +} .fa-invision { - --fa: "\f7b0"; } + --fa: '\f7b0'; +} .fa-creative-commons-pd-alt { - --fa: "\f4ed"; } + --fa: '\f4ed'; +} .fa-centercode { - --fa: "\f380"; } + --fa: '\f380'; +} .fa-glide-g { - --fa: "\f2a6"; } + --fa: '\f2a6'; +} .fa-drupal { - --fa: "\f1a9"; } + --fa: '\f1a9'; +} .fa-jxl { - --fa: "\e67b"; } + --fa: '\e67b'; +} .fa-dart-lang { - --fa: "\e693"; } + --fa: '\e693'; +} .fa-hire-a-helper { - --fa: "\f3b0"; } + --fa: '\f3b0'; +} .fa-creative-commons-by { - --fa: "\f4e7"; } + --fa: '\f4e7'; +} .fa-unity { - --fa: "\e049"; } + --fa: '\e049'; +} .fa-whmcs { - --fa: "\f40d"; } + --fa: '\f40d'; +} .fa-rocketchat { - --fa: "\f3e8"; } + --fa: '\f3e8'; +} .fa-vk { - --fa: "\f189"; } + --fa: '\f189'; +} .fa-untappd { - --fa: "\f405"; } + --fa: '\f405'; +} .fa-mailchimp { - --fa: "\f59e"; } + --fa: '\f59e'; +} .fa-css3-alt { - --fa: "\f38b"; } + --fa: '\f38b'; +} .fa-square-reddit { - --fa: "\f1a2"; } + --fa: '\f1a2'; +} .fa-reddit-square { - --fa: "\f1a2"; } + --fa: '\f1a2'; +} .fa-vimeo-v { - --fa: "\f27d"; } + --fa: '\f27d'; +} .fa-contao { - --fa: "\f26d"; } + --fa: '\f26d'; +} .fa-square-font-awesome { - --fa: "\e5ad"; } + --fa: '\e5ad'; +} .fa-deskpro { - --fa: "\f38f"; } + --fa: '\f38f'; +} .fa-brave { - --fa: "\e63c"; } + --fa: '\e63c'; +} .fa-sistrix { - --fa: "\f3ee"; } + --fa: '\f3ee'; +} .fa-square-instagram { - --fa: "\e055"; } + --fa: '\e055'; +} .fa-instagram-square { - --fa: "\e055"; } + --fa: '\e055'; +} .fa-battle-net { - --fa: "\f835"; } + --fa: '\f835'; +} .fa-the-red-yeti { - --fa: "\f69d"; } + --fa: '\f69d'; +} .fa-square-hacker-news { - --fa: "\f3af"; } + --fa: '\f3af'; +} .fa-hacker-news-square { - --fa: "\f3af"; } + --fa: '\f3af'; +} .fa-edge { - --fa: "\f282"; } + --fa: '\f282'; +} .fa-threads { - --fa: "\e618"; } + --fa: '\e618'; +} .fa-napster { - --fa: "\f3d2"; } + --fa: '\f3d2'; +} .fa-square-snapchat { - --fa: "\f2ad"; } + --fa: '\f2ad'; +} .fa-snapchat-square { - --fa: "\f2ad"; } + --fa: '\f2ad'; +} .fa-google-plus-g { - --fa: "\f0d5"; } + --fa: '\f0d5'; +} .fa-artstation { - --fa: "\f77a"; } + --fa: '\f77a'; +} .fa-markdown { - --fa: "\f60f"; } + --fa: '\f60f'; +} .fa-sourcetree { - --fa: "\f7d3"; } + --fa: '\f7d3'; +} .fa-google-plus { - --fa: "\f2b3"; } + --fa: '\f2b3'; +} .fa-diaspora { - --fa: "\f791"; } + --fa: '\f791'; +} .fa-foursquare { - --fa: "\f180"; } + --fa: '\f180'; +} .fa-stack-overflow { - --fa: "\f16c"; } + --fa: '\f16c'; +} .fa-github-alt { - --fa: "\f113"; } + --fa: '\f113'; +} .fa-phoenix-squadron { - --fa: "\f511"; } + --fa: '\f511'; +} .fa-pagelines { - --fa: "\f18c"; } + --fa: '\f18c'; +} .fa-algolia { - --fa: "\f36c"; } + --fa: '\f36c'; +} .fa-red-river { - --fa: "\f3e3"; } + --fa: '\f3e3'; +} .fa-creative-commons-sa { - --fa: "\f4ef"; } + --fa: '\f4ef'; +} .fa-safari { - --fa: "\f267"; } + --fa: '\f267'; +} .fa-google { - --fa: "\f1a0"; } + --fa: '\f1a0'; +} .fa-square-font-awesome-stroke { - --fa: "\f35c"; } + --fa: '\f35c'; +} .fa-font-awesome-alt { - --fa: "\f35c"; } + --fa: '\f35c'; +} .fa-atlassian { - --fa: "\f77b"; } + --fa: '\f77b'; +} .fa-linkedin-in { - --fa: "\f0e1"; } + --fa: '\f0e1'; +} .fa-digital-ocean { - --fa: "\f391"; } + --fa: '\f391'; +} .fa-nimblr { - --fa: "\f5a8"; } + --fa: '\f5a8'; +} .fa-chromecast { - --fa: "\f838"; } + --fa: '\f838'; +} .fa-evernote { - --fa: "\f839"; } + --fa: '\f839'; +} .fa-hacker-news { - --fa: "\f1d4"; } + --fa: '\f1d4'; +} .fa-creative-commons-sampling { - --fa: "\f4f0"; } + --fa: '\f4f0'; +} .fa-adversal { - --fa: "\f36a"; } + --fa: '\f36a'; +} .fa-creative-commons { - --fa: "\f25e"; } + --fa: '\f25e'; +} .fa-watchman-monitoring { - --fa: "\e087"; } + --fa: '\e087'; +} .fa-fonticons { - --fa: "\f280"; } + --fa: '\f280'; +} .fa-weixin { - --fa: "\f1d7"; } + --fa: '\f1d7'; +} .fa-shirtsinbulk { - --fa: "\f214"; } + --fa: '\f214'; +} .fa-codepen { - --fa: "\f1cb"; } + --fa: '\f1cb'; +} .fa-git-alt { - --fa: "\f841"; } + --fa: '\f841'; +} .fa-lyft { - --fa: "\f3c3"; } + --fa: '\f3c3'; +} .fa-rev { - --fa: "\f5b2"; } + --fa: '\f5b2'; +} .fa-windows { - --fa: "\f17a"; } + --fa: '\f17a'; +} .fa-wizards-of-the-coast { - --fa: "\f730"; } + --fa: '\f730'; +} .fa-square-viadeo { - --fa: "\f2aa"; } + --fa: '\f2aa'; +} .fa-viadeo-square { - --fa: "\f2aa"; } + --fa: '\f2aa'; +} .fa-meetup { - --fa: "\f2e0"; } + --fa: '\f2e0'; +} .fa-centos { - --fa: "\f789"; } + --fa: '\f789'; +} .fa-adn { - --fa: "\f170"; } + --fa: '\f170'; +} .fa-cloudsmith { - --fa: "\f384"; } + --fa: '\f384'; +} .fa-opensuse { - --fa: "\e62b"; } + --fa: '\e62b'; +} .fa-pied-piper-alt { - --fa: "\f1a8"; } + --fa: '\f1a8'; +} .fa-square-dribbble { - --fa: "\f397"; } + --fa: '\f397'; +} .fa-dribbble-square { - --fa: "\f397"; } + --fa: '\f397'; +} .fa-codiepie { - --fa: "\f284"; } + --fa: '\f284'; +} .fa-node { - --fa: "\f419"; } + --fa: '\f419'; +} .fa-mix { - --fa: "\f3cb"; } + --fa: '\f3cb'; +} .fa-steam { - --fa: "\f1b6"; } + --fa: '\f1b6'; +} .fa-cc-apple-pay { - --fa: "\f416"; } + --fa: '\f416'; +} .fa-scribd { - --fa: "\f28a"; } + --fa: '\f28a'; +} .fa-debian { - --fa: "\e60b"; } + --fa: '\e60b'; +} .fa-openid { - --fa: "\f19b"; } + --fa: '\f19b'; +} .fa-instalod { - --fa: "\e081"; } + --fa: '\e081'; +} .fa-files-pinwheel { - --fa: "\e69f"; } + --fa: '\e69f'; +} .fa-expeditedssl { - --fa: "\f23e"; } + --fa: '\f23e'; +} .fa-sellcast { - --fa: "\f2da"; } + --fa: '\f2da'; +} .fa-square-twitter { - --fa: "\f081"; } + --fa: '\f081'; +} .fa-twitter-square { - --fa: "\f081"; } + --fa: '\f081'; +} .fa-r-project { - --fa: "\f4f7"; } + --fa: '\f4f7'; +} .fa-delicious { - --fa: "\f1a5"; } + --fa: '\f1a5'; +} .fa-freebsd { - --fa: "\f3a4"; } + --fa: '\f3a4'; +} .fa-vuejs { - --fa: "\f41f"; } + --fa: '\f41f'; +} .fa-accusoft { - --fa: "\f369"; } + --fa: '\f369'; +} .fa-ioxhost { - --fa: "\f208"; } + --fa: '\f208'; +} .fa-fonticons-fi { - --fa: "\f3a2"; } + --fa: '\f3a2'; +} .fa-app-store { - --fa: "\f36f"; } + --fa: '\f36f'; +} .fa-cc-mastercard { - --fa: "\f1f1"; } + --fa: '\f1f1'; +} .fa-itunes-note { - --fa: "\f3b5"; } + --fa: '\f3b5'; +} .fa-golang { - --fa: "\e40f"; } + --fa: '\e40f'; +} .fa-kickstarter { - --fa: "\f3bb"; } + --fa: '\f3bb'; +} .fa-square-kickstarter { - --fa: "\f3bb"; } + --fa: '\f3bb'; +} .fa-grav { - --fa: "\f2d6"; } + --fa: '\f2d6'; +} .fa-weibo { - --fa: "\f18a"; } + --fa: '\f18a'; +} .fa-uncharted { - --fa: "\e084"; } + --fa: '\e084'; +} .fa-firstdraft { - --fa: "\f3a1"; } + --fa: '\f3a1'; +} .fa-square-youtube { - --fa: "\f431"; } + --fa: '\f431'; +} .fa-youtube-square { - --fa: "\f431"; } + --fa: '\f431'; +} .fa-wikipedia-w { - --fa: "\f266"; } + --fa: '\f266'; +} .fa-wpressr { - --fa: "\f3e4"; } + --fa: '\f3e4'; +} .fa-rendact { - --fa: "\f3e4"; } + --fa: '\f3e4'; +} .fa-angellist { - --fa: "\f209"; } + --fa: '\f209'; +} .fa-galactic-republic { - --fa: "\f50c"; } + --fa: '\f50c'; +} .fa-nfc-directional { - --fa: "\e530"; } + --fa: '\e530'; +} .fa-skype { - --fa: "\f17e"; } + --fa: '\f17e'; +} .fa-joget { - --fa: "\f3b7"; } + --fa: '\f3b7'; +} .fa-fedora { - --fa: "\f798"; } + --fa: '\f798'; +} .fa-stripe-s { - --fa: "\f42a"; } + --fa: '\f42a'; +} .fa-meta { - --fa: "\e49b"; } + --fa: '\e49b'; +} .fa-laravel { - --fa: "\f3bd"; } + --fa: '\f3bd'; +} .fa-hotjar { - --fa: "\f3b1"; } + --fa: '\f3b1'; +} .fa-bluetooth-b { - --fa: "\f294"; } + --fa: '\f294'; +} .fa-square-letterboxd { - --fa: "\e62e"; } + --fa: '\e62e'; +} .fa-sticker-mule { - --fa: "\f3f7"; } + --fa: '\f3f7'; +} .fa-creative-commons-zero { - --fa: "\f4f3"; } + --fa: '\f4f3'; +} .fa-hips { - --fa: "\f452"; } + --fa: '\f452'; +} .fa-css { - --fa: "\e6a2"; } + --fa: '\e6a2'; +} .fa-behance { - --fa: "\f1b4"; } + --fa: '\f1b4'; +} .fa-reddit { - --fa: "\f1a1"; } + --fa: '\f1a1'; +} .fa-discord { - --fa: "\f392"; } + --fa: '\f392'; +} .fa-chrome { - --fa: "\f268"; } + --fa: '\f268'; +} .fa-app-store-ios { - --fa: "\f370"; } + --fa: '\f370'; +} .fa-cc-discover { - --fa: "\f1f2"; } + --fa: '\f1f2'; +} .fa-wpbeginner { - --fa: "\f297"; } + --fa: '\f297'; +} .fa-confluence { - --fa: "\f78d"; } + --fa: '\f78d'; +} .fa-shoelace { - --fa: "\e60c"; } + --fa: '\e60c'; +} .fa-mdb { - --fa: "\f8ca"; } + --fa: '\f8ca'; +} .fa-dochub { - --fa: "\f394"; } + --fa: '\f394'; +} .fa-accessible-icon { - --fa: "\f368"; } + --fa: '\f368'; +} .fa-ebay { - --fa: "\f4f4"; } + --fa: '\f4f4'; +} .fa-amazon { - --fa: "\f270"; } + --fa: '\f270'; +} .fa-unsplash { - --fa: "\e07c"; } + --fa: '\e07c'; +} .fa-yarn { - --fa: "\f7e3"; } + --fa: '\f7e3'; +} .fa-square-steam { - --fa: "\f1b7"; } + --fa: '\f1b7'; +} .fa-steam-square { - --fa: "\f1b7"; } + --fa: '\f1b7'; +} .fa-500px { - --fa: "\f26e"; } + --fa: '\f26e'; +} .fa-square-vimeo { - --fa: "\f194"; } + --fa: '\f194'; +} .fa-vimeo-square { - --fa: "\f194"; } + --fa: '\f194'; +} .fa-asymmetrik { - --fa: "\f372"; } + --fa: '\f372'; +} .fa-font-awesome { - --fa: "\f2b4"; } + --fa: '\f2b4'; +} .fa-font-awesome-flag { - --fa: "\f2b4"; } + --fa: '\f2b4'; +} .fa-font-awesome-logo-full { - --fa: "\f2b4"; } + --fa: '\f2b4'; +} .fa-gratipay { - --fa: "\f184"; } + --fa: '\f184'; +} .fa-apple { - --fa: "\f179"; } + --fa: '\f179'; +} .fa-hive { - --fa: "\e07f"; } + --fa: '\e07f'; +} .fa-gitkraken { - --fa: "\f3a6"; } + --fa: '\f3a6'; +} .fa-keybase { - --fa: "\f4f5"; } + --fa: '\f4f5'; +} .fa-apple-pay { - --fa: "\f415"; } + --fa: '\f415'; +} .fa-padlet { - --fa: "\e4a0"; } + --fa: '\e4a0'; +} .fa-amazon-pay { - --fa: "\f42c"; } + --fa: '\f42c'; +} .fa-square-github { - --fa: "\f092"; } + --fa: '\f092'; +} .fa-github-square { - --fa: "\f092"; } + --fa: '\f092'; +} .fa-stumbleupon { - --fa: "\f1a4"; } + --fa: '\f1a4'; +} .fa-fedex { - --fa: "\f797"; } + --fa: '\f797'; +} .fa-phoenix-framework { - --fa: "\f3dc"; } + --fa: '\f3dc'; +} .fa-shopify { - --fa: "\e057"; } + --fa: '\e057'; +} .fa-neos { - --fa: "\f612"; } + --fa: '\f612'; +} .fa-square-threads { - --fa: "\e619"; } + --fa: '\e619'; +} .fa-hackerrank { - --fa: "\f5f7"; } + --fa: '\f5f7'; +} .fa-researchgate { - --fa: "\f4f8"; } + --fa: '\f4f8'; +} .fa-swift { - --fa: "\f8e1"; } + --fa: '\f8e1'; +} .fa-angular { - --fa: "\f420"; } + --fa: '\f420'; +} .fa-speakap { - --fa: "\f3f3"; } + --fa: '\f3f3'; +} .fa-angrycreative { - --fa: "\f36e"; } + --fa: '\f36e'; +} .fa-y-combinator { - --fa: "\f23b"; } + --fa: '\f23b'; +} .fa-empire { - --fa: "\f1d1"; } + --fa: '\f1d1'; +} .fa-envira { - --fa: "\f299"; } + --fa: '\f299'; +} .fa-google-scholar { - --fa: "\e63b"; } + --fa: '\e63b'; +} .fa-square-gitlab { - --fa: "\e5ae"; } + --fa: '\e5ae'; +} .fa-gitlab-square { - --fa: "\e5ae"; } + --fa: '\e5ae'; +} .fa-studiovinari { - --fa: "\f3f8"; } + --fa: '\f3f8'; +} .fa-pied-piper { - --fa: "\f2ae"; } + --fa: '\f2ae'; +} .fa-wordpress { - --fa: "\f19a"; } + --fa: '\f19a'; +} .fa-product-hunt { - --fa: "\f288"; } + --fa: '\f288'; +} .fa-firefox { - --fa: "\f269"; } + --fa: '\f269'; +} .fa-linode { - --fa: "\f2b8"; } + --fa: '\f2b8'; +} .fa-goodreads { - --fa: "\f3a8"; } + --fa: '\f3a8'; +} .fa-square-odnoklassniki { - --fa: "\f264"; } + --fa: '\f264'; +} .fa-odnoklassniki-square { - --fa: "\f264"; } + --fa: '\f264'; +} .fa-jsfiddle { - --fa: "\f1cc"; } + --fa: '\f1cc'; +} .fa-sith { - --fa: "\f512"; } + --fa: '\f512'; +} .fa-themeisle { - --fa: "\f2b2"; } + --fa: '\f2b2'; +} .fa-page4 { - --fa: "\f3d7"; } + --fa: '\f3d7'; +} .fa-hashnode { - --fa: "\e499"; } + --fa: '\e499'; +} .fa-react { - --fa: "\f41b"; } + --fa: '\f41b'; +} .fa-cc-paypal { - --fa: "\f1f4"; } + --fa: '\f1f4'; +} .fa-squarespace { - --fa: "\f5be"; } + --fa: '\f5be'; +} .fa-cc-stripe { - --fa: "\f1f5"; } + --fa: '\f1f5'; +} .fa-creative-commons-share { - --fa: "\f4f2"; } + --fa: '\f4f2'; +} .fa-bitcoin { - --fa: "\f379"; } + --fa: '\f379'; +} .fa-keycdn { - --fa: "\f3ba"; } + --fa: '\f3ba'; +} .fa-opera { - --fa: "\f26a"; } + --fa: '\f26a'; +} .fa-itch-io { - --fa: "\f83a"; } + --fa: '\f83a'; +} .fa-umbraco { - --fa: "\f8e8"; } + --fa: '\f8e8'; +} .fa-galactic-senate { - --fa: "\f50d"; } + --fa: '\f50d'; +} .fa-ubuntu { - --fa: "\f7df"; } + --fa: '\f7df'; +} .fa-draft2digital { - --fa: "\f396"; } + --fa: '\f396'; +} .fa-stripe { - --fa: "\f429"; } + --fa: '\f429'; +} .fa-houzz { - --fa: "\f27c"; } + --fa: '\f27c'; +} .fa-gg { - --fa: "\f260"; } + --fa: '\f260'; +} .fa-dhl { - --fa: "\f790"; } + --fa: '\f790'; +} .fa-square-pinterest { - --fa: "\f0d3"; } + --fa: '\f0d3'; +} .fa-pinterest-square { - --fa: "\f0d3"; } + --fa: '\f0d3'; +} .fa-xing { - --fa: "\f168"; } + --fa: '\f168'; +} .fa-blackberry { - --fa: "\f37b"; } + --fa: '\f37b'; +} .fa-creative-commons-pd { - --fa: "\f4ec"; } + --fa: '\f4ec'; +} .fa-playstation { - --fa: "\f3df"; } + --fa: '\f3df'; +} .fa-quinscape { - --fa: "\f459"; } + --fa: '\f459'; +} .fa-less { - --fa: "\f41d"; } + --fa: '\f41d'; +} .fa-blogger-b { - --fa: "\f37d"; } + --fa: '\f37d'; +} .fa-opencart { - --fa: "\f23d"; } + --fa: '\f23d'; +} .fa-vine { - --fa: "\f1ca"; } + --fa: '\f1ca'; +} .fa-signal-messenger { - --fa: "\e663"; } + --fa: '\e663'; +} .fa-paypal { - --fa: "\f1ed"; } + --fa: '\f1ed'; +} .fa-gitlab { - --fa: "\f296"; } + --fa: '\f296'; +} .fa-typo3 { - --fa: "\f42b"; } + --fa: '\f42b'; +} .fa-reddit-alien { - --fa: "\f281"; } + --fa: '\f281'; +} .fa-yahoo { - --fa: "\f19e"; } + --fa: '\f19e'; +} .fa-dailymotion { - --fa: "\e052"; } + --fa: '\e052'; +} .fa-affiliatetheme { - --fa: "\f36b"; } + --fa: '\f36b'; +} .fa-pied-piper-pp { - --fa: "\f1a7"; } + --fa: '\f1a7'; +} .fa-bootstrap { - --fa: "\f836"; } + --fa: '\f836'; +} .fa-odnoklassniki { - --fa: "\f263"; } + --fa: '\f263'; +} .fa-nfc-symbol { - --fa: "\e531"; } + --fa: '\e531'; +} .fa-mintbit { - --fa: "\e62f"; } + --fa: '\e62f'; +} .fa-ethereum { - --fa: "\f42e"; } + --fa: '\f42e'; +} .fa-speaker-deck { - --fa: "\f83c"; } + --fa: '\f83c'; +} .fa-creative-commons-nc-eu { - --fa: "\f4e9"; } + --fa: '\f4e9'; +} .fa-patreon { - --fa: "\f3d9"; } + --fa: '\f3d9'; +} .fa-avianex { - --fa: "\f374"; } + --fa: '\f374'; +} .fa-ello { - --fa: "\f5f1"; } + --fa: '\f5f1'; +} .fa-gofore { - --fa: "\f3a7"; } + --fa: '\f3a7'; +} .fa-bimobject { - --fa: "\f378"; } + --fa: '\f378'; +} .fa-brave-reverse { - --fa: "\e63d"; } + --fa: '\e63d'; +} .fa-facebook-f { - --fa: "\f39e"; } + --fa: '\f39e'; +} .fa-square-google-plus { - --fa: "\f0d4"; } + --fa: '\f0d4'; +} .fa-google-plus-square { - --fa: "\f0d4"; } + --fa: '\f0d4'; +} .fa-web-awesome { - --fa: "\e682"; } + --fa: '\e682'; +} .fa-mandalorian { - --fa: "\f50f"; } + --fa: '\f50f'; +} .fa-first-order-alt { - --fa: "\f50a"; } + --fa: '\f50a'; +} .fa-osi { - --fa: "\f41a"; } + --fa: '\f41a'; +} .fa-google-wallet { - --fa: "\f1ee"; } + --fa: '\f1ee'; +} .fa-d-and-d-beyond { - --fa: "\f6ca"; } + --fa: '\f6ca'; +} .fa-periscope { - --fa: "\f3da"; } + --fa: '\f3da'; +} .fa-fulcrum { - --fa: "\f50b"; } + --fa: '\f50b'; +} .fa-cloudscale { - --fa: "\f383"; } + --fa: '\f383'; +} .fa-forumbee { - --fa: "\f211"; } + --fa: '\f211'; +} .fa-mizuni { - --fa: "\f3cc"; } + --fa: '\f3cc'; +} .fa-schlix { - --fa: "\f3ea"; } + --fa: '\f3ea'; +} .fa-square-xing { - --fa: "\f169"; } + --fa: '\f169'; +} .fa-xing-square { - --fa: "\f169"; } + --fa: '\f169'; +} .fa-bandcamp { - --fa: "\f2d5"; } + --fa: '\f2d5'; +} .fa-wpforms { - --fa: "\f298"; } + --fa: '\f298'; +} .fa-cloudversify { - --fa: "\f385"; } + --fa: '\f385'; +} .fa-usps { - --fa: "\f7e1"; } + --fa: '\f7e1'; +} .fa-megaport { - --fa: "\f5a3"; } + --fa: '\f5a3'; +} .fa-magento { - --fa: "\f3c4"; } + --fa: '\f3c4'; +} .fa-spotify { - --fa: "\f1bc"; } + --fa: '\f1bc'; +} .fa-optin-monster { - --fa: "\f23c"; } + --fa: '\f23c'; +} .fa-fly { - --fa: "\f417"; } + --fa: '\f417'; +} .fa-square-bluesky { - --fa: "\e6a3"; } + --fa: '\e6a3'; +} .fa-aviato { - --fa: "\f421"; } + --fa: '\f421'; +} .fa-itunes { - --fa: "\f3b4"; } + --fa: '\f3b4'; +} .fa-cuttlefish { - --fa: "\f38c"; } + --fa: '\f38c'; +} .fa-blogger { - --fa: "\f37c"; } + --fa: '\f37c'; +} .fa-flickr { - --fa: "\f16e"; } + --fa: '\f16e'; +} .fa-viber { - --fa: "\f409"; } + --fa: '\f409'; +} .fa-soundcloud { - --fa: "\f1be"; } + --fa: '\f1be'; +} .fa-digg { - --fa: "\f1a6"; } + --fa: '\f1a6'; +} .fa-tencent-weibo { - --fa: "\f1d5"; } + --fa: '\f1d5'; +} .fa-letterboxd { - --fa: "\e62d"; } + --fa: '\e62d'; +} .fa-symfony { - --fa: "\f83d"; } + --fa: '\f83d'; +} .fa-maxcdn { - --fa: "\f136"; } + --fa: '\f136'; +} .fa-etsy { - --fa: "\f2d7"; } + --fa: '\f2d7'; +} .fa-facebook-messenger { - --fa: "\f39f"; } + --fa: '\f39f'; +} .fa-audible { - --fa: "\f373"; } + --fa: '\f373'; +} .fa-think-peaks { - --fa: "\f731"; } + --fa: '\f731'; +} .fa-bilibili { - --fa: "\e3d9"; } + --fa: '\e3d9'; +} .fa-erlang { - --fa: "\f39d"; } + --fa: '\f39d'; +} .fa-x-twitter { - --fa: "\e61b"; } + --fa: '\e61b'; +} .fa-cotton-bureau { - --fa: "\f89e"; } + --fa: '\f89e'; +} .fa-dashcube { - --fa: "\f210"; } + --fa: '\f210'; +} .fa-42-group { - --fa: "\e080"; } + --fa: '\e080'; +} .fa-innosoft { - --fa: "\e080"; } + --fa: '\e080'; +} .fa-stack-exchange { - --fa: "\f18d"; } + --fa: '\f18d'; +} .fa-elementor { - --fa: "\f430"; } + --fa: '\f430'; +} .fa-square-pied-piper { - --fa: "\e01e"; } + --fa: '\e01e'; +} .fa-pied-piper-square { - --fa: "\e01e"; } + --fa: '\e01e'; +} .fa-creative-commons-nd { - --fa: "\f4eb"; } + --fa: '\f4eb'; +} .fa-palfed { - --fa: "\f3d8"; } + --fa: '\f3d8'; +} .fa-superpowers { - --fa: "\f2dd"; } + --fa: '\f2dd'; +} .fa-resolving { - --fa: "\f3e7"; } + --fa: '\f3e7'; +} .fa-xbox { - --fa: "\f412"; } + --fa: '\f412'; +} .fa-square-web-awesome-stroke { - --fa: "\e684"; } + --fa: '\e684'; +} .fa-searchengin { - --fa: "\f3eb"; } + --fa: '\f3eb'; +} .fa-tiktok { - --fa: "\e07b"; } + --fa: '\e07b'; +} .fa-square-facebook { - --fa: "\f082"; } + --fa: '\f082'; +} .fa-facebook-square { - --fa: "\f082"; } + --fa: '\f082'; +} .fa-renren { - --fa: "\f18b"; } + --fa: '\f18b'; +} .fa-linux { - --fa: "\f17c"; } + --fa: '\f17c'; +} .fa-glide { - --fa: "\f2a5"; } + --fa: '\f2a5'; +} .fa-linkedin { - --fa: "\f08c"; } + --fa: '\f08c'; +} .fa-hubspot { - --fa: "\f3b2"; } + --fa: '\f3b2'; +} .fa-deploydog { - --fa: "\f38e"; } + --fa: '\f38e'; +} .fa-twitch { - --fa: "\f1e8"; } + --fa: '\f1e8'; +} .fa-flutter { - --fa: "\e694"; } + --fa: '\e694'; +} .fa-ravelry { - --fa: "\f2d9"; } + --fa: '\f2d9'; +} .fa-mixer { - --fa: "\e056"; } + --fa: '\e056'; +} .fa-square-lastfm { - --fa: "\f203"; } + --fa: '\f203'; +} .fa-lastfm-square { - --fa: "\f203"; } + --fa: '\f203'; +} .fa-vimeo { - --fa: "\f40a"; } + --fa: '\f40a'; +} .fa-mendeley { - --fa: "\f7b3"; } + --fa: '\f7b3'; +} .fa-uniregistry { - --fa: "\f404"; } + --fa: '\f404'; +} .fa-figma { - --fa: "\f799"; } + --fa: '\f799'; +} .fa-creative-commons-remix { - --fa: "\f4ee"; } + --fa: '\f4ee'; +} .fa-cc-amazon-pay { - --fa: "\f42d"; } + --fa: '\f42d'; +} .fa-dropbox { - --fa: "\f16b"; } + --fa: '\f16b'; +} .fa-instagram { - --fa: "\f16d"; } + --fa: '\f16d'; +} .fa-cmplid { - --fa: "\e360"; } + --fa: '\e360'; +} .fa-upwork { - --fa: "\e641"; } + --fa: '\e641'; +} .fa-facebook { - --fa: "\f09a"; } + --fa: '\f09a'; +} .fa-gripfire { - --fa: "\f3ac"; } + --fa: '\f3ac'; +} .fa-jedi-order { - --fa: "\f50e"; } + --fa: '\f50e'; +} .fa-uikit { - --fa: "\f403"; } + --fa: '\f403'; +} .fa-fort-awesome-alt { - --fa: "\f3a3"; } + --fa: '\f3a3'; +} .fa-phabricator { - --fa: "\f3db"; } + --fa: '\f3db'; +} .fa-ussunnah { - --fa: "\f407"; } + --fa: '\f407'; +} .fa-earlybirds { - --fa: "\f39a"; } + --fa: '\f39a'; +} .fa-trade-federation { - --fa: "\f513"; } + --fa: '\f513'; +} .fa-autoprefixer { - --fa: "\f41c"; } + --fa: '\f41c'; +} .fa-whatsapp { - --fa: "\f232"; } + --fa: '\f232'; +} .fa-square-upwork { - --fa: "\e67c"; } + --fa: '\e67c'; +} .fa-slideshare { - --fa: "\f1e7"; } + --fa: '\f1e7'; +} .fa-google-play { - --fa: "\f3ab"; } + --fa: '\f3ab'; +} .fa-viadeo { - --fa: "\f2a9"; } + --fa: '\f2a9'; +} .fa-line { - --fa: "\f3c0"; } + --fa: '\f3c0'; +} .fa-google-drive { - --fa: "\f3aa"; } + --fa: '\f3aa'; +} .fa-servicestack { - --fa: "\f3ec"; } + --fa: '\f3ec'; +} .fa-simplybuilt { - --fa: "\f215"; } + --fa: '\f215'; +} .fa-bitbucket { - --fa: "\f171"; } + --fa: '\f171'; +} .fa-imdb { - --fa: "\f2d8"; } + --fa: '\f2d8'; +} .fa-deezer { - --fa: "\e077"; } + --fa: '\e077'; +} .fa-raspberry-pi { - --fa: "\f7bb"; } + --fa: '\f7bb'; +} .fa-jira { - --fa: "\f7b1"; } + --fa: '\f7b1'; +} .fa-docker { - --fa: "\f395"; } + --fa: '\f395'; +} .fa-screenpal { - --fa: "\e570"; } + --fa: '\e570'; +} .fa-bluetooth { - --fa: "\f293"; } + --fa: '\f293'; +} .fa-gitter { - --fa: "\f426"; } + --fa: '\f426'; +} .fa-d-and-d { - --fa: "\f38d"; } + --fa: '\f38d'; +} .fa-microblog { - --fa: "\e01a"; } + --fa: '\e01a'; +} .fa-cc-diners-club { - --fa: "\f24c"; } + --fa: '\f24c'; +} .fa-gg-circle { - --fa: "\f261"; } + --fa: '\f261'; +} .fa-pied-piper-hat { - --fa: "\f4e5"; } + --fa: '\f4e5'; +} .fa-kickstarter-k { - --fa: "\f3bc"; } + --fa: '\f3bc'; +} .fa-yandex { - --fa: "\f413"; } + --fa: '\f413'; +} .fa-readme { - --fa: "\f4d5"; } + --fa: '\f4d5'; +} .fa-html5 { - --fa: "\f13b"; } + --fa: '\f13b'; +} .fa-sellsy { - --fa: "\f213"; } + --fa: '\f213'; +} .fa-square-web-awesome { - --fa: "\e683"; } + --fa: '\e683'; +} .fa-sass { - --fa: "\f41e"; } + --fa: '\f41e'; +} .fa-wirsindhandwerk { - --fa: "\e2d0"; } + --fa: '\e2d0'; +} .fa-wsh { - --fa: "\e2d0"; } + --fa: '\e2d0'; +} .fa-buromobelexperte { - --fa: "\f37f"; } + --fa: '\f37f'; +} .fa-salesforce { - --fa: "\f83b"; } + --fa: '\f83b'; +} .fa-octopus-deploy { - --fa: "\e082"; } + --fa: '\e082'; +} .fa-medapps { - --fa: "\f3c6"; } + --fa: '\f3c6'; +} .fa-ns8 { - --fa: "\f3d5"; } + --fa: '\f3d5'; +} .fa-pinterest-p { - --fa: "\f231"; } + --fa: '\f231'; +} .fa-apper { - --fa: "\f371"; } + --fa: '\f371'; +} .fa-fort-awesome { - --fa: "\f286"; } + --fa: '\f286'; +} .fa-waze { - --fa: "\f83f"; } + --fa: '\f83f'; +} .fa-bluesky { - --fa: "\e671"; } + --fa: '\e671'; +} .fa-cc-jcb { - --fa: "\f24b"; } + --fa: '\f24b'; +} .fa-snapchat { - --fa: "\f2ab"; } + --fa: '\f2ab'; +} .fa-snapchat-ghost { - --fa: "\f2ab"; } + --fa: '\f2ab'; +} .fa-fantasy-flight-games { - --fa: "\f6dc"; } + --fa: '\f6dc'; +} .fa-rust { - --fa: "\e07a"; } + --fa: '\e07a'; +} .fa-wix { - --fa: "\f5cf"; } + --fa: '\f5cf'; +} .fa-square-behance { - --fa: "\f1b5"; } + --fa: '\f1b5'; +} .fa-behance-square { - --fa: "\f1b5"; } + --fa: '\f1b5'; +} .fa-supple { - --fa: "\f3f9"; } + --fa: '\f3f9'; +} .fa-webflow { - --fa: "\e65c"; } + --fa: '\e65c'; +} .fa-rebel { - --fa: "\f1d0"; } + --fa: '\f1d0'; +} .fa-css3 { - --fa: "\f13c"; } + --fa: '\f13c'; +} .fa-staylinked { - --fa: "\f3f5"; } + --fa: '\f3f5'; +} .fa-kaggle { - --fa: "\f5fa"; } + --fa: '\f5fa'; +} .fa-space-awesome { - --fa: "\e5ac"; } + --fa: '\e5ac'; +} .fa-deviantart { - --fa: "\f1bd"; } + --fa: '\f1bd'; +} .fa-cpanel { - --fa: "\f388"; } + --fa: '\f388'; +} .fa-goodreads-g { - --fa: "\f3a9"; } + --fa: '\f3a9'; +} .fa-square-git { - --fa: "\f1d2"; } + --fa: '\f1d2'; +} .fa-git-square { - --fa: "\f1d2"; } + --fa: '\f1d2'; +} .fa-square-tumblr { - --fa: "\f174"; } + --fa: '\f174'; +} .fa-tumblr-square { - --fa: "\f174"; } + --fa: '\f174'; +} .fa-trello { - --fa: "\f181"; } + --fa: '\f181'; +} .fa-creative-commons-nc-jp { - --fa: "\f4ea"; } + --fa: '\f4ea'; +} .fa-get-pocket { - --fa: "\f265"; } + --fa: '\f265'; +} .fa-perbyte { - --fa: "\e083"; } + --fa: '\e083'; +} .fa-grunt { - --fa: "\f3ad"; } + --fa: '\f3ad'; +} .fa-weebly { - --fa: "\f5cc"; } + --fa: '\f5cc'; +} .fa-connectdevelop { - --fa: "\f20e"; } + --fa: '\f20e'; +} .fa-leanpub { - --fa: "\f212"; } + --fa: '\f212'; +} .fa-black-tie { - --fa: "\f27e"; } + --fa: '\f27e'; +} .fa-themeco { - --fa: "\f5c6"; } + --fa: '\f5c6'; +} .fa-python { - --fa: "\f3e2"; } + --fa: '\f3e2'; +} .fa-android { - --fa: "\f17b"; } + --fa: '\f17b'; +} .fa-bots { - --fa: "\e340"; } + --fa: '\e340'; +} .fa-free-code-camp { - --fa: "\f2c5"; } + --fa: '\f2c5'; +} .fa-hornbill { - --fa: "\f592"; } + --fa: '\f592'; +} .fa-js { - --fa: "\f3b8"; } + --fa: '\f3b8'; +} .fa-ideal { - --fa: "\e013"; } + --fa: '\e013'; +} .fa-git { - --fa: "\f1d3"; } + --fa: '\f1d3'; +} .fa-dev { - --fa: "\f6cc"; } + --fa: '\f6cc'; +} .fa-sketch { - --fa: "\f7c6"; } + --fa: '\f7c6'; +} .fa-yandex-international { - --fa: "\f414"; } + --fa: '\f414'; +} .fa-cc-amex { - --fa: "\f1f3"; } + --fa: '\f1f3'; +} .fa-uber { - --fa: "\f402"; } + --fa: '\f402'; +} .fa-github { - --fa: "\f09b"; } + --fa: '\f09b'; +} .fa-php { - --fa: "\f457"; } + --fa: '\f457'; +} .fa-alipay { - --fa: "\f642"; } + --fa: '\f642'; +} .fa-youtube { - --fa: "\f167"; } + --fa: '\f167'; +} .fa-skyatlas { - --fa: "\f216"; } + --fa: '\f216'; +} .fa-firefox-browser { - --fa: "\e007"; } + --fa: '\e007'; +} .fa-replyd { - --fa: "\f3e6"; } + --fa: '\f3e6'; +} .fa-suse { - --fa: "\f7d6"; } + --fa: '\f7d6'; +} .fa-jenkins { - --fa: "\f3b6"; } + --fa: '\f3b6'; +} .fa-twitter { - --fa: "\f099"; } + --fa: '\f099'; +} .fa-rockrms { - --fa: "\f3e9"; } + --fa: '\f3e9'; +} .fa-pinterest { - --fa: "\f0d2"; } + --fa: '\f0d2'; +} .fa-buffer { - --fa: "\f837"; } + --fa: '\f837'; +} .fa-npm { - --fa: "\f3d4"; } + --fa: '\f3d4'; +} .fa-yammer { - --fa: "\f840"; } + --fa: '\f840'; +} .fa-btc { - --fa: "\f15a"; } + --fa: '\f15a'; +} .fa-dribbble { - --fa: "\f17d"; } + --fa: '\f17d'; +} .fa-stumbleupon-circle { - --fa: "\f1a3"; } + --fa: '\f1a3'; +} .fa-internet-explorer { - --fa: "\f26b"; } + --fa: '\f26b'; +} .fa-stubber { - --fa: "\e5c7"; } + --fa: '\e5c7'; +} .fa-telegram { - --fa: "\f2c6"; } + --fa: '\f2c6'; +} .fa-telegram-plane { - --fa: "\f2c6"; } + --fa: '\f2c6'; +} .fa-old-republic { - --fa: "\f510"; } + --fa: '\f510'; +} .fa-odysee { - --fa: "\e5c6"; } + --fa: '\e5c6'; +} .fa-square-whatsapp { - --fa: "\f40c"; } + --fa: '\f40c'; +} .fa-whatsapp-square { - --fa: "\f40c"; } + --fa: '\f40c'; +} .fa-node-js { - --fa: "\f3d3"; } + --fa: '\f3d3'; +} .fa-edge-legacy { - --fa: "\e078"; } + --fa: '\e078'; +} .fa-slack { - --fa: "\f198"; } + --fa: '\f198'; +} .fa-slack-hash { - --fa: "\f198"; } + --fa: '\f198'; +} .fa-medrt { - --fa: "\f3c8"; } + --fa: '\f3c8'; +} .fa-usb { - --fa: "\f287"; } + --fa: '\f287'; +} .fa-tumblr { - --fa: "\f173"; } + --fa: '\f173'; +} .fa-vaadin { - --fa: "\f408"; } + --fa: '\f408'; +} .fa-quora { - --fa: "\f2c4"; } + --fa: '\f2c4'; +} .fa-square-x-twitter { - --fa: "\e61a"; } + --fa: '\e61a'; +} .fa-reacteurope { - --fa: "\f75d"; } + --fa: '\f75d'; +} .fa-medium { - --fa: "\f23a"; } + --fa: '\f23a'; +} .fa-medium-m { - --fa: "\f23a"; } + --fa: '\f23a'; +} .fa-amilia { - --fa: "\f36d"; } + --fa: '\f36d'; +} .fa-mixcloud { - --fa: "\f289"; } + --fa: '\f289'; +} .fa-flipboard { - --fa: "\f44d"; } + --fa: '\f44d'; +} .fa-viacoin { - --fa: "\f237"; } + --fa: '\f237'; +} .fa-critical-role { - --fa: "\f6c9"; } + --fa: '\f6c9'; +} .fa-sitrox { - --fa: "\e44a"; } + --fa: '\e44a'; +} .fa-discourse { - --fa: "\f393"; } + --fa: '\f393'; +} .fa-joomla { - --fa: "\f1aa"; } + --fa: '\f1aa'; +} .fa-mastodon { - --fa: "\f4f6"; } + --fa: '\f4f6'; +} .fa-airbnb { - --fa: "\f834"; } + --fa: '\f834'; +} .fa-wolf-pack-battalion { - --fa: "\f514"; } + --fa: '\f514'; +} .fa-buy-n-large { - --fa: "\f8a6"; } + --fa: '\f8a6'; +} .fa-gulp { - --fa: "\f3ae"; } + --fa: '\f3ae'; +} .fa-creative-commons-sampling-plus { - --fa: "\f4f1"; } + --fa: '\f4f1'; +} .fa-strava { - --fa: "\f428"; } + --fa: '\f428'; +} .fa-ember { - --fa: "\f423"; } + --fa: '\f423'; +} .fa-canadian-maple-leaf { - --fa: "\f785"; } + --fa: '\f785'; +} .fa-teamspeak { - --fa: "\f4f9"; } + --fa: '\f4f9'; +} .fa-pushed { - --fa: "\f3e1"; } + --fa: '\f3e1'; +} .fa-wordpress-simple { - --fa: "\f411"; } + --fa: '\f411'; +} .fa-nutritionix { - --fa: "\f3d6"; } + --fa: '\f3d6'; +} .fa-wodu { - --fa: "\e088"; } + --fa: '\e088'; +} .fa-google-pay { - --fa: "\e079"; } + --fa: '\e079'; +} .fa-intercom { - --fa: "\f7af"; } + --fa: '\f7af'; +} .fa-zhihu { - --fa: "\f63f"; } + --fa: '\f63f'; +} .fa-korvue { - --fa: "\f42f"; } + --fa: '\f42f'; +} .fa-pix { - --fa: "\e43a"; } + --fa: '\e43a'; +} .fa-steam-symbol { - --fa: "\f3f6"; } -:root, :host { + --fa: '\f3f6'; +} +:root, +:host { --fa-style-family-classic: 'Font Awesome 6 Free'; - --fa-font-regular: normal 400 1em/1 '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("./fa-regular-400.woff2") format("woff2"); } + src: url('./fa-regular-400.woff2') format('woff2'); +} .far, .fa-regular { - font-weight: 400; } -:root, :host { + font-weight: 400; +} +:root, +:host { --fa-style-family-classic: 'Font Awesome 6 Free'; - --fa-font-solid: normal 900 1em/1 '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("./fa-solid-900.woff2") format("woff2"); } + src: url('./fa-solid-900.woff2') format('woff2'); +} .fas, .fa-solid { - font-weight: 900; } + font-weight: 900; +} @font-face { font-family: 'Font Awesome 5 Brands'; font-display: block; font-weight: 400; - src: url("./fa-brands-400.woff2") format("woff2"); } + src: url('./fa-brands-400.woff2') format('woff2'); +} @font-face { font-family: 'Font Awesome 5 Free'; font-display: block; font-weight: 900; - src: url("./fa-solid-900.woff2") format("woff2"); } + src: url('./fa-solid-900.woff2') format('woff2'); +} @font-face { font-family: 'Font Awesome 5 Free'; font-display: block; font-weight: 400; - src: url("./fa-regular-400.woff2") format("woff2"); } + src: url('./fa-regular-400.woff2') format('woff2'); +} @font-face { font-family: 'FontAwesome'; font-display: block; - src: url("./fa-solid-900.woff2") format("woff2"); } + src: url('./fa-solid-900.woff2') format('woff2'); +} @font-face { font-family: 'FontAwesome'; font-display: block; - src: url("./fa-brands-400.woff2") format("woff2"); } + src: url('./fa-brands-400.woff2') format('woff2'); +} @font-face { font-family: 'FontAwesome'; font-display: block; - src: url("./fa-regular-400.woff2") format("woff2"); - unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; } + src: url('./fa-regular-400.woff2') format('woff2'); + unicode-range: U+F003, U+F006, U+F014, U+F016-F017, U+F01A-F01B, U+F01D, U+F022, U+F03E, U+F044, + U+F046, U+F05C-F05D, U+F06E, U+F070, U+F087-F088, U+F08A, U+F094, U+F096-F097, U+F09D, U+F0A0, + U+F0A2, U+F0A4-F0A7, U+F0C5, U+F0C7, U+F0E5-F0E6, U+F0EB, U+F0F6-F0F8, U+F10C, U+F114-F115, + U+F118-F11A, U+F11C-F11D, U+F133, U+F147, U+F14E, U+F150-F152, U+F185-F186, U+F18E, U+F190-F192, + U+F196, U+F1C1-F1C9, U+F1D9, U+F1DB, U+F1E3, U+F1EA, U+F1F7, U+F1F9, U+F20A, U+F247-F248, + U+F24A, U+F24D, U+F255-F25B, U+F25D, U+F271-F274, U+F278, U+F27B, U+F28C, U+F28E, U+F29C, + U+F2B5, U+F2B7, U+F2BA, U+F2BC, U+F2BE, U+F2C0-F2C1, U+F2C3, U+F2D0, U+F2D2, U+F2D4, U+F2DC; +} @font-face { font-family: 'FontAwesome'; font-display: block; - src: url("./fa-v4compatibility.woff2") format("woff2"); - unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; } + src: url('./fa-v4compatibility.woff2') format('woff2'); + unicode-range: U+F041, U+F047, U+F065-F066, U+F07D-F07E, U+F080, U+F08B, U+F08E, U+F090, U+F09A, + U+F0AC, U+F0AE, U+F0B2, U+F0D0, U+F0D6, U+F0E4, U+F0EC, U+F10A-F10B, U+F123, U+F13E, + U+F148-F149, U+F14C, U+F156, U+F15E, U+F160-F161, U+F163, U+F175-F178, U+F195, U+F1F8, U+F219, + U+F27A; +} diff --git a/src/assets/main.css b/src/assets/main.css index 08e12c0..10ae925 100644 --- a/src/assets/main.css +++ b/src/assets/main.css @@ -4,10 +4,10 @@ @plugin "daisyui"; @plugin "daisyui/theme" { - name: "dark"; + name: 'dark'; default: false; prefersdark: true; - color-scheme: "dark"; + color-scheme: 'dark'; --color-base-100: oklch(25.33% 0.016 252.42); --color-base-200: oklch(23.26% 0.014 253.1); --color-base-300: oklch(21.15% 0.012 254.09); diff --git a/src/components/AddButton.vue b/src/components/AddButton.vue index 8a85686..4b303df 100644 --- a/src/components/AddButton.vue +++ b/src/components/AddButton.vue @@ -19,7 +19,7 @@ function onclick() { class="btn btn-primary shadow !flex items-center gap-2 w-12 h-12 sm:w-auto sm:h-auto sm:gap-2 rounded-full sm:rounded-lg py-2 pointer-events-auto" > - + diff --git a/src/components/DeviceGroupsButton.vue b/src/components/DeviceGroupsButton.vue index 0260d8a..fbb8074 100644 --- a/src/components/DeviceGroupsButton.vue +++ b/src/components/DeviceGroupsButton.vue @@ -1,6 +1,7 @@ diff --git a/src/components/DeviceNameAndGroup.vue b/src/components/DeviceNameAndGroup.vue index bba1f42..680b320 100644 --- a/src/components/DeviceNameAndGroup.vue +++ b/src/components/DeviceNameAndGroup.vue @@ -1,6 +1,7 @@ diff --git a/src/components/devices/ValueIOControl.vue b/src/components/devices/ValueIOControl.vue index ce8cd6c..5f5ec63 100644 --- a/src/components/devices/ValueIOControl.vue +++ b/src/components/devices/ValueIOControl.vue @@ -22,6 +22,7 @@ const { typeConstraints, isInput } = defineProps<{ * Tells the control if it should also register user input */ isInput: boolean + accessibilityLabel: string }>() const emit = defineEmits<{ /** @@ -114,74 +115,92 @@ const rangeControlValue = computed({ diff --git a/src/components/tasks-automations/ConstantInstructionItem.vue b/src/components/tasks-automations/ConstantInstructionItem.vue index ad13516..66ae54e 100644 --- a/src/components/tasks-automations/ConstantInstructionItem.vue +++ b/src/components/tasks-automations/ConstantInstructionItem.vue @@ -26,20 +26,25 @@