From 5ddf8de3691fde866c5a48b440cffa2990b2014c Mon Sep 17 00:00:00 2001 From: Debulois Date: Thu, 3 Feb 2022 13:02:21 +0100 Subject: Initial commit --- Database/dbmain.php | 143 + Database/meth_dbsearch.php | 78 + Database/meth_dbuser.php | 154 + Medias/Images/slide0.jpg | Bin 0 -> 367762 bytes Medias/Images/slide1.jpg | Bin 0 -> 490609 bytes Medias/Images/slide2.jpg | Bin 0 -> 1194380 bytes Statics/Css/Flags/flag.css | 1036 +++++ Statics/Css/Fontsawesome/all.css | 4616 +++++++++++++++++++++ Statics/Css/main.css | 498 +++ Statics/Fonts/Flags/flags.png | Bin 0 -> 28123 bytes Statics/Fonts/Fontsawesome/fa-brands-400.eot | Bin 0 -> 134294 bytes Statics/Fonts/Fontsawesome/fa-brands-400.svg | 3717 +++++++++++++++++ Statics/Fonts/Fontsawesome/fa-brands-400.ttf | Bin 0 -> 133988 bytes Statics/Fonts/Fontsawesome/fa-brands-400.woff | Bin 0 -> 89988 bytes Statics/Fonts/Fontsawesome/fa-brands-400.woff2 | Bin 0 -> 76736 bytes Statics/Fonts/Fontsawesome/fa-regular-400.eot | Bin 0 -> 34034 bytes Statics/Fonts/Fontsawesome/fa-regular-400.svg | 801 ++++ Statics/Fonts/Fontsawesome/fa-regular-400.ttf | Bin 0 -> 33736 bytes Statics/Fonts/Fontsawesome/fa-regular-400.woff | Bin 0 -> 16276 bytes Statics/Fonts/Fontsawesome/fa-regular-400.woff2 | Bin 0 -> 13224 bytes Statics/Fonts/Fontsawesome/fa-solid-900.eot | Bin 0 -> 203030 bytes Statics/Fonts/Fontsawesome/fa-solid-900.svg | 5034 +++++++++++++++++++++++ Statics/Fonts/Fontsawesome/fa-solid-900.ttf | Bin 0 -> 202744 bytes Statics/Fonts/Fontsawesome/fa-solid-900.woff | Bin 0 -> 101648 bytes Statics/Fonts/Fontsawesome/fa-solid-900.woff2 | Bin 0 -> 78268 bytes Statics/Fonts/SourceSansPro.ttf | Bin 0 -> 119080 bytes Statics/Fonts/akira.otf | Bin 0 -> 26320 bytes Statics/Js/main.js | 61 + Views/Includes/en/message.php | 77 + Views/Includes/en/table.php | 46 + Views/Includes/en/text.php | 80 + Views/Includes/en/title.php | 15 + Views/Includes/fr/message.php | 77 + Views/Includes/fr/table.php | 46 + Views/Includes/fr/text.php | 80 + Views/Includes/fr/title.php | 15 + Views/Includes/incl_delete_form.php | 60 + Views/Includes/incl_footer.php | 13 + Views/Includes/incl_header.php | 15 + Views/Includes/incl_index_search.php | 87 + Views/Includes/incl_index_slideshow.php | 21 + Views/Includes/incl_login_form.php | 26 + Views/Includes/incl_message.php | 22 + Views/Includes/incl_mission_form.php | 38 + Views/Includes/incl_myMission_table.php | 39 + Views/Includes/incl_navbar.php | 59 + Views/Includes/incl_register_form.php | 28 + Views/Includes/incl_userInfo_form.php | 76 + Views/autoLogin.php | 18 + Views/delete.php | 35 + Views/login.php | 26 + Views/logout.php | 17 + Views/message.php | 29 + Views/mission.php | 34 + Views/myMission.php | 34 + Views/register.php | 26 + Views/userInfo.php | 32 + Wrapper/Functions/func_delete.php | 19 + Wrapper/Functions/func_info.php | 18 + Wrapper/Functions/func_language.php | 16 + Wrapper/Functions/func_login.php | 68 + Wrapper/Functions/func_logout.php | 30 + Wrapper/Functions/func_mission.php | 24 + Wrapper/Functions/func_register.php | 24 + Wrapper/Functions/func_sanitize.php | 12 + Wrapper/Functions/func_search.php | 52 + Wrapper/wrapper.php | 148 + index.php | 50 + 68 files changed, 17770 insertions(+) create mode 100644 Database/dbmain.php create mode 100644 Database/meth_dbsearch.php create mode 100644 Database/meth_dbuser.php create mode 100644 Medias/Images/slide0.jpg create mode 100644 Medias/Images/slide1.jpg create mode 100644 Medias/Images/slide2.jpg create mode 100644 Statics/Css/Flags/flag.css create mode 100644 Statics/Css/Fontsawesome/all.css create mode 100644 Statics/Css/main.css create mode 100644 Statics/Fonts/Flags/flags.png create mode 100644 Statics/Fonts/Fontsawesome/fa-brands-400.eot create mode 100644 Statics/Fonts/Fontsawesome/fa-brands-400.svg create mode 100644 Statics/Fonts/Fontsawesome/fa-brands-400.ttf create mode 100644 Statics/Fonts/Fontsawesome/fa-brands-400.woff create mode 100644 Statics/Fonts/Fontsawesome/fa-brands-400.woff2 create mode 100644 Statics/Fonts/Fontsawesome/fa-regular-400.eot create mode 100644 Statics/Fonts/Fontsawesome/fa-regular-400.svg create mode 100644 Statics/Fonts/Fontsawesome/fa-regular-400.ttf create mode 100644 Statics/Fonts/Fontsawesome/fa-regular-400.woff create mode 100644 Statics/Fonts/Fontsawesome/fa-regular-400.woff2 create mode 100644 Statics/Fonts/Fontsawesome/fa-solid-900.eot create mode 100644 Statics/Fonts/Fontsawesome/fa-solid-900.svg create mode 100644 Statics/Fonts/Fontsawesome/fa-solid-900.ttf create mode 100644 Statics/Fonts/Fontsawesome/fa-solid-900.woff create mode 100644 Statics/Fonts/Fontsawesome/fa-solid-900.woff2 create mode 100644 Statics/Fonts/SourceSansPro.ttf create mode 100644 Statics/Fonts/akira.otf create mode 100644 Statics/Js/main.js create mode 100644 Views/Includes/en/message.php create mode 100644 Views/Includes/en/table.php create mode 100644 Views/Includes/en/text.php create mode 100644 Views/Includes/en/title.php create mode 100644 Views/Includes/fr/message.php create mode 100644 Views/Includes/fr/table.php create mode 100644 Views/Includes/fr/text.php create mode 100644 Views/Includes/fr/title.php create mode 100644 Views/Includes/incl_delete_form.php create mode 100644 Views/Includes/incl_footer.php create mode 100644 Views/Includes/incl_header.php create mode 100644 Views/Includes/incl_index_search.php create mode 100644 Views/Includes/incl_index_slideshow.php create mode 100644 Views/Includes/incl_login_form.php create mode 100644 Views/Includes/incl_message.php create mode 100644 Views/Includes/incl_mission_form.php create mode 100644 Views/Includes/incl_myMission_table.php create mode 100644 Views/Includes/incl_navbar.php create mode 100644 Views/Includes/incl_register_form.php create mode 100644 Views/Includes/incl_userInfo_form.php create mode 100644 Views/autoLogin.php create mode 100644 Views/delete.php create mode 100644 Views/login.php create mode 100644 Views/logout.php create mode 100644 Views/message.php create mode 100644 Views/mission.php create mode 100644 Views/myMission.php create mode 100644 Views/register.php create mode 100644 Views/userInfo.php create mode 100644 Wrapper/Functions/func_delete.php create mode 100644 Wrapper/Functions/func_info.php create mode 100644 Wrapper/Functions/func_language.php create mode 100644 Wrapper/Functions/func_login.php create mode 100644 Wrapper/Functions/func_logout.php create mode 100644 Wrapper/Functions/func_mission.php create mode 100644 Wrapper/Functions/func_register.php create mode 100644 Wrapper/Functions/func_sanitize.php create mode 100644 Wrapper/Functions/func_search.php create mode 100644 Wrapper/wrapper.php create mode 100644 index.php diff --git a/Database/dbmain.php b/Database/dbmain.php new file mode 100644 index 0000000..43e39ef --- /dev/null +++ b/Database/dbmain.php @@ -0,0 +1,143 @@ +database; + $res = $this->conn->prepare($reqInitDb); + $res->execute(); + } + + // Sélection de la DB + private function select_db() { + $reqSelectDb = "USE ".$this->database; + $res = $this->conn->prepare($reqSelectDb); + $res->execute(); + } + + // Création des tables si elles n'existent pas + private function create_table() { + $reqInitUserAccount = "CREATE TABLE IF NOT EXISTS ".$this->createTableUserAccount; + $res = $this->conn->prepare($reqInitUserAccount); + $res->execute(); + $reqInitUserInfo = "CREATE TABLE IF NOT EXISTS ".$this->createTableUserInfo; + $res = $this->conn->prepare($reqInitUserInfo); + $res->execute(); + $reqInitMission = "CREATE TABLE IF NOT EXISTS ".$this->createTableMission; + $res = $this->conn->prepare($reqInitMission); + $res->execute(); + } + + // Déclenche les méthodes pour créer la BDD + private function init() { + $this->create_db(); + $this->select_db(); + $this->create_table(); + } + + // Chiffre la data reçue + final public function crypt_pass($pass) { + $crypt = crypt($pass, $this->salt); + return $crypt; + } + + // Prépare la requète pour mitiger (se protéger) les injections SQL et + // initialise si nécessaire la BDD à chaque requète + final public function exec_cmd($req, $arg) { + $this->init(); + $res = $this->conn->prepare($req); + $res->execute($arg); + return $res; + } + + // Vérifie si l'email existe dans la table userAccount de la BDD + final public function check_exist_email($email) { + $reqCheckEmailExist = "SELECT EXISTS(SELECT * FROM ".$this->tableUserAccount." WHERE email = ?)"; + $data = $this->exec_cmd($reqCheckEmailExist, array($email))->fetchAll(PDO::FETCH_NUM); + // Retourne 1 si existe, sinon 0 + return $data[0][0]; + } + + // Vérifie si l'id est un consultant dans la table userAccount de la BDD + final public function check_exist_consultant($id) { + $reqCheckExistConsultant = "SELECT EXISTS(SELECT * FROM ".$this->tableUserAccount." WHERE id = ? AND isConsultant = '1')"; + $data = $this->exec_cmd($reqCheckExistConsultant, array($id))->fetchAll(PDO::FETCH_NUM); + // Retourne 1 si existe, sinon 0 + return $data[0][0]; + } + + // Fonction "auto", déclenchée à l'instanciation + final public function __construct() { + // Essaie de se connecter a la BDD + $this->conn = new PDO("mysql:host=".$this->host, $this->user, $this->pass); + } +} +?> \ No newline at end of file diff --git a/Database/meth_dbsearch.php b/Database/meth_dbsearch.php new file mode 100644 index 0000000..0a325aa --- /dev/null +++ b/Database/meth_dbsearch.php @@ -0,0 +1,78 @@ +tableUserAccount; + $data = $this->exec_cmd($reqGetAll, array())->fetchAll(PDO::FETCH_ASSOC); + return $data; + } + + // Récupération des infos d'un compte par son id + final public function search_user_by_id($id) { + $reqSearchUser = "SELECT id, email, inscriptionDate, isAdmin, isUser, isConsultant + FROM ".$this->tableUserAccount." WHERE id = ?"; + $data = $this->exec_cmd($reqSearchUser, array($id))->fetch(PDO::FETCH_ASSOC); + return $data; + } + + // Récupération des infos d'un utilisateur par son id + final public function get_user_info_by_id($id) { + $reqGetUserInfo = "SELECT lastname, firstname, job, degree, + capability, description, phoneNumber, + adress, zipCode, city + FROM ".$this->tableUserInfo." WHERE userId = ?"; + $data = $this->exec_cmd($reqGetUserInfo, array($id))->fetchAll(PDO::FETCH_ASSOC); + return $data; + } + + // Récupération des infos d'un consultant par son nom + final public function search_consultant_by_name($research) { + $reqSearchConsultant = "SELECT id, lastname, firstname, job, capability FROM ".$this->tableUserInfo." + INNER JOIN ".$this->tableUserAccount." + ON ".$this->tableUserInfo.".userId = ".$this->tableUserAccount.".id + WHERE isConsultant = '1' AND lastname LIKE CONCAT('%', ?, '%')"; + $data = $this->exec_cmd($reqSearchConsultant, array($research))->fetchAll(PDO::FETCH_ASSOC); + return $data; + } + + // Récupération des notes d'un consultant par son nom + final public function get_consultant_note_by_name($name) { + $reqCountMission = "SELECT note FROM ".$this->tableMission." + INNER JOIN ".$this->tableUserInfo." + ON ".$this->tableMission.".consultantId = ".$this->tableUserInfo.".userId + WHERE lastname = ?"; + $data = $this->exec_cmd($reqCountMission, array($name))->fetchAll(PDO::FETCH_ASSOC); + return $data; + } + + // Récupérations des missions d'un consultant par son id + final public function get_all_mission_by_id($id) { + $reqGetAllMission = "SELECT subject, note, review, lastname FROM ".$this->tableMission." + INNER JOIN ".$this->tableUserInfo." + ON ".$this->tableMission.".userId = ".$this->tableUserInfo.".userId + WHERE consultantId = ?"; + $data = $this->exec_cmd($reqGetAllMission, array($id))->fetchAll(PDO::FETCH_ASSOC); + return $data; + } + + // Compte le nombre de mission d'un consultant par son nom + final public function count_consultant_mission_by_name($name) { + $reqCountMission = "SELECT COUNT(*) FROM ".$this->tableMission." + INNER JOIN ".$this->tableUserInfo." + ON ".$this->tableMission.".consultantId = ".$this->tableUserInfo.".userId + WHERE lastname = ?"; + $data = $this->exec_cmd($reqCountMission, array($name))->fetchAll(PDO::FETCH_ASSOC); + return $data; + } +} +?> \ No newline at end of file diff --git a/Database/meth_dbuser.php b/Database/meth_dbuser.php new file mode 100644 index 0000000..8e6ec35 --- /dev/null +++ b/Database/meth_dbuser.php @@ -0,0 +1,154 @@ +check_exist_email($email); + // Si non + if (!$exist) { + // Chiffrement du pass + $crypt = $this->crypt_pass($pass); + // Préparation de la requète + $reqAddUser = "INSERT INTO ".$this->tableUserAccount." + (email, password, inscriptionDate, isAdmin, isUser, isConsultant) + VALUES (?, ?, ?, ?, ?, ?)"; + // Execution de la requète + $this->exec_cmd($reqAddUser, + array($email, + $crypt, + date("Y-m-d H:i:s"), + $is_admin, + $is_user, + $is_consultant + ) + ); + // Retourne 1 pour réussite + return 1; + } else { + // Retourne 0 pour échec + return 0; + } + } + + // Suppresion d'un utilisateur + final public function del_user($id) { + // Préparation de la requète pour voir si l'utilisateur existe + $reqCheckExistId = "SELECT EXISTS(SELECT * FROM ".$this->tableUserAccount." WHERE id = ?)"; + // Exécution de la requète + $data = $this->exec_cmd($reqCheckExistId, array($id))->fetchAll(PDO::FETCH_NUM); + // Si il existe + if ($data[0][0]) { + // Préparation de la requète pour suppression + $reqDelUser = "DELETE FROM ".$this->tableUserAccount." WHERE id = ?"; + // Exécution de la requète + $this->exec_cmd($reqDelUser, array($id)); + // Retourne 1 pour réussite + return 1; + } else { + // Retourne 0 pour échec + return 0; + } + } + + // Mise à jour des infos d'un utilisateur + final public function update_user_info($lastname, $firstname, $job, $degree, + $capability, $description, $phoneNumber, + $adress, $zipCode, $city, $userId) { + // Préparation de la requète pour mise à jour des infos + $reqAddInfo = "REPLACE INTO ".$this->tableUserInfo." + (lastname, firstname, job, degree, capability, + description, phoneNumber, adress, zipCode, city, userId) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + // Exécution de la requète + $this->exec_cmd($reqAddInfo, + array($lastname, $firstname, $job, $degree, + $capability, $description, $phoneNumber, + $adress, $zipCode, $city, $userId + ) + ); + } + + // Enregistrement d'une mission + final public function register_mission($subject, $note, $review, $userId, $consultantId) { + // Vérification de l'existance de l'id de consultant + $exist = $this->check_exist_consultant($consultantId); + // Si il existe + if ($exist) { + // Préparation de la requète pour enregistrement de la mission + $reqAddMission = "INSERT INTO ".$this->tableMission." + (date, subject, note, review, userId, consultantId) + VALUES (?, ?, ?, ?, ?, ?)"; + // Exécution de la requète + $this->exec_cmd($reqAddMission, + array(date("Y-m-d H:i:s"), $subject, + $note, $review, + $userId, $consultantId + ) + ); + // Retourne 1 pour réussite + return 1; + } else { + // Retourne 0 pour échec + return 0; + } + } + + // Vérification de la combinaison email - pass pour authentification + final public function check_credential($email, $pass) { + // Préparation de la requète pour récupérer les infos ou l'email est présent + $reqCheckCredential = "SELECT id, password + FROM ".$this->tableUserAccount." WHERE email = ? "; + // Chiffrement du mot de passe + $crypt = $this->crypt_pass($pass); + // Execution de la requète + $data = $this->exec_cmd($reqCheckCredential, array($email))->fetchAll(PDO::FETCH_ASSOC); + // Vérifiaction de correspondance email & pass + foreach ($data as $rows) { + if ($rows["password"] == $crypt) { + return $rows["id"]; + } + } + } + + // Vérification de la combinaison email - jeton d'auto-login pour authentification + final public function check_token_autologin($email, $token) { + // Préparation de la requète pour récupérer les infos ou l'email est présent + $reqCheckToken = "SELECT id, tokenAutoLogin + FROM ".$this->tableUserAccount." WHERE email = ?"; + // Exécution de la requète + $data = $this->exec_cmd($reqCheckToken, array($email))->fetchAll(PDO::FETCH_ASSOC); + // Vérifiaction de correspondance email & jeton d'auto-connection + foreach ($data as $rows) { + if ($rows["tokenAutoLogin"] == $token) { + return $rows["id"]; + } + } + } + + // Mise à jour du jeton d'auto-login + final public function update_token_autologin($email, $token) { + // Préparation de la requète pour mise à jour du jeton d'auto-connection + $reqUpdateToken = "UPDATE ".$this->tableUserAccount." SET tokenAutoLogin = ? + WHERE email = ?"; + // Execution de la requète + $this->exec_cmd($reqUpdateToken, array($token, $email))->fetchAll(PDO::FETCH_ASSOC); + } + + // Supression du jeton d'auto-login + final public function delete_token_autologin($email) { + // Préparation de la requète pour supression du jeton d'auto-connection + $reqDeleteToken = "UPDATE ".$this->tableUserAccount." SET tokenAutoLogin = NULL + WHERE email = ?"; + // Execution de la requète + $this->exec_cmd($reqDeleteToken, array($email))->fetchAll(PDO::FETCH_ASSOC); + } +} +?> \ No newline at end of file diff --git a/Medias/Images/slide0.jpg b/Medias/Images/slide0.jpg new file mode 100644 index 0000000..d533b52 Binary files /dev/null and b/Medias/Images/slide0.jpg differ diff --git a/Medias/Images/slide1.jpg b/Medias/Images/slide1.jpg new file mode 100644 index 0000000..b9a175a Binary files /dev/null and b/Medias/Images/slide1.jpg differ diff --git a/Medias/Images/slide2.jpg b/Medias/Images/slide2.jpg new file mode 100644 index 0000000..42b38ab Binary files /dev/null and b/Medias/Images/slide2.jpg differ diff --git a/Statics/Css/Flags/flag.css b/Statics/Css/Flags/flag.css new file mode 100644 index 0000000..707b523 --- /dev/null +++ b/Statics/Css/Flags/flag.css @@ -0,0 +1,1036 @@ +/*! + * # Semantic UI 2.4.1 - Flag + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ + + +/******************************* + Flag +*******************************/ + +i.flag:not(.icon) { + display: inline-block; + width: 16px; + height: 11px; + line-height: 11px; + vertical-align: baseline; + margin: 0em 0.5em 0em 0em; + text-decoration: inherit; + speak: none; + font-smoothing: antialiased; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} + +/* Sprite */ +i.flag:not(.icon):before { + display: inline-block; + content: ''; + background: url("../../Fonts/Flags/flags.png") no-repeat -108px -1976px; + width: 16px; + height: 11px; +} + +/* Flag Sprite Based On http://www.famfamfam.com/lab/icons/flags/ */ + + +/******************************* + Theme Overrides +*******************************/ + +i.flag.ad:before, +i.flag.andorra:before { + background-position: 0px 0px; +} +i.flag.ae:before, +i.flag.united.arab.emirates:before, +i.flag.uae:before { + background-position: 0px -26px; +} +i.flag.af:before, +i.flag.afghanistan:before { + background-position: 0px -52px; +} +i.flag.ag:before, +i.flag.antigua:before { + background-position: 0px -78px; +} +i.flag.ai:before, +i.flag.anguilla:before { + background-position: 0px -104px; +} +i.flag.al:before, +i.flag.albania:before { + background-position: 0px -130px; +} +i.flag.am:before, +i.flag.armenia:before { + background-position: 0px -156px; +} +i.flag.an:before, +i.flag.netherlands.antilles:before { + background-position: 0px -182px; +} +i.flag.ao:before, +i.flag.angola:before { + background-position: 0px -208px; +} +i.flag.ar:before, +i.flag.argentina:before { + background-position: 0px -234px; +} +i.flag.as:before, +i.flag.american.samoa:before { + background-position: 0px -260px; +} +i.flag.at:before, +i.flag.austria:before { + background-position: 0px -286px; +} +i.flag.au:before, +i.flag.australia:before { + background-position: 0px -312px; +} +i.flag.aw:before, +i.flag.aruba:before { + background-position: 0px -338px; +} +i.flag.ax:before, +i.flag.aland.islands:before { + background-position: 0px -364px; +} +i.flag.az:before, +i.flag.azerbaijan:before { + background-position: 0px -390px; +} +i.flag.ba:before, +i.flag.bosnia:before { + background-position: 0px -416px; +} +i.flag.bb:before, +i.flag.barbados:before { + background-position: 0px -442px; +} +i.flag.bd:before, +i.flag.bangladesh:before { + background-position: 0px -468px; +} +i.flag.be:before, +i.flag.belgium:before { + background-position: 0px -494px; +} +i.flag.bf:before, +i.flag.burkina.faso:before { + background-position: 0px -520px; +} +i.flag.bg:before, +i.flag.bulgaria:before { + background-position: 0px -546px; +} +i.flag.bh:before, +i.flag.bahrain:before { + background-position: 0px -572px; +} +i.flag.bi:before, +i.flag.burundi:before { + background-position: 0px -598px; +} +i.flag.bj:before, +i.flag.benin:before { + background-position: 0px -624px; +} +i.flag.bm:before, +i.flag.bermuda:before { + background-position: 0px -650px; +} +i.flag.bn:before, +i.flag.brunei:before { + background-position: 0px -676px; +} +i.flag.bo:before, +i.flag.bolivia:before { + background-position: 0px -702px; +} +i.flag.br:before, +i.flag.brazil:before { + background-position: 0px -728px; +} +i.flag.bs:before, +i.flag.bahamas:before { + background-position: 0px -754px; +} +i.flag.bt:before, +i.flag.bhutan:before { + background-position: 0px -780px; +} +i.flag.bv:before, +i.flag.bouvet.island:before { + background-position: 0px -806px; +} +i.flag.bw:before, +i.flag.botswana:before { + background-position: 0px -832px; +} +i.flag.by:before, +i.flag.belarus:before { + background-position: 0px -858px; +} +i.flag.bz:before, +i.flag.belize:before { + background-position: 0px -884px; +} +i.flag.ca:before, +i.flag.canada:before { + background-position: 0px -910px; +} +i.flag.cc:before, +i.flag.cocos.islands:before { + background-position: 0px -962px; +} +i.flag.cd:before, +i.flag.congo:before { + background-position: 0px -988px; +} +i.flag.cf:before, +i.flag.central.african.republic:before { + background-position: 0px -1014px; +} +i.flag.cg:before, +i.flag.congo.brazzaville:before { + background-position: 0px -1040px; +} +i.flag.ch:before, +i.flag.switzerland:before { + background-position: 0px -1066px; +} +i.flag.ci:before, +i.flag.cote.divoire:before { + background-position: 0px -1092px; +} +i.flag.ck:before, +i.flag.cook.islands:before { + background-position: 0px -1118px; +} +i.flag.cl:before, +i.flag.chile:before { + background-position: 0px -1144px; +} +i.flag.cm:before, +i.flag.cameroon:before { + background-position: 0px -1170px; +} +i.flag.cn:before, +i.flag.china:before { + background-position: 0px -1196px; +} +i.flag.co:before, +i.flag.colombia:before { + background-position: 0px -1222px; +} +i.flag.cr:before, +i.flag.costa.rica:before { + background-position: 0px -1248px; +} +i.flag.cs:before, +i.flag.serbia:before { + background-position: 0px -1274px; +} +i.flag.cu:before, +i.flag.cuba:before { + background-position: 0px -1300px; +} +i.flag.cv:before, +i.flag.cape.verde:before { + background-position: 0px -1326px; +} +i.flag.cx:before, +i.flag.christmas.island:before { + background-position: 0px -1352px; +} +i.flag.cy:before, +i.flag.cyprus:before { + background-position: 0px -1378px; +} +i.flag.cz:before, +i.flag.czech.republic:before { + background-position: 0px -1404px; +} +i.flag.de:before, +i.flag.germany:before { + background-position: 0px -1430px; +} +i.flag.dj:before, +i.flag.djibouti:before { + background-position: 0px -1456px; +} +i.flag.dk:before, +i.flag.denmark:before { + background-position: 0px -1482px; +} +i.flag.dm:before, +i.flag.dominica:before { + background-position: 0px -1508px; +} +i.flag.do:before, +i.flag.dominican.republic:before { + background-position: 0px -1534px; +} +i.flag.dz:before, +i.flag.algeria:before { + background-position: 0px -1560px; +} +i.flag.ec:before, +i.flag.ecuador:before { + background-position: 0px -1586px; +} +i.flag.ee:before, +i.flag.estonia:before { + background-position: 0px -1612px; +} +i.flag.eg:before, +i.flag.egypt:before { + background-position: 0px -1638px; +} +i.flag.eh:before, +i.flag.western.sahara:before { + background-position: 0px -1664px; +} +i.flag.gb.eng:before, +i.flag.england:before { + background-position: 0px -1690px; +} +i.flag.er:before, +i.flag.eritrea:before { + background-position: 0px -1716px; +} +i.flag.es:before, +i.flag.spain:before { + background-position: 0px -1742px; +} +i.flag.et:before, +i.flag.ethiopia:before { + background-position: 0px -1768px; +} +i.flag.eu:before, +i.flag.european.union:before { + background-position: 0px -1794px; +} +i.flag.fi:before, +i.flag.finland:before { + background-position: 0px -1846px; +} +i.flag.fj:before, +i.flag.fiji:before { + background-position: 0px -1872px; +} +i.flag.fk:before, +i.flag.falkland.islands:before { + background-position: 0px -1898px; +} +i.flag.fm:before, +i.flag.micronesia:before { + background-position: 0px -1924px; +} +i.flag.fo:before, +i.flag.faroe.islands:before { + background-position: 0px -1950px; +} +i.flag.fr:before, +i.flag.france:before { + background-position: 0px -1976px; +} +i.flag.ga:before, +i.flag.gabon:before { + background-position: -36px 0px; +} +i.flag.gb:before, +i.flag.uk:before, +i.flag.united.kingdom:before { + background-position: -36px -26px; +} +i.flag.gd:before, +i.flag.grenada:before { + background-position: -36px -52px; +} +i.flag.ge:before, +i.flag.georgia:before { + background-position: -36px -78px; +} +i.flag.gf:before, +i.flag.french.guiana:before { + background-position: -36px -104px; +} +i.flag.gh:before, +i.flag.ghana:before { + background-position: -36px -130px; +} +i.flag.gi:before, +i.flag.gibraltar:before { + background-position: -36px -156px; +} +i.flag.gl:before, +i.flag.greenland:before { + background-position: -36px -182px; +} +i.flag.gm:before, +i.flag.gambia:before { + background-position: -36px -208px; +} +i.flag.gn:before, +i.flag.guinea:before { + background-position: -36px -234px; +} +i.flag.gp:before, +i.flag.guadeloupe:before { + background-position: -36px -260px; +} +i.flag.gq:before, +i.flag.equatorial.guinea:before { + background-position: -36px -286px; +} +i.flag.gr:before, +i.flag.greece:before { + background-position: -36px -312px; +} +i.flag.gs:before, +i.flag.sandwich.islands:before { + background-position: -36px -338px; +} +i.flag.gt:before, +i.flag.guatemala:before { + background-position: -36px -364px; +} +i.flag.gu:before, +i.flag.guam:before { + background-position: -36px -390px; +} +i.flag.gw:before, +i.flag.guinea-bissau:before { + background-position: -36px -416px; +} +i.flag.gy:before, +i.flag.guyana:before { + background-position: -36px -442px; +} +i.flag.hk:before, +i.flag.hong.kong:before { + background-position: -36px -468px; +} +i.flag.hm:before, +i.flag.heard.island:before { + background-position: -36px -494px; +} +i.flag.hn:before, +i.flag.honduras:before { + background-position: -36px -520px; +} +i.flag.hr:before, +i.flag.croatia:before { + background-position: -36px -546px; +} +i.flag.ht:before, +i.flag.haiti:before { + background-position: -36px -572px; +} +i.flag.hu:before, +i.flag.hungary:before { + background-position: -36px -598px; +} +i.flag.id:before, +i.flag.indonesia:before { + background-position: -36px -624px; +} +i.flag.ie:before, +i.flag.ireland:before { + background-position: -36px -650px; +} +i.flag.il:before, +i.flag.israel:before { + background-position: -36px -676px; +} +i.flag.in:before, +i.flag.india:before { + background-position: -36px -702px; +} +i.flag.io:before, +i.flag.indian.ocean.territory:before { + background-position: -36px -728px; +} +i.flag.iq:before, +i.flag.iraq:before { + background-position: -36px -754px; +} +i.flag.ir:before, +i.flag.iran:before { + background-position: -36px -780px; +} +i.flag.is:before, +i.flag.iceland:before { + background-position: -36px -806px; +} +i.flag.it:before, +i.flag.italy:before { + background-position: -36px -832px; +} +i.flag.jm:before, +i.flag.jamaica:before { + background-position: -36px -858px; +} +i.flag.jo:before, +i.flag.jordan:before { + background-position: -36px -884px; +} +i.flag.jp:before, +i.flag.japan:before { + background-position: -36px -910px; +} +i.flag.ke:before, +i.flag.kenya:before { + background-position: -36px -936px; +} +i.flag.kg:before, +i.flag.kyrgyzstan:before { + background-position: -36px -962px; +} +i.flag.kh:before, +i.flag.cambodia:before { + background-position: -36px -988px; +} +i.flag.ki:before, +i.flag.kiribati:before { + background-position: -36px -1014px; +} +i.flag.km:before, +i.flag.comoros:before { + background-position: -36px -1040px; +} +i.flag.kn:before, +i.flag.saint.kitts.and.nevis:before { + background-position: -36px -1066px; +} +i.flag.kp:before, +i.flag.north.korea:before { + background-position: -36px -1092px; +} +i.flag.kr:before, +i.flag.south.korea:before { + background-position: -36px -1118px; +} +i.flag.kw:before, +i.flag.kuwait:before { + background-position: -36px -1144px; +} +i.flag.ky:before, +i.flag.cayman.islands:before { + background-position: -36px -1170px; +} +i.flag.kz:before, +i.flag.kazakhstan:before { + background-position: -36px -1196px; +} +i.flag.la:before, +i.flag.laos:before { + background-position: -36px -1222px; +} +i.flag.lb:before, +i.flag.lebanon:before { + background-position: -36px -1248px; +} +i.flag.lc:before, +i.flag.saint.lucia:before { + background-position: -36px -1274px; +} +i.flag.li:before, +i.flag.liechtenstein:before { + background-position: -36px -1300px; +} +i.flag.lk:before, +i.flag.sri.lanka:before { + background-position: -36px -1326px; +} +i.flag.lr:before, +i.flag.liberia:before { + background-position: -36px -1352px; +} +i.flag.ls:before, +i.flag.lesotho:before { + background-position: -36px -1378px; +} +i.flag.lt:before, +i.flag.lithuania:before { + background-position: -36px -1404px; +} +i.flag.lu:before, +i.flag.luxembourg:before { + background-position: -36px -1430px; +} +i.flag.lv:before, +i.flag.latvia:before { + background-position: -36px -1456px; +} +i.flag.ly:before, +i.flag.libya:before { + background-position: -36px -1482px; +} +i.flag.ma:before, +i.flag.morocco:before { + background-position: -36px -1508px; +} +i.flag.mc:before, +i.flag.monaco:before { + background-position: -36px -1534px; +} +i.flag.md:before, +i.flag.moldova:before { + background-position: -36px -1560px; +} +i.flag.me:before, +i.flag.montenegro:before { + background-position: -36px -1586px; +} +i.flag.mg:before, +i.flag.madagascar:before { + background-position: -36px -1613px; +} +i.flag.mh:before, +i.flag.marshall.islands:before { + background-position: -36px -1639px; +} +i.flag.mk:before, +i.flag.macedonia:before { + background-position: -36px -1665px; +} +i.flag.ml:before, +i.flag.mali:before { + background-position: -36px -1691px; +} +i.flag.mm:before, +i.flag.myanmar:before, +i.flag.burma:before { + background-position: -73px -1821px; +} +i.flag.mn:before, +i.flag.mongolia:before { + background-position: -36px -1743px; +} +i.flag.mo:before, +i.flag.macau:before { + background-position: -36px -1769px; +} +i.flag.mp:before, +i.flag.northern.mariana.islands:before { + background-position: -36px -1795px; +} +i.flag.mq:before, +i.flag.martinique:before { + background-position: -36px -1821px; +} +i.flag.mr:before, +i.flag.mauritania:before { + background-position: -36px -1847px; +} +i.flag.ms:before, +i.flag.montserrat:before { + background-position: -36px -1873px; +} +i.flag.mt:before, +i.flag.malta:before { + background-position: -36px -1899px; +} +i.flag.mu:before, +i.flag.mauritius:before { + background-position: -36px -1925px; +} +i.flag.mv:before, +i.flag.maldives:before { + background-position: -36px -1951px; +} +i.flag.mw:before, +i.flag.malawi:before { + background-position: -36px -1977px; +} +i.flag.mx:before, +i.flag.mexico:before { + background-position: -72px 0px; +} +i.flag.my:before, +i.flag.malaysia:before { + background-position: -72px -26px; +} +i.flag.mz:before, +i.flag.mozambique:before { + background-position: -72px -52px; +} +i.flag.na:before, +i.flag.namibia:before { + background-position: -72px -78px; +} +i.flag.nc:before, +i.flag.new.caledonia:before { + background-position: -72px -104px; +} +i.flag.ne:before, +i.flag.niger:before { + background-position: -72px -130px; +} +i.flag.nf:before, +i.flag.norfolk.island:before { + background-position: -72px -156px; +} +i.flag.ng:before, +i.flag.nigeria:before { + background-position: -72px -182px; +} +i.flag.ni:before, +i.flag.nicaragua:before { + background-position: -72px -208px; +} +i.flag.nl:before, +i.flag.netherlands:before { + background-position: -72px -234px; +} +i.flag.no:before, +i.flag.norway:before { + background-position: -72px -260px; +} +i.flag.np:before, +i.flag.nepal:before { + background-position: -72px -286px; +} +i.flag.nr:before, +i.flag.nauru:before { + background-position: -72px -312px; +} +i.flag.nu:before, +i.flag.niue:before { + background-position: -72px -338px; +} +i.flag.nz:before, +i.flag.new.zealand:before { + background-position: -72px -364px; +} +i.flag.om:before, +i.flag.oman:before { + background-position: -72px -390px; +} +i.flag.pa:before, +i.flag.panama:before { + background-position: -72px -416px; +} +i.flag.pe:before, +i.flag.peru:before { + background-position: -72px -442px; +} +i.flag.pf:before, +i.flag.french.polynesia:before { + background-position: -72px -468px; +} +i.flag.pg:before, +i.flag.new.guinea:before { + background-position: -72px -494px; +} +i.flag.ph:before, +i.flag.philippines:before { + background-position: -72px -520px; +} +i.flag.pk:before, +i.flag.pakistan:before { + background-position: -72px -546px; +} +i.flag.pl:before, +i.flag.poland:before { + background-position: -72px -572px; +} +i.flag.pm:before, +i.flag.saint.pierre:before { + background-position: -72px -598px; +} +i.flag.pn:before, +i.flag.pitcairn.islands:before { + background-position: -72px -624px; +} +i.flag.pr:before, +i.flag.puerto.rico:before { + background-position: -72px -650px; +} +i.flag.ps:before, +i.flag.palestine:before { + background-position: -72px -676px; +} +i.flag.pt:before, +i.flag.portugal:before { + background-position: -72px -702px; +} +i.flag.pw:before, +i.flag.palau:before { + background-position: -72px -728px; +} +i.flag.py:before, +i.flag.paraguay:before { + background-position: -72px -754px; +} +i.flag.qa:before, +i.flag.qatar:before { + background-position: -72px -780px; +} +i.flag.re:before, +i.flag.reunion:before { + background-position: -72px -806px; +} +i.flag.ro:before, +i.flag.romania:before { + background-position: -72px -832px; +} +i.flag.rs:before, +i.flag.serbia:before { + background-position: -72px -858px; +} +i.flag.ru:before, +i.flag.russia:before { + background-position: -72px -884px; +} +i.flag.rw:before, +i.flag.rwanda:before { + background-position: -72px -910px; +} +i.flag.sa:before, +i.flag.saudi.arabia:before { + background-position: -72px -936px; +} +i.flag.sb:before, +i.flag.solomon.islands:before { + background-position: -72px -962px; +} +i.flag.sc:before, +i.flag.seychelles:before { + background-position: -72px -988px; +} +i.flag.gb.sct:before, +i.flag.scotland:before { + background-position: -72px -1014px; +} +i.flag.sd:before, +i.flag.sudan:before { + background-position: -72px -1040px; +} +i.flag.se:before, +i.flag.sweden:before { + background-position: -72px -1066px; +} +i.flag.sg:before, +i.flag.singapore:before { + background-position: -72px -1092px; +} +i.flag.sh:before, +i.flag.saint.helena:before { + background-position: -72px -1118px; +} +i.flag.si:before, +i.flag.slovenia:before { + background-position: -72px -1144px; +} +i.flag.sj:before, +i.flag.svalbard:before, +i.flag.jan.mayen:before { + background-position: -72px -1170px; +} +i.flag.sk:before, +i.flag.slovakia:before { + background-position: -72px -1196px; +} +i.flag.sl:before, +i.flag.sierra.leone:before { + background-position: -72px -1222px; +} +i.flag.sm:before, +i.flag.san.marino:before { + background-position: -72px -1248px; +} +i.flag.sn:before, +i.flag.senegal:before { + background-position: -72px -1274px; +} +i.flag.so:before, +i.flag.somalia:before { + background-position: -72px -1300px; +} +i.flag.sr:before, +i.flag.suriname:before { + background-position: -72px -1326px; +} +i.flag.st:before, +i.flag.sao.tome:before { + background-position: -72px -1352px; +} +i.flag.sv:before, +i.flag.el.salvador:before { + background-position: -72px -1378px; +} +i.flag.sy:before, +i.flag.syria:before { + background-position: -72px -1404px; +} +i.flag.sz:before, +i.flag.swaziland:before { + background-position: -72px -1430px; +} +i.flag.tc:before, +i.flag.caicos.islands:before { + background-position: -72px -1456px; +} +i.flag.td:before, +i.flag.chad:before { + background-position: -72px -1482px; +} +i.flag.tf:before, +i.flag.french.territories:before { + background-position: -72px -1508px; +} +i.flag.tg:before, +i.flag.togo:before { + background-position: -72px -1534px; +} +i.flag.th:before, +i.flag.thailand:before { + background-position: -72px -1560px; +} +i.flag.tj:before, +i.flag.tajikistan:before { + background-position: -72px -1586px; +} +i.flag.tk:before, +i.flag.tokelau:before { + background-position: -72px -1612px; +} +i.flag.tl:before, +i.flag.timorleste:before { + background-position: -72px -1638px; +} +i.flag.tm:before, +i.flag.turkmenistan:before { + background-position: -72px -1664px; +} +i.flag.tn:before, +i.flag.tunisia:before { + background-position: -72px -1690px; +} +i.flag.to:before, +i.flag.tonga:before { + background-position: -72px -1716px; +} +i.flag.tr:before, +i.flag.turkey:before { + background-position: -72px -1742px; +} +i.flag.tt:before, +i.flag.trinidad:before { + background-position: -72px -1768px; +} +i.flag.tv:before, +i.flag.tuvalu:before { + background-position: -72px -1794px; +} +i.flag.tw:before, +i.flag.taiwan:before { + background-position: -72px -1820px; +} +i.flag.tz:before, +i.flag.tanzania:before { + background-position: -72px -1846px; +} +i.flag.ua:before, +i.flag.ukraine:before { + background-position: -72px -1872px; +} +i.flag.ug:before, +i.flag.uganda:before { + background-position: -72px -1898px; +} +i.flag.um:before, +i.flag.us.minor.islands:before { + background-position: -72px -1924px; +} +i.flag.us:before, +i.flag.america:before, +i.flag.united.states:before { + background-position: -72px -1950px; +} +i.flag.uy:before, +i.flag.uruguay:before { + background-position: -72px -1976px; +} +i.flag.uz:before, +i.flag.uzbekistan:before { + background-position: -108px 0px; +} +i.flag.va:before, +i.flag.vatican.city:before { + background-position: -108px -26px; +} +i.flag.vc:before, +i.flag.saint.vincent:before { + background-position: -108px -52px; +} +i.flag.ve:before, +i.flag.venezuela:before { + background-position: -108px -78px; +} +i.flag.vg:before, +i.flag.british.virgin.islands:before { + background-position: -108px -104px; +} +i.flag.vi:before, +i.flag.us.virgin.islands:before { + background-position: -108px -130px; +} +i.flag.vn:before, +i.flag.vietnam:before { + background-position: -108px -156px; +} +i.flag.vu:before, +i.flag.vanuatu:before { + background-position: -108px -182px; +} +i.flag.gb.wls:before, +i.flag.wales:before { + background-position: -108px -208px; +} +i.flag.wf:before, +i.flag.wallis.and.futuna:before { + background-position: -108px -234px; +} +i.flag.ws:before, +i.flag.samoa:before { + background-position: -108px -260px; +} +i.flag.ye:before, +i.flag.yemen:before { + background-position: -108px -286px; +} +i.flag.yt:before, +i.flag.mayotte:before { + background-position: -108px -312px; +} +i.flag.za:before, +i.flag.south.africa:before { + background-position: -108px -338px; +} +i.flag.zm:before, +i.flag.zambia:before { + background-position: -108px -364px; +} +i.flag.zw:before, +i.flag.zimbabwe:before { + background-position: -108px -390px; +} + + +/******************************* + Site Overrides +*******************************/ + diff --git a/Statics/Css/Fontsawesome/all.css b/Statics/Css/Fontsawesome/all.css new file mode 100644 index 0000000..3efe071 --- /dev/null +++ b/Statics/Css/Fontsawesome/all.css @@ -0,0 +1,4616 @@ +/*! + * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa, +.fas, +.far, +.fal, +.fad, +.fab { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; } + +.fa-lg { + font-size: 1.33333em; + line-height: 0.75em; + vertical-align: -.0667em; } + +.fa-xs { + font-size: .75em; } + +.fa-sm { + font-size: .875em; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: 2.5em; + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: -2em; + position: absolute; + text-align: center; + width: 2em; + line-height: inherit; } + +.fa-border { + border: solid 0.08em #eee; + border-radius: .1em; + padding: .2em .25em .15em; } + +.fa-pull-left { + float: left; } + +.fa-pull-right { + float: right; } + +.fa.fa-pull-left, +.fas.fa-pull-left, +.far.fa-pull-left, +.fal.fa-pull-left, +.fab.fa-pull-left { + margin-right: .3em; } + +.fa.fa-pull-right, +.fas.fa-pull-right, +.far.fa-pull-right, +.fal.fa-pull-right, +.fab.fa-pull-right { + margin-left: .3em; } + +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; } + +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical, +:root .fa-flip-both { + -webkit-filter: none; + filter: none; } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: #fff; } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ +.fa-500px:before { + content: "\f26e"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-acquisitions-incorporated:before { + content: "\f6af"; } + +.fa-ad:before { + content: "\f641"; } + +.fa-address-book:before { + content: "\f2b9"; } + +.fa-address-card:before { + content: "\f2bb"; } + +.fa-adjust:before { + content: "\f042"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-air-freshener:before { + content: "\f5d0"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-align-center:before { + content: "\f037"; } + +.fa-align-justify:before { + content: "\f039"; } + +.fa-align-left:before { + content: "\f036"; } + +.fa-align-right:before { + content: "\f038"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-allergies:before { + content: "\f461"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-ambulance:before { + content: "\f0f9"; } + +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-anchor:before { + content: "\f13d"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-angle-double-down:before { + content: "\f103"; } + +.fa-angle-double-left:before { + content: "\f100"; } + +.fa-angle-double-right:before { + content: "\f101"; } + +.fa-angle-double-up:before { + content: "\f102"; } + +.fa-angle-down:before { + content: "\f107"; } + +.fa-angle-left:before { + content: "\f104"; } + +.fa-angle-right:before { + content: "\f105"; } + +.fa-angle-up:before { + content: "\f106"; } + +.fa-angry:before { + content: "\f556"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-ankh:before { + content: "\f644"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-apple-alt:before { + content: "\f5d1"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-archive:before { + content: "\f187"; } + +.fa-archway:before { + content: "\f557"; } + +.fa-arrow-alt-circle-down:before { + content: "\f358"; } + +.fa-arrow-alt-circle-left:before { + content: "\f359"; } + +.fa-arrow-alt-circle-right:before { + content: "\f35a"; } + +.fa-arrow-alt-circle-up:before { + content: "\f35b"; } + +.fa-arrow-circle-down:before { + content: "\f0ab"; } + +.fa-arrow-circle-left:before { + content: "\f0a8"; } + +.fa-arrow-circle-right:before { + content: "\f0a9"; } + +.fa-arrow-circle-up:before { + content: "\f0aa"; } + +.fa-arrow-down:before { + content: "\f063"; } + +.fa-arrow-left:before { + content: "\f060"; } + +.fa-arrow-right:before { + content: "\f061"; } + +.fa-arrow-up:before { + content: "\f062"; } + +.fa-arrows-alt:before { + content: "\f0b2"; } + +.fa-arrows-alt-h:before { + content: "\f337"; } + +.fa-arrows-alt-v:before { + content: "\f338"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-assistive-listening-systems:before { + content: "\f2a2"; } + +.fa-asterisk:before { + content: "\f069"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-at:before { + content: "\f1fa"; } + +.fa-atlas:before { + content: "\f558"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-atom:before { + content: "\f5d2"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-audio-description:before { + content: "\f29e"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-award:before { + content: "\f559"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-baby:before { + content: "\f77c"; } + +.fa-baby-carriage:before { + content: "\f77d"; } + +.fa-backspace:before { + content: "\f55a"; } + +.fa-backward:before { + content: "\f04a"; } + +.fa-bacon:before { + content: "\f7e5"; } + +.fa-bacteria:before { + content: "\e059"; } + +.fa-bacterium:before { + content: "\e05a"; } + +.fa-bahai:before { + content: "\f666"; } + +.fa-balance-scale:before { + content: "\f24e"; } + +.fa-balance-scale-left:before { + content: "\f515"; } + +.fa-balance-scale-right:before { + content: "\f516"; } + +.fa-ban:before { + content: "\f05e"; } + +.fa-band-aid:before { + content: "\f462"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-barcode:before { + content: "\f02a"; } + +.fa-bars:before { + content: "\f0c9"; } + +.fa-baseball-ball:before { + content: "\f433"; } + +.fa-basketball-ball:before { + content: "\f434"; } + +.fa-bath:before { + content: "\f2cd"; } + +.fa-battery-empty:before { + content: "\f244"; } + +.fa-battery-full:before { + content: "\f240"; } + +.fa-battery-half:before { + content: "\f242"; } + +.fa-battery-quarter:before { + content: "\f243"; } + +.fa-battery-three-quarters:before { + content: "\f241"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-bed:before { + content: "\f236"; } + +.fa-beer:before { + content: "\f0fc"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-bell:before { + content: "\f0f3"; } + +.fa-bell-slash:before { + content: "\f1f6"; } + +.fa-bezier-curve:before { + content: "\f55b"; } + +.fa-bible:before { + content: "\f647"; } + +.fa-bicycle:before { + content: "\f206"; } + +.fa-biking:before { + content: "\f84a"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-binoculars:before { + content: "\f1e5"; } + +.fa-biohazard:before { + content: "\f780"; } + +.fa-birthday-cake:before { + content: "\f1fd"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-blender:before { + content: "\f517"; } + +.fa-blender-phone:before { + content: "\f6b6"; } + +.fa-blind:before { + content: "\f29d"; } + +.fa-blog:before { + content: "\f781"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-bold:before { + content: "\f032"; } + +.fa-bolt:before { + content: "\f0e7"; } + +.fa-bomb:before { + content: "\f1e2"; } + +.fa-bone:before { + content: "\f5d7"; } + +.fa-bong:before { + content: "\f55c"; } + +.fa-book:before { + content: "\f02d"; } + +.fa-book-dead:before { + content: "\f6b7"; } + +.fa-book-medical:before { + content: "\f7e6"; } + +.fa-book-open:before { + content: "\f518"; } + +.fa-book-reader:before { + content: "\f5da"; } + +.fa-bookmark:before { + content: "\f02e"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-border-all:before { + content: "\f84c"; } + +.fa-border-none:before { + content: "\f850"; } + +.fa-border-style:before { + content: "\f853"; } + +.fa-bowling-ball:before { + content: "\f436"; } + +.fa-box:before { + content: "\f466"; } + +.fa-box-open:before { + content: "\f49e"; } + +.fa-box-tissue:before { + content: "\e05b"; } + +.fa-boxes:before { + content: "\f468"; } + +.fa-braille:before { + content: "\f2a1"; } + +.fa-brain:before { + content: "\f5dc"; } + +.fa-bread-slice:before { + content: "\f7ec"; } + +.fa-briefcase:before { + content: "\f0b1"; } + +.fa-briefcase-medical:before { + content: "\f469"; } + +.fa-broadcast-tower:before { + content: "\f519"; } + +.fa-broom:before { + content: "\f51a"; } + +.fa-brush:before { + content: "\f55d"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-bug:before { + content: "\f188"; } + +.fa-building:before { + content: "\f1ad"; } + +.fa-bullhorn:before { + content: "\f0a1"; } + +.fa-bullseye:before { + content: "\f140"; } + +.fa-burn:before { + content: "\f46a"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-bus:before { + content: "\f207"; } + +.fa-bus-alt:before { + content: "\f55e"; } + +.fa-business-time:before { + content: "\f64a"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-calculator:before { + content: "\f1ec"; } + +.fa-calendar:before { + content: "\f133"; } + +.fa-calendar-alt:before { + content: "\f073"; } + +.fa-calendar-check:before { + content: "\f274"; } + +.fa-calendar-day:before { + content: "\f783"; } + +.fa-calendar-minus:before { + content: "\f272"; } + +.fa-calendar-plus:before { + content: "\f271"; } + +.fa-calendar-times:before { + content: "\f273"; } + +.fa-calendar-week:before { + content: "\f784"; } + +.fa-camera:before { + content: "\f030"; } + +.fa-camera-retro:before { + content: "\f083"; } + +.fa-campground:before { + content: "\f6bb"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-candy-cane:before { + content: "\f786"; } + +.fa-cannabis:before { + content: "\f55f"; } + +.fa-capsules:before { + content: "\f46b"; } + +.fa-car:before { + content: "\f1b9"; } + +.fa-car-alt:before { + content: "\f5de"; } + +.fa-car-battery:before { + content: "\f5df"; } + +.fa-car-crash:before { + content: "\f5e1"; } + +.fa-car-side:before { + content: "\f5e4"; } + +.fa-caravan:before { + content: "\f8ff"; } + +.fa-caret-down:before { + content: "\f0d7"; } + +.fa-caret-left:before { + content: "\f0d9"; } + +.fa-caret-right:before { + content: "\f0da"; } + +.fa-caret-square-down:before { + content: "\f150"; } + +.fa-caret-square-left:before { + content: "\f191"; } + +.fa-caret-square-right:before { + content: "\f152"; } + +.fa-caret-square-up:before { + content: "\f151"; } + +.fa-caret-up:before { + content: "\f0d8"; } + +.fa-carrot:before { + content: "\f787"; } + +.fa-cart-arrow-down:before { + content: "\f218"; } + +.fa-cart-plus:before { + content: "\f217"; } + +.fa-cash-register:before { + content: "\f788"; } + +.fa-cat:before { + content: "\f6be"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-certificate:before { + content: "\f0a3"; } + +.fa-chair:before { + content: "\f6c0"; } + +.fa-chalkboard:before { + content: "\f51b"; } + +.fa-chalkboard-teacher:before { + content: "\f51c"; } + +.fa-charging-station:before { + content: "\f5e7"; } + +.fa-chart-area:before { + content: "\f1fe"; } + +.fa-chart-bar:before { + content: "\f080"; } + +.fa-chart-line:before { + content: "\f201"; } + +.fa-chart-pie:before { + content: "\f200"; } + +.fa-check:before { + content: "\f00c"; } + +.fa-check-circle:before { + content: "\f058"; } + +.fa-check-double:before { + content: "\f560"; } + +.fa-check-square:before { + content: "\f14a"; } + +.fa-cheese:before { + content: "\f7ef"; } + +.fa-chess:before { + content: "\f439"; } + +.fa-chess-bishop:before { + content: "\f43a"; } + +.fa-chess-board:before { + content: "\f43c"; } + +.fa-chess-king:before { + content: "\f43f"; } + +.fa-chess-knight:before { + content: "\f441"; } + +.fa-chess-pawn:before { + content: "\f443"; } + +.fa-chess-queen:before { + content: "\f445"; } + +.fa-chess-rook:before { + content: "\f447"; } + +.fa-chevron-circle-down:before { + content: "\f13a"; } + +.fa-chevron-circle-left:before { + content: "\f137"; } + +.fa-chevron-circle-right:before { + content: "\f138"; } + +.fa-chevron-circle-up:before { + content: "\f139"; } + +.fa-chevron-down:before { + content: "\f078"; } + +.fa-chevron-left:before { + content: "\f053"; } + +.fa-chevron-right:before { + content: "\f054"; } + +.fa-chevron-up:before { + content: "\f077"; } + +.fa-child:before { + content: "\f1ae"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-church:before { + content: "\f51d"; } + +.fa-circle:before { + content: "\f111"; } + +.fa-circle-notch:before { + content: "\f1ce"; } + +.fa-city:before { + content: "\f64f"; } + +.fa-clinic-medical:before { + content: "\f7f2"; } + +.fa-clipboard:before { + content: "\f328"; } + +.fa-clipboard-check:before { + content: "\f46c"; } + +.fa-clipboard-list:before { + content: "\f46d"; } + +.fa-clock:before { + content: "\f017"; } + +.fa-clone:before { + content: "\f24d"; } + +.fa-closed-captioning:before { + content: "\f20a"; } + +.fa-cloud:before { + content: "\f0c2"; } + +.fa-cloud-download-alt:before { + content: "\f381"; } + +.fa-cloud-meatball:before { + content: "\f73b"; } + +.fa-cloud-moon:before { + content: "\f6c3"; } + +.fa-cloud-moon-rain:before { + content: "\f73c"; } + +.fa-cloud-rain:before { + content: "\f73d"; } + +.fa-cloud-showers-heavy:before { + content: "\f740"; } + +.fa-cloud-sun:before { + content: "\f6c4"; } + +.fa-cloud-sun-rain:before { + content: "\f743"; } + +.fa-cloud-upload-alt:before { + content: "\f382"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-cocktail:before { + content: "\f561"; } + +.fa-code:before { + content: "\f121"; } + +.fa-code-branch:before { + content: "\f126"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-coffee:before { + content: "\f0f4"; } + +.fa-cog:before { + content: "\f013"; } + +.fa-cogs:before { + content: "\f085"; } + +.fa-coins:before { + content: "\f51e"; } + +.fa-columns:before { + content: "\f0db"; } + +.fa-comment:before { + content: "\f075"; } + +.fa-comment-alt:before { + content: "\f27a"; } + +.fa-comment-dollar:before { + content: "\f651"; } + +.fa-comment-dots:before { + content: "\f4ad"; } + +.fa-comment-medical:before { + content: "\f7f5"; } + +.fa-comment-slash:before { + content: "\f4b3"; } + +.fa-comments:before { + content: "\f086"; } + +.fa-comments-dollar:before { + content: "\f653"; } + +.fa-compact-disc:before { + content: "\f51f"; } + +.fa-compass:before { + content: "\f14e"; } + +.fa-compress:before { + content: "\f066"; } + +.fa-compress-alt:before { + content: "\f422"; } + +.fa-compress-arrows-alt:before { + content: "\f78c"; } + +.fa-concierge-bell:before { + content: "\f562"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-cookie:before { + content: "\f563"; } + +.fa-cookie-bite:before { + content: "\f564"; } + +.fa-copy:before { + content: "\f0c5"; } + +.fa-copyright:before { + content: "\f1f9"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-couch:before { + content: "\f4b8"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-credit-card:before { + content: "\f09d"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-crop:before { + content: "\f125"; } + +.fa-crop-alt:before { + content: "\f565"; } + +.fa-cross:before { + content: "\f654"; } + +.fa-crosshairs:before { + content: "\f05b"; } + +.fa-crow:before { + content: "\f520"; } + +.fa-crown:before { + content: "\f521"; } + +.fa-crutch:before { + content: "\f7f7"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-cube:before { + content: "\f1b2"; } + +.fa-cubes:before { + content: "\f1b3"; } + +.fa-cut:before { + content: "\f0c4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-database:before { + content: "\f1c0"; } + +.fa-deaf:before { + content: "\f2a4"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-democrat:before { + content: "\f747"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-desktop:before { + content: "\f108"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-dharmachakra:before { + content: "\f655"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-diagnoses:before { + content: "\f470"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-dice:before { + content: "\f522"; } + +.fa-dice-d20:before { + content: "\f6cf"; } + +.fa-dice-d6:before { + content: "\f6d1"; } + +.fa-dice-five:before { + content: "\f523"; } + +.fa-dice-four:before { + content: "\f524"; } + +.fa-dice-one:before { + content: "\f525"; } + +.fa-dice-six:before { + content: "\f526"; } + +.fa-dice-three:before { + content: "\f527"; } + +.fa-dice-two:before { + content: "\f528"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-digital-tachograph:before { + content: "\f566"; } + +.fa-directions:before { + content: "\f5eb"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-disease:before { + content: "\f7fa"; } + +.fa-divide:before { + content: "\f529"; } + +.fa-dizzy:before { + content: "\f567"; } + +.fa-dna:before { + content: "\f471"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-dog:before { + content: "\f6d3"; } + +.fa-dollar-sign:before { + content: "\f155"; } + +.fa-dolly:before { + content: "\f472"; } + +.fa-dolly-flatbed:before { + content: "\f474"; } + +.fa-donate:before { + content: "\f4b9"; } + +.fa-door-closed:before { + content: "\f52a"; } + +.fa-door-open:before { + content: "\f52b"; } + +.fa-dot-circle:before { + content: "\f192"; } + +.fa-dove:before { + content: "\f4ba"; } + +.fa-download:before { + content: "\f019"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-drafting-compass:before { + content: "\f568"; } + +.fa-dragon:before { + content: "\f6d5"; } + +.fa-draw-polygon:before { + content: "\f5ee"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-drum:before { + content: "\f569"; } + +.fa-drum-steelpan:before { + content: "\f56a"; } + +.fa-drumstick-bite:before { + content: "\f6d7"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-dumbbell:before { + content: "\f44b"; } + +.fa-dumpster:before { + content: "\f793"; } + +.fa-dumpster-fire:before { + content: "\f794"; } + +.fa-dungeon:before { + content: "\f6d9"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-edit:before { + content: "\f044"; } + +.fa-egg:before { + content: "\f7fb"; } + +.fa-eject:before { + content: "\f052"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-ellipsis-h:before { + content: "\f141"; } + +.fa-ellipsis-v:before { + content: "\f142"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envelope:before { + content: "\f0e0"; } + +.fa-envelope-open:before { + content: "\f2b6"; } + +.fa-envelope-open-text:before { + content: "\f658"; } + +.fa-envelope-square:before { + content: "\f199"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-equals:before { + content: "\f52c"; } + +.fa-eraser:before { + content: "\f12d"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-ethernet:before { + content: "\f796"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-euro-sign:before { + content: "\f153"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-exchange-alt:before { + content: "\f362"; } + +.fa-exclamation:before { + content: "\f12a"; } + +.fa-exclamation-circle:before { + content: "\f06a"; } + +.fa-exclamation-triangle:before { + content: "\f071"; } + +.fa-expand:before { + content: "\f065"; } + +.fa-expand-alt:before { + content: "\f424"; } + +.fa-expand-arrows-alt:before { + content: "\f31e"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-external-link-alt:before { + content: "\f35d"; } + +.fa-external-link-square-alt:before { + content: "\f360"; } + +.fa-eye:before { + content: "\f06e"; } + +.fa-eye-dropper:before { + content: "\f1fb"; } + +.fa-eye-slash:before { + content: "\f070"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-fan:before { + content: "\f863"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-fast-backward:before { + content: "\f049"; } + +.fa-fast-forward:before { + content: "\f050"; } + +.fa-faucet:before { + content: "\e005"; } + +.fa-fax:before { + content: "\f1ac"; } + +.fa-feather:before { + content: "\f52d"; } + +.fa-feather-alt:before { + content: "\f56b"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-female:before { + content: "\f182"; } + +.fa-fighter-jet:before { + content: "\f0fb"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-file:before { + content: "\f15b"; } + +.fa-file-alt:before { + content: "\f15c"; } + +.fa-file-archive:before { + content: "\f1c6"; } + +.fa-file-audio:before { + content: "\f1c7"; } + +.fa-file-code:before { + content: "\f1c9"; } + +.fa-file-contract:before { + content: "\f56c"; } + +.fa-file-csv:before { + content: "\f6dd"; } + +.fa-file-download:before { + content: "\f56d"; } + +.fa-file-excel:before { + content: "\f1c3"; } + +.fa-file-export:before { + content: "\f56e"; } + +.fa-file-image:before { + content: "\f1c5"; } + +.fa-file-import:before { + content: "\f56f"; } + +.fa-file-invoice:before { + content: "\f570"; } + +.fa-file-invoice-dollar:before { + content: "\f571"; } + +.fa-file-medical:before { + content: "\f477"; } + +.fa-file-medical-alt:before { + content: "\f478"; } + +.fa-file-pdf:before { + content: "\f1c1"; } + +.fa-file-powerpoint:before { + content: "\f1c4"; } + +.fa-file-prescription:before { + content: "\f572"; } + +.fa-file-signature:before { + content: "\f573"; } + +.fa-file-upload:before { + content: "\f574"; } + +.fa-file-video:before { + content: "\f1c8"; } + +.fa-file-word:before { + content: "\f1c2"; } + +.fa-fill:before { + content: "\f575"; } + +.fa-fill-drip:before { + content: "\f576"; } + +.fa-film:before { + content: "\f008"; } + +.fa-filter:before { + content: "\f0b0"; } + +.fa-fingerprint:before { + content: "\f577"; } + +.fa-fire:before { + content: "\f06d"; } + +.fa-fire-alt:before { + content: "\f7e4"; } + +.fa-fire-extinguisher:before { + content: "\f134"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-first-aid:before { + content: "\f479"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-fish:before { + content: "\f578"; } + +.fa-fist-raised:before { + content: "\f6de"; } + +.fa-flag:before { + content: "\f024"; } + +.fa-flag-checkered:before { + content: "\f11e"; } + +.fa-flag-usa:before { + content: "\f74d"; } + +.fa-flask:before { + content: "\f0c3"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-flushed:before { + content: "\f579"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-folder:before { + content: "\f07b"; } + +.fa-folder-minus:before { + content: "\f65d"; } + +.fa-folder-open:before { + content: "\f07c"; } + +.fa-folder-plus:before { + content: "\f65e"; } + +.fa-font:before { + content: "\f031"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-font-awesome-flag:before { + content: "\f425"; } + +.fa-font-awesome-logo-full:before { + content: "\f4e6"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-football-ball:before { + content: "\f44e"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-forward:before { + content: "\f04e"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-frog:before { + content: "\f52e"; } + +.fa-frown:before { + content: "\f119"; } + +.fa-frown-open:before { + content: "\f57a"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-funnel-dollar:before { + content: "\f662"; } + +.fa-futbol:before { + content: "\f1e3"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-gamepad:before { + content: "\f11b"; } + +.fa-gas-pump:before { + content: "\f52f"; } + +.fa-gavel:before { + content: "\f0e3"; } + +.fa-gem:before { + content: "\f3a5"; } + +.fa-genderless:before { + content: "\f22d"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-ghost:before { + content: "\f6e2"; } + +.fa-gift:before { + content: "\f06b"; } + +.fa-gifts:before { + content: "\f79c"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-glass-cheers:before { + content: "\f79f"; } + +.fa-glass-martini:before { + content: "\f000"; } + +.fa-glass-martini-alt:before { + content: "\f57b"; } + +.fa-glass-whiskey:before { + content: "\f7a0"; } + +.fa-glasses:before { + content: "\f530"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-globe:before { + content: "\f0ac"; } + +.fa-globe-africa:before { + content: "\f57c"; } + +.fa-globe-americas:before { + content: "\f57d"; } + +.fa-globe-asia:before { + content: "\f57e"; } + +.fa-globe-europe:before { + content: "\f7a2"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-golf-ball:before { + content: "\f450"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-gopuram:before { + content: "\f664"; } + +.fa-graduation-cap:before { + content: "\f19d"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-greater-than:before { + content: "\f531"; } + +.fa-greater-than-equal:before { + content: "\f532"; } + +.fa-grimace:before { + content: "\f57f"; } + +.fa-grin:before { + content: "\f580"; } + +.fa-grin-alt:before { + content: "\f581"; } + +.fa-grin-beam:before { + content: "\f582"; } + +.fa-grin-beam-sweat:before { + content: "\f583"; } + +.fa-grin-hearts:before { + content: "\f584"; } + +.fa-grin-squint:before { + content: "\f585"; } + +.fa-grin-squint-tears:before { + content: "\f586"; } + +.fa-grin-stars:before { + content: "\f587"; } + +.fa-grin-tears:before { + content: "\f588"; } + +.fa-grin-tongue:before { + content: "\f589"; } + +.fa-grin-tongue-squint:before { + content: "\f58a"; } + +.fa-grin-tongue-wink:before { + content: "\f58b"; } + +.fa-grin-wink:before { + content: "\f58c"; } + +.fa-grip-horizontal:before { + content: "\f58d"; } + +.fa-grip-lines:before { + content: "\f7a4"; } + +.fa-grip-lines-vertical:before { + content: "\f7a5"; } + +.fa-grip-vertical:before { + content: "\f58e"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-guitar:before { + content: "\f7a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-h-square:before { + content: "\f0fd"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-hamburger:before { + content: "\f805"; } + +.fa-hammer:before { + content: "\f6e3"; } + +.fa-hamsa:before { + content: "\f665"; } + +.fa-hand-holding:before { + content: "\f4bd"; } + +.fa-hand-holding-heart:before { + content: "\f4be"; } + +.fa-hand-holding-medical:before { + content: "\e05c"; } + +.fa-hand-holding-usd:before { + content: "\f4c0"; } + +.fa-hand-holding-water:before { + content: "\f4c1"; } + +.fa-hand-lizard:before { + content: "\f258"; } + +.fa-hand-middle-finger:before { + content: "\f806"; } + +.fa-hand-paper:before { + content: "\f256"; } + +.fa-hand-peace:before { + content: "\f25b"; } + +.fa-hand-point-down:before { + content: "\f0a7"; } + +.fa-hand-point-left:before { + content: "\f0a5"; } + +.fa-hand-point-right:before { + content: "\f0a4"; } + +.fa-hand-point-up:before { + content: "\f0a6"; } + +.fa-hand-pointer:before { + content: "\f25a"; } + +.fa-hand-rock:before { + content: "\f255"; } + +.fa-hand-scissors:before { + content: "\f257"; } + +.fa-hand-sparkles:before { + content: "\e05d"; } + +.fa-hand-spock:before { + content: "\f259"; } + +.fa-hands:before { + content: "\f4c2"; } + +.fa-hands-helping:before { + content: "\f4c4"; } + +.fa-hands-wash:before { + content: "\e05e"; } + +.fa-handshake:before { + content: "\f2b5"; } + +.fa-handshake-alt-slash:before { + content: "\e05f"; } + +.fa-handshake-slash:before { + content: "\e060"; } + +.fa-hanukiah:before { + content: "\f6e6"; } + +.fa-hard-hat:before { + content: "\f807"; } + +.fa-hashtag:before { + content: "\f292"; } + +.fa-hat-cowboy:before { + content: "\f8c0"; } + +.fa-hat-cowboy-side:before { + content: "\f8c1"; } + +.fa-hat-wizard:before { + content: "\f6e8"; } + +.fa-hdd:before { + content: "\f0a0"; } + +.fa-head-side-cough:before { + content: "\e061"; } + +.fa-head-side-cough-slash:before { + content: "\e062"; } + +.fa-head-side-mask:before { + content: "\e063"; } + +.fa-head-side-virus:before { + content: "\e064"; } + +.fa-heading:before { + content: "\f1dc"; } + +.fa-headphones:before { + content: "\f025"; } + +.fa-headphones-alt:before { + content: "\f58f"; } + +.fa-headset:before { + content: "\f590"; } + +.fa-heart:before { + content: "\f004"; } + +.fa-heart-broken:before { + content: "\f7a9"; } + +.fa-heartbeat:before { + content: "\f21e"; } + +.fa-helicopter:before { + content: "\f533"; } + +.fa-highlighter:before { + content: "\f591"; } + +.fa-hiking:before { + content: "\f6ec"; } + +.fa-hippo:before { + content: "\f6ed"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-history:before { + content: "\f1da"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-hockey-puck:before { + content: "\f453"; } + +.fa-holly-berry:before { + content: "\f7aa"; } + +.fa-home:before { + content: "\f015"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-horse:before { + content: "\f6f0"; } + +.fa-horse-head:before { + content: "\f7ab"; } + +.fa-hospital:before { + content: "\f0f8"; } + +.fa-hospital-alt:before { + content: "\f47d"; } + +.fa-hospital-symbol:before { + content: "\f47e"; } + +.fa-hospital-user:before { + content: "\f80d"; } + +.fa-hot-tub:before { + content: "\f593"; } + +.fa-hotdog:before { + content: "\f80f"; } + +.fa-hotel:before { + content: "\f594"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-hourglass:before { + content: "\f254"; } + +.fa-hourglass-end:before { + content: "\f253"; } + +.fa-hourglass-half:before { + content: "\f252"; } + +.fa-hourglass-start:before { + content: "\f251"; } + +.fa-house-damage:before { + content: "\f6f1"; } + +.fa-house-user:before { + content: "\e065"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-hryvnia:before { + content: "\f6f2"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-i-cursor:before { + content: "\f246"; } + +.fa-ice-cream:before { + content: "\f810"; } + +.fa-icicles:before { + content: "\f7ad"; } + +.fa-icons:before { + content: "\f86d"; } + +.fa-id-badge:before { + content: "\f2c1"; } + +.fa-id-card:before { + content: "\f2c2"; } + +.fa-id-card-alt:before { + content: "\f47f"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-igloo:before { + content: "\f7ae"; } + +.fa-image:before { + content: "\f03e"; } + +.fa-images:before { + content: "\f302"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-inbox:before { + content: "\f01c"; } + +.fa-indent:before { + content: "\f03c"; } + +.fa-industry:before { + content: "\f275"; } + +.fa-infinity:before { + content: "\f534"; } + +.fa-info:before { + content: "\f129"; } + +.fa-info-circle:before { + content: "\f05a"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-italic:before { + content: "\f033"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-jedi:before { + content: "\f669"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-joint:before { + content: "\f595"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-journal-whills:before { + content: "\f66a"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-kaaba:before { + content: "\f66b"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-key:before { + content: "\f084"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-keyboard:before { + content: "\f11c"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-khanda:before { + content: "\f66d"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-kiss:before { + content: "\f596"; } + +.fa-kiss-beam:before { + content: "\f597"; } + +.fa-kiss-wink-heart:before { + content: "\f598"; } + +.fa-kiwi-bird:before { + content: "\f535"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-landmark:before { + content: "\f66f"; } + +.fa-language:before { + content: "\f1ab"; } + +.fa-laptop:before { + content: "\f109"; } + +.fa-laptop-code:before { + content: "\f5fc"; } + +.fa-laptop-house:before { + content: "\e066"; } + +.fa-laptop-medical:before { + content: "\f812"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-laugh:before { + content: "\f599"; } + +.fa-laugh-beam:before { + content: "\f59a"; } + +.fa-laugh-squint:before { + content: "\f59b"; } + +.fa-laugh-wink:before { + content: "\f59c"; } + +.fa-layer-group:before { + content: "\f5fd"; } + +.fa-leaf:before { + content: "\f06c"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-lemon:before { + content: "\f094"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-less-than:before { + content: "\f536"; } + +.fa-less-than-equal:before { + content: "\f537"; } + +.fa-level-down-alt:before { + content: "\f3be"; } + +.fa-level-up-alt:before { + content: "\f3bf"; } + +.fa-life-ring:before { + content: "\f1cd"; } + +.fa-lightbulb:before { + content: "\f0eb"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-link:before { + content: "\f0c1"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-lira-sign:before { + content: "\f195"; } + +.fa-list:before { + content: "\f03a"; } + +.fa-list-alt:before { + content: "\f022"; } + +.fa-list-ol:before { + content: "\f0cb"; } + +.fa-list-ul:before { + content: "\f0ca"; } + +.fa-location-arrow:before { + content: "\f124"; } + +.fa-lock:before { + content: "\f023"; } + +.fa-lock-open:before { + content: "\f3c1"; } + +.fa-long-arrow-alt-down:before { + content: "\f309"; } + +.fa-long-arrow-alt-left:before { + content: "\f30a"; } + +.fa-long-arrow-alt-right:before { + content: "\f30b"; } + +.fa-long-arrow-alt-up:before { + content: "\f30c"; } + +.fa-low-vision:before { + content: "\f2a8"; } + +.fa-luggage-cart:before { + content: "\f59d"; } + +.fa-lungs:before { + content: "\f604"; } + +.fa-lungs-virus:before { + content: "\e067"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-magic:before { + content: "\f0d0"; } + +.fa-magnet:before { + content: "\f076"; } + +.fa-mail-bulk:before { + content: "\f674"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-male:before { + content: "\f183"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-map:before { + content: "\f279"; } + +.fa-map-marked:before { + content: "\f59f"; } + +.fa-map-marked-alt:before { + content: "\f5a0"; } + +.fa-map-marker:before { + content: "\f041"; } + +.fa-map-marker-alt:before { + content: "\f3c5"; } + +.fa-map-pin:before { + content: "\f276"; } + +.fa-map-signs:before { + content: "\f277"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-marker:before { + content: "\f5a1"; } + +.fa-mars:before { + content: "\f222"; } + +.fa-mars-double:before { + content: "\f227"; } + +.fa-mars-stroke:before { + content: "\f229"; } + +.fa-mars-stroke-h:before { + content: "\f22b"; } + +.fa-mars-stroke-v:before { + content: "\f22a"; } + +.fa-mask:before { + content: "\f6fa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-medal:before { + content: "\f5a2"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f3c7"; } + +.fa-medkit:before { + content: "\f0fa"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-meh:before { + content: "\f11a"; } + +.fa-meh-blank:before { + content: "\f5a4"; } + +.fa-meh-rolling-eyes:before { + content: "\f5a5"; } + +.fa-memory:before { + content: "\f538"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-menorah:before { + content: "\f676"; } + +.fa-mercury:before { + content: "\f223"; } + +.fa-meteor:before { + content: "\f753"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-microchip:before { + content: "\f2db"; } + +.fa-microphone:before { + content: "\f130"; } + +.fa-microphone-alt:before { + content: "\f3c9"; } + +.fa-microphone-alt-slash:before { + content: "\f539"; } + +.fa-microphone-slash:before { + content: "\f131"; } + +.fa-microscope:before { + content: "\f610"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-minus:before { + content: "\f068"; } + +.fa-minus-circle:before { + content: "\f056"; } + +.fa-minus-square:before { + content: "\f146"; } + +.fa-mitten:before { + content: "\f7b5"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-mobile:before { + content: "\f10b"; } + +.fa-mobile-alt:before { + content: "\f3cd"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-money-bill:before { + content: "\f0d6"; } + +.fa-money-bill-alt:before { + content: "\f3d1"; } + +.fa-money-bill-wave:before { + content: "\f53a"; } + +.fa-money-bill-wave-alt:before { + content: "\f53b"; } + +.fa-money-check:before { + content: "\f53c"; } + +.fa-money-check-alt:before { + content: "\f53d"; } + +.fa-monument:before { + content: "\f5a6"; } + +.fa-moon:before { + content: "\f186"; } + +.fa-mortar-pestle:before { + content: "\f5a7"; } + +.fa-mosque:before { + content: "\f678"; } + +.fa-motorcycle:before { + content: "\f21c"; } + +.fa-mountain:before { + content: "\f6fc"; } + +.fa-mouse:before { + content: "\f8cc"; } + +.fa-mouse-pointer:before { + content: "\f245"; } + +.fa-mug-hot:before { + content: "\f7b6"; } + +.fa-music:before { + content: "\f001"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-network-wired:before { + content: "\f6ff"; } + +.fa-neuter:before { + content: "\f22c"; } + +.fa-newspaper:before { + content: "\f1ea"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-node:before { + content: "\f419"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-not-equal:before { + content: "\f53e"; } + +.fa-notes-medical:before { + content: "\f481"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-object-group:before { + content: "\f247"; } + +.fa-object-ungroup:before { + content: "\f248"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-oil-can:before { + content: "\f613"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-om:before { + content: "\f679"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-otter:before { + content: "\f700"; } + +.fa-outdent:before { + content: "\f03b"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-pager:before { + content: "\f815"; } + +.fa-paint-brush:before { + content: "\f1fc"; } + +.fa-paint-roller:before { + content: "\f5aa"; } + +.fa-palette:before { + content: "\f53f"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-pallet:before { + content: "\f482"; } + +.fa-paper-plane:before { + content: "\f1d8"; } + +.fa-paperclip:before { + content: "\f0c6"; } + +.fa-parachute-box:before { + content: "\f4cd"; } + +.fa-paragraph:before { + content: "\f1dd"; } + +.fa-parking:before { + content: "\f540"; } + +.fa-passport:before { + content: "\f5ab"; } + +.fa-pastafarianism:before { + content: "\f67b"; } + +.fa-paste:before { + content: "\f0ea"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-pause:before { + content: "\f04c"; } + +.fa-pause-circle:before { + content: "\f28b"; } + +.fa-paw:before { + content: "\f1b0"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-peace:before { + content: "\f67c"; } + +.fa-pen:before { + content: "\f304"; } + +.fa-pen-alt:before { + content: "\f305"; } + +.fa-pen-fancy:before { + content: "\f5ac"; } + +.fa-pen-nib:before { + content: "\f5ad"; } + +.fa-pen-square:before { + content: "\f14b"; } + +.fa-pencil-alt:before { + content: "\f303"; } + +.fa-pencil-ruler:before { + content: "\f5ae"; } + +.fa-penny-arcade:before { + content: "\f704"; } + +.fa-people-arrows:before { + content: "\e068"; } + +.fa-people-carry:before { + content: "\f4ce"; } + +.fa-pepper-hot:before { + content: "\f816"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-percent:before { + content: "\f295"; } + +.fa-percentage:before { + content: "\f541"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-person-booth:before { + content: "\f756"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-phone:before { + content: "\f095"; } + +.fa-phone-alt:before { + content: "\f879"; } + +.fa-phone-slash:before { + content: "\f3dd"; } + +.fa-phone-square:before { + content: "\f098"; } + +.fa-phone-square-alt:before { + content: "\f87b"; } + +.fa-phone-volume:before { + content: "\f2a0"; } + +.fa-photo-video:before { + content: "\f87c"; } + +.fa-php:before { + content: "\f457"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-piggy-bank:before { + content: "\f4d3"; } + +.fa-pills:before { + content: "\f484"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-pizza-slice:before { + content: "\f818"; } + +.fa-place-of-worship:before { + content: "\f67f"; } + +.fa-plane:before { + content: "\f072"; } + +.fa-plane-arrival:before { + content: "\f5af"; } + +.fa-plane-departure:before { + content: "\f5b0"; } + +.fa-plane-slash:before { + content: "\e069"; } + +.fa-play:before { + content: "\f04b"; } + +.fa-play-circle:before { + content: "\f144"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-plug:before { + content: "\f1e6"; } + +.fa-plus:before { + content: "\f067"; } + +.fa-plus-circle:before { + content: "\f055"; } + +.fa-plus-square:before { + content: "\f0fe"; } + +.fa-podcast:before { + content: "\f2ce"; } + +.fa-poll:before { + content: "\f681"; } + +.fa-poll-h:before { + content: "\f682"; } + +.fa-poo:before { + content: "\f2fe"; } + +.fa-poo-storm:before { + content: "\f75a"; } + +.fa-poop:before { + content: "\f619"; } + +.fa-portrait:before { + content: "\f3e0"; } + +.fa-pound-sign:before { + content: "\f154"; } + +.fa-power-off:before { + content: "\f011"; } + +.fa-pray:before { + content: "\f683"; } + +.fa-praying-hands:before { + content: "\f684"; } + +.fa-prescription:before { + content: "\f5b1"; } + +.fa-prescription-bottle:before { + content: "\f485"; } + +.fa-prescription-bottle-alt:before { + content: "\f486"; } + +.fa-print:before { + content: "\f02f"; } + +.fa-procedures:before { + content: "\f487"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-project-diagram:before { + content: "\f542"; } + +.fa-pump-medical:before { + content: "\e06a"; } + +.fa-pump-soap:before { + content: "\e06b"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-puzzle-piece:before { + content: "\f12e"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-qrcode:before { + content: "\f029"; } + +.fa-question:before { + content: "\f128"; } + +.fa-question-circle:before { + content: "\f059"; } + +.fa-quidditch:before { + content: "\f458"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-quote-left:before { + content: "\f10d"; } + +.fa-quote-right:before { + content: "\f10e"; } + +.fa-quran:before { + content: "\f687"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-radiation:before { + content: "\f7b9"; } + +.fa-radiation-alt:before { + content: "\f7ba"; } + +.fa-rainbow:before { + content: "\f75b"; } + +.fa-random:before { + content: "\f074"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-receipt:before { + content: "\f543"; } + +.fa-record-vinyl:before { + content: "\f8d9"; } + +.fa-recycle:before { + content: "\f1b8"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-redo:before { + content: "\f01e"; } + +.fa-redo-alt:before { + content: "\f2f9"; } + +.fa-registered:before { + content: "\f25d"; } + +.fa-remove-format:before { + content: "\f87d"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-reply:before { + content: "\f3e5"; } + +.fa-reply-all:before { + content: "\f122"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-republican:before { + content: "\f75e"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-restroom:before { + content: "\f7bd"; } + +.fa-retweet:before { + content: "\f079"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-ribbon:before { + content: "\f4d6"; } + +.fa-ring:before { + content: "\f70b"; } + +.fa-road:before { + content: "\f018"; } + +.fa-robot:before { + content: "\f544"; } + +.fa-rocket:before { + content: "\f135"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-route:before { + content: "\f4d7"; } + +.fa-rss:before { + content: "\f09e"; } + +.fa-rss-square:before { + content: "\f143"; } + +.fa-ruble-sign:before { + content: "\f158"; } + +.fa-ruler:before { + content: "\f545"; } + +.fa-ruler-combined:before { + content: "\f546"; } + +.fa-ruler-horizontal:before { + content: "\f547"; } + +.fa-ruler-vertical:before { + content: "\f548"; } + +.fa-running:before { + content: "\f70c"; } + +.fa-rupee-sign:before { + content: "\f156"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-sad-cry:before { + content: "\f5b3"; } + +.fa-sad-tear:before { + content: "\f5b4"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-satellite:before { + content: "\f7bf"; } + +.fa-satellite-dish:before { + content: "\f7c0"; } + +.fa-save:before { + content: "\f0c7"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-school:before { + content: "\f549"; } + +.fa-screwdriver:before { + content: "\f54a"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-scroll:before { + content: "\f70e"; } + +.fa-sd-card:before { + content: "\f7c2"; } + +.fa-search:before { + content: "\f002"; } + +.fa-search-dollar:before { + content: "\f688"; } + +.fa-search-location:before { + content: "\f689"; } + +.fa-search-minus:before { + content: "\f010"; } + +.fa-search-plus:before { + content: "\f00e"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-seedling:before { + content: "\f4d8"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-server:before { + content: "\f233"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-shapes:before { + content: "\f61f"; } + +.fa-share:before { + content: "\f064"; } + +.fa-share-alt:before { + content: "\f1e0"; } + +.fa-share-alt-square:before { + content: "\f1e1"; } + +.fa-share-square:before { + content: "\f14d"; } + +.fa-shekel-sign:before { + content: "\f20b"; } + +.fa-shield-alt:before { + content: "\f3ed"; } + +.fa-shield-virus:before { + content: "\e06c"; } + +.fa-ship:before { + content: "\f21a"; } + +.fa-shipping-fast:before { + content: "\f48b"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-shoe-prints:before { + content: "\f54b"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-shopping-bag:before { + content: "\f290"; } + +.fa-shopping-basket:before { + content: "\f291"; } + +.fa-shopping-cart:before { + content: "\f07a"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-shower:before { + content: "\f2cc"; } + +.fa-shuttle-van:before { + content: "\f5b6"; } + +.fa-sign:before { + content: "\f4d9"; } + +.fa-sign-in-alt:before { + content: "\f2f6"; } + +.fa-sign-language:before { + content: "\f2a7"; } + +.fa-sign-out-alt:before { + content: "\f2f5"; } + +.fa-signal:before { + content: "\f012"; } + +.fa-signature:before { + content: "\f5b7"; } + +.fa-sim-card:before { + content: "\f7c4"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-sink:before { + content: "\e06d"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-sitemap:before { + content: "\f0e8"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-skating:before { + content: "\f7c5"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-skiing:before { + content: "\f7c9"; } + +.fa-skiing-nordic:before { + content: "\f7ca"; } + +.fa-skull:before { + content: "\f54c"; } + +.fa-skull-crossbones:before { + content: "\f714"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f3ef"; } + +.fa-slash:before { + content: "\f715"; } + +.fa-sleigh:before { + content: "\f7cc"; } + +.fa-sliders-h:before { + content: "\f1de"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-smile:before { + content: "\f118"; } + +.fa-smile-beam:before { + content: "\f5b8"; } + +.fa-smile-wink:before { + content: "\f4da"; } + +.fa-smog:before { + content: "\f75f"; } + +.fa-smoking:before { + content: "\f48d"; } + +.fa-smoking-ban:before { + content: "\f54d"; } + +.fa-sms:before { + content: "\f7cd"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ac"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-snowboarding:before { + content: "\f7ce"; } + +.fa-snowflake:before { + content: "\f2dc"; } + +.fa-snowman:before { + content: "\f7d0"; } + +.fa-snowplow:before { + content: "\f7d2"; } + +.fa-soap:before { + content: "\e06e"; } + +.fa-socks:before { + content: "\f696"; } + +.fa-solar-panel:before { + content: "\f5ba"; } + +.fa-sort:before { + content: "\f0dc"; } + +.fa-sort-alpha-down:before { + content: "\f15d"; } + +.fa-sort-alpha-down-alt:before { + content: "\f881"; } + +.fa-sort-alpha-up:before { + content: "\f15e"; } + +.fa-sort-alpha-up-alt:before { + content: "\f882"; } + +.fa-sort-amount-down:before { + content: "\f160"; } + +.fa-sort-amount-down-alt:before { + content: "\f884"; } + +.fa-sort-amount-up:before { + content: "\f161"; } + +.fa-sort-amount-up-alt:before { + content: "\f885"; } + +.fa-sort-down:before { + content: "\f0dd"; } + +.fa-sort-numeric-down:before { + content: "\f162"; } + +.fa-sort-numeric-down-alt:before { + content: "\f886"; } + +.fa-sort-numeric-up:before { + content: "\f163"; } + +.fa-sort-numeric-up-alt:before { + content: "\f887"; } + +.fa-sort-up:before { + content: "\f0de"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-spa:before { + content: "\f5bb"; } + +.fa-space-shuttle:before { + content: "\f197"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-spell-check:before { + content: "\f891"; } + +.fa-spider:before { + content: "\f717"; } + +.fa-spinner:before { + content: "\f110"; } + +.fa-splotch:before { + content: "\f5bc"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-spray-can:before { + content: "\f5bd"; } + +.fa-square:before { + content: "\f0c8"; } + +.fa-square-full:before { + content: "\f45c"; } + +.fa-square-root-alt:before { + content: "\f698"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-stamp:before { + content: "\f5bf"; } + +.fa-star:before { + content: "\f005"; } + +.fa-star-and-crescent:before { + content: "\f699"; } + +.fa-star-half:before { + content: "\f089"; } + +.fa-star-half-alt:before { + content: "\f5c0"; } + +.fa-star-of-david:before { + content: "\f69a"; } + +.fa-star-of-life:before { + content: "\f621"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } + +.fa-step-backward:before { + content: "\f048"; } + +.fa-step-forward:before { + content: "\f051"; } + +.fa-stethoscope:before { + content: "\f0f1"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-sticky-note:before { + content: "\f249"; } + +.fa-stop:before { + content: "\f04d"; } + +.fa-stop-circle:before { + content: "\f28d"; } + +.fa-stopwatch:before { + content: "\f2f2"; } + +.fa-stopwatch-20:before { + content: "\e06f"; } + +.fa-store:before { + content: "\f54e"; } + +.fa-store-alt:before { + content: "\f54f"; } + +.fa-store-alt-slash:before { + content: "\e070"; } + +.fa-store-slash:before { + content: "\e071"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-stream:before { + content: "\f550"; } + +.fa-street-view:before { + content: "\f21d"; } + +.fa-strikethrough:before { + content: "\f0cc"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-stroopwafel:before { + content: "\f551"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-subscript:before { + content: "\f12c"; } + +.fa-subway:before { + content: "\f239"; } + +.fa-suitcase:before { + content: "\f0f2"; } + +.fa-suitcase-rolling:before { + content: "\f5c1"; } + +.fa-sun:before { + content: "\f185"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-superscript:before { + content: "\f12b"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-surprise:before { + content: "\f5c2"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-swatchbook:before { + content: "\f5c3"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-swimmer:before { + content: "\f5c4"; } + +.fa-swimming-pool:before { + content: "\f5c5"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-synagogue:before { + content: "\f69b"; } + +.fa-sync:before { + content: "\f021"; } + +.fa-sync-alt:before { + content: "\f2f1"; } + +.fa-syringe:before { + content: "\f48e"; } + +.fa-table:before { + content: "\f0ce"; } + +.fa-table-tennis:before { + content: "\f45d"; } + +.fa-tablet:before { + content: "\f10a"; } + +.fa-tablet-alt:before { + content: "\f3fa"; } + +.fa-tablets:before { + content: "\f490"; } + +.fa-tachometer-alt:before { + content: "\f3fd"; } + +.fa-tag:before { + content: "\f02b"; } + +.fa-tags:before { + content: "\f02c"; } + +.fa-tape:before { + content: "\f4db"; } + +.fa-tasks:before { + content: "\f0ae"; } + +.fa-taxi:before { + content: "\f1ba"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-teeth:before { + content: "\f62e"; } + +.fa-teeth-open:before { + content: "\f62f"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f3fe"; } + +.fa-temperature-high:before { + content: "\f769"; } + +.fa-temperature-low:before { + content: "\f76b"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-tenge:before { + content: "\f7d7"; } + +.fa-terminal:before { + content: "\f120"; } + +.fa-text-height:before { + content: "\f034"; } + +.fa-text-width:before { + content: "\f035"; } + +.fa-th:before { + content: "\f00a"; } + +.fa-th-large:before { + content: "\f009"; } + +.fa-th-list:before { + content: "\f00b"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-theater-masks:before { + content: "\f630"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-thermometer:before { + content: "\f491"; } + +.fa-thermometer-empty:before { + content: "\f2cb"; } + +.fa-thermometer-full:before { + content: "\f2c7"; } + +.fa-thermometer-half:before { + content: "\f2c9"; } + +.fa-thermometer-quarter:before { + content: "\f2ca"; } + +.fa-thermometer-three-quarters:before { + content: "\f2c8"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-thumbs-down:before { + content: "\f165"; } + +.fa-thumbs-up:before { + content: "\f164"; } + +.fa-thumbtack:before { + content: "\f08d"; } + +.fa-ticket-alt:before { + content: "\f3ff"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-times:before { + content: "\f00d"; } + +.fa-times-circle:before { + content: "\f057"; } + +.fa-tint:before { + content: "\f043"; } + +.fa-tint-slash:before { + content: "\f5c7"; } + +.fa-tired:before { + content: "\f5c8"; } + +.fa-toggle-off:before { + content: "\f204"; } + +.fa-toggle-on:before { + content: "\f205"; } + +.fa-toilet:before { + content: "\f7d8"; } + +.fa-toilet-paper:before { + content: "\f71e"; } + +.fa-toilet-paper-slash:before { + content: "\e072"; } + +.fa-toolbox:before { + content: "\f552"; } + +.fa-tools:before { + content: "\f7d9"; } + +.fa-tooth:before { + content: "\f5c9"; } + +.fa-torah:before { + content: "\f6a0"; } + +.fa-torii-gate:before { + content: "\f6a1"; } + +.fa-tractor:before { + content: "\f722"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-trademark:before { + content: "\f25c"; } + +.fa-traffic-light:before { + content: "\f637"; } + +.fa-trailer:before { + content: "\e041"; } + +.fa-train:before { + content: "\f238"; } + +.fa-tram:before { + content: "\f7da"; } + +.fa-transgender:before { + content: "\f224"; } + +.fa-transgender-alt:before { + content: "\f225"; } + +.fa-trash:before { + content: "\f1f8"; } + +.fa-trash-alt:before { + content: "\f2ed"; } + +.fa-trash-restore:before { + content: "\f829"; } + +.fa-trash-restore-alt:before { + content: "\f82a"; } + +.fa-tree:before { + content: "\f1bb"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-trophy:before { + content: "\f091"; } + +.fa-truck:before { + content: "\f0d1"; } + +.fa-truck-loading:before { + content: "\f4de"; } + +.fa-truck-monster:before { + content: "\f63b"; } + +.fa-truck-moving:before { + content: "\f4df"; } + +.fa-truck-pickup:before { + content: "\f63c"; } + +.fa-tshirt:before { + content: "\f553"; } + +.fa-tty:before { + content: "\f1e4"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-tv:before { + content: "\f26c"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-umbrella:before { + content: "\f0e9"; } + +.fa-umbrella-beach:before { + content: "\f5ca"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-underline:before { + content: "\f0cd"; } + +.fa-undo:before { + content: "\f0e2"; } + +.fa-undo-alt:before { + content: "\f2ea"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-universal-access:before { + content: "\f29a"; } + +.fa-university:before { + content: "\f19c"; } + +.fa-unlink:before { + content: "\f127"; } + +.fa-unlock:before { + content: "\f09c"; } + +.fa-unlock-alt:before { + content: "\f13e"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-upload:before { + content: "\f093"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-user:before { + content: "\f007"; } + +.fa-user-alt:before { + content: "\f406"; } + +.fa-user-alt-slash:before { + content: "\f4fa"; } + +.fa-user-astronaut:before { + content: "\f4fb"; } + +.fa-user-check:before { + content: "\f4fc"; } + +.fa-user-circle:before { + content: "\f2bd"; } + +.fa-user-clock:before { + content: "\f4fd"; } + +.fa-user-cog:before { + content: "\f4fe"; } + +.fa-user-edit:before { + content: "\f4ff"; } + +.fa-user-friends:before { + content: "\f500"; } + +.fa-user-graduate:before { + content: "\f501"; } + +.fa-user-injured:before { + content: "\f728"; } + +.fa-user-lock:before { + content: "\f502"; } + +.fa-user-md:before { + content: "\f0f0"; } + +.fa-user-minus:before { + content: "\f503"; } + +.fa-user-ninja:before { + content: "\f504"; } + +.fa-user-nurse:before { + content: "\f82f"; } + +.fa-user-plus:before { + content: "\f234"; } + +.fa-user-secret:before { + content: "\f21b"; } + +.fa-user-shield:before { + content: "\f505"; } + +.fa-user-slash:before { + content: "\f506"; } + +.fa-user-tag:before { + content: "\f507"; } + +.fa-user-tie:before { + content: "\f508"; } + +.fa-user-times:before { + content: "\f235"; } + +.fa-users:before { + content: "\f0c0"; } + +.fa-users-cog:before { + content: "\f509"; } + +.fa-users-slash:before { + content: "\e073"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-utensil-spoon:before { + content: "\f2e5"; } + +.fa-utensils:before { + content: "\f2e7"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-vector-square:before { + content: "\f5cb"; } + +.fa-venus:before { + content: "\f221"; } + +.fa-venus-double:before { + content: "\f226"; } + +.fa-venus-mars:before { + content: "\f228"; } + +.fa-vest:before { + content: "\e085"; } + +.fa-vest-patches:before { + content: "\e086"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-vial:before { + content: "\f492"; } + +.fa-vials:before { + content: "\f493"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-video:before { + content: "\f03d"; } + +.fa-video-slash:before { + content: "\f4e2"; } + +.fa-vihara:before { + content: "\f6a7"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-virus:before { + content: "\e074"; } + +.fa-virus-slash:before { + content: "\e075"; } + +.fa-viruses:before { + content: "\e076"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-voicemail:before { + content: "\f897"; } + +.fa-volleyball-ball:before { + content: "\f45f"; } + +.fa-volume-down:before { + content: "\f027"; } + +.fa-volume-mute:before { + content: "\f6a9"; } + +.fa-volume-off:before { + content: "\f026"; } + +.fa-volume-up:before { + content: "\f028"; } + +.fa-vote-yea:before { + content: "\f772"; } + +.fa-vr-cardboard:before { + content: "\f729"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-walking:before { + content: "\f554"; } + +.fa-wallet:before { + content: "\f555"; } + +.fa-warehouse:before { + content: "\f494"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-water:before { + content: "\f773"; } + +.fa-wave-square:before { + content: "\f83e"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-weight:before { + content: "\f496"; } + +.fa-weight-hanging:before { + content: "\f5cd"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-wheelchair:before { + content: "\f193"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-wifi:before { + content: "\f1eb"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wind:before { + content: "\f72e"; } + +.fa-window-close:before { + content: "\f410"; } + +.fa-window-maximize:before { + content: "\f2d0"; } + +.fa-window-minimize:before { + content: "\f2d1"; } + +.fa-window-restore:before { + content: "\f2d2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wine-bottle:before { + content: "\f72f"; } + +.fa-wine-glass:before { + content: "\f4e3"; } + +.fa-wine-glass-alt:before { + content: "\f5ce"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-won-sign:before { + content: "\f159"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-wrench:before { + content: "\f0ad"; } + +.fa-x-ray:before { + content: "\f497"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-yen-sign:before { + content: "\f157"; } + +.fa-yin-yang:before { + content: "\f6ad"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; } + +.sr-only-focusable:active, .sr-only-focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../../Fonts/Fontsawesome/fa-brands-400.eot"); + src: url("../../Fonts/Fontsawesome/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../../Fonts/Fontsawesome/fa-brands-400.woff2") format("woff2"), url("../../Fonts/Fontsawesome/fa-brands-400.woff") format("woff"), url("../../Fonts/Fontsawesome/fa-brands-400.ttf") format("truetype"), url("../../Fonts/Fontsawesome/fa-brands-400.svg#fontawesome") format("svg"); } + +.fab { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../../Fonts/Fontsawesome/fa-regular-400.eot"); + src: url("../../Fonts/Fontsawesome/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../../Fonts/Fontsawesome/fa-regular-400.woff2") format("woff2"), url("../../Fonts/Fontsawesome/fa-regular-400.woff") format("woff"), url("../../Fonts/Fontsawesome/fa-regular-400.ttf") format("truetype"), url("../../Fonts/Fontsawesome/fa-regular-400.svg#fontawesome") format("svg"); } + +.far { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../../Fonts/Fontsawesome/fa-solid-900.eot"); + src: url("../../Fonts/Fontsawesome/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../../Fonts/Fontsawesome/fa-solid-900.woff2") format("woff2"), url("../../Fonts/Fontsawesome/fa-solid-900.woff") format("woff"), url("../../Fonts/Fontsawesome/fa-solid-900.ttf") format("truetype"), url("../../Fonts/Fontsawesome/fa-solid-900.svg#fontawesome") format("svg"); } + +.fa, +.fas { + font-family: 'Font Awesome 5 Free'; + font-weight: 900; } diff --git a/Statics/Css/main.css b/Statics/Css/main.css new file mode 100644 index 0000000..65b6d89 --- /dev/null +++ b/Statics/Css/main.css @@ -0,0 +1,498 @@ +/* +Sites web utilisés pour le CSS: +https://css-tricks.com/guides/ +https://stackoverflow.com/ +https://www.w3schools.com/css/default.asp + +Toutes les recherches sont effectuées en anglais +sur mon instance SearX https://searx.debulois.fr +*/ + +/* Déclaration de la palette de couleur */ +:root { + /* GLOBAL */ + --mainSiteColor: #c0392b; + /* SEPARATOR */ + --separatorBg: white; + /* NAVBAR */ + --navbarText: black; + --navbarBg: white; + /* SLIDER */ + --slideText: whitesmoke; + --slideBg: black; + --slideStroke: black; + /* MAIN */ + --bg: white; + --text: black; + --iconColor: white; + --btnHoverBg: #e74c3c; + /* TABLES */ + --tableText: black; + --tableBg: #f1f1f1; + --tableBorder: rgba(0, 0, 0, 0.2); + --tableStarUnchecked: darkgray; + --tableStarChecked: orange; + /* FOOTER */ + --footerText: #636e72; + --footerBg: #2d3436; +} + +/* Déclaration des fonts */ +@font-face { + /* Nom du font */ + font-family: "akira"; + /* source du font */ + src: url("../Fonts/akira.otf") +} + +@font-face { + font-family: "SourceSansPro"; + src: url("../Fonts/SourceSansPro.ttf") +} + +/* Déclaration des class */ +/* NAVBAR */ +.titleNavbar { + /* Type de font à utiliser */ + font-family: akira; + /* Couleur du text */ + color: var(--mainSiteColor) !important; + /* taille de l'élément flex */ + flex-grow: 1; +} + +.userManager{ + /* Seconde ligne si plus de place */ + flex-wrap: wrap; + flex-grow: 1; +} + +.userManager li { + /* type d'affichage */ + display: flex; + /* Alignement verticale */ + align-items: center; +} + +.userManager a { + /* Hauteur de la ligne */ + line-height: 2.5em; +} + +.userManager i{ + /* Taille du texte */ + font-size: 1.3em; +} + +.language{ + /* hauteur */ + height: 100%; + display: flex; + /* direction du flex */ + flex-direction: column; + /* Métode d'espacement des éléments fles */ + justify-content: space-around; + /* Alignement du texte horizontalement */ + text-align: center; + flex-grow: 1; +} +/* FIN NAVBAR */ + +/* SLIDER */ +.slideSelected { + color: var(--mainSiteColor); + /* Transform de type zoom x1,3 */ + transform: scale(1.3); +} + +.show { + /* Opacité de l'élément 0=transparent 1=opaque */ + opacity: 1 !important; +} +/* FIN SLIDER */ + +/* MESSAGE */ +.success { + color: green; + /* Type de texte gras */ + font-weight: bold; + /* Type du texte sous-ligné */ + text-decoration: underline; + font-size: 28px; +} + +.error { + color: red; + font-weight: bold; + text-decoration: underline; + font-size: 28px; +} +/* FIN MESSAGE */ + +/* TABLEAU */ +.star { + /* !important prend le dessus sur tout type de déclaration précédente */ + font-size: 20px !important; + width: 20% !important; + line-height: 1em !important; + height: 1em !important; + background-color: var(--tableBg) !important; +} + +.unchecked { + color: var(--tableStarUnchecked) !important; +} + +.checked { + color: var(--tableStarChecked) !important; +} + +.noBorder { + /* Bordure */ + border: none !important; + background-color: white !important; +} +/* FIN TABLEAU */ + +/* GLOBAL */ +.separator { + height: 10vh; + /* Couleur du fond */ + background-color: var(--separatorBg); +} + +.info { + /* Style du texte italic */ + font-style: italic; +} + +.spacer { + flex-grow: 2; +} + +.flex-center { + justify-content: center !important; +} + +.width-auto { + width: auto !important; +} +/* FIN GLOBAL */ + +/* Déclaration globale */ +html { + /* transitions douce lors d'un appel d'id ex: index.php#IdNumero1 */ + scroll-behavior: smooth; +} + +body { + /* Choix du font */ + font-family: SourceSansPro !important; + margin: 0px; + /* taille en vh (view height) pourcentage de hauteur de fenêtre*/ + min-height: 100vh; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +pre { + /* Permet d'aller à la ligne */ + white-space: pre-wrap; + margin: 0.3em 0em; +} + +/* Déclaration par ID */ +/* NAVBAR */ +#navbar { + /* Index de profondeur */ + z-index: 1; + height: 10vh; + display: flex; + align-items: center; + justify-content: space-around; + text-align: center; + background-color: var(--navbarBg); + border-top: var(--mainSiteColor) solid 1.5vh; + border-bottom: var(--mainSiteColor) solid 0.5vh; + color: var(--navbarText); +} + +#navbar ul { + display: flex; + justify-content: space-around; + column-gap: 15px; + list-style-type: none; + /* Marge extérieure de l'élément */ + margin-block-start: 0px; + margin-block-end: 0px; + /* Marge intérieure de l'élément */ + padding-inline-start: 0px; +} + +#navbar i { + margin-right: 0.4em; +} + +#navbar a { + color: var(--navbarText); + text-decoration: none; + transition: 0.15s; +} + +#navbar a:hover { + color: var(--mainSiteColor); + transform: scale(1.1); + z-index: 2; +} +/* FIN NAVBAR */ + +/* SLIDER */ +#slideshow { + width: 100%; + height: 70vh; + background-color: var(--navbarBg); + /* Image de fond du slider */ + background-image: url("/Medias/Images/slide0.jpg"); + /* Remplissage du fond en zoom */ + background-size: cover; + /* Non répétition de l'image de fond */ + background-repeat: no-repeat; + /* Centrage de l'image */ + background-position: center; + text-align: center; + transition: background-image 0.3s linear; +} + +#slideshow p { + position: absolute; + display: inline-block; + left: 0; + right: 0; + margin-left: auto; + margin-right: auto; + max-width: 80%; + font-size: 48px; + color: var(--slideText); + opacity: 0; + /* Aniamtion liée */ + animation-name: textSlide; + /* Durée de l'animation */ + animation-duration: 5s; + /* Nombre de répétition de l'animation */ + animation-iteration-count: infinite; +} + +#slideshow p span { + font-family: akira; + color: var(--mainSiteColor); + /* Ombre du texte: positionX, positionY, Etendue, Fondue */ + text-shadow: + 1px 1px 0 var(--slideStroke), + 1px -1px 0 var(--slideStroke), + -1px 1px 0 var(--slideStroke), + -1px -1px 0 var(--slideStroke); +} + +/* Etapes de l'animation */ +@keyframes textSlide { + 0% {top: 30%} + 35% {top: 18%} + 100% {top: 18%} +} + +#slideIndicator { + position: absolute; + /* Centrer un élément absolu, gauche moitié puis droite (moins moitié) */ + left: 50%; + transform: translateX(-50%); + margin: 0 auto; + bottom: 10%; +} +#slideIndicator i { + margin-right: 1em; +} + +#slideIndicator i:last-child { + margin-right: none; +} +/* FIN SLIDER */ + +/* GLOBAL */ +#login, +#register, +#userInfo, +#message, +#delete, +#mission, +#myMission, +#search { + width: 80%; + min-height: 70vh; + /* margin left & right en auto = centré */ + margin-left: auto; + margin-right: auto; + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + border-top: 1.5vh solid var(--mainSiteColor); + border-right: 0.5vh solid var(--mainSiteColor); + border-bottom: 0.5vh solid var(--mainSiteColor); + border-left: 0.5vh solid var(--mainSiteColor); + background-color: var(--bg); + color: var(--text); +} + +#login h2, +#register h2, +#userInfo h2, +#message h2, +#delete h2, +#search h2, +#mission h2, +#myMission h2 { + display: inline-block; + margin-left: auto; + margin-right: auto; + padding: 1.5% 5%; + border-bottom: var(--mainSiteColor) 0.5vh solid; +} + +#login form, +#userInfo form, +#register form, +#mission form, +#delete form, +#search form { + display: flex; + flex-direction: column; + justify-content: space-around; + gap: 1em; + padding: 1.5% 5%; + align-items: center; +} + +#search form, +#delete form { + flex-direction: row; +} + +#login label, +#userInfo label, +#register label, +#mission label, +#delete label, +#search label { + width: 80%; + display: flex; +} + +#login i, +#userInfo i, +#register i, +#mission i, +#delete i, +#search i { + width: 90px; + height: 2em; + line-height: 2em; + font-size: 28px; + color: var(--iconColor); + background-color: var(--mainSiteColor); +} + +#myMission table, +#delete table, +#search table { + color: var(--text); + padding: 5%; + border-collapse: collapse; + width: 95%; + margin: 1em auto; +} + +#myMission th, +#delete th, +#search th { + font-size: 15px; + border: 2px solid var(--mainSiteColor); + background-color: var(--tableBg); +} + +#myMission td, +#delete td, +#search td { + + border: 2px solid var(--tableBorder); + background-color: var(--tableBg); +} + +#userInfo input[type="text"], +#mission input[type="text"], +#login input[type="email"], +#login input[type="password"], +#register input[type="email"], +#search input[type="search"], +#register input[type="password"] { + width: inherit; + border: 0.5vh solid var(--mainSiteColor); + padding: 1em; +} + +#mission select { + height: 2.5em; + line-height: 2.5em; + margin-top: auto; + margin-bottom: auto; + margin-left: 1em; +} + +#userInfo textarea, +#mission textarea { + width: 83%; + height: 3.4em; + border: 0.5vh solid var(--mainSiteColor); +} + +#login input[type="submit"], +#userInfo input[type="submit"], +#mission input[type="submit"], +#search input[type="submit"], +#delete input[type="submit"], +#register input[type="submit"] { + font-size: 17px; + font-weight: bold; + height: 2.5em; + border: 0.15em solid var(--mainSiteColor); + background-color: var(--bg); + border-radius: 3px; + padding: 0% 0.7em; +} + +#login input[type="submit"]:hover, +#userInfo input[type="submit"]:hover, +#mission input[type="submit"]:hover, +#search input[type="submit"]:hover, +#delete input[type="submit"]:hover, +#register input[type="submit"]:hover { + cursor: pointer; + color: var(--bg); + background-color: var(--btnHoverBg); +} + +#message p { + font-size: 20px; +} +/* FIN GLOBAL */ + +/* FOOTER */ +#footer { + min-height: 10vh; + display: flex; + flex-direction: column; + text-align: center; + color: var(--footerText); + background-color: var(--footerBg); +} +/* FIN FOOTER */ diff --git a/Statics/Fonts/Flags/flags.png b/Statics/Fonts/Flags/flags.png new file mode 100644 index 0000000..cdd33c3 Binary files /dev/null and b/Statics/Fonts/Flags/flags.png differ diff --git a/Statics/Fonts/Fontsawesome/fa-brands-400.eot b/Statics/Fonts/Fontsawesome/fa-brands-400.eot new file mode 100644 index 0000000..cba6c6c Binary files /dev/null and b/Statics/Fonts/Fontsawesome/fa-brands-400.eot differ diff --git a/Statics/Fonts/Fontsawesome/fa-brands-400.svg b/Statics/Fonts/Fontsawesome/fa-brands-400.svg new file mode 100644 index 0000000..b9881a4 --- /dev/null +++ b/Statics/Fonts/Fontsawesome/fa-brands-400.svg @@ -0,0 +1,3717 @@ + + + + +Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Statics/Fonts/Fontsawesome/fa-brands-400.ttf b/Statics/Fonts/Fontsawesome/fa-brands-400.ttf new file mode 100644 index 0000000..8d75ded Binary files /dev/null and b/Statics/Fonts/Fontsawesome/fa-brands-400.ttf differ diff --git a/Statics/Fonts/Fontsawesome/fa-brands-400.woff b/Statics/Fonts/Fontsawesome/fa-brands-400.woff new file mode 100644 index 0000000..3375bef Binary files /dev/null and b/Statics/Fonts/Fontsawesome/fa-brands-400.woff differ diff --git a/Statics/Fonts/Fontsawesome/fa-brands-400.woff2 b/Statics/Fonts/Fontsawesome/fa-brands-400.woff2 new file mode 100644 index 0000000..402f81c Binary files /dev/null and b/Statics/Fonts/Fontsawesome/fa-brands-400.woff2 differ diff --git a/Statics/Fonts/Fontsawesome/fa-regular-400.eot b/Statics/Fonts/Fontsawesome/fa-regular-400.eot new file mode 100644 index 0000000..a4e5989 Binary files /dev/null and b/Statics/Fonts/Fontsawesome/fa-regular-400.eot differ diff --git a/Statics/Fonts/Fontsawesome/fa-regular-400.svg b/Statics/Fonts/Fontsawesome/fa-regular-400.svg new file mode 100644 index 0000000..463af27 --- /dev/null +++ b/Statics/Fonts/Fontsawesome/fa-regular-400.svg @@ -0,0 +1,801 @@ + + + + +Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Statics/Fonts/Fontsawesome/fa-regular-400.ttf b/Statics/Fonts/Fontsawesome/fa-regular-400.ttf new file mode 100644 index 0000000..7157aaf Binary files /dev/null and b/Statics/Fonts/Fontsawesome/fa-regular-400.ttf differ diff --git a/Statics/Fonts/Fontsawesome/fa-regular-400.woff b/Statics/Fonts/Fontsawesome/fa-regular-400.woff new file mode 100644 index 0000000..ad077c6 Binary files /dev/null and b/Statics/Fonts/Fontsawesome/fa-regular-400.woff differ diff --git a/Statics/Fonts/Fontsawesome/fa-regular-400.woff2 b/Statics/Fonts/Fontsawesome/fa-regular-400.woff2 new file mode 100644 index 0000000..5632894 Binary files /dev/null and b/Statics/Fonts/Fontsawesome/fa-regular-400.woff2 differ diff --git a/Statics/Fonts/Fontsawesome/fa-solid-900.eot b/Statics/Fonts/Fontsawesome/fa-solid-900.eot new file mode 100644 index 0000000..e994171 Binary files /dev/null and b/Statics/Fonts/Fontsawesome/fa-solid-900.eot differ diff --git a/Statics/Fonts/Fontsawesome/fa-solid-900.svg b/Statics/Fonts/Fontsawesome/fa-solid-900.svg new file mode 100644 index 0000000..00296e9 --- /dev/null +++ b/Statics/Fonts/Fontsawesome/fa-solid-900.svg @@ -0,0 +1,5034 @@ + + + + +Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Statics/Fonts/Fontsawesome/fa-solid-900.ttf b/Statics/Fonts/Fontsawesome/fa-solid-900.ttf new file mode 100644 index 0000000..25abf38 Binary files /dev/null and b/Statics/Fonts/Fontsawesome/fa-solid-900.ttf differ diff --git a/Statics/Fonts/Fontsawesome/fa-solid-900.woff b/Statics/Fonts/Fontsawesome/fa-solid-900.woff new file mode 100644 index 0000000..23ee663 Binary files /dev/null and b/Statics/Fonts/Fontsawesome/fa-solid-900.woff differ diff --git a/Statics/Fonts/Fontsawesome/fa-solid-900.woff2 b/Statics/Fonts/Fontsawesome/fa-solid-900.woff2 new file mode 100644 index 0000000..2217164 Binary files /dev/null and b/Statics/Fonts/Fontsawesome/fa-solid-900.woff2 differ diff --git a/Statics/Fonts/SourceSansPro.ttf b/Statics/Fonts/SourceSansPro.ttf new file mode 100644 index 0000000..ffe2786 Binary files /dev/null and b/Statics/Fonts/SourceSansPro.ttf differ diff --git a/Statics/Fonts/akira.otf b/Statics/Fonts/akira.otf new file mode 100644 index 0000000..c75fdb3 Binary files /dev/null and b/Statics/Fonts/akira.otf differ diff --git a/Statics/Js/main.js b/Statics/Js/main.js new file mode 100644 index 0000000..120bfb3 --- /dev/null +++ b/Statics/Js/main.js @@ -0,0 +1,61 @@ +// +// Site web utilisés pour JS: +// https://www.w3schools.com/js/default.asp +// https://stackoverflow.com/ +// + +// Changement de langue +document.getElementById("langSel").addEventListener("change", () => { + document.getElementById("langForm").submit(); +}); + +// Redirection +function redirect(page) { + window.location.href = `${page}.php`; +} + +// Timer pour message +function start_timer() { + // var -> global, let -> local{} + let seconds = 3; + let text = document.getElementById("redirect").innerHTML; + setInterval(() => { + if (seconds > 0) { + document.getElementById("redirect").innerHTML = `${text} ${seconds}.`; + seconds --; + } else { + document.getElementById("redirect").innerHTML = `${text} ${seconds}.`; + redirect("/index"); + } + }, + 1000); +} + +// Slideshow +function start_slideshow() { + let imageNumber = 1; + let images = [ + "/Medias/Images/slide0.jpg", + "/Medias/Images/slide1.jpg", + "/Medias/Images/slide2.jpg" + ]; + + setInterval(() => { + // Changement del'image de fond de de la div + document.getElementById("slideshow").style.backgroundImage = `url("${images[imageNumber]}")`; + // Untoggle les précedents + // Utilisation de ternary, utilisation: condition ? Sivrai : Sifaux + document.getElementById(`textSlide${imageNumber !== 0 ? imageNumber - 1 : images.length - 1}`).classList.toggle("show"); + document.getElementById(`indicatorSlide${imageNumber !== 0 ? imageNumber - 1 : images.length - 1}`).classList.toggle("slideSelected"); + // Toggle le nouveau texte & selecteur + document.getElementById(`textSlide${imageNumber}`).classList.toggle("show"); + document.getElementById(`indicatorSlide${imageNumber}`).classList.toggle("slideSelected") + // +1 sauf si fin + if(imageNumber < images.length - 1) { + imageNumber++; + } else { + imageNumber = 0; + } + } + ,5000); +} diff --git a/Views/Includes/en/message.php b/Views/Includes/en/message.php new file mode 100644 index 0000000..4303907 --- /dev/null +++ b/Views/Includes/en/message.php @@ -0,0 +1,77 @@ + true, + "title" => "Delete an user.", + "info" => "User deleted !", + "timer" => true], + // 1 Message échec + ["success" => false, + "title" => "Delete an user.", + "info" => "No user was deleted.", + "timer" => true], + // Informations de l'utilisateur + // 2 Message réussitee + ["success" => true, + "title" => "Update user information.", + "info" => "User informations updated !", + "timer" => true], + // Login sans cookie + // 3 Message réussitee + ["success" => true, + "title" => "Login.", + "info" => "Successfully logged in!", + "timer" => true], + // 4 Message échec + ["success" => false, + "title" => "Login.", + "info" => "Error bad credentials.", + "timer" => true], + // Login avec cookie + // 5 Message réussitee + ["success" => true, + "title" => "", + "info" => "", + "timer" => false], + // 6 Message échec + ["success" => false, + "title" => "Login cookie.", + "info" => "Error with the cookie auto-login.", + "timer" => true], + // Log out + // 7 Message global + ["success" => true, + "title" => "Log out.", + "info" => "Successefuly logged out!", + "timer" => true], + // Ajout mission + // 8 Message réussitee + ["success" => true, + "title" => "Register a mission.", + "info" => "Mission registered !", + "timer" => true], + // 9 Message échec + ["success" => false, + "title" => "Register a mission.", + "info" => "Error, probably wrong consultant ID.", + "timer" => true], + // Ajout utilisateur + // 10 Message réussitee + ["success" => true, + "title" => "Register an user.", + "info" => "User successfully registered !", + "timer" => true], + // 11 Message échec + ["success" => false, + "title" => "Register an user.", + "info" => "Error, user not registered.", + "timer" => true], +]; +?> \ No newline at end of file diff --git a/Views/Includes/en/table.php b/Views/Includes/en/table.php new file mode 100644 index 0000000..1ce9816 --- /dev/null +++ b/Views/Includes/en/table.php @@ -0,0 +1,46 @@ + \ No newline at end of file diff --git a/Views/Includes/en/text.php b/Views/Includes/en/text.php new file mode 100644 index 0000000..872ca62 --- /dev/null +++ b/Views/Includes/en/text.php @@ -0,0 +1,80 @@ + [ + "h2" => "Delete an user", + "id" => "ID to delete", + "submit" => "Delete", + ], + "incl_footer" => [ + "main" => "Made by Debulois Quentin for my professional folder.
December 2021, all rights reserved.", + ], + "incl_userInfo_form" => [ + "h2" => "Informations about the user.", + "lastname" => "Last name", + "firstname" => "First name", + "job" => "Job", + "degree" => "Degree", + "capability" => "Capacities", + "description" => "Descriptions", + "phoneNumber" => "Phone number", + "adress" => "Adress", + "zipCode" => "Zip code", + "city" => "City", + "submit" => "Modify" + ], + "incl_login_form" => [ + "h2" => "Login", + "email" => "Email", + "password" => "Password", + "rememberMe" => "Remember me", + "submit" => "Sign-in" + ], + "incl_mission_form" => [ + "h2" => "Form to register a mission", + "subject" => "Subject", + "review" => "Review", + "consultantId" => "Consultant ID", + "submit" => "Register" + ], + "incl_myMission_table" => [ + "h2" => "My missions" + ], + "incl_navbar" => [ + "h2" => "AlphaJob", + "btnSearch" => "Search", + "btnInfos" => "Modif. infos", + "btnMission" => "Register mission", + "btnMyMission" => "My missions", + "btnDelete" => "Delete an user", + "btnLogin" => "Sign-in", + "btnLogout" => "Loggout", + "btnRegister" => "Sign-up", + "lang" => "Language", + "btnLang" => "Select" + ], + "incl_register_form" => [ + "h2" => "Form to sign-in", + "email" => "Email", + "password" => "Password", + "notice" => "For the purpose of the exam only:", + "isUser" => "Is user?", + "isConsultant" => "Is consultant?", + "isAdmin" => "Is admin?", + "submit" => "Sign-up" + ], + "incl_index_search" => [ + "h2" => "Search by lastname", + "searchBar" => "Lastname", + "submit" => "Search", + "moreInfo" => "More info" + ], + "incl_index_slideshow" => [ + "slide1" => "Find the right consultant for you.

For all your needs.

AlphaJob", + "slide2" => "Only the bests proffessionals can register!

Quality of work guarantee!

AlphaJob", + "slide3" => "Find the bests offers for your website today.

Discover our ready to use solutions.

AlphaJob" + ] +]; +?> \ No newline at end of file diff --git a/Views/Includes/en/title.php b/Views/Includes/en/title.php new file mode 100644 index 0000000..3655a7a --- /dev/null +++ b/Views/Includes/en/title.php @@ -0,0 +1,15 @@ + "AlphaJob - Index", + "login" => "AlphaJob - Login Page", + "message" => "AlphaJob - Message", + "mission" => "AlphaJob - Register a mission", + "myMission" => "AlphaJob - My missions", + "register" => "AlphaJob - Register an user", + "userInfo" => "AlphaJob - My user information", + "delete" => "AlphaJob - Delete an user" +]; +?> \ No newline at end of file diff --git a/Views/Includes/fr/message.php b/Views/Includes/fr/message.php new file mode 100644 index 0000000..0066cb5 --- /dev/null +++ b/Views/Includes/fr/message.php @@ -0,0 +1,77 @@ + true, + "title" => "Supprimer un utilisateur.", + "info" => "Utilisateur Supprimé !", + "timer" => true], + // 1 Message échec + ["success" => false, + "title" => "Supprimer un utilisateur.", + "info" => "Aucun utilisateur supprimé.", + "timer" => true], + // Informations de l'utilisateur + // 2 Message réussitee + ["success" => true, + "title" => "Modification des infos de l'utilisateur.", + "info" => "Informations mises à jour !", + "timer" => true], + // Login sans cookie + // 3 Message réussitee + ["success" => true, + "title" => "Connection.", + "info" => "Connection réussie !", + "timer" => true], + // 4 Message échec + ["success" => false, + "title" => "Connection.", + "info" => "Erreur, mauvais email / mot de passe.", + "timer" => true], + // Login avec cookie + // 5 Message réussitee + ["success" => true, + "title" => "", + "info" => "", + "timer" => false], + // 6 Message échec + ["success" => false, + "title" => "Connection avec cookie.", + "info" => "Erreur lors de la connection automatique.", + "timer" => true], + // Log out + // 7 Message global + ["success" => true, + "title" => "Déconnection.", + "info" => "Vous êtes déconnecté!", + "timer" => true], + // Ajout mission + // 8 Message réussitee + ["success" => true, + "title" => "Enregistrement d'une mission.", + "info" => "Mission enregistrée !", + "timer" => true], + // 9 Message échec + ["success" => false, + "title" => "Enregistrement d'une mission.", + "info" => "Erreur, l'ID du consultant est probablement faux.", + "timer" => true], + // Ajout utilisateur + // 10 Message réussitee + ["success" => true, + "title" => "Inscription", + "info" => "Utilisateur inscrit !", + "timer" => true], + // 11 Message échec + ["success" => false, + "title" => "Inscription.", + "info" => "Erreur, utilisateur non enregistré.", + "timer" => true], +]; +?> \ No newline at end of file diff --git a/Views/Includes/fr/table.php b/Views/Includes/fr/table.php new file mode 100644 index 0000000..2eeb389 --- /dev/null +++ b/Views/Includes/fr/table.php @@ -0,0 +1,46 @@ + \ No newline at end of file diff --git a/Views/Includes/fr/text.php b/Views/Includes/fr/text.php new file mode 100644 index 0000000..7820ea3 --- /dev/null +++ b/Views/Includes/fr/text.php @@ -0,0 +1,80 @@ + [ + "h2" => "Supprimer un utilisateur", + "id" => "ID à supprimer", + "submit" => "Supprimer", + ], + "incl_footer" => [ + "main" => "Réalisé par Debulois Quentin pour mon dossier professionel.
Decembre 2021, tous droits réservés.", + ], + "incl_userInfo_form" => [ + "h2" => "Informations sur l'utilisateur.", + "lastname" => "Nom", + "firstname" => "Prénom", + "job" => "Emploi", + "degree" => "Diplômes", + "capability" => "Capacités", + "description" => "Description", + "phoneNumber" => "Numéro de télephone", + "adress" => "Adresse", + "zipCode" => "Code postal", + "city" => "Ville", + "submit" => "Modifier" + ], + "incl_login_form" => [ + "h2" => "Identification", + "email" => "Email", + "password" => "Mot de passe", + "rememberMe" => "Se souvenir de moi", + "submit" => "Connection" + ], + "incl_mission_form" => [ + "h2" => "Formulaire pour enregistrer une mission", + "subject" => "Sujet", + "review" => "Commentaire", + "consultantId" => "ID du consultant", + "submit" => "Enregistrer" + ], + "incl_myMission_table" => [ + "h2" => "Mes missions" + ], + "incl_navbar" => [ + "h2" => "AlphaJob", + "btnSearch" => "Rechercher", + "btnInfos" => "Modif. infos", + "btnMission" => "Enreg. mission", + "btnMyMission" => "Mes missions", + "btnDelete" => "Suppr. utilisateur", + "btnLogin" => "Connection", + "btnLogout" => "Déconnection", + "btnRegister" => "Inscription", + "lang" => "Langue", + "btnLang" => "Sélectionner" + ], + "incl_register_form" => [ + "h2" => "Formulaire d'inscription", + "email" => "Email", + "password" => "Mot de passe", + "notice" => "Pour les besoins de l'examen seulement:", + "isUser" => "Est utilisateur?", + "isConsultant" => "Est consultant?", + "isAdmin" => "Est admin?", + "submit" => "S'inscrire" + ], + "incl_index_search" => [ + "h2" => "Recherche de consultant par nom", + "searchBar" => "Nom", + "submit" => "Rechercher", + "moreInfo" => "Plus d'infos" + ], + "incl_index_slideshow" => [ + "slide1" => "Trouvez le consultant idéal proche de chez vous.

Pour tous vos besoins.

AlphaJob", + "slide2" => "Seuls les meilleurs professionnels sont acceptés.

Qualité guarantie.

AlphaJob", + "slide3" => "Les meilleurs offres pour créer votre site Web.

Découvrez nos solutions clefs en main.

AlphaJob" + ] +]; +?> \ No newline at end of file diff --git a/Views/Includes/fr/title.php b/Views/Includes/fr/title.php new file mode 100644 index 0000000..f0537b2 --- /dev/null +++ b/Views/Includes/fr/title.php @@ -0,0 +1,15 @@ + "AlphaJob - Index", + "login" => "AlphaJob - Connection", + "message" => "AlphaJob - Message", + "mission" => "AlphaJob - Enregistrer une mission", + "myMission" => "AlphaJob - Mes missions", + "register" => "AlphaJob - Inscription", + "userInfo" => "AlphaJob - Mes informations", + "delete" => "AlphaJob - Supprimer un utilisateur" +]; +?> \ No newline at end of file diff --git a/Views/Includes/incl_delete_form.php b/Views/Includes/incl_delete_form.php new file mode 100644 index 0000000..bc1dc80 --- /dev/null +++ b/Views/Includes/incl_delete_form.php @@ -0,0 +1,60 @@ + +
+ +
+

'.$text[basename(__FILE__, ".php")]["h2"].'

+
+ + +
'.PHP_EOL); +// Récupération de tous les utilisateurs. +$result = $dbsearch->search_all(); +// Affichage de la table. +echo(" + + + ".PHP_EOL); +// Affichage des en-tête de colonne. +foreach($header[0] as $header) { + echo(" ".PHP_EOL); +} +echo(" ".PHP_EOL); +// Affichage du résultat de la recherche. +foreach ($result as $rows) { + echo(" + ".PHP_EOL); + foreach ($rows as $key => $value) { + // Traduction du résultat si reponse binaire en Oui / Non. + if (($key == "isUser" || $key == "isConsultant" || $key == "isAdmin") && $value == "1") { + echo(" ".PHP_EOL); + } elseif (($key == "isUser" || $key == "isConsultant" || $key == "isAdmin") && $value == "0") { + echo(" ".PHP_EOL); + } else { + echo(" ".PHP_EOL); + } + } + echo(" ".PHP_EOL); +} +echo('
".$header."
".$yes."
".$no."
".$value."
+ +
+
'.PHP_EOL); + +?> \ No newline at end of file diff --git a/Views/Includes/incl_footer.php b/Views/Includes/incl_footer.php new file mode 100644 index 0000000..6aa4014 --- /dev/null +++ b/Views/Includes/incl_footer.php @@ -0,0 +1,13 @@ + +
+ + '.PHP_EOL) +?> \ No newline at end of file diff --git a/Views/Includes/incl_header.php b/Views/Includes/incl_header.php new file mode 100644 index 0000000..060340c --- /dev/null +++ b/Views/Includes/incl_header.php @@ -0,0 +1,15 @@ + + + + + + + + + +'); +?> \ No newline at end of file diff --git a/Views/Includes/incl_index_search.php b/Views/Includes/incl_index_search.php new file mode 100644 index 0000000..df6372a --- /dev/null +++ b/Views/Includes/incl_index_search.php @@ -0,0 +1,87 @@ + +
+ '); +// On supprime la variable de recherche si elle existe. +unset($_SESSION["search"]); +?> \ No newline at end of file diff --git a/Views/Includes/incl_index_slideshow.php b/Views/Includes/incl_index_slideshow.php new file mode 100644 index 0000000..d632bbc --- /dev/null +++ b/Views/Includes/incl_index_slideshow.php @@ -0,0 +1,21 @@ + +
+ +
+

'.$text[basename(__FILE__, ".php")]["slide1"].'

+

'.$text[basename(__FILE__, ".php")]["slide2"].'

+

'.$text[basename(__FILE__, ".php")]["slide3"].'

+ +
+ + + +
+
'.PHP_EOL); +?> \ No newline at end of file diff --git a/Views/Includes/incl_login_form.php b/Views/Includes/incl_login_form.php new file mode 100644 index 0000000..5f76160 --- /dev/null +++ b/Views/Includes/incl_login_form.php @@ -0,0 +1,26 @@ + +
+

'.$text[basename(__FILE__, ".php")]["h2"].'

+
+ + + + +
+
'.PHP_EOL) +?> \ No newline at end of file diff --git a/Views/Includes/incl_message.php b/Views/Includes/incl_message.php new file mode 100644 index 0000000..b4b653d --- /dev/null +++ b/Views/Includes/incl_message.php @@ -0,0 +1,22 @@ +'); +echo('

'.$message[$_SESSION["messageNumber"]]["title"].'

'); +if ($message[$_SESSION["messageNumber"]]["success"]) { + echo('

'.$success.'

'); +} else { + echo('

'.$error.'

'); +} +echo("

".$message[$_SESSION["messageNumber"]]["info"]."

"); +echo('

'.$redirect.'

'); +echo(''); +if ($message[$_SESSION["messageNumber"]]["timer"]) { + echo(''); +} else { + echo(''); +} +?> \ No newline at end of file diff --git a/Views/Includes/incl_mission_form.php b/Views/Includes/incl_mission_form.php new file mode 100644 index 0000000..2fed999 --- /dev/null +++ b/Views/Includes/incl_mission_form.php @@ -0,0 +1,38 @@ + +
+

'.$text[basename(__FILE__, ".php")]["h2"].'

+
+ + + + + +
+
'.PHP_EOL); +?> \ No newline at end of file diff --git a/Views/Includes/incl_myMission_table.php b/Views/Includes/incl_myMission_table.php new file mode 100644 index 0000000..9a50f5c --- /dev/null +++ b/Views/Includes/incl_myMission_table.php @@ -0,0 +1,39 @@ +get_all_mission_by_id($_SESSION["id"]); +echo(' +
+ +
+

'.$text[basename(__FILE__, ".php")]["h2"].'

+ + + '.PHP_EOL); +foreach($header[3] as $header) { + echo(" ".PHP_EOL); +} +echo(" ".PHP_EOL); +foreach ($result as $rows) { + echo(" + ".PHP_EOL); + foreach ($rows as $value) { + echo(" ".PHP_EOL); + } + echo(" ".PHP_EOL); +} +echo('
".$header."
".$value."
+ +
+
'.PHP_EOL); +?> \ No newline at end of file diff --git a/Views/Includes/incl_navbar.php b/Views/Includes/incl_navbar.php new file mode 100644 index 0000000..178f2e6 --- /dev/null +++ b/Views/Includes/incl_navbar.php @@ -0,0 +1,59 @@ + + '.PHP_EOL); +?> \ No newline at end of file diff --git a/Views/Includes/incl_register_form.php b/Views/Includes/incl_register_form.php new file mode 100644 index 0000000..d95f552 --- /dev/null +++ b/Views/Includes/incl_register_form.php @@ -0,0 +1,28 @@ + +
+ +
+

'.$text[basename(__FILE__, ".php")]["h2"].'

+
+ + + + + + + +
+
'.PHP_EOL); +?> \ No newline at end of file diff --git a/Views/Includes/incl_userInfo_form.php b/Views/Includes/incl_userInfo_form.php new file mode 100644 index 0000000..200a3f5 --- /dev/null +++ b/Views/Includes/incl_userInfo_form.php @@ -0,0 +1,76 @@ +get_user_info_by_id($_SESSION["id"]); +if (!$info) { + $info = [ + ["lastname" => "", + "firstname" => "", + "job" => "", + "degree" => "", + "capability" => "", + "description" => "", + "phoneNumber" => "", + "adress" => "", + "zipCode" => "", + "city" => ""] + ]; +} +echo(' +
+ +
+

'.$text[basename(__FILE__, ".php")]["h2"].'

+
+ + + + + + + + + + + +
+
') +?> \ No newline at end of file diff --git a/Views/autoLogin.php b/Views/autoLogin.php new file mode 100644 index 0000000..f52f660 --- /dev/null +++ b/Views/autoLogin.php @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/Views/delete.php b/Views/delete.php new file mode 100644 index 0000000..af7c286 --- /dev/null +++ b/Views/delete.php @@ -0,0 +1,35 @@ + + +'.PHP_EOL); ?> + + + +".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> + + + + + + + + \ No newline at end of file diff --git a/Views/login.php b/Views/login.php new file mode 100644 index 0000000..19b1a3c --- /dev/null +++ b/Views/login.php @@ -0,0 +1,26 @@ + + +'.PHP_EOL); ?> + + + +".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> + + + + + + + + \ No newline at end of file diff --git a/Views/logout.php b/Views/logout.php new file mode 100644 index 0000000..c493bd5 --- /dev/null +++ b/Views/logout.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/Views/message.php b/Views/message.php new file mode 100644 index 0000000..fa90ccd --- /dev/null +++ b/Views/message.php @@ -0,0 +1,29 @@ + + +'.PHP_EOL); ?> + + + +".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> + + + + + + + + diff --git a/Views/mission.php b/Views/mission.php new file mode 100644 index 0000000..e1dc2ef --- /dev/null +++ b/Views/mission.php @@ -0,0 +1,34 @@ + + +'.PHP_EOL); ?> + + + +".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> + + + + + + + + \ No newline at end of file diff --git a/Views/myMission.php b/Views/myMission.php new file mode 100644 index 0000000..0c9b6a7 --- /dev/null +++ b/Views/myMission.php @@ -0,0 +1,34 @@ + + +'.PHP_EOL); ?> + + + +".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> + + + + + + + + \ No newline at end of file diff --git a/Views/register.php b/Views/register.php new file mode 100644 index 0000000..3b0605c --- /dev/null +++ b/Views/register.php @@ -0,0 +1,26 @@ + + +'.PHP_EOL); ?> + + + +".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> + + + + + + + + \ No newline at end of file diff --git a/Views/userInfo.php b/Views/userInfo.php new file mode 100644 index 0000000..c4e9f8b --- /dev/null +++ b/Views/userInfo.php @@ -0,0 +1,32 @@ + + +'.PHP_EOL); ?> + + + +".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> + + + + + + + + \ No newline at end of file diff --git a/Wrapper/Functions/func_delete.php b/Wrapper/Functions/func_delete.php new file mode 100644 index 0000000..291704d --- /dev/null +++ b/Wrapper/Functions/func_delete.php @@ -0,0 +1,19 @@ +del_user($id); + // Sélection du message à affiché en fonction de réussite ou pas. + if ($deleted) { + $messageNumber = 0; + } else { + $messageNumber = 1; + } + // Redirection vers message avec l'index du message à afficher. + $_SESSION["messageNumber"] = $messageNumber; + header("Location: /Views/message.php"); + die(); +} +?> \ No newline at end of file diff --git a/Wrapper/Functions/func_info.php b/Wrapper/Functions/func_info.php new file mode 100644 index 0000000..d883d86 --- /dev/null +++ b/Wrapper/Functions/func_info.php @@ -0,0 +1,18 @@ +update_user_info($lastname, $firstname, $job, $degree, + $capabilty, $description, $phoneNumber, + $adress, $zipCode, $city, $userId); + // Redirection vers message avec l'index du message à afficher. + $messageNumber = 2; + $_SESSION["messageNumber"] = $messageNumber; + header("Location: /Views/message.php"); + die(); +} +?> \ No newline at end of file diff --git a/Wrapper/Functions/func_language.php b/Wrapper/Functions/func_language.php new file mode 100644 index 0000000..ae54da0 --- /dev/null +++ b/Wrapper/Functions/func_language.php @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/Wrapper/Functions/func_login.php b/Wrapper/Functions/func_login.php new file mode 100644 index 0000000..bb670ba --- /dev/null +++ b/Wrapper/Functions/func_login.php @@ -0,0 +1,68 @@ +check_credential($email, $pass); + // ou par cookie. + } else { + // On essaie une fois. + $userId = $dbuser->check_token_autologin($cookie[0], $cookie[1]); + // Et on le supprime. + $dbuser->delete_token_autologin($cookie[0]); + } + // Si on a un résultat valide. + if ($userId) { + $dbsearch = new DbSearch; + // LoggedIn devien "true". + $_SESSION["loggedIn"] = "1"; + // et on remplie les variables de la session avec les infos de l'utilisateur. + $userInfo = $dbsearch->search_user_by_id($userId); + foreach ($userInfo as $key => $value) { + $_SESSION[$key] = $value; + } + // Si était coché remember me ou que la connection s'est faite via cookie, + // on en génère un nouveau. + if ($remember || $cookie) { + $name = "autoLogin"; + // On génère une chaine de caractère aléatoire en supprimant les caractères spéciaux de base64. + $token = str_replace(["+", "/", "="], "", base64_encode(random_bytes(32))); + // On update le nouveau token. + $dbuser->update_token_autologin($_SESSION["email"], $token); + // Enfin on place l'ensemble sur le navigateur du client codé en base64. + setcookie($name, + base64_encode(json_encode(array($_SESSION["email"], $token))), + time() + (86400 * 7), + "/" + ); + } + // On sélectionne le bon message en fonction du type de connection. + if (!$cookie) { + $messageNumber = 3; + } else { + $messageNumber = 5; + } + } else { + // Si la connection a échoué. + if (!$cookie) { + $messageNumber = 4; + // Si la connection à échoué par cookie. + } else { + // Suppression du cookie. + unset($_COOKIE["autoLogin"]); + setcookie("autoLogin", "", time() - 3600, "/"); + $messageNumber = 6; + } + } + // On redirige vers message. + $_SESSION["messageNumber"] = $messageNumber; + header("Location: /Views/message.php"); + die(); +} +?> \ No newline at end of file diff --git a/Wrapper/Functions/func_logout.php b/Wrapper/Functions/func_logout.php new file mode 100644 index 0000000..20de5a3 --- /dev/null +++ b/Wrapper/Functions/func_logout.php @@ -0,0 +1,30 @@ +delete_token_autologin($_SESSION["email"]); + // Et le cookie + if (isset($_COOKIE["autoLogin"])) { + unset($_COOKIE["autoLogin"]); + setcookie("autoLogin", "", time() - 3600, "/"); + } + // On détruit la session. + session_destroy(); + // Et on en redémarre une nouvelle. + session_start(); + $_SESSION["loggedIn"] = "0"; + $_SESSION["lang"] = $lang; + // Enfin on redirige avec le bon message. + $messageNumber = 7; + $_SESSION["messageNumber"] = $messageNumber; + header("Location: /Views/message.php"); + die(); +} +?> \ No newline at end of file diff --git a/Wrapper/Functions/func_mission.php b/Wrapper/Functions/func_mission.php new file mode 100644 index 0000000..8c2d90c --- /dev/null +++ b/Wrapper/Functions/func_mission.php @@ -0,0 +1,24 @@ +register_mission($subject, + $note, + $review, + $userId, + $consultantId + ); + // Sélection du message à afficher en fonction de réussite ou pas. + if ($registered) { + $messageNumber = 8; + } else { + $messageNumber = 9; + } + // Redirection vers message avec l'index du message à afficher. + $_SESSION["messageNumber"] = $messageNumber; + header("Location: /Views/message.php"); + die(); +} +?> \ No newline at end of file diff --git a/Wrapper/Functions/func_register.php b/Wrapper/Functions/func_register.php new file mode 100644 index 0000000..99741a3 --- /dev/null +++ b/Wrapper/Functions/func_register.php @@ -0,0 +1,24 @@ +add_user($email, + $password, + $is_admin, + $is_user, + $is_consultant + ); + // Sélection du message à afficher en fonction de la réussite de l'inscription. + if ($registered) { + $messageNumber = 10; + } else { + $messageNumber = 11; + } + // Redirection vers message avec l'index du message à afficher. + $_SESSION["messageNumber"] = $messageNumber; + header("Location: /Views/message.php"); + die(); +} +?> \ No newline at end of file diff --git a/Wrapper/Functions/func_sanitize.php b/Wrapper/Functions/func_sanitize.php new file mode 100644 index 0000000..2821413 --- /dev/null +++ b/Wrapper/Functions/func_sanitize.php @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/Wrapper/Functions/func_search.php b/Wrapper/Functions/func_search.php new file mode 100644 index 0000000..3c85eab --- /dev/null +++ b/Wrapper/Functions/func_search.php @@ -0,0 +1,52 @@ +search_consultant_by_name($request); + // Pour chaque utilisateur avec un nom qui "match". + foreach ($result as $key => $value) { + // récupération du nombre de mission effectué. + $numberMission = $dbsearch->count_consultant_mission_by_name($value["lastname"]); + $result[$key]["numberOfMissions"] = $numberMission[0]["COUNT(*)"]; + // récupération des notes de l'utilisateur. + $allNotes = $dbsearch->get_consultant_note_by_name($value["lastname"]); + // Pour chaque note on la "push" (ajoute) dans une liste. + $notes = array(); + foreach ($allNotes as $value) { + array_push($notes, $value["note"]); + } + // On fait la moyenne des notes, + // et pour les étoiles on "coupe" tout ce qui est après la virgule. + // J'ai préféré ce système à un "round()" + if ($notes) { + $average = array_sum($notes) / count($notes); + $result[$key]["note"] = round($average, 2); + $result[$key]["star"] = (int)$average; + // Si il n'y a pas encore de note. + } else { + $result[$key]["note"] = 0; + $result[$key]["star"] = 0; + } + } + // Si c'est "plus d'info" et non une recherche. + } else { + $result = $dbsearch->get_user_info_by_id($request); + } + // Redirection vers l'index avec le "payload" (contenu) en fonction du type de recherche. + $search = array( + "result" => $result, + "isResearch" => true + ); + if (!$isResearch) { + $search["isResearch"] = false; + } + $_SESSION["search"] = $search; + header("Location: /index.php#separator2"); + die(); +} +?> \ No newline at end of file diff --git a/Wrapper/wrapper.php b/Wrapper/wrapper.php new file mode 100644 index 0000000..2bdcf32 --- /dev/null +++ b/Wrapper/wrapper.php @@ -0,0 +1,148 @@ + $value) { + if ($key !== "password") { + $_POST[$key] = sanitize($value); + } + } + } + // Ensuite on redirige en fonction de la varaible "src" de la session + // et on vérifie que la data nécessaire est bien présente. + // Sinon: raise 404 + if ($_SESSION["src"] == "login" + && isset($_POST["email"], $_POST["password"]) + && $_POST["email"] !== "" + && $_POST["password"] !== "" + ) { + if (isset($_POST["rememberMe"]) && $_POST["rememberMe"] == "on") { + $_POST["rememberMe"] = true; + } else { + $_POST["rememberMe"] = false; + } + login(0, $_POST["email"], $_POST["password"], $_POST["rememberMe"]); + } elseif ($_SESSION["src"] == "autoLogin" + && isset($_COOKIE["autoLogin"]) + && $_SESSION["loggedIn"] == false + ) { + // Si connection par cookie, on le décode avant de le passer à la fonction. + login(json_decode(base64_decode($_COOKIE["autoLogin"]))); + } elseif ($_SESSION["src"] == "logout" + && isset($_SESSION["loggedIn"]) + && $_SESSION["loggedIn"] == true + ) { + logout(); + } elseif ($_SESSION["src"] == "register" + && isset($_POST["email"], + $_POST["password"] + ) + && $_POST["email"] !== "" + && $_POST["password"] !== "" + ) { + if (isset($_POST["is_admin"]) && $_POST["is_admin"] == "on") { + $_POST["is_admin"] = 1; + } else { + $_POST["is_admin"] = 0; + } + if (isset($_POST["is_user"]) && $_POST["is_user"] == "on") { + $_POST["is_user"] = 1; + } else { + $_POST["is_user"] = 0; + } + if (isset($_POST["is_consultant"]) && $_POST["is_consultant"] == "on") { + $_POST["is_consultant"] = 1; + } else { + $_POST["is_consultant"] = 0; + } + register($_POST["email"], + $_POST["password"], + $_POST["is_admin"], + $_POST["is_user"], + $_POST["is_consultant"] + ); + } elseif ($_SESSION["src"] == "userInfo" + && isset($_SESSION["loggedIn"], $_SESSION["id"], + $_POST["lastname"], $_POST["firstname"], $_POST["job"], + $_POST["degree"], $_POST["capability"], $_POST["description"], + $_POST["phoneNumber"], $_POST["adress"], $_POST["zipCode"], $_POST["city"] + ) + && $_SESSION["loggedIn"] == true && $_SESSION["id"] !== "" + && $_POST["lastname"] !== "" && $_POST["firstname"] !== "" + ) { + modify_user_info($_POST["lastname"], $_POST["firstname"], $_POST["job"], + $_POST["degree"], $_POST["capability"], $_POST["description"], + $_POST["phoneNumber"], $_POST["adress"], $_POST["zipCode"], + $_POST["city"], $_SESSION["id"] + ); + } elseif ($_SESSION["src"] == "delete" + && isset($_SESSION["loggedIn"], + $_SESSION["isAdmin"], + $_POST["id"] + ) + && $_SESSION["loggedIn"] == true + && $_SESSION["isAdmin"] == true + && $_POST["id"] !== "" + ) { + delete($_POST["id"]); + } elseif ($_SESSION["src"] == "mission" + && isset($_SESSION["loggedIn"], $_SESSION["isUser"], + $_POST["subject"], $_POST["note"], + $_POST["review"], $_POST["consultantId"] + ) + && $_SESSION["loggedIn"] == true + && $_SESSION["isUser"] == true + && $_POST["subject"] !== "" + && $_POST["note"] !== "" + && $_POST["review"] !== "" + && $_POST["consultantId"] !== "" + ) { + register_mission($_POST["subject"], + $_POST["note"], + $_POST["review"], + $_SESSION["id"], + $_POST["consultantId"] + ); + } elseif ($_SESSION["src"] == "index" + && (isset($_POST["search"]) && $_POST["search"] !== "") + || (isset($_POST["searchInfo"]) && $_POST["searchInfo"] !== "") + ) { + if (isset($_POST["search"])) { + search($_POST["search"], true); + } else { + search($_POST["searchInfo"], false); + } + } elseif (isset($_SESSION["src"], $_POST["langSel"]) + && ($_POST["langSel"] == "en" || $_POST["langSel"] == "fr") + ) { + set_language($_POST["langSel"]); + } else { + http_response_code(404); + die(); + } +} else { + http_response_code(404); + die(); +} +?> \ No newline at end of file diff --git a/index.php b/index.php new file mode 100644 index 0000000..1e732df --- /dev/null +++ b/index.php @@ -0,0 +1,50 @@ + + +'.PHP_EOL); ?> + + + +".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> + + + + + + + + + + + \ No newline at end of file -- cgit v1.2.3