From 3eaa8b0ff626858e42bdfaa04e0ed532ea3b0e36 Mon Sep 17 00:00:00 2001
From: "lucas.toniutti" <lucas.toniutti@etu.hesge.ch>
Date: Mon, 5 Jun 2023 17:25:17 +0200
Subject: [PATCH] Premier commit

---
 .DS_Store                                     |   Bin 0 -> 10244 bytes
 APIWrappers/.DS_Store                         |   Bin 0 -> 6148 bytes
 APIWrappers/ApiManagement.py                  |   241 +
 APIWrappers/ApiManagementWS.py                |    57 +
 APIWrappers/CryptoDatas.py                    |    63 +
 APIWrappers/__init__.py                       |     0
 .../__pycache__/ApiManagement.cpython-310.pyc |   Bin 0 -> 6530 bytes
 .../__pycache__/ApiManagement.cpython-39.pyc  |   Bin 0 -> 6438 bytes
 .../ApiManagementWS.cpython-310.pyc           |   Bin 0 -> 1569 bytes
 .../ApiManagementWS.cpython-39.pyc            |   Bin 0 -> 1497 bytes
 .../__pycache__/CryptoDatas.cpython-310.pyc   |   Bin 0 -> 1745 bytes
 .../__pycache__/CryptoDatas.cpython-39.pyc    |   Bin 0 -> 1673 bytes
 .../__pycache__/__init__.cpython-310.pyc      |   Bin 0 -> 212 bytes
 .../__pycache__/__init__.cpython-39.pyc       |   Bin 0 -> 144 bytes
 DBManagement/.DS_Store                        |   Bin 0 -> 6148 bytes
 DBManagement/DataManagement.py                |   177 +
 DBManagement/__init__.py                      |     0
 .../DataManagement.cpython-310.pyc            |   Bin 0 -> 4384 bytes
 .../__pycache__/DataManagement.cpython-39.pyc |   Bin 0 -> 4367 bytes
 .../__pycache__/__init__.cpython-310.pyc      |   Bin 0 -> 213 bytes
 .../__pycache__/__init__.cpython-39.pyc       |   Bin 0 -> 145 bytes
 README.md                                     |   160 +-
 __init__.py                                   |     0
 main/.DS_Store                                |   Bin 0 -> 8196 bytes
 main/Decision.py                              |   299 +
 main/__init__.py                              |     2 +
 main/__pycache__/Decision.cpython-310.pyc     |   Bin 0 -> 6570 bytes
 main/__pycache__/orders.cpython-310.pyc       |   Bin 0 -> 8758 bytes
 main/__pycache__/orders.cpython-39.pyc        |   Bin 0 -> 8680 bytes
 main/__pycache__/settings.cpython-310.pyc     |   Bin 0 -> 263 bytes
 main/__pycache__/simulation.cpython-310.pyc   |   Bin 0 -> 12511 bytes
 main/__pycache__/simulation.cpython-39.pyc    |   Bin 0 -> 12554 bytes
 main/backend.py                               |   397 +
 main/main.py                                  |     4 +
 main/orders.py                                |   360 +
 main/settings.py                              |     3 +
 main/simulation.py                            |   549 +
 main/static/.DS_Store                         |   Bin 0 -> 8196 bytes
 main/static/assets/favicon.ico                |   Bin 0 -> 23462 bytes
 main/static/css/styles.css                    | 10839 ++++++++++++++++
 main/static/css2/.DS_Store                    |   Bin 0 -> 6148 bytes
 main/static/css2/style.css                    |    20 +
 main/static/imgSimulation/simulation.png      |   Bin 0 -> 106346 bytes
 main/static/js/scripts.js                     |    34 +
 main/templates/.DS_Store                      |   Bin 0 -> 6148 bytes
 main/templates/assets/favicon.ico             |   Bin 0 -> 23462 bytes
 main/templates/base.html                      |    49 +
 main/templates/css/styles.css                 | 10839 ++++++++++++++++
 main/templates/index.html                     |   456 +
 main/templates/js/scripts.js                  |    34 +
 others/.DS_Store                              |   Bin 0 -> 6148 bytes
 others/FetchCrypto.py                         |   219 +
 others/ParserSimulationResult.py              |   133 +
 others/__init__.py                            |     0
 others/__pycache__/__init__.cpython-310.pyc   |   Bin 0 -> 207 bytes
 others/__pycache__/__init__.cpython-39.pyc    |   Bin 0 -> 139 bytes
 .../__pycache__/plotting_lib.cpython-310.pyc  |   Bin 0 -> 6512 bytes
 .../__pycache__/plotting_lib.cpython-39.pyc   |   Bin 0 -> 6428 bytes
 others/plotting_lib.py                        |   357 +
 others/profiling.py                           |    16 +
 others/volatility.py                          |    50 +
 61 files changed, 25275 insertions(+), 83 deletions(-)
 create mode 100644 .DS_Store
 create mode 100644 APIWrappers/.DS_Store
 create mode 100644 APIWrappers/ApiManagement.py
 create mode 100644 APIWrappers/ApiManagementWS.py
 create mode 100644 APIWrappers/CryptoDatas.py
 create mode 100644 APIWrappers/__init__.py
 create mode 100644 APIWrappers/__pycache__/ApiManagement.cpython-310.pyc
 create mode 100644 APIWrappers/__pycache__/ApiManagement.cpython-39.pyc
 create mode 100644 APIWrappers/__pycache__/ApiManagementWS.cpython-310.pyc
 create mode 100644 APIWrappers/__pycache__/ApiManagementWS.cpython-39.pyc
 create mode 100644 APIWrappers/__pycache__/CryptoDatas.cpython-310.pyc
 create mode 100644 APIWrappers/__pycache__/CryptoDatas.cpython-39.pyc
 create mode 100644 APIWrappers/__pycache__/__init__.cpython-310.pyc
 create mode 100644 APIWrappers/__pycache__/__init__.cpython-39.pyc
 create mode 100644 DBManagement/.DS_Store
 create mode 100644 DBManagement/DataManagement.py
 create mode 100644 DBManagement/__init__.py
 create mode 100644 DBManagement/__pycache__/DataManagement.cpython-310.pyc
 create mode 100644 DBManagement/__pycache__/DataManagement.cpython-39.pyc
 create mode 100644 DBManagement/__pycache__/__init__.cpython-310.pyc
 create mode 100644 DBManagement/__pycache__/__init__.cpython-39.pyc
 create mode 100644 __init__.py
 create mode 100644 main/.DS_Store
 create mode 100644 main/Decision.py
 create mode 100644 main/__init__.py
 create mode 100644 main/__pycache__/Decision.cpython-310.pyc
 create mode 100644 main/__pycache__/orders.cpython-310.pyc
 create mode 100644 main/__pycache__/orders.cpython-39.pyc
 create mode 100644 main/__pycache__/settings.cpython-310.pyc
 create mode 100644 main/__pycache__/simulation.cpython-310.pyc
 create mode 100644 main/__pycache__/simulation.cpython-39.pyc
 create mode 100644 main/backend.py
 create mode 100644 main/main.py
 create mode 100644 main/orders.py
 create mode 100644 main/settings.py
 create mode 100644 main/simulation.py
 create mode 100644 main/static/.DS_Store
 create mode 100644 main/static/assets/favicon.ico
 create mode 100644 main/static/css/styles.css
 create mode 100644 main/static/css2/.DS_Store
 create mode 100644 main/static/css2/style.css
 create mode 100644 main/static/imgSimulation/simulation.png
 create mode 100644 main/static/js/scripts.js
 create mode 100644 main/templates/.DS_Store
 create mode 100644 main/templates/assets/favicon.ico
 create mode 100644 main/templates/base.html
 create mode 100644 main/templates/css/styles.css
 create mode 100644 main/templates/index.html
 create mode 100644 main/templates/js/scripts.js
 create mode 100644 others/.DS_Store
 create mode 100644 others/FetchCrypto.py
 create mode 100644 others/ParserSimulationResult.py
 create mode 100644 others/__init__.py
 create mode 100644 others/__pycache__/__init__.cpython-310.pyc
 create mode 100644 others/__pycache__/__init__.cpython-39.pyc
 create mode 100644 others/__pycache__/plotting_lib.cpython-310.pyc
 create mode 100644 others/__pycache__/plotting_lib.cpython-39.pyc
 create mode 100644 others/plotting_lib.py
 create mode 100644 others/profiling.py
 create mode 100644 others/volatility.py

diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..6a9b1a70a6e2ac99bd5344b7fc2e139918171c75
GIT binary patch
literal 10244
zcmZQzU|@7AO)+F(P+(wS;9!8z0z3>@0Z1N%F(jFwBB~(s7#IW?7%~}37~&b?8T1$m
zpmL+sXb6mkz-S1JhQMeDjE2DA3IRrlb2zvm^e8zR0;3@?8UpYT0F@7*4g!dFfVA-$
z8Xz=Ch=GxT0o(;(WME){X<`KT0~kPZAgv%8q!mPiv@$S)SYR{2S{WFjS{cFJ5Rg6r
zuu+WQt_g?_*3Q5PwwZx}5o|L910zH`10&RCMraR(5u%-e5o|jH10zH`*vwI4Gz3ON
z05t?aeRpnfpFNWy52gQJ>6w$CoRpKF!~n_C>lqjr^!|eZ*a&V0M}`0fPlj-YB8EhU
z0)_&HRE8pkVpLs>vc&01Dlaa8+O;F8ASbi9#K7PhBNH<VD;qlpI|nyMY;Z<?d2mT$
zNolcDVo@}R7m}Z!lLTWYCWU3Dmd6W-IOpe;BxdHN7J-xmXQrekB^JemXXd5kmpkQ`
z=A{&a^+F{$I5{}u1thAgjSP%+6pRfGYjqT=EsYFx6im!aYHK+;M3wcegW|Jua`W=L
zz`lkTKn%PPKAh}kU|_%zCOPSb!O8i#&@qw8-*BtU&3AEuh64u!Lqp!lo+FO<RHu-j
zx*!9|6_9cghkMI{i}G^v^U}fPGy?+<gA0QbgD*oOLmopSLpnn$LoP!qLmop3T3mxd
z06B%=)HmR<ZE2ySU~FhgVQk~{A8LFDPG-OphNv;l;BGn{9OF36&do=TbHeITVx3_D
zD7oS^8!g_M!LeM17Rx`;ax_%cfXAt+rH+EJfdz$e3iS<g42u0u&t_m?fXbl7*Hf#N
z;P`^eqQnlGEOK1PMuVaPW-409voPc`Br;?&<e`Q=6DUU_=P<asfew9RBXb=EBMUPM
zLm%!R<nU)`oUxJt)Wn2_30e%?KLyD#aJ^_b1VbJ<78quMV*#!gEgsky@)=4PGO*Qb
z44`s(9=JOE4>kiu?Lfx|mFhDTKcU14!;)kM1_l&))Ocy|It{72(9|I35A14C;s;Vs
zp_qXdN1O~n46Y203@!}546Y1%47m&`sJR9lQ^>gn99^TtXb6mkz-S1JhQMeDjL;BZ
zhWJ|nH2&|(z<_K1AEIiM91Vfd5Ezyrz{uhf?BWC+?7`+k&{#WYJUsy_2^xb3jpj3g
z#^)jWKuSPE`{3btCdi^94Ulq11_lEV4Z@5J4B+8-Mh3`e{s2z~U>m`M_T!QJI-~u6
R!sDl-{eRTH@Zj(N0{|;y0TKWJ

literal 0
HcmV?d00001

diff --git a/APIWrappers/.DS_Store b/APIWrappers/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..dade7716d7e7579e4dc1f59da55e3f272cfe4e30
GIT binary patch
literal 6148
zcmZQzU|@7AO)+F(5MW?n;9!8zOq>i@0Z1N%F(jFwA|QQ?U^6lqN*Ll9;u-W93ZQbM
z)Zh*QP~35Y<1CXQj{!OUDm`=Zlaq4tlc34Nk%56h?>`uTy#&!!z);DM%#g^C%#gv5
z3Ni;x*Lvb~<)j-1C+FuvQ;lx|0|NsN^K<iET%fMvU|?v-JK1vt<T9M9Q%F!<kb&%q
z1t4z<FgP+4Fk~|LG9)tOF(fjiGo&))GNdx(F_eH)Ia(+&%A)yK2#@}7hG48_bfcNU
z$KcFR#8Amlz)-@F&)~w4$WX$N$WV+`?@u(nAU}-a(GVC7fzc2^4*^Dq00%dO9wkRZ
zU^E0qLjWEEpz=Wh)K_3&U~qua4G<b6#lXnG0PX@XGBB{fG(q|S3?Mm>RuB!+3Zg+;
z85lt<uo+;j42)2%jNonvNFS(60;0j%85qGfgZN<W42)o#85kHL+8G$3HZwwdD2x#8
z42%%%42)pgVXhmcM?+vV1YjY+3}Fa>>VH=T23-Arh^kR?Gz3ONU|5C#Ba2J0ixap~
z#_m5*T??vDLBld26`(p8R2?&d>Sd4sL@&51W`YbTN<f7{)jdcnhz3{1j0_AQt)mSA
OSOAUEqaiQ=Apig%0Dmn2

literal 0
HcmV?d00001

diff --git a/APIWrappers/ApiManagement.py b/APIWrappers/ApiManagement.py
new file mode 100644
index 0000000..735c203
--- /dev/null
+++ b/APIWrappers/ApiManagement.py
@@ -0,0 +1,241 @@
+##
+# @file ApiManagement.py
+#
+# @brief Management HITBTC REST API.
+#
+# @section  Author
+# - Created by Lucas Pighini
+#
+
+
+#Libs for auth to API
+from base64 import b64encode
+from hashlib import sha256
+from hmac import HMAC
+import time
+import math
+from urllib.parse import urlsplit
+
+#Libs for REST requests
+from requests import Session
+import threading
+from requests.auth import AuthBase
+import requests
+import json
+import datetime
+from datetime import datetime as dt
+import sys
+import os
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+sys.path.append(os.path.dirname(SCRIPT_DIR))
+
+#DDB functions from DataManagement.py
+from DBManagement.DataManagement import addOrderDB, cancelOrderEntry, updateEndCycle,updateBalance
+api_key='ADDKEY'
+secret_key='ADDKEY'
+
+#Class for authentication with API private key
+class HS256(AuthBase):
+
+    def __init__(self, api_key: str, secret_key: str, window: int = None):
+        self.api_key = api_key
+        self.secret_key = secret_key
+        self.window = window
+
+    def __call__(self, r):
+        url = urlsplit(r.url)
+        message = [r.method, url.path]
+        if url.query:
+            message.append('?')
+            message.append(url.query)
+        if r.body:
+            message.append(r.body)
+
+        timestamp = str(int(time.time() * 1000))
+        window = str(self.window) if self.window else None
+        message.append(timestamp)
+        if window:
+            message.append(window)
+
+        signature = HMAC(key=self.secret_key.encode(),
+                         msg=''.join(message).encode(),
+                         digestmod=sha256).hexdigest()
+        data = [self.api_key, signature, timestamp]
+        if window:
+            data.append(window)
+
+        base64_encoded = b64encode(':'.join(data).encode()).decode()
+        r.headers['Authorization'] = f'HS256 {base64_encoded}'
+        return r
+
+#Auth when class called
+auth = HS256(api_key, secret_key)
+
+#Get avalable spot balance of the user
+def getBalance():
+    with Session() as s:
+        response = s.get('https://api.hitbtc.com/api/3/spot/balance', auth=auth)
+        print("REPONSE ",response.json())
+        updateBalance(response.json())
+    return response.json()
+
+#Subscribe to report if balance of user mooves
+def subscribeReport():
+    with Session() as s:
+        response = s.get('https://api.hitbtc.com/api/3/spot/balance', auth=auth)
+        print("REPONSE ",response.json())
+        updateBalance(response.json())
+    return response.json()
+
+#Get all active spot orders
+def getOrders():
+    with Session() as s:
+        response = s.get('https://api.hitbtc.com/api/3/spot/order', auth=auth)
+        print("REPONSE ",response.json())
+    return response.json()
+
+#Cycle management ==> No more used
+def check_status_order(id,profit,loss,id_cycle):
+    with Session() as s:
+                resp = s.get(f"https://api.hitbtc.com/api/3/spot/history/order?client_order_id={id}", auth=auth).json()
+                if(len(resp)>0):
+                    print(resp)
+                    resp = resp[0]
+                else:
+                    resp = s.get(f"https://api.hitbtc.com/api/3/spot/order/{id}", auth=auth).json()
+                    print(resp)
+                    
+                status = resp['status'] 
+                print("STATUS "+status)
+
+                while(status != "filled"):
+                    resp = s.get(f"https://api.hitbtc.com/api/3/spot/history/order?client_order_id={id}", auth=auth).json()
+                    if(len(resp)>0):
+                        resp = resp[0]
+                    else:
+                        resp = s.get(f"https://api.hitbtc.com/api/3/spot/order/{id}", auth=auth).json()
+                    print(resp)
+                    print("resp2 : ")
+                    print(resp)
+                    status = resp['status']
+                    print("STATUS "+ status)
+                    time.sleep(0.5)
+                    if status == "canceled":
+                        cancelOrderEntry(id,id_cycle)
+                        return "canceled"
+                price = float(resp['price'])
+                if (resp['side']=="buy"):
+                    side = "sell" 
+                    tp  = price+price*0.02
+                    sl = price-price*0.01
+                else :
+                    side = "buy" 
+                    tp  = price-price*0.02
+                    sl = price+price*0.01
+                print("TPSL")
+                print(tp)
+                print(sl)
+                print(side)
+                
+                # res_tp= createStopOrder(tp,resp["quantity"],resp["symbol"],side,"takeProfitLimit",tp)
+                # res_sl=createStopOrder(sl,resp["quantity"],resp["symbol"],side,"stopLimit",sl)
+                # updateEndCycle(res_tp,res_sl,id_cycle)
+#Get hours between two dates
+def hoursBetween(d1, d2):
+        d1 = dt.strptime(d1, "%Y-%m-%d %H:%M:%S")
+        d2 = dt.strptime(d2, "%Y-%m-%d %H:%M:%S")
+        tot_sec = (d2 - d1).total_seconds()
+        hours = divmod(tot_sec, 3600)[0]  
+        return hours
+            
+#Get candles from HitBTC API ==> Not used
+def getCandles(start, end,period):
+    date_format_str = '%d/%m/%Y %H:%M:%S'
+    start = datetime.strptime(start, date_format_str)
+    end = datetime.strptime(end, date_format_str)
+    h = hoursBetween(start,end)
+    tot_min = 60*h
+    tot_req = math.ceil(tot_min/100)
+    res = []
+    for i in range(tot_req):
+        params = {
+            'from': start,
+            'till': "2022-02-21T20:30:00.000Z",
+            'period': "M1",
+            }
+        ohlc_resp_hit = requests.get(
+            f'https://api.hitbtc.com/api/3/public/candles/BNBUSDT',
+            params=params)
+    print("HITBTC")            
+
+#Start the end of cycle (exit of a market) ==> not used
+def endCycle(id_order,id_cycle):
+    filled = True
+    #check_status_order(id_order,0.01,0.01,id_cycle)
+    print("END CYCLE")    
+
+#Get OrderBook for BTCUSDT ==> Not used 
+def getOrderBook():
+    with Session() as s:
+        response = s.get("https://api.hitbtc.com/api/3/public/orderbook/BTCUSDT?depth=100", auth=auth)
+        rsp = response.json()
+        print("REPONSE ",response.json())
+        print("BID BTCUSDT :" )
+        for b in rsp["bid"]:
+            print(b)
+        print("ASK BTCUSDT :")
+        for a in rsp["ask"]:
+            print(a)
+
+    return response.json()
+
+#Get a ticker price for a symbol
+def getTicker(symbole):
+    with Session() as s:
+        print("GET TICKER")
+        response = s.get(f"https://api.hitbtc.com/api/3/public/price/ticker/{symbole}", auth=auth)
+        #print("RESP",response.json())
+    return response.json()
+
+#Create and order test ==> not used
+def createOrder(price,quantity,symbols,side):
+    with Session ()as s:
+        #res = getTicker("BTCUSDT")
+        #price =res["price"]
+        price = float(price)+200
+        s.auth = ("CxklhckH416wXKU0F6blDqXSNT4NjtWY","LTfknHHQN20pArXbAnOqroAqAWWMcz0o")
+        orderData = {'symbol':symbols, 'side': side, 'quantity': quantity, 'price': price }
+        r = s.post('https://api.hitbtc.com/api/3/spot/order/', data = orderData)
+        print(r.json())
+
+    return r.json()
+#Create limit order with price, quantity, symbol and side
+def createOrderLimit(price,quantity,symbol,side):
+    with Session ()as s:
+        #res = getTicker("BTCUSDT")
+        #price =res["price"]
+        price = float(price)
+        s.auth = ("CxklhckH416wXKU0F6blDqXSNT4NjtWY","LTfknHHQN20pArXbAnOqroAqAWWMcz0o")
+        orderData = {'symbol':symbol, 'side': side, 'quantity': quantity, 'price': price}
+        r = s.post('https://api.hitbtc.com/api/3/spot/order/', data = orderData)
+    return r.json()
+
+#Create stop order with price, stopPricem quantity, side, typeOrder("stop")
+def createStopOrder(price,quantity,symbol,side,typeOrder,stop_price):
+    with Session ()as s:
+        price = float(price)
+        s.auth = ("CxklhckH416wXKU0F6blDqXSNT4NjtWY","LTfknHHQN20pArXbAnOqroAqAWWMcz0o")
+        orderData = {'symbol':symbol, 'side': side, 'quantity': quantity, 'price': price , 'type': typeOrder, 'stop_price':stop_price}
+        print(orderData)
+        r = s.post('https://api.hitbtc.com/api/3/spot/order/', data = orderData)
+        print(r.json())
+    return r.json()
+
+#Delete active order by "clientOrderId" ==> used when stop is reached
+def deleteOrder(id):
+    with Session ()as s:
+        s.auth = ("CxklhckH416wXKU0F6blDqXSNT4NjtWY","LTfknHHQN20pArXbAnOqroAqAWWMcz0o")
+        r = s.delete(f'https://api.hitbtc.com/api/3/spot/order/{str(id)}')
+        print(r.json())
+
diff --git a/APIWrappers/ApiManagementWS.py b/APIWrappers/ApiManagementWS.py
new file mode 100644
index 0000000..192c337
--- /dev/null
+++ b/APIWrappers/ApiManagementWS.py
@@ -0,0 +1,57 @@
+##
+# @file ApiManagementWS.py
+#
+# @brief Management HITBTC WebSocket API.
+#
+# @section  Author
+# - Created by Lucas Pighini
+#
+
+
+#Libs for auth to API
+from websocket import create_connection
+import websocket
+import json
+from hashlib import sha256
+from hmac import HMAC
+from time import time
+
+
+#Login for trading websocket access
+def loginAuthWebSocket(secret_api,public):
+    timestamp = int(time() * 1000)
+    api_key = "ADDYOURS"
+    secret = "ADDYOURS"
+    window = 10000
+    message = str(timestamp)
+
+    if window:
+        message += str(window)
+
+    ws = create_connection('wss://api.hitbtc.com/api/3/ws/trading')
+    sign = HMAC(key=secret.encode(),
+                msg=message.encode(),
+                digestmod=sha256).hexdigest()
+    res = ws.send(json.dumps({"method": "login", "params": {"type": "HS256", "api_key": api_key, "timestamp": timestamp, "window": window, "signature": sign}}))
+    return ws
+
+#Log to public websocket without auth needed
+def loginPublicWebSocket():
+    ws=create_connection('wss://api.hitbtc.com/api/3/ws/public')
+    return ws
+#Subscribe to webscoket reports of changes in orders
+def subReportOrders(ws):
+    res = ws.send(json.dumps({
+        "method": "spot_subscribe",
+        "params": {},
+        "id": "orders" }))
+#Subscribe to ticker 1s of an array of Pairs ==> ["BTCUSDT", "ETHBTC"]
+def subPrices(starting_cryptos,ws):
+    print(starting_cryptos)
+    res = ws.send(json.dumps({
+    "method": "subscribe",
+    "ch": "ticker/1s",
+    "params": {
+        "symbols": starting_cryptos
+    },
+    "id": "price" }))
diff --git a/APIWrappers/CryptoDatas.py b/APIWrappers/CryptoDatas.py
new file mode 100644
index 0000000..a7ce775
--- /dev/null
+++ b/APIWrappers/CryptoDatas.py
@@ -0,0 +1,63 @@
+##
+# @file CryptoDatas.py
+#
+# @brief Functions to get histo market datas from cryptowatch.
+#
+# @section  Author
+# - Created by Lucas Pighini
+
+
+#Libs for rest api requests
+import requests
+import json
+from datetime import datetime
+
+resp = requests.get('https://api.cryptowat.ch/exchanges')
+# Select Gemini
+EXCHANGE = 'binance'
+# Fetch markets on the exchange
+exchange_resp = requests.get(f'https://api.cryptowat.ch/markets/{EXCHANGE}')
+
+pairs = [i['pair'] for i in exchange_resp.json()['result'] \
+    if i['active']]
+print(pairs)
+
+# you an verify that it is the correct pairing by checking here
+PAIR = "ethusdt"
+# Verify Pair exists
+pair_resp = requests.get(f"https://api.cryptowat.ch/pairs/{PAIR}")
+print(pair_resp.json())
+START_DATE = '1/1/2022'
+END_DATE = '29/1/2022'
+PERIOD = 3600 # Time period in seconds (e.g., 1 day = 86400)
+
+def to_timestamp(dateString):
+    element = datetime.strptime(dateString, '%d/%m/%Y')
+    return int(datetime.timestamp(element))
+# Will be used later to convert back
+def to_date(timestamp):
+    dt = datetime.fromtimestamp(timestamp)
+    return dt.strftime('%d/%m/%Y')
+
+#Get formatted ohlc candles from cryptowatch for a choose pair and exchange
+def format_prices(type_format):
+    start_ts = to_timestamp(START_DATE)
+    end_ts = to_timestamp(END_DATE)
+    params = {
+    'after': start_ts,
+    'before': end_ts,
+    'periods': PERIOD,
+    }
+    ohlc_resp = requests.get(
+        f'https://api.cryptowat.ch/markets/{EXCHANGE}/{PAIR}/ohlc',
+        params=params)
+    
+    print("END HITBTC")
+    res = []
+    for i in ohlc_resp.json()['result'][f'{PERIOD}']:
+        if type_format == "simul":
+            res.append([{"Open":i[1], "High":i[2],"Low":i[3],"Close":i[4]},i[0]])
+        elif type_format == "MA":
+            res.append({"Open":i[1], "High":i[2],"Low":i[3],"Close":i[4], "Date":i[0]})
+    return res
+    
diff --git a/APIWrappers/__init__.py b/APIWrappers/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/APIWrappers/__pycache__/ApiManagement.cpython-310.pyc b/APIWrappers/__pycache__/ApiManagement.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..7175d64cc1eaf1812cf6ff8ccb247857ce671c56
GIT binary patch
literal 6530
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
ZfB-v(9tQ`92nQPnKL-Z~4+l37Hvl>_zTW@<

literal 0
HcmV?d00001

diff --git a/APIWrappers/__pycache__/ApiManagement.cpython-39.pyc b/APIWrappers/__pycache__/ApiManagement.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..00539ecae1129e936cba110294c5b4b0f26b2d16
GIT binary patch
literal 6438
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
N&%wdL!@<qL4FLP<lA!<q

literal 0
HcmV?d00001

diff --git a/APIWrappers/__pycache__/ApiManagementWS.cpython-310.pyc b/APIWrappers/__pycache__/ApiManagementWS.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a6c6565c6f315a6b33a8dac93a361fb68e45b4cd
GIT binary patch
literal 1569
zcmd1j<>g{vU|@LC#+@wA#=!6x#6iYP3=9ko3=9m#DGUq@DGVu$ISjdsQH+crHd78m
z6oh7qVoG61Va{RBWr<<|%dzCJ=CVbxf!VA%?78ew?2HU4Y$@z53{e~@94VYF3{jjZ
zTq)cw3{hMuJSn^_3{l)EOu-DAd@n)vuVlO>m|T>aSdto_oS&DMnp~2ZpXaB^c#Ew#
zBhkpzOq1~zi-)hHGl(w9%uP)OITWN3gh5{7W?*1&206Tnfq|ifp@gxSA%#(dp_#Fk
zDTS$)Ifbc~C55?`wS=jLshP2st%kKovWBgMsfM+g(VU@{t%Ny+rJ1poy@aKPWdZ9#
zh8i{yS;CgW+RMCveIY|FM-BS|juOrVTp&-?FxN2Eu-0&-aLi#%;he*?kZ~bnEoTjT
zFoPzSU*-#D28JjOM;Dh!|Inb|OaXNUhAP$a;$ka({ltPyy^PF~q>^O4<osL^SKnB_
zyjZ`aC^027FI|)Q7ISuL<t^si;`CdbDVgc1#U;7<DN(FB`RSQ?QLG-pprByA#ZppP
zka~+fu^=-Zq?{8JBE=<%xdpe_$}{s)^2={=7H6jCC6<&HrD`(WV#`e}$;eN+#a575
zl$cwr$$g7CGq0qGje&vT7ISe)Q4uo(149ujh|89mmz<xHTEqh4aAu@dKpb(4r8qS&
z<rYg;aem${)|ArRf?`dsD6Znv<f7D)_{4(DD7J#qq@2v;A|8-YpvZ_~gUA-~f{bF%
zO)V}?Oi#VVR9<|G1?0F}%tfiiD;bJp7#J9S)#-;8rxq3K=aeQV7VG<DCKV+XRqFfZ
zCuQcOD!Ak)m*%GCl@#kI=jYZX78K;9);Z_om!`PnCl~8G=a&{0>l-Vi=BDZg6y;~7
zmISBfrWThJrRqBt6ofzmR^KteGrTCVpa5ivV?m~GVqRi;D#+0AV7-FMTSDLfb}TK)
z2v1E4&QH!xEfEDJCItot20lg>FyvrlVd7!rVB%n8V`O4v`NzV<^iPSIg|SGEfq@|z
zln!B-k%55$ls>`f5fmUL3@MDwjI|6k48aVVOny}=_)`NkC_zSOG8RdKLKGBA;Gim!
z1qG)F*u4SZAcwnH9pqwA#BngPFc!&!Tm^Co%vB)cIAFO1WL^!!0)`UC1xzW7nG7jR
zDa>=2!ReSW1>{N=zbL-qg8Y*B;?ktz<f6=^)LU%%MJcI8#hT1T{2(U@fE>b<nWD*D
z1PZGnF_54*0|SF56U5EZAOVm?NDk*OE=>wbEyyn_@dq2G4RSLm|8g)gfg#`DA|;T^
zL9T_l9F#mcVJ_DK=kFSZW=2Ma8pZ{TB}@yLQy4++uVKh!Okqi3ox=k52NT#IY<^Lk
za4%GGmSiSprxxiO7T;nouFOr!&ndpeT2PdkoT|wJ_SG$><cuPa&x#a5K4AgN=9QrP
zkU2`AxFoTtBr`8PKDnr}pd`N-x1T}w2Y~D-HU#+=WI6{U#J?;|O#hjf`F<6F;!cz2
z7H4^CQZYFBLGmOhOmDGgBo=4nWF|o}B}+zbVlp_hf-^8U^?@TB9ByEPAmNP`@*Fm~
i`6;D2sdk_=Q7pp1z`(-|at0402y(D+2yw9RumJ$-D}1Z~

literal 0
HcmV?d00001

diff --git a/APIWrappers/__pycache__/ApiManagementWS.cpython-39.pyc b/APIWrappers/__pycache__/ApiManagementWS.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..c28479a838fa63d7b66df7e3d8a137fb3f2175ef
GIT binary patch
literal 1497
zcmYe~<>g{vU|@LC#+@wA#=!6x#6iYP3=9ko3=9m#DGUq@DGVu$ISjdsQH+crHd78m
z6oh7qVoG61Va{RBWr<<|%dzCJ=CVbxf!VA%?78ew?2HU4Y$@z53{e~@94VYF3{jjZ
zTq)cw3{hMuJSn^_3{l)EOu-DAd@n)vuVlO>m|T>aSdto_oS&DMnp~2ZpXaB^c#Ew#
zBhkpzOq1~zi-)hHGl(w9%uP)OITWN3gh5{7W?*1&206Tnfq|ifp@gxSA%#(dp_#Fk
zDTS$)Ifbc~C55?`wS=jLshP2st%kM8sD`bCsfM+g(VU@{t%Ny+rJ1poy@aKPWdZ9#
zh8i{yS;CgW+RMCveIY|FM-BS|juOrVTp&-?FxN2Eu-0&-aLi#%;he*?kZ~bnEoTjT
zFoPzSU*-#D28JjOM;Dh!|Inb|OaXNUhAP$a;$ka({ltPyy^PF~q>^O4<osL^SKnB_
zyjZ`aC^027FI|)Q7ISuL<t^si;`CdbDVgc1#U;7<DN(FB`RSQ?QLG-pprByA#ZppP
zka~+fu^=-Zq?{8JBE=<%xdpe_$}{s)^2={=7H6jCC6<&HrD`(WV#`e}$;eN+#a575
zl$cwr$$g7CGq0qGje&vT7ISe)Q4uo(149ujh|89mmz<xHTEqh4aAu@dKpb(4r8qS&
z<rYg;aem${)|ArRf?`dsD6Znv<f7D)_{4(DD7J#qq@2v;A|8-YpvZ_~gUA-~f{bF%
zO)V}?Oi#VVR9<|G1?0F}%tfiiD;bJp7#J9S+308F=ceixWTt26yQCIpm*f}dI~Ej#
zK!QczF~BptD6ya*wWwI%u^`hoF)uMaH8(Y{Bs^HJpz@XwICvaOOESV!lY;Y;vr|h%
zK}i8*Gy@|aBMTUEFtIT5FmW()FtRZ+{o`U*Vl0wlU|>iFr63q)WME(br7Unt0(qr`
zA%(G-v6i8RA(%mv$*)QUe>_410c3<GW052%EI^I`d$LFt6c8d{w+4U%3+`HVkZVCf
z&cMjQSR@Z}704wpSAmS<fTeGcc{L0R7)lryFr_eNGNdr2FwbEIr$ELOkSkgIqWFpn
z@=M~2OOuL|i!zf^Z?WYUrKA=WYcdz{gPbG)atKpqiY9XrD4dGKK!V~73=En~5I0MM
z1V9!cIh?<^G$|;xAit=@A8eR5$jzXf2XZqLBNHRj-y$WD%R#P%xg3<RIAJc=0_V&c
zhGs@ah8o5Nj3rD9m{S-*?yq6UWK3a6VV%PQ_6HN#A8dY6oNzBxah7BzXQvkF8x}{g
z7gy#c<>wUNVl61jOitBg0sHC}Q*uTT$Y({0AfK>+W%EkVeaIXoP+XE&RFavO9-mxP
zSx}N+jN8v3`vX9B6dQtk3o;$#TMm$KnOOcaF*E%tQUlq>bBnV)HK`b!^dPwj6sEV>
zGZKq4ax#-3*@-11H!&HU&A?d?och3#4GuT3L6Go93waKk-29Z%oK!ndf-DwdU|`^3
T1SMl0Mjl2U77if}77jK53ejP;

literal 0
HcmV?d00001

diff --git a/APIWrappers/__pycache__/CryptoDatas.cpython-310.pyc b/APIWrappers/__pycache__/CryptoDatas.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..b03a7320e1ab629a608f2f3b4037cf6d547d68b1
GIT binary patch
literal 1745
zcmd1j<>g{vU|{fHH$B;!oq^#oh=Yt-7#J8F7#J9e7cej|q%fo~<}gG-XvQeU6owS0
z9Hv~RC?-aRRE7o2Da;EQqgYZ{qFBK^)>PKn40D+lGDfkbu%)oKFr>0AU|h(M!Xe4v
z!qChZ#h%KM%HGV#$dJMr#R=BImC6a#!IjF9$^}vlmgkP*PT`5-N#Tv+P2o%7Z()ey
zOA$yBY+;DvPZ3HHZefTLNMQ_S&=h$Ia=V`<<1LPq#FEsK%-qx}rHqo2f?_Lu{ltPy
zz2u_Gf|C65#1g&a4E@xK<c!3;^wi=g_N2_b#JuFxUy3*t=Oz|qr<N4!Co_VqfMO;F
z1_n?FIfFt-hJk@0ouP&ymaCSrhB1XflA(yHhB1Xvl3^lKAyY7eCetmp#N?99vea8F
z1&NtOD?uVmdIq-`GmF?57#P6BuPXh};?$yI{hZR|#A1D)%%q~kqDp<={G`mBR0Ws(
z<kH;KJdiW;bL$cd3UX5GoOAL^Q(W?si}juJON)y2jTKUJQ}qLi^0QJ)f>U!-i%W`9
z^%DyUN{SLwGV{{)9RobWixLY8K$bXzgTp1UB(Yeppz;=%O-^QUNpgN}ft@JGM<7>m
zFt9Q5{VxKgl3Q#=sl}x^B~k3DB^jl~DJ50%ID-r1!D9U?4nuuIeIo-Sqbg1#ODHo_
zfRBLzcQ8sZFff!bEMTl*NMT&aRLfYxRKl=;xrT8eV>4qg!%8N<Dh|~Yebroj)ksa2
zB2Wz6;wUaDDgZ_HE#}O;l3Sc0W^qYkZh<CK6c;EV1eX+L=B3|aPt8dM1s^!1Ap|D_
z1H&zzlKgnM9wm^^L6OSC$j4YD$biMI%nS?+;3yY?yLBNWDAE@&r7$jJ3}z_eVPIg;
zWQMqoH?1f?7j8V*v1uT#CQ}hV$abcb5{O$s!CeG)5PL~}JjmT@Ft>0qaxoTx;shn!
z*cliYK<dG6IRSP{31c&3En^8o2~#s;EmI9+4O0no3gaB+TILd#EY=jJ61Le4Da<A8
zvl&uY=Cal>r?B=i)v}auq_BZ9S~^25YYoc+&V>vq?2-&6%(EFlSvA(ImaT>%g(I7(
z$fJgJ0ap!M3a2DP4O<EqnB)eNJdzA4ymMG;*i!f;8Pb^+GBPq0YS%EN@Mkj>CF0Ws
z(UBrBhZU-aHJCwD&`*;&iZwB<B(>-kTT*ITeo^Wz_JY)+%>0z%B2e)EV$`o<)z8n!
zN!Db%#a575l$cvw#pUYfqTt~f;uPXs#Ld9K5XD-YnOmCk5|m|Mf>O#$kk*%=$kk-I
z#o}L(ns<xEBQrhY7PC)&`7KuGoc!X{B9Q7RCSONQ)*?Ajwv-1E3Lrue6kRMXi6yC;
z+~AaPiz_(9F(@S7#WBS77Kf{!3xvfM;2PxV?{bTyD7COOwYa4C7IS)P$t@1o2xkvR
zKX=z#ECG(5LAO{7ia^PgC960;?-m;<OXj6$vPW^3R2HPhr{x#rCYD5T6qh6xmBg16
zN3o^mrNoyM7fFIV#tHIyd{Js~!7b*Z)Z!uzkn_Ol2TXtx#VuZl5%C2@naQce+MuKa
zN>3b&9E?m%OpHv7Y=2o;1wiya4i*+hF-8tXJw^^jEk>pW7RDkyPzn|-0_i9M=>@0d
zB6V;Gfb1>O0J(z~R)#{{!V1pzMOq-&XoBQ9K>}d8B4v=E3W!hz5ul6(PSIeSkTL+m
z0~|KF`6;D2sdk_kDF)?B4lWKx9!4%E7A65EF(wWs7G?n^9!3^0<Y3}p;b8>;6Q8AW

literal 0
HcmV?d00001

diff --git a/APIWrappers/__pycache__/CryptoDatas.cpython-39.pyc b/APIWrappers/__pycache__/CryptoDatas.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..4d0758cbf800a44eebd364acd695a2dd38e7a70f
GIT binary patch
literal 1673
zcmYe~<>g{vU|`5)<Vv<?XJB{?;vi!d1_lNP1_p-W1q=)fDGVu$ISf${nlXwog&~D0
zhbfmSiiwdSm0<yM3iCq7D3%nKC{{3!HI;QX!(66?j8SYUY$@z545@4j7#A|6a7Z$^
zFf=npv8QsRvNtm_GNf=uae{SlrE)@baHVpja)DHX<+-D{Q+T3yQh1|yQ}|N&TNtAF
zQUp>2TNtAFQ-o54TNt7QQW%37G(}#5-0r8zc#9(?u_U!5GdHzLDWjyMpx8=ZKd~TF
zFS)3)pd`OMu|zL9LqD}5IU_MIJ+(NBJt;FUF)umwmm*HZxrs&DsU^kw$&4T?pqPn)
zfdLdk&Y%#IVPIfLXQ*L_6{%&cVN79=WGG^(VN79^WSGcQ$P&z;$#jb?F}WnOEcF&k
zL1JdnN{|SXp201~%px`h1_m(k%R)aRKQ~psATvEf-zBv;yClCr-?5+|q$n{ZGcR4=
zF~BptD6ya*wWwI%8SELC#FE5fy@JYHTsAqG#U;u4xdnEjAoqYA#=*$(zX%k=x7dnO
zi%WA#qS#YQGD?e6N~+{>dKKijV*M%(Lw!SiBLgF&Do!IyC^J)lkAVSq5J)jFFqAMX
zV60(CVO+>m%UHrx!mxn3hH)WdGh;BrN+!Q54%HNW)m(kmNKKX^Q0U#_C@v`~07cX-
z=FGg3Tbv+faY<rsfhJQF7bp^gONuh{(r>Y+=A`DP=9Pd$2|{o(FfiQWDantA>rsOF
zn}Lysu}F{si(8o)7#P6OB?5QrLPk)8EnrGvT*w&AP{hN)z@W(taUE}3QGPDmc(7yB
zKwM3xB7TtVOeq)+VlT;$2f14f;TA5&B2bK=gc~~p0|UqdV7HtAyQPG&nX#6!grS6~
znX#6shOvgJggJ$A4s$JY2}>4h3R4N&Y=#u(686~)DJ*kYYnW45dzorkN;p#3K$#?+
zp_a9VWdY|xh7@*5h7#u444`Zln^VhH!;r#}%~Uj@hIIi~4O<GQBts2b3Ky8<29rFJ
z3@N;GSZdf(_#_$9nHDlKG8Bf@Fr@HjGZls5(*@CyA~1&)s)se0K~vCAlR1htF|8!E
z=oVX2YFd6#>Mizy)S}G%l;R>#@c&}euVU5D&&WyEWW2>zkXV$MTU^EE>gS^1;Thr-
z;#|bdz`zj2TAZ0%n)4Er-ClxH%1e;em!L$g$#RRuzaTa57K=w_dd4kgpZxM$tj;<4
z#i>Og)lp2oj+(4Ra-b|F4<Zymgd!-qSX>fIQZ>23DdQGbaEN12NW6<<i0ds5S3egB
zi!H!4$kX5D7DrKPVQFe{N%1Y_^wg4D9Ig@09*%zQuD4hM96f_>u@)48k}FGAaem${
zHc*DlOVMPH;x4HyNR3a+FUn0UiQ*_ONh~UfFDZ^<OU+A(FDWjP1bK`T<n#EV)Z&6$
z%tfiiMI0dK!3%&QP@=fS3o#<TpeQprwOAXJlvF@v4kHI62NM$`6C=}KHdYo!0Y;{O
zY%Cm%ER14|9E^I59E>`QMS7t0D_8_de?=gj;FMgX4)#CD)*=m%D|lh0AH*fB;7nhn
z1#*ifNS+fU0G2CK1_^?!FH!}uK-mhMp20RjvLc%EIc#$CQ%ZAE?LaYE3<`e^Mh-?E
dCN3rxCIKcfCJts6CILnsMivlc;$Y!m1polNirWAH

literal 0
HcmV?d00001

diff --git a/APIWrappers/__pycache__/__init__.cpython-310.pyc b/APIWrappers/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..2bd258ece8a409cca8bf9f1f12ac33efa88ba061
GIT binary patch
literal 212
zcmd1j<>g{vU|{&i!<7u8AA<;F%*epN;K0DZP|U)>z>vZa%%I8Wx00a<B#a<_mFtHV
zrxq3K=aeQV7VG<DCKV+XRqFfZCuQcOD!Ak)m*%GCl@#kI=jYZX78K;9);Z_om!`Pn
zCl~8G=a&{0>l-Vi=BDZg6y;~7mISBfrWThJrRqBt6oeEdrex-&>pKQ`h8HCk6o4#=
ikI&4@EQycTE2zB1VUwGmQks)$2Xas`69WSS3j+Z4xH(V&

literal 0
HcmV?d00001

diff --git a/APIWrappers/__pycache__/__init__.cpython-39.pyc b/APIWrappers/__pycache__/__init__.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..51e1e6df6cd90e94e8abd41790d17946ef98ec60
GIT binary patch
literal 144
zcmYe~<>g{vU|{&i!<7u8AA<;F%*epN;K0DZP|U)>z>vZa%%I8Wx00a<B#a<_nd)cc
z=ceixWTt26yQCIpm*f}dI~Ej#6eXr)=B4X926%=SB^DH<78UEq$7kkcmc+;F6;$5h
Su*uC&Da}c>0~z-jWGw&z-5_!R

literal 0
HcmV?d00001

diff --git a/DBManagement/.DS_Store b/DBManagement/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..4080121141c9240cf8d3a5212a74e0504580be03
GIT binary patch
literal 6148
zcmZQzU|@7AO)+F(5MW?n;9!8zEL;p&0Z1N%F(jFwBAg)ez-DAJlrY3I#53qI6hP%h
zsnHM^4S~TM0-(Ih4bHQf40#O5`M1(DCqFqUCqD^VJUB8iFzEdU1F&}>x(XO78Il<i
z8Il<?7*avzpy^sqoUWwu;sU5$JCX`=GK)(L46ZRUF|)9;v2(C<aC5{4XXKX$mn4>y
z7CR*tMT2-D`T03XFm_^6SY~Q@ynu*veqKppW?pI$NJ(&JN@`MKQA~JdUP^wsQ+{b)
zN-<b3RDy$(gEL-0qPp71z*tAY*wC<6N1@u%$UsNI#LT3&mXkwNS>HM+K07BjFTV@y
zYX(L}2+hC?rD0Sz0|Nt&Fv&?b3{K9^g_eoR^0-yz=DWB+!vR#}x|>cv0t$B==H}+7
zkf6FC1KAY`Aa~<1w=B3QFDE}Q9a63{2r{@ZBr=pRBr^CiBr@bNBr>Ekq%!0(q%!0&
zlz_{6w6ww~ix%r3yGHR~3jt_K=HMP|4jXmPXb6mkz<`GUsC-a>)&UMsx&cCiq!<_(
z7{FZsMg|5Jm}42i{Qw4#97rpO25AM+Agv6HAQspRuvP{}s8&XBHw2^))FlDYVC@Wy
z3}EdHj0|Ay@amTlqMd;eYBM9Kx&)aE(ayjK(ayjK(GGLoC_Neiqagqd0cHp-0IL68
z85nT&{~@YI$<YuP4S``90*ov!!7fgq$`gn8Ky@vsJ_Yv~q3S@@F(as+hVVg3z`B_r
j1Bw!04nz*56;$nmt71k5NKHQ45P*fyC_Nei^bY|5ps1Y^

literal 0
HcmV?d00001

diff --git a/DBManagement/DataManagement.py b/DBManagement/DataManagement.py
new file mode 100644
index 0000000..1a2add0
--- /dev/null
+++ b/DBManagement/DataManagement.py
@@ -0,0 +1,177 @@
+##
+# @file DataManagement.py
+#
+# @brief Wrapper for mongodb database
+#
+# @section  Author
+# - Created by Lucas Pighini
+
+
+from bson.objectid import ObjectId
+import sqlite3
+from sqlite3 import Error
+
+pathToDb = "/Users/lucas/Desktop/BaseDonnee/tradeDB.sqlite"
+
+#Connect to mongocloud for acces to db
+#Must authorize IP on mongocloud first
+def get_database():
+    from pymongo import MongoClient
+    import pymongo
+
+    # Provide the mongodb atlas url to connect python to mongodb using pymongo
+    # CONNECTION_STRING = "mongodb+srv://pigh:indyvala1@tradingpigh.5pbiz.mongodb.net/tradding_app?retryWrites=true&w=majority"
+    # CONNECTION_STRING = "mongodb://127.0.0.1:27017"
+    CONNECTION_STRING = "mongodb+srv://lucas:TozfnWooA2hjuaYk@apptrading.vhcagoh.mongodb.net/?retryWrites=true&w=majority"
+    # Create a connection using MongoClient. You can import MongoClient or use pymongo.MongoClient
+    try:
+        client = MongoClient(CONNECTION_STRING)
+    except Exception as e:
+        print("Could not connect to MongoDB: %s" % e)
+        return None
+
+    # Create the database for our example (we will use the same database throughout the tutorial
+    return client["appTrading"]
+
+#Export results of a simulation
+def export_Simulation(data):
+    trades_db = get_database()
+    if trades_db is None:
+        return
+    sim = trades_db["simulation"]
+    sim.insert_one(data)
+
+#Export results of multiples simulation
+def export_Simulation_All(data):
+    trades_db = get_database()
+    if trades_db is None:
+        return
+    sim = trades_db["simulation"]
+    for d in data:
+        sim.insert_one(d)
+        
+
+#create mongo conenction to db
+def create_connection_DB(db_file):
+        conn = None
+        try:
+            conn = sqlite3.connect(db_file)
+        except Error as e:
+            print(e)
+        return conn
+#Get all simulation results for a given strategy
+def getSimulationResults(strat):
+    trades_db = get_database()
+    simulation = trades_db["simulation"]
+    myquery_sim = { "Strategie": strat }
+    res = simulation.find(myquery_sim)
+    return res
+
+#Get Price for a gicen stock from sqlite DB order by date
+def getHistoPrices(symbol):
+    conn = create_connection_DB(pathToDb)
+    print(type(conn))
+    print(conn)
+    with conn:
+        cur = conn.cursor()
+        cur.execute("SELECT CURRENTPRICES, LOGTIME_UTC FROM SYMBOLDATA WHERE MARKETSYMBOL=? ORDER BY LOGTIME_UTC",(symbol,))
+        rows = cur.fetchall()
+    return rows
+
+#Get histo candles for a given symbol
+def getHistoCandles(symbol,dateStart,dateEnd):
+    #Get Price for each stock from sqlite DB order by date
+    conn = create_connection_DB(pathToDb)
+    print(type(conn))
+    print(conn)
+    with conn:
+        cur = conn.cursor()
+        cur.execute("SELECT CANDLEDATA, LOGTIME_UTC FROM SYMBOLDATA WHERE MARKETSYMBOL=? AND LOGTIME_UTC BETWEEN ? AND ? ORDER BY LOGTIME_UTC",(symbol,dateStart,dateEnd))
+        rows = cur.fetchall()
+    return rows
+#Get multilevel LOB 
+def getHistoLimitOrderBook(symbol):
+    conn = create_connection_DB(pathToDb)
+    print(type(conn))
+    print(conn)
+    with conn:
+        cur = conn.cursor()
+        cur.execute("SELECT ORDERBOOKDATA, LOGTIME_UTC FROM SYMBOLDATA WHERE MARKETSYMBOL=? ORDER BY LOGTIME_UTC",(symbol,))
+        rows = cur.fetchall()
+    return rows
+#Addorder to db and create new cycle if is entry order
+def addOrderDB(item, newCycle): 
+    # Get the database
+    trades_db = get_database()
+    order = trades_db["order"]
+    cycle = trades_db["cycle"]
+
+    res_order = order.insert_one(item)
+    if(newCycle):
+        res_cycle = cycle.insert_one({"entry":res_order.inserted_id})
+        return res_cycle.inserted_id
+    return res_order.inserted_id
+#Chnage status of the order in db to cancelled
+def cancelOrder(id_order):
+    trades_db = get_database()
+    order = trades_db["order"]
+    myquery_order = { "client_order_id": id_order}
+    newvalues_order = { "$set": { "status": "cancelled" } }
+    order.update_one(myquery_order, newvalues_order)
+
+#Get the entry order for given id cycle
+def getEntryCycleOrder(id):
+    trades_db = get_database()
+    cycle = trades_db["cycle"]
+    orders = trades_db["order"]
+
+    myquery_cycle = { "_id": id}
+
+    res = cycle.find_one(myquery_cycle)
+    obj_id = res["_id"]
+    myquery_order = { "_id": obj_id}
+    res = cycle.find_one(myquery_order)
+
+    return res
+    
+#Cancel and entry order of a cycle
+def cancelOrderEntry(id_order, id_cycle ):
+    trades_db = get_database()
+    order = trades_db["order"]
+    cycle = trades_db["cycle"]
+    myquery_order = { "client_order_id": id_order}
+    newvalues_order = { "$set": { "status": "cancelled" } }
+    myquery_cycle = { "_id": id_cycle}
+    newvalues_cycle = { "$set": { "takeprofit": "none" , "stoploss":"none"} }
+    order.update_one(myquery_order, newvalues_order)
+    cycle.update_one(myquery_cycle, newvalues_cycle)
+
+#Update balance in database
+def updateBalance(devises):
+    trades_db = get_database()
+    balance = trades_db["balance"]
+    print("UPDATE BALANCE"+ str(devises))
+
+    item = {}
+    for devise in devises:
+        item[devise["currency"]]= devise["available"]
+    print("UPDATE BALANCE"+ str(item))
+
+    balance.insert_one(item)
+
+#Update exit order of cycle 
+def updateEndCycle(tp,sl,id_cycle):
+    trades_db = get_database()
+    order = trades_db["order"]
+    cycle = trades_db["cycle"]
+    res_tp = order.insert_one(tp)
+    res_sl = order.insert_one(sl)
+
+    myquery_cycle = { "_id": id_cycle}
+    newvalues_cycle = { "$set": { "takeprofit": res_tp.inserted_id , "stoploss":res_sl.inserted_id} }
+    cycle.update_one(myquery_cycle, newvalues_cycle)
+
+    myquery_order = { "_id": id_cycle}
+    newvalues_order= { "$set": { "takeprofit": res_tp.inserted_id , "stoploss":res_sl.inserted_id} }
+    order.update_one(myquery_cycle, newvalues_cycle)
+    
diff --git a/DBManagement/__init__.py b/DBManagement/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/DBManagement/__pycache__/DataManagement.cpython-310.pyc b/DBManagement/__pycache__/DataManagement.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..eeaedbd2253c2afda447584ff299e6cf4d640862
GIT binary patch
literal 4384
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

literal 0
HcmV?d00001

diff --git a/DBManagement/__pycache__/DataManagement.cpython-39.pyc b/DBManagement/__pycache__/DataManagement.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..de086bdb9b8be56554fa957f741324323e83efb7
GIT binary patch
literal 4367
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
QgNuWQgM)*ggNK6`0B`-LYybcN

literal 0
HcmV?d00001

diff --git a/DBManagement/__pycache__/__init__.cpython-310.pyc b/DBManagement/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..59c7151db78a423deedfd91c5b3222d4cc542565
GIT binary patch
literal 213
zcmd1j<>g`k0bZ_T5cL>DAY(=b1_lQP28Lo51_p){hF}IwM!%H|MId1W@vA~Vv^ce>
zSU;yUIk8yZCo`!iv8YntH$N#eCsn~EKe;qFHLs*tKRG|QF0r5>C$-KwC%-hsB|o`X
z-#Ndus94`vAvHHuKcFZ-E43szH8-`mq$pM2v7jKNC^027FJ0fo$u}`CF+CMzj(&W6
gW?p7Ve7s&k<t+}I-29Z%oK!oIi;9^T7#LU>0A~R>sQ>@~

literal 0
HcmV?d00001

diff --git a/DBManagement/__pycache__/__init__.cpython-39.pyc b/DBManagement/__pycache__/__init__.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..db15b257d054da09a747ab87b4c1c6b4d7bf7ffc
GIT binary patch
literal 145
zcmYe~<>g`k0bZ_T5cL>DAY(=b1_lQP28Lo51_p){hF}IwM!%H|MId1W@ykp<BR@A)
zzaTR`L*FH}IJ+djK;N;TAfzZUB{MHw-^Ix{F)uMaH8(Y{L_a=0GcU6wK3=b&@)n0p
QZhlH>PO2Tqyw4ze0h|RN%K!iX

literal 0
HcmV?d00001

diff --git a/README.md b/README.md
index 9c6e0cb..8c78ea1 100644
--- a/README.md
+++ b/README.md
@@ -1,92 +1,86 @@
-# SimulateurTradingCrypto
+# Algorithme de trading de cryptomonnaies
 
+Ce projet contient les sources principales de l'application ainsi que les fichier utiles à la documentation.
 
+## Pour commencer
 
-## Getting started
+Dans un premier temps, il faudra les librairies Python3 suivantes :
 
-To make it easy for you to get started with GitLab, here's a list of recommended next steps.
-
-Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
-
-## Add your files
-
-- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
-- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
+### Pré-requis
+- **Panda**⇒  Format des dates dans les array et pour Plotly
+- **Numpy** ⇒  Pratique avec matplotlib
+- **Flask** ⇒  Pour le backend de l'interface de démonstration
+- **Matplotlib** ⇒  Plotting des résultats de la documentation
+- **Plotly** ⇒ Plots avancés des indicateurs et du prix
 
+### Structure
 ```
-cd existing_repo
-git remote add origin https://gitedu.hesge.ch/lucas.toniutti/simulateurtradingcrypto.git
-git branch -M main
-git push -uf origin main
+AppTrading
+│
+└─── main
+│   │   __init__.py ( Init modules )
+│   │   backend.py ( Main demo )
+│   │   Decision.py ( Main )
+│   │	orders.py ( Module )
+│   │	simulation.py ( Module )
+│   
+└─── APIWrappers
+│   │   __init__.py ( Init modules )
+│   │   ApiManagement.py ( Module )
+│   │   ApiManagementWS.py ( Module )
+│   │   CryptoDatas.py ( Module )
+│   
+└─── frontend
+│   ....
+│   
+└─── DBManagement
+│   │   __init__.py ( Init modules )
+│   │   DataManagement.py ( Module )
+│   
+└─── others
+│   │   __init__.py ( Init modules )
+│   │   FetchCrypto.py ( Module )
+│   │   plotting_lib.py ( Module )
+│   │   profiling.py ( Module )
+│   │   volatility.py ( Module )
+│   
+└─── README.md
 ```
 
-## Integrate with your tools
-
-- [ ] [Set up project integrations](https://gitedu.hesge.ch/lucas.toniutti/simulateurtradingcrypto/-/settings/integrations)
-
-## Collaborate with your team
-
-- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
-- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
-- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
-- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
-- [ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
-
-## Test and Deploy
-
-Use the built-in continuous integration in GitLab.
-
-- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
-- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
-- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
-- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
-- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
-
-***
-
-# Editing this README
-
-When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template.
-
-## Suggestions for a good README
-Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
-
-## Name
-Choose a self-explaining name for your project.
-
-## Description
-Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
-
-## Badges
-On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
-
-## Visuals
-Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
-
-## Installation
-Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
-
-## Usage
-Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
-
-## Support
-Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
-
-## Roadmap
-If you have ideas for releases in the future, it is a good idea to list them in the README.
-
-## Contributing
-State if you are open to contributions and what your requirements are for accepting them.
-
-For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
-
-You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
-
-## Authors and acknowledgment
-Show your appreciation to those who have contributed to the project.
-
-## License
-For open source projects, say how it is licensed.
 
-## Project status
-If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
+## Fichiers
+Voici une description des différents fichiers sources de ce projet.
+
+ **Package main** 
+Ce dossier contient les fichiers principaux suivant :
+**backend.py** : Ce fichier est le main de l'application FLASK, il contient les différentes routes de notre server python WS utile à la démonstration.
+**Decision.py** : Ce fichier est le main de l'algo décisionnelle, on peut lancer des simulations ou alors avec la gestion des ordres HitBTC automatisées.
+**orders.py** : Ce fichier est le module principale utile à la gestion des ordres.
+**simulation.py** : Ce fichier est le module principale utile à la simulation.
+
+ **Package APIWrapper** 
+Ce dossier contient les fichiers suivant :
+**ApiManagement.py** : Ceci est un module avec les fonctions utiles l'utilisation de l'API REST
+ de HitBTC.
+**ApiManagementWS.py** : Ceci est un module avec les fonctions utiles l'utilisation de l'API WS de HitBTC.
+**CryptoDatas.py** : Ce fichier est le module qui utilise l'API **cryptowat.ch** pour récupérer des données historiques.
+
+ **Package DBManagement** 
+Ce dossier contient les fichiers suivant :
+**DataManagement.py** : Ce module contient les différentes fonctions pour l'utilisation de la bdd MongoDB.
+
+ **Package others** 
+Ce package contient uniquement des fichiers utiles à la documentation.
+
+**Package frontend**
+Interface frontend utilisé à la démo et tester la posibilité d'un web pilote via FLASK.
+Le HTML et CSS est repris d'un ancien projet d'école.
+## Démarrage
+Pour lancer la simulation il faut être dans l'environnement virtuel de Python avec la commande :
+    source env/bin/activate
+Une fois dans l'environnement virtuel il faut exéctuer le fichier backend.py avec python3.
+
+## Auteurs
+* **Lucas Pighini**
+* **Lucas Toniutti**
+* **Niklaus Eggenberg**
\ No newline at end of file
diff --git a/__init__.py b/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/main/.DS_Store b/main/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..6b5e74f656eba8670e3dd860975b345bb0c5faef
GIT binary patch
literal 8196
zcmZQzU|@7AO)+F(kYHe7;9!8z0^AH(0Z1N%F(jFwBGMr97#IW?7%~}37~&b?8T1$m
zpmL+sXb6mkz-S1JhQMeDjE2DA3IRrlb2xC+`w-btax?@+LtsRP0H}OWfVAxy9H4Xq
zga%15FfuTJy8w&~3@oq!Vg&aC7(j9$tsokt6-0xyGBAQzU^Bp485p5j8NuBUkUjyh
zQH%^=?F@`yn?d4W?F@`yn;94wA=()jp*Ax@dnk+$?F@_%?F@`y+rdVT5~Cq78Ukn`
z0P4GQgZu2640$O1_e#&4{N$vZ{3HfQmUd)dV9@&y24FKFx(XO78Il<i8Il<?7*avz
zpy^sqoUWwu;sU5$+mi}%GK)(L46ZRUF|)9;v2(C<aC5{4XXKX$mn4>y7CR*tMT2-D
z`T03XFm_^6SY~Q@ynu*veqKppW?pI$NJ(&JN@`MKQA~JdUP^wsQ+{b)N-<b3RDy$(
zgEL-0yt>-NLPx>K%%WCDq1w{OKu5vE*sQjelS5Ql-#REhJ0~|UzZ2|fc=^M?3*p1b
zE(Qh$96^$kZWx@Lp9>ulSqchJ94d43U0k5Sz`?-Kkbko02q@Tbs!kz6bwLKQD;|Ix
zj>Fut;G(>o{JeB<G0nih#gGJ!;B1CehCGH8@Zb(w;$W1;h-MdtREA`ROon2HOon`h
zJgmC9(R8sh<T4~OfD$5T014d=aRvs4N#OMNALMujPKJDjB8C)(RE8pkVyx!>L^Gck
z?3!GLQidFcM1~UFE@J}u9XYYHF%&bDK=mY}CGnLE3=F+U?m|(El(2WuJz+~!R~ws{
z=qMPOBBg9I6SR~KO1Yq@hSsbYDH{|^D1Jgs&)~Q~kw;F&$;B-VYZrr4F`61g+Qp>?
zHN|4ugO*M?8A=#Z8FCp4ps}0EP>dE+E({C|9Y`^SMaO{0myx-Sf{}$8q9h_KzOeWV
zCDs~*r!p`wU{Qq}cMJ>+_fJg+#~oIch#17L5+xpIfE#F7%tMP!aCDCnv<v}eh~W~T
z{=X{&1FrFZh^kR?Gz3ONU|5C#Ba2J0ixa2`fWv#BzBZ^oodA^wwG=?zaYj(T9HI}T
w1k|+$cgGnalZs%~j0}*TJR<|7C(p>h0Ma^e0|BG;KLZ29X#EdPoFkY304$swB>(^b

literal 0
HcmV?d00001

diff --git a/main/Decision.py b/main/Decision.py
new file mode 100644
index 0000000..d72f7a2
--- /dev/null
+++ b/main/Decision.py
@@ -0,0 +1,299 @@
+##
+# @file Decision.py
+#
+# @brief Contains main function for decision of entry and exit of market
+# Can be launched for a simulation or in real time market
+#
+# @section  Author
+# - Created by Lucas Pighini
+
+
+import sys
+import os
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+sys.path.append(os.path.dirname(SCRIPT_DIR))
+
+import settings
+import asyncio
+import websockets
+from orders import TradesManagement
+from APIWrappers.CryptoDatas import format_prices
+from simulation import Simulation
+import pandas as pd
+import json
+import time
+from datetime import datetime
+import random
+from datetime import datetime as dt
+from others.plotting_lib import plotSMA, plotCandles,plot_MA_Price_Orders
+from DBManagement.DataManagement import getHistoCandles, export_Simulation_All
+import numpy as np
+import pandas_ta as ta
+import matplotlib.pyplot as plt
+
+#Class that contains main function and parameters for decision algorithm
+class Decision:
+    def __init__(self,typeDecision,symbol):
+        #Simulated or realTime
+        self.typeDecision = typeDecision
+        #Init arrays of prices and sma for 4 market
+        self.prices = {"BTCUSDT":[],"ETHUSDT":[],"XRPUSDT":[],"BCHUSDT":[]}
+        self.sma = {"BTCUSDT":[],"ETHUSDT":[],"XRPUSDT":[],"BCHUSDT":[]}
+        self.rsi = {}
+        self.init = True
+        #Index of the ticker for the simulation
+        self.indexTickerSim = 1
+        self.pricesSim = []
+        self.sim = None
+        self.crossed = False
+        self.buff_price_indicator = []
+        #Params for sma handling
+        self.timePeriod = 0
+        self.price_SMA = []
+        self.sum_SMA1 =0
+        self.sum_SMA2 =0
+        self.cpt_ma = 0
+        #symbol of the simulation
+        self.symbol = symbol
+        self.amount = None
+        self.export_result = []
+        self.mas = []
+    #Launch a simualtion for a given market ==> focused on MA
+    def simulationGen(self,sim,symbol,sizeCandle_min,mas):
+        cpt = 0
+        self.sim = sim
+        random.seed(dt.now())
+        date = 0
+        # sizeCandle_min = 10
+         #calc time between 2 prices
+        d1 = dt.strptime(sim.histo_prices[0][1], "%Y-%m-%d %H:%M:%S")
+        d2 = dt.strptime(sim.histo_prices[1][1], "%Y-%m-%d %H:%M:%S")
+        time_between = (d2 -d1 ).total_seconds()
+        print(f"Date Start = {d1}")
+        print(f"Date End = {d2}")
+        print(f"time between 2 prices = {time_between}")
+
+        self.timePeriod = int(sizeCandle_min*60/time_between)
+        print(f"time period = {self.timePeriod}")
+        self.sim.indexTicker +=1
+        
+        #Iterate on each price of a market        
+        for i in range(1,len(sim.histo_prices)):
+            self.sim.indexTicker +=1
+            self.indexTickerSim+=1
+            try:
+                price = self.sim.histo_prices[self.indexTickerSim][0]
+                date = self.sim.histo_prices[self.indexTickerSim][1]
+            except:
+                print("Erreur dans la simulation dans le calcul du SMA.")
+                print(f"Liste len : {len(self.sim.histo_prices)}")
+                print(f"Index : {self.indexTickerSim}")
+                break
+
+            self.pricesSim.append([price,date])
+            #Launch SMA calculation
+
+            # Mettre les décisions
+            
+            self.calculateSMA(date,symbol,price,mas)
+            if self.indexTickerSim >= len(sim.histo_prices)-1:
+                break
+        print(f"date End = {date}")
+        #add results to list of results
+        self.export_result.append(sim.endSimulation(mas)) 
+
+    #Detection of  the crossing of a mooving average
+    def detectCrossMA(self,short_ma,long_ma,price,date):
+        if short_ma > long_ma:
+            if self.crossed != "up" :
+                jump = self.sim.placeOrder(price,self.amount,date,"AV","GTC")
+                self.crossed = "up"
+        elif short_ma < long_ma:
+            if self.crossed != "down":
+                jump = self.sim.placeOrder(price,self.amount,date,"VA","GTC")
+                self.crossed = "down"
+
+    #Launch our decision algorithme for a simulated or realtime
+    def launch(self,dateStart, dateEnd, show_graph = True, SL = 0.03, TP = 0.03, candle_size = 10, mas=[20,40]):
+        testSL = [float(SL)]
+        testTP = [float(TP)]
+        candle_sizes = [int(candle_size)]
+        
+        # Moyenne glissante
+        # mas = [[10,20],[5,15]]
+        self.mas = [mas]
+        
+        markets = ["BTCUSDT"]
+        bases= ["BTC"]
+        targets= ["USDT"]
+        
+        if self.typeDecision == "realTime":
+            print("REAL TIME")
+            manager = TradesManagement(0.001,0.001)
+            manager.manageOrders()
+            manager.manageCycle()
+            while True:
+                #Add indicator that u want to use
+                pass
+        elif self.typeDecision == "simulated":
+            #If simulated ==> launch a bunch of tests
+            print("SIMULATED")
+            self.sim = Simulation(None,None,markets[0],bases[0],targets[0])
+
+            #For each market apply lagrange to get the price of ohlc datas
+            for i,market in enumerate(markets):
+                self.sim.startsimulation("lagrange",market,show_graph,dateStart,dateEnd)
+                balance = self.sim.getBalanceForMarket(bases[i])
+                self.symbol = market
+                #amout is 10% of balance
+                self.amount = balance*0.1
+                
+                for sl in testSL:
+                    self.sim.sl = sl
+                    for tp in testTP:
+                        self.sim.tp = tp
+                        for c in candle_sizes:
+                            for ma in self.mas:
+                                print(f"Simulation of market : {market} with sl = {sl} and tp = {tp} and candle_size = {c} and ma = {ma}")
+                                print("Amount = ",self.amount)
+                                print(self.sim)
+                                self.simulationGen(self.sim,market,c,ma)
+                                # self.sim.resetSimul(sl, tp, market,bases[i], targets[i])
+                                # self.resetLists(market)
+            # plot_MA_Price_Orders(self.sma['BTCUSDT'],self.sim.histo_prices,[20,40],self.sim.active_orders,"BTCUSDT")
+            export_Simulation_All(self.export_result)
+            
+            
+    #Reset values after a strategy ended
+    def resetLists(self,symbol):
+        #Simulated or realTime
+        #Init arrays of prices and sma for 4 market
+        self.prices = {"BTCUSDT":[],"ETHUSDT":[],"XRPUSDT":[],"BCHUSDT":[]}
+        self.sma = {"BTCUSDT":[],"ETHUSDT":[],"XRPUSDT":[],"BCHUSDT":[]}
+        self.rsi = {}
+        self.init = True
+        #Index of the ticker for the simulation
+        self.indexTickerSim = 1
+        self.pricesSim = []
+        self.sim = None
+        self.crossed = False
+        self.buff_price_indicator = []
+        #Params for sma handling
+        self.timePeriod = 0
+        self.price_SMA = []
+        self.sum_SMA1 =0
+        self.sum_SMA2 =0
+        self.cpt_ma = 0
+        #symbol of the simulation
+        self.symbol = symbol
+        self.amount = None
+        self.export_result = []
+        self.mas = []
+    #Format string to datetime
+    def formatDateStr(self,datestr,format):
+        return datetime.strptime(datestr,format)
+
+    #Calculate RSI index strength ==> really bad results
+    def calculateRSI(self, periods = 14, ema = True):
+        close_delta = self.prices['Price'].diff()
+        # Make two series: one for lower closes and one for higher closes
+        up = close_delta.clip(lower=0)
+        down = -1 * close_delta.clip(upper=0)
+        
+        if ema == True:
+            # Use exponential moving average
+            ma_up = up.ewm(com = periods - 1, adjust=True, min_periods = periods).mean()
+            ma_down = down.ewm(com = periods - 1, adjust=True, min_periods = periods).mean()
+        else:
+            # Use simple moving average
+            ma_up = up.rolling(window = periods, adjust=False).mean()
+            ma_down = down.rolling(window = periods, adjust=False).mean()
+            
+        rsi = ma_up / ma_down
+        rsi = 100 - (100/(1 + rsi))
+        return rsi
+
+
+    #1st and dummy version of sma with crosing detection
+    def dummy_SMA(self,periods,symbol,length_candle,price):
+        #Calculate simple moving average of self.prices
+        if self.init:
+            #init self.sma with periods
+            tmp = {}
+            for i in periods:
+                tmp[str(i)] = []
+            self.sma[symbol]= tmp
+            self.init = False
+            self.price_SMA = np.array([])
+        prices = self.prices
+        if(len(self.pricesSim) > 2):
+            #calculate time between last price and now
+      
+            format = "%Y-%m-%d %H:%M:%S"
+            #calculate time periodes
+                #calculate SMA
+                #add val to nparray
+            self.price_SMA = np.append(self.price_SMA,price)
+            lenght_price_SMA = len(self.price_SMA)
+            #calculate time periodes
+            format = "%Y-%m-%d %H:%M:%S"
+    
+            time = (self.pricesSim[lenght_price_SMA-2][1] - self.pricesSim[lenght_price_SMA-1][1] ).total_seconds()
+            time = (length_candle*60)/time
+            if self.indexTickerSim % time==0:
+                self.cpt_ma += 1
+                #get last i indexes and calc sma
+                if self.cpt_ma >= periods[0]:
+                    short_sma = self.price_SMA[lenght_price_SMA-int(periods[0])-1:].mean()
+                    #add sma value to self.sma
+                    self.sma[symbol][str(periods[0])].append({"sma":short_sma})
+                if self.cpt_ma >= periods[1]:
+                    long_sma = self.price_SMA[lenght_price_SMA-int(periods[1])-1:].mean()
+                    #add sma value to self.sma
+                    self.sma[symbol][str(periods[1])].append({"sma":long_sma})
+                    self.detectCrossMA(short_sma,long_sma,price,str(self.pricesSim[len(self.pricesSim)-1][1]))
+                
+
+            
+    #Accelerated version of the SMA calculation
+    def calculateSMA(self,date,symbol,price,period_ma):
+        #Calculate simple moving average of self.prices
+        if self.init:
+            #init self.sma with periods
+            tmp = {}
+            cpt = 0
+            for i in period_ma:
+                cpt+=1
+                tmp[str(i)] = []
+            self.price_SMA.append(price)
+            self.sum_SMA1 += price
+            self.sum_SMA2 += price
+            self.sma[symbol]= tmp
+            self.init = False
+            self.old_ma = price 
+            return 1
+        # print(f"p = {price} date = {date}")
+        # time.sleep(0.5)
+        if self.indexTickerSim % self.timePeriod == 0:
+            p1 = period_ma[0]
+            p2 = period_ma[1]
+            self.cpt_ma+=1
+            self.price_SMA.append(price)
+            self.sum_SMA1 += price
+            self.sum_SMA2 += price
+            if self.cpt_ma >= p1:
+                self.sum_SMA1 -= self.price_SMA[len(self.price_SMA)-p1]
+                ma1 = self.sum_SMA1/p1
+                #print("DATE MA1 = ",date)
+                self.sma[symbol][str(p1)].append([ma1,date])
+                #print(f"MA1 = {ma1}")
+            if self.cpt_ma >= p2:
+                self.sum_SMA2 -= self.price_SMA.pop(0)
+                ma2 = self.sum_SMA2/p2
+                #print(f"MA2 = {ma2}")
+                self.sma[symbol][str(p2)].append([ma2,date])
+                self.detectCrossMA(ma1,ma2,price,date)
+            return 1
+        return 0
+        #print(self.sma)
\ No newline at end of file
diff --git a/main/__init__.py b/main/__init__.py
new file mode 100644
index 0000000..708b1c8
--- /dev/null
+++ b/main/__init__.py
@@ -0,0 +1,2 @@
+import os, sys; 
+sys.path.append(os.path.dirname(os.path.realpath(__file__)))
diff --git a/main/__pycache__/Decision.cpython-310.pyc b/main/__pycache__/Decision.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..7c3a489da670638c0d0e0964fa147338a8ae993d
GIT binary patch
literal 6570
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

literal 0
HcmV?d00001

diff --git a/main/__pycache__/orders.cpython-310.pyc b/main/__pycache__/orders.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..c1006b6002eed5227930d614926783500dad0a17
GIT binary patch
literal 8758
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
YRz9e#2942(Fo`fqFexyKFbXjP07a4ii~s-t

literal 0
HcmV?d00001

diff --git a/main/__pycache__/orders.cpython-39.pyc b/main/__pycache__/orders.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..13c9d9bcbc8562e5ab7d2fb1110ca52e02533637
GIT binary patch
literal 8680
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

literal 0
HcmV?d00001

diff --git a/main/__pycache__/settings.cpython-310.pyc b/main/__pycache__/settings.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..65766bb99a0b8558a53a733e3133f29d579d0426
GIT binary patch
literal 263
zcmd1j<>g{vU|`tiSe9bOz`*br#6iYP3=9ko3=9m#JPZsBDGVu$Eeuf%DNMl(n#{?_
z>OgEp1_lOakXjCqTE;|%6oz01O(wsWAW2QeTigXj`RPTe#l=pEMJpMKm>C!##4k(z
z(BjmhV*Q-b<iuiqm(=3ylKcXFr^Mup)SUbx{ltQTlA^?v%)E5{+{Da0{o>S;lFYpH
zV!eXOTP&G*nI#~Li$N~sU@Br|U|{gmWCYU)D<CWu1_p*(95%W6DWy57c5q!h3;?>D
BGpGOn

literal 0
HcmV?d00001

diff --git a/main/__pycache__/simulation.cpython-310.pyc b/main/__pycache__/simulation.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..837832285c085945277a863706f91789fac2e686
GIT binary patch
literal 12511
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
U2-JIG0?CLli7@hjFryGN0DCZTBLDyZ

literal 0
HcmV?d00001

diff --git a/main/__pycache__/simulation.cpython-39.pyc b/main/__pycache__/simulation.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..018a0ec627c049a194bd662b915b4d05518acf1d
GIT binary patch
literal 12554
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
I!pOr606KG5qyPW_

literal 0
HcmV?d00001

diff --git a/main/backend.py b/main/backend.py
new file mode 100644
index 0000000..54f8fb2
--- /dev/null
+++ b/main/backend.py
@@ -0,0 +1,397 @@
+##
+# @file backend.py
+#
+# @brief backend FLASK for web pilot.
+#
+# @section  Author
+# - Created by Lucas Toniutti
+
+import sys
+import os
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+sys.path.append(os.path.dirname(SCRIPT_DIR))
+
+#Libs for auth to API
+from flask import Flask, render_template, session, copy_current_request_context, redirect, request, jsonify, make_response
+from flask_socketio import SocketIO, emit, disconnect
+from threading import Lock
+from threading import Thread
+import matplotlib.pyplot as plt
+from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
+from flask import Response
+from matplotlib.dates import DateFormatter
+from matplotlib.lines import Line2D
+import json
+import plotly
+
+import time
+import pandas as pd
+from matplotlib.figure import Figure
+import datetime
+import plotly.graph_objects as go
+from Decision import Decision
+
+import base64
+import io
+import settings
+
+
+from APIWrappers.ApiManagement import createOrder, createOrderLimit, deleteOrder, getBalance, getTicker, getOrders
+
+
+
+async_mode = "eventlet"
+app = Flask(__name__)
+
+# app.config['SECRET_KEY'] = 'secret!'
+
+socket_ = SocketIO(app, async_mode=async_mode,cors_allowed_origins="*")
+
+market = "BTCUSDT"
+
+dec = Decision("simulated",market)
+
+simulationInProgress = False
+
+dictError = {}
+stickyForm = dict(takeProfit='3.0',stopLoss='3.0',dateSimStart='2022-02-05',dateSimEnd='2022-04-09',indicatorSelect='',MA1='20',MA2='40')
+resetParams = 1
+
+
+@app.route('/')
+def index():
+    global simulationInProgress
+    global dictError
+    global stickyForm
+    global resetParams
+    
+    url = None
+    figJson = None
+    results = None
+    if resetParams == 1:
+        stickyForm = dict(takeProfit='3.0',stopLoss='3.0',dateSimStart='2022-02-05',dateSimEnd='2022-04-09',indicatorSelect='',MA1='20',MA2='40')
+        
+    if dec.export_result != []:
+        simulationInProgress = False
+        figJson = createFig(dec.sim.histo_prices, dec.sim.active_orders, dec.sma[market], dec.mas[0], market)
+        # url = 'static/imgSimulation/simulation.png'
+        results = getResults()
+    reponse = make_response(render_template('index.html', async_mode=socket_.async_mode, simulation=url, inProgress=simulationInProgress, fig=figJson, res=results, err=dictError, stickyForm=stickyForm))
+    reponse.headers['Content-Security-Policy'] = "style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com/ajax/libs/plotly.js/2.5.1/plotly.min.js https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js https://fonts.googleapis.com/ https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css"
+    if resetParams == 2:
+        resetParams = 1
+    dictError = {}
+    return reponse
+
+
+@app.route("/startSimulation", methods=["POST"])
+def startSimulation():
+    
+    global dictError
+    global simulationInProgress
+    global stickyForm
+    global resetParams
+    resetParams = 2
+    # genral input
+    stickyForm = request.form.to_dict()
+    tp = request.form.get("takeProfit")
+    sl = request.form.get("stopLoss")
+    # candleSize = request.form.get("candleSize")
+    candleSize = 10
+    dateSimStart = request.form.get("dateSimStart") + " 00:00:00.000000Z"
+    dateSimEnd = request.form.get("dateSimEnd") + " 23:59:59.000000Z"
+    ma = None
+    
+    indicator = request.form.get("indicatorSelect")
+    if indicator == "SMA":
+        ma1 = request.form.get("MA1")
+        ma2 = request.form.get("MA2")
+        try:
+            ma = [int(ma1),int(ma2)]
+        except:
+            return redirect(request.referrer)
+    else: 
+        return redirect(request.referrer)
+    try:
+        tp = float(tp)
+        sl = float(sl)
+        candleSize = int(candleSize)
+    except:
+        return redirect(request.referrer)
+    
+    dictError = checkGeneralInput(tp, sl, candleSize, dateSimStart, dateSimEnd, indicator, ma)
+    
+    tp = tp/100
+    sl = sl/100
+    
+    dictValue = dictError.values()
+    if 'is-invalid' in dictValue:
+        return redirect(request.referrer)
+
+    if dec.export_result != []:
+        dec.export_result = []
+    
+    if not simulationInProgress:
+        resetParams = 0
+        settings.init()
+        dec.resetLists(market)
+        simulationInProgress = True
+        thread = Thread(target=dec.launch, args=(dateSimStart,dateSimEnd,False,sl,tp,candleSize,ma))
+        thread.start()
+    return redirect(request.referrer)
+
+
+
+@app.route("/progress")
+def progress():
+    if settings.progressBar < 60:
+        settings.progressBar += 4
+    return jsonify({'progress': settings.progressBar})
+
+
+@app.route("/resetSimulation")
+def resetSimulation():
+    global simulationInProgress
+    global resetParams
+    
+    if not simulationInProgress:
+        dec.export_result = []
+        resetParams = 1
+    
+    return redirect('/')
+
+
+@app.route("/resetSimulationWithParams")
+def resetSimulationWithParams():
+    global simulationInProgress
+    global resetParams
+    
+    if not simulationInProgress:
+        resetParams = 0
+        dec.export_result = []
+    
+    return redirect('/')
+
+
+def checkGeneralInput(takeprofit, stoploss, candleSize, dateSimStart, dateSimEnd, indicator, ma):
+    dictError = {}
+    # Check if takeprofit and stoploss are between 0 and 100
+    if takeprofit > 100 or takeprofit < 1:
+        dictError['takeProfit'] = 'is-invalid'
+    else :
+        dictError['takeProfit'] = 'is-valid'
+        
+    if stoploss > 100 or stoploss < 1:
+        dictError['stopLoss'] = 'is-invalid'
+    else : 
+        dictError['stopLoss'] = 'is-valid'
+    
+    # if candleSize > 20 or candleSize < 10:
+    #     dictError.append(1)
+    # else :
+    #     dictError.append(0)
+    if dateSimStart > dateSimEnd or dateSimStart < "2022-02-05 00:00:00.000000Z" or dateSimStart > "2022-04-09 23:59:59.000000Z" or dateSimEnd > "2022-04-09 23:59:59.000000Z" or dateSimEnd < "2022-02-05 00:00:00.000000Z":
+        dictError['dateSim'] = 'is-invalid'
+    else :
+        dictError['dateSim'] = 'is-valid'
+    if indicator == "SMA" or indicator == "random" or indicator == "test":
+        dictError['indicator'] = 'is-valid'
+    else:
+        dictError['indicator'] = 'is-invalid'
+        
+    if indicator == "SMA":
+        if ma[0] == ma[1] or ma[0] > ma[1] or ma[0] > 100 or ma[0] < 5 or ma[1] > 105 or ma[1] < 10:
+            dictError['ma'] = 'is-invalid'
+        else:
+            dictError['ma'] = 'is-valid'
+    return dictError
+
+def createFig(prices,orders,mas,periodes,market):
+            
+    prices = dec.sim.histo_prices
+    prices=pd.DataFrame(prices,columns=['price','date'])
+    
+    fig = go.Figure()
+    layout = go.Layout(
+        plot_bgcolor='#efefef',
+        # Font Families
+        font_family='Monospace',
+        font_color='#000000',
+        font_size=20,
+        xaxis=dict(
+            rangeslider=dict(
+                visible=False
+            ))
+    )
+    fig.update_layout(layout)
+    
+    df_order = pd.DataFrame(orders,columns=['date','type','price','amount','duration'])
+    df_order['date'] = pd.to_datetime(df_order['date'])
+
+    df_order_av = df_order[df_order['type'] == 'AV']
+    df_order_va = df_order[df_order['type'] == 'VA']
+    # put in rgbSMA array the rgb values for green and in other index the rgb values for light green
+    rgbSMA = [[0,255,0], [0,200,0]]
+    cpt = 0
+    for p in periodes:
+        df = pd.DataFrame(mas[str(p)], columns=['sma','date'])
+   
+        df['date'] = pd.to_datetime(df['date'])
+        
+        fig.add_trace(
+            go.Scatter(
+                x=df['date'],
+                y=df['sma'],
+                #generate random color
+                line=dict(color=f'rgb({rgbSMA[cpt][0]},{rgbSMA[cpt][1]},{rgbSMA[cpt][2]})', width=2),
+                name='sma'+str(p)
+            )
+        )
+        cpt += 1
+    
+    fig.add_trace(
+        go.Scatter(
+            x=prices['date'],
+            y=prices['price'],
+            line=dict(color="black", width=1),
+            name='price'
+        )
+    )
+    fig.add_trace(
+        go.Scatter(
+            x=df_order_av['date'],y=df_order_av['price'],mode="markers",
+            marker_symbol="triangle-up-dot",
+            marker_line_color="black", marker_color="green",
+            marker_line_width=2, marker_size=25,name="Cycle AV"
+        )
+    )
+    
+    fig.add_trace(
+        go.Scatter(
+            x=df_order_va['date'],y=df_order_va['price'],mode="markers",
+            marker_symbol="triangle-down-dot",
+            marker_line_color="black", marker_color="red",
+            marker_line_width=2, marker_size=25,name="Cycle VA"
+        )
+    )
+    
+    fig.update_layout(title_text="Simulation sur le "+market, title_x=0.5, title_font_size=30)
+    
+    figJson = json.dumps(fig, cls=plotly.utils.PlotlyJSONEncoder)
+    
+    return figJson
+
+
+def getResults():
+    dict = {}
+    
+    dict['profits'] = dec.export_result[0]['profits']
+    dict['losses'] = dec.export_result[0]['losses']
+    dict['strategie'] = dec.export_result[0]['Strategie']
+    dict['totalTrades'] = dec.export_result[0]['Wins'] + dec.export_result[0]['Losses']
+    dict['nbWins'] = dec.export_result[0]['Wins']
+    dict['nbLosses'] = dec.export_result[0]['Losses']
+    dict['winrate'] = round(dec.export_result[0]['winrate']*100)
+    dict['startBalance'] = dec.export_result[0]['StartBalance']
+    dict['endBalance'] = dec.export_result[0]['EndBalance']
+    dict['moneyProfits'] = {}
+    dict['moneyLosses'] = {}
+    for i in dict['startBalance']:
+        for j in dict['profits']:
+            if i == j:
+                dict['moneyProfits'][i] = dict['startBalance'][i] * (round(dict['profits'][j],2) * 0.01)
+        for j in dict['losses']:
+            if i == j:
+                dict['moneyLosses'][i] = dict['startBalance'][i] * (round(dict['losses'][j],2) * 0.01)
+        
+    print(dict['moneyProfits'])
+    print(dict['moneyLosses'])
+    return dict
+
+
+
+# #Route wallet ==> order creation
+# @app.route('/wallet')
+# def wallet():
+#     return render_template('appweb/frontend/wallets.html', async_mode=socket_.async_mode)
+
+# #List of active order
+# @app.route('/cryptolist')
+# def cryptolist():
+#     return render_template('appweb/frontend/cryptolist.html', async_mode=socket_.async_mode)
+
+# #socket connection to the balance updates
+# @socket_.on('my_balance', namespace='/api/v1')
+# def balance(message):
+#     print("BALANCE")
+#     data = getBalance()
+#     emit('balance',{'data': data})
+#     print("DATA",data)
+#     return ''
+
+# #socket route to order creation
+# @socket_.on('my_order', namespace='/api/v1')
+# def myOrder(message):
+#     data = createOrderLimit(message['price'], message['quantity'],message["symbol"],message["side"])
+#     emit('order_placed',{'data': data,'count': session['receive_count']})
+#     return ''
+
+# #Socket route to delete active order
+# @socket_.on('my_delete', namespace='/api/v1')
+# def myOrder(message):
+#     data = deleteOrder(message["id"])
+#     emit('delete',{'data': "delete",'count': session['receive_count']})
+#     print("DATA",data)
+#     return ''
+
+# #Socket route to get active orders
+# @socket_.on('my_orders', namespace='/api/v1')
+# def subscribe(message):
+#     print("BALANCE")
+#     data = getOrders()
+#     emit('orders',{'data': data})
+#     print("orders",data)
+#     return ''
+
+# #Socker connection to ticker pric of btcusdt ==> Testing function
+# @socket_.on('my_sub', namespace='/api/v1')
+# def subscribe(message):
+#     data = getTicker("BTCUSDT")
+#     start = time.time() 
+#     while(True):
+#         #print("TURN " , time.time())
+#         stop = time.time()
+#         data = getTicker("BTCUSDT")
+
+#         start = time.time() 
+#         #print("DATA",data)
+#         emit('ticker',
+#          {'data': data, 'count': session['receive_count']})
+#         socket_.sleep(5)
+
+#     return ''
+
+# #Connection to socket flask
+# @socket_.on('my_event', namespace='/api/v1')
+# def test_message(message):
+#     session['receive_count'] = session.get('receive_count', 0) + 1
+#     emit('my_response',
+#          {'data': "Connected", 'count': session['receive_count']})
+   
+# #Disconnect of flask socket
+# @socket_.on('disconnect_request', namespace='/api/v1')
+# def disconnect_request():
+#     @copy_current_request_context
+#     def can_disconnect():
+#         disconnect()
+
+#     session['receive_count'] = session.get('receive_count', 0) + 1
+#     emit('my_response',
+#          {'data': 'Disconnected!', 'count': session['receive_count']},
+#          callback=can_disconnect)
+
+#Launch socket flask
+if __name__ == '__main__':
+    socket_.run(app, debug=True, port=5001)
\ No newline at end of file
diff --git a/main/main.py b/main/main.py
new file mode 100644
index 0000000..ce1e2a6
--- /dev/null
+++ b/main/main.py
@@ -0,0 +1,4 @@
+from Decision import Decision
+
+dec = Decision("simulated","BTCUSDT")
+dec.launch()
diff --git a/main/orders.py b/main/orders.py
new file mode 100644
index 0000000..1fafaf5
--- /dev/null
+++ b/main/orders.py
@@ -0,0 +1,360 @@
+##
+# @file orders.py
+#
+# @brief Contains main function for order management of HitBTC
+#
+# @section  Author
+# - Created by Lucas Pighini
+
+import threading
+import asyncio
+from time import sleep
+from numpy import diff
+import websocket
+import json
+
+import sys
+import os
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+sys.path.append(os.path.dirname(SCRIPT_DIR))
+
+from APIWrappers.ApiManagementWS import subPrices, subReportOrders, loginAuthWebSocket,loginPublicWebSocket
+from DBManagement.DataManagement import addOrderDB, cancelOrderEntry, updateEndCycle,updateBalance, cancelOrder,getEntryCycleOrder
+from APIWrappers.ApiManagement import createOrderLimit,createStopOrder, deleteOrder
+
+#Class with main functions params for the trades management
+class TradesManagement:
+    def __init__(self,tp,sl):
+        self.active_orders = []
+        self.current_prices = []
+        self.deleted = []
+        self.takeprofit = tp
+        self.stoploss = sl
+        self.lock = threading.Lock()
+        self.limit_stop = 0.8
+        self.balance = [{"currency": "BTC", "available":0.002},
+            {"currency": "USDT", "available":2.02},
+            {"currency": "LUNA", "available":2},
+            {"currency": "MATIC", "available":2}]
+
+    #Check if order is active or not
+    def isActiveOrder(self, order):
+        self.lock.acquire()
+        res = {}
+        for i,o in enumerate(self.active_orders):
+            if(order["id"] == o["id"]):
+                self.lock.release()
+                return True, o,i
+        self.lock.release()
+        res["cycle_status"] = "none"
+        return False, res,None
+
+    #check if order has been deleted before
+    def checkDeleted(self,order):
+        for o in self.deleted:
+            if(order["id"] == o["id"]):
+                print("DELETED")
+                return True
+        print("NOT DELETED")
+        return False
+    
+    def findMatchingCycleOrder(self,order):
+        for i,o in enumerate(self.active_orders):
+            if(o["cycle_id"] == order["cycle_id"] and o["id"] != order["id"]):
+                print(f"MATCHING CYCLE ORDER {o}")
+                return o,i
+        return None,None
+    #Get index of order in array of active orders
+    def get_index_order(self,order):
+        for i,o in enumerate(self.active_orders):
+            if(o["id"] == order["id"]):
+                return i
+        return None
+
+    #Listen via websocket for order changes and manage orders
+    #Can manage multiple orders in multiple markets
+    #If entry filled ==> create 2 exit orders
+    #if entry cancelled ==> end cycle
+    #if exit filled ==> delete matching and end cycle
+    def listenForOrderChanges(self,end):
+        ws = loginAuthWebSocket("NONE","NONE")
+        init = json.loads(ws.recv())
+        subReportOrders(ws)
+        init = json.loads(ws.recv())
+        print(init)
+        #to fix how to end
+        while(end):
+            report = json.loads(ws.recv())
+            print("REPORT")
+            print(report)
+            print(type(report))
+            print(report["params"])
+            print(type(report["params"]))
+            print(len(report["params"]))
+
+            #Check if params contains an order
+            if(len(report["params"])):
+                print("PASSED")
+                for res in [report["params"]]:
+                    if type(res)== list:
+                        res = res[0]
+                    print(res)
+                    status = res["status"]
+                    order = res
+                    print("BEF CHECK")
+                    print(self.active_orders)
+                    is_act , o, idx_act  = self.isActiveOrder(order)
+                    #print return from isAtiveOrder
+                    print(f"IS ACTIVE {is_act}, ORDER {o}, IDX {idx_act}")
+                    is_del = self.checkDeleted(order)
+                    if(status == "new" and is_act == False and is_del == False):
+                        print("ADD ORDER")
+                        id_cycle = addOrderDB(order,True)
+                        entry_order = order
+                        entry_order["cycle_id"]=id_cycle
+                        entry_order["cycle_status"]="start"
+                        self.active_orders.append(entry_order)
+                        print(self.active_orders)
+                        print("ADD ACTIVE")
+                    if(status == "canceled"):
+                        for value in self.active_orders:
+                            if value["id"] == order["id"]:
+                                print("canceled order")
+                                cancelOrderEntry(value["client_order_id"],id_cycle)
+                                self.active_orders.remove(value)
+                                self.deleted.append(value)
+                                break
+                        print(self.active_orders)
+                        print("remove ACTIVE")
+                    if(status == "filled" and is_act == True and o["cycle_status"] == "end"):
+                        print("DELETE MATCHING")
+                        self.lock.acquire()
+                        delete_ord,idx_match =self.findMatchingCycleOrder(o)
+                        idx_act = self.get_index_order(o)
+                        print(f"self ACTIVE MATCHING {self.active_orders}")
+                        print(f"delete {delete_ord}, idx {idx_match}, idx_act {idx_act}")
+                        self.active_orders.pop(idx_match)
+                        idx_act = self.get_index_order(o)
+                        self.active_orders.pop(idx_act)
+                        self.lock.release()
+                        deleteOrder(delete_ord["client_order_id"])
+                    if(status == "filled" and o.get("cycle_status") == "start"):
+                        print("Start cycle")
+                        idx = self.get_index_order(o)
+                        self.active_orders.pop(idx)
+                        print(self.active_orders)
+                        price = float(order['price'])
+                        if (order['side']=="buy"):
+                            side = "sell" 
+                            tp  = price+price*self.takeprofit
+                            sl = price-price*self.stoploss
+                        else :
+                            side = "buy" 
+                            tp  = price-price*self.takeprofit
+                            sl = price+price*self.stoploss
+                        
+                        self.lock.acquire()
+                        res_tp= createOrderLimit(tp,order["quantity"],order["symbol"],side)
+                        res_sl= createStopOrder(sl,order["quantity"],order["symbol"],side,"stopLimit",sl)
+                        id_cycle = 0
+                        res_tp["cycle_order"] = "takeProfit"
+                        res_sl["cycle_order"] = "stopLoss"
+                        
+
+                        res_tp["cycle_id"] = o["cycle_id"]
+                        res_sl["cycle_id"] = o["cycle_id"]
+
+                        res_tp["cycle_status"] = "end"
+                        res_sl["cycle_status"] = "end"
+                        res_tp["price_start"] = price
+                        res_sl["price_start"] = price
+
+                        self.active_orders.append(res_tp)
+                        self.active_orders.append(res_sl)
+                        self.lock.release()
+
+                        # id_order_tp = addOrderDB(res_tp,False)
+                        # id_order_sl = addOrderDB(res_sl,False)
+                        print(self.active_orders)
+                        print("END START CYCLE")
+                        updateEndCycle(res_tp,res_sl,id_cycle)
+
+    #Check if is active and then check cycle_satus
+    def isEndCycle(self,order):
+        for o in self.active_orders:
+            if(order["id"] == o["id"]):
+                if(o["cycle_status"] == "end"):
+                    return True
+        return False
+    #Not working, because there is some pair that doesnt exist ==> add a list of non existing maybe
+    def createCyclesPair(self):
+        base = self.balance[0]["currency"]
+        cryptos = []
+        for i in range(len(self.balance[1:])):
+            print("BASE ",base)
+            for d in self.balance[i+1:]:
+                print(f"END " + d["currency"])
+                cryptos.append(base+d["currency"])
+            base = self.balance[i+1]["currency"]
+        print(cryptos)
+
+    #Switch orders when stop is reached
+    #Limit become stop and stop automaticaly become limit
+    def switchOrderCycle(self,order):
+        print("switching")
+        for i,o in enumerate(self.active_orders):
+            print("IDOS")
+            print(o["cycle_id"])
+            print(order["cycle_id"])
+            self.lock.acquire()
+
+            if(o["cycle_id"]== order["cycle_id"] and o["client_order_id"]!=order["client_order_id"]):
+                idx = self.get_index_order(o)
+                to_del =self.active_orders.pop(idx)
+                self.deleted.append(to_del)
+                deleteOrder(to_del["client_order_id"])
+                deleteOrder(order["client_order_id"])
+                cancelOrder(to_del["client_order_id"])
+                cancelOrder(order["client_order_id"])
+                self.lock.release()
+                break
+
+        if order["type"] == "stopLimit":
+            stop =  order 
+            limit = to_del
+        else:
+            stop =  to_del 
+            limit = order
+
+        self.lock.acquire()
+
+        new_stop = createStopOrder(limit["price"],limit["quantity"],limit["symbol"],limit["side"],"stopLimit",limit["price"])
+        new_lim = createOrderLimit(stop["price"],stop["quantity"],stop["symbol"],stop["side"])
+        
+        if(limit["cycle_order"]== "takeProfit"):
+            tp = new_lim
+            sl = new_stop
+        else:
+            tp = new_stop
+            sl = new_lim
+        print("CREATE new switch")
+        print(f"sl {sl} tp {tp}")
+        tp["cycle_order"] = "takeProfit"
+        sl["cycle_order"] = "stopLoss"
+        tp["cycle_status"] = "end"
+        sl["cycle_status"] = "end"
+        tp["price_start"] = to_del["price_start"]
+        sl["price_start"] = to_del["price_start"]
+        tp["cycle_id"] = order["cycle_id"]
+        sl["cycle_id"] = order["cycle_id"]
+        self.active_orders.append(sl)
+        self.active_orders.append(tp)
+        self.lock.release()
+
+        updateEndCycle(tp,sl,order["cycle_id"])
+
+    
+    #Check status of order stop
+    #if coming at 80% of stop order, activate switch of order
+    def checkStatusOrderStop(self,order,price,index_order):
+        order_price = float(order["price"])
+        start_price = float(order["price_start"])
+        print(f"index_order {index_order}")
+        print(f"ENTERED CHECK STATUS ORDER STOP {order_price}")
+        if(order["side"]=="sell"):
+            if(order["cycle_order"] == "stopLoss"):
+                diff_start = start_price-price
+                diff_order = start_price-order_price
+                #print stop loss price formatted
+                print(f"1 start {start_price}")
+                print(f"1 Price {price}")
+                print(f"1 Order price {order_price}")
+                print(f"1 Diff start {diff_start} diff order {diff_order}")
+                #if current price is at 80% of the stop loss price
+                
+                print(f"1 Price {diff_start} >= {diff_order*self.limit_stop}")
+                if(diff_start >= diff_order*self.limit_stop):
+                    ord = self.active_orders.pop(index_order)
+                    print(f"deleted order {ord}")
+                    self.deleted.append(ord)
+                    print("Switch 1")
+                    self.switchOrderCycle(ord)
+            if (order["cycle_order"] == "takeProfit"):
+                diff_start = price-start_price
+                diff_order = order_price-start_price
+                #print stop loss price formatted
+                print(f"2 start price {start_price}")
+                print(f"2 Price {price}")
+                print(f"2 Order price {order_price}")
+                print(f"2 Diff start {diff_start} diff order {diff_order}")
+                #if current price is at 80% of the stop loss price
+                
+                print(f"2 Price {diff_start} >= {diff_order*self.limit_stop}")
+                if(diff_start >= diff_order*self.limit_stop):
+                    ord = self.active_orders.pop(index_order)
+                    self.deleted.append(ord)
+                    print("Switch 2")
+                    self.switchOrderCycle(ord)
+        else:
+            if(order["cycle_order"] == "stopLoss"):
+                diff_start = price-start_price
+                diff_order = order_price-start_price
+                #print stop loss price formatted
+                print(f"3 start price {start_price}")
+                print(f"3 Price {price}")
+                print(f"3 Order price {order_price}")
+                print(f"3 Diff start {diff_start} diff order {diff_order}")
+                #if current price is at 80% of the stop loss price
+                
+                print(f"3 Price {diff_start} >= {diff_order*self.limit_stop}")
+                if(diff_start >= diff_order*self.limit_stop):
+                    ord = self.active_orders.pop(index_order)
+                    self.deleted.append(ord)
+                    print("Switch 3" )
+                    self.switchOrderCycle(ord)
+            if (order["cycle_order"] == "takeProfit"):
+                diff_start = start_price-price
+                diff_order = start_price-order_price
+                #print stop loss price formatted
+                print(f"4 start price {start_price}")
+                print(f"4 Price {price}")
+                print(f"4 Order price {order_price}")
+                print(f"4 Diff start {diff_start} diff order {diff_order}")
+                #if current price is at 80% of the stop loss price
+                
+                print(f"4 Price {diff_start} >= {diff_order*self.limit_stop}")
+                if(diff_start >= diff_order*self.limit_stop):
+                    ord = self.active_orders.pop(index_order)
+                    self.deleted.append(ord)
+                    print("Switch 4")
+                    self.switchOrderCycle(ord)
+
+    #Use public websocket of HitBTC to get prices ticker for multiple markets
+    #And check status order stop with price that we get
+    def listenForPrices(self,end):
+        ws = loginPublicWebSocket()
+        cryptos= ["LUNABTC","BTCUSDT","MATICBTC", "LUNAUSDT","MATICUSDT"]
+        subPrices(cryptos,ws)
+        validation = ws.recv()
+        print("val :" + str(json.loads(validation)))
+        while(end):
+            res = json.loads(ws.recv())
+            symb = list(res["data"].keys())[0]
+            datas = res["data"]
+            for order in self.active_orders:
+                if order["symbol"] == symb and order["type"]=="stopLimit":
+                    print(f"order in listen for prices {order}")
+                    self.checkStatusOrderStop(order,float(datas[symb]["c"]),self.get_index_order(order))
+                
+    #Launch cycle management for stop orders in a thread
+    def manageCycle(self):
+        a_thread = threading.Thread(target=self.listenForPrices, args=[True])
+        a_thread.start()
+
+    #Launch order management for cycle entry and exit in a thread
+    def manageOrders(self):
+        a_thread = threading.Thread(target=self.listenForOrderChanges, args=[True])
+        a_thread.start()
+    
+  
diff --git a/main/settings.py b/main/settings.py
new file mode 100644
index 0000000..87bf53a
--- /dev/null
+++ b/main/settings.py
@@ -0,0 +1,3 @@
+def init():
+    global progressBar
+    progressBar = 0
\ No newline at end of file
diff --git a/main/simulation.py b/main/simulation.py
new file mode 100644
index 0000000..25580c6
--- /dev/null
+++ b/main/simulation.py
@@ -0,0 +1,549 @@
+##
+# @file simulation.py
+#
+# @brief Contains main functions for the simulation of a tradding app
+#
+# @section  Author
+# - Created by Lucas Pighini
+
+import asyncio
+from symtable import Symbol
+from matplotlib.cbook import print_cycles
+from matplotlib.pyplot import get
+import websockets
+import matplotlib.pyplot as plt
+from scipy import interpolate
+import threading
+import numpy as np
+import pandas as pd
+import json
+import ast
+import time
+from scipy.interpolate import interp1d
+from scipy.interpolate import lagrange
+from numpy.polynomial.polynomial import Polynomial
+import datetime
+from datetime import datetime as dt
+import random
+import numpy.polynomial.polynomial as poly
+import pickle
+
+import settings
+import sys
+import os
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+sys.path.append(os.path.dirname(SCRIPT_DIR))
+
+from APIWrappers.CryptoDatas import format_prices
+from DBManagement.DataManagement import export_Simulation, getHistoCandles, getHistoPrices
+from others.plotting_lib import plotCandles
+
+#Class contains function and param for the simulation of 1 market with order management
+class Simulation:
+    def __init__(self,sl,tp, market,base, target):
+        self.strategie = "Doc simulus"
+        self.histo_prices= []
+        self.histo_candles= []
+        self.symbols = []
+        self.market = market
+        self.balance = {"USDT":20000, "BUSD":20000,"LTC":200,"XRP":2000,"BNB":200,"ETH":1,"BTC":0.5}
+        self.histo_orders = []
+        self.active_orders = []
+        self.winsAV = []
+        self.lossAV = []
+        self.winsVA = []
+        self.lossVA = []
+        self.end_forced_cycle= []
+        self.cycles = []
+        self.datetimeTicker = 0
+        self.rate = 0.0009
+        self.indexTicker = 0
+        self.priceTicker= 0
+        self.running = False
+        self.isActive = False
+        self.start_time = None
+        self.end_Active = 0
+        self.base = base
+        self.target = target
+
+    #Get closing prices and date from histo_candles into 1 list
+    def reformatPrices(self):
+        print("REFORMAT PRICES")
+        self.getHistoCandles()
+        res = []
+        for p in self.histo_candles:
+            res.append([json.loads(p[0])["Close"],p[1]]) 
+        #print(res[:10])   
+        res = pd.DataFrame(res, columns = ['Price','Date'])
+        res.plot(x='Date', y='Price')
+        plt.title("5Min average price")
+        plt.show()
+        return res
+    
+    #Format date to timestamp
+    def formatDate(self,date):
+        date = date.split(".")
+        element = dt.strptime(date[0],"%Y-%m-%d %H:%M:%S")
+        tuple = element.timetuple()
+        timestamp = time.mktime(tuple)
+        return timestamp
+
+    #get balance for market
+    def getBalanceForMarket(self,currency):
+        return self.balance[currency]
+
+    #plot polynomial func ==> documentation
+    def plotFunc(self,poly,xs,ys,echant_x, new_points,high,low):
+        x_new = np.arange(0, 3700, 60)
+        cpt =0
+        plt.scatter(xs, ys, label='data')
+        plt.scatter(echant_x, new_points, label='data')
+        plt.plot(x_new, Polynomial(poly.coef[::-1])(x_new), label='Polynomial')
+
+    #Reset simul param 
+    def resetSimul(self,sl, tp, market,base, target):
+        self.active_orders = []
+        self.histo_orders = []
+        self.winsAV = []
+        self.lossAV = []
+        self.winsVA = []
+        self.lossVA = []
+        self.lossAV= []
+        self.end_forced_cycle = []
+        self.cycles = []
+        self.sl = sl
+        self.tp = tp
+        self.rate = 0.0009
+        self.datetimeTicker = 0
+        self.avgtime_order = 0
+        self.indexTicker = 0
+        self.priceTicker= 0
+        self.running = False
+        self.isActive = False
+        self.start_time = None
+        self.end_Active = 0
+        self.base = base
+        self.target = target
+        self.market = market
+        self.start_time =dt.now()
+
+
+    #Get ochl candle and polynomial transform to get a price ticker and a given time periode
+    def calcOCLH(self,slices_sec,periode_base,format,symbol,show_graph,dateStart,dateEnd):
+        random.seed(dt.now())
+        res=[]
+        echant_x =[]
+        
+        for i in range(1,int(periode_base/slices_sec)):
+            echant_x.append(i*slices_sec)
+        if format == True:
+            candles = format_prices("simul")
+        else:
+            self.histo_candles = getHistoCandles(symbol,dateStart, dateEnd)
+            candles = self.histo_candles
+        pourcentage = settings.progressBar 
+        for c in candles:
+            xs=[]
+            ys=[]
+            # print(c)
+            date= c[1]
+            
+            
+            currentDate = dt.strptime(date,"%Y-%m-%d %H:%M:%S.%fZ")
+
+            if format== False:
+                date =self.formatDate(date)
+                c = json.loads(c[0])
+                start = c["Open"]
+
+            else:
+                print(type(c[0]))
+                #str to dict
+                c = json.loads(c[0])
+                start = c["Open"]
+                
+            
+            tmpDateStart = dt.strptime(dateStart,"%Y-%m-%d %H:%M:%S.%fZ")
+            tmpDateEnd = dt.strptime(dateEnd,"%Y-%m-%d %H:%M:%S.%fZ")
+            totalDuration = (tmpDateEnd - tmpDateStart).total_seconds()
+            elapsedDuration = (currentDate - tmpDateStart).total_seconds()
+            
+            settings.progressBar = pourcentage + (elapsedDuration / totalDuration) * (95-pourcentage)
+            # print(percentage)
+            #print(f"DATE Candle : {dt.fromtimestamp(date)}")
+
+            date = dt.fromtimestamp(date) - datetime.timedelta(0,periode_base)
+            #print(f"DATE calc : {date}")
+
+            res.append((start,str(date)))
+
+            xs.append(0)
+            ys.append(start)
+            end = c["Close"]
+            xs.append(periode_base)
+            ys.append(end)
+            high = c["High"]
+            low = c["Low"]
+            #get random between low high
+            rand_1 = (low,random.randint(1,periode_base))
+            xs.append(rand_1[1])
+            ys.append(rand_1[0])
+            rand_2 = (high,random.randint(1,periode_base))
+            xs.append(rand_2[1])
+            ys.append(rand_2[0])
+            poly = lagrange(xs, ys)
+            func = Polynomial(poly.coef[::-1])
+            new_points = func(np.array(echant_x))
+            
+            
+            
+            for i,p in enumerate(new_points):
+                #print(f"Old : {p}")
+                new_points[i] = max(low,min(high,p))
+            # print(type(restmp))
+            # print(restmp)
+            for p in new_points:
+                date = date+datetime.timedelta(0,slices_sec)
+                res.append((p,str(date)))
+                #print(f"New : {p} {date}")
+                #time.sleep(0.1)
+            #self.plotFunc(poly,xs,ys,echant_x,new_points,high,low)
+        if show_graph == True:
+            self.plotPrice(res)
+            
+        # self.plotPrice(res)
+        self.histo_prices = res
+        #print(self.histo_prices)
+
+    #Create a simulated order
+    def placeOrder(self,price,amount,date,type_ord,duration):
+        #Place an order
+        if self.end_Active < self.indexTicker:
+            #print("No active order")
+            self.isActive = True
+            order = {"price":price,"amount":amount,"type":type_ord , "date":date ,"base":self.base,"target":self.target,"duration":duration}
+            self.end_Active = self.checkStatusOrder(order)
+            self.active_orders.append([date,type_ord,price,amount,duration])
+            # print("End active order : ",self.end_Active)
+            # print("SL : ",self.sl)
+            # print("TP : ",self.tp)
+            
+            return self.end_Active
+        else:
+            # print("Can't place, 1 order is still active")
+            # print("End active : ",self.end_Active)
+            return self.end_Active
+        #create thread to manage orders
+        
+    #Check is order placed is winning or not
+    def checkStatusOrder(self, order):
+        print(order)
+        #order = ast.literal_eval(order)
+        if order["type"] =="AV":
+            end= self.isWinningAV(order)
+        if order["type"] =="VA":
+            end= self.isWinningVA(order)
+        return end
+        
+
+    def calculateUpRatedPrice(self,price,rate):
+        return price+price*rate
+
+    def calculateDownRatedPrice(self,price,rate):
+        return price-price*rate
+    
+    def checkIfStopUpReached(self, orderPrice, currentPrice,rate):
+        if currentPrice >= self.calculateUpRatedPrice(orderPrice,rate):
+            return True
+        else:
+            return False
+
+    def checkIfStopDownReached(self, orderPrice, currentPrice,rate):
+        if currentPrice <= self.calculateDownRatedPrice(orderPrice,rate):
+            return True
+        else:
+            return False
+
+    #plot price ==> documentation 
+    def plotPrice(self,price):
+        res = pd.DataFrame(price, columns = ['Price','Date'])
+        res['Date']= pd.to_datetime(res['Date'])
+        #print(res)
+        res.plot(x='Date', y='Price')
+        plt.title(f"Polynomial price {self.market}")
+        plt.show()
+
+    #End and export result of simul
+    def endSimulation(self,mas):
+        print("END SIMULATION")
+        end_balance,losses,profits = self.calculateTotalProfit()
+        #Calculate time duration of simulation
+        print(f"Total time : {dt.now() - self.start_time}")
+        return self.exportResults(end_balance,losses,profits,mas)
+
+    #Export profit and other info to mongodb
+    def exportResults(self,end_balance,losses,profits,mas):
+        nb_winAV = len(self.winsAV)
+        nb_winVA = len(self.winsVA)
+        nb_lossAV = len(self.lossAV)
+        nb_lossVA =  len(self.lossVA)
+        for e in self.end_forced_cycle:
+            if e["type"]=="AV" and float(e[1])>float(e['price']):
+                nb_winAV+1
+                continue
+
+            elif e["type"]=="VA" and float(e[1])>float(e['price']):
+                nb_winVA+=1
+                continue
+
+            elif e["type"]=="AV":
+                nb_lossAV+=1
+                continue
+
+            elif e["type"]=="VA":
+                nb_lossVA+=1
+                continue
+        print(f"Total win AV : {nb_winAV}")
+        print(f"Total win VA : {nb_winVA}")
+        print(f"Total loss AV : {nb_lossAV}")
+        print(f"Total loss VA : {nb_lossVA}")
+        
+        win_tot= nb_winVA+nb_winAV
+        loss_tot= nb_lossVA+nb_lossAV
+
+        print(f"Total win : {win_tot}")
+        print(f"Total loss : {loss_tot}")
+        if loss_tot+win_tot == 0:
+            winrate = 0
+        else:
+            winrate = win_tot/(loss_tot+win_tot)
+        res = {"Strategie":self.strategie, "StartBalance":self.balance, "market":self.market,
+        "base":self.base, "target":self.target,
+        "EndBalance":end_balance, "Wins":win_tot, "Losses":loss_tot,
+        "winrate":winrate, "StopLoss":self.sl, "MAS" : mas,
+        "TakeProfit":self.tp, "AV_wins" : nb_winAV , "VA_wins" : nb_winVA, "AV_loss" : nb_lossAV,
+        "VA_loss" : nb_lossVA,"avg_time_order":self.avgtime_order,
+        "losses": losses, "profits":profits}
+        print(res)
+        settings.progressBar = 100
+        return res
+
+    #Calculate profit of the simulation
+    def calculateTotalProfit(self):
+        total = dict.copy(self.balance)
+        wins = self.winsAV +self.winsVA
+        losses = self.lossAV +self.lossVA
+        avg_time = 0
+        for w in wins:
+            entry = w[0]
+            amount = float(entry["amount"])
+            price_entry = float(entry["price"])
+            price_exit = float(w[1])
+            avg_time += float(entry["duration"])
+            if(entry['type']== "AV"):
+                total[entry["base"]] -= amount * self.rate
+                total[entry["target"]] += self.ratedCalc(amount*price_exit,self.rate)-amount*price_entry
+            else:
+                total[entry["base"]] -= amount * self.rate
+                total[entry["target"]] += amount*price_entry-self.ratedCalc(amount*price_exit,self.rate)
+
+        for l in losses:
+            entry = l[0]
+            amount = float(entry["amount"])
+            price_entry = float(entry["price"])
+            price_exit = float(l[1])
+            avg_time += float(entry["duration"])
+
+            if(entry['type']== "AV"):
+                total[entry["base"]] -= amount*self.rate
+                total[entry["target"]] -= amount*price_entry-self.ratedCalc(amount*price_exit,self.rate)
+            else:
+                total[entry["target"]] -= amount*price_exit-self.ratedCalc(amount*price_entry,self.rate)
+                total[entry["base"]] -= amount*self.rate
+
+        for exit in self.end_forced_cycle:
+            entry = exit[0]
+            amount = float(entry["amount"])
+            price_entry = float(entry["price"])
+            price_exit = float(exit[1])
+            avg_time += float(entry["duration"])
+
+            if(entry['type']== "AV"):
+                total[entry["base"]] -= amount*self.rate
+                total[entry["target"]] += self.ratedCalc(amount*price_exit,self.rate)-amount*price_entry
+            else:
+                total[entry["target"]] += self.ratedCalc(amount*price_entry)-amount*price_exit
+                total[entry["base"]] -= amount*self.rate
+
+        print(f"Balance total : {total}")
+        print(f"Balance base : {self.balance}")
+        profits = {}
+        losses= {}
+        for b in self.balance.keys():
+            start  = self.balance.get(b)
+            end = total.get(b)
+            diff = end - start
+            #print(f"{end-start}")
+            if end > start:
+                profits[b] = diff* 100/ start
+                print(f"{b} has a {profits[b]}% gains ")
+
+            elif end < start:
+                losses[b] = diff* 100/ start
+                print(f"{b} has a {losses[b]}% loss ")
+
+
+                
+
+        lenWinAv = len(self.winsAV)
+        lenWinVa = len(self.winsVA)
+        lenLossAv = len(self.lossAV)
+        lenLossVa = len(self.lossVA)
+        print(f"Total win AV : {lenWinAv}")
+        print(f"Total win VA : {lenWinVa}")
+        print(f"Total loss AV : {lenLossAv}")
+        print(f"Total loss VA : {lenLossVa}")
+        if (lenWinAv+lenWinVa+lenLossAv+lenLossVa) > 0:
+            self.avgtime_order = avg_time/(lenWinAv+lenWinVa+lenLossAv+lenLossVa)
+        else:
+            self.avgtime_order = 0
+        print(f"Average time Order in minutes: {self.avgtime_order}")
+        return total,losses,profits
+
+
+    def ratedCalc(self,val,rate):
+        return val-(val*rate)
+
+    #Check if exit order of AV cycle is winning
+    def isWinningAV(self,ord):
+        #print("ENTERED CHECK AV")
+        cpt = self.indexTicker
+        cycle_ended = False
+        while self.checkDuration(ord,cpt):
+            if(cpt>=len(self.histo_prices)):
+                cycle_ended = True
+                break
+            histo_price = self.histo_prices[cpt][0]            
+            if(self.checkIfStopUpReached(ord['price'],histo_price,self.tp)==True):
+                m_between =  self.minutesBetween(ord['date'],self.histo_prices[cpt][1])
+                #add h_between to order
+                ord["duration"] = m_between
+                self.winsAV.append([ord,histo_price])
+                #print(f"Winning cycle AV => Price Enter : {ord['price']} & Price Exit : {histo_price} & TP : {self.tp*100}%  ")
+                cycle_ended = True
+                break
+            elif (self.checkIfStopDownReached(ord['price'],self.histo_prices[cpt][0],self.sl)==True):
+                m_between =  self.minutesBetween(ord['date'],self.histo_prices[cpt][1])
+                #add h_between to order
+                ord["duration"] = m_between
+                self.lossAV.append([ord,histo_price])
+                #print(f"Loosing cycle AV => Price Enter : {ord['price']} & Price Exit : {histo_price} & SL : {self.sl*100}%")
+                cycle_ended = True
+                break
+            cpt+=1
+        if cycle_ended == False:
+            m_between =  self.minutesBetween(ord['date'],self.histo_prices[cpt][1])
+            ord["duration"] = m_between
+            self.end_forced_cycle.append([ord,histo_price])
+            #print(f"24h Limit Passed AV => Price Enter : {ord['price']} & Price Exit : {histo_price}")
+        return cpt
+
+    #Check duration order for daily and check end if GTC
+    def checkDuration(self,ord,cpt):
+        if ord['duration']== "daily":
+            if self.hoursBetween(ord['date'],self.histo_prices[cpt][1]) <24:
+                return True
+        if ord['duration'] == "GTC":
+            if cpt <= len(self.histo_prices):
+                return True
+        return False
+
+    #Check if exit order of VA cycle is winning
+    def isWinningVA(self,ord):
+        #print("ENTERED CHECK VA")
+
+        cpt = self.indexTicker
+        cycle_ended = False
+        
+        while self.checkDuration(ord,cpt):
+            if(cpt>=len(self.histo_prices)):
+                cycle_ended = True
+                break
+            histo_price = self.histo_prices[cpt][0]
+            if(self.checkIfStopDownReached(ord['price'],histo_price,self.tp)==True):
+                m_between =  self.minutesBetween(ord['date'],self.histo_prices[cpt][1])
+                #add h_between to order
+                ord["duration"] = m_between
+                self.winsVA.append([ord,histo_price])
+                cycle_ended = True
+                #print(f"Winning cycle VA => Price Enter : {ord['price']} & Price Exit : {histo_price} & TP : {self.tp*100}%")
+
+                break
+            elif (self.checkIfStopUpReached(ord['price'],self.histo_prices[cpt][0],self.sl)==True):
+                m_between =  self.minutesBetween(ord['date'],self.histo_prices[cpt][1])
+                #add h_between to order
+                ord["duration"] = m_between
+                self.lossVA.append([ord,histo_price])
+                cycle_ended = True
+                #print(f"Loosing cycle VA => Price Enter : {ord['price']} & Price Exit : {histo_price} & SL : {self.sl*100}%")
+
+                break
+            cpt+=1
+        if cycle_ended == False:
+            m_between =  self.minutesBetween(ord['date'],self.histo_prices[cpt][1])
+            #add h_between to order
+            ord["duration"] = m_between
+            self.end_forced_cycle.append([ord,histo_price])
+            #print(f"Time Limit Passed VA => Price Enter : {ord['price']} & Price Exit : {histo_price}")
+        return cpt
+
+
+    #hours between dates of orders ==> used if gtc
+    def hoursBetween(self,d1, d2):
+        d1 = dt.strptime(d1, "%Y-%m-%d %H:%M:%S")
+        d2 = dt.strptime(d2, "%Y-%m-%d %H:%M:%S")
+        tot_sec = (d2 - d1).total_seconds()
+        hours = divmod(tot_sec, 3600)[0]  
+        return hours
+    #minutes between two dates      
+    def minutesBetween(self,d1, d2):
+        d1 = dt.strptime(d1, "%Y-%m-%d %H:%M:%S")
+        d2 = dt.strptime(d2, "%Y-%m-%d %H:%M:%S")
+        tot_sec = (d2 - d1).total_seconds()
+        minutes = divmod(tot_sec, 60)[0]  
+        return minutes
+        
+    #first way to interpolate ohlc => via panda => not used
+    def polynomialTransformPrice(self,period):
+        #Transform price to polynomial
+        self.histo_prices = getHistoPrices()
+        prices = self.reformatPrices()
+        # interpolation function from scipy
+        prices['Date'] = pd.to_datetime(prices['Date'])
+        prices = prices.set_index('Date').resample('1S').mean()
+        self.histo_prices = prices.interpolate(method='polynomial', order=4)
+
+    #not used
+    async def price(self,websocket,path):
+        #print("ENTERED PRICE")
+        for i,p in enumerate(self.histo_prices):
+            await websocket.send(json.dumps([p[0],p[1]]))
+            self.priceTicker = p
+            self.datetimeTicker = p[1]
+            self.indexTicker+=1
+            #await asyncio.sleep(1)
+        #print(f"last date : {self.histo_prices[self.indexTicker-1][1]}")
+        print("END SIMULATION")
+        self.endSimulation()
+
+
+    #Start simulation with lagrange or polynomial with panda
+    def startsimulation(self,type_pol,symbol,show_graph,dateStart,dateEnd):
+        if(type_pol == "lagrange"):
+            self.calcOCLH(10,300,False,symbol,show_graph,dateStart,dateEnd)
+        else:
+            self.polynomialTransformPrice(10)
+        print("START SIMULATION")
+        self.start_time = dt.now()
+
diff --git a/main/static/.DS_Store b/main/static/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..c656cf55b1732e78b389c0d67dcc37ffcebf453b
GIT binary patch
literal 8196
zcmZQzU|@7AO)+F(kYHe7;9!8z0^AH(0Z1N%F(jFwB77k87#IW?7)lt5J#+GtlXCKt
zpmL+sXb6mkz-S1JhQMeDjE2DA3IRrlb2xC+`w-btax?@+LtsRP0H}OWfVAxy9H4Xq
zga%15FfuTJy8w&~3@oq!Vg&aC7(j9$tsokt6-0xyGBAQzU^Bp485p5j8NuBUkUjyh
zQH%^=?F@`yn?d4W?F@`yn;94wA=()jp*Ax@dnk+$?F@_%?F@`y+rdVT5~Cq78Ukn`
z0P4H5F(fh+GZZtVqV?Ye7#J9385kJ!{(}KnCyLsn^5Oz$Uw?a2K~83IiGjg2MkZz!
zRyKAHb`EZi*x-!(^5BxhlG0+Q#G+^rFC;%dCke(*ObW|PEsqxvan8>xNzBYkEdnVC
z&P+*7N-T;A&&*57FL%l>%}Xf;>xD{iaB^_Q3y4=&8ylPHD43hq>L^rO8X4#)n3$Q=
z)^c))D(hPZ#b@W_=H+*S9Stuv7<eIkIN8O(z<}bVvf!e;ocz3Wa1jM6*OI|OV}vxU
z0V-j9(Sn7A0jdruNOsUYNF=JOjZI8+6pZkO3CPbN??Fpaj4<hDK=OA^x?yl~er^Fg
z#E|52^Icq^(a-Vm<&y5Ti;p-W>&?wi!7E>of!l1fc;IEoWXNSmX9xz<r3^U?i3}wS
znGE?1d1x`S3K28^|1&T!;L$lu;tG!s(L#}lAq!=I4wS(`v5lO;ks=zDKtR<fhz3=o
zAR1H)GlHsPPzoBY|B*s#lsOs#Ln{QBA<mTm_5WQN7;ugMLsX5DqaiRF0>d%{7+G9`
zU7R2lI#v&Y`r4p|Kmt^jP(y$bGN}kw&By@h$ulxQdh(1644^i|=s*BCbViBM5Ez&c
F006wjA1MF;

literal 0
HcmV?d00001

diff --git a/main/static/assets/favicon.ico b/main/static/assets/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..9356735ca323587d5730a74bd017d9cb2153479b
GIT binary patch
literal 23462
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

literal 0
HcmV?d00001

diff --git a/main/static/css/styles.css b/main/static/css/styles.css
new file mode 100644
index 0000000..90a7412
--- /dev/null
+++ b/main/static/css/styles.css
@@ -0,0 +1,10839 @@
+@charset "UTF-8";
+/*!
+* Start Bootstrap - Scrolling Nav v5.0.6 (https://startbootstrap.com/template/scrolling-nav)
+* Copyright 2013-2023 Start Bootstrap
+* Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-scrolling-nav/blob/master/LICENSE)
+*/
+/*!
+ * Bootstrap  v5.2.3 (https://getbootstrap.com/)
+ * Copyright 2011-2022 The Bootstrap Authors
+ * Copyright 2011-2022 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */
+:root {
+  --bs-blue: #0d6efd;
+  --bs-indigo: #6610f2;
+  --bs-purple: #6f42c1;
+  --bs-pink: #d63384;
+  --bs-red: #dc3545;
+  --bs-orange: #fd7e14;
+  --bs-yellow: #ffc107;
+  --bs-green: #198754;
+  --bs-teal: #20c997;
+  --bs-cyan: #0dcaf0;
+  --bs-black: #000;
+  --bs-white: #fff;
+  --bs-gray: #6c757d;
+  --bs-gray-dark: #343a40;
+  --bs-gray-100: #f8f9fa;
+  --bs-gray-200: #e9ecef;
+  --bs-gray-300: #dee2e6;
+  --bs-gray-400: #ced4da;
+  --bs-gray-500: #adb5bd;
+  --bs-gray-600: #6c757d;
+  --bs-gray-700: #495057;
+  --bs-gray-800: #343a40;
+  --bs-gray-900: #212529;
+  --bs-primary: #0d6efd;
+  --bs-secondary: #6c757d;
+  --bs-success: #198754;
+  --bs-info: #0dcaf0;
+  --bs-warning: #ffc107;
+  --bs-danger: #dc3545;
+  --bs-light: #f8f9fa;
+  --bs-dark: #212529;
+  --bs-primary-rgb: 13, 110, 253;
+  --bs-secondary-rgb: 108, 117, 125;
+  --bs-success-rgb: 25, 135, 84;
+  --bs-info-rgb: 13, 202, 240;
+  --bs-warning-rgb: 255, 193, 7;
+  --bs-danger-rgb: 220, 53, 69;
+  --bs-light-rgb: 248, 249, 250;
+  --bs-dark-rgb: 33, 37, 41;
+  --bs-white-rgb: 255, 255, 255;
+  --bs-black-rgb: 0, 0, 0;
+  --bs-body-color-rgb: 33, 37, 41;
+  --bs-body-bg-rgb: 255, 255, 255;
+  --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
+  --bs-body-font-family: var(--bs-font-sans-serif);
+  --bs-body-font-size: 1rem;
+  --bs-body-font-weight: 400;
+  --bs-body-line-height: 1.5;
+  --bs-body-color: #212529;
+  --bs-body-bg: #fff;
+  --bs-border-width: 1px;
+  --bs-border-style: solid;
+  --bs-border-color: #dee2e6;
+  --bs-border-color-translucent: rgba(0, 0, 0, 0.175);
+  --bs-border-radius: 0.375rem;
+  --bs-border-radius-sm: 0.25rem;
+  --bs-border-radius-lg: 0.5rem;
+  --bs-border-radius-xl: 1rem;
+  --bs-border-radius-2xl: 2rem;
+  --bs-border-radius-pill: 50rem;
+  --bs-link-color: #0d6efd;
+  --bs-link-hover-color: #0a58ca;
+  --bs-code-color: #d63384;
+  --bs-highlight-bg: #fff3cd;
+}
+
+*,
+*::before,
+*::after {
+  box-sizing: border-box;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+  :root {
+    scroll-behavior: smooth;
+  }
+}
+
+body {
+  margin: 0;
+  font-family: var(--bs-body-font-family);
+  font-size: var(--bs-body-font-size);
+  font-weight: var(--bs-body-font-weight);
+  line-height: var(--bs-body-line-height);
+  color: var(--bs-body-color);
+  text-align: var(--bs-body-text-align);
+  background-color: var(--bs-body-bg);
+  -webkit-text-size-adjust: 100%;
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+hr {
+  margin: 1rem 0;
+  color: inherit;
+  border: 0;
+  border-top: 1px solid;
+  opacity: 0.25;
+}
+
+h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {
+  margin-top: 0;
+  margin-bottom: 0.5rem;
+  font-weight: 500;
+  line-height: 1.2;
+}
+
+h1, .h1 {
+  font-size: calc(1.375rem + 1.5vw);
+}
+@media (min-width: 1200px) {
+  h1, .h1 {
+    font-size: 2.5rem;
+  }
+}
+
+h2, .h2 {
+  font-size: calc(1.325rem + 0.9vw);
+}
+@media (min-width: 1200px) {
+  h2, .h2 {
+    font-size: 2rem;
+  }
+}
+
+h3, .h3 {
+  font-size: calc(1.3rem + 0.6vw);
+}
+@media (min-width: 1200px) {
+  h3, .h3 {
+    font-size: 1.75rem;
+  }
+}
+
+h4, .h4 {
+  font-size: calc(1.275rem + 0.3vw);
+}
+@media (min-width: 1200px) {
+  h4, .h4 {
+    font-size: 1.5rem;
+  }
+}
+
+h5, .h5 {
+  font-size: 1.25rem;
+}
+
+h6, .h6 {
+  font-size: 1rem;
+}
+
+p {
+  margin-top: 0;
+  margin-bottom: 1rem;
+}
+
+abbr[title] {
+  -webkit-text-decoration: underline dotted;
+          text-decoration: underline dotted;
+  cursor: help;
+  -webkit-text-decoration-skip-ink: none;
+          text-decoration-skip-ink: none;
+}
+
+address {
+  margin-bottom: 1rem;
+  font-style: normal;
+  line-height: inherit;
+}
+
+ol,
+ul {
+  padding-left: 2rem;
+}
+
+ol,
+ul,
+dl {
+  margin-top: 0;
+  margin-bottom: 1rem;
+}
+
+ol ol,
+ul ul,
+ol ul,
+ul ol {
+  margin-bottom: 0;
+}
+
+dt {
+  font-weight: 700;
+}
+
+dd {
+  margin-bottom: 0.5rem;
+  margin-left: 0;
+}
+
+blockquote {
+  margin: 0 0 1rem;
+}
+
+b,
+strong {
+  font-weight: bolder;
+}
+
+small, .small {
+  font-size: 0.875em;
+}
+
+mark, .mark {
+  padding: 0.1875em;
+  background-color: var(--bs-highlight-bg);
+}
+
+sub,
+sup {
+  position: relative;
+  font-size: 0.75em;
+  line-height: 0;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+sup {
+  top: -0.5em;
+}
+
+a {
+  color: var(--bs-link-color);
+  text-decoration: underline;
+}
+a:hover {
+  color: var(--bs-link-hover-color);
+}
+
+a:not([href]):not([class]), a:not([href]):not([class]):hover {
+  color: inherit;
+  text-decoration: none;
+}
+
+pre,
+code,
+kbd,
+samp {
+  font-family: var(--bs-font-monospace);
+  font-size: 1em;
+}
+
+pre {
+  display: block;
+  margin-top: 0;
+  margin-bottom: 1rem;
+  overflow: auto;
+  font-size: 0.875em;
+}
+pre code {
+  font-size: inherit;
+  color: inherit;
+  word-break: normal;
+}
+
+code {
+  font-size: 0.875em;
+  color: var(--bs-code-color);
+  word-wrap: break-word;
+}
+a > code {
+  color: inherit;
+}
+
+kbd {
+  padding: 0.1875rem 0.375rem;
+  font-size: 0.875em;
+  color: var(--bs-body-bg);
+  background-color: var(--bs-body-color);
+  border-radius: 0.25rem;
+}
+kbd kbd {
+  padding: 0;
+  font-size: 1em;
+}
+
+figure {
+  margin: 0 0 1rem;
+}
+
+img,
+svg {
+  vertical-align: middle;
+}
+
+table {
+  caption-side: bottom;
+  border-collapse: collapse;
+}
+
+caption {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+  color: #6c757d;
+  text-align: left;
+}
+
+th {
+  text-align: inherit;
+  text-align: -webkit-match-parent;
+}
+
+thead,
+tbody,
+tfoot,
+tr,
+td,
+th {
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+}
+
+label {
+  display: inline-block;
+}
+
+button {
+  border-radius: 0;
+}
+
+button:focus:not(:focus-visible) {
+  outline: 0;
+}
+
+input,
+button,
+select,
+optgroup,
+textarea {
+  margin: 0;
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
+}
+
+button,
+select {
+  text-transform: none;
+}
+
+[role=button] {
+  cursor: pointer;
+}
+
+select {
+  word-wrap: normal;
+}
+select:disabled {
+  opacity: 1;
+}
+
+[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
+  display: none !important;
+}
+
+button,
+[type=button],
+[type=reset],
+[type=submit] {
+  -webkit-appearance: button;
+}
+button:not(:disabled),
+[type=button]:not(:disabled),
+[type=reset]:not(:disabled),
+[type=submit]:not(:disabled) {
+  cursor: pointer;
+}
+
+::-moz-focus-inner {
+  padding: 0;
+  border-style: none;
+}
+
+textarea {
+  resize: vertical;
+}
+
+fieldset {
+  min-width: 0;
+  padding: 0;
+  margin: 0;
+  border: 0;
+}
+
+legend {
+  float: left;
+  width: 100%;
+  padding: 0;
+  margin-bottom: 0.5rem;
+  font-size: calc(1.275rem + 0.3vw);
+  line-height: inherit;
+}
+@media (min-width: 1200px) {
+  legend {
+    font-size: 1.5rem;
+  }
+}
+legend + * {
+  clear: left;
+}
+
+::-webkit-datetime-edit-fields-wrapper,
+::-webkit-datetime-edit-text,
+::-webkit-datetime-edit-minute,
+::-webkit-datetime-edit-hour-field,
+::-webkit-datetime-edit-day-field,
+::-webkit-datetime-edit-month-field,
+::-webkit-datetime-edit-year-field {
+  padding: 0;
+}
+
+::-webkit-inner-spin-button {
+  height: auto;
+}
+
+[type=search] {
+  outline-offset: -2px;
+  -webkit-appearance: textfield;
+}
+
+/* rtl:raw:
+[type="tel"],
+[type="url"],
+[type="email"],
+[type="number"] {
+  direction: ltr;
+}
+*/
+::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+::-webkit-color-swatch-wrapper {
+  padding: 0;
+}
+
+::file-selector-button {
+  font: inherit;
+  -webkit-appearance: button;
+}
+
+output {
+  display: inline-block;
+}
+
+iframe {
+  border: 0;
+}
+
+summary {
+  display: list-item;
+  cursor: pointer;
+}
+
+progress {
+  vertical-align: baseline;
+}
+
+[hidden] {
+  display: none !important;
+}
+
+.lead {
+  font-size: 1.25rem;
+  font-weight: 300;
+}
+
+.display-1 {
+  font-size: calc(1.625rem + 4.5vw);
+  font-weight: 300;
+  line-height: 1.2;
+}
+@media (min-width: 1200px) {
+  .display-1 {
+    font-size: 5rem;
+  }
+}
+
+.display-2 {
+  font-size: calc(1.575rem + 3.9vw);
+  font-weight: 300;
+  line-height: 1.2;
+}
+@media (min-width: 1200px) {
+  .display-2 {
+    font-size: 4.5rem;
+  }
+}
+
+.display-3 {
+  font-size: calc(1.525rem + 3.3vw);
+  font-weight: 300;
+  line-height: 1.2;
+}
+@media (min-width: 1200px) {
+  .display-3 {
+    font-size: 4rem;
+  }
+}
+
+.display-4 {
+  font-size: calc(1.475rem + 2.7vw);
+  font-weight: 300;
+  line-height: 1.2;
+}
+@media (min-width: 1200px) {
+  .display-4 {
+    font-size: 3.5rem;
+  }
+}
+
+.display-5 {
+  font-size: calc(1.425rem + 2.1vw);
+  font-weight: 300;
+  line-height: 1.2;
+}
+@media (min-width: 1200px) {
+  .display-5 {
+    font-size: 3rem;
+  }
+}
+
+.display-6 {
+  font-size: calc(1.375rem + 1.5vw);
+  font-weight: 300;
+  line-height: 1.2;
+}
+@media (min-width: 1200px) {
+  .display-6 {
+    font-size: 2.5rem;
+  }
+}
+
+.list-unstyled {
+  padding-left: 0;
+  list-style: none;
+}
+
+.list-inline {
+  padding-left: 0;
+  list-style: none;
+}
+
+.list-inline-item {
+  display: inline-block;
+}
+.list-inline-item:not(:last-child) {
+  margin-right: 0.5rem;
+}
+
+.initialism {
+  font-size: 0.875em;
+  text-transform: uppercase;
+}
+
+.blockquote {
+  margin-bottom: 1rem;
+  font-size: 1.25rem;
+}
+.blockquote > :last-child {
+  margin-bottom: 0;
+}
+
+.blockquote-footer {
+  margin-top: -1rem;
+  margin-bottom: 1rem;
+  font-size: 0.875em;
+  color: #6c757d;
+}
+.blockquote-footer::before {
+  content: "— ";
+}
+
+.img-fluid {
+  max-width: 100%;
+  height: auto;
+}
+
+.img-thumbnail {
+  padding: 0.25rem;
+  background-color: #fff;
+  border: 1px solid var(--bs-border-color);
+  border-radius: 0.375rem;
+  max-width: 100%;
+  height: auto;
+}
+
+.figure {
+  display: inline-block;
+}
+
+.figure-img {
+  margin-bottom: 0.5rem;
+  line-height: 1;
+}
+
+.figure-caption {
+  font-size: 0.875em;
+  color: #6c757d;
+}
+
+.container,
+.container-fluid,
+.container-xxl,
+.container-xl,
+.container-lg,
+.container-md,
+.container-sm {
+  --bs-gutter-x: 1.5rem;
+  --bs-gutter-y: 0;
+  width: 100%;
+  padding-right: calc(var(--bs-gutter-x) * 0.5);
+  padding-left: calc(var(--bs-gutter-x) * 0.5);
+  margin-right: auto;
+  margin-left: auto;
+}
+
+@media (min-width: 576px) {
+  .container-sm, .container {
+    max-width: 540px;
+  }
+}
+@media (min-width: 768px) {
+  .container-md, .container-sm, .container {
+    max-width: 720px;
+  }
+}
+@media (min-width: 992px) {
+  .container-lg, .container-md, .container-sm, .container {
+    max-width: 960px;
+  }
+}
+@media (min-width: 1200px) {
+  .container-xl, .container-lg, .container-md, .container-sm, .container {
+    max-width: 1140px;
+  }
+}
+@media (min-width: 1400px) {
+  .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {
+    max-width: 1320px;
+  }
+}
+.row {
+  --bs-gutter-x: 1.5rem;
+  --bs-gutter-y: 0;
+  display: flex;
+  flex-wrap: wrap;
+  margin-top: calc(-1 * var(--bs-gutter-y));
+  margin-right: calc(-0.5 * var(--bs-gutter-x));
+  margin-left: calc(-0.5 * var(--bs-gutter-x));
+}
+.row > * {
+  flex-shrink: 0;
+  width: 100%;
+  max-width: 100%;
+  padding-right: calc(var(--bs-gutter-x) * 0.5);
+  padding-left: calc(var(--bs-gutter-x) * 0.5);
+  margin-top: var(--bs-gutter-y);
+}
+
+.col {
+  flex: 1 0 0%;
+}
+
+.row-cols-auto > * {
+  flex: 0 0 auto;
+  width: auto;
+}
+
+.row-cols-1 > * {
+  flex: 0 0 auto;
+  width: 100%;
+}
+
+.row-cols-2 > * {
+  flex: 0 0 auto;
+  width: 50%;
+}
+
+.row-cols-3 > * {
+  flex: 0 0 auto;
+  width: 33.3333333333%;
+}
+
+.row-cols-4 > * {
+  flex: 0 0 auto;
+  width: 25%;
+}
+
+.row-cols-5 > * {
+  flex: 0 0 auto;
+  width: 20%;
+}
+
+.row-cols-6 > * {
+  flex: 0 0 auto;
+  width: 16.6666666667%;
+}
+
+.col-auto {
+  flex: 0 0 auto;
+  width: auto;
+}
+
+.col-1 {
+  flex: 0 0 auto;
+  width: 8.33333333%;
+}
+
+.col-2 {
+  flex: 0 0 auto;
+  width: 16.66666667%;
+}
+
+.col-3 {
+  flex: 0 0 auto;
+  width: 25%;
+}
+
+.col-4 {
+  flex: 0 0 auto;
+  width: 33.33333333%;
+}
+
+.col-5 {
+  flex: 0 0 auto;
+  width: 41.66666667%;
+}
+
+.col-6 {
+  flex: 0 0 auto;
+  width: 50%;
+}
+
+.col-7 {
+  flex: 0 0 auto;
+  width: 58.33333333%;
+}
+
+.col-8 {
+  flex: 0 0 auto;
+  width: 66.66666667%;
+}
+
+.col-9 {
+  flex: 0 0 auto;
+  width: 75%;
+}
+
+.col-10 {
+  flex: 0 0 auto;
+  width: 83.33333333%;
+}
+
+.col-11 {
+  flex: 0 0 auto;
+  width: 91.66666667%;
+}
+
+.col-12 {
+  flex: 0 0 auto;
+  width: 100%;
+}
+
+.offset-1 {
+  margin-left: 8.33333333%;
+}
+
+.offset-2 {
+  margin-left: 16.66666667%;
+}
+
+.offset-3 {
+  margin-left: 25%;
+}
+
+.offset-4 {
+  margin-left: 33.33333333%;
+}
+
+.offset-5 {
+  margin-left: 41.66666667%;
+}
+
+.offset-6 {
+  margin-left: 50%;
+}
+
+.offset-7 {
+  margin-left: 58.33333333%;
+}
+
+.offset-8 {
+  margin-left: 66.66666667%;
+}
+
+.offset-9 {
+  margin-left: 75%;
+}
+
+.offset-10 {
+  margin-left: 83.33333333%;
+}
+
+.offset-11 {
+  margin-left: 91.66666667%;
+}
+
+.g-0,
+.gx-0 {
+  --bs-gutter-x: 0;
+}
+
+.g-0,
+.gy-0 {
+  --bs-gutter-y: 0;
+}
+
+.g-1,
+.gx-1 {
+  --bs-gutter-x: 0.25rem;
+}
+
+.g-1,
+.gy-1 {
+  --bs-gutter-y: 0.25rem;
+}
+
+.g-2,
+.gx-2 {
+  --bs-gutter-x: 0.5rem;
+}
+
+.g-2,
+.gy-2 {
+  --bs-gutter-y: 0.5rem;
+}
+
+.g-3,
+.gx-3 {
+  --bs-gutter-x: 1rem;
+}
+
+.g-3,
+.gy-3 {
+  --bs-gutter-y: 1rem;
+}
+
+.g-4,
+.gx-4 {
+  --bs-gutter-x: 1.5rem;
+}
+
+.g-4,
+.gy-4 {
+  --bs-gutter-y: 1.5rem;
+}
+
+.g-5,
+.gx-5 {
+  --bs-gutter-x: 3rem;
+}
+
+.g-5,
+.gy-5 {
+  --bs-gutter-y: 3rem;
+}
+
+@media (min-width: 576px) {
+  .col-sm {
+    flex: 1 0 0%;
+  }
+  .row-cols-sm-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-sm-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-sm-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-sm-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-sm-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-sm-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-sm-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-sm-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-sm-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-sm-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-sm-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-sm-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-sm-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-sm-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-sm-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-sm-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-sm-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-sm-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-sm-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-sm-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-sm-0 {
+    margin-left: 0;
+  }
+  .offset-sm-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-sm-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-sm-3 {
+    margin-left: 25%;
+  }
+  .offset-sm-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-sm-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-sm-6 {
+    margin-left: 50%;
+  }
+  .offset-sm-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-sm-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-sm-9 {
+    margin-left: 75%;
+  }
+  .offset-sm-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-sm-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-sm-0,
+  .gx-sm-0 {
+    --bs-gutter-x: 0;
+  }
+  .g-sm-0,
+  .gy-sm-0 {
+    --bs-gutter-y: 0;
+  }
+  .g-sm-1,
+  .gx-sm-1 {
+    --bs-gutter-x: 0.25rem;
+  }
+  .g-sm-1,
+  .gy-sm-1 {
+    --bs-gutter-y: 0.25rem;
+  }
+  .g-sm-2,
+  .gx-sm-2 {
+    --bs-gutter-x: 0.5rem;
+  }
+  .g-sm-2,
+  .gy-sm-2 {
+    --bs-gutter-y: 0.5rem;
+  }
+  .g-sm-3,
+  .gx-sm-3 {
+    --bs-gutter-x: 1rem;
+  }
+  .g-sm-3,
+  .gy-sm-3 {
+    --bs-gutter-y: 1rem;
+  }
+  .g-sm-4,
+  .gx-sm-4 {
+    --bs-gutter-x: 1.5rem;
+  }
+  .g-sm-4,
+  .gy-sm-4 {
+    --bs-gutter-y: 1.5rem;
+  }
+  .g-sm-5,
+  .gx-sm-5 {
+    --bs-gutter-x: 3rem;
+  }
+  .g-sm-5,
+  .gy-sm-5 {
+    --bs-gutter-y: 3rem;
+  }
+}
+@media (min-width: 768px) {
+  .col-md {
+    flex: 1 0 0%;
+  }
+  .row-cols-md-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-md-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-md-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-md-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-md-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-md-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-md-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-md-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-md-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-md-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-md-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-md-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-md-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-md-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-md-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-md-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-md-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-md-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-md-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-md-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-md-0 {
+    margin-left: 0;
+  }
+  .offset-md-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-md-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-md-3 {
+    margin-left: 25%;
+  }
+  .offset-md-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-md-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-md-6 {
+    margin-left: 50%;
+  }
+  .offset-md-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-md-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-md-9 {
+    margin-left: 75%;
+  }
+  .offset-md-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-md-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-md-0,
+  .gx-md-0 {
+    --bs-gutter-x: 0;
+  }
+  .g-md-0,
+  .gy-md-0 {
+    --bs-gutter-y: 0;
+  }
+  .g-md-1,
+  .gx-md-1 {
+    --bs-gutter-x: 0.25rem;
+  }
+  .g-md-1,
+  .gy-md-1 {
+    --bs-gutter-y: 0.25rem;
+  }
+  .g-md-2,
+  .gx-md-2 {
+    --bs-gutter-x: 0.5rem;
+  }
+  .g-md-2,
+  .gy-md-2 {
+    --bs-gutter-y: 0.5rem;
+  }
+  .g-md-3,
+  .gx-md-3 {
+    --bs-gutter-x: 1rem;
+  }
+  .g-md-3,
+  .gy-md-3 {
+    --bs-gutter-y: 1rem;
+  }
+  .g-md-4,
+  .gx-md-4 {
+    --bs-gutter-x: 1.5rem;
+  }
+  .g-md-4,
+  .gy-md-4 {
+    --bs-gutter-y: 1.5rem;
+  }
+  .g-md-5,
+  .gx-md-5 {
+    --bs-gutter-x: 3rem;
+  }
+  .g-md-5,
+  .gy-md-5 {
+    --bs-gutter-y: 3rem;
+  }
+}
+@media (min-width: 992px) {
+  .col-lg {
+    flex: 1 0 0%;
+  }
+  .row-cols-lg-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-lg-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-lg-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-lg-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-lg-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-lg-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-lg-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-lg-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-lg-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-lg-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-lg-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-lg-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-lg-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-lg-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-lg-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-lg-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-lg-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-lg-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-lg-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-lg-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-lg-0 {
+    margin-left: 0;
+  }
+  .offset-lg-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-lg-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-lg-3 {
+    margin-left: 25%;
+  }
+  .offset-lg-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-lg-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-lg-6 {
+    margin-left: 50%;
+  }
+  .offset-lg-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-lg-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-lg-9 {
+    margin-left: 75%;
+  }
+  .offset-lg-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-lg-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-lg-0,
+  .gx-lg-0 {
+    --bs-gutter-x: 0;
+  }
+  .g-lg-0,
+  .gy-lg-0 {
+    --bs-gutter-y: 0;
+  }
+  .g-lg-1,
+  .gx-lg-1 {
+    --bs-gutter-x: 0.25rem;
+  }
+  .g-lg-1,
+  .gy-lg-1 {
+    --bs-gutter-y: 0.25rem;
+  }
+  .g-lg-2,
+  .gx-lg-2 {
+    --bs-gutter-x: 0.5rem;
+  }
+  .g-lg-2,
+  .gy-lg-2 {
+    --bs-gutter-y: 0.5rem;
+  }
+  .g-lg-3,
+  .gx-lg-3 {
+    --bs-gutter-x: 1rem;
+  }
+  .g-lg-3,
+  .gy-lg-3 {
+    --bs-gutter-y: 1rem;
+  }
+  .g-lg-4,
+  .gx-lg-4 {
+    --bs-gutter-x: 1.5rem;
+  }
+  .g-lg-4,
+  .gy-lg-4 {
+    --bs-gutter-y: 1.5rem;
+  }
+  .g-lg-5,
+  .gx-lg-5 {
+    --bs-gutter-x: 3rem;
+  }
+  .g-lg-5,
+  .gy-lg-5 {
+    --bs-gutter-y: 3rem;
+  }
+}
+@media (min-width: 1200px) {
+  .col-xl {
+    flex: 1 0 0%;
+  }
+  .row-cols-xl-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-xl-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-xl-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-xl-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-xl-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-xl-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-xl-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-xl-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-xl-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-xl-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-xl-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-xl-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-xl-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-xl-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-xl-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-xl-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-xl-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-xl-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-xl-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-xl-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-xl-0 {
+    margin-left: 0;
+  }
+  .offset-xl-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-xl-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-xl-3 {
+    margin-left: 25%;
+  }
+  .offset-xl-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-xl-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-xl-6 {
+    margin-left: 50%;
+  }
+  .offset-xl-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-xl-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-xl-9 {
+    margin-left: 75%;
+  }
+  .offset-xl-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-xl-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-xl-0,
+  .gx-xl-0 {
+    --bs-gutter-x: 0;
+  }
+  .g-xl-0,
+  .gy-xl-0 {
+    --bs-gutter-y: 0;
+  }
+  .g-xl-1,
+  .gx-xl-1 {
+    --bs-gutter-x: 0.25rem;
+  }
+  .g-xl-1,
+  .gy-xl-1 {
+    --bs-gutter-y: 0.25rem;
+  }
+  .g-xl-2,
+  .gx-xl-2 {
+    --bs-gutter-x: 0.5rem;
+  }
+  .g-xl-2,
+  .gy-xl-2 {
+    --bs-gutter-y: 0.5rem;
+  }
+  .g-xl-3,
+  .gx-xl-3 {
+    --bs-gutter-x: 1rem;
+  }
+  .g-xl-3,
+  .gy-xl-3 {
+    --bs-gutter-y: 1rem;
+  }
+  .g-xl-4,
+  .gx-xl-4 {
+    --bs-gutter-x: 1.5rem;
+  }
+  .g-xl-4,
+  .gy-xl-4 {
+    --bs-gutter-y: 1.5rem;
+  }
+  .g-xl-5,
+  .gx-xl-5 {
+    --bs-gutter-x: 3rem;
+  }
+  .g-xl-5,
+  .gy-xl-5 {
+    --bs-gutter-y: 3rem;
+  }
+}
+@media (min-width: 1400px) {
+  .col-xxl {
+    flex: 1 0 0%;
+  }
+  .row-cols-xxl-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-xxl-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-xxl-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-xxl-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-xxl-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-xxl-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-xxl-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-xxl-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-xxl-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-xxl-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-xxl-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-xxl-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-xxl-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-xxl-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-xxl-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-xxl-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-xxl-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-xxl-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-xxl-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-xxl-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-xxl-0 {
+    margin-left: 0;
+  }
+  .offset-xxl-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-xxl-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-xxl-3 {
+    margin-left: 25%;
+  }
+  .offset-xxl-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-xxl-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-xxl-6 {
+    margin-left: 50%;
+  }
+  .offset-xxl-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-xxl-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-xxl-9 {
+    margin-left: 75%;
+  }
+  .offset-xxl-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-xxl-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-xxl-0,
+  .gx-xxl-0 {
+    --bs-gutter-x: 0;
+  }
+  .g-xxl-0,
+  .gy-xxl-0 {
+    --bs-gutter-y: 0;
+  }
+  .g-xxl-1,
+  .gx-xxl-1 {
+    --bs-gutter-x: 0.25rem;
+  }
+  .g-xxl-1,
+  .gy-xxl-1 {
+    --bs-gutter-y: 0.25rem;
+  }
+  .g-xxl-2,
+  .gx-xxl-2 {
+    --bs-gutter-x: 0.5rem;
+  }
+  .g-xxl-2,
+  .gy-xxl-2 {
+    --bs-gutter-y: 0.5rem;
+  }
+  .g-xxl-3,
+  .gx-xxl-3 {
+    --bs-gutter-x: 1rem;
+  }
+  .g-xxl-3,
+  .gy-xxl-3 {
+    --bs-gutter-y: 1rem;
+  }
+  .g-xxl-4,
+  .gx-xxl-4 {
+    --bs-gutter-x: 1.5rem;
+  }
+  .g-xxl-4,
+  .gy-xxl-4 {
+    --bs-gutter-y: 1.5rem;
+  }
+  .g-xxl-5,
+  .gx-xxl-5 {
+    --bs-gutter-x: 3rem;
+  }
+  .g-xxl-5,
+  .gy-xxl-5 {
+    --bs-gutter-y: 3rem;
+  }
+}
+.table {
+  --bs-table-color: var(--bs-body-color);
+  --bs-table-bg: transparent;
+  --bs-table-border-color: var(--bs-border-color);
+  --bs-table-accent-bg: transparent;
+  --bs-table-striped-color: var(--bs-body-color);
+  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);
+  --bs-table-active-color: var(--bs-body-color);
+  --bs-table-active-bg: rgba(0, 0, 0, 0.1);
+  --bs-table-hover-color: var(--bs-body-color);
+  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);
+  width: 100%;
+  margin-bottom: 1rem;
+  color: var(--bs-table-color);
+  vertical-align: top;
+  border-color: var(--bs-table-border-color);
+}
+.table > :not(caption) > * > * {
+  padding: 0.5rem 0.5rem;
+  background-color: var(--bs-table-bg);
+  border-bottom-width: 1px;
+  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);
+}
+.table > tbody {
+  vertical-align: inherit;
+}
+.table > thead {
+  vertical-align: bottom;
+}
+
+.table-group-divider {
+  border-top: 2px solid currentcolor;
+}
+
+.caption-top {
+  caption-side: top;
+}
+
+.table-sm > :not(caption) > * > * {
+  padding: 0.25rem 0.25rem;
+}
+
+.table-bordered > :not(caption) > * {
+  border-width: 1px 0;
+}
+.table-bordered > :not(caption) > * > * {
+  border-width: 0 1px;
+}
+
+.table-borderless > :not(caption) > * > * {
+  border-bottom-width: 0;
+}
+.table-borderless > :not(:first-child) {
+  border-top-width: 0;
+}
+
+.table-striped > tbody > tr:nth-of-type(odd) > * {
+  --bs-table-accent-bg: var(--bs-table-striped-bg);
+  color: var(--bs-table-striped-color);
+}
+
+.table-striped-columns > :not(caption) > tr > :nth-child(even) {
+  --bs-table-accent-bg: var(--bs-table-striped-bg);
+  color: var(--bs-table-striped-color);
+}
+
+.table-active {
+  --bs-table-accent-bg: var(--bs-table-active-bg);
+  color: var(--bs-table-active-color);
+}
+
+.table-hover > tbody > tr:hover > * {
+  --bs-table-accent-bg: var(--bs-table-hover-bg);
+  color: var(--bs-table-hover-color);
+}
+
+.table-primary {
+  --bs-table-color: #000;
+  --bs-table-bg: #cfe2ff;
+  --bs-table-border-color: #bacbe6;
+  --bs-table-striped-bg: #c5d7f2;
+  --bs-table-striped-color: #000;
+  --bs-table-active-bg: #bacbe6;
+  --bs-table-active-color: #000;
+  --bs-table-hover-bg: #bfd1ec;
+  --bs-table-hover-color: #000;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-secondary {
+  --bs-table-color: #000;
+  --bs-table-bg: #e2e3e5;
+  --bs-table-border-color: #cbccce;
+  --bs-table-striped-bg: #d7d8da;
+  --bs-table-striped-color: #000;
+  --bs-table-active-bg: #cbccce;
+  --bs-table-active-color: #000;
+  --bs-table-hover-bg: #d1d2d4;
+  --bs-table-hover-color: #000;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-success {
+  --bs-table-color: #000;
+  --bs-table-bg: #d1e7dd;
+  --bs-table-border-color: #bcd0c7;
+  --bs-table-striped-bg: #c7dbd2;
+  --bs-table-striped-color: #000;
+  --bs-table-active-bg: #bcd0c7;
+  --bs-table-active-color: #000;
+  --bs-table-hover-bg: #c1d6cc;
+  --bs-table-hover-color: #000;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-info {
+  --bs-table-color: #000;
+  --bs-table-bg: #cff4fc;
+  --bs-table-border-color: #badce3;
+  --bs-table-striped-bg: #c5e8ef;
+  --bs-table-striped-color: #000;
+  --bs-table-active-bg: #badce3;
+  --bs-table-active-color: #000;
+  --bs-table-hover-bg: #bfe2e9;
+  --bs-table-hover-color: #000;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-warning {
+  --bs-table-color: #000;
+  --bs-table-bg: #fff3cd;
+  --bs-table-border-color: #e6dbb9;
+  --bs-table-striped-bg: #f2e7c3;
+  --bs-table-striped-color: #000;
+  --bs-table-active-bg: #e6dbb9;
+  --bs-table-active-color: #000;
+  --bs-table-hover-bg: #ece1be;
+  --bs-table-hover-color: #000;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-danger {
+  --bs-table-color: #000;
+  --bs-table-bg: #f8d7da;
+  --bs-table-border-color: #dfc2c4;
+  --bs-table-striped-bg: #eccccf;
+  --bs-table-striped-color: #000;
+  --bs-table-active-bg: #dfc2c4;
+  --bs-table-active-color: #000;
+  --bs-table-hover-bg: #e5c7ca;
+  --bs-table-hover-color: #000;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-light {
+  --bs-table-color: #000;
+  --bs-table-bg: #f8f9fa;
+  --bs-table-border-color: #dfe0e1;
+  --bs-table-striped-bg: #ecedee;
+  --bs-table-striped-color: #000;
+  --bs-table-active-bg: #dfe0e1;
+  --bs-table-active-color: #000;
+  --bs-table-hover-bg: #e5e6e7;
+  --bs-table-hover-color: #000;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-dark {
+  --bs-table-color: #fff;
+  --bs-table-bg: #212529;
+  --bs-table-border-color: #373b3e;
+  --bs-table-striped-bg: #2c3034;
+  --bs-table-striped-color: #fff;
+  --bs-table-active-bg: #373b3e;
+  --bs-table-active-color: #fff;
+  --bs-table-hover-bg: #323539;
+  --bs-table-hover-color: #fff;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-responsive {
+  overflow-x: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+@media (max-width: 575.98px) {
+  .table-responsive-sm {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 767.98px) {
+  .table-responsive-md {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 991.98px) {
+  .table-responsive-lg {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 1199.98px) {
+  .table-responsive-xl {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 1399.98px) {
+  .table-responsive-xxl {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+.form-label {
+  margin-bottom: 0.5rem;
+}
+
+.col-form-label {
+  padding-top: calc(0.375rem + 1px);
+  padding-bottom: calc(0.375rem + 1px);
+  margin-bottom: 0;
+  font-size: inherit;
+  line-height: 1.5;
+}
+
+.col-form-label-lg {
+  padding-top: calc(0.5rem + 1px);
+  padding-bottom: calc(0.5rem + 1px);
+  font-size: 1.25rem;
+}
+
+.col-form-label-sm {
+  padding-top: calc(0.25rem + 1px);
+  padding-bottom: calc(0.25rem + 1px);
+  font-size: 0.875rem;
+}
+
+.form-text {
+  margin-top: 0.25rem;
+  font-size: 0.875em;
+  color: #6c757d;
+}
+
+.form-control {
+  display: block;
+  width: 100%;
+  padding: 0.375rem 0.75rem;
+  font-size: 1rem;
+  font-weight: 400;
+  line-height: 1.5;
+  color: #212529;
+  background-color: #fff;
+  background-clip: padding-box;
+  border: 1px solid #ced4da;
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+  border-radius: 0.375rem;
+  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-control {
+    transition: none;
+  }
+}
+.form-control[type=file] {
+  overflow: hidden;
+}
+.form-control[type=file]:not(:disabled):not([readonly]) {
+  cursor: pointer;
+}
+.form-control:focus {
+  color: #212529;
+  background-color: #fff;
+  border-color: #86b7fe;
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+}
+.form-control::-webkit-date-and-time-value {
+  height: 1.5em;
+}
+.form-control::-moz-placeholder {
+  color: #6c757d;
+  opacity: 1;
+}
+.form-control::placeholder {
+  color: #6c757d;
+  opacity: 1;
+}
+.form-control:disabled {
+  background-color: #e9ecef;
+  opacity: 1;
+}
+.form-control::file-selector-button {
+  padding: 0.375rem 0.75rem;
+  margin: -0.375rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+          margin-inline-end: 0.75rem;
+  color: #212529;
+  background-color: #e9ecef;
+  pointer-events: none;
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+  border-inline-end-width: 1px;
+  border-radius: 0;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-control::file-selector-button {
+    transition: none;
+  }
+}
+.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
+  background-color: #dde0e3;
+}
+
+.form-control-plaintext {
+  display: block;
+  width: 100%;
+  padding: 0.375rem 0;
+  margin-bottom: 0;
+  line-height: 1.5;
+  color: #212529;
+  background-color: transparent;
+  border: solid transparent;
+  border-width: 1px 0;
+}
+.form-control-plaintext:focus {
+  outline: 0;
+}
+.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {
+  padding-right: 0;
+  padding-left: 0;
+}
+
+.form-control-sm {
+  min-height: calc(1.5em + 0.5rem + 2px);
+  padding: 0.25rem 0.5rem;
+  font-size: 0.875rem;
+  border-radius: 0.25rem;
+}
+.form-control-sm::file-selector-button {
+  padding: 0.25rem 0.5rem;
+  margin: -0.25rem -0.5rem;
+  -webkit-margin-end: 0.5rem;
+          margin-inline-end: 0.5rem;
+}
+
+.form-control-lg {
+  min-height: calc(1.5em + 1rem + 2px);
+  padding: 0.5rem 1rem;
+  font-size: 1.25rem;
+  border-radius: 0.5rem;
+}
+.form-control-lg::file-selector-button {
+  padding: 0.5rem 1rem;
+  margin: -0.5rem -1rem;
+  -webkit-margin-end: 1rem;
+          margin-inline-end: 1rem;
+}
+
+textarea.form-control {
+  min-height: calc(1.5em + 0.75rem + 2px);
+}
+textarea.form-control-sm {
+  min-height: calc(1.5em + 0.5rem + 2px);
+}
+textarea.form-control-lg {
+  min-height: calc(1.5em + 1rem + 2px);
+}
+
+.form-control-color {
+  width: 3rem;
+  height: calc(1.5em + 0.75rem + 2px);
+  padding: 0.375rem;
+}
+.form-control-color:not(:disabled):not([readonly]) {
+  cursor: pointer;
+}
+.form-control-color::-moz-color-swatch {
+  border: 0 !important;
+  border-radius: 0.375rem;
+}
+.form-control-color::-webkit-color-swatch {
+  border-radius: 0.375rem;
+}
+.form-control-color.form-control-sm {
+  height: calc(1.5em + 0.5rem + 2px);
+}
+.form-control-color.form-control-lg {
+  height: calc(1.5em + 1rem + 2px);
+}
+
+.form-select {
+  display: block;
+  width: 100%;
+  padding: 0.375rem 2.25rem 0.375rem 0.75rem;
+  -moz-padding-start: calc(0.75rem - 3px);
+  font-size: 1rem;
+  font-weight: 400;
+  line-height: 1.5;
+  color: #212529;
+  background-color: #fff;
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
+  background-repeat: no-repeat;
+  background-position: right 0.75rem center;
+  background-size: 16px 12px;
+  border: 1px solid #ced4da;
+  border-radius: 0.375rem;
+  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-select {
+    transition: none;
+  }
+}
+.form-select:focus {
+  border-color: #86b7fe;
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+}
+.form-select[multiple], .form-select[size]:not([size="1"]) {
+  padding-right: 0.75rem;
+  background-image: none;
+}
+.form-select:disabled {
+  background-color: #e9ecef;
+}
+.form-select:-moz-focusring {
+  color: transparent;
+  text-shadow: 0 0 0 #212529;
+}
+
+.form-select-sm {
+  padding-top: 0.25rem;
+  padding-bottom: 0.25rem;
+  padding-left: 0.5rem;
+  font-size: 0.875rem;
+  border-radius: 0.25rem;
+}
+
+.form-select-lg {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+  padding-left: 1rem;
+  font-size: 1.25rem;
+  border-radius: 0.5rem;
+}
+
+.form-check {
+  display: block;
+  min-height: 1.5rem;
+  padding-left: 1.5em;
+  margin-bottom: 0.125rem;
+}
+.form-check .form-check-input {
+  float: left;
+  margin-left: -1.5em;
+}
+
+.form-check-reverse {
+  padding-right: 1.5em;
+  padding-left: 0;
+  text-align: right;
+}
+.form-check-reverse .form-check-input {
+  float: right;
+  margin-right: -1.5em;
+  margin-left: 0;
+}
+
+.form-check-input {
+  width: 1em;
+  height: 1em;
+  margin-top: 0.25em;
+  vertical-align: top;
+  background-color: #fff;
+  background-repeat: no-repeat;
+  background-position: center;
+  background-size: contain;
+  border: 1px solid rgba(0, 0, 0, 0.25);
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+  -webkit-print-color-adjust: exact;
+          print-color-adjust: exact;
+}
+.form-check-input[type=checkbox] {
+  border-radius: 0.25em;
+}
+.form-check-input[type=radio] {
+  border-radius: 50%;
+}
+.form-check-input:active {
+  filter: brightness(90%);
+}
+.form-check-input:focus {
+  border-color: #86b7fe;
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+}
+.form-check-input:checked {
+  background-color: #0d6efd;
+  border-color: #0d6efd;
+}
+.form-check-input:checked[type=checkbox] {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");
+}
+.form-check-input:checked[type=radio] {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e");
+}
+.form-check-input[type=checkbox]:indeterminate {
+  background-color: #0d6efd;
+  border-color: #0d6efd;
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e");
+}
+.form-check-input:disabled {
+  pointer-events: none;
+  filter: none;
+  opacity: 0.5;
+}
+.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {
+  cursor: default;
+  opacity: 0.5;
+}
+
+.form-switch {
+  padding-left: 2.5em;
+}
+.form-switch .form-check-input {
+  width: 2em;
+  margin-left: -2.5em;
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");
+  background-position: left center;
+  border-radius: 2em;
+  transition: background-position 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-switch .form-check-input {
+    transition: none;
+  }
+}
+.form-switch .form-check-input:focus {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e");
+}
+.form-switch .form-check-input:checked {
+  background-position: right center;
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e");
+}
+.form-switch.form-check-reverse {
+  padding-right: 2.5em;
+  padding-left: 0;
+}
+.form-switch.form-check-reverse .form-check-input {
+  margin-right: -2.5em;
+  margin-left: 0;
+}
+
+.form-check-inline {
+  display: inline-block;
+  margin-right: 1rem;
+}
+
+.btn-check {
+  position: absolute;
+  clip: rect(0, 0, 0, 0);
+  pointer-events: none;
+}
+.btn-check[disabled] + .btn, .btn-check:disabled + .btn {
+  pointer-events: none;
+  filter: none;
+  opacity: 0.65;
+}
+
+.form-range {
+  width: 100%;
+  height: 1.5rem;
+  padding: 0;
+  background-color: transparent;
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+}
+.form-range:focus {
+  outline: 0;
+}
+.form-range:focus::-webkit-slider-thumb {
+  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+}
+.form-range:focus::-moz-range-thumb {
+  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+}
+.form-range::-moz-focus-outer {
+  border: 0;
+}
+.form-range::-webkit-slider-thumb {
+  width: 1rem;
+  height: 1rem;
+  margin-top: -0.25rem;
+  background-color: #0d6efd;
+  border: 0;
+  border-radius: 1rem;
+  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  -webkit-appearance: none;
+          appearance: none;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-range::-webkit-slider-thumb {
+    -webkit-transition: none;
+    transition: none;
+  }
+}
+.form-range::-webkit-slider-thumb:active {
+  background-color: #b6d4fe;
+}
+.form-range::-webkit-slider-runnable-track {
+  width: 100%;
+  height: 0.5rem;
+  color: transparent;
+  cursor: pointer;
+  background-color: #dee2e6;
+  border-color: transparent;
+  border-radius: 1rem;
+}
+.form-range::-moz-range-thumb {
+  width: 1rem;
+  height: 1rem;
+  background-color: #0d6efd;
+  border: 0;
+  border-radius: 1rem;
+  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  -moz-appearance: none;
+       appearance: none;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-range::-moz-range-thumb {
+    -moz-transition: none;
+    transition: none;
+  }
+}
+.form-range::-moz-range-thumb:active {
+  background-color: #b6d4fe;
+}
+.form-range::-moz-range-track {
+  width: 100%;
+  height: 0.5rem;
+  color: transparent;
+  cursor: pointer;
+  background-color: #dee2e6;
+  border-color: transparent;
+  border-radius: 1rem;
+}
+.form-range:disabled {
+  pointer-events: none;
+}
+.form-range:disabled::-webkit-slider-thumb {
+  background-color: #adb5bd;
+}
+.form-range:disabled::-moz-range-thumb {
+  background-color: #adb5bd;
+}
+
+.form-floating {
+  position: relative;
+}
+.form-floating > .form-control,
+.form-floating > .form-control-plaintext,
+.form-floating > .form-select {
+  height: calc(3.5rem + 2px);
+  line-height: 1.25;
+}
+.form-floating > label {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  padding: 1rem 0.75rem;
+  overflow: hidden;
+  text-align: start;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  pointer-events: none;
+  border: 1px solid transparent;
+  transform-origin: 0 0;
+  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-floating > label {
+    transition: none;
+  }
+}
+.form-floating > .form-control,
+.form-floating > .form-control-plaintext {
+  padding: 1rem 0.75rem;
+}
+.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder {
+  color: transparent;
+}
+.form-floating > .form-control::placeholder,
+.form-floating > .form-control-plaintext::placeholder {
+  color: transparent;
+}
+.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),
+.form-floating > .form-control-plaintext:focus,
+.form-floating > .form-control-plaintext:not(:placeholder-shown) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-control:-webkit-autofill,
+.form-floating > .form-control-plaintext:-webkit-autofill {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-select {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+.form-floating > .form-control:focus ~ label,
+.form-floating > .form-control:not(:placeholder-shown) ~ label,
+.form-floating > .form-control-plaintext ~ label,
+.form-floating > .form-select ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+.form-floating > .form-control:-webkit-autofill ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+.form-floating > .form-control-plaintext ~ label {
+  border-width: 1px 0;
+}
+
+.input-group {
+  position: relative;
+  display: flex;
+  flex-wrap: wrap;
+  align-items: stretch;
+  width: 100%;
+}
+.input-group > .form-control,
+.input-group > .form-select,
+.input-group > .form-floating {
+  position: relative;
+  flex: 1 1 auto;
+  width: 1%;
+  min-width: 0;
+}
+.input-group > .form-control:focus,
+.input-group > .form-select:focus,
+.input-group > .form-floating:focus-within {
+  z-index: 5;
+}
+.input-group .btn {
+  position: relative;
+  z-index: 2;
+}
+.input-group .btn:focus {
+  z-index: 5;
+}
+
+.input-group-text {
+  display: flex;
+  align-items: center;
+  padding: 0.375rem 0.75rem;
+  font-size: 1rem;
+  font-weight: 400;
+  line-height: 1.5;
+  color: #212529;
+  text-align: center;
+  white-space: nowrap;
+  background-color: #e9ecef;
+  border: 1px solid #ced4da;
+  border-radius: 0.375rem;
+}
+
+.input-group-lg > .form-control,
+.input-group-lg > .form-select,
+.input-group-lg > .input-group-text,
+.input-group-lg > .btn {
+  padding: 0.5rem 1rem;
+  font-size: 1.25rem;
+  border-radius: 0.5rem;
+}
+
+.input-group-sm > .form-control,
+.input-group-sm > .form-select,
+.input-group-sm > .input-group-text,
+.input-group-sm > .btn {
+  padding: 0.25rem 0.5rem;
+  font-size: 0.875rem;
+  border-radius: 0.25rem;
+}
+
+.input-group-lg > .form-select,
+.input-group-sm > .form-select {
+  padding-right: 3rem;
+}
+
+.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),
+.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),
+.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,
+.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),
+.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),
+.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,
+.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {
+  margin-left: -1px;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.input-group > .form-floating:not(:first-child) > .form-control,
+.input-group > .form-floating:not(:first-child) > .form-select {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.valid-feedback {
+  display: none;
+  width: 100%;
+  margin-top: 0.25rem;
+  font-size: 0.875em;
+  color: #198754;
+}
+
+.valid-tooltip {
+  position: absolute;
+  top: 100%;
+  z-index: 5;
+  display: none;
+  max-width: 100%;
+  padding: 0.25rem 0.5rem;
+  margin-top: 0.1rem;
+  font-size: 0.875rem;
+  color: #fff;
+  background-color: rgba(25, 135, 84, 0.9);
+  border-radius: 0.375rem;
+}
+
+.was-validated :valid ~ .valid-feedback,
+.was-validated :valid ~ .valid-tooltip,
+.is-valid ~ .valid-feedback,
+.is-valid ~ .valid-tooltip {
+  display: block;
+}
+
+.was-validated .form-control:valid, .form-control.is-valid {
+  border-color: #198754;
+  padding-right: calc(1.5em + 0.75rem);
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
+  background-repeat: no-repeat;
+  background-position: right calc(0.375em + 0.1875rem) center;
+  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+.was-validated .form-control:valid:focus, .form-control.is-valid:focus {
+  border-color: #198754;
+  box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+}
+
+.was-validated textarea.form-control:valid, textarea.form-control.is-valid {
+  padding-right: calc(1.5em + 0.75rem);
+  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
+}
+
+.was-validated .form-select:valid, .form-select.is-valid {
+  border-color: #198754;
+}
+.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] {
+  padding-right: 4.125rem;
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
+  background-position: right 0.75rem center, center right 2.25rem;
+  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+.was-validated .form-select:valid:focus, .form-select.is-valid:focus {
+  border-color: #198754;
+  box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+}
+
+.was-validated .form-control-color:valid, .form-control-color.is-valid {
+  width: calc(3rem + calc(1.5em + 0.75rem));
+}
+
+.was-validated .form-check-input:valid, .form-check-input.is-valid {
+  border-color: #198754;
+}
+.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {
+  background-color: #198754;
+}
+.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {
+  box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+}
+.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {
+  color: #198754;
+}
+
+.form-check-inline .form-check-input ~ .valid-feedback {
+  margin-left: 0.5em;
+}
+
+.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,
+.was-validated .input-group > .form-select:not(:focus):valid,
+.input-group > .form-select:not(:focus).is-valid,
+.was-validated .input-group > .form-floating:not(:focus-within):valid,
+.input-group > .form-floating:not(:focus-within).is-valid {
+  z-index: 3;
+}
+
+.invalid-feedback {
+  display: none;
+  width: 100%;
+  margin-top: 0.25rem;
+  font-size: 0.875em;
+  color: #dc3545;
+}
+
+.invalid-tooltip {
+  position: absolute;
+  top: 100%;
+  z-index: 5;
+  display: none;
+  max-width: 100%;
+  padding: 0.25rem 0.5rem;
+  margin-top: 0.1rem;
+  font-size: 0.875rem;
+  color: #fff;
+  background-color: rgba(220, 53, 69, 0.9);
+  border-radius: 0.375rem;
+}
+
+.was-validated :invalid ~ .invalid-feedback,
+.was-validated :invalid ~ .invalid-tooltip,
+.is-invalid ~ .invalid-feedback,
+.is-invalid ~ .invalid-tooltip {
+  display: block;
+}
+
+.was-validated .form-control:invalid, .form-control.is-invalid {
+  border-color: #dc3545;
+  padding-right: calc(1.5em + 0.75rem);
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
+  background-repeat: no-repeat;
+  background-position: right calc(0.375em + 0.1875rem) center;
+  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {
+  border-color: #dc3545;
+  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+}
+
+.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {
+  padding-right: calc(1.5em + 0.75rem);
+  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
+}
+
+.was-validated .form-select:invalid, .form-select.is-invalid {
+  border-color: #dc3545;
+}
+.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] {
+  padding-right: 4.125rem;
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
+  background-position: right 0.75rem center, center right 2.25rem;
+  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {
+  border-color: #dc3545;
+  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+}
+
+.was-validated .form-control-color:invalid, .form-control-color.is-invalid {
+  width: calc(3rem + calc(1.5em + 0.75rem));
+}
+
+.was-validated .form-check-input:invalid, .form-check-input.is-invalid {
+  border-color: #dc3545;
+}
+.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {
+  background-color: #dc3545;
+}
+.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {
+  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+}
+.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {
+  color: #dc3545;
+}
+
+.form-check-inline .form-check-input ~ .invalid-feedback {
+  margin-left: 0.5em;
+}
+
+.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,
+.was-validated .input-group > .form-select:not(:focus):invalid,
+.input-group > .form-select:not(:focus).is-invalid,
+.was-validated .input-group > .form-floating:not(:focus-within):invalid,
+.input-group > .form-floating:not(:focus-within).is-invalid {
+  z-index: 4;
+}
+
+.btn {
+  --bs-btn-padding-x: 0.75rem;
+  --bs-btn-padding-y: 0.375rem;
+  --bs-btn-font-family: ;
+  --bs-btn-font-size: 1rem;
+  --bs-btn-font-weight: 400;
+  --bs-btn-line-height: 1.5;
+  --bs-btn-color: #212529;
+  --bs-btn-bg: transparent;
+  --bs-btn-border-width: 1px;
+  --bs-btn-border-color: transparent;
+  --bs-btn-border-radius: 0.375rem;
+  --bs-btn-hover-border-color: transparent;
+  --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
+  --bs-btn-disabled-opacity: 0.65;
+  --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);
+  display: inline-block;
+  padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);
+  font-family: var(--bs-btn-font-family);
+  font-size: var(--bs-btn-font-size);
+  font-weight: var(--bs-btn-font-weight);
+  line-height: var(--bs-btn-line-height);
+  color: var(--bs-btn-color);
+  text-align: center;
+  text-decoration: none;
+  vertical-align: middle;
+  cursor: pointer;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+          user-select: none;
+  border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);
+  border-radius: var(--bs-btn-border-radius);
+  background-color: var(--bs-btn-bg);
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .btn {
+    transition: none;
+  }
+}
+.btn:hover {
+  color: var(--bs-btn-hover-color);
+  background-color: var(--bs-btn-hover-bg);
+  border-color: var(--bs-btn-hover-border-color);
+}
+.btn-check + .btn:hover {
+  color: var(--bs-btn-color);
+  background-color: var(--bs-btn-bg);
+  border-color: var(--bs-btn-border-color);
+}
+.btn:focus-visible {
+  color: var(--bs-btn-hover-color);
+  background-color: var(--bs-btn-hover-bg);
+  border-color: var(--bs-btn-hover-border-color);
+  outline: 0;
+  box-shadow: var(--bs-btn-focus-box-shadow);
+}
+.btn-check:focus-visible + .btn {
+  border-color: var(--bs-btn-hover-border-color);
+  outline: 0;
+  box-shadow: var(--bs-btn-focus-box-shadow);
+}
+.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {
+  color: var(--bs-btn-active-color);
+  background-color: var(--bs-btn-active-bg);
+  border-color: var(--bs-btn-active-border-color);
+}
+.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {
+  box-shadow: var(--bs-btn-focus-box-shadow);
+}
+.btn:disabled, .btn.disabled, fieldset:disabled .btn {
+  color: var(--bs-btn-disabled-color);
+  pointer-events: none;
+  background-color: var(--bs-btn-disabled-bg);
+  border-color: var(--bs-btn-disabled-border-color);
+  opacity: var(--bs-btn-disabled-opacity);
+}
+
+.btn-primary {
+  --bs-btn-color: #fff;
+  --bs-btn-bg: #0d6efd;
+  --bs-btn-border-color: #0d6efd;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #0b5ed7;
+  --bs-btn-hover-border-color: #0a58ca;
+  --bs-btn-focus-shadow-rgb: 49, 132, 253;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #0a58ca;
+  --bs-btn-active-border-color: #0a53be;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #fff;
+  --bs-btn-disabled-bg: #0d6efd;
+  --bs-btn-disabled-border-color: #0d6efd;
+}
+
+.btn-secondary {
+  --bs-btn-color: #fff;
+  --bs-btn-bg: #6c757d;
+  --bs-btn-border-color: #6c757d;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #5c636a;
+  --bs-btn-hover-border-color: #565e64;
+  --bs-btn-focus-shadow-rgb: 130, 138, 145;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #565e64;
+  --bs-btn-active-border-color: #51585e;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #fff;
+  --bs-btn-disabled-bg: #6c757d;
+  --bs-btn-disabled-border-color: #6c757d;
+}
+
+.btn-success {
+  --bs-btn-color: #fff;
+  --bs-btn-bg: #198754;
+  --bs-btn-border-color: #198754;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #157347;
+  --bs-btn-hover-border-color: #146c43;
+  --bs-btn-focus-shadow-rgb: 60, 153, 110;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #146c43;
+  --bs-btn-active-border-color: #13653f;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #fff;
+  --bs-btn-disabled-bg: #198754;
+  --bs-btn-disabled-border-color: #198754;
+}
+
+.btn-info {
+  --bs-btn-color: #000;
+  --bs-btn-bg: #0dcaf0;
+  --bs-btn-border-color: #0dcaf0;
+  --bs-btn-hover-color: #000;
+  --bs-btn-hover-bg: #31d2f2;
+  --bs-btn-hover-border-color: #25cff2;
+  --bs-btn-focus-shadow-rgb: 11, 172, 204;
+  --bs-btn-active-color: #000;
+  --bs-btn-active-bg: #3dd5f3;
+  --bs-btn-active-border-color: #25cff2;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #000;
+  --bs-btn-disabled-bg: #0dcaf0;
+  --bs-btn-disabled-border-color: #0dcaf0;
+}
+
+.btn-warning {
+  --bs-btn-color: #000;
+  --bs-btn-bg: #ffc107;
+  --bs-btn-border-color: #ffc107;
+  --bs-btn-hover-color: #000;
+  --bs-btn-hover-bg: #ffca2c;
+  --bs-btn-hover-border-color: #ffc720;
+  --bs-btn-focus-shadow-rgb: 217, 164, 6;
+  --bs-btn-active-color: #000;
+  --bs-btn-active-bg: #ffcd39;
+  --bs-btn-active-border-color: #ffc720;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #000;
+  --bs-btn-disabled-bg: #ffc107;
+  --bs-btn-disabled-border-color: #ffc107;
+}
+
+.btn-danger {
+  --bs-btn-color: #fff;
+  --bs-btn-bg: #dc3545;
+  --bs-btn-border-color: #dc3545;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #bb2d3b;
+  --bs-btn-hover-border-color: #b02a37;
+  --bs-btn-focus-shadow-rgb: 225, 83, 97;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #b02a37;
+  --bs-btn-active-border-color: #a52834;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #fff;
+  --bs-btn-disabled-bg: #dc3545;
+  --bs-btn-disabled-border-color: #dc3545;
+}
+
+.btn-light {
+  --bs-btn-color: #000;
+  --bs-btn-bg: #f8f9fa;
+  --bs-btn-border-color: #f8f9fa;
+  --bs-btn-hover-color: #000;
+  --bs-btn-hover-bg: #d3d4d5;
+  --bs-btn-hover-border-color: #c6c7c8;
+  --bs-btn-focus-shadow-rgb: 211, 212, 213;
+  --bs-btn-active-color: #000;
+  --bs-btn-active-bg: #c6c7c8;
+  --bs-btn-active-border-color: #babbbc;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #000;
+  --bs-btn-disabled-bg: #f8f9fa;
+  --bs-btn-disabled-border-color: #f8f9fa;
+}
+
+.btn-dark {
+  --bs-btn-color: #fff;
+  --bs-btn-bg: #212529;
+  --bs-btn-border-color: #212529;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #424649;
+  --bs-btn-hover-border-color: #373b3e;
+  --bs-btn-focus-shadow-rgb: 66, 70, 73;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #4d5154;
+  --bs-btn-active-border-color: #373b3e;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #fff;
+  --bs-btn-disabled-bg: #212529;
+  --bs-btn-disabled-border-color: #212529;
+}
+
+.btn-outline-primary {
+  --bs-btn-color: #0d6efd;
+  --bs-btn-border-color: #0d6efd;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #0d6efd;
+  --bs-btn-hover-border-color: #0d6efd;
+  --bs-btn-focus-shadow-rgb: 13, 110, 253;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #0d6efd;
+  --bs-btn-active-border-color: #0d6efd;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #0d6efd;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #0d6efd;
+  --bs-gradient: none;
+}
+
+.btn-outline-secondary {
+  --bs-btn-color: #6c757d;
+  --bs-btn-border-color: #6c757d;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #6c757d;
+  --bs-btn-hover-border-color: #6c757d;
+  --bs-btn-focus-shadow-rgb: 108, 117, 125;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #6c757d;
+  --bs-btn-active-border-color: #6c757d;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #6c757d;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #6c757d;
+  --bs-gradient: none;
+}
+
+.btn-outline-success {
+  --bs-btn-color: #198754;
+  --bs-btn-border-color: #198754;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #198754;
+  --bs-btn-hover-border-color: #198754;
+  --bs-btn-focus-shadow-rgb: 25, 135, 84;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #198754;
+  --bs-btn-active-border-color: #198754;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #198754;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #198754;
+  --bs-gradient: none;
+}
+
+.btn-outline-info {
+  --bs-btn-color: #0dcaf0;
+  --bs-btn-border-color: #0dcaf0;
+  --bs-btn-hover-color: #000;
+  --bs-btn-hover-bg: #0dcaf0;
+  --bs-btn-hover-border-color: #0dcaf0;
+  --bs-btn-focus-shadow-rgb: 13, 202, 240;
+  --bs-btn-active-color: #000;
+  --bs-btn-active-bg: #0dcaf0;
+  --bs-btn-active-border-color: #0dcaf0;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #0dcaf0;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #0dcaf0;
+  --bs-gradient: none;
+}
+
+.btn-outline-warning {
+  --bs-btn-color: #ffc107;
+  --bs-btn-border-color: #ffc107;
+  --bs-btn-hover-color: #000;
+  --bs-btn-hover-bg: #ffc107;
+  --bs-btn-hover-border-color: #ffc107;
+  --bs-btn-focus-shadow-rgb: 255, 193, 7;
+  --bs-btn-active-color: #000;
+  --bs-btn-active-bg: #ffc107;
+  --bs-btn-active-border-color: #ffc107;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #ffc107;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #ffc107;
+  --bs-gradient: none;
+}
+
+.btn-outline-danger {
+  --bs-btn-color: #dc3545;
+  --bs-btn-border-color: #dc3545;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #dc3545;
+  --bs-btn-hover-border-color: #dc3545;
+  --bs-btn-focus-shadow-rgb: 220, 53, 69;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #dc3545;
+  --bs-btn-active-border-color: #dc3545;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #dc3545;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #dc3545;
+  --bs-gradient: none;
+}
+
+.btn-outline-light {
+  --bs-btn-color: #f8f9fa;
+  --bs-btn-border-color: #f8f9fa;
+  --bs-btn-hover-color: #000;
+  --bs-btn-hover-bg: #f8f9fa;
+  --bs-btn-hover-border-color: #f8f9fa;
+  --bs-btn-focus-shadow-rgb: 248, 249, 250;
+  --bs-btn-active-color: #000;
+  --bs-btn-active-bg: #f8f9fa;
+  --bs-btn-active-border-color: #f8f9fa;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #f8f9fa;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #f8f9fa;
+  --bs-gradient: none;
+}
+
+.btn-outline-dark {
+  --bs-btn-color: #212529;
+  --bs-btn-border-color: #212529;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #212529;
+  --bs-btn-hover-border-color: #212529;
+  --bs-btn-focus-shadow-rgb: 33, 37, 41;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #212529;
+  --bs-btn-active-border-color: #212529;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #212529;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #212529;
+  --bs-gradient: none;
+}
+
+.btn-link {
+  --bs-btn-font-weight: 400;
+  --bs-btn-color: var(--bs-link-color);
+  --bs-btn-bg: transparent;
+  --bs-btn-border-color: transparent;
+  --bs-btn-hover-color: var(--bs-link-hover-color);
+  --bs-btn-hover-border-color: transparent;
+  --bs-btn-active-color: var(--bs-link-hover-color);
+  --bs-btn-active-border-color: transparent;
+  --bs-btn-disabled-color: #6c757d;
+  --bs-btn-disabled-border-color: transparent;
+  --bs-btn-box-shadow: none;
+  --bs-btn-focus-shadow-rgb: 49, 132, 253;
+  text-decoration: underline;
+}
+.btn-link:focus-visible {
+  color: var(--bs-btn-color);
+}
+.btn-link:hover {
+  color: var(--bs-btn-hover-color);
+}
+
+.btn-lg, .btn-group-lg > .btn {
+  --bs-btn-padding-y: 0.5rem;
+  --bs-btn-padding-x: 1rem;
+  --bs-btn-font-size: 1.25rem;
+  --bs-btn-border-radius: 0.5rem;
+}
+
+.btn-sm, .btn-group-sm > .btn {
+  --bs-btn-padding-y: 0.25rem;
+  --bs-btn-padding-x: 0.5rem;
+  --bs-btn-font-size: 0.875rem;
+  --bs-btn-border-radius: 0.25rem;
+}
+
+.fade {
+  transition: opacity 0.15s linear;
+}
+@media (prefers-reduced-motion: reduce) {
+  .fade {
+    transition: none;
+  }
+}
+.fade:not(.show) {
+  opacity: 0;
+}
+
+.collapse:not(.show) {
+  display: none;
+}
+
+.collapsing {
+  height: 0;
+  overflow: hidden;
+  transition: height 0.35s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .collapsing {
+    transition: none;
+  }
+}
+.collapsing.collapse-horizontal {
+  width: 0;
+  height: auto;
+  transition: width 0.35s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .collapsing.collapse-horizontal {
+    transition: none;
+  }
+}
+
+.dropup,
+.dropend,
+.dropdown,
+.dropstart,
+.dropup-center,
+.dropdown-center {
+  position: relative;
+}
+
+.dropdown-toggle {
+  white-space: nowrap;
+}
+.dropdown-toggle::after {
+  display: inline-block;
+  margin-left: 0.255em;
+  vertical-align: 0.255em;
+  content: "";
+  border-top: 0.3em solid;
+  border-right: 0.3em solid transparent;
+  border-bottom: 0;
+  border-left: 0.3em solid transparent;
+}
+.dropdown-toggle:empty::after {
+  margin-left: 0;
+}
+
+.dropdown-menu {
+  --bs-dropdown-zindex: 1000;
+  --bs-dropdown-min-width: 10rem;
+  --bs-dropdown-padding-x: 0;
+  --bs-dropdown-padding-y: 0.5rem;
+  --bs-dropdown-spacer: 0.125rem;
+  --bs-dropdown-font-size: 1rem;
+  --bs-dropdown-color: #212529;
+  --bs-dropdown-bg: #fff;
+  --bs-dropdown-border-color: var(--bs-border-color-translucent);
+  --bs-dropdown-border-radius: 0.375rem;
+  --bs-dropdown-border-width: 1px;
+  --bs-dropdown-inner-border-radius: calc(0.375rem - 1px);
+  --bs-dropdown-divider-bg: var(--bs-border-color-translucent);
+  --bs-dropdown-divider-margin-y: 0.5rem;
+  --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+  --bs-dropdown-link-color: #212529;
+  --bs-dropdown-link-hover-color: #1e2125;
+  --bs-dropdown-link-hover-bg: #e9ecef;
+  --bs-dropdown-link-active-color: #fff;
+  --bs-dropdown-link-active-bg: #0d6efd;
+  --bs-dropdown-link-disabled-color: #adb5bd;
+  --bs-dropdown-item-padding-x: 1rem;
+  --bs-dropdown-item-padding-y: 0.25rem;
+  --bs-dropdown-header-color: #6c757d;
+  --bs-dropdown-header-padding-x: 1rem;
+  --bs-dropdown-header-padding-y: 0.5rem;
+  position: absolute;
+  z-index: var(--bs-dropdown-zindex);
+  display: none;
+  min-width: var(--bs-dropdown-min-width);
+  padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);
+  margin: 0;
+  font-size: var(--bs-dropdown-font-size);
+  color: var(--bs-dropdown-color);
+  text-align: left;
+  list-style: none;
+  background-color: var(--bs-dropdown-bg);
+  background-clip: padding-box;
+  border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);
+  border-radius: var(--bs-dropdown-border-radius);
+}
+.dropdown-menu[data-bs-popper] {
+  top: 100%;
+  left: 0;
+  margin-top: var(--bs-dropdown-spacer);
+}
+
+.dropdown-menu-start {
+  --bs-position: start;
+}
+.dropdown-menu-start[data-bs-popper] {
+  right: auto;
+  left: 0;
+}
+
+.dropdown-menu-end {
+  --bs-position: end;
+}
+.dropdown-menu-end[data-bs-popper] {
+  right: 0;
+  left: auto;
+}
+
+@media (min-width: 576px) {
+  .dropdown-menu-sm-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-sm-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-sm-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-sm-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+@media (min-width: 768px) {
+  .dropdown-menu-md-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-md-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-md-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-md-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+@media (min-width: 992px) {
+  .dropdown-menu-lg-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-lg-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-lg-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-lg-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+@media (min-width: 1200px) {
+  .dropdown-menu-xl-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-xl-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-xl-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-xl-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+@media (min-width: 1400px) {
+  .dropdown-menu-xxl-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-xxl-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-xxl-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-xxl-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+.dropup .dropdown-menu[data-bs-popper] {
+  top: auto;
+  bottom: 100%;
+  margin-top: 0;
+  margin-bottom: var(--bs-dropdown-spacer);
+}
+.dropup .dropdown-toggle::after {
+  display: inline-block;
+  margin-left: 0.255em;
+  vertical-align: 0.255em;
+  content: "";
+  border-top: 0;
+  border-right: 0.3em solid transparent;
+  border-bottom: 0.3em solid;
+  border-left: 0.3em solid transparent;
+}
+.dropup .dropdown-toggle:empty::after {
+  margin-left: 0;
+}
+
+.dropend .dropdown-menu[data-bs-popper] {
+  top: 0;
+  right: auto;
+  left: 100%;
+  margin-top: 0;
+  margin-left: var(--bs-dropdown-spacer);
+}
+.dropend .dropdown-toggle::after {
+  display: inline-block;
+  margin-left: 0.255em;
+  vertical-align: 0.255em;
+  content: "";
+  border-top: 0.3em solid transparent;
+  border-right: 0;
+  border-bottom: 0.3em solid transparent;
+  border-left: 0.3em solid;
+}
+.dropend .dropdown-toggle:empty::after {
+  margin-left: 0;
+}
+.dropend .dropdown-toggle::after {
+  vertical-align: 0;
+}
+
+.dropstart .dropdown-menu[data-bs-popper] {
+  top: 0;
+  right: 100%;
+  left: auto;
+  margin-top: 0;
+  margin-right: var(--bs-dropdown-spacer);
+}
+.dropstart .dropdown-toggle::after {
+  display: inline-block;
+  margin-left: 0.255em;
+  vertical-align: 0.255em;
+  content: "";
+}
+.dropstart .dropdown-toggle::after {
+  display: none;
+}
+.dropstart .dropdown-toggle::before {
+  display: inline-block;
+  margin-right: 0.255em;
+  vertical-align: 0.255em;
+  content: "";
+  border-top: 0.3em solid transparent;
+  border-right: 0.3em solid;
+  border-bottom: 0.3em solid transparent;
+}
+.dropstart .dropdown-toggle:empty::after {
+  margin-left: 0;
+}
+.dropstart .dropdown-toggle::before {
+  vertical-align: 0;
+}
+
+.dropdown-divider {
+  height: 0;
+  margin: var(--bs-dropdown-divider-margin-y) 0;
+  overflow: hidden;
+  border-top: 1px solid var(--bs-dropdown-divider-bg);
+  opacity: 1;
+}
+
+.dropdown-item {
+  display: block;
+  width: 100%;
+  padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);
+  clear: both;
+  font-weight: 400;
+  color: var(--bs-dropdown-link-color);
+  text-align: inherit;
+  text-decoration: none;
+  white-space: nowrap;
+  background-color: transparent;
+  border: 0;
+}
+.dropdown-item:hover, .dropdown-item:focus {
+  color: var(--bs-dropdown-link-hover-color);
+  background-color: var(--bs-dropdown-link-hover-bg);
+}
+.dropdown-item.active, .dropdown-item:active {
+  color: var(--bs-dropdown-link-active-color);
+  text-decoration: none;
+  background-color: var(--bs-dropdown-link-active-bg);
+}
+.dropdown-item.disabled, .dropdown-item:disabled {
+  color: var(--bs-dropdown-link-disabled-color);
+  pointer-events: none;
+  background-color: transparent;
+}
+
+.dropdown-menu.show {
+  display: block;
+}
+
+.dropdown-header {
+  display: block;
+  padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);
+  margin-bottom: 0;
+  font-size: 0.875rem;
+  color: var(--bs-dropdown-header-color);
+  white-space: nowrap;
+}
+
+.dropdown-item-text {
+  display: block;
+  padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);
+  color: var(--bs-dropdown-link-color);
+}
+
+.dropdown-menu-dark {
+  --bs-dropdown-color: #dee2e6;
+  --bs-dropdown-bg: #343a40;
+  --bs-dropdown-border-color: var(--bs-border-color-translucent);
+  --bs-dropdown-box-shadow: ;
+  --bs-dropdown-link-color: #dee2e6;
+  --bs-dropdown-link-hover-color: #fff;
+  --bs-dropdown-divider-bg: var(--bs-border-color-translucent);
+  --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);
+  --bs-dropdown-link-active-color: #fff;
+  --bs-dropdown-link-active-bg: #0d6efd;
+  --bs-dropdown-link-disabled-color: #adb5bd;
+  --bs-dropdown-header-color: #adb5bd;
+}
+
+.btn-group,
+.btn-group-vertical {
+  position: relative;
+  display: inline-flex;
+  vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+  position: relative;
+  flex: 1 1 auto;
+}
+.btn-group > .btn-check:checked + .btn,
+.btn-group > .btn-check:focus + .btn,
+.btn-group > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn-check:checked + .btn,
+.btn-group-vertical > .btn-check:focus + .btn,
+.btn-group-vertical > .btn:hover,
+.btn-group-vertical > .btn:focus,
+.btn-group-vertical > .btn:active,
+.btn-group-vertical > .btn.active {
+  z-index: 1;
+}
+
+.btn-toolbar {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: flex-start;
+}
+.btn-toolbar .input-group {
+  width: auto;
+}
+
+.btn-group {
+  border-radius: 0.375rem;
+}
+.btn-group > :not(.btn-check:first-child) + .btn,
+.btn-group > .btn-group:not(:first-child) {
+  margin-left: -1px;
+}
+.btn-group > .btn:not(:last-child):not(.dropdown-toggle),
+.btn-group > .btn.dropdown-toggle-split:first-child,
+.btn-group > .btn-group:not(:last-child) > .btn {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.btn-group > .btn:nth-child(n+3),
+.btn-group > :not(.btn-check) + .btn,
+.btn-group > .btn-group:not(:first-child) > .btn {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.dropdown-toggle-split {
+  padding-right: 0.5625rem;
+  padding-left: 0.5625rem;
+}
+.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {
+  margin-left: 0;
+}
+.dropstart .dropdown-toggle-split::before {
+  margin-right: 0;
+}
+
+.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {
+  padding-right: 0.375rem;
+  padding-left: 0.375rem;
+}
+
+.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {
+  padding-right: 0.75rem;
+  padding-left: 0.75rem;
+}
+
+.btn-group-vertical {
+  flex-direction: column;
+  align-items: flex-start;
+  justify-content: center;
+}
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group {
+  width: 100%;
+}
+.btn-group-vertical > .btn:not(:first-child),
+.btn-group-vertical > .btn-group:not(:first-child) {
+  margin-top: -1px;
+}
+.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),
+.btn-group-vertical > .btn-group:not(:last-child) > .btn {
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn ~ .btn,
+.btn-group-vertical > .btn-group:not(:first-child) > .btn {
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+
+.nav {
+  --bs-nav-link-padding-x: 1rem;
+  --bs-nav-link-padding-y: 0.5rem;
+  --bs-nav-link-font-weight: ;
+  --bs-nav-link-color: var(--bs-link-color);
+  --bs-nav-link-hover-color: var(--bs-link-hover-color);
+  --bs-nav-link-disabled-color: #6c757d;
+  display: flex;
+  flex-wrap: wrap;
+  padding-left: 0;
+  margin-bottom: 0;
+  list-style: none;
+}
+
+.nav-link {
+  display: block;
+  padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);
+  font-size: var(--bs-nav-link-font-size);
+  font-weight: var(--bs-nav-link-font-weight);
+  color: var(--bs-nav-link-color);
+  text-decoration: none;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .nav-link {
+    transition: none;
+  }
+}
+.nav-link:hover, .nav-link:focus {
+  color: var(--bs-nav-link-hover-color);
+}
+.nav-link.disabled {
+  color: var(--bs-nav-link-disabled-color);
+  pointer-events: none;
+  cursor: default;
+}
+
+.nav-tabs {
+  --bs-nav-tabs-border-width: 1px;
+  --bs-nav-tabs-border-color: #dee2e6;
+  --bs-nav-tabs-border-radius: 0.375rem;
+  --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;
+  --bs-nav-tabs-link-active-color: #495057;
+  --bs-nav-tabs-link-active-bg: #fff;
+  --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;
+  border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);
+}
+.nav-tabs .nav-link {
+  margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));
+  background: none;
+  border: var(--bs-nav-tabs-border-width) solid transparent;
+  border-top-left-radius: var(--bs-nav-tabs-border-radius);
+  border-top-right-radius: var(--bs-nav-tabs-border-radius);
+}
+.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {
+  isolation: isolate;
+  border-color: var(--bs-nav-tabs-link-hover-border-color);
+}
+.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {
+  color: var(--bs-nav-link-disabled-color);
+  background-color: transparent;
+  border-color: transparent;
+}
+.nav-tabs .nav-link.active,
+.nav-tabs .nav-item.show .nav-link {
+  color: var(--bs-nav-tabs-link-active-color);
+  background-color: var(--bs-nav-tabs-link-active-bg);
+  border-color: var(--bs-nav-tabs-link-active-border-color);
+}
+.nav-tabs .dropdown-menu {
+  margin-top: calc(-1 * var(--bs-nav-tabs-border-width));
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+
+.nav-pills {
+  --bs-nav-pills-border-radius: 0.375rem;
+  --bs-nav-pills-link-active-color: #fff;
+  --bs-nav-pills-link-active-bg: #0d6efd;
+}
+.nav-pills .nav-link {
+  background: none;
+  border: 0;
+  border-radius: var(--bs-nav-pills-border-radius);
+}
+.nav-pills .nav-link:disabled {
+  color: var(--bs-nav-link-disabled-color);
+  background-color: transparent;
+  border-color: transparent;
+}
+.nav-pills .nav-link.active,
+.nav-pills .show > .nav-link {
+  color: var(--bs-nav-pills-link-active-color);
+  background-color: var(--bs-nav-pills-link-active-bg);
+}
+
+.nav-fill > .nav-link,
+.nav-fill .nav-item {
+  flex: 1 1 auto;
+  text-align: center;
+}
+
+.nav-justified > .nav-link,
+.nav-justified .nav-item {
+  flex-basis: 0;
+  flex-grow: 1;
+  text-align: center;
+}
+
+.nav-fill .nav-item .nav-link,
+.nav-justified .nav-item .nav-link {
+  width: 100%;
+}
+
+.tab-content > .tab-pane {
+  display: none;
+}
+.tab-content > .active {
+  display: block;
+}
+
+.navbar {
+  --bs-navbar-padding-x: 0;
+  --bs-navbar-padding-y: 0.5rem;
+  --bs-navbar-color: rgba(0, 0, 0, 0.55);
+  --bs-navbar-hover-color: rgba(0, 0, 0, 0.7);
+  --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3);
+  --bs-navbar-active-color: rgba(0, 0, 0, 0.9);
+  --bs-navbar-brand-padding-y: 0.3125rem;
+  --bs-navbar-brand-margin-end: 1rem;
+  --bs-navbar-brand-font-size: 1.25rem;
+  --bs-navbar-brand-color: rgba(0, 0, 0, 0.9);
+  --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9);
+  --bs-navbar-nav-link-padding-x: 0.5rem;
+  --bs-navbar-toggler-padding-y: 0.25rem;
+  --bs-navbar-toggler-padding-x: 0.75rem;
+  --bs-navbar-toggler-font-size: 1.25rem;
+  --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+  --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1);
+  --bs-navbar-toggler-border-radius: 0.375rem;
+  --bs-navbar-toggler-focus-width: 0.25rem;
+  --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;
+  position: relative;
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  justify-content: space-between;
+  padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);
+}
+.navbar > .container,
+.navbar > .container-fluid,
+.navbar > .container-sm,
+.navbar > .container-md,
+.navbar > .container-lg,
+.navbar > .container-xl,
+.navbar > .container-xxl {
+  display: flex;
+  flex-wrap: inherit;
+  align-items: center;
+  justify-content: space-between;
+}
+.navbar-brand {
+  padding-top: var(--bs-navbar-brand-padding-y);
+  padding-bottom: var(--bs-navbar-brand-padding-y);
+  margin-right: var(--bs-navbar-brand-margin-end);
+  font-size: var(--bs-navbar-brand-font-size);
+  color: var(--bs-navbar-brand-color);
+  text-decoration: none;
+  white-space: nowrap;
+}
+.navbar-brand:hover, .navbar-brand:focus {
+  color: var(--bs-navbar-brand-hover-color);
+}
+
+.navbar-nav {
+  --bs-nav-link-padding-x: 0;
+  --bs-nav-link-padding-y: 0.5rem;
+  --bs-nav-link-font-weight: ;
+  --bs-nav-link-color: var(--bs-navbar-color);
+  --bs-nav-link-hover-color: var(--bs-navbar-hover-color);
+  --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);
+  display: flex;
+  flex-direction: column;
+  padding-left: 0;
+  margin-bottom: 0;
+  list-style: none;
+}
+.navbar-nav .show > .nav-link,
+.navbar-nav .nav-link.active {
+  color: var(--bs-navbar-active-color);
+}
+.navbar-nav .dropdown-menu {
+  position: static;
+}
+
+.navbar-text {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+  color: var(--bs-navbar-color);
+}
+.navbar-text a,
+.navbar-text a:hover,
+.navbar-text a:focus {
+  color: var(--bs-navbar-active-color);
+}
+
+.navbar-collapse {
+  flex-basis: 100%;
+  flex-grow: 1;
+  align-items: center;
+}
+
+.navbar-toggler {
+  padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);
+  font-size: var(--bs-navbar-toggler-font-size);
+  line-height: 1;
+  color: var(--bs-navbar-color);
+  background-color: transparent;
+  border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);
+  border-radius: var(--bs-navbar-toggler-border-radius);
+  transition: var(--bs-navbar-toggler-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .navbar-toggler {
+    transition: none;
+  }
+}
+.navbar-toggler:hover {
+  text-decoration: none;
+}
+.navbar-toggler:focus {
+  text-decoration: none;
+  outline: 0;
+  box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);
+}
+
+.navbar-toggler-icon {
+  display: inline-block;
+  width: 1.5em;
+  height: 1.5em;
+  vertical-align: middle;
+  background-image: var(--bs-navbar-toggler-icon-bg);
+  background-repeat: no-repeat;
+  background-position: center;
+  background-size: 100%;
+}
+
+.navbar-nav-scroll {
+  max-height: var(--bs-scroll-height, 75vh);
+  overflow-y: auto;
+}
+
+@media (min-width: 576px) {
+  .navbar-expand-sm {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-sm .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-sm .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-sm .navbar-nav .nav-link {
+    padding-right: var(--bs-navbar-nav-link-padding-x);
+    padding-left: var(--bs-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-sm .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-sm .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-sm .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-sm .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    transition: none;
+  }
+  .navbar-expand-sm .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-sm .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-expand-md {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-md .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-md .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-md .navbar-nav .nav-link {
+    padding-right: var(--bs-navbar-nav-link-padding-x);
+    padding-left: var(--bs-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-md .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-md .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-md .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-md .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    transition: none;
+  }
+  .navbar-expand-md .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-md .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 992px) {
+  .navbar-expand-lg {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-lg .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-lg .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-lg .navbar-nav .nav-link {
+    padding-right: var(--bs-navbar-nav-link-padding-x);
+    padding-left: var(--bs-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-lg .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-lg .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-lg .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-lg .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    transition: none;
+  }
+  .navbar-expand-lg .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-lg .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 1200px) {
+  .navbar-expand-xl {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-xl .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-xl .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-xl .navbar-nav .nav-link {
+    padding-right: var(--bs-navbar-nav-link-padding-x);
+    padding-left: var(--bs-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-xl .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-xl .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-xl .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-xl .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    transition: none;
+  }
+  .navbar-expand-xl .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-xl .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 1400px) {
+  .navbar-expand-xxl {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-xxl .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-xxl .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-xxl .navbar-nav .nav-link {
+    padding-right: var(--bs-navbar-nav-link-padding-x);
+    padding-left: var(--bs-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-xxl .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-xxl .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-xxl .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-xxl .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    transition: none;
+  }
+  .navbar-expand-xxl .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-xxl .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+.navbar-expand {
+  flex-wrap: nowrap;
+  justify-content: flex-start;
+}
+.navbar-expand .navbar-nav {
+  flex-direction: row;
+}
+.navbar-expand .navbar-nav .dropdown-menu {
+  position: absolute;
+}
+.navbar-expand .navbar-nav .nav-link {
+  padding-right: var(--bs-navbar-nav-link-padding-x);
+  padding-left: var(--bs-navbar-nav-link-padding-x);
+}
+.navbar-expand .navbar-nav-scroll {
+  overflow: visible;
+}
+.navbar-expand .navbar-collapse {
+  display: flex !important;
+  flex-basis: auto;
+}
+.navbar-expand .navbar-toggler {
+  display: none;
+}
+.navbar-expand .offcanvas {
+  position: static;
+  z-index: auto;
+  flex-grow: 1;
+  width: auto !important;
+  height: auto !important;
+  visibility: visible !important;
+  background-color: transparent !important;
+  border: 0 !important;
+  transform: none !important;
+  transition: none;
+}
+.navbar-expand .offcanvas .offcanvas-header {
+  display: none;
+}
+.navbar-expand .offcanvas .offcanvas-body {
+  display: flex;
+  flex-grow: 0;
+  padding: 0;
+  overflow-y: visible;
+}
+
+.navbar-dark {
+  --bs-navbar-color: rgba(255, 255, 255, 0.55);
+  --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);
+  --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);
+  --bs-navbar-active-color: #fff;
+  --bs-navbar-brand-color: #fff;
+  --bs-navbar-brand-hover-color: #fff;
+  --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);
+  --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+}
+
+.card {
+  --bs-card-spacer-y: 1rem;
+  --bs-card-spacer-x: 1rem;
+  --bs-card-title-spacer-y: 0.5rem;
+  --bs-card-border-width: 1px;
+  --bs-card-border-color: var(--bs-border-color-translucent);
+  --bs-card-border-radius: 0.375rem;
+  --bs-card-box-shadow: ;
+  --bs-card-inner-border-radius: calc(0.375rem - 1px);
+  --bs-card-cap-padding-y: 0.5rem;
+  --bs-card-cap-padding-x: 1rem;
+  --bs-card-cap-bg: rgba(0, 0, 0, 0.03);
+  --bs-card-cap-color: ;
+  --bs-card-height: ;
+  --bs-card-color: ;
+  --bs-card-bg: #fff;
+  --bs-card-img-overlay-padding: 1rem;
+  --bs-card-group-margin: 0.75rem;
+  position: relative;
+  display: flex;
+  flex-direction: column;
+  min-width: 0;
+  height: var(--bs-card-height);
+  word-wrap: break-word;
+  background-color: var(--bs-card-bg);
+  background-clip: border-box;
+  border: var(--bs-card-border-width) solid var(--bs-card-border-color);
+  border-radius: var(--bs-card-border-radius);
+}
+.card > hr {
+  margin-right: 0;
+  margin-left: 0;
+}
+.card > .list-group {
+  border-top: inherit;
+  border-bottom: inherit;
+}
+.card > .list-group:first-child {
+  border-top-width: 0;
+  border-top-left-radius: var(--bs-card-inner-border-radius);
+  border-top-right-radius: var(--bs-card-inner-border-radius);
+}
+.card > .list-group:last-child {
+  border-bottom-width: 0;
+  border-bottom-right-radius: var(--bs-card-inner-border-radius);
+  border-bottom-left-radius: var(--bs-card-inner-border-radius);
+}
+.card > .card-header + .list-group,
+.card > .list-group + .card-footer {
+  border-top: 0;
+}
+
+.card-body {
+  flex: 1 1 auto;
+  padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);
+  color: var(--bs-card-color);
+}
+
+.card-title {
+  margin-bottom: var(--bs-card-title-spacer-y);
+}
+
+.card-subtitle {
+  margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));
+  margin-bottom: 0;
+}
+
+.card-text:last-child {
+  margin-bottom: 0;
+}
+
+.card-link + .card-link {
+  margin-left: var(--bs-card-spacer-x);
+}
+
+.card-header {
+  padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);
+  margin-bottom: 0;
+  color: var(--bs-card-cap-color);
+  background-color: var(--bs-card-cap-bg);
+  border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);
+}
+.card-header:first-child {
+  border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;
+}
+
+.card-footer {
+  padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);
+  color: var(--bs-card-cap-color);
+  background-color: var(--bs-card-cap-bg);
+  border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);
+}
+.card-footer:last-child {
+  border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);
+}
+
+.card-header-tabs {
+  margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));
+  margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));
+  margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));
+  border-bottom: 0;
+}
+.card-header-tabs .nav-link.active {
+  background-color: var(--bs-card-bg);
+  border-bottom-color: var(--bs-card-bg);
+}
+
+.card-header-pills {
+  margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));
+  margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));
+}
+
+.card-img-overlay {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  padding: var(--bs-card-img-overlay-padding);
+  border-radius: var(--bs-card-inner-border-radius);
+}
+
+.card-img,
+.card-img-top,
+.card-img-bottom {
+  width: 100%;
+}
+
+.card-img,
+.card-img-top {
+  border-top-left-radius: var(--bs-card-inner-border-radius);
+  border-top-right-radius: var(--bs-card-inner-border-radius);
+}
+
+.card-img,
+.card-img-bottom {
+  border-bottom-right-radius: var(--bs-card-inner-border-radius);
+  border-bottom-left-radius: var(--bs-card-inner-border-radius);
+}
+
+.card-group > .card {
+  margin-bottom: var(--bs-card-group-margin);
+}
+@media (min-width: 576px) {
+  .card-group {
+    display: flex;
+    flex-flow: row wrap;
+  }
+  .card-group > .card {
+    flex: 1 0 0%;
+    margin-bottom: 0;
+  }
+  .card-group > .card + .card {
+    margin-left: 0;
+    border-left: 0;
+  }
+  .card-group > .card:not(:last-child) {
+    border-top-right-radius: 0;
+    border-bottom-right-radius: 0;
+  }
+  .card-group > .card:not(:last-child) .card-img-top,
+  .card-group > .card:not(:last-child) .card-header {
+    border-top-right-radius: 0;
+  }
+  .card-group > .card:not(:last-child) .card-img-bottom,
+  .card-group > .card:not(:last-child) .card-footer {
+    border-bottom-right-radius: 0;
+  }
+  .card-group > .card:not(:first-child) {
+    border-top-left-radius: 0;
+    border-bottom-left-radius: 0;
+  }
+  .card-group > .card:not(:first-child) .card-img-top,
+  .card-group > .card:not(:first-child) .card-header {
+    border-top-left-radius: 0;
+  }
+  .card-group > .card:not(:first-child) .card-img-bottom,
+  .card-group > .card:not(:first-child) .card-footer {
+    border-bottom-left-radius: 0;
+  }
+}
+
+.accordion {
+  --bs-accordion-color: #212529;
+  --bs-accordion-bg: #fff;
+  --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;
+  --bs-accordion-border-color: var(--bs-border-color);
+  --bs-accordion-border-width: 1px;
+  --bs-accordion-border-radius: 0.375rem;
+  --bs-accordion-inner-border-radius: calc(0.375rem - 1px);
+  --bs-accordion-btn-padding-x: 1.25rem;
+  --bs-accordion-btn-padding-y: 1rem;
+  --bs-accordion-btn-color: #212529;
+  --bs-accordion-btn-bg: var(--bs-accordion-bg);
+  --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  --bs-accordion-btn-icon-width: 1.25rem;
+  --bs-accordion-btn-icon-transform: rotate(-180deg);
+  --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;
+  --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  --bs-accordion-btn-focus-border-color: #86b7fe;
+  --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+  --bs-accordion-body-padding-x: 1.25rem;
+  --bs-accordion-body-padding-y: 1rem;
+  --bs-accordion-active-color: #0c63e4;
+  --bs-accordion-active-bg: #e7f1ff;
+}
+
+.accordion-button {
+  position: relative;
+  display: flex;
+  align-items: center;
+  width: 100%;
+  padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);
+  font-size: 1rem;
+  color: var(--bs-accordion-btn-color);
+  text-align: left;
+  background-color: var(--bs-accordion-btn-bg);
+  border: 0;
+  border-radius: 0;
+  overflow-anchor: none;
+  transition: var(--bs-accordion-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .accordion-button {
+    transition: none;
+  }
+}
+.accordion-button:not(.collapsed) {
+  color: var(--bs-accordion-active-color);
+  background-color: var(--bs-accordion-active-bg);
+  box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);
+}
+.accordion-button:not(.collapsed)::after {
+  background-image: var(--bs-accordion-btn-active-icon);
+  transform: var(--bs-accordion-btn-icon-transform);
+}
+.accordion-button::after {
+  flex-shrink: 0;
+  width: var(--bs-accordion-btn-icon-width);
+  height: var(--bs-accordion-btn-icon-width);
+  margin-left: auto;
+  content: "";
+  background-image: var(--bs-accordion-btn-icon);
+  background-repeat: no-repeat;
+  background-size: var(--bs-accordion-btn-icon-width);
+  transition: var(--bs-accordion-btn-icon-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .accordion-button::after {
+    transition: none;
+  }
+}
+.accordion-button:hover {
+  z-index: 2;
+}
+.accordion-button:focus {
+  z-index: 3;
+  border-color: var(--bs-accordion-btn-focus-border-color);
+  outline: 0;
+  box-shadow: var(--bs-accordion-btn-focus-box-shadow);
+}
+
+.accordion-header {
+  margin-bottom: 0;
+}
+
+.accordion-item {
+  color: var(--bs-accordion-color);
+  background-color: var(--bs-accordion-bg);
+  border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);
+}
+.accordion-item:first-of-type {
+  border-top-left-radius: var(--bs-accordion-border-radius);
+  border-top-right-radius: var(--bs-accordion-border-radius);
+}
+.accordion-item:first-of-type .accordion-button {
+  border-top-left-radius: var(--bs-accordion-inner-border-radius);
+  border-top-right-radius: var(--bs-accordion-inner-border-radius);
+}
+.accordion-item:not(:first-of-type) {
+  border-top: 0;
+}
+.accordion-item:last-of-type {
+  border-bottom-right-radius: var(--bs-accordion-border-radius);
+  border-bottom-left-radius: var(--bs-accordion-border-radius);
+}
+.accordion-item:last-of-type .accordion-button.collapsed {
+  border-bottom-right-radius: var(--bs-accordion-inner-border-radius);
+  border-bottom-left-radius: var(--bs-accordion-inner-border-radius);
+}
+.accordion-item:last-of-type .accordion-collapse {
+  border-bottom-right-radius: var(--bs-accordion-border-radius);
+  border-bottom-left-radius: var(--bs-accordion-border-radius);
+}
+
+.accordion-body {
+  padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);
+}
+
+.accordion-flush .accordion-collapse {
+  border-width: 0;
+}
+.accordion-flush .accordion-item {
+  border-right: 0;
+  border-left: 0;
+  border-radius: 0;
+}
+.accordion-flush .accordion-item:first-child {
+  border-top: 0;
+}
+.accordion-flush .accordion-item:last-child {
+  border-bottom: 0;
+}
+.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {
+  border-radius: 0;
+}
+
+.breadcrumb {
+  --bs-breadcrumb-padding-x: 0;
+  --bs-breadcrumb-padding-y: 0;
+  --bs-breadcrumb-margin-bottom: 1rem;
+  --bs-breadcrumb-bg: ;
+  --bs-breadcrumb-border-radius: ;
+  --bs-breadcrumb-divider-color: #6c757d;
+  --bs-breadcrumb-item-padding-x: 0.5rem;
+  --bs-breadcrumb-item-active-color: #6c757d;
+  display: flex;
+  flex-wrap: wrap;
+  padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);
+  margin-bottom: var(--bs-breadcrumb-margin-bottom);
+  font-size: var(--bs-breadcrumb-font-size);
+  list-style: none;
+  background-color: var(--bs-breadcrumb-bg);
+  border-radius: var(--bs-breadcrumb-border-radius);
+}
+
+.breadcrumb-item + .breadcrumb-item {
+  padding-left: var(--bs-breadcrumb-item-padding-x);
+}
+.breadcrumb-item + .breadcrumb-item::before {
+  float: left;
+  padding-right: var(--bs-breadcrumb-item-padding-x);
+  color: var(--bs-breadcrumb-divider-color);
+  content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */;
+}
+.breadcrumb-item.active {
+  color: var(--bs-breadcrumb-item-active-color);
+}
+
+.pagination {
+  --bs-pagination-padding-x: 0.75rem;
+  --bs-pagination-padding-y: 0.375rem;
+  --bs-pagination-font-size: 1rem;
+  --bs-pagination-color: var(--bs-link-color);
+  --bs-pagination-bg: #fff;
+  --bs-pagination-border-width: 1px;
+  --bs-pagination-border-color: #dee2e6;
+  --bs-pagination-border-radius: 0.375rem;
+  --bs-pagination-hover-color: var(--bs-link-hover-color);
+  --bs-pagination-hover-bg: #e9ecef;
+  --bs-pagination-hover-border-color: #dee2e6;
+  --bs-pagination-focus-color: var(--bs-link-hover-color);
+  --bs-pagination-focus-bg: #e9ecef;
+  --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+  --bs-pagination-active-color: #fff;
+  --bs-pagination-active-bg: #0d6efd;
+  --bs-pagination-active-border-color: #0d6efd;
+  --bs-pagination-disabled-color: #6c757d;
+  --bs-pagination-disabled-bg: #fff;
+  --bs-pagination-disabled-border-color: #dee2e6;
+  display: flex;
+  padding-left: 0;
+  list-style: none;
+}
+
+.page-link {
+  position: relative;
+  display: block;
+  padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);
+  font-size: var(--bs-pagination-font-size);
+  color: var(--bs-pagination-color);
+  text-decoration: none;
+  background-color: var(--bs-pagination-bg);
+  border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .page-link {
+    transition: none;
+  }
+}
+.page-link:hover {
+  z-index: 2;
+  color: var(--bs-pagination-hover-color);
+  background-color: var(--bs-pagination-hover-bg);
+  border-color: var(--bs-pagination-hover-border-color);
+}
+.page-link:focus {
+  z-index: 3;
+  color: var(--bs-pagination-focus-color);
+  background-color: var(--bs-pagination-focus-bg);
+  outline: 0;
+  box-shadow: var(--bs-pagination-focus-box-shadow);
+}
+.page-link.active, .active > .page-link {
+  z-index: 3;
+  color: var(--bs-pagination-active-color);
+  background-color: var(--bs-pagination-active-bg);
+  border-color: var(--bs-pagination-active-border-color);
+}
+.page-link.disabled, .disabled > .page-link {
+  color: var(--bs-pagination-disabled-color);
+  pointer-events: none;
+  background-color: var(--bs-pagination-disabled-bg);
+  border-color: var(--bs-pagination-disabled-border-color);
+}
+
+.page-item:not(:first-child) .page-link {
+  margin-left: -1px;
+}
+.page-item:first-child .page-link {
+  border-top-left-radius: var(--bs-pagination-border-radius);
+  border-bottom-left-radius: var(--bs-pagination-border-radius);
+}
+.page-item:last-child .page-link {
+  border-top-right-radius: var(--bs-pagination-border-radius);
+  border-bottom-right-radius: var(--bs-pagination-border-radius);
+}
+
+.pagination-lg {
+  --bs-pagination-padding-x: 1.5rem;
+  --bs-pagination-padding-y: 0.75rem;
+  --bs-pagination-font-size: 1.25rem;
+  --bs-pagination-border-radius: 0.5rem;
+}
+
+.pagination-sm {
+  --bs-pagination-padding-x: 0.5rem;
+  --bs-pagination-padding-y: 0.25rem;
+  --bs-pagination-font-size: 0.875rem;
+  --bs-pagination-border-radius: 0.25rem;
+}
+
+.badge {
+  --bs-badge-padding-x: 0.65em;
+  --bs-badge-padding-y: 0.35em;
+  --bs-badge-font-size: 0.75em;
+  --bs-badge-font-weight: 700;
+  --bs-badge-color: #fff;
+  --bs-badge-border-radius: 0.375rem;
+  display: inline-block;
+  padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);
+  font-size: var(--bs-badge-font-size);
+  font-weight: var(--bs-badge-font-weight);
+  line-height: 1;
+  color: var(--bs-badge-color);
+  text-align: center;
+  white-space: nowrap;
+  vertical-align: baseline;
+  border-radius: var(--bs-badge-border-radius);
+}
+.badge:empty {
+  display: none;
+}
+
+.btn .badge {
+  position: relative;
+  top: -1px;
+}
+
+.alert {
+  --bs-alert-bg: transparent;
+  --bs-alert-padding-x: 1rem;
+  --bs-alert-padding-y: 1rem;
+  --bs-alert-margin-bottom: 1rem;
+  --bs-alert-color: inherit;
+  --bs-alert-border-color: transparent;
+  --bs-alert-border: 1px solid var(--bs-alert-border-color);
+  --bs-alert-border-radius: 0.375rem;
+  position: relative;
+  padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);
+  margin-bottom: var(--bs-alert-margin-bottom);
+  color: var(--bs-alert-color);
+  background-color: var(--bs-alert-bg);
+  border: var(--bs-alert-border);
+  border-radius: var(--bs-alert-border-radius);
+}
+
+.alert-heading {
+  color: inherit;
+}
+
+.alert-link {
+  font-weight: 700;
+}
+
+.alert-dismissible {
+  padding-right: 3rem;
+}
+.alert-dismissible .btn-close {
+  position: absolute;
+  top: 0;
+  right: 0;
+  z-index: 2;
+  padding: 1.25rem 1rem;
+}
+
+.alert-primary {
+  --bs-alert-color: #084298;
+  --bs-alert-bg: #cfe2ff;
+  --bs-alert-border-color: #b6d4fe;
+}
+.alert-primary .alert-link {
+  color: #06357a;
+}
+
+.alert-secondary {
+  --bs-alert-color: #41464b;
+  --bs-alert-bg: #e2e3e5;
+  --bs-alert-border-color: #d3d6d8;
+}
+.alert-secondary .alert-link {
+  color: #34383c;
+}
+
+.alert-success {
+  --bs-alert-color: #0f5132;
+  --bs-alert-bg: #d1e7dd;
+  --bs-alert-border-color: #badbcc;
+}
+.alert-success .alert-link {
+  color: #0c4128;
+}
+
+.alert-info {
+  --bs-alert-color: #055160;
+  --bs-alert-bg: #cff4fc;
+  --bs-alert-border-color: #b6effb;
+}
+.alert-info .alert-link {
+  color: #04414d;
+}
+
+.alert-warning {
+  --bs-alert-color: #664d03;
+  --bs-alert-bg: #fff3cd;
+  --bs-alert-border-color: #ffecb5;
+}
+.alert-warning .alert-link {
+  color: #523e02;
+}
+
+.alert-danger {
+  --bs-alert-color: #842029;
+  --bs-alert-bg: #f8d7da;
+  --bs-alert-border-color: #f5c2c7;
+}
+.alert-danger .alert-link {
+  color: #6a1a21;
+}
+
+.alert-light {
+  --bs-alert-color: #636464;
+  --bs-alert-bg: #fefefe;
+  --bs-alert-border-color: #fdfdfe;
+}
+.alert-light .alert-link {
+  color: #4f5050;
+}
+
+.alert-dark {
+  --bs-alert-color: #141619;
+  --bs-alert-bg: #d3d3d4;
+  --bs-alert-border-color: #bcbebf;
+}
+.alert-dark .alert-link {
+  color: #101214;
+}
+
+@keyframes progress-bar-stripes {
+  0% {
+    background-position-x: 1rem;
+  }
+}
+.progress {
+  --bs-progress-height: 1rem;
+  --bs-progress-font-size: 0.75rem;
+  --bs-progress-bg: #e9ecef;
+  --bs-progress-border-radius: 0.375rem;
+  --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);
+  --bs-progress-bar-color: #fff;
+  --bs-progress-bar-bg: #0d6efd;
+  --bs-progress-bar-transition: width 0.6s ease;
+  display: flex;
+  height: var(--bs-progress-height);
+  overflow: hidden;
+  font-size: var(--bs-progress-font-size);
+  background-color: var(--bs-progress-bg);
+  border-radius: var(--bs-progress-border-radius);
+}
+
+.progress-bar {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  overflow: hidden;
+  color: var(--bs-progress-bar-color);
+  text-align: center;
+  white-space: nowrap;
+  background-color: var(--bs-progress-bar-bg);
+  transition: var(--bs-progress-bar-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .progress-bar {
+    transition: none;
+  }
+}
+
+.progress-bar-striped {
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-size: var(--bs-progress-height) var(--bs-progress-height);
+}
+
+.progress-bar-animated {
+  animation: 1s linear infinite progress-bar-stripes;
+}
+@media (prefers-reduced-motion: reduce) {
+  .progress-bar-animated {
+    animation: none;
+  }
+}
+
+.list-group {
+  --bs-list-group-color: #212529;
+  --bs-list-group-bg: #fff;
+  --bs-list-group-border-color: rgba(0, 0, 0, 0.125);
+  --bs-list-group-border-width: 1px;
+  --bs-list-group-border-radius: 0.375rem;
+  --bs-list-group-item-padding-x: 1rem;
+  --bs-list-group-item-padding-y: 0.5rem;
+  --bs-list-group-action-color: #495057;
+  --bs-list-group-action-hover-color: #495057;
+  --bs-list-group-action-hover-bg: #f8f9fa;
+  --bs-list-group-action-active-color: #212529;
+  --bs-list-group-action-active-bg: #e9ecef;
+  --bs-list-group-disabled-color: #6c757d;
+  --bs-list-group-disabled-bg: #fff;
+  --bs-list-group-active-color: #fff;
+  --bs-list-group-active-bg: #0d6efd;
+  --bs-list-group-active-border-color: #0d6efd;
+  display: flex;
+  flex-direction: column;
+  padding-left: 0;
+  margin-bottom: 0;
+  border-radius: var(--bs-list-group-border-radius);
+}
+
+.list-group-numbered {
+  list-style-type: none;
+  counter-reset: section;
+}
+.list-group-numbered > .list-group-item::before {
+  content: counters(section, ".") ". ";
+  counter-increment: section;
+}
+
+.list-group-item-action {
+  width: 100%;
+  color: var(--bs-list-group-action-color);
+  text-align: inherit;
+}
+.list-group-item-action:hover, .list-group-item-action:focus {
+  z-index: 1;
+  color: var(--bs-list-group-action-hover-color);
+  text-decoration: none;
+  background-color: var(--bs-list-group-action-hover-bg);
+}
+.list-group-item-action:active {
+  color: var(--bs-list-group-action-active-color);
+  background-color: var(--bs-list-group-action-active-bg);
+}
+
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);
+  color: var(--bs-list-group-color);
+  text-decoration: none;
+  background-color: var(--bs-list-group-bg);
+  border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);
+}
+.list-group-item:first-child {
+  border-top-left-radius: inherit;
+  border-top-right-radius: inherit;
+}
+.list-group-item:last-child {
+  border-bottom-right-radius: inherit;
+  border-bottom-left-radius: inherit;
+}
+.list-group-item.disabled, .list-group-item:disabled {
+  color: var(--bs-list-group-disabled-color);
+  pointer-events: none;
+  background-color: var(--bs-list-group-disabled-bg);
+}
+.list-group-item.active {
+  z-index: 2;
+  color: var(--bs-list-group-active-color);
+  background-color: var(--bs-list-group-active-bg);
+  border-color: var(--bs-list-group-active-border-color);
+}
+.list-group-item + .list-group-item {
+  border-top-width: 0;
+}
+.list-group-item + .list-group-item.active {
+  margin-top: calc(-1 * var(--bs-list-group-border-width));
+  border-top-width: var(--bs-list-group-border-width);
+}
+
+.list-group-horizontal {
+  flex-direction: row;
+}
+.list-group-horizontal > .list-group-item:first-child:not(:last-child) {
+  border-bottom-left-radius: var(--bs-list-group-border-radius);
+  border-top-right-radius: 0;
+}
+.list-group-horizontal > .list-group-item:last-child:not(:first-child) {
+  border-top-right-radius: var(--bs-list-group-border-radius);
+  border-bottom-left-radius: 0;
+}
+.list-group-horizontal > .list-group-item.active {
+  margin-top: 0;
+}
+.list-group-horizontal > .list-group-item + .list-group-item {
+  border-top-width: var(--bs-list-group-border-width);
+  border-left-width: 0;
+}
+.list-group-horizontal > .list-group-item + .list-group-item.active {
+  margin-left: calc(-1 * var(--bs-list-group-border-width));
+  border-left-width: var(--bs-list-group-border-width);
+}
+
+@media (min-width: 576px) {
+  .list-group-horizontal-sm {
+    flex-direction: row;
+  }
+  .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--bs-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--bs-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item + .list-group-item {
+    border-top-width: var(--bs-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--bs-list-group-border-width));
+    border-left-width: var(--bs-list-group-border-width);
+  }
+}
+@media (min-width: 768px) {
+  .list-group-horizontal-md {
+    flex-direction: row;
+  }
+  .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--bs-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--bs-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-md > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-md > .list-group-item + .list-group-item {
+    border-top-width: var(--bs-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-md > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--bs-list-group-border-width));
+    border-left-width: var(--bs-list-group-border-width);
+  }
+}
+@media (min-width: 992px) {
+  .list-group-horizontal-lg {
+    flex-direction: row;
+  }
+  .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--bs-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--bs-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item + .list-group-item {
+    border-top-width: var(--bs-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--bs-list-group-border-width));
+    border-left-width: var(--bs-list-group-border-width);
+  }
+}
+@media (min-width: 1200px) {
+  .list-group-horizontal-xl {
+    flex-direction: row;
+  }
+  .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--bs-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--bs-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item + .list-group-item {
+    border-top-width: var(--bs-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--bs-list-group-border-width));
+    border-left-width: var(--bs-list-group-border-width);
+  }
+}
+@media (min-width: 1400px) {
+  .list-group-horizontal-xxl {
+    flex-direction: row;
+  }
+  .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--bs-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--bs-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item + .list-group-item {
+    border-top-width: var(--bs-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--bs-list-group-border-width));
+    border-left-width: var(--bs-list-group-border-width);
+  }
+}
+.list-group-flush {
+  border-radius: 0;
+}
+.list-group-flush > .list-group-item {
+  border-width: 0 0 var(--bs-list-group-border-width);
+}
+.list-group-flush > .list-group-item:last-child {
+  border-bottom-width: 0;
+}
+
+.list-group-item-primary {
+  color: #084298;
+  background-color: #cfe2ff;
+}
+.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {
+  color: #084298;
+  background-color: #bacbe6;
+}
+.list-group-item-primary.list-group-item-action.active {
+  color: #fff;
+  background-color: #084298;
+  border-color: #084298;
+}
+
+.list-group-item-secondary {
+  color: #41464b;
+  background-color: #e2e3e5;
+}
+.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {
+  color: #41464b;
+  background-color: #cbccce;
+}
+.list-group-item-secondary.list-group-item-action.active {
+  color: #fff;
+  background-color: #41464b;
+  border-color: #41464b;
+}
+
+.list-group-item-success {
+  color: #0f5132;
+  background-color: #d1e7dd;
+}
+.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {
+  color: #0f5132;
+  background-color: #bcd0c7;
+}
+.list-group-item-success.list-group-item-action.active {
+  color: #fff;
+  background-color: #0f5132;
+  border-color: #0f5132;
+}
+
+.list-group-item-info {
+  color: #055160;
+  background-color: #cff4fc;
+}
+.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {
+  color: #055160;
+  background-color: #badce3;
+}
+.list-group-item-info.list-group-item-action.active {
+  color: #fff;
+  background-color: #055160;
+  border-color: #055160;
+}
+
+.list-group-item-warning {
+  color: #664d03;
+  background-color: #fff3cd;
+}
+.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {
+  color: #664d03;
+  background-color: #e6dbb9;
+}
+.list-group-item-warning.list-group-item-action.active {
+  color: #fff;
+  background-color: #664d03;
+  border-color: #664d03;
+}
+
+.list-group-item-danger {
+  color: #842029;
+  background-color: #f8d7da;
+}
+.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {
+  color: #842029;
+  background-color: #dfc2c4;
+}
+.list-group-item-danger.list-group-item-action.active {
+  color: #fff;
+  background-color: #842029;
+  border-color: #842029;
+}
+
+.list-group-item-light {
+  color: #636464;
+  background-color: #fefefe;
+}
+.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {
+  color: #636464;
+  background-color: #e5e5e5;
+}
+.list-group-item-light.list-group-item-action.active {
+  color: #fff;
+  background-color: #636464;
+  border-color: #636464;
+}
+
+.list-group-item-dark {
+  color: #141619;
+  background-color: #d3d3d4;
+}
+.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {
+  color: #141619;
+  background-color: #bebebf;
+}
+.list-group-item-dark.list-group-item-action.active {
+  color: #fff;
+  background-color: #141619;
+  border-color: #141619;
+}
+
+.btn-close {
+  box-sizing: content-box;
+  width: 1em;
+  height: 1em;
+  padding: 0.25em 0.25em;
+  color: #000;
+  background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;
+  border: 0;
+  border-radius: 0.375rem;
+  opacity: 0.5;
+}
+.btn-close:hover {
+  color: #000;
+  text-decoration: none;
+  opacity: 0.75;
+}
+.btn-close:focus {
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+  opacity: 1;
+}
+.btn-close:disabled, .btn-close.disabled {
+  pointer-events: none;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+          user-select: none;
+  opacity: 0.25;
+}
+
+.btn-close-white {
+  filter: invert(1) grayscale(100%) brightness(200%);
+}
+
+.toast {
+  --bs-toast-zindex: 1090;
+  --bs-toast-padding-x: 0.75rem;
+  --bs-toast-padding-y: 0.5rem;
+  --bs-toast-spacing: 1.5rem;
+  --bs-toast-max-width: 350px;
+  --bs-toast-font-size: 0.875rem;
+  --bs-toast-color: ;
+  --bs-toast-bg: rgba(255, 255, 255, 0.85);
+  --bs-toast-border-width: 1px;
+  --bs-toast-border-color: var(--bs-border-color-translucent);
+  --bs-toast-border-radius: 0.375rem;
+  --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+  --bs-toast-header-color: #6c757d;
+  --bs-toast-header-bg: rgba(255, 255, 255, 0.85);
+  --bs-toast-header-border-color: rgba(0, 0, 0, 0.05);
+  width: var(--bs-toast-max-width);
+  max-width: 100%;
+  font-size: var(--bs-toast-font-size);
+  color: var(--bs-toast-color);
+  pointer-events: auto;
+  background-color: var(--bs-toast-bg);
+  background-clip: padding-box;
+  border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);
+  box-shadow: var(--bs-toast-box-shadow);
+  border-radius: var(--bs-toast-border-radius);
+}
+.toast.showing {
+  opacity: 0;
+}
+.toast:not(.show) {
+  display: none;
+}
+
+.toast-container {
+  --bs-toast-zindex: 1090;
+  position: absolute;
+  z-index: var(--bs-toast-zindex);
+  width: -moz-max-content;
+  width: max-content;
+  max-width: 100%;
+  pointer-events: none;
+}
+.toast-container > :not(:last-child) {
+  margin-bottom: var(--bs-toast-spacing);
+}
+
+.toast-header {
+  display: flex;
+  align-items: center;
+  padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);
+  color: var(--bs-toast-header-color);
+  background-color: var(--bs-toast-header-bg);
+  background-clip: padding-box;
+  border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);
+  border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));
+  border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));
+}
+.toast-header .btn-close {
+  margin-right: calc(-0.5 * var(--bs-toast-padding-x));
+  margin-left: var(--bs-toast-padding-x);
+}
+
+.toast-body {
+  padding: var(--bs-toast-padding-x);
+  word-wrap: break-word;
+}
+
+.modal {
+  --bs-modal-zindex: 1055;
+  --bs-modal-width: 500px;
+  --bs-modal-padding: 1rem;
+  --bs-modal-margin: 0.5rem;
+  --bs-modal-color: ;
+  --bs-modal-bg: #fff;
+  --bs-modal-border-color: var(--bs-border-color-translucent);
+  --bs-modal-border-width: 1px;
+  --bs-modal-border-radius: 0.5rem;
+  --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
+  --bs-modal-inner-border-radius: calc(0.5rem - 1px);
+  --bs-modal-header-padding-x: 1rem;
+  --bs-modal-header-padding-y: 1rem;
+  --bs-modal-header-padding: 1rem 1rem;
+  --bs-modal-header-border-color: var(--bs-border-color);
+  --bs-modal-header-border-width: 1px;
+  --bs-modal-title-line-height: 1.5;
+  --bs-modal-footer-gap: 0.5rem;
+  --bs-modal-footer-bg: ;
+  --bs-modal-footer-border-color: var(--bs-border-color);
+  --bs-modal-footer-border-width: 1px;
+  position: fixed;
+  top: 0;
+  left: 0;
+  z-index: var(--bs-modal-zindex);
+  display: none;
+  width: 100%;
+  height: 100%;
+  overflow-x: hidden;
+  overflow-y: auto;
+  outline: 0;
+}
+
+.modal-dialog {
+  position: relative;
+  width: auto;
+  margin: var(--bs-modal-margin);
+  pointer-events: none;
+}
+.modal.fade .modal-dialog {
+  transition: transform 0.3s ease-out;
+  transform: translate(0, -50px);
+}
+@media (prefers-reduced-motion: reduce) {
+  .modal.fade .modal-dialog {
+    transition: none;
+  }
+}
+.modal.show .modal-dialog {
+  transform: none;
+}
+.modal.modal-static .modal-dialog {
+  transform: scale(1.02);
+}
+
+.modal-dialog-scrollable {
+  height: calc(100% - var(--bs-modal-margin) * 2);
+}
+.modal-dialog-scrollable .modal-content {
+  max-height: 100%;
+  overflow: hidden;
+}
+.modal-dialog-scrollable .modal-body {
+  overflow-y: auto;
+}
+
+.modal-dialog-centered {
+  display: flex;
+  align-items: center;
+  min-height: calc(100% - var(--bs-modal-margin) * 2);
+}
+
+.modal-content {
+  position: relative;
+  display: flex;
+  flex-direction: column;
+  width: 100%;
+  color: var(--bs-modal-color);
+  pointer-events: auto;
+  background-color: var(--bs-modal-bg);
+  background-clip: padding-box;
+  border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);
+  border-radius: var(--bs-modal-border-radius);
+  outline: 0;
+}
+
+.modal-backdrop {
+  --bs-backdrop-zindex: 1050;
+  --bs-backdrop-bg: #000;
+  --bs-backdrop-opacity: 0.5;
+  position: fixed;
+  top: 0;
+  left: 0;
+  z-index: var(--bs-backdrop-zindex);
+  width: 100vw;
+  height: 100vh;
+  background-color: var(--bs-backdrop-bg);
+}
+.modal-backdrop.fade {
+  opacity: 0;
+}
+.modal-backdrop.show {
+  opacity: var(--bs-backdrop-opacity);
+}
+
+.modal-header {
+  display: flex;
+  flex-shrink: 0;
+  align-items: center;
+  justify-content: space-between;
+  padding: var(--bs-modal-header-padding);
+  border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);
+  border-top-left-radius: var(--bs-modal-inner-border-radius);
+  border-top-right-radius: var(--bs-modal-inner-border-radius);
+}
+.modal-header .btn-close {
+  padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);
+  margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;
+}
+
+.modal-title {
+  margin-bottom: 0;
+  line-height: var(--bs-modal-title-line-height);
+}
+
+.modal-body {
+  position: relative;
+  flex: 1 1 auto;
+  padding: var(--bs-modal-padding);
+}
+
+.modal-footer {
+  display: flex;
+  flex-shrink: 0;
+  flex-wrap: wrap;
+  align-items: center;
+  justify-content: flex-end;
+  padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);
+  background-color: var(--bs-modal-footer-bg);
+  border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);
+  border-bottom-right-radius: var(--bs-modal-inner-border-radius);
+  border-bottom-left-radius: var(--bs-modal-inner-border-radius);
+}
+.modal-footer > * {
+  margin: calc(var(--bs-modal-footer-gap) * 0.5);
+}
+
+@media (min-width: 576px) {
+  .modal {
+    --bs-modal-margin: 1.75rem;
+    --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+  }
+  .modal-dialog {
+    max-width: var(--bs-modal-width);
+    margin-right: auto;
+    margin-left: auto;
+  }
+  .modal-sm {
+    --bs-modal-width: 300px;
+  }
+}
+@media (min-width: 992px) {
+  .modal-lg,
+  .modal-xl {
+    --bs-modal-width: 800px;
+  }
+}
+@media (min-width: 1200px) {
+  .modal-xl {
+    --bs-modal-width: 1140px;
+  }
+}
+.modal-fullscreen {
+  width: 100vw;
+  max-width: none;
+  height: 100%;
+  margin: 0;
+}
+.modal-fullscreen .modal-content {
+  height: 100%;
+  border: 0;
+  border-radius: 0;
+}
+.modal-fullscreen .modal-header,
+.modal-fullscreen .modal-footer {
+  border-radius: 0;
+}
+.modal-fullscreen .modal-body {
+  overflow-y: auto;
+}
+
+@media (max-width: 575.98px) {
+  .modal-fullscreen-sm-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-sm-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-sm-down .modal-header,
+  .modal-fullscreen-sm-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-sm-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 767.98px) {
+  .modal-fullscreen-md-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-md-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-md-down .modal-header,
+  .modal-fullscreen-md-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-md-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 991.98px) {
+  .modal-fullscreen-lg-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-lg-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-lg-down .modal-header,
+  .modal-fullscreen-lg-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-lg-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 1199.98px) {
+  .modal-fullscreen-xl-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-xl-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-xl-down .modal-header,
+  .modal-fullscreen-xl-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-xl-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 1399.98px) {
+  .modal-fullscreen-xxl-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-xxl-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-xxl-down .modal-header,
+  .modal-fullscreen-xxl-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-xxl-down .modal-body {
+    overflow-y: auto;
+  }
+}
+.tooltip {
+  --bs-tooltip-zindex: 1080;
+  --bs-tooltip-max-width: 200px;
+  --bs-tooltip-padding-x: 0.5rem;
+  --bs-tooltip-padding-y: 0.25rem;
+  --bs-tooltip-margin: ;
+  --bs-tooltip-font-size: 0.875rem;
+  --bs-tooltip-color: #fff;
+  --bs-tooltip-bg: #000;
+  --bs-tooltip-border-radius: 0.375rem;
+  --bs-tooltip-opacity: 0.9;
+  --bs-tooltip-arrow-width: 0.8rem;
+  --bs-tooltip-arrow-height: 0.4rem;
+  z-index: var(--bs-tooltip-zindex);
+  display: block;
+  padding: var(--bs-tooltip-arrow-height);
+  margin: var(--bs-tooltip-margin);
+  font-family: var(--bs-font-sans-serif);
+  font-style: normal;
+  font-weight: 400;
+  line-height: 1.5;
+  text-align: left;
+  text-align: start;
+  text-decoration: none;
+  text-shadow: none;
+  text-transform: none;
+  letter-spacing: normal;
+  word-break: normal;
+  white-space: normal;
+  word-spacing: normal;
+  line-break: auto;
+  font-size: var(--bs-tooltip-font-size);
+  word-wrap: break-word;
+  opacity: 0;
+}
+.tooltip.show {
+  opacity: var(--bs-tooltip-opacity);
+}
+.tooltip .tooltip-arrow {
+  display: block;
+  width: var(--bs-tooltip-arrow-width);
+  height: var(--bs-tooltip-arrow-height);
+}
+.tooltip .tooltip-arrow::before {
+  position: absolute;
+  content: "";
+  border-color: transparent;
+  border-style: solid;
+}
+
+.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {
+  bottom: 0;
+}
+.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {
+  top: -1px;
+  border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;
+  border-top-color: var(--bs-tooltip-bg);
+}
+
+/* rtl:begin:ignore */
+.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {
+  left: 0;
+  width: var(--bs-tooltip-arrow-height);
+  height: var(--bs-tooltip-arrow-width);
+}
+.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {
+  right: -1px;
+  border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;
+  border-right-color: var(--bs-tooltip-bg);
+}
+
+/* rtl:end:ignore */
+.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {
+  top: 0;
+}
+.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {
+  bottom: -1px;
+  border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);
+  border-bottom-color: var(--bs-tooltip-bg);
+}
+
+/* rtl:begin:ignore */
+.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {
+  right: 0;
+  width: var(--bs-tooltip-arrow-height);
+  height: var(--bs-tooltip-arrow-width);
+}
+.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {
+  left: -1px;
+  border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);
+  border-left-color: var(--bs-tooltip-bg);
+}
+
+/* rtl:end:ignore */
+.tooltip-inner {
+  max-width: var(--bs-tooltip-max-width);
+  padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);
+  color: var(--bs-tooltip-color);
+  text-align: center;
+  background-color: var(--bs-tooltip-bg);
+  border-radius: var(--bs-tooltip-border-radius);
+}
+
+.popover {
+  --bs-popover-zindex: 1070;
+  --bs-popover-max-width: 276px;
+  --bs-popover-font-size: 0.875rem;
+  --bs-popover-bg: #fff;
+  --bs-popover-border-width: 1px;
+  --bs-popover-border-color: var(--bs-border-color-translucent);
+  --bs-popover-border-radius: 0.5rem;
+  --bs-popover-inner-border-radius: calc(0.5rem - 1px);
+  --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+  --bs-popover-header-padding-x: 1rem;
+  --bs-popover-header-padding-y: 0.5rem;
+  --bs-popover-header-font-size: 1rem;
+  --bs-popover-header-color: ;
+  --bs-popover-header-bg: #f0f0f0;
+  --bs-popover-body-padding-x: 1rem;
+  --bs-popover-body-padding-y: 1rem;
+  --bs-popover-body-color: #212529;
+  --bs-popover-arrow-width: 1rem;
+  --bs-popover-arrow-height: 0.5rem;
+  --bs-popover-arrow-border: var(--bs-popover-border-color);
+  z-index: var(--bs-popover-zindex);
+  display: block;
+  max-width: var(--bs-popover-max-width);
+  font-family: var(--bs-font-sans-serif);
+  font-style: normal;
+  font-weight: 400;
+  line-height: 1.5;
+  text-align: left;
+  text-align: start;
+  text-decoration: none;
+  text-shadow: none;
+  text-transform: none;
+  letter-spacing: normal;
+  word-break: normal;
+  white-space: normal;
+  word-spacing: normal;
+  line-break: auto;
+  font-size: var(--bs-popover-font-size);
+  word-wrap: break-word;
+  background-color: var(--bs-popover-bg);
+  background-clip: padding-box;
+  border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);
+  border-radius: var(--bs-popover-border-radius);
+}
+.popover .popover-arrow {
+  display: block;
+  width: var(--bs-popover-arrow-width);
+  height: var(--bs-popover-arrow-height);
+}
+.popover .popover-arrow::before, .popover .popover-arrow::after {
+  position: absolute;
+  display: block;
+  content: "";
+  border-color: transparent;
+  border-style: solid;
+  border-width: 0;
+}
+
+.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {
+  bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));
+}
+.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {
+  border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;
+}
+.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {
+  bottom: 0;
+  border-top-color: var(--bs-popover-arrow-border);
+}
+.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {
+  bottom: var(--bs-popover-border-width);
+  border-top-color: var(--bs-popover-bg);
+}
+
+/* rtl:begin:ignore */
+.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {
+  left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));
+  width: var(--bs-popover-arrow-height);
+  height: var(--bs-popover-arrow-width);
+}
+.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {
+  border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;
+}
+.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {
+  left: 0;
+  border-right-color: var(--bs-popover-arrow-border);
+}
+.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {
+  left: var(--bs-popover-border-width);
+  border-right-color: var(--bs-popover-bg);
+}
+
+/* rtl:end:ignore */
+.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {
+  top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));
+}
+.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {
+  border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);
+}
+.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {
+  top: 0;
+  border-bottom-color: var(--bs-popover-arrow-border);
+}
+.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {
+  top: var(--bs-popover-border-width);
+  border-bottom-color: var(--bs-popover-bg);
+}
+.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {
+  position: absolute;
+  top: 0;
+  left: 50%;
+  display: block;
+  width: var(--bs-popover-arrow-width);
+  margin-left: calc(-0.5 * var(--bs-popover-arrow-width));
+  content: "";
+  border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);
+}
+
+/* rtl:begin:ignore */
+.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {
+  right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));
+  width: var(--bs-popover-arrow-height);
+  height: var(--bs-popover-arrow-width);
+}
+.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {
+  border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);
+}
+.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {
+  right: 0;
+  border-left-color: var(--bs-popover-arrow-border);
+}
+.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {
+  right: var(--bs-popover-border-width);
+  border-left-color: var(--bs-popover-bg);
+}
+
+/* rtl:end:ignore */
+.popover-header {
+  padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);
+  margin-bottom: 0;
+  font-size: var(--bs-popover-header-font-size);
+  color: var(--bs-popover-header-color);
+  background-color: var(--bs-popover-header-bg);
+  border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);
+  border-top-left-radius: var(--bs-popover-inner-border-radius);
+  border-top-right-radius: var(--bs-popover-inner-border-radius);
+}
+.popover-header:empty {
+  display: none;
+}
+
+.popover-body {
+  padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);
+  color: var(--bs-popover-body-color);
+}
+
+.carousel {
+  position: relative;
+}
+
+.carousel.pointer-event {
+  touch-action: pan-y;
+}
+
+.carousel-inner {
+  position: relative;
+  width: 100%;
+  overflow: hidden;
+}
+.carousel-inner::after {
+  display: block;
+  clear: both;
+  content: "";
+}
+
+.carousel-item {
+  position: relative;
+  display: none;
+  float: left;
+  width: 100%;
+  margin-right: -100%;
+  -webkit-backface-visibility: hidden;
+          backface-visibility: hidden;
+  transition: transform 0.6s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-item {
+    transition: none;
+  }
+}
+
+.carousel-item.active,
+.carousel-item-next,
+.carousel-item-prev {
+  display: block;
+}
+
+.carousel-item-next:not(.carousel-item-start),
+.active.carousel-item-end {
+  transform: translateX(100%);
+}
+
+.carousel-item-prev:not(.carousel-item-end),
+.active.carousel-item-start {
+  transform: translateX(-100%);
+}
+
+.carousel-fade .carousel-item {
+  opacity: 0;
+  transition-property: opacity;
+  transform: none;
+}
+.carousel-fade .carousel-item.active,
+.carousel-fade .carousel-item-next.carousel-item-start,
+.carousel-fade .carousel-item-prev.carousel-item-end {
+  z-index: 1;
+  opacity: 1;
+}
+.carousel-fade .active.carousel-item-start,
+.carousel-fade .active.carousel-item-end {
+  z-index: 0;
+  opacity: 0;
+  transition: opacity 0s 0.6s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-fade .active.carousel-item-start,
+  .carousel-fade .active.carousel-item-end {
+    transition: none;
+  }
+}
+
+.carousel-control-prev,
+.carousel-control-next {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  z-index: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 15%;
+  padding: 0;
+  color: #fff;
+  text-align: center;
+  background: none;
+  border: 0;
+  opacity: 0.5;
+  transition: opacity 0.15s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-control-prev,
+  .carousel-control-next {
+    transition: none;
+  }
+}
+.carousel-control-prev:hover, .carousel-control-prev:focus,
+.carousel-control-next:hover,
+.carousel-control-next:focus {
+  color: #fff;
+  text-decoration: none;
+  outline: 0;
+  opacity: 0.9;
+}
+
+.carousel-control-prev {
+  left: 0;
+}
+
+.carousel-control-next {
+  right: 0;
+}
+
+.carousel-control-prev-icon,
+.carousel-control-next-icon {
+  display: inline-block;
+  width: 2rem;
+  height: 2rem;
+  background-repeat: no-repeat;
+  background-position: 50%;
+  background-size: 100% 100%;
+}
+
+/* rtl:options: {
+  "autoRename": true,
+  "stringMap":[ {
+    "name"    : "prev-next",
+    "search"  : "prev",
+    "replace" : "next"
+  } ]
+} */
+.carousel-control-prev-icon {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e");
+}
+
+.carousel-control-next-icon {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+}
+
+.carousel-indicators {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 2;
+  display: flex;
+  justify-content: center;
+  padding: 0;
+  margin-right: 15%;
+  margin-bottom: 1rem;
+  margin-left: 15%;
+  list-style: none;
+}
+.carousel-indicators [data-bs-target] {
+  box-sizing: content-box;
+  flex: 0 1 auto;
+  width: 30px;
+  height: 3px;
+  padding: 0;
+  margin-right: 3px;
+  margin-left: 3px;
+  text-indent: -999px;
+  cursor: pointer;
+  background-color: #fff;
+  background-clip: padding-box;
+  border: 0;
+  border-top: 10px solid transparent;
+  border-bottom: 10px solid transparent;
+  opacity: 0.5;
+  transition: opacity 0.6s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-indicators [data-bs-target] {
+    transition: none;
+  }
+}
+.carousel-indicators .active {
+  opacity: 1;
+}
+
+.carousel-caption {
+  position: absolute;
+  right: 15%;
+  bottom: 1.25rem;
+  left: 15%;
+  padding-top: 1.25rem;
+  padding-bottom: 1.25rem;
+  color: #fff;
+  text-align: center;
+}
+
+.carousel-dark .carousel-control-prev-icon,
+.carousel-dark .carousel-control-next-icon {
+  filter: invert(1) grayscale(100);
+}
+.carousel-dark .carousel-indicators [data-bs-target] {
+  background-color: #000;
+}
+.carousel-dark .carousel-caption {
+  color: #000;
+}
+
+.spinner-grow,
+.spinner-border {
+  display: inline-block;
+  width: var(--bs-spinner-width);
+  height: var(--bs-spinner-height);
+  vertical-align: var(--bs-spinner-vertical-align);
+  border-radius: 50%;
+  animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);
+}
+
+@keyframes spinner-border {
+  to {
+    transform: rotate(360deg) /* rtl:ignore */;
+  }
+}
+.spinner-border {
+  --bs-spinner-width: 2rem;
+  --bs-spinner-height: 2rem;
+  --bs-spinner-vertical-align: -0.125em;
+  --bs-spinner-border-width: 0.25em;
+  --bs-spinner-animation-speed: 0.75s;
+  --bs-spinner-animation-name: spinner-border;
+  border: var(--bs-spinner-border-width) solid currentcolor;
+  border-right-color: transparent;
+}
+
+.spinner-border-sm {
+  --bs-spinner-width: 1rem;
+  --bs-spinner-height: 1rem;
+  --bs-spinner-border-width: 0.2em;
+}
+
+@keyframes spinner-grow {
+  0% {
+    transform: scale(0);
+  }
+  50% {
+    opacity: 1;
+    transform: none;
+  }
+}
+.spinner-grow {
+  --bs-spinner-width: 2rem;
+  --bs-spinner-height: 2rem;
+  --bs-spinner-vertical-align: -0.125em;
+  --bs-spinner-animation-speed: 0.75s;
+  --bs-spinner-animation-name: spinner-grow;
+  background-color: currentcolor;
+  opacity: 0;
+}
+
+.spinner-grow-sm {
+  --bs-spinner-width: 1rem;
+  --bs-spinner-height: 1rem;
+}
+
+@media (prefers-reduced-motion: reduce) {
+  .spinner-border,
+  .spinner-grow {
+    --bs-spinner-animation-speed: 1.5s;
+  }
+}
+.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {
+  --bs-offcanvas-zindex: 1045;
+  --bs-offcanvas-width: 400px;
+  --bs-offcanvas-height: 30vh;
+  --bs-offcanvas-padding-x: 1rem;
+  --bs-offcanvas-padding-y: 1rem;
+  --bs-offcanvas-color: ;
+  --bs-offcanvas-bg: #fff;
+  --bs-offcanvas-border-width: 1px;
+  --bs-offcanvas-border-color: var(--bs-border-color-translucent);
+  --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
+}
+
+@media (max-width: 575.98px) {
+  .offcanvas-sm {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--bs-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--bs-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--bs-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    transition: transform 0.3s ease-in-out;
+  }
+}
+@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-sm {
+    transition: none;
+  }
+}
+@media (max-width: 575.98px) {
+  .offcanvas-sm.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--bs-offcanvas-width);
+    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+}
+@media (max-width: 575.98px) {
+  .offcanvas-sm.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--bs-offcanvas-width);
+    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+}
+@media (max-width: 575.98px) {
+  .offcanvas-sm.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+}
+@media (max-width: 575.98px) {
+  .offcanvas-sm.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+}
+@media (max-width: 575.98px) {
+  .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {
+    transform: none;
+  }
+}
+@media (max-width: 575.98px) {
+  .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 576px) {
+  .offcanvas-sm {
+    --bs-offcanvas-height: auto;
+    --bs-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-sm .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-sm .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 767.98px) {
+  .offcanvas-md {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--bs-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--bs-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--bs-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    transition: transform 0.3s ease-in-out;
+  }
+}
+@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-md {
+    transition: none;
+  }
+}
+@media (max-width: 767.98px) {
+  .offcanvas-md.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--bs-offcanvas-width);
+    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+}
+@media (max-width: 767.98px) {
+  .offcanvas-md.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--bs-offcanvas-width);
+    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+}
+@media (max-width: 767.98px) {
+  .offcanvas-md.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+}
+@media (max-width: 767.98px) {
+  .offcanvas-md.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+}
+@media (max-width: 767.98px) {
+  .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {
+    transform: none;
+  }
+}
+@media (max-width: 767.98px) {
+  .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 768px) {
+  .offcanvas-md {
+    --bs-offcanvas-height: auto;
+    --bs-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-md .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-md .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 991.98px) {
+  .offcanvas-lg {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--bs-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--bs-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--bs-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    transition: transform 0.3s ease-in-out;
+  }
+}
+@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-lg {
+    transition: none;
+  }
+}
+@media (max-width: 991.98px) {
+  .offcanvas-lg.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--bs-offcanvas-width);
+    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+}
+@media (max-width: 991.98px) {
+  .offcanvas-lg.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--bs-offcanvas-width);
+    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+}
+@media (max-width: 991.98px) {
+  .offcanvas-lg.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+}
+@media (max-width: 991.98px) {
+  .offcanvas-lg.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+}
+@media (max-width: 991.98px) {
+  .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {
+    transform: none;
+  }
+}
+@media (max-width: 991.98px) {
+  .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 992px) {
+  .offcanvas-lg {
+    --bs-offcanvas-height: auto;
+    --bs-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-lg .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-lg .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 1199.98px) {
+  .offcanvas-xl {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--bs-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--bs-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--bs-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    transition: transform 0.3s ease-in-out;
+  }
+}
+@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-xl {
+    transition: none;
+  }
+}
+@media (max-width: 1199.98px) {
+  .offcanvas-xl.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--bs-offcanvas-width);
+    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+}
+@media (max-width: 1199.98px) {
+  .offcanvas-xl.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--bs-offcanvas-width);
+    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+}
+@media (max-width: 1199.98px) {
+  .offcanvas-xl.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+}
+@media (max-width: 1199.98px) {
+  .offcanvas-xl.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+}
+@media (max-width: 1199.98px) {
+  .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {
+    transform: none;
+  }
+}
+@media (max-width: 1199.98px) {
+  .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 1200px) {
+  .offcanvas-xl {
+    --bs-offcanvas-height: auto;
+    --bs-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-xl .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-xl .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--bs-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--bs-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--bs-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    transition: transform 0.3s ease-in-out;
+  }
+}
+@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-xxl {
+    transition: none;
+  }
+}
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--bs-offcanvas-width);
+    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+}
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--bs-offcanvas-width);
+    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+}
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+}
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+}
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {
+    transform: none;
+  }
+}
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 1400px) {
+  .offcanvas-xxl {
+    --bs-offcanvas-height: auto;
+    --bs-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-xxl .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-xxl .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+.offcanvas {
+  position: fixed;
+  bottom: 0;
+  z-index: var(--bs-offcanvas-zindex);
+  display: flex;
+  flex-direction: column;
+  max-width: 100%;
+  color: var(--bs-offcanvas-color);
+  visibility: hidden;
+  background-color: var(--bs-offcanvas-bg);
+  background-clip: padding-box;
+  outline: 0;
+  transition: transform 0.3s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .offcanvas {
+    transition: none;
+  }
+}
+.offcanvas.offcanvas-start {
+  top: 0;
+  left: 0;
+  width: var(--bs-offcanvas-width);
+  border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+  transform: translateX(-100%);
+}
+.offcanvas.offcanvas-end {
+  top: 0;
+  right: 0;
+  width: var(--bs-offcanvas-width);
+  border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+  transform: translateX(100%);
+}
+.offcanvas.offcanvas-top {
+  top: 0;
+  right: 0;
+  left: 0;
+  height: var(--bs-offcanvas-height);
+  max-height: 100%;
+  border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+  transform: translateY(-100%);
+}
+.offcanvas.offcanvas-bottom {
+  right: 0;
+  left: 0;
+  height: var(--bs-offcanvas-height);
+  max-height: 100%;
+  border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+  transform: translateY(100%);
+}
+.offcanvas.showing, .offcanvas.show:not(.hiding) {
+  transform: none;
+}
+.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {
+  visibility: visible;
+}
+
+.offcanvas-backdrop {
+  position: fixed;
+  top: 0;
+  left: 0;
+  z-index: 1040;
+  width: 100vw;
+  height: 100vh;
+  background-color: #000;
+}
+.offcanvas-backdrop.fade {
+  opacity: 0;
+}
+.offcanvas-backdrop.show {
+  opacity: 0.5;
+}
+
+.offcanvas-header {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);
+}
+.offcanvas-header .btn-close {
+  padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);
+  margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));
+  margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));
+  margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));
+}
+
+.offcanvas-title {
+  margin-bottom: 0;
+  line-height: 1.5;
+}
+
+.offcanvas-body {
+  flex-grow: 1;
+  padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);
+  overflow-y: auto;
+}
+
+.placeholder {
+  display: inline-block;
+  min-height: 1em;
+  vertical-align: middle;
+  cursor: wait;
+  background-color: currentcolor;
+  opacity: 0.5;
+}
+.placeholder.btn::before {
+  display: inline-block;
+  content: "";
+}
+
+.placeholder-xs {
+  min-height: 0.6em;
+}
+
+.placeholder-sm {
+  min-height: 0.8em;
+}
+
+.placeholder-lg {
+  min-height: 1.2em;
+}
+
+.placeholder-glow .placeholder {
+  animation: placeholder-glow 2s ease-in-out infinite;
+}
+
+@keyframes placeholder-glow {
+  50% {
+    opacity: 0.2;
+  }
+}
+.placeholder-wave {
+  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);
+          mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);
+  -webkit-mask-size: 200% 100%;
+          mask-size: 200% 100%;
+  animation: placeholder-wave 2s linear infinite;
+}
+
+@keyframes placeholder-wave {
+  100% {
+    -webkit-mask-position: -200% 0%;
+            mask-position: -200% 0%;
+  }
+}
+.clearfix::after {
+  display: block;
+  clear: both;
+  content: "";
+}
+
+.text-bg-primary {
+  color: #fff !important;
+  background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;
+}
+
+.text-bg-secondary {
+  color: #fff !important;
+  background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;
+}
+
+.text-bg-success {
+  color: #fff !important;
+  background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;
+}
+
+.text-bg-info {
+  color: #000 !important;
+  background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;
+}
+
+.text-bg-warning {
+  color: #000 !important;
+  background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;
+}
+
+.text-bg-danger {
+  color: #fff !important;
+  background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;
+}
+
+.text-bg-light {
+  color: #000 !important;
+  background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;
+}
+
+.text-bg-dark {
+  color: #fff !important;
+  background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;
+}
+
+.link-primary {
+  color: #0d6efd !important;
+}
+.link-primary:hover, .link-primary:focus {
+  color: #0a58ca !important;
+}
+
+.link-secondary {
+  color: #6c757d !important;
+}
+.link-secondary:hover, .link-secondary:focus {
+  color: #565e64 !important;
+}
+
+.link-success {
+  color: #198754 !important;
+}
+.link-success:hover, .link-success:focus {
+  color: #146c43 !important;
+}
+
+.link-info {
+  color: #0dcaf0 !important;
+}
+.link-info:hover, .link-info:focus {
+  color: #3dd5f3 !important;
+}
+
+.link-warning {
+  color: #ffc107 !important;
+}
+.link-warning:hover, .link-warning:focus {
+  color: #ffcd39 !important;
+}
+
+.link-danger {
+  color: #dc3545 !important;
+}
+.link-danger:hover, .link-danger:focus {
+  color: #b02a37 !important;
+}
+
+.link-light {
+  color: #f8f9fa !important;
+}
+.link-light:hover, .link-light:focus {
+  color: #f9fafb !important;
+}
+
+.link-dark {
+  color: #212529 !important;
+}
+.link-dark:hover, .link-dark:focus {
+  color: #1a1e21 !important;
+}
+
+.ratio {
+  position: relative;
+  width: 100%;
+}
+.ratio::before {
+  display: block;
+  padding-top: var(--bs-aspect-ratio);
+  content: "";
+}
+.ratio > * {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+}
+
+.ratio-1x1 {
+  --bs-aspect-ratio: 100%;
+}
+
+.ratio-4x3 {
+  --bs-aspect-ratio: 75%;
+}
+
+.ratio-16x9 {
+  --bs-aspect-ratio: 56.25%;
+}
+
+.ratio-21x9 {
+  --bs-aspect-ratio: 42.8571428571%;
+}
+
+.fixed-top {
+  position: fixed;
+  top: 0;
+  right: 0;
+  left: 0;
+  z-index: 1030;
+}
+
+.fixed-bottom {
+  position: fixed;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1030;
+}
+
+.sticky-top {
+  position: sticky;
+  top: 0;
+  z-index: 1020;
+}
+
+.sticky-bottom {
+  position: sticky;
+  bottom: 0;
+  z-index: 1020;
+}
+
+@media (min-width: 576px) {
+  .sticky-sm-top {
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-sm-bottom {
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 768px) {
+  .sticky-md-top {
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-md-bottom {
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 992px) {
+  .sticky-lg-top {
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-lg-bottom {
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 1200px) {
+  .sticky-xl-top {
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-xl-bottom {
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 1400px) {
+  .sticky-xxl-top {
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-xxl-bottom {
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+.hstack {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  align-self: stretch;
+}
+
+.vstack {
+  display: flex;
+  flex: 1 1 auto;
+  flex-direction: column;
+  align-self: stretch;
+}
+
+.visually-hidden,
+.visually-hidden-focusable:not(:focus):not(:focus-within) {
+  position: absolute !important;
+  width: 1px !important;
+  height: 1px !important;
+  padding: 0 !important;
+  margin: -1px !important;
+  overflow: hidden !important;
+  clip: rect(0, 0, 0, 0) !important;
+  white-space: nowrap !important;
+  border: 0 !important;
+}
+
+.stretched-link::after {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1;
+  content: "";
+}
+
+.text-truncate {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.vr {
+  display: inline-block;
+  align-self: stretch;
+  width: 1px;
+  min-height: 1em;
+  background-color: currentcolor;
+  opacity: 0.25;
+}
+
+.align-baseline {
+  vertical-align: baseline !important;
+}
+
+.align-top {
+  vertical-align: top !important;
+}
+
+.align-middle {
+  vertical-align: middle !important;
+}
+
+.align-bottom {
+  vertical-align: bottom !important;
+}
+
+.align-text-bottom {
+  vertical-align: text-bottom !important;
+}
+
+.align-text-top {
+  vertical-align: text-top !important;
+}
+
+.float-start {
+  float: left !important;
+}
+
+.float-end {
+  float: right !important;
+}
+
+.float-none {
+  float: none !important;
+}
+
+.opacity-0 {
+  opacity: 0 !important;
+}
+
+.opacity-25 {
+  opacity: 0.25 !important;
+}
+
+.opacity-50 {
+  opacity: 0.5 !important;
+}
+
+.opacity-75 {
+  opacity: 0.75 !important;
+}
+
+.opacity-100 {
+  opacity: 1 !important;
+}
+
+.overflow-auto {
+  overflow: auto !important;
+}
+
+.overflow-hidden {
+  overflow: hidden !important;
+}
+
+.overflow-visible {
+  overflow: visible !important;
+}
+
+.overflow-scroll {
+  overflow: scroll !important;
+}
+
+.d-inline {
+  display: inline !important;
+}
+
+.d-inline-block {
+  display: inline-block !important;
+}
+
+.d-block {
+  display: block !important;
+}
+
+.d-grid {
+  display: grid !important;
+}
+
+.d-table {
+  display: table !important;
+}
+
+.d-table-row {
+  display: table-row !important;
+}
+
+.d-table-cell {
+  display: table-cell !important;
+}
+
+.d-flex {
+  display: flex !important;
+}
+
+.d-inline-flex {
+  display: inline-flex !important;
+}
+
+.d-none {
+  display: none !important;
+}
+
+.shadow {
+  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
+}
+
+.shadow-sm {
+  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
+}
+
+.shadow-lg {
+  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
+}
+
+.shadow-none {
+  box-shadow: none !important;
+}
+
+.position-static {
+  position: static !important;
+}
+
+.position-relative {
+  position: relative !important;
+}
+
+.position-absolute {
+  position: absolute !important;
+}
+
+.position-fixed {
+  position: fixed !important;
+}
+
+.position-sticky {
+  position: sticky !important;
+}
+
+.top-0 {
+  top: 0 !important;
+}
+
+.top-50 {
+  top: 50% !important;
+}
+
+.top-100 {
+  top: 100% !important;
+}
+
+.bottom-0 {
+  bottom: 0 !important;
+}
+
+.bottom-50 {
+  bottom: 50% !important;
+}
+
+.bottom-100 {
+  bottom: 100% !important;
+}
+
+.start-0 {
+  left: 0 !important;
+}
+
+.start-50 {
+  left: 50% !important;
+}
+
+.start-100 {
+  left: 100% !important;
+}
+
+.end-0 {
+  right: 0 !important;
+}
+
+.end-50 {
+  right: 50% !important;
+}
+
+.end-100 {
+  right: 100% !important;
+}
+
+.translate-middle {
+  transform: translate(-50%, -50%) !important;
+}
+
+.translate-middle-x {
+  transform: translateX(-50%) !important;
+}
+
+.translate-middle-y {
+  transform: translateY(-50%) !important;
+}
+
+.border {
+  border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
+}
+
+.border-0 {
+  border: 0 !important;
+}
+
+.border-top {
+  border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
+}
+
+.border-top-0 {
+  border-top: 0 !important;
+}
+
+.border-end {
+  border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
+}
+
+.border-end-0 {
+  border-right: 0 !important;
+}
+
+.border-bottom {
+  border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
+}
+
+.border-bottom-0 {
+  border-bottom: 0 !important;
+}
+
+.border-start {
+  border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
+}
+
+.border-start-0 {
+  border-left: 0 !important;
+}
+
+.border-primary {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-secondary {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-success {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-info {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-warning {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-danger {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-light {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-dark {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-white {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-1 {
+  --bs-border-width: 1px;
+}
+
+.border-2 {
+  --bs-border-width: 2px;
+}
+
+.border-3 {
+  --bs-border-width: 3px;
+}
+
+.border-4 {
+  --bs-border-width: 4px;
+}
+
+.border-5 {
+  --bs-border-width: 5px;
+}
+
+.border-opacity-10 {
+  --bs-border-opacity: 0.1;
+}
+
+.border-opacity-25 {
+  --bs-border-opacity: 0.25;
+}
+
+.border-opacity-50 {
+  --bs-border-opacity: 0.5;
+}
+
+.border-opacity-75 {
+  --bs-border-opacity: 0.75;
+}
+
+.border-opacity-100 {
+  --bs-border-opacity: 1;
+}
+
+.w-25 {
+  width: 25% !important;
+}
+
+.w-50 {
+  width: 50% !important;
+}
+
+.w-75 {
+  width: 75% !important;
+}
+
+.w-100 {
+  width: 100% !important;
+}
+
+.w-auto {
+  width: auto !important;
+}
+
+.mw-100 {
+  max-width: 100% !important;
+}
+
+.vw-100 {
+  width: 100vw !important;
+}
+
+.min-vw-100 {
+  min-width: 100vw !important;
+}
+
+.h-25 {
+  height: 25% !important;
+}
+
+.h-50 {
+  height: 50% !important;
+}
+
+.h-75 {
+  height: 75% !important;
+}
+
+.h-100 {
+  height: 100% !important;
+}
+
+.h-auto {
+  height: auto !important;
+}
+
+.mh-100 {
+  max-height: 100% !important;
+}
+
+.vh-100 {
+  height: 100vh !important;
+}
+
+.min-vh-100 {
+  min-height: 100vh !important;
+}
+
+.flex-fill {
+  flex: 1 1 auto !important;
+}
+
+.flex-row {
+  flex-direction: row !important;
+}
+
+.flex-column {
+  flex-direction: column !important;
+}
+
+.flex-row-reverse {
+  flex-direction: row-reverse !important;
+}
+
+.flex-column-reverse {
+  flex-direction: column-reverse !important;
+}
+
+.flex-grow-0 {
+  flex-grow: 0 !important;
+}
+
+.flex-grow-1 {
+  flex-grow: 1 !important;
+}
+
+.flex-shrink-0 {
+  flex-shrink: 0 !important;
+}
+
+.flex-shrink-1 {
+  flex-shrink: 1 !important;
+}
+
+.flex-wrap {
+  flex-wrap: wrap !important;
+}
+
+.flex-nowrap {
+  flex-wrap: nowrap !important;
+}
+
+.flex-wrap-reverse {
+  flex-wrap: wrap-reverse !important;
+}
+
+.justify-content-start {
+  justify-content: flex-start !important;
+}
+
+.justify-content-end {
+  justify-content: flex-end !important;
+}
+
+.justify-content-center {
+  justify-content: center !important;
+}
+
+.justify-content-between {
+  justify-content: space-between !important;
+}
+
+.justify-content-around {
+  justify-content: space-around !important;
+}
+
+.justify-content-evenly {
+  justify-content: space-evenly !important;
+}
+
+.align-items-start {
+  align-items: flex-start !important;
+}
+
+.align-items-end {
+  align-items: flex-end !important;
+}
+
+.align-items-center {
+  align-items: center !important;
+}
+
+.align-items-baseline {
+  align-items: baseline !important;
+}
+
+.align-items-stretch {
+  align-items: stretch !important;
+}
+
+.align-content-start {
+  align-content: flex-start !important;
+}
+
+.align-content-end {
+  align-content: flex-end !important;
+}
+
+.align-content-center {
+  align-content: center !important;
+}
+
+.align-content-between {
+  align-content: space-between !important;
+}
+
+.align-content-around {
+  align-content: space-around !important;
+}
+
+.align-content-stretch {
+  align-content: stretch !important;
+}
+
+.align-self-auto {
+  align-self: auto !important;
+}
+
+.align-self-start {
+  align-self: flex-start !important;
+}
+
+.align-self-end {
+  align-self: flex-end !important;
+}
+
+.align-self-center {
+  align-self: center !important;
+}
+
+.align-self-baseline {
+  align-self: baseline !important;
+}
+
+.align-self-stretch {
+  align-self: stretch !important;
+}
+
+.order-first {
+  order: -1 !important;
+}
+
+.order-0 {
+  order: 0 !important;
+}
+
+.order-1 {
+  order: 1 !important;
+}
+
+.order-2 {
+  order: 2 !important;
+}
+
+.order-3 {
+  order: 3 !important;
+}
+
+.order-4 {
+  order: 4 !important;
+}
+
+.order-5 {
+  order: 5 !important;
+}
+
+.order-last {
+  order: 6 !important;
+}
+
+.m-0 {
+  margin: 0 !important;
+}
+
+.m-1 {
+  margin: 0.25rem !important;
+}
+
+.m-2 {
+  margin: 0.5rem !important;
+}
+
+.m-3 {
+  margin: 1rem !important;
+}
+
+.m-4 {
+  margin: 1.5rem !important;
+}
+
+.m-5 {
+  margin: 3rem !important;
+}
+
+.m-auto {
+  margin: auto !important;
+}
+
+.mx-0 {
+  margin-right: 0 !important;
+  margin-left: 0 !important;
+}
+
+.mx-1 {
+  margin-right: 0.25rem !important;
+  margin-left: 0.25rem !important;
+}
+
+.mx-2 {
+  margin-right: 0.5rem !important;
+  margin-left: 0.5rem !important;
+}
+
+.mx-3 {
+  margin-right: 1rem !important;
+  margin-left: 1rem !important;
+}
+
+.mx-4 {
+  margin-right: 1.5rem !important;
+  margin-left: 1.5rem !important;
+}
+
+.mx-5 {
+  margin-right: 3rem !important;
+  margin-left: 3rem !important;
+}
+
+.mx-auto {
+  margin-right: auto !important;
+  margin-left: auto !important;
+}
+
+.my-0 {
+  margin-top: 0 !important;
+  margin-bottom: 0 !important;
+}
+
+.my-1 {
+  margin-top: 0.25rem !important;
+  margin-bottom: 0.25rem !important;
+}
+
+.my-2 {
+  margin-top: 0.5rem !important;
+  margin-bottom: 0.5rem !important;
+}
+
+.my-3 {
+  margin-top: 1rem !important;
+  margin-bottom: 1rem !important;
+}
+
+.my-4 {
+  margin-top: 1.5rem !important;
+  margin-bottom: 1.5rem !important;
+}
+
+.my-5 {
+  margin-top: 3rem !important;
+  margin-bottom: 3rem !important;
+}
+
+.my-auto {
+  margin-top: auto !important;
+  margin-bottom: auto !important;
+}
+
+.mt-0 {
+  margin-top: 0 !important;
+}
+
+.mt-1 {
+  margin-top: 0.25rem !important;
+}
+
+.mt-2 {
+  margin-top: 0.5rem !important;
+}
+
+.mt-3 {
+  margin-top: 1rem !important;
+}
+
+.mt-4 {
+  margin-top: 1.5rem !important;
+}
+
+.mt-5 {
+  margin-top: 3rem !important;
+}
+
+.mt-auto {
+  margin-top: auto !important;
+}
+
+.me-0 {
+  margin-right: 0 !important;
+}
+
+.me-1 {
+  margin-right: 0.25rem !important;
+}
+
+.me-2 {
+  margin-right: 0.5rem !important;
+}
+
+.me-3 {
+  margin-right: 1rem !important;
+}
+
+.me-4 {
+  margin-right: 1.5rem !important;
+}
+
+.me-5 {
+  margin-right: 3rem !important;
+}
+
+.me-auto {
+  margin-right: auto !important;
+}
+
+.mb-0 {
+  margin-bottom: 0 !important;
+}
+
+.mb-1 {
+  margin-bottom: 0.25rem !important;
+}
+
+.mb-2 {
+  margin-bottom: 0.5rem !important;
+}
+
+.mb-3 {
+  margin-bottom: 1rem !important;
+}
+
+.mb-4 {
+  margin-bottom: 1.5rem !important;
+}
+
+.mb-5 {
+  margin-bottom: 3rem !important;
+}
+
+.mb-auto {
+  margin-bottom: auto !important;
+}
+
+.ms-0 {
+  margin-left: 0 !important;
+}
+
+.ms-1 {
+  margin-left: 0.25rem !important;
+}
+
+.ms-2 {
+  margin-left: 0.5rem !important;
+}
+
+.ms-3 {
+  margin-left: 1rem !important;
+}
+
+.ms-4 {
+  margin-left: 1.5rem !important;
+}
+
+.ms-5 {
+  margin-left: 3rem !important;
+}
+
+.ms-auto {
+  margin-left: auto !important;
+}
+
+.p-0 {
+  padding: 0 !important;
+}
+
+.p-1 {
+  padding: 0.25rem !important;
+}
+
+.p-2 {
+  padding: 0.5rem !important;
+}
+
+.p-3 {
+  padding: 1rem !important;
+}
+
+.p-4 {
+  padding: 1.5rem !important;
+}
+
+.p-5 {
+  padding: 3rem !important;
+}
+
+.px-0 {
+  padding-right: 0 !important;
+  padding-left: 0 !important;
+}
+
+.px-1 {
+  padding-right: 0.25rem !important;
+  padding-left: 0.25rem !important;
+}
+
+.px-2 {
+  padding-right: 0.5rem !important;
+  padding-left: 0.5rem !important;
+}
+
+.px-3 {
+  padding-right: 1rem !important;
+  padding-left: 1rem !important;
+}
+
+.px-4 {
+  padding-right: 1.5rem !important;
+  padding-left: 1.5rem !important;
+}
+
+.px-5 {
+  padding-right: 3rem !important;
+  padding-left: 3rem !important;
+}
+
+.py-0 {
+  padding-top: 0 !important;
+  padding-bottom: 0 !important;
+}
+
+.py-1 {
+  padding-top: 0.25rem !important;
+  padding-bottom: 0.25rem !important;
+}
+
+.py-2 {
+  padding-top: 0.5rem !important;
+  padding-bottom: 0.5rem !important;
+}
+
+.py-3 {
+  padding-top: 1rem !important;
+  padding-bottom: 1rem !important;
+}
+
+.py-4 {
+  padding-top: 1.5rem !important;
+  padding-bottom: 1.5rem !important;
+}
+
+.py-5 {
+  padding-top: 3rem !important;
+  padding-bottom: 3rem !important;
+}
+
+.pt-0 {
+  padding-top: 0 !important;
+}
+
+.pt-1 {
+  padding-top: 0.25rem !important;
+}
+
+.pt-2 {
+  padding-top: 0.5rem !important;
+}
+
+.pt-3 {
+  padding-top: 1rem !important;
+}
+
+.pt-4 {
+  padding-top: 1.5rem !important;
+}
+
+.pt-5 {
+  padding-top: 3rem !important;
+}
+
+.pe-0 {
+  padding-right: 0 !important;
+}
+
+.pe-1 {
+  padding-right: 0.25rem !important;
+}
+
+.pe-2 {
+  padding-right: 0.5rem !important;
+}
+
+.pe-3 {
+  padding-right: 1rem !important;
+}
+
+.pe-4 {
+  padding-right: 1.5rem !important;
+}
+
+.pe-5 {
+  padding-right: 3rem !important;
+}
+
+.pb-0 {
+  padding-bottom: 0 !important;
+}
+
+.pb-1 {
+  padding-bottom: 0.25rem !important;
+}
+
+.pb-2 {
+  padding-bottom: 0.5rem !important;
+}
+
+.pb-3 {
+  padding-bottom: 1rem !important;
+}
+
+.pb-4 {
+  padding-bottom: 1.5rem !important;
+}
+
+.pb-5 {
+  padding-bottom: 3rem !important;
+}
+
+.ps-0 {
+  padding-left: 0 !important;
+}
+
+.ps-1 {
+  padding-left: 0.25rem !important;
+}
+
+.ps-2 {
+  padding-left: 0.5rem !important;
+}
+
+.ps-3 {
+  padding-left: 1rem !important;
+}
+
+.ps-4 {
+  padding-left: 1.5rem !important;
+}
+
+.ps-5 {
+  padding-left: 3rem !important;
+}
+
+.gap-0 {
+  gap: 0 !important;
+}
+
+.gap-1 {
+  gap: 0.25rem !important;
+}
+
+.gap-2 {
+  gap: 0.5rem !important;
+}
+
+.gap-3 {
+  gap: 1rem !important;
+}
+
+.gap-4 {
+  gap: 1.5rem !important;
+}
+
+.gap-5 {
+  gap: 3rem !important;
+}
+
+.font-monospace {
+  font-family: var(--bs-font-monospace) !important;
+}
+
+.fs-1 {
+  font-size: calc(1.375rem + 1.5vw) !important;
+}
+
+.fs-2 {
+  font-size: calc(1.325rem + 0.9vw) !important;
+}
+
+.fs-3 {
+  font-size: calc(1.3rem + 0.6vw) !important;
+}
+
+.fs-4 {
+  font-size: calc(1.275rem + 0.3vw) !important;
+}
+
+.fs-5 {
+  font-size: 1.25rem !important;
+}
+
+.fs-6 {
+  font-size: 1rem !important;
+}
+
+.fst-italic {
+  font-style: italic !important;
+}
+
+.fst-normal {
+  font-style: normal !important;
+}
+
+.fw-light {
+  font-weight: 300 !important;
+}
+
+.fw-lighter {
+  font-weight: lighter !important;
+}
+
+.fw-normal {
+  font-weight: 400 !important;
+}
+
+.fw-bold {
+  font-weight: 700 !important;
+}
+
+.fw-semibold {
+  font-weight: 600 !important;
+}
+
+.fw-bolder {
+  font-weight: bolder !important;
+}
+
+.lh-1 {
+  line-height: 1 !important;
+}
+
+.lh-sm {
+  line-height: 1.25 !important;
+}
+
+.lh-base {
+  line-height: 1.5 !important;
+}
+
+.lh-lg {
+  line-height: 2 !important;
+}
+
+.text-start {
+  text-align: left !important;
+}
+
+.text-end {
+  text-align: right !important;
+}
+
+.text-center {
+  text-align: center !important;
+}
+
+.text-decoration-none {
+  text-decoration: none !important;
+}
+
+.text-decoration-underline {
+  text-decoration: underline !important;
+}
+
+.text-decoration-line-through {
+  text-decoration: line-through !important;
+}
+
+.text-lowercase {
+  text-transform: lowercase !important;
+}
+
+.text-uppercase {
+  text-transform: uppercase !important;
+}
+
+.text-capitalize {
+  text-transform: capitalize !important;
+}
+
+.text-wrap {
+  white-space: normal !important;
+}
+
+.text-nowrap {
+  white-space: nowrap !important;
+}
+
+/* rtl:begin:remove */
+.text-break {
+  word-wrap: break-word !important;
+  word-break: break-word !important;
+}
+
+/* rtl:end:remove */
+.text-primary {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-secondary {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-success {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-info {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-warning {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-danger {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-light {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-dark {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-black {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-white {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-body {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-muted {
+  --bs-text-opacity: 1;
+  color: #6c757d !important;
+}
+
+.text-black-50 {
+  --bs-text-opacity: 1;
+  color: rgba(0, 0, 0, 0.5) !important;
+}
+
+.text-white-50 {
+  --bs-text-opacity: 1;
+  color: rgba(255, 255, 255, 0.5) !important;
+}
+
+.text-reset {
+  --bs-text-opacity: 1;
+  color: inherit !important;
+}
+
+.text-opacity-25 {
+  --bs-text-opacity: 0.25;
+}
+
+.text-opacity-50 {
+  --bs-text-opacity: 0.5;
+}
+
+.text-opacity-75 {
+  --bs-text-opacity: 0.75;
+}
+
+.text-opacity-100 {
+  --bs-text-opacity: 1;
+}
+
+.bg-primary {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-secondary {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-success {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-info {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-warning {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-danger {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-light {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-dark {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-black {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-white {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-body {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-transparent {
+  --bs-bg-opacity: 1;
+  background-color: transparent !important;
+}
+
+.bg-opacity-10 {
+  --bs-bg-opacity: 0.1;
+}
+
+.bg-opacity-25 {
+  --bs-bg-opacity: 0.25;
+}
+
+.bg-opacity-50 {
+  --bs-bg-opacity: 0.5;
+}
+
+.bg-opacity-75 {
+  --bs-bg-opacity: 0.75;
+}
+
+.bg-opacity-100 {
+  --bs-bg-opacity: 1;
+}
+
+.bg-gradient {
+  background-image: var(--bs-gradient) !important;
+}
+
+.user-select-all {
+  -webkit-user-select: all !important;
+     -moz-user-select: all !important;
+          user-select: all !important;
+}
+
+.user-select-auto {
+  -webkit-user-select: auto !important;
+     -moz-user-select: auto !important;
+          user-select: auto !important;
+}
+
+.user-select-none {
+  -webkit-user-select: none !important;
+     -moz-user-select: none !important;
+          user-select: none !important;
+}
+
+.pe-none {
+  pointer-events: none !important;
+}
+
+.pe-auto {
+  pointer-events: auto !important;
+}
+
+.rounded {
+  border-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-0 {
+  border-radius: 0 !important;
+}
+
+.rounded-1 {
+  border-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-2 {
+  border-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-3 {
+  border-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-4 {
+  border-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-5 {
+  border-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-circle {
+  border-radius: 50% !important;
+}
+
+.rounded-pill {
+  border-radius: var(--bs-border-radius-pill) !important;
+}
+
+.rounded-top {
+  border-top-left-radius: var(--bs-border-radius) !important;
+  border-top-right-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-end {
+  border-top-right-radius: var(--bs-border-radius) !important;
+  border-bottom-right-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-bottom {
+  border-bottom-right-radius: var(--bs-border-radius) !important;
+  border-bottom-left-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-start {
+  border-bottom-left-radius: var(--bs-border-radius) !important;
+  border-top-left-radius: var(--bs-border-radius) !important;
+}
+
+.visible {
+  visibility: visible !important;
+}
+
+.invisible {
+  visibility: hidden !important;
+}
+
+@media (min-width: 576px) {
+  .float-sm-start {
+    float: left !important;
+  }
+  .float-sm-end {
+    float: right !important;
+  }
+  .float-sm-none {
+    float: none !important;
+  }
+  .d-sm-inline {
+    display: inline !important;
+  }
+  .d-sm-inline-block {
+    display: inline-block !important;
+  }
+  .d-sm-block {
+    display: block !important;
+  }
+  .d-sm-grid {
+    display: grid !important;
+  }
+  .d-sm-table {
+    display: table !important;
+  }
+  .d-sm-table-row {
+    display: table-row !important;
+  }
+  .d-sm-table-cell {
+    display: table-cell !important;
+  }
+  .d-sm-flex {
+    display: flex !important;
+  }
+  .d-sm-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-sm-none {
+    display: none !important;
+  }
+  .flex-sm-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-sm-row {
+    flex-direction: row !important;
+  }
+  .flex-sm-column {
+    flex-direction: column !important;
+  }
+  .flex-sm-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-sm-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-sm-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-sm-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-sm-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-sm-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-sm-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-sm-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-sm-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-sm-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-sm-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-sm-center {
+    justify-content: center !important;
+  }
+  .justify-content-sm-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-sm-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-sm-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-sm-start {
+    align-items: flex-start !important;
+  }
+  .align-items-sm-end {
+    align-items: flex-end !important;
+  }
+  .align-items-sm-center {
+    align-items: center !important;
+  }
+  .align-items-sm-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-sm-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-sm-start {
+    align-content: flex-start !important;
+  }
+  .align-content-sm-end {
+    align-content: flex-end !important;
+  }
+  .align-content-sm-center {
+    align-content: center !important;
+  }
+  .align-content-sm-between {
+    align-content: space-between !important;
+  }
+  .align-content-sm-around {
+    align-content: space-around !important;
+  }
+  .align-content-sm-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-sm-auto {
+    align-self: auto !important;
+  }
+  .align-self-sm-start {
+    align-self: flex-start !important;
+  }
+  .align-self-sm-end {
+    align-self: flex-end !important;
+  }
+  .align-self-sm-center {
+    align-self: center !important;
+  }
+  .align-self-sm-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-sm-stretch {
+    align-self: stretch !important;
+  }
+  .order-sm-first {
+    order: -1 !important;
+  }
+  .order-sm-0 {
+    order: 0 !important;
+  }
+  .order-sm-1 {
+    order: 1 !important;
+  }
+  .order-sm-2 {
+    order: 2 !important;
+  }
+  .order-sm-3 {
+    order: 3 !important;
+  }
+  .order-sm-4 {
+    order: 4 !important;
+  }
+  .order-sm-5 {
+    order: 5 !important;
+  }
+  .order-sm-last {
+    order: 6 !important;
+  }
+  .m-sm-0 {
+    margin: 0 !important;
+  }
+  .m-sm-1 {
+    margin: 0.25rem !important;
+  }
+  .m-sm-2 {
+    margin: 0.5rem !important;
+  }
+  .m-sm-3 {
+    margin: 1rem !important;
+  }
+  .m-sm-4 {
+    margin: 1.5rem !important;
+  }
+  .m-sm-5 {
+    margin: 3rem !important;
+  }
+  .m-sm-auto {
+    margin: auto !important;
+  }
+  .mx-sm-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-sm-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-sm-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-sm-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-sm-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-sm-5 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-sm-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-sm-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-sm-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-sm-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-sm-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-sm-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-sm-5 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-sm-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-sm-0 {
+    margin-top: 0 !important;
+  }
+  .mt-sm-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-sm-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-sm-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-sm-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-sm-5 {
+    margin-top: 3rem !important;
+  }
+  .mt-sm-auto {
+    margin-top: auto !important;
+  }
+  .me-sm-0 {
+    margin-right: 0 !important;
+  }
+  .me-sm-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-sm-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-sm-3 {
+    margin-right: 1rem !important;
+  }
+  .me-sm-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-sm-5 {
+    margin-right: 3rem !important;
+  }
+  .me-sm-auto {
+    margin-right: auto !important;
+  }
+  .mb-sm-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-sm-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-sm-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-sm-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-sm-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-sm-5 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-sm-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-sm-0 {
+    margin-left: 0 !important;
+  }
+  .ms-sm-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-sm-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-sm-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-sm-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-sm-5 {
+    margin-left: 3rem !important;
+  }
+  .ms-sm-auto {
+    margin-left: auto !important;
+  }
+  .p-sm-0 {
+    padding: 0 !important;
+  }
+  .p-sm-1 {
+    padding: 0.25rem !important;
+  }
+  .p-sm-2 {
+    padding: 0.5rem !important;
+  }
+  .p-sm-3 {
+    padding: 1rem !important;
+  }
+  .p-sm-4 {
+    padding: 1.5rem !important;
+  }
+  .p-sm-5 {
+    padding: 3rem !important;
+  }
+  .px-sm-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-sm-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-sm-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-sm-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-sm-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-sm-5 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .py-sm-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-sm-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-sm-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-sm-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-sm-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-sm-5 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .pt-sm-0 {
+    padding-top: 0 !important;
+  }
+  .pt-sm-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-sm-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-sm-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-sm-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-sm-5 {
+    padding-top: 3rem !important;
+  }
+  .pe-sm-0 {
+    padding-right: 0 !important;
+  }
+  .pe-sm-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-sm-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-sm-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-sm-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-sm-5 {
+    padding-right: 3rem !important;
+  }
+  .pb-sm-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-sm-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-sm-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-sm-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-sm-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-sm-5 {
+    padding-bottom: 3rem !important;
+  }
+  .ps-sm-0 {
+    padding-left: 0 !important;
+  }
+  .ps-sm-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-sm-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-sm-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-sm-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-sm-5 {
+    padding-left: 3rem !important;
+  }
+  .gap-sm-0 {
+    gap: 0 !important;
+  }
+  .gap-sm-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-sm-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-sm-3 {
+    gap: 1rem !important;
+  }
+  .gap-sm-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-sm-5 {
+    gap: 3rem !important;
+  }
+  .text-sm-start {
+    text-align: left !important;
+  }
+  .text-sm-end {
+    text-align: right !important;
+  }
+  .text-sm-center {
+    text-align: center !important;
+  }
+}
+@media (min-width: 768px) {
+  .float-md-start {
+    float: left !important;
+  }
+  .float-md-end {
+    float: right !important;
+  }
+  .float-md-none {
+    float: none !important;
+  }
+  .d-md-inline {
+    display: inline !important;
+  }
+  .d-md-inline-block {
+    display: inline-block !important;
+  }
+  .d-md-block {
+    display: block !important;
+  }
+  .d-md-grid {
+    display: grid !important;
+  }
+  .d-md-table {
+    display: table !important;
+  }
+  .d-md-table-row {
+    display: table-row !important;
+  }
+  .d-md-table-cell {
+    display: table-cell !important;
+  }
+  .d-md-flex {
+    display: flex !important;
+  }
+  .d-md-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-md-none {
+    display: none !important;
+  }
+  .flex-md-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-md-row {
+    flex-direction: row !important;
+  }
+  .flex-md-column {
+    flex-direction: column !important;
+  }
+  .flex-md-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-md-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-md-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-md-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-md-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-md-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-md-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-md-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-md-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-md-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-md-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-md-center {
+    justify-content: center !important;
+  }
+  .justify-content-md-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-md-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-md-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-md-start {
+    align-items: flex-start !important;
+  }
+  .align-items-md-end {
+    align-items: flex-end !important;
+  }
+  .align-items-md-center {
+    align-items: center !important;
+  }
+  .align-items-md-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-md-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-md-start {
+    align-content: flex-start !important;
+  }
+  .align-content-md-end {
+    align-content: flex-end !important;
+  }
+  .align-content-md-center {
+    align-content: center !important;
+  }
+  .align-content-md-between {
+    align-content: space-between !important;
+  }
+  .align-content-md-around {
+    align-content: space-around !important;
+  }
+  .align-content-md-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-md-auto {
+    align-self: auto !important;
+  }
+  .align-self-md-start {
+    align-self: flex-start !important;
+  }
+  .align-self-md-end {
+    align-self: flex-end !important;
+  }
+  .align-self-md-center {
+    align-self: center !important;
+  }
+  .align-self-md-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-md-stretch {
+    align-self: stretch !important;
+  }
+  .order-md-first {
+    order: -1 !important;
+  }
+  .order-md-0 {
+    order: 0 !important;
+  }
+  .order-md-1 {
+    order: 1 !important;
+  }
+  .order-md-2 {
+    order: 2 !important;
+  }
+  .order-md-3 {
+    order: 3 !important;
+  }
+  .order-md-4 {
+    order: 4 !important;
+  }
+  .order-md-5 {
+    order: 5 !important;
+  }
+  .order-md-last {
+    order: 6 !important;
+  }
+  .m-md-0 {
+    margin: 0 !important;
+  }
+  .m-md-1 {
+    margin: 0.25rem !important;
+  }
+  .m-md-2 {
+    margin: 0.5rem !important;
+  }
+  .m-md-3 {
+    margin: 1rem !important;
+  }
+  .m-md-4 {
+    margin: 1.5rem !important;
+  }
+  .m-md-5 {
+    margin: 3rem !important;
+  }
+  .m-md-auto {
+    margin: auto !important;
+  }
+  .mx-md-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-md-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-md-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-md-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-md-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-md-5 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-md-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-md-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-md-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-md-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-md-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-md-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-md-5 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-md-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-md-0 {
+    margin-top: 0 !important;
+  }
+  .mt-md-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-md-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-md-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-md-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-md-5 {
+    margin-top: 3rem !important;
+  }
+  .mt-md-auto {
+    margin-top: auto !important;
+  }
+  .me-md-0 {
+    margin-right: 0 !important;
+  }
+  .me-md-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-md-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-md-3 {
+    margin-right: 1rem !important;
+  }
+  .me-md-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-md-5 {
+    margin-right: 3rem !important;
+  }
+  .me-md-auto {
+    margin-right: auto !important;
+  }
+  .mb-md-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-md-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-md-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-md-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-md-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-md-5 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-md-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-md-0 {
+    margin-left: 0 !important;
+  }
+  .ms-md-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-md-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-md-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-md-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-md-5 {
+    margin-left: 3rem !important;
+  }
+  .ms-md-auto {
+    margin-left: auto !important;
+  }
+  .p-md-0 {
+    padding: 0 !important;
+  }
+  .p-md-1 {
+    padding: 0.25rem !important;
+  }
+  .p-md-2 {
+    padding: 0.5rem !important;
+  }
+  .p-md-3 {
+    padding: 1rem !important;
+  }
+  .p-md-4 {
+    padding: 1.5rem !important;
+  }
+  .p-md-5 {
+    padding: 3rem !important;
+  }
+  .px-md-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-md-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-md-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-md-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-md-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-md-5 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .py-md-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-md-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-md-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-md-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-md-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-md-5 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .pt-md-0 {
+    padding-top: 0 !important;
+  }
+  .pt-md-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-md-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-md-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-md-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-md-5 {
+    padding-top: 3rem !important;
+  }
+  .pe-md-0 {
+    padding-right: 0 !important;
+  }
+  .pe-md-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-md-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-md-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-md-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-md-5 {
+    padding-right: 3rem !important;
+  }
+  .pb-md-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-md-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-md-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-md-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-md-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-md-5 {
+    padding-bottom: 3rem !important;
+  }
+  .ps-md-0 {
+    padding-left: 0 !important;
+  }
+  .ps-md-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-md-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-md-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-md-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-md-5 {
+    padding-left: 3rem !important;
+  }
+  .gap-md-0 {
+    gap: 0 !important;
+  }
+  .gap-md-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-md-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-md-3 {
+    gap: 1rem !important;
+  }
+  .gap-md-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-md-5 {
+    gap: 3rem !important;
+  }
+  .text-md-start {
+    text-align: left !important;
+  }
+  .text-md-end {
+    text-align: right !important;
+  }
+  .text-md-center {
+    text-align: center !important;
+  }
+}
+@media (min-width: 992px) {
+  .float-lg-start {
+    float: left !important;
+  }
+  .float-lg-end {
+    float: right !important;
+  }
+  .float-lg-none {
+    float: none !important;
+  }
+  .d-lg-inline {
+    display: inline !important;
+  }
+  .d-lg-inline-block {
+    display: inline-block !important;
+  }
+  .d-lg-block {
+    display: block !important;
+  }
+  .d-lg-grid {
+    display: grid !important;
+  }
+  .d-lg-table {
+    display: table !important;
+  }
+  .d-lg-table-row {
+    display: table-row !important;
+  }
+  .d-lg-table-cell {
+    display: table-cell !important;
+  }
+  .d-lg-flex {
+    display: flex !important;
+  }
+  .d-lg-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-lg-none {
+    display: none !important;
+  }
+  .flex-lg-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-lg-row {
+    flex-direction: row !important;
+  }
+  .flex-lg-column {
+    flex-direction: column !important;
+  }
+  .flex-lg-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-lg-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-lg-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-lg-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-lg-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-lg-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-lg-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-lg-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-lg-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-lg-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-lg-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-lg-center {
+    justify-content: center !important;
+  }
+  .justify-content-lg-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-lg-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-lg-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-lg-start {
+    align-items: flex-start !important;
+  }
+  .align-items-lg-end {
+    align-items: flex-end !important;
+  }
+  .align-items-lg-center {
+    align-items: center !important;
+  }
+  .align-items-lg-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-lg-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-lg-start {
+    align-content: flex-start !important;
+  }
+  .align-content-lg-end {
+    align-content: flex-end !important;
+  }
+  .align-content-lg-center {
+    align-content: center !important;
+  }
+  .align-content-lg-between {
+    align-content: space-between !important;
+  }
+  .align-content-lg-around {
+    align-content: space-around !important;
+  }
+  .align-content-lg-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-lg-auto {
+    align-self: auto !important;
+  }
+  .align-self-lg-start {
+    align-self: flex-start !important;
+  }
+  .align-self-lg-end {
+    align-self: flex-end !important;
+  }
+  .align-self-lg-center {
+    align-self: center !important;
+  }
+  .align-self-lg-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-lg-stretch {
+    align-self: stretch !important;
+  }
+  .order-lg-first {
+    order: -1 !important;
+  }
+  .order-lg-0 {
+    order: 0 !important;
+  }
+  .order-lg-1 {
+    order: 1 !important;
+  }
+  .order-lg-2 {
+    order: 2 !important;
+  }
+  .order-lg-3 {
+    order: 3 !important;
+  }
+  .order-lg-4 {
+    order: 4 !important;
+  }
+  .order-lg-5 {
+    order: 5 !important;
+  }
+  .order-lg-last {
+    order: 6 !important;
+  }
+  .m-lg-0 {
+    margin: 0 !important;
+  }
+  .m-lg-1 {
+    margin: 0.25rem !important;
+  }
+  .m-lg-2 {
+    margin: 0.5rem !important;
+  }
+  .m-lg-3 {
+    margin: 1rem !important;
+  }
+  .m-lg-4 {
+    margin: 1.5rem !important;
+  }
+  .m-lg-5 {
+    margin: 3rem !important;
+  }
+  .m-lg-auto {
+    margin: auto !important;
+  }
+  .mx-lg-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-lg-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-lg-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-lg-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-lg-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-lg-5 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-lg-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-lg-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-lg-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-lg-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-lg-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-lg-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-lg-5 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-lg-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-lg-0 {
+    margin-top: 0 !important;
+  }
+  .mt-lg-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-lg-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-lg-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-lg-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-lg-5 {
+    margin-top: 3rem !important;
+  }
+  .mt-lg-auto {
+    margin-top: auto !important;
+  }
+  .me-lg-0 {
+    margin-right: 0 !important;
+  }
+  .me-lg-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-lg-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-lg-3 {
+    margin-right: 1rem !important;
+  }
+  .me-lg-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-lg-5 {
+    margin-right: 3rem !important;
+  }
+  .me-lg-auto {
+    margin-right: auto !important;
+  }
+  .mb-lg-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-lg-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-lg-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-lg-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-lg-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-lg-5 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-lg-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-lg-0 {
+    margin-left: 0 !important;
+  }
+  .ms-lg-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-lg-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-lg-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-lg-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-lg-5 {
+    margin-left: 3rem !important;
+  }
+  .ms-lg-auto {
+    margin-left: auto !important;
+  }
+  .p-lg-0 {
+    padding: 0 !important;
+  }
+  .p-lg-1 {
+    padding: 0.25rem !important;
+  }
+  .p-lg-2 {
+    padding: 0.5rem !important;
+  }
+  .p-lg-3 {
+    padding: 1rem !important;
+  }
+  .p-lg-4 {
+    padding: 1.5rem !important;
+  }
+  .p-lg-5 {
+    padding: 3rem !important;
+  }
+  .px-lg-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-lg-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-lg-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-lg-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-lg-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-lg-5 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .py-lg-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-lg-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-lg-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-lg-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-lg-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-lg-5 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .pt-lg-0 {
+    padding-top: 0 !important;
+  }
+  .pt-lg-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-lg-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-lg-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-lg-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-lg-5 {
+    padding-top: 3rem !important;
+  }
+  .pe-lg-0 {
+    padding-right: 0 !important;
+  }
+  .pe-lg-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-lg-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-lg-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-lg-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-lg-5 {
+    padding-right: 3rem !important;
+  }
+  .pb-lg-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-lg-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-lg-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-lg-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-lg-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-lg-5 {
+    padding-bottom: 3rem !important;
+  }
+  .ps-lg-0 {
+    padding-left: 0 !important;
+  }
+  .ps-lg-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-lg-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-lg-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-lg-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-lg-5 {
+    padding-left: 3rem !important;
+  }
+  .gap-lg-0 {
+    gap: 0 !important;
+  }
+  .gap-lg-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-lg-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-lg-3 {
+    gap: 1rem !important;
+  }
+  .gap-lg-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-lg-5 {
+    gap: 3rem !important;
+  }
+  .text-lg-start {
+    text-align: left !important;
+  }
+  .text-lg-end {
+    text-align: right !important;
+  }
+  .text-lg-center {
+    text-align: center !important;
+  }
+}
+@media (min-width: 1200px) {
+  .float-xl-start {
+    float: left !important;
+  }
+  .float-xl-end {
+    float: right !important;
+  }
+  .float-xl-none {
+    float: none !important;
+  }
+  .d-xl-inline {
+    display: inline !important;
+  }
+  .d-xl-inline-block {
+    display: inline-block !important;
+  }
+  .d-xl-block {
+    display: block !important;
+  }
+  .d-xl-grid {
+    display: grid !important;
+  }
+  .d-xl-table {
+    display: table !important;
+  }
+  .d-xl-table-row {
+    display: table-row !important;
+  }
+  .d-xl-table-cell {
+    display: table-cell !important;
+  }
+  .d-xl-flex {
+    display: flex !important;
+  }
+  .d-xl-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-xl-none {
+    display: none !important;
+  }
+  .flex-xl-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-xl-row {
+    flex-direction: row !important;
+  }
+  .flex-xl-column {
+    flex-direction: column !important;
+  }
+  .flex-xl-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-xl-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-xl-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-xl-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-xl-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-xl-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-xl-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-xl-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-xl-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-xl-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-xl-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-xl-center {
+    justify-content: center !important;
+  }
+  .justify-content-xl-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-xl-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-xl-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-xl-start {
+    align-items: flex-start !important;
+  }
+  .align-items-xl-end {
+    align-items: flex-end !important;
+  }
+  .align-items-xl-center {
+    align-items: center !important;
+  }
+  .align-items-xl-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-xl-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-xl-start {
+    align-content: flex-start !important;
+  }
+  .align-content-xl-end {
+    align-content: flex-end !important;
+  }
+  .align-content-xl-center {
+    align-content: center !important;
+  }
+  .align-content-xl-between {
+    align-content: space-between !important;
+  }
+  .align-content-xl-around {
+    align-content: space-around !important;
+  }
+  .align-content-xl-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-xl-auto {
+    align-self: auto !important;
+  }
+  .align-self-xl-start {
+    align-self: flex-start !important;
+  }
+  .align-self-xl-end {
+    align-self: flex-end !important;
+  }
+  .align-self-xl-center {
+    align-self: center !important;
+  }
+  .align-self-xl-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-xl-stretch {
+    align-self: stretch !important;
+  }
+  .order-xl-first {
+    order: -1 !important;
+  }
+  .order-xl-0 {
+    order: 0 !important;
+  }
+  .order-xl-1 {
+    order: 1 !important;
+  }
+  .order-xl-2 {
+    order: 2 !important;
+  }
+  .order-xl-3 {
+    order: 3 !important;
+  }
+  .order-xl-4 {
+    order: 4 !important;
+  }
+  .order-xl-5 {
+    order: 5 !important;
+  }
+  .order-xl-last {
+    order: 6 !important;
+  }
+  .m-xl-0 {
+    margin: 0 !important;
+  }
+  .m-xl-1 {
+    margin: 0.25rem !important;
+  }
+  .m-xl-2 {
+    margin: 0.5rem !important;
+  }
+  .m-xl-3 {
+    margin: 1rem !important;
+  }
+  .m-xl-4 {
+    margin: 1.5rem !important;
+  }
+  .m-xl-5 {
+    margin: 3rem !important;
+  }
+  .m-xl-auto {
+    margin: auto !important;
+  }
+  .mx-xl-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-xl-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-xl-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-xl-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-xl-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-xl-5 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-xl-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-xl-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-xl-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-xl-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-xl-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-xl-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-xl-5 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-xl-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-xl-0 {
+    margin-top: 0 !important;
+  }
+  .mt-xl-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-xl-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-xl-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-xl-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-xl-5 {
+    margin-top: 3rem !important;
+  }
+  .mt-xl-auto {
+    margin-top: auto !important;
+  }
+  .me-xl-0 {
+    margin-right: 0 !important;
+  }
+  .me-xl-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-xl-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-xl-3 {
+    margin-right: 1rem !important;
+  }
+  .me-xl-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-xl-5 {
+    margin-right: 3rem !important;
+  }
+  .me-xl-auto {
+    margin-right: auto !important;
+  }
+  .mb-xl-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-xl-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-xl-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-xl-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-xl-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-xl-5 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-xl-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-xl-0 {
+    margin-left: 0 !important;
+  }
+  .ms-xl-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-xl-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-xl-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-xl-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-xl-5 {
+    margin-left: 3rem !important;
+  }
+  .ms-xl-auto {
+    margin-left: auto !important;
+  }
+  .p-xl-0 {
+    padding: 0 !important;
+  }
+  .p-xl-1 {
+    padding: 0.25rem !important;
+  }
+  .p-xl-2 {
+    padding: 0.5rem !important;
+  }
+  .p-xl-3 {
+    padding: 1rem !important;
+  }
+  .p-xl-4 {
+    padding: 1.5rem !important;
+  }
+  .p-xl-5 {
+    padding: 3rem !important;
+  }
+  .px-xl-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-xl-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-xl-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-xl-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-xl-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-xl-5 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .py-xl-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-xl-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-xl-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-xl-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-xl-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-xl-5 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .pt-xl-0 {
+    padding-top: 0 !important;
+  }
+  .pt-xl-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-xl-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-xl-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-xl-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-xl-5 {
+    padding-top: 3rem !important;
+  }
+  .pe-xl-0 {
+    padding-right: 0 !important;
+  }
+  .pe-xl-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-xl-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-xl-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-xl-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-xl-5 {
+    padding-right: 3rem !important;
+  }
+  .pb-xl-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-xl-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-xl-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-xl-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-xl-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-xl-5 {
+    padding-bottom: 3rem !important;
+  }
+  .ps-xl-0 {
+    padding-left: 0 !important;
+  }
+  .ps-xl-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-xl-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-xl-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-xl-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-xl-5 {
+    padding-left: 3rem !important;
+  }
+  .gap-xl-0 {
+    gap: 0 !important;
+  }
+  .gap-xl-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-xl-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-xl-3 {
+    gap: 1rem !important;
+  }
+  .gap-xl-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-xl-5 {
+    gap: 3rem !important;
+  }
+  .text-xl-start {
+    text-align: left !important;
+  }
+  .text-xl-end {
+    text-align: right !important;
+  }
+  .text-xl-center {
+    text-align: center !important;
+  }
+}
+@media (min-width: 1400px) {
+  .float-xxl-start {
+    float: left !important;
+  }
+  .float-xxl-end {
+    float: right !important;
+  }
+  .float-xxl-none {
+    float: none !important;
+  }
+  .d-xxl-inline {
+    display: inline !important;
+  }
+  .d-xxl-inline-block {
+    display: inline-block !important;
+  }
+  .d-xxl-block {
+    display: block !important;
+  }
+  .d-xxl-grid {
+    display: grid !important;
+  }
+  .d-xxl-table {
+    display: table !important;
+  }
+  .d-xxl-table-row {
+    display: table-row !important;
+  }
+  .d-xxl-table-cell {
+    display: table-cell !important;
+  }
+  .d-xxl-flex {
+    display: flex !important;
+  }
+  .d-xxl-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-xxl-none {
+    display: none !important;
+  }
+  .flex-xxl-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-xxl-row {
+    flex-direction: row !important;
+  }
+  .flex-xxl-column {
+    flex-direction: column !important;
+  }
+  .flex-xxl-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-xxl-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-xxl-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-xxl-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-xxl-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-xxl-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-xxl-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-xxl-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-xxl-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-xxl-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-xxl-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-xxl-center {
+    justify-content: center !important;
+  }
+  .justify-content-xxl-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-xxl-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-xxl-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-xxl-start {
+    align-items: flex-start !important;
+  }
+  .align-items-xxl-end {
+    align-items: flex-end !important;
+  }
+  .align-items-xxl-center {
+    align-items: center !important;
+  }
+  .align-items-xxl-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-xxl-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-xxl-start {
+    align-content: flex-start !important;
+  }
+  .align-content-xxl-end {
+    align-content: flex-end !important;
+  }
+  .align-content-xxl-center {
+    align-content: center !important;
+  }
+  .align-content-xxl-between {
+    align-content: space-between !important;
+  }
+  .align-content-xxl-around {
+    align-content: space-around !important;
+  }
+  .align-content-xxl-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-xxl-auto {
+    align-self: auto !important;
+  }
+  .align-self-xxl-start {
+    align-self: flex-start !important;
+  }
+  .align-self-xxl-end {
+    align-self: flex-end !important;
+  }
+  .align-self-xxl-center {
+    align-self: center !important;
+  }
+  .align-self-xxl-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-xxl-stretch {
+    align-self: stretch !important;
+  }
+  .order-xxl-first {
+    order: -1 !important;
+  }
+  .order-xxl-0 {
+    order: 0 !important;
+  }
+  .order-xxl-1 {
+    order: 1 !important;
+  }
+  .order-xxl-2 {
+    order: 2 !important;
+  }
+  .order-xxl-3 {
+    order: 3 !important;
+  }
+  .order-xxl-4 {
+    order: 4 !important;
+  }
+  .order-xxl-5 {
+    order: 5 !important;
+  }
+  .order-xxl-last {
+    order: 6 !important;
+  }
+  .m-xxl-0 {
+    margin: 0 !important;
+  }
+  .m-xxl-1 {
+    margin: 0.25rem !important;
+  }
+  .m-xxl-2 {
+    margin: 0.5rem !important;
+  }
+  .m-xxl-3 {
+    margin: 1rem !important;
+  }
+  .m-xxl-4 {
+    margin: 1.5rem !important;
+  }
+  .m-xxl-5 {
+    margin: 3rem !important;
+  }
+  .m-xxl-auto {
+    margin: auto !important;
+  }
+  .mx-xxl-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-xxl-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-xxl-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-xxl-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-xxl-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-xxl-5 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-xxl-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-xxl-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-xxl-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-xxl-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-xxl-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-xxl-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-xxl-5 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-xxl-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-xxl-0 {
+    margin-top: 0 !important;
+  }
+  .mt-xxl-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-xxl-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-xxl-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-xxl-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-xxl-5 {
+    margin-top: 3rem !important;
+  }
+  .mt-xxl-auto {
+    margin-top: auto !important;
+  }
+  .me-xxl-0 {
+    margin-right: 0 !important;
+  }
+  .me-xxl-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-xxl-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-xxl-3 {
+    margin-right: 1rem !important;
+  }
+  .me-xxl-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-xxl-5 {
+    margin-right: 3rem !important;
+  }
+  .me-xxl-auto {
+    margin-right: auto !important;
+  }
+  .mb-xxl-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-xxl-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-xxl-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-xxl-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-xxl-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-xxl-5 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-xxl-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-xxl-0 {
+    margin-left: 0 !important;
+  }
+  .ms-xxl-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-xxl-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-xxl-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-xxl-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-xxl-5 {
+    margin-left: 3rem !important;
+  }
+  .ms-xxl-auto {
+    margin-left: auto !important;
+  }
+  .p-xxl-0 {
+    padding: 0 !important;
+  }
+  .p-xxl-1 {
+    padding: 0.25rem !important;
+  }
+  .p-xxl-2 {
+    padding: 0.5rem !important;
+  }
+  .p-xxl-3 {
+    padding: 1rem !important;
+  }
+  .p-xxl-4 {
+    padding: 1.5rem !important;
+  }
+  .p-xxl-5 {
+    padding: 3rem !important;
+  }
+  .px-xxl-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-xxl-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-xxl-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-xxl-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-xxl-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-xxl-5 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .py-xxl-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-xxl-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-xxl-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-xxl-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-xxl-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-xxl-5 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .pt-xxl-0 {
+    padding-top: 0 !important;
+  }
+  .pt-xxl-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-xxl-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-xxl-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-xxl-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-xxl-5 {
+    padding-top: 3rem !important;
+  }
+  .pe-xxl-0 {
+    padding-right: 0 !important;
+  }
+  .pe-xxl-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-xxl-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-xxl-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-xxl-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-xxl-5 {
+    padding-right: 3rem !important;
+  }
+  .pb-xxl-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-xxl-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-xxl-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-xxl-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-xxl-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-xxl-5 {
+    padding-bottom: 3rem !important;
+  }
+  .ps-xxl-0 {
+    padding-left: 0 !important;
+  }
+  .ps-xxl-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-xxl-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-xxl-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-xxl-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-xxl-5 {
+    padding-left: 3rem !important;
+  }
+  .gap-xxl-0 {
+    gap: 0 !important;
+  }
+  .gap-xxl-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-xxl-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-xxl-3 {
+    gap: 1rem !important;
+  }
+  .gap-xxl-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-xxl-5 {
+    gap: 3rem !important;
+  }
+  .text-xxl-start {
+    text-align: left !important;
+  }
+  .text-xxl-end {
+    text-align: right !important;
+  }
+  .text-xxl-center {
+    text-align: center !important;
+  }
+}
+@media (min-width: 1200px) {
+  .fs-1 {
+    font-size: 2.5rem !important;
+  }
+  .fs-2 {
+    font-size: 2rem !important;
+  }
+  .fs-3 {
+    font-size: 1.75rem !important;
+  }
+  .fs-4 {
+    font-size: 1.5rem !important;
+  }
+}
+@media print {
+  .d-print-inline {
+    display: inline !important;
+  }
+  .d-print-inline-block {
+    display: inline-block !important;
+  }
+  .d-print-block {
+    display: block !important;
+  }
+  .d-print-grid {
+    display: grid !important;
+  }
+  .d-print-table {
+    display: table !important;
+  }
+  .d-print-table-row {
+    display: table-row !important;
+  }
+  .d-print-table-cell {
+    display: table-cell !important;
+  }
+  .d-print-flex {
+    display: flex !important;
+  }
+  .d-print-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-print-none {
+    display: none !important;
+  }
+}
+html {
+  scroll-padding-top: 3.5rem;
+}
+
+header {
+  padding-top: 9.5rem;
+  padding-bottom: 6rem;
+}
+
+section {
+  padding-top: 9rem;
+  padding-bottom: 9rem;
+}
\ No newline at end of file
diff --git a/main/static/css2/.DS_Store b/main/static/css2/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..77bb07d598451f8ebcf6afadbbace31d5937d669
GIT binary patch
literal 6148
zcmZQzU|@7AO)+F(5MW?n;9!8z3~dZp0Z1N%F(jFwB8(vOz-FW}=rJTS6f+ci=0N2L
zQ6RmX48;s343!Ky3`qL(laq4tlb}v>WME*>`ws?$3>=jo4S~@R7!85Z5Eu=C(Gb8J
z0-(AVRR441RW&L(8UmvsFcL!mR6Zy`+V%_%P`Uv^gQOT385qD_07eD|7FhT&g8Kms
zAUTj$5Dn4_qCr|27(pzs8DOmpj8LtN;BE*=AE-+LqQTl37{NA!_+ae}j9{A?7#Jbi
z85p59GeUbPj1cV%j1cV%j9}Ygt{bICLtr!nU?IQ^VF-Zge^&+uT>XEDs!?(@1V%$(
zScU*2i%YPJ6Sz{w?mtjn3#v~OplS|4l`(?qWr!F^38-oZSI10{K}89uGLSe(JBS8X
X$BYaN;M#n&F#rppQF=54=o<n6gAyBW

literal 0
HcmV?d00001

diff --git a/main/static/css2/style.css b/main/static/css2/style.css
new file mode 100644
index 0000000..e4443d8
--- /dev/null
+++ b/main/static/css2/style.css
@@ -0,0 +1,20 @@
+html, body {
+    height: 100%;
+  }
+  
+  #wrap {
+    min-height: 46%;
+  }
+  
+  #main {
+    overflow:auto;
+    padding-bottom:150px; /* this needs to be bigger than footer height*/
+  }
+  
+  .footer {
+    position: relative;
+    margin-top: -100px; /* negative value of footer height */
+    height: 100px;
+    clear:both;
+    padding-top:20px;
+  } 
\ No newline at end of file
diff --git a/main/static/imgSimulation/simulation.png b/main/static/imgSimulation/simulation.png
new file mode 100644
index 0000000000000000000000000000000000000000..d266f37a1eef4c073cdc21a8525d47e689172536
GIT binary patch
literal 106346
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

literal 0
HcmV?d00001

diff --git a/main/static/js/scripts.js b/main/static/js/scripts.js
new file mode 100644
index 0000000..ada90ce
--- /dev/null
+++ b/main/static/js/scripts.js
@@ -0,0 +1,34 @@
+/*!
+* Start Bootstrap - Scrolling Nav v5.0.6 (https://startbootstrap.com/template/scrolling-nav)
+* Copyright 2013-2023 Start Bootstrap
+* Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-scrolling-nav/blob/master/LICENSE)
+*/
+//
+// Scripts
+// 
+
+window.addEventListener('DOMContentLoaded', event => {
+
+    // Activate Bootstrap scrollspy on the main nav element
+    const mainNav = document.body.querySelector('#mainNav');
+    if (mainNav) {
+        new bootstrap.ScrollSpy(document.body, {
+            target: '#mainNav',
+            rootMargin: '0px 0px -40%',
+        });
+    };
+
+    // Collapse responsive navbar when toggler is visible
+    const navbarToggler = document.body.querySelector('.navbar-toggler');
+    const responsiveNavItems = [].slice.call(
+        document.querySelectorAll('#navbarResponsive .nav-link')
+    );
+    responsiveNavItems.map(function (responsiveNavItem) {
+        responsiveNavItem.addEventListener('click', () => {
+            if (window.getComputedStyle(navbarToggler).display !== 'none') {
+                navbarToggler.click();
+            }
+        });
+    });
+
+});
diff --git a/main/templates/.DS_Store b/main/templates/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..678aa73ace2d76c6ed89d18a3ba4c0552b07d09a
GIT binary patch
literal 6148
zcmZQzU|@7AO)+F(5MW?n;9!8zEL;p&0Z1N%F(jFwBAg)ez-E*%6np06Cnx3PCqd;#
zsnHM^4S~TM0-(Ih#*oNR%uvjb%7B`G1sE6@yBQc50{(*m*b^vflgf(=pm}|JQbA5;
zafyM!HAW_87FITP4t5T1j@aOg{PN(E#FEltr^KRY5HBP@KPL&sPD~2ROf8QW5OL1W
zD@n}EODzH^3C>JOO-d|^3D3++$uD=xFU?CS2J3}NaBy;P#tVp7R~s9f=_r_+*Xk%#
zTN)YYD43X;)Yfuxh$`z_2gPUS<mTmff*sAk$Oxesc%d|m>SADEK=D#pa8X`PeqK7H
zNMqn+NCF2=DuW(F215x$E<+Ad0Vlw~z!b&6z~B!KpZ{P(x!^jCaOq)iL<>}AhGb9#
zpqkA16HOHtLncEWLkdGGLj^vQ8TpW0!;PfJ7^klFXf`o1WT6z~poAccrUvZUQDP{E
z05nr@a1UiqjJka^1V%%ECLsVS9~7V!p#zj|fY2Z*21W)3a2J4)fq@0)07h^>fB_^2
z(h8zMT0t~OD+42l1vUe$m4Okel@Z(x0qFyENkBAMI|CyFSUUqF16Vt}CTE0bXJCZd
z%n0qFFhaC5FhaC5FhaD$oHt63hQMeDKtq5TLJNTEe^&+uT>XEDs!?(@1V%$(ScU*2
zi%YPJ6Sz{w?mtjn3#v~Opwgh)A5<MPg6e6AK9CZyEE8lvQ3A|?$bqzis(o-(%*X(#
S$wwOkun-!hM?--AApigvrKPw4

literal 0
HcmV?d00001

diff --git a/main/templates/assets/favicon.ico b/main/templates/assets/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..9356735ca323587d5730a74bd017d9cb2153479b
GIT binary patch
literal 23462
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

literal 0
HcmV?d00001

diff --git a/main/templates/base.html b/main/templates/base.html
new file mode 100644
index 0000000..67d570c
--- /dev/null
+++ b/main/templates/base.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html lang="fr">
+
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
+    <meta name="description" content="Simulateur de trading de cryptomonnaies" />
+    <meta name="author" content="Lucas Toniutti" />
+    <title>Simulateur trading cryptomonnaies</title>
+    <link rel="icon" type="image/x-icon" href="static/assets/favicon.ico" />
+    <link href="static/css/styles.css" rel="stylesheet" />
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css">    
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
+</head>
+
+<body id="page-top" class="d-flex flex-column min-vh-100">
+    <!-- Navigation-->
+    <nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top" id="mainNav">
+        <div class="container px-4">
+            <a class="navbar-brand" href="{{ url_for('index')}}">Silmulateur de trading de cryptomonnaies</a>
+            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive"
+                aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><span
+                    class="navbar-toggler-icon"></span></button>
+            <div class="collapse navbar-collapse" id="navbarResponsive">
+                <ul class="navbar-nav ms-auto">
+                    <!-- <li class="nav-item"><a class="nav-link" href="#launchSimulation">Démarrer une simulation</a></li> -->
+                    <li class="nav-item"><a class="nav-link" href="#simulations">Mes simulations</a></li>
+                    <li class="nav-item"><a class="nav-link" href="#comparaison">Comparaison</a></li>
+                </ul>
+            </div>
+        </div>
+    </nav>
+    {% block content %}
+    {% endblock %}
+    <!-- Footer-->
+    <footer class="py-5 bg-dark">
+        <div class="container-fluid px-4">
+            <div class="row justify-content-center">
+                <div class="col-12 text-center">
+                    <p class="m-0 text-white">&copy; 2023 Lucas TONIUTTI </p>
+                </div>
+            </div>
+        </div>
+    </footer>
+    <!-- Bootstrap core JS-->
+    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/main/templates/css/styles.css b/main/templates/css/styles.css
new file mode 100644
index 0000000..90a7412
--- /dev/null
+++ b/main/templates/css/styles.css
@@ -0,0 +1,10839 @@
+@charset "UTF-8";
+/*!
+* Start Bootstrap - Scrolling Nav v5.0.6 (https://startbootstrap.com/template/scrolling-nav)
+* Copyright 2013-2023 Start Bootstrap
+* Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-scrolling-nav/blob/master/LICENSE)
+*/
+/*!
+ * Bootstrap  v5.2.3 (https://getbootstrap.com/)
+ * Copyright 2011-2022 The Bootstrap Authors
+ * Copyright 2011-2022 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */
+:root {
+  --bs-blue: #0d6efd;
+  --bs-indigo: #6610f2;
+  --bs-purple: #6f42c1;
+  --bs-pink: #d63384;
+  --bs-red: #dc3545;
+  --bs-orange: #fd7e14;
+  --bs-yellow: #ffc107;
+  --bs-green: #198754;
+  --bs-teal: #20c997;
+  --bs-cyan: #0dcaf0;
+  --bs-black: #000;
+  --bs-white: #fff;
+  --bs-gray: #6c757d;
+  --bs-gray-dark: #343a40;
+  --bs-gray-100: #f8f9fa;
+  --bs-gray-200: #e9ecef;
+  --bs-gray-300: #dee2e6;
+  --bs-gray-400: #ced4da;
+  --bs-gray-500: #adb5bd;
+  --bs-gray-600: #6c757d;
+  --bs-gray-700: #495057;
+  --bs-gray-800: #343a40;
+  --bs-gray-900: #212529;
+  --bs-primary: #0d6efd;
+  --bs-secondary: #6c757d;
+  --bs-success: #198754;
+  --bs-info: #0dcaf0;
+  --bs-warning: #ffc107;
+  --bs-danger: #dc3545;
+  --bs-light: #f8f9fa;
+  --bs-dark: #212529;
+  --bs-primary-rgb: 13, 110, 253;
+  --bs-secondary-rgb: 108, 117, 125;
+  --bs-success-rgb: 25, 135, 84;
+  --bs-info-rgb: 13, 202, 240;
+  --bs-warning-rgb: 255, 193, 7;
+  --bs-danger-rgb: 220, 53, 69;
+  --bs-light-rgb: 248, 249, 250;
+  --bs-dark-rgb: 33, 37, 41;
+  --bs-white-rgb: 255, 255, 255;
+  --bs-black-rgb: 0, 0, 0;
+  --bs-body-color-rgb: 33, 37, 41;
+  --bs-body-bg-rgb: 255, 255, 255;
+  --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
+  --bs-body-font-family: var(--bs-font-sans-serif);
+  --bs-body-font-size: 1rem;
+  --bs-body-font-weight: 400;
+  --bs-body-line-height: 1.5;
+  --bs-body-color: #212529;
+  --bs-body-bg: #fff;
+  --bs-border-width: 1px;
+  --bs-border-style: solid;
+  --bs-border-color: #dee2e6;
+  --bs-border-color-translucent: rgba(0, 0, 0, 0.175);
+  --bs-border-radius: 0.375rem;
+  --bs-border-radius-sm: 0.25rem;
+  --bs-border-radius-lg: 0.5rem;
+  --bs-border-radius-xl: 1rem;
+  --bs-border-radius-2xl: 2rem;
+  --bs-border-radius-pill: 50rem;
+  --bs-link-color: #0d6efd;
+  --bs-link-hover-color: #0a58ca;
+  --bs-code-color: #d63384;
+  --bs-highlight-bg: #fff3cd;
+}
+
+*,
+*::before,
+*::after {
+  box-sizing: border-box;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+  :root {
+    scroll-behavior: smooth;
+  }
+}
+
+body {
+  margin: 0;
+  font-family: var(--bs-body-font-family);
+  font-size: var(--bs-body-font-size);
+  font-weight: var(--bs-body-font-weight);
+  line-height: var(--bs-body-line-height);
+  color: var(--bs-body-color);
+  text-align: var(--bs-body-text-align);
+  background-color: var(--bs-body-bg);
+  -webkit-text-size-adjust: 100%;
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+hr {
+  margin: 1rem 0;
+  color: inherit;
+  border: 0;
+  border-top: 1px solid;
+  opacity: 0.25;
+}
+
+h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {
+  margin-top: 0;
+  margin-bottom: 0.5rem;
+  font-weight: 500;
+  line-height: 1.2;
+}
+
+h1, .h1 {
+  font-size: calc(1.375rem + 1.5vw);
+}
+@media (min-width: 1200px) {
+  h1, .h1 {
+    font-size: 2.5rem;
+  }
+}
+
+h2, .h2 {
+  font-size: calc(1.325rem + 0.9vw);
+}
+@media (min-width: 1200px) {
+  h2, .h2 {
+    font-size: 2rem;
+  }
+}
+
+h3, .h3 {
+  font-size: calc(1.3rem + 0.6vw);
+}
+@media (min-width: 1200px) {
+  h3, .h3 {
+    font-size: 1.75rem;
+  }
+}
+
+h4, .h4 {
+  font-size: calc(1.275rem + 0.3vw);
+}
+@media (min-width: 1200px) {
+  h4, .h4 {
+    font-size: 1.5rem;
+  }
+}
+
+h5, .h5 {
+  font-size: 1.25rem;
+}
+
+h6, .h6 {
+  font-size: 1rem;
+}
+
+p {
+  margin-top: 0;
+  margin-bottom: 1rem;
+}
+
+abbr[title] {
+  -webkit-text-decoration: underline dotted;
+          text-decoration: underline dotted;
+  cursor: help;
+  -webkit-text-decoration-skip-ink: none;
+          text-decoration-skip-ink: none;
+}
+
+address {
+  margin-bottom: 1rem;
+  font-style: normal;
+  line-height: inherit;
+}
+
+ol,
+ul {
+  padding-left: 2rem;
+}
+
+ol,
+ul,
+dl {
+  margin-top: 0;
+  margin-bottom: 1rem;
+}
+
+ol ol,
+ul ul,
+ol ul,
+ul ol {
+  margin-bottom: 0;
+}
+
+dt {
+  font-weight: 700;
+}
+
+dd {
+  margin-bottom: 0.5rem;
+  margin-left: 0;
+}
+
+blockquote {
+  margin: 0 0 1rem;
+}
+
+b,
+strong {
+  font-weight: bolder;
+}
+
+small, .small {
+  font-size: 0.875em;
+}
+
+mark, .mark {
+  padding: 0.1875em;
+  background-color: var(--bs-highlight-bg);
+}
+
+sub,
+sup {
+  position: relative;
+  font-size: 0.75em;
+  line-height: 0;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+sup {
+  top: -0.5em;
+}
+
+a {
+  color: var(--bs-link-color);
+  text-decoration: underline;
+}
+a:hover {
+  color: var(--bs-link-hover-color);
+}
+
+a:not([href]):not([class]), a:not([href]):not([class]):hover {
+  color: inherit;
+  text-decoration: none;
+}
+
+pre,
+code,
+kbd,
+samp {
+  font-family: var(--bs-font-monospace);
+  font-size: 1em;
+}
+
+pre {
+  display: block;
+  margin-top: 0;
+  margin-bottom: 1rem;
+  overflow: auto;
+  font-size: 0.875em;
+}
+pre code {
+  font-size: inherit;
+  color: inherit;
+  word-break: normal;
+}
+
+code {
+  font-size: 0.875em;
+  color: var(--bs-code-color);
+  word-wrap: break-word;
+}
+a > code {
+  color: inherit;
+}
+
+kbd {
+  padding: 0.1875rem 0.375rem;
+  font-size: 0.875em;
+  color: var(--bs-body-bg);
+  background-color: var(--bs-body-color);
+  border-radius: 0.25rem;
+}
+kbd kbd {
+  padding: 0;
+  font-size: 1em;
+}
+
+figure {
+  margin: 0 0 1rem;
+}
+
+img,
+svg {
+  vertical-align: middle;
+}
+
+table {
+  caption-side: bottom;
+  border-collapse: collapse;
+}
+
+caption {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+  color: #6c757d;
+  text-align: left;
+}
+
+th {
+  text-align: inherit;
+  text-align: -webkit-match-parent;
+}
+
+thead,
+tbody,
+tfoot,
+tr,
+td,
+th {
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+}
+
+label {
+  display: inline-block;
+}
+
+button {
+  border-radius: 0;
+}
+
+button:focus:not(:focus-visible) {
+  outline: 0;
+}
+
+input,
+button,
+select,
+optgroup,
+textarea {
+  margin: 0;
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
+}
+
+button,
+select {
+  text-transform: none;
+}
+
+[role=button] {
+  cursor: pointer;
+}
+
+select {
+  word-wrap: normal;
+}
+select:disabled {
+  opacity: 1;
+}
+
+[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
+  display: none !important;
+}
+
+button,
+[type=button],
+[type=reset],
+[type=submit] {
+  -webkit-appearance: button;
+}
+button:not(:disabled),
+[type=button]:not(:disabled),
+[type=reset]:not(:disabled),
+[type=submit]:not(:disabled) {
+  cursor: pointer;
+}
+
+::-moz-focus-inner {
+  padding: 0;
+  border-style: none;
+}
+
+textarea {
+  resize: vertical;
+}
+
+fieldset {
+  min-width: 0;
+  padding: 0;
+  margin: 0;
+  border: 0;
+}
+
+legend {
+  float: left;
+  width: 100%;
+  padding: 0;
+  margin-bottom: 0.5rem;
+  font-size: calc(1.275rem + 0.3vw);
+  line-height: inherit;
+}
+@media (min-width: 1200px) {
+  legend {
+    font-size: 1.5rem;
+  }
+}
+legend + * {
+  clear: left;
+}
+
+::-webkit-datetime-edit-fields-wrapper,
+::-webkit-datetime-edit-text,
+::-webkit-datetime-edit-minute,
+::-webkit-datetime-edit-hour-field,
+::-webkit-datetime-edit-day-field,
+::-webkit-datetime-edit-month-field,
+::-webkit-datetime-edit-year-field {
+  padding: 0;
+}
+
+::-webkit-inner-spin-button {
+  height: auto;
+}
+
+[type=search] {
+  outline-offset: -2px;
+  -webkit-appearance: textfield;
+}
+
+/* rtl:raw:
+[type="tel"],
+[type="url"],
+[type="email"],
+[type="number"] {
+  direction: ltr;
+}
+*/
+::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+::-webkit-color-swatch-wrapper {
+  padding: 0;
+}
+
+::file-selector-button {
+  font: inherit;
+  -webkit-appearance: button;
+}
+
+output {
+  display: inline-block;
+}
+
+iframe {
+  border: 0;
+}
+
+summary {
+  display: list-item;
+  cursor: pointer;
+}
+
+progress {
+  vertical-align: baseline;
+}
+
+[hidden] {
+  display: none !important;
+}
+
+.lead {
+  font-size: 1.25rem;
+  font-weight: 300;
+}
+
+.display-1 {
+  font-size: calc(1.625rem + 4.5vw);
+  font-weight: 300;
+  line-height: 1.2;
+}
+@media (min-width: 1200px) {
+  .display-1 {
+    font-size: 5rem;
+  }
+}
+
+.display-2 {
+  font-size: calc(1.575rem + 3.9vw);
+  font-weight: 300;
+  line-height: 1.2;
+}
+@media (min-width: 1200px) {
+  .display-2 {
+    font-size: 4.5rem;
+  }
+}
+
+.display-3 {
+  font-size: calc(1.525rem + 3.3vw);
+  font-weight: 300;
+  line-height: 1.2;
+}
+@media (min-width: 1200px) {
+  .display-3 {
+    font-size: 4rem;
+  }
+}
+
+.display-4 {
+  font-size: calc(1.475rem + 2.7vw);
+  font-weight: 300;
+  line-height: 1.2;
+}
+@media (min-width: 1200px) {
+  .display-4 {
+    font-size: 3.5rem;
+  }
+}
+
+.display-5 {
+  font-size: calc(1.425rem + 2.1vw);
+  font-weight: 300;
+  line-height: 1.2;
+}
+@media (min-width: 1200px) {
+  .display-5 {
+    font-size: 3rem;
+  }
+}
+
+.display-6 {
+  font-size: calc(1.375rem + 1.5vw);
+  font-weight: 300;
+  line-height: 1.2;
+}
+@media (min-width: 1200px) {
+  .display-6 {
+    font-size: 2.5rem;
+  }
+}
+
+.list-unstyled {
+  padding-left: 0;
+  list-style: none;
+}
+
+.list-inline {
+  padding-left: 0;
+  list-style: none;
+}
+
+.list-inline-item {
+  display: inline-block;
+}
+.list-inline-item:not(:last-child) {
+  margin-right: 0.5rem;
+}
+
+.initialism {
+  font-size: 0.875em;
+  text-transform: uppercase;
+}
+
+.blockquote {
+  margin-bottom: 1rem;
+  font-size: 1.25rem;
+}
+.blockquote > :last-child {
+  margin-bottom: 0;
+}
+
+.blockquote-footer {
+  margin-top: -1rem;
+  margin-bottom: 1rem;
+  font-size: 0.875em;
+  color: #6c757d;
+}
+.blockquote-footer::before {
+  content: "— ";
+}
+
+.img-fluid {
+  max-width: 100%;
+  height: auto;
+}
+
+.img-thumbnail {
+  padding: 0.25rem;
+  background-color: #fff;
+  border: 1px solid var(--bs-border-color);
+  border-radius: 0.375rem;
+  max-width: 100%;
+  height: auto;
+}
+
+.figure {
+  display: inline-block;
+}
+
+.figure-img {
+  margin-bottom: 0.5rem;
+  line-height: 1;
+}
+
+.figure-caption {
+  font-size: 0.875em;
+  color: #6c757d;
+}
+
+.container,
+.container-fluid,
+.container-xxl,
+.container-xl,
+.container-lg,
+.container-md,
+.container-sm {
+  --bs-gutter-x: 1.5rem;
+  --bs-gutter-y: 0;
+  width: 100%;
+  padding-right: calc(var(--bs-gutter-x) * 0.5);
+  padding-left: calc(var(--bs-gutter-x) * 0.5);
+  margin-right: auto;
+  margin-left: auto;
+}
+
+@media (min-width: 576px) {
+  .container-sm, .container {
+    max-width: 540px;
+  }
+}
+@media (min-width: 768px) {
+  .container-md, .container-sm, .container {
+    max-width: 720px;
+  }
+}
+@media (min-width: 992px) {
+  .container-lg, .container-md, .container-sm, .container {
+    max-width: 960px;
+  }
+}
+@media (min-width: 1200px) {
+  .container-xl, .container-lg, .container-md, .container-sm, .container {
+    max-width: 1140px;
+  }
+}
+@media (min-width: 1400px) {
+  .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {
+    max-width: 1320px;
+  }
+}
+.row {
+  --bs-gutter-x: 1.5rem;
+  --bs-gutter-y: 0;
+  display: flex;
+  flex-wrap: wrap;
+  margin-top: calc(-1 * var(--bs-gutter-y));
+  margin-right: calc(-0.5 * var(--bs-gutter-x));
+  margin-left: calc(-0.5 * var(--bs-gutter-x));
+}
+.row > * {
+  flex-shrink: 0;
+  width: 100%;
+  max-width: 100%;
+  padding-right: calc(var(--bs-gutter-x) * 0.5);
+  padding-left: calc(var(--bs-gutter-x) * 0.5);
+  margin-top: var(--bs-gutter-y);
+}
+
+.col {
+  flex: 1 0 0%;
+}
+
+.row-cols-auto > * {
+  flex: 0 0 auto;
+  width: auto;
+}
+
+.row-cols-1 > * {
+  flex: 0 0 auto;
+  width: 100%;
+}
+
+.row-cols-2 > * {
+  flex: 0 0 auto;
+  width: 50%;
+}
+
+.row-cols-3 > * {
+  flex: 0 0 auto;
+  width: 33.3333333333%;
+}
+
+.row-cols-4 > * {
+  flex: 0 0 auto;
+  width: 25%;
+}
+
+.row-cols-5 > * {
+  flex: 0 0 auto;
+  width: 20%;
+}
+
+.row-cols-6 > * {
+  flex: 0 0 auto;
+  width: 16.6666666667%;
+}
+
+.col-auto {
+  flex: 0 0 auto;
+  width: auto;
+}
+
+.col-1 {
+  flex: 0 0 auto;
+  width: 8.33333333%;
+}
+
+.col-2 {
+  flex: 0 0 auto;
+  width: 16.66666667%;
+}
+
+.col-3 {
+  flex: 0 0 auto;
+  width: 25%;
+}
+
+.col-4 {
+  flex: 0 0 auto;
+  width: 33.33333333%;
+}
+
+.col-5 {
+  flex: 0 0 auto;
+  width: 41.66666667%;
+}
+
+.col-6 {
+  flex: 0 0 auto;
+  width: 50%;
+}
+
+.col-7 {
+  flex: 0 0 auto;
+  width: 58.33333333%;
+}
+
+.col-8 {
+  flex: 0 0 auto;
+  width: 66.66666667%;
+}
+
+.col-9 {
+  flex: 0 0 auto;
+  width: 75%;
+}
+
+.col-10 {
+  flex: 0 0 auto;
+  width: 83.33333333%;
+}
+
+.col-11 {
+  flex: 0 0 auto;
+  width: 91.66666667%;
+}
+
+.col-12 {
+  flex: 0 0 auto;
+  width: 100%;
+}
+
+.offset-1 {
+  margin-left: 8.33333333%;
+}
+
+.offset-2 {
+  margin-left: 16.66666667%;
+}
+
+.offset-3 {
+  margin-left: 25%;
+}
+
+.offset-4 {
+  margin-left: 33.33333333%;
+}
+
+.offset-5 {
+  margin-left: 41.66666667%;
+}
+
+.offset-6 {
+  margin-left: 50%;
+}
+
+.offset-7 {
+  margin-left: 58.33333333%;
+}
+
+.offset-8 {
+  margin-left: 66.66666667%;
+}
+
+.offset-9 {
+  margin-left: 75%;
+}
+
+.offset-10 {
+  margin-left: 83.33333333%;
+}
+
+.offset-11 {
+  margin-left: 91.66666667%;
+}
+
+.g-0,
+.gx-0 {
+  --bs-gutter-x: 0;
+}
+
+.g-0,
+.gy-0 {
+  --bs-gutter-y: 0;
+}
+
+.g-1,
+.gx-1 {
+  --bs-gutter-x: 0.25rem;
+}
+
+.g-1,
+.gy-1 {
+  --bs-gutter-y: 0.25rem;
+}
+
+.g-2,
+.gx-2 {
+  --bs-gutter-x: 0.5rem;
+}
+
+.g-2,
+.gy-2 {
+  --bs-gutter-y: 0.5rem;
+}
+
+.g-3,
+.gx-3 {
+  --bs-gutter-x: 1rem;
+}
+
+.g-3,
+.gy-3 {
+  --bs-gutter-y: 1rem;
+}
+
+.g-4,
+.gx-4 {
+  --bs-gutter-x: 1.5rem;
+}
+
+.g-4,
+.gy-4 {
+  --bs-gutter-y: 1.5rem;
+}
+
+.g-5,
+.gx-5 {
+  --bs-gutter-x: 3rem;
+}
+
+.g-5,
+.gy-5 {
+  --bs-gutter-y: 3rem;
+}
+
+@media (min-width: 576px) {
+  .col-sm {
+    flex: 1 0 0%;
+  }
+  .row-cols-sm-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-sm-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-sm-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-sm-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-sm-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-sm-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-sm-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-sm-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-sm-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-sm-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-sm-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-sm-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-sm-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-sm-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-sm-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-sm-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-sm-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-sm-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-sm-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-sm-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-sm-0 {
+    margin-left: 0;
+  }
+  .offset-sm-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-sm-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-sm-3 {
+    margin-left: 25%;
+  }
+  .offset-sm-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-sm-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-sm-6 {
+    margin-left: 50%;
+  }
+  .offset-sm-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-sm-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-sm-9 {
+    margin-left: 75%;
+  }
+  .offset-sm-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-sm-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-sm-0,
+  .gx-sm-0 {
+    --bs-gutter-x: 0;
+  }
+  .g-sm-0,
+  .gy-sm-0 {
+    --bs-gutter-y: 0;
+  }
+  .g-sm-1,
+  .gx-sm-1 {
+    --bs-gutter-x: 0.25rem;
+  }
+  .g-sm-1,
+  .gy-sm-1 {
+    --bs-gutter-y: 0.25rem;
+  }
+  .g-sm-2,
+  .gx-sm-2 {
+    --bs-gutter-x: 0.5rem;
+  }
+  .g-sm-2,
+  .gy-sm-2 {
+    --bs-gutter-y: 0.5rem;
+  }
+  .g-sm-3,
+  .gx-sm-3 {
+    --bs-gutter-x: 1rem;
+  }
+  .g-sm-3,
+  .gy-sm-3 {
+    --bs-gutter-y: 1rem;
+  }
+  .g-sm-4,
+  .gx-sm-4 {
+    --bs-gutter-x: 1.5rem;
+  }
+  .g-sm-4,
+  .gy-sm-4 {
+    --bs-gutter-y: 1.5rem;
+  }
+  .g-sm-5,
+  .gx-sm-5 {
+    --bs-gutter-x: 3rem;
+  }
+  .g-sm-5,
+  .gy-sm-5 {
+    --bs-gutter-y: 3rem;
+  }
+}
+@media (min-width: 768px) {
+  .col-md {
+    flex: 1 0 0%;
+  }
+  .row-cols-md-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-md-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-md-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-md-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-md-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-md-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-md-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-md-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-md-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-md-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-md-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-md-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-md-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-md-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-md-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-md-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-md-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-md-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-md-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-md-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-md-0 {
+    margin-left: 0;
+  }
+  .offset-md-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-md-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-md-3 {
+    margin-left: 25%;
+  }
+  .offset-md-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-md-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-md-6 {
+    margin-left: 50%;
+  }
+  .offset-md-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-md-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-md-9 {
+    margin-left: 75%;
+  }
+  .offset-md-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-md-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-md-0,
+  .gx-md-0 {
+    --bs-gutter-x: 0;
+  }
+  .g-md-0,
+  .gy-md-0 {
+    --bs-gutter-y: 0;
+  }
+  .g-md-1,
+  .gx-md-1 {
+    --bs-gutter-x: 0.25rem;
+  }
+  .g-md-1,
+  .gy-md-1 {
+    --bs-gutter-y: 0.25rem;
+  }
+  .g-md-2,
+  .gx-md-2 {
+    --bs-gutter-x: 0.5rem;
+  }
+  .g-md-2,
+  .gy-md-2 {
+    --bs-gutter-y: 0.5rem;
+  }
+  .g-md-3,
+  .gx-md-3 {
+    --bs-gutter-x: 1rem;
+  }
+  .g-md-3,
+  .gy-md-3 {
+    --bs-gutter-y: 1rem;
+  }
+  .g-md-4,
+  .gx-md-4 {
+    --bs-gutter-x: 1.5rem;
+  }
+  .g-md-4,
+  .gy-md-4 {
+    --bs-gutter-y: 1.5rem;
+  }
+  .g-md-5,
+  .gx-md-5 {
+    --bs-gutter-x: 3rem;
+  }
+  .g-md-5,
+  .gy-md-5 {
+    --bs-gutter-y: 3rem;
+  }
+}
+@media (min-width: 992px) {
+  .col-lg {
+    flex: 1 0 0%;
+  }
+  .row-cols-lg-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-lg-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-lg-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-lg-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-lg-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-lg-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-lg-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-lg-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-lg-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-lg-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-lg-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-lg-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-lg-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-lg-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-lg-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-lg-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-lg-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-lg-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-lg-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-lg-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-lg-0 {
+    margin-left: 0;
+  }
+  .offset-lg-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-lg-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-lg-3 {
+    margin-left: 25%;
+  }
+  .offset-lg-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-lg-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-lg-6 {
+    margin-left: 50%;
+  }
+  .offset-lg-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-lg-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-lg-9 {
+    margin-left: 75%;
+  }
+  .offset-lg-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-lg-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-lg-0,
+  .gx-lg-0 {
+    --bs-gutter-x: 0;
+  }
+  .g-lg-0,
+  .gy-lg-0 {
+    --bs-gutter-y: 0;
+  }
+  .g-lg-1,
+  .gx-lg-1 {
+    --bs-gutter-x: 0.25rem;
+  }
+  .g-lg-1,
+  .gy-lg-1 {
+    --bs-gutter-y: 0.25rem;
+  }
+  .g-lg-2,
+  .gx-lg-2 {
+    --bs-gutter-x: 0.5rem;
+  }
+  .g-lg-2,
+  .gy-lg-2 {
+    --bs-gutter-y: 0.5rem;
+  }
+  .g-lg-3,
+  .gx-lg-3 {
+    --bs-gutter-x: 1rem;
+  }
+  .g-lg-3,
+  .gy-lg-3 {
+    --bs-gutter-y: 1rem;
+  }
+  .g-lg-4,
+  .gx-lg-4 {
+    --bs-gutter-x: 1.5rem;
+  }
+  .g-lg-4,
+  .gy-lg-4 {
+    --bs-gutter-y: 1.5rem;
+  }
+  .g-lg-5,
+  .gx-lg-5 {
+    --bs-gutter-x: 3rem;
+  }
+  .g-lg-5,
+  .gy-lg-5 {
+    --bs-gutter-y: 3rem;
+  }
+}
+@media (min-width: 1200px) {
+  .col-xl {
+    flex: 1 0 0%;
+  }
+  .row-cols-xl-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-xl-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-xl-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-xl-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-xl-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-xl-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-xl-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-xl-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-xl-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-xl-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-xl-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-xl-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-xl-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-xl-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-xl-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-xl-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-xl-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-xl-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-xl-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-xl-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-xl-0 {
+    margin-left: 0;
+  }
+  .offset-xl-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-xl-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-xl-3 {
+    margin-left: 25%;
+  }
+  .offset-xl-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-xl-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-xl-6 {
+    margin-left: 50%;
+  }
+  .offset-xl-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-xl-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-xl-9 {
+    margin-left: 75%;
+  }
+  .offset-xl-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-xl-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-xl-0,
+  .gx-xl-0 {
+    --bs-gutter-x: 0;
+  }
+  .g-xl-0,
+  .gy-xl-0 {
+    --bs-gutter-y: 0;
+  }
+  .g-xl-1,
+  .gx-xl-1 {
+    --bs-gutter-x: 0.25rem;
+  }
+  .g-xl-1,
+  .gy-xl-1 {
+    --bs-gutter-y: 0.25rem;
+  }
+  .g-xl-2,
+  .gx-xl-2 {
+    --bs-gutter-x: 0.5rem;
+  }
+  .g-xl-2,
+  .gy-xl-2 {
+    --bs-gutter-y: 0.5rem;
+  }
+  .g-xl-3,
+  .gx-xl-3 {
+    --bs-gutter-x: 1rem;
+  }
+  .g-xl-3,
+  .gy-xl-3 {
+    --bs-gutter-y: 1rem;
+  }
+  .g-xl-4,
+  .gx-xl-4 {
+    --bs-gutter-x: 1.5rem;
+  }
+  .g-xl-4,
+  .gy-xl-4 {
+    --bs-gutter-y: 1.5rem;
+  }
+  .g-xl-5,
+  .gx-xl-5 {
+    --bs-gutter-x: 3rem;
+  }
+  .g-xl-5,
+  .gy-xl-5 {
+    --bs-gutter-y: 3rem;
+  }
+}
+@media (min-width: 1400px) {
+  .col-xxl {
+    flex: 1 0 0%;
+  }
+  .row-cols-xxl-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-xxl-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-xxl-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-xxl-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-xxl-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-xxl-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-xxl-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-xxl-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-xxl-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-xxl-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-xxl-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-xxl-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-xxl-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-xxl-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-xxl-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-xxl-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-xxl-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-xxl-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-xxl-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-xxl-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-xxl-0 {
+    margin-left: 0;
+  }
+  .offset-xxl-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-xxl-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-xxl-3 {
+    margin-left: 25%;
+  }
+  .offset-xxl-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-xxl-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-xxl-6 {
+    margin-left: 50%;
+  }
+  .offset-xxl-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-xxl-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-xxl-9 {
+    margin-left: 75%;
+  }
+  .offset-xxl-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-xxl-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-xxl-0,
+  .gx-xxl-0 {
+    --bs-gutter-x: 0;
+  }
+  .g-xxl-0,
+  .gy-xxl-0 {
+    --bs-gutter-y: 0;
+  }
+  .g-xxl-1,
+  .gx-xxl-1 {
+    --bs-gutter-x: 0.25rem;
+  }
+  .g-xxl-1,
+  .gy-xxl-1 {
+    --bs-gutter-y: 0.25rem;
+  }
+  .g-xxl-2,
+  .gx-xxl-2 {
+    --bs-gutter-x: 0.5rem;
+  }
+  .g-xxl-2,
+  .gy-xxl-2 {
+    --bs-gutter-y: 0.5rem;
+  }
+  .g-xxl-3,
+  .gx-xxl-3 {
+    --bs-gutter-x: 1rem;
+  }
+  .g-xxl-3,
+  .gy-xxl-3 {
+    --bs-gutter-y: 1rem;
+  }
+  .g-xxl-4,
+  .gx-xxl-4 {
+    --bs-gutter-x: 1.5rem;
+  }
+  .g-xxl-4,
+  .gy-xxl-4 {
+    --bs-gutter-y: 1.5rem;
+  }
+  .g-xxl-5,
+  .gx-xxl-5 {
+    --bs-gutter-x: 3rem;
+  }
+  .g-xxl-5,
+  .gy-xxl-5 {
+    --bs-gutter-y: 3rem;
+  }
+}
+.table {
+  --bs-table-color: var(--bs-body-color);
+  --bs-table-bg: transparent;
+  --bs-table-border-color: var(--bs-border-color);
+  --bs-table-accent-bg: transparent;
+  --bs-table-striped-color: var(--bs-body-color);
+  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);
+  --bs-table-active-color: var(--bs-body-color);
+  --bs-table-active-bg: rgba(0, 0, 0, 0.1);
+  --bs-table-hover-color: var(--bs-body-color);
+  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);
+  width: 100%;
+  margin-bottom: 1rem;
+  color: var(--bs-table-color);
+  vertical-align: top;
+  border-color: var(--bs-table-border-color);
+}
+.table > :not(caption) > * > * {
+  padding: 0.5rem 0.5rem;
+  background-color: var(--bs-table-bg);
+  border-bottom-width: 1px;
+  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);
+}
+.table > tbody {
+  vertical-align: inherit;
+}
+.table > thead {
+  vertical-align: bottom;
+}
+
+.table-group-divider {
+  border-top: 2px solid currentcolor;
+}
+
+.caption-top {
+  caption-side: top;
+}
+
+.table-sm > :not(caption) > * > * {
+  padding: 0.25rem 0.25rem;
+}
+
+.table-bordered > :not(caption) > * {
+  border-width: 1px 0;
+}
+.table-bordered > :not(caption) > * > * {
+  border-width: 0 1px;
+}
+
+.table-borderless > :not(caption) > * > * {
+  border-bottom-width: 0;
+}
+.table-borderless > :not(:first-child) {
+  border-top-width: 0;
+}
+
+.table-striped > tbody > tr:nth-of-type(odd) > * {
+  --bs-table-accent-bg: var(--bs-table-striped-bg);
+  color: var(--bs-table-striped-color);
+}
+
+.table-striped-columns > :not(caption) > tr > :nth-child(even) {
+  --bs-table-accent-bg: var(--bs-table-striped-bg);
+  color: var(--bs-table-striped-color);
+}
+
+.table-active {
+  --bs-table-accent-bg: var(--bs-table-active-bg);
+  color: var(--bs-table-active-color);
+}
+
+.table-hover > tbody > tr:hover > * {
+  --bs-table-accent-bg: var(--bs-table-hover-bg);
+  color: var(--bs-table-hover-color);
+}
+
+.table-primary {
+  --bs-table-color: #000;
+  --bs-table-bg: #cfe2ff;
+  --bs-table-border-color: #bacbe6;
+  --bs-table-striped-bg: #c5d7f2;
+  --bs-table-striped-color: #000;
+  --bs-table-active-bg: #bacbe6;
+  --bs-table-active-color: #000;
+  --bs-table-hover-bg: #bfd1ec;
+  --bs-table-hover-color: #000;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-secondary {
+  --bs-table-color: #000;
+  --bs-table-bg: #e2e3e5;
+  --bs-table-border-color: #cbccce;
+  --bs-table-striped-bg: #d7d8da;
+  --bs-table-striped-color: #000;
+  --bs-table-active-bg: #cbccce;
+  --bs-table-active-color: #000;
+  --bs-table-hover-bg: #d1d2d4;
+  --bs-table-hover-color: #000;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-success {
+  --bs-table-color: #000;
+  --bs-table-bg: #d1e7dd;
+  --bs-table-border-color: #bcd0c7;
+  --bs-table-striped-bg: #c7dbd2;
+  --bs-table-striped-color: #000;
+  --bs-table-active-bg: #bcd0c7;
+  --bs-table-active-color: #000;
+  --bs-table-hover-bg: #c1d6cc;
+  --bs-table-hover-color: #000;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-info {
+  --bs-table-color: #000;
+  --bs-table-bg: #cff4fc;
+  --bs-table-border-color: #badce3;
+  --bs-table-striped-bg: #c5e8ef;
+  --bs-table-striped-color: #000;
+  --bs-table-active-bg: #badce3;
+  --bs-table-active-color: #000;
+  --bs-table-hover-bg: #bfe2e9;
+  --bs-table-hover-color: #000;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-warning {
+  --bs-table-color: #000;
+  --bs-table-bg: #fff3cd;
+  --bs-table-border-color: #e6dbb9;
+  --bs-table-striped-bg: #f2e7c3;
+  --bs-table-striped-color: #000;
+  --bs-table-active-bg: #e6dbb9;
+  --bs-table-active-color: #000;
+  --bs-table-hover-bg: #ece1be;
+  --bs-table-hover-color: #000;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-danger {
+  --bs-table-color: #000;
+  --bs-table-bg: #f8d7da;
+  --bs-table-border-color: #dfc2c4;
+  --bs-table-striped-bg: #eccccf;
+  --bs-table-striped-color: #000;
+  --bs-table-active-bg: #dfc2c4;
+  --bs-table-active-color: #000;
+  --bs-table-hover-bg: #e5c7ca;
+  --bs-table-hover-color: #000;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-light {
+  --bs-table-color: #000;
+  --bs-table-bg: #f8f9fa;
+  --bs-table-border-color: #dfe0e1;
+  --bs-table-striped-bg: #ecedee;
+  --bs-table-striped-color: #000;
+  --bs-table-active-bg: #dfe0e1;
+  --bs-table-active-color: #000;
+  --bs-table-hover-bg: #e5e6e7;
+  --bs-table-hover-color: #000;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-dark {
+  --bs-table-color: #fff;
+  --bs-table-bg: #212529;
+  --bs-table-border-color: #373b3e;
+  --bs-table-striped-bg: #2c3034;
+  --bs-table-striped-color: #fff;
+  --bs-table-active-bg: #373b3e;
+  --bs-table-active-color: #fff;
+  --bs-table-hover-bg: #323539;
+  --bs-table-hover-color: #fff;
+  color: var(--bs-table-color);
+  border-color: var(--bs-table-border-color);
+}
+
+.table-responsive {
+  overflow-x: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+@media (max-width: 575.98px) {
+  .table-responsive-sm {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 767.98px) {
+  .table-responsive-md {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 991.98px) {
+  .table-responsive-lg {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 1199.98px) {
+  .table-responsive-xl {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 1399.98px) {
+  .table-responsive-xxl {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+.form-label {
+  margin-bottom: 0.5rem;
+}
+
+.col-form-label {
+  padding-top: calc(0.375rem + 1px);
+  padding-bottom: calc(0.375rem + 1px);
+  margin-bottom: 0;
+  font-size: inherit;
+  line-height: 1.5;
+}
+
+.col-form-label-lg {
+  padding-top: calc(0.5rem + 1px);
+  padding-bottom: calc(0.5rem + 1px);
+  font-size: 1.25rem;
+}
+
+.col-form-label-sm {
+  padding-top: calc(0.25rem + 1px);
+  padding-bottom: calc(0.25rem + 1px);
+  font-size: 0.875rem;
+}
+
+.form-text {
+  margin-top: 0.25rem;
+  font-size: 0.875em;
+  color: #6c757d;
+}
+
+.form-control {
+  display: block;
+  width: 100%;
+  padding: 0.375rem 0.75rem;
+  font-size: 1rem;
+  font-weight: 400;
+  line-height: 1.5;
+  color: #212529;
+  background-color: #fff;
+  background-clip: padding-box;
+  border: 1px solid #ced4da;
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+  border-radius: 0.375rem;
+  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-control {
+    transition: none;
+  }
+}
+.form-control[type=file] {
+  overflow: hidden;
+}
+.form-control[type=file]:not(:disabled):not([readonly]) {
+  cursor: pointer;
+}
+.form-control:focus {
+  color: #212529;
+  background-color: #fff;
+  border-color: #86b7fe;
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+}
+.form-control::-webkit-date-and-time-value {
+  height: 1.5em;
+}
+.form-control::-moz-placeholder {
+  color: #6c757d;
+  opacity: 1;
+}
+.form-control::placeholder {
+  color: #6c757d;
+  opacity: 1;
+}
+.form-control:disabled {
+  background-color: #e9ecef;
+  opacity: 1;
+}
+.form-control::file-selector-button {
+  padding: 0.375rem 0.75rem;
+  margin: -0.375rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+          margin-inline-end: 0.75rem;
+  color: #212529;
+  background-color: #e9ecef;
+  pointer-events: none;
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+  border-inline-end-width: 1px;
+  border-radius: 0;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-control::file-selector-button {
+    transition: none;
+  }
+}
+.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
+  background-color: #dde0e3;
+}
+
+.form-control-plaintext {
+  display: block;
+  width: 100%;
+  padding: 0.375rem 0;
+  margin-bottom: 0;
+  line-height: 1.5;
+  color: #212529;
+  background-color: transparent;
+  border: solid transparent;
+  border-width: 1px 0;
+}
+.form-control-plaintext:focus {
+  outline: 0;
+}
+.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {
+  padding-right: 0;
+  padding-left: 0;
+}
+
+.form-control-sm {
+  min-height: calc(1.5em + 0.5rem + 2px);
+  padding: 0.25rem 0.5rem;
+  font-size: 0.875rem;
+  border-radius: 0.25rem;
+}
+.form-control-sm::file-selector-button {
+  padding: 0.25rem 0.5rem;
+  margin: -0.25rem -0.5rem;
+  -webkit-margin-end: 0.5rem;
+          margin-inline-end: 0.5rem;
+}
+
+.form-control-lg {
+  min-height: calc(1.5em + 1rem + 2px);
+  padding: 0.5rem 1rem;
+  font-size: 1.25rem;
+  border-radius: 0.5rem;
+}
+.form-control-lg::file-selector-button {
+  padding: 0.5rem 1rem;
+  margin: -0.5rem -1rem;
+  -webkit-margin-end: 1rem;
+          margin-inline-end: 1rem;
+}
+
+textarea.form-control {
+  min-height: calc(1.5em + 0.75rem + 2px);
+}
+textarea.form-control-sm {
+  min-height: calc(1.5em + 0.5rem + 2px);
+}
+textarea.form-control-lg {
+  min-height: calc(1.5em + 1rem + 2px);
+}
+
+.form-control-color {
+  width: 3rem;
+  height: calc(1.5em + 0.75rem + 2px);
+  padding: 0.375rem;
+}
+.form-control-color:not(:disabled):not([readonly]) {
+  cursor: pointer;
+}
+.form-control-color::-moz-color-swatch {
+  border: 0 !important;
+  border-radius: 0.375rem;
+}
+.form-control-color::-webkit-color-swatch {
+  border-radius: 0.375rem;
+}
+.form-control-color.form-control-sm {
+  height: calc(1.5em + 0.5rem + 2px);
+}
+.form-control-color.form-control-lg {
+  height: calc(1.5em + 1rem + 2px);
+}
+
+.form-select {
+  display: block;
+  width: 100%;
+  padding: 0.375rem 2.25rem 0.375rem 0.75rem;
+  -moz-padding-start: calc(0.75rem - 3px);
+  font-size: 1rem;
+  font-weight: 400;
+  line-height: 1.5;
+  color: #212529;
+  background-color: #fff;
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
+  background-repeat: no-repeat;
+  background-position: right 0.75rem center;
+  background-size: 16px 12px;
+  border: 1px solid #ced4da;
+  border-radius: 0.375rem;
+  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-select {
+    transition: none;
+  }
+}
+.form-select:focus {
+  border-color: #86b7fe;
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+}
+.form-select[multiple], .form-select[size]:not([size="1"]) {
+  padding-right: 0.75rem;
+  background-image: none;
+}
+.form-select:disabled {
+  background-color: #e9ecef;
+}
+.form-select:-moz-focusring {
+  color: transparent;
+  text-shadow: 0 0 0 #212529;
+}
+
+.form-select-sm {
+  padding-top: 0.25rem;
+  padding-bottom: 0.25rem;
+  padding-left: 0.5rem;
+  font-size: 0.875rem;
+  border-radius: 0.25rem;
+}
+
+.form-select-lg {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+  padding-left: 1rem;
+  font-size: 1.25rem;
+  border-radius: 0.5rem;
+}
+
+.form-check {
+  display: block;
+  min-height: 1.5rem;
+  padding-left: 1.5em;
+  margin-bottom: 0.125rem;
+}
+.form-check .form-check-input {
+  float: left;
+  margin-left: -1.5em;
+}
+
+.form-check-reverse {
+  padding-right: 1.5em;
+  padding-left: 0;
+  text-align: right;
+}
+.form-check-reverse .form-check-input {
+  float: right;
+  margin-right: -1.5em;
+  margin-left: 0;
+}
+
+.form-check-input {
+  width: 1em;
+  height: 1em;
+  margin-top: 0.25em;
+  vertical-align: top;
+  background-color: #fff;
+  background-repeat: no-repeat;
+  background-position: center;
+  background-size: contain;
+  border: 1px solid rgba(0, 0, 0, 0.25);
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+  -webkit-print-color-adjust: exact;
+          print-color-adjust: exact;
+}
+.form-check-input[type=checkbox] {
+  border-radius: 0.25em;
+}
+.form-check-input[type=radio] {
+  border-radius: 50%;
+}
+.form-check-input:active {
+  filter: brightness(90%);
+}
+.form-check-input:focus {
+  border-color: #86b7fe;
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+}
+.form-check-input:checked {
+  background-color: #0d6efd;
+  border-color: #0d6efd;
+}
+.form-check-input:checked[type=checkbox] {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");
+}
+.form-check-input:checked[type=radio] {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e");
+}
+.form-check-input[type=checkbox]:indeterminate {
+  background-color: #0d6efd;
+  border-color: #0d6efd;
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e");
+}
+.form-check-input:disabled {
+  pointer-events: none;
+  filter: none;
+  opacity: 0.5;
+}
+.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {
+  cursor: default;
+  opacity: 0.5;
+}
+
+.form-switch {
+  padding-left: 2.5em;
+}
+.form-switch .form-check-input {
+  width: 2em;
+  margin-left: -2.5em;
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");
+  background-position: left center;
+  border-radius: 2em;
+  transition: background-position 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-switch .form-check-input {
+    transition: none;
+  }
+}
+.form-switch .form-check-input:focus {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e");
+}
+.form-switch .form-check-input:checked {
+  background-position: right center;
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e");
+}
+.form-switch.form-check-reverse {
+  padding-right: 2.5em;
+  padding-left: 0;
+}
+.form-switch.form-check-reverse .form-check-input {
+  margin-right: -2.5em;
+  margin-left: 0;
+}
+
+.form-check-inline {
+  display: inline-block;
+  margin-right: 1rem;
+}
+
+.btn-check {
+  position: absolute;
+  clip: rect(0, 0, 0, 0);
+  pointer-events: none;
+}
+.btn-check[disabled] + .btn, .btn-check:disabled + .btn {
+  pointer-events: none;
+  filter: none;
+  opacity: 0.65;
+}
+
+.form-range {
+  width: 100%;
+  height: 1.5rem;
+  padding: 0;
+  background-color: transparent;
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+}
+.form-range:focus {
+  outline: 0;
+}
+.form-range:focus::-webkit-slider-thumb {
+  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+}
+.form-range:focus::-moz-range-thumb {
+  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+}
+.form-range::-moz-focus-outer {
+  border: 0;
+}
+.form-range::-webkit-slider-thumb {
+  width: 1rem;
+  height: 1rem;
+  margin-top: -0.25rem;
+  background-color: #0d6efd;
+  border: 0;
+  border-radius: 1rem;
+  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  -webkit-appearance: none;
+          appearance: none;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-range::-webkit-slider-thumb {
+    -webkit-transition: none;
+    transition: none;
+  }
+}
+.form-range::-webkit-slider-thumb:active {
+  background-color: #b6d4fe;
+}
+.form-range::-webkit-slider-runnable-track {
+  width: 100%;
+  height: 0.5rem;
+  color: transparent;
+  cursor: pointer;
+  background-color: #dee2e6;
+  border-color: transparent;
+  border-radius: 1rem;
+}
+.form-range::-moz-range-thumb {
+  width: 1rem;
+  height: 1rem;
+  background-color: #0d6efd;
+  border: 0;
+  border-radius: 1rem;
+  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  -moz-appearance: none;
+       appearance: none;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-range::-moz-range-thumb {
+    -moz-transition: none;
+    transition: none;
+  }
+}
+.form-range::-moz-range-thumb:active {
+  background-color: #b6d4fe;
+}
+.form-range::-moz-range-track {
+  width: 100%;
+  height: 0.5rem;
+  color: transparent;
+  cursor: pointer;
+  background-color: #dee2e6;
+  border-color: transparent;
+  border-radius: 1rem;
+}
+.form-range:disabled {
+  pointer-events: none;
+}
+.form-range:disabled::-webkit-slider-thumb {
+  background-color: #adb5bd;
+}
+.form-range:disabled::-moz-range-thumb {
+  background-color: #adb5bd;
+}
+
+.form-floating {
+  position: relative;
+}
+.form-floating > .form-control,
+.form-floating > .form-control-plaintext,
+.form-floating > .form-select {
+  height: calc(3.5rem + 2px);
+  line-height: 1.25;
+}
+.form-floating > label {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  padding: 1rem 0.75rem;
+  overflow: hidden;
+  text-align: start;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  pointer-events: none;
+  border: 1px solid transparent;
+  transform-origin: 0 0;
+  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-floating > label {
+    transition: none;
+  }
+}
+.form-floating > .form-control,
+.form-floating > .form-control-plaintext {
+  padding: 1rem 0.75rem;
+}
+.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder {
+  color: transparent;
+}
+.form-floating > .form-control::placeholder,
+.form-floating > .form-control-plaintext::placeholder {
+  color: transparent;
+}
+.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),
+.form-floating > .form-control-plaintext:focus,
+.form-floating > .form-control-plaintext:not(:placeholder-shown) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-control:-webkit-autofill,
+.form-floating > .form-control-plaintext:-webkit-autofill {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-select {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+.form-floating > .form-control:focus ~ label,
+.form-floating > .form-control:not(:placeholder-shown) ~ label,
+.form-floating > .form-control-plaintext ~ label,
+.form-floating > .form-select ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+.form-floating > .form-control:-webkit-autofill ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+.form-floating > .form-control-plaintext ~ label {
+  border-width: 1px 0;
+}
+
+.input-group {
+  position: relative;
+  display: flex;
+  flex-wrap: wrap;
+  align-items: stretch;
+  width: 100%;
+}
+.input-group > .form-control,
+.input-group > .form-select,
+.input-group > .form-floating {
+  position: relative;
+  flex: 1 1 auto;
+  width: 1%;
+  min-width: 0;
+}
+.input-group > .form-control:focus,
+.input-group > .form-select:focus,
+.input-group > .form-floating:focus-within {
+  z-index: 5;
+}
+.input-group .btn {
+  position: relative;
+  z-index: 2;
+}
+.input-group .btn:focus {
+  z-index: 5;
+}
+
+.input-group-text {
+  display: flex;
+  align-items: center;
+  padding: 0.375rem 0.75rem;
+  font-size: 1rem;
+  font-weight: 400;
+  line-height: 1.5;
+  color: #212529;
+  text-align: center;
+  white-space: nowrap;
+  background-color: #e9ecef;
+  border: 1px solid #ced4da;
+  border-radius: 0.375rem;
+}
+
+.input-group-lg > .form-control,
+.input-group-lg > .form-select,
+.input-group-lg > .input-group-text,
+.input-group-lg > .btn {
+  padding: 0.5rem 1rem;
+  font-size: 1.25rem;
+  border-radius: 0.5rem;
+}
+
+.input-group-sm > .form-control,
+.input-group-sm > .form-select,
+.input-group-sm > .input-group-text,
+.input-group-sm > .btn {
+  padding: 0.25rem 0.5rem;
+  font-size: 0.875rem;
+  border-radius: 0.25rem;
+}
+
+.input-group-lg > .form-select,
+.input-group-sm > .form-select {
+  padding-right: 3rem;
+}
+
+.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),
+.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),
+.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,
+.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),
+.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),
+.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,
+.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {
+  margin-left: -1px;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.input-group > .form-floating:not(:first-child) > .form-control,
+.input-group > .form-floating:not(:first-child) > .form-select {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.valid-feedback {
+  display: none;
+  width: 100%;
+  margin-top: 0.25rem;
+  font-size: 0.875em;
+  color: #198754;
+}
+
+.valid-tooltip {
+  position: absolute;
+  top: 100%;
+  z-index: 5;
+  display: none;
+  max-width: 100%;
+  padding: 0.25rem 0.5rem;
+  margin-top: 0.1rem;
+  font-size: 0.875rem;
+  color: #fff;
+  background-color: rgba(25, 135, 84, 0.9);
+  border-radius: 0.375rem;
+}
+
+.was-validated :valid ~ .valid-feedback,
+.was-validated :valid ~ .valid-tooltip,
+.is-valid ~ .valid-feedback,
+.is-valid ~ .valid-tooltip {
+  display: block;
+}
+
+.was-validated .form-control:valid, .form-control.is-valid {
+  border-color: #198754;
+  padding-right: calc(1.5em + 0.75rem);
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
+  background-repeat: no-repeat;
+  background-position: right calc(0.375em + 0.1875rem) center;
+  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+.was-validated .form-control:valid:focus, .form-control.is-valid:focus {
+  border-color: #198754;
+  box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+}
+
+.was-validated textarea.form-control:valid, textarea.form-control.is-valid {
+  padding-right: calc(1.5em + 0.75rem);
+  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
+}
+
+.was-validated .form-select:valid, .form-select.is-valid {
+  border-color: #198754;
+}
+.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] {
+  padding-right: 4.125rem;
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
+  background-position: right 0.75rem center, center right 2.25rem;
+  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+.was-validated .form-select:valid:focus, .form-select.is-valid:focus {
+  border-color: #198754;
+  box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+}
+
+.was-validated .form-control-color:valid, .form-control-color.is-valid {
+  width: calc(3rem + calc(1.5em + 0.75rem));
+}
+
+.was-validated .form-check-input:valid, .form-check-input.is-valid {
+  border-color: #198754;
+}
+.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {
+  background-color: #198754;
+}
+.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {
+  box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+}
+.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {
+  color: #198754;
+}
+
+.form-check-inline .form-check-input ~ .valid-feedback {
+  margin-left: 0.5em;
+}
+
+.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,
+.was-validated .input-group > .form-select:not(:focus):valid,
+.input-group > .form-select:not(:focus).is-valid,
+.was-validated .input-group > .form-floating:not(:focus-within):valid,
+.input-group > .form-floating:not(:focus-within).is-valid {
+  z-index: 3;
+}
+
+.invalid-feedback {
+  display: none;
+  width: 100%;
+  margin-top: 0.25rem;
+  font-size: 0.875em;
+  color: #dc3545;
+}
+
+.invalid-tooltip {
+  position: absolute;
+  top: 100%;
+  z-index: 5;
+  display: none;
+  max-width: 100%;
+  padding: 0.25rem 0.5rem;
+  margin-top: 0.1rem;
+  font-size: 0.875rem;
+  color: #fff;
+  background-color: rgba(220, 53, 69, 0.9);
+  border-radius: 0.375rem;
+}
+
+.was-validated :invalid ~ .invalid-feedback,
+.was-validated :invalid ~ .invalid-tooltip,
+.is-invalid ~ .invalid-feedback,
+.is-invalid ~ .invalid-tooltip {
+  display: block;
+}
+
+.was-validated .form-control:invalid, .form-control.is-invalid {
+  border-color: #dc3545;
+  padding-right: calc(1.5em + 0.75rem);
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
+  background-repeat: no-repeat;
+  background-position: right calc(0.375em + 0.1875rem) center;
+  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {
+  border-color: #dc3545;
+  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+}
+
+.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {
+  padding-right: calc(1.5em + 0.75rem);
+  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
+}
+
+.was-validated .form-select:invalid, .form-select.is-invalid {
+  border-color: #dc3545;
+}
+.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] {
+  padding-right: 4.125rem;
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
+  background-position: right 0.75rem center, center right 2.25rem;
+  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {
+  border-color: #dc3545;
+  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+}
+
+.was-validated .form-control-color:invalid, .form-control-color.is-invalid {
+  width: calc(3rem + calc(1.5em + 0.75rem));
+}
+
+.was-validated .form-check-input:invalid, .form-check-input.is-invalid {
+  border-color: #dc3545;
+}
+.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {
+  background-color: #dc3545;
+}
+.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {
+  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+}
+.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {
+  color: #dc3545;
+}
+
+.form-check-inline .form-check-input ~ .invalid-feedback {
+  margin-left: 0.5em;
+}
+
+.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,
+.was-validated .input-group > .form-select:not(:focus):invalid,
+.input-group > .form-select:not(:focus).is-invalid,
+.was-validated .input-group > .form-floating:not(:focus-within):invalid,
+.input-group > .form-floating:not(:focus-within).is-invalid {
+  z-index: 4;
+}
+
+.btn {
+  --bs-btn-padding-x: 0.75rem;
+  --bs-btn-padding-y: 0.375rem;
+  --bs-btn-font-family: ;
+  --bs-btn-font-size: 1rem;
+  --bs-btn-font-weight: 400;
+  --bs-btn-line-height: 1.5;
+  --bs-btn-color: #212529;
+  --bs-btn-bg: transparent;
+  --bs-btn-border-width: 1px;
+  --bs-btn-border-color: transparent;
+  --bs-btn-border-radius: 0.375rem;
+  --bs-btn-hover-border-color: transparent;
+  --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
+  --bs-btn-disabled-opacity: 0.65;
+  --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);
+  display: inline-block;
+  padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);
+  font-family: var(--bs-btn-font-family);
+  font-size: var(--bs-btn-font-size);
+  font-weight: var(--bs-btn-font-weight);
+  line-height: var(--bs-btn-line-height);
+  color: var(--bs-btn-color);
+  text-align: center;
+  text-decoration: none;
+  vertical-align: middle;
+  cursor: pointer;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+          user-select: none;
+  border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);
+  border-radius: var(--bs-btn-border-radius);
+  background-color: var(--bs-btn-bg);
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .btn {
+    transition: none;
+  }
+}
+.btn:hover {
+  color: var(--bs-btn-hover-color);
+  background-color: var(--bs-btn-hover-bg);
+  border-color: var(--bs-btn-hover-border-color);
+}
+.btn-check + .btn:hover {
+  color: var(--bs-btn-color);
+  background-color: var(--bs-btn-bg);
+  border-color: var(--bs-btn-border-color);
+}
+.btn:focus-visible {
+  color: var(--bs-btn-hover-color);
+  background-color: var(--bs-btn-hover-bg);
+  border-color: var(--bs-btn-hover-border-color);
+  outline: 0;
+  box-shadow: var(--bs-btn-focus-box-shadow);
+}
+.btn-check:focus-visible + .btn {
+  border-color: var(--bs-btn-hover-border-color);
+  outline: 0;
+  box-shadow: var(--bs-btn-focus-box-shadow);
+}
+.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {
+  color: var(--bs-btn-active-color);
+  background-color: var(--bs-btn-active-bg);
+  border-color: var(--bs-btn-active-border-color);
+}
+.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {
+  box-shadow: var(--bs-btn-focus-box-shadow);
+}
+.btn:disabled, .btn.disabled, fieldset:disabled .btn {
+  color: var(--bs-btn-disabled-color);
+  pointer-events: none;
+  background-color: var(--bs-btn-disabled-bg);
+  border-color: var(--bs-btn-disabled-border-color);
+  opacity: var(--bs-btn-disabled-opacity);
+}
+
+.btn-primary {
+  --bs-btn-color: #fff;
+  --bs-btn-bg: #0d6efd;
+  --bs-btn-border-color: #0d6efd;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #0b5ed7;
+  --bs-btn-hover-border-color: #0a58ca;
+  --bs-btn-focus-shadow-rgb: 49, 132, 253;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #0a58ca;
+  --bs-btn-active-border-color: #0a53be;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #fff;
+  --bs-btn-disabled-bg: #0d6efd;
+  --bs-btn-disabled-border-color: #0d6efd;
+}
+
+.btn-secondary {
+  --bs-btn-color: #fff;
+  --bs-btn-bg: #6c757d;
+  --bs-btn-border-color: #6c757d;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #5c636a;
+  --bs-btn-hover-border-color: #565e64;
+  --bs-btn-focus-shadow-rgb: 130, 138, 145;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #565e64;
+  --bs-btn-active-border-color: #51585e;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #fff;
+  --bs-btn-disabled-bg: #6c757d;
+  --bs-btn-disabled-border-color: #6c757d;
+}
+
+.btn-success {
+  --bs-btn-color: #fff;
+  --bs-btn-bg: #198754;
+  --bs-btn-border-color: #198754;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #157347;
+  --bs-btn-hover-border-color: #146c43;
+  --bs-btn-focus-shadow-rgb: 60, 153, 110;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #146c43;
+  --bs-btn-active-border-color: #13653f;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #fff;
+  --bs-btn-disabled-bg: #198754;
+  --bs-btn-disabled-border-color: #198754;
+}
+
+.btn-info {
+  --bs-btn-color: #000;
+  --bs-btn-bg: #0dcaf0;
+  --bs-btn-border-color: #0dcaf0;
+  --bs-btn-hover-color: #000;
+  --bs-btn-hover-bg: #31d2f2;
+  --bs-btn-hover-border-color: #25cff2;
+  --bs-btn-focus-shadow-rgb: 11, 172, 204;
+  --bs-btn-active-color: #000;
+  --bs-btn-active-bg: #3dd5f3;
+  --bs-btn-active-border-color: #25cff2;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #000;
+  --bs-btn-disabled-bg: #0dcaf0;
+  --bs-btn-disabled-border-color: #0dcaf0;
+}
+
+.btn-warning {
+  --bs-btn-color: #000;
+  --bs-btn-bg: #ffc107;
+  --bs-btn-border-color: #ffc107;
+  --bs-btn-hover-color: #000;
+  --bs-btn-hover-bg: #ffca2c;
+  --bs-btn-hover-border-color: #ffc720;
+  --bs-btn-focus-shadow-rgb: 217, 164, 6;
+  --bs-btn-active-color: #000;
+  --bs-btn-active-bg: #ffcd39;
+  --bs-btn-active-border-color: #ffc720;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #000;
+  --bs-btn-disabled-bg: #ffc107;
+  --bs-btn-disabled-border-color: #ffc107;
+}
+
+.btn-danger {
+  --bs-btn-color: #fff;
+  --bs-btn-bg: #dc3545;
+  --bs-btn-border-color: #dc3545;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #bb2d3b;
+  --bs-btn-hover-border-color: #b02a37;
+  --bs-btn-focus-shadow-rgb: 225, 83, 97;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #b02a37;
+  --bs-btn-active-border-color: #a52834;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #fff;
+  --bs-btn-disabled-bg: #dc3545;
+  --bs-btn-disabled-border-color: #dc3545;
+}
+
+.btn-light {
+  --bs-btn-color: #000;
+  --bs-btn-bg: #f8f9fa;
+  --bs-btn-border-color: #f8f9fa;
+  --bs-btn-hover-color: #000;
+  --bs-btn-hover-bg: #d3d4d5;
+  --bs-btn-hover-border-color: #c6c7c8;
+  --bs-btn-focus-shadow-rgb: 211, 212, 213;
+  --bs-btn-active-color: #000;
+  --bs-btn-active-bg: #c6c7c8;
+  --bs-btn-active-border-color: #babbbc;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #000;
+  --bs-btn-disabled-bg: #f8f9fa;
+  --bs-btn-disabled-border-color: #f8f9fa;
+}
+
+.btn-dark {
+  --bs-btn-color: #fff;
+  --bs-btn-bg: #212529;
+  --bs-btn-border-color: #212529;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #424649;
+  --bs-btn-hover-border-color: #373b3e;
+  --bs-btn-focus-shadow-rgb: 66, 70, 73;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #4d5154;
+  --bs-btn-active-border-color: #373b3e;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #fff;
+  --bs-btn-disabled-bg: #212529;
+  --bs-btn-disabled-border-color: #212529;
+}
+
+.btn-outline-primary {
+  --bs-btn-color: #0d6efd;
+  --bs-btn-border-color: #0d6efd;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #0d6efd;
+  --bs-btn-hover-border-color: #0d6efd;
+  --bs-btn-focus-shadow-rgb: 13, 110, 253;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #0d6efd;
+  --bs-btn-active-border-color: #0d6efd;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #0d6efd;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #0d6efd;
+  --bs-gradient: none;
+}
+
+.btn-outline-secondary {
+  --bs-btn-color: #6c757d;
+  --bs-btn-border-color: #6c757d;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #6c757d;
+  --bs-btn-hover-border-color: #6c757d;
+  --bs-btn-focus-shadow-rgb: 108, 117, 125;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #6c757d;
+  --bs-btn-active-border-color: #6c757d;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #6c757d;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #6c757d;
+  --bs-gradient: none;
+}
+
+.btn-outline-success {
+  --bs-btn-color: #198754;
+  --bs-btn-border-color: #198754;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #198754;
+  --bs-btn-hover-border-color: #198754;
+  --bs-btn-focus-shadow-rgb: 25, 135, 84;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #198754;
+  --bs-btn-active-border-color: #198754;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #198754;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #198754;
+  --bs-gradient: none;
+}
+
+.btn-outline-info {
+  --bs-btn-color: #0dcaf0;
+  --bs-btn-border-color: #0dcaf0;
+  --bs-btn-hover-color: #000;
+  --bs-btn-hover-bg: #0dcaf0;
+  --bs-btn-hover-border-color: #0dcaf0;
+  --bs-btn-focus-shadow-rgb: 13, 202, 240;
+  --bs-btn-active-color: #000;
+  --bs-btn-active-bg: #0dcaf0;
+  --bs-btn-active-border-color: #0dcaf0;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #0dcaf0;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #0dcaf0;
+  --bs-gradient: none;
+}
+
+.btn-outline-warning {
+  --bs-btn-color: #ffc107;
+  --bs-btn-border-color: #ffc107;
+  --bs-btn-hover-color: #000;
+  --bs-btn-hover-bg: #ffc107;
+  --bs-btn-hover-border-color: #ffc107;
+  --bs-btn-focus-shadow-rgb: 255, 193, 7;
+  --bs-btn-active-color: #000;
+  --bs-btn-active-bg: #ffc107;
+  --bs-btn-active-border-color: #ffc107;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #ffc107;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #ffc107;
+  --bs-gradient: none;
+}
+
+.btn-outline-danger {
+  --bs-btn-color: #dc3545;
+  --bs-btn-border-color: #dc3545;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #dc3545;
+  --bs-btn-hover-border-color: #dc3545;
+  --bs-btn-focus-shadow-rgb: 220, 53, 69;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #dc3545;
+  --bs-btn-active-border-color: #dc3545;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #dc3545;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #dc3545;
+  --bs-gradient: none;
+}
+
+.btn-outline-light {
+  --bs-btn-color: #f8f9fa;
+  --bs-btn-border-color: #f8f9fa;
+  --bs-btn-hover-color: #000;
+  --bs-btn-hover-bg: #f8f9fa;
+  --bs-btn-hover-border-color: #f8f9fa;
+  --bs-btn-focus-shadow-rgb: 248, 249, 250;
+  --bs-btn-active-color: #000;
+  --bs-btn-active-bg: #f8f9fa;
+  --bs-btn-active-border-color: #f8f9fa;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #f8f9fa;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #f8f9fa;
+  --bs-gradient: none;
+}
+
+.btn-outline-dark {
+  --bs-btn-color: #212529;
+  --bs-btn-border-color: #212529;
+  --bs-btn-hover-color: #fff;
+  --bs-btn-hover-bg: #212529;
+  --bs-btn-hover-border-color: #212529;
+  --bs-btn-focus-shadow-rgb: 33, 37, 41;
+  --bs-btn-active-color: #fff;
+  --bs-btn-active-bg: #212529;
+  --bs-btn-active-border-color: #212529;
+  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --bs-btn-disabled-color: #212529;
+  --bs-btn-disabled-bg: transparent;
+  --bs-btn-disabled-border-color: #212529;
+  --bs-gradient: none;
+}
+
+.btn-link {
+  --bs-btn-font-weight: 400;
+  --bs-btn-color: var(--bs-link-color);
+  --bs-btn-bg: transparent;
+  --bs-btn-border-color: transparent;
+  --bs-btn-hover-color: var(--bs-link-hover-color);
+  --bs-btn-hover-border-color: transparent;
+  --bs-btn-active-color: var(--bs-link-hover-color);
+  --bs-btn-active-border-color: transparent;
+  --bs-btn-disabled-color: #6c757d;
+  --bs-btn-disabled-border-color: transparent;
+  --bs-btn-box-shadow: none;
+  --bs-btn-focus-shadow-rgb: 49, 132, 253;
+  text-decoration: underline;
+}
+.btn-link:focus-visible {
+  color: var(--bs-btn-color);
+}
+.btn-link:hover {
+  color: var(--bs-btn-hover-color);
+}
+
+.btn-lg, .btn-group-lg > .btn {
+  --bs-btn-padding-y: 0.5rem;
+  --bs-btn-padding-x: 1rem;
+  --bs-btn-font-size: 1.25rem;
+  --bs-btn-border-radius: 0.5rem;
+}
+
+.btn-sm, .btn-group-sm > .btn {
+  --bs-btn-padding-y: 0.25rem;
+  --bs-btn-padding-x: 0.5rem;
+  --bs-btn-font-size: 0.875rem;
+  --bs-btn-border-radius: 0.25rem;
+}
+
+.fade {
+  transition: opacity 0.15s linear;
+}
+@media (prefers-reduced-motion: reduce) {
+  .fade {
+    transition: none;
+  }
+}
+.fade:not(.show) {
+  opacity: 0;
+}
+
+.collapse:not(.show) {
+  display: none;
+}
+
+.collapsing {
+  height: 0;
+  overflow: hidden;
+  transition: height 0.35s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .collapsing {
+    transition: none;
+  }
+}
+.collapsing.collapse-horizontal {
+  width: 0;
+  height: auto;
+  transition: width 0.35s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .collapsing.collapse-horizontal {
+    transition: none;
+  }
+}
+
+.dropup,
+.dropend,
+.dropdown,
+.dropstart,
+.dropup-center,
+.dropdown-center {
+  position: relative;
+}
+
+.dropdown-toggle {
+  white-space: nowrap;
+}
+.dropdown-toggle::after {
+  display: inline-block;
+  margin-left: 0.255em;
+  vertical-align: 0.255em;
+  content: "";
+  border-top: 0.3em solid;
+  border-right: 0.3em solid transparent;
+  border-bottom: 0;
+  border-left: 0.3em solid transparent;
+}
+.dropdown-toggle:empty::after {
+  margin-left: 0;
+}
+
+.dropdown-menu {
+  --bs-dropdown-zindex: 1000;
+  --bs-dropdown-min-width: 10rem;
+  --bs-dropdown-padding-x: 0;
+  --bs-dropdown-padding-y: 0.5rem;
+  --bs-dropdown-spacer: 0.125rem;
+  --bs-dropdown-font-size: 1rem;
+  --bs-dropdown-color: #212529;
+  --bs-dropdown-bg: #fff;
+  --bs-dropdown-border-color: var(--bs-border-color-translucent);
+  --bs-dropdown-border-radius: 0.375rem;
+  --bs-dropdown-border-width: 1px;
+  --bs-dropdown-inner-border-radius: calc(0.375rem - 1px);
+  --bs-dropdown-divider-bg: var(--bs-border-color-translucent);
+  --bs-dropdown-divider-margin-y: 0.5rem;
+  --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+  --bs-dropdown-link-color: #212529;
+  --bs-dropdown-link-hover-color: #1e2125;
+  --bs-dropdown-link-hover-bg: #e9ecef;
+  --bs-dropdown-link-active-color: #fff;
+  --bs-dropdown-link-active-bg: #0d6efd;
+  --bs-dropdown-link-disabled-color: #adb5bd;
+  --bs-dropdown-item-padding-x: 1rem;
+  --bs-dropdown-item-padding-y: 0.25rem;
+  --bs-dropdown-header-color: #6c757d;
+  --bs-dropdown-header-padding-x: 1rem;
+  --bs-dropdown-header-padding-y: 0.5rem;
+  position: absolute;
+  z-index: var(--bs-dropdown-zindex);
+  display: none;
+  min-width: var(--bs-dropdown-min-width);
+  padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);
+  margin: 0;
+  font-size: var(--bs-dropdown-font-size);
+  color: var(--bs-dropdown-color);
+  text-align: left;
+  list-style: none;
+  background-color: var(--bs-dropdown-bg);
+  background-clip: padding-box;
+  border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);
+  border-radius: var(--bs-dropdown-border-radius);
+}
+.dropdown-menu[data-bs-popper] {
+  top: 100%;
+  left: 0;
+  margin-top: var(--bs-dropdown-spacer);
+}
+
+.dropdown-menu-start {
+  --bs-position: start;
+}
+.dropdown-menu-start[data-bs-popper] {
+  right: auto;
+  left: 0;
+}
+
+.dropdown-menu-end {
+  --bs-position: end;
+}
+.dropdown-menu-end[data-bs-popper] {
+  right: 0;
+  left: auto;
+}
+
+@media (min-width: 576px) {
+  .dropdown-menu-sm-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-sm-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-sm-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-sm-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+@media (min-width: 768px) {
+  .dropdown-menu-md-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-md-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-md-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-md-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+@media (min-width: 992px) {
+  .dropdown-menu-lg-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-lg-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-lg-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-lg-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+@media (min-width: 1200px) {
+  .dropdown-menu-xl-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-xl-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-xl-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-xl-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+@media (min-width: 1400px) {
+  .dropdown-menu-xxl-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-xxl-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-xxl-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-xxl-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+.dropup .dropdown-menu[data-bs-popper] {
+  top: auto;
+  bottom: 100%;
+  margin-top: 0;
+  margin-bottom: var(--bs-dropdown-spacer);
+}
+.dropup .dropdown-toggle::after {
+  display: inline-block;
+  margin-left: 0.255em;
+  vertical-align: 0.255em;
+  content: "";
+  border-top: 0;
+  border-right: 0.3em solid transparent;
+  border-bottom: 0.3em solid;
+  border-left: 0.3em solid transparent;
+}
+.dropup .dropdown-toggle:empty::after {
+  margin-left: 0;
+}
+
+.dropend .dropdown-menu[data-bs-popper] {
+  top: 0;
+  right: auto;
+  left: 100%;
+  margin-top: 0;
+  margin-left: var(--bs-dropdown-spacer);
+}
+.dropend .dropdown-toggle::after {
+  display: inline-block;
+  margin-left: 0.255em;
+  vertical-align: 0.255em;
+  content: "";
+  border-top: 0.3em solid transparent;
+  border-right: 0;
+  border-bottom: 0.3em solid transparent;
+  border-left: 0.3em solid;
+}
+.dropend .dropdown-toggle:empty::after {
+  margin-left: 0;
+}
+.dropend .dropdown-toggle::after {
+  vertical-align: 0;
+}
+
+.dropstart .dropdown-menu[data-bs-popper] {
+  top: 0;
+  right: 100%;
+  left: auto;
+  margin-top: 0;
+  margin-right: var(--bs-dropdown-spacer);
+}
+.dropstart .dropdown-toggle::after {
+  display: inline-block;
+  margin-left: 0.255em;
+  vertical-align: 0.255em;
+  content: "";
+}
+.dropstart .dropdown-toggle::after {
+  display: none;
+}
+.dropstart .dropdown-toggle::before {
+  display: inline-block;
+  margin-right: 0.255em;
+  vertical-align: 0.255em;
+  content: "";
+  border-top: 0.3em solid transparent;
+  border-right: 0.3em solid;
+  border-bottom: 0.3em solid transparent;
+}
+.dropstart .dropdown-toggle:empty::after {
+  margin-left: 0;
+}
+.dropstart .dropdown-toggle::before {
+  vertical-align: 0;
+}
+
+.dropdown-divider {
+  height: 0;
+  margin: var(--bs-dropdown-divider-margin-y) 0;
+  overflow: hidden;
+  border-top: 1px solid var(--bs-dropdown-divider-bg);
+  opacity: 1;
+}
+
+.dropdown-item {
+  display: block;
+  width: 100%;
+  padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);
+  clear: both;
+  font-weight: 400;
+  color: var(--bs-dropdown-link-color);
+  text-align: inherit;
+  text-decoration: none;
+  white-space: nowrap;
+  background-color: transparent;
+  border: 0;
+}
+.dropdown-item:hover, .dropdown-item:focus {
+  color: var(--bs-dropdown-link-hover-color);
+  background-color: var(--bs-dropdown-link-hover-bg);
+}
+.dropdown-item.active, .dropdown-item:active {
+  color: var(--bs-dropdown-link-active-color);
+  text-decoration: none;
+  background-color: var(--bs-dropdown-link-active-bg);
+}
+.dropdown-item.disabled, .dropdown-item:disabled {
+  color: var(--bs-dropdown-link-disabled-color);
+  pointer-events: none;
+  background-color: transparent;
+}
+
+.dropdown-menu.show {
+  display: block;
+}
+
+.dropdown-header {
+  display: block;
+  padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);
+  margin-bottom: 0;
+  font-size: 0.875rem;
+  color: var(--bs-dropdown-header-color);
+  white-space: nowrap;
+}
+
+.dropdown-item-text {
+  display: block;
+  padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);
+  color: var(--bs-dropdown-link-color);
+}
+
+.dropdown-menu-dark {
+  --bs-dropdown-color: #dee2e6;
+  --bs-dropdown-bg: #343a40;
+  --bs-dropdown-border-color: var(--bs-border-color-translucent);
+  --bs-dropdown-box-shadow: ;
+  --bs-dropdown-link-color: #dee2e6;
+  --bs-dropdown-link-hover-color: #fff;
+  --bs-dropdown-divider-bg: var(--bs-border-color-translucent);
+  --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);
+  --bs-dropdown-link-active-color: #fff;
+  --bs-dropdown-link-active-bg: #0d6efd;
+  --bs-dropdown-link-disabled-color: #adb5bd;
+  --bs-dropdown-header-color: #adb5bd;
+}
+
+.btn-group,
+.btn-group-vertical {
+  position: relative;
+  display: inline-flex;
+  vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+  position: relative;
+  flex: 1 1 auto;
+}
+.btn-group > .btn-check:checked + .btn,
+.btn-group > .btn-check:focus + .btn,
+.btn-group > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn-check:checked + .btn,
+.btn-group-vertical > .btn-check:focus + .btn,
+.btn-group-vertical > .btn:hover,
+.btn-group-vertical > .btn:focus,
+.btn-group-vertical > .btn:active,
+.btn-group-vertical > .btn.active {
+  z-index: 1;
+}
+
+.btn-toolbar {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: flex-start;
+}
+.btn-toolbar .input-group {
+  width: auto;
+}
+
+.btn-group {
+  border-radius: 0.375rem;
+}
+.btn-group > :not(.btn-check:first-child) + .btn,
+.btn-group > .btn-group:not(:first-child) {
+  margin-left: -1px;
+}
+.btn-group > .btn:not(:last-child):not(.dropdown-toggle),
+.btn-group > .btn.dropdown-toggle-split:first-child,
+.btn-group > .btn-group:not(:last-child) > .btn {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.btn-group > .btn:nth-child(n+3),
+.btn-group > :not(.btn-check) + .btn,
+.btn-group > .btn-group:not(:first-child) > .btn {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.dropdown-toggle-split {
+  padding-right: 0.5625rem;
+  padding-left: 0.5625rem;
+}
+.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {
+  margin-left: 0;
+}
+.dropstart .dropdown-toggle-split::before {
+  margin-right: 0;
+}
+
+.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {
+  padding-right: 0.375rem;
+  padding-left: 0.375rem;
+}
+
+.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {
+  padding-right: 0.75rem;
+  padding-left: 0.75rem;
+}
+
+.btn-group-vertical {
+  flex-direction: column;
+  align-items: flex-start;
+  justify-content: center;
+}
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group {
+  width: 100%;
+}
+.btn-group-vertical > .btn:not(:first-child),
+.btn-group-vertical > .btn-group:not(:first-child) {
+  margin-top: -1px;
+}
+.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),
+.btn-group-vertical > .btn-group:not(:last-child) > .btn {
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn ~ .btn,
+.btn-group-vertical > .btn-group:not(:first-child) > .btn {
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+
+.nav {
+  --bs-nav-link-padding-x: 1rem;
+  --bs-nav-link-padding-y: 0.5rem;
+  --bs-nav-link-font-weight: ;
+  --bs-nav-link-color: var(--bs-link-color);
+  --bs-nav-link-hover-color: var(--bs-link-hover-color);
+  --bs-nav-link-disabled-color: #6c757d;
+  display: flex;
+  flex-wrap: wrap;
+  padding-left: 0;
+  margin-bottom: 0;
+  list-style: none;
+}
+
+.nav-link {
+  display: block;
+  padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);
+  font-size: var(--bs-nav-link-font-size);
+  font-weight: var(--bs-nav-link-font-weight);
+  color: var(--bs-nav-link-color);
+  text-decoration: none;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .nav-link {
+    transition: none;
+  }
+}
+.nav-link:hover, .nav-link:focus {
+  color: var(--bs-nav-link-hover-color);
+}
+.nav-link.disabled {
+  color: var(--bs-nav-link-disabled-color);
+  pointer-events: none;
+  cursor: default;
+}
+
+.nav-tabs {
+  --bs-nav-tabs-border-width: 1px;
+  --bs-nav-tabs-border-color: #dee2e6;
+  --bs-nav-tabs-border-radius: 0.375rem;
+  --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;
+  --bs-nav-tabs-link-active-color: #495057;
+  --bs-nav-tabs-link-active-bg: #fff;
+  --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;
+  border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);
+}
+.nav-tabs .nav-link {
+  margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));
+  background: none;
+  border: var(--bs-nav-tabs-border-width) solid transparent;
+  border-top-left-radius: var(--bs-nav-tabs-border-radius);
+  border-top-right-radius: var(--bs-nav-tabs-border-radius);
+}
+.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {
+  isolation: isolate;
+  border-color: var(--bs-nav-tabs-link-hover-border-color);
+}
+.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {
+  color: var(--bs-nav-link-disabled-color);
+  background-color: transparent;
+  border-color: transparent;
+}
+.nav-tabs .nav-link.active,
+.nav-tabs .nav-item.show .nav-link {
+  color: var(--bs-nav-tabs-link-active-color);
+  background-color: var(--bs-nav-tabs-link-active-bg);
+  border-color: var(--bs-nav-tabs-link-active-border-color);
+}
+.nav-tabs .dropdown-menu {
+  margin-top: calc(-1 * var(--bs-nav-tabs-border-width));
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+
+.nav-pills {
+  --bs-nav-pills-border-radius: 0.375rem;
+  --bs-nav-pills-link-active-color: #fff;
+  --bs-nav-pills-link-active-bg: #0d6efd;
+}
+.nav-pills .nav-link {
+  background: none;
+  border: 0;
+  border-radius: var(--bs-nav-pills-border-radius);
+}
+.nav-pills .nav-link:disabled {
+  color: var(--bs-nav-link-disabled-color);
+  background-color: transparent;
+  border-color: transparent;
+}
+.nav-pills .nav-link.active,
+.nav-pills .show > .nav-link {
+  color: var(--bs-nav-pills-link-active-color);
+  background-color: var(--bs-nav-pills-link-active-bg);
+}
+
+.nav-fill > .nav-link,
+.nav-fill .nav-item {
+  flex: 1 1 auto;
+  text-align: center;
+}
+
+.nav-justified > .nav-link,
+.nav-justified .nav-item {
+  flex-basis: 0;
+  flex-grow: 1;
+  text-align: center;
+}
+
+.nav-fill .nav-item .nav-link,
+.nav-justified .nav-item .nav-link {
+  width: 100%;
+}
+
+.tab-content > .tab-pane {
+  display: none;
+}
+.tab-content > .active {
+  display: block;
+}
+
+.navbar {
+  --bs-navbar-padding-x: 0;
+  --bs-navbar-padding-y: 0.5rem;
+  --bs-navbar-color: rgba(0, 0, 0, 0.55);
+  --bs-navbar-hover-color: rgba(0, 0, 0, 0.7);
+  --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3);
+  --bs-navbar-active-color: rgba(0, 0, 0, 0.9);
+  --bs-navbar-brand-padding-y: 0.3125rem;
+  --bs-navbar-brand-margin-end: 1rem;
+  --bs-navbar-brand-font-size: 1.25rem;
+  --bs-navbar-brand-color: rgba(0, 0, 0, 0.9);
+  --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9);
+  --bs-navbar-nav-link-padding-x: 0.5rem;
+  --bs-navbar-toggler-padding-y: 0.25rem;
+  --bs-navbar-toggler-padding-x: 0.75rem;
+  --bs-navbar-toggler-font-size: 1.25rem;
+  --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+  --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1);
+  --bs-navbar-toggler-border-radius: 0.375rem;
+  --bs-navbar-toggler-focus-width: 0.25rem;
+  --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;
+  position: relative;
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  justify-content: space-between;
+  padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);
+}
+.navbar > .container,
+.navbar > .container-fluid,
+.navbar > .container-sm,
+.navbar > .container-md,
+.navbar > .container-lg,
+.navbar > .container-xl,
+.navbar > .container-xxl {
+  display: flex;
+  flex-wrap: inherit;
+  align-items: center;
+  justify-content: space-between;
+}
+.navbar-brand {
+  padding-top: var(--bs-navbar-brand-padding-y);
+  padding-bottom: var(--bs-navbar-brand-padding-y);
+  margin-right: var(--bs-navbar-brand-margin-end);
+  font-size: var(--bs-navbar-brand-font-size);
+  color: var(--bs-navbar-brand-color);
+  text-decoration: none;
+  white-space: nowrap;
+}
+.navbar-brand:hover, .navbar-brand:focus {
+  color: var(--bs-navbar-brand-hover-color);
+}
+
+.navbar-nav {
+  --bs-nav-link-padding-x: 0;
+  --bs-nav-link-padding-y: 0.5rem;
+  --bs-nav-link-font-weight: ;
+  --bs-nav-link-color: var(--bs-navbar-color);
+  --bs-nav-link-hover-color: var(--bs-navbar-hover-color);
+  --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);
+  display: flex;
+  flex-direction: column;
+  padding-left: 0;
+  margin-bottom: 0;
+  list-style: none;
+}
+.navbar-nav .show > .nav-link,
+.navbar-nav .nav-link.active {
+  color: var(--bs-navbar-active-color);
+}
+.navbar-nav .dropdown-menu {
+  position: static;
+}
+
+.navbar-text {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+  color: var(--bs-navbar-color);
+}
+.navbar-text a,
+.navbar-text a:hover,
+.navbar-text a:focus {
+  color: var(--bs-navbar-active-color);
+}
+
+.navbar-collapse {
+  flex-basis: 100%;
+  flex-grow: 1;
+  align-items: center;
+}
+
+.navbar-toggler {
+  padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);
+  font-size: var(--bs-navbar-toggler-font-size);
+  line-height: 1;
+  color: var(--bs-navbar-color);
+  background-color: transparent;
+  border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);
+  border-radius: var(--bs-navbar-toggler-border-radius);
+  transition: var(--bs-navbar-toggler-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .navbar-toggler {
+    transition: none;
+  }
+}
+.navbar-toggler:hover {
+  text-decoration: none;
+}
+.navbar-toggler:focus {
+  text-decoration: none;
+  outline: 0;
+  box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);
+}
+
+.navbar-toggler-icon {
+  display: inline-block;
+  width: 1.5em;
+  height: 1.5em;
+  vertical-align: middle;
+  background-image: var(--bs-navbar-toggler-icon-bg);
+  background-repeat: no-repeat;
+  background-position: center;
+  background-size: 100%;
+}
+
+.navbar-nav-scroll {
+  max-height: var(--bs-scroll-height, 75vh);
+  overflow-y: auto;
+}
+
+@media (min-width: 576px) {
+  .navbar-expand-sm {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-sm .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-sm .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-sm .navbar-nav .nav-link {
+    padding-right: var(--bs-navbar-nav-link-padding-x);
+    padding-left: var(--bs-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-sm .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-sm .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-sm .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-sm .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    transition: none;
+  }
+  .navbar-expand-sm .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-sm .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-expand-md {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-md .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-md .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-md .navbar-nav .nav-link {
+    padding-right: var(--bs-navbar-nav-link-padding-x);
+    padding-left: var(--bs-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-md .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-md .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-md .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-md .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    transition: none;
+  }
+  .navbar-expand-md .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-md .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 992px) {
+  .navbar-expand-lg {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-lg .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-lg .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-lg .navbar-nav .nav-link {
+    padding-right: var(--bs-navbar-nav-link-padding-x);
+    padding-left: var(--bs-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-lg .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-lg .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-lg .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-lg .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    transition: none;
+  }
+  .navbar-expand-lg .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-lg .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 1200px) {
+  .navbar-expand-xl {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-xl .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-xl .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-xl .navbar-nav .nav-link {
+    padding-right: var(--bs-navbar-nav-link-padding-x);
+    padding-left: var(--bs-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-xl .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-xl .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-xl .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-xl .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    transition: none;
+  }
+  .navbar-expand-xl .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-xl .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 1400px) {
+  .navbar-expand-xxl {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-xxl .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-xxl .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-xxl .navbar-nav .nav-link {
+    padding-right: var(--bs-navbar-nav-link-padding-x);
+    padding-left: var(--bs-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-xxl .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-xxl .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-xxl .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-xxl .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    transition: none;
+  }
+  .navbar-expand-xxl .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-xxl .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+.navbar-expand {
+  flex-wrap: nowrap;
+  justify-content: flex-start;
+}
+.navbar-expand .navbar-nav {
+  flex-direction: row;
+}
+.navbar-expand .navbar-nav .dropdown-menu {
+  position: absolute;
+}
+.navbar-expand .navbar-nav .nav-link {
+  padding-right: var(--bs-navbar-nav-link-padding-x);
+  padding-left: var(--bs-navbar-nav-link-padding-x);
+}
+.navbar-expand .navbar-nav-scroll {
+  overflow: visible;
+}
+.navbar-expand .navbar-collapse {
+  display: flex !important;
+  flex-basis: auto;
+}
+.navbar-expand .navbar-toggler {
+  display: none;
+}
+.navbar-expand .offcanvas {
+  position: static;
+  z-index: auto;
+  flex-grow: 1;
+  width: auto !important;
+  height: auto !important;
+  visibility: visible !important;
+  background-color: transparent !important;
+  border: 0 !important;
+  transform: none !important;
+  transition: none;
+}
+.navbar-expand .offcanvas .offcanvas-header {
+  display: none;
+}
+.navbar-expand .offcanvas .offcanvas-body {
+  display: flex;
+  flex-grow: 0;
+  padding: 0;
+  overflow-y: visible;
+}
+
+.navbar-dark {
+  --bs-navbar-color: rgba(255, 255, 255, 0.55);
+  --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);
+  --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);
+  --bs-navbar-active-color: #fff;
+  --bs-navbar-brand-color: #fff;
+  --bs-navbar-brand-hover-color: #fff;
+  --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);
+  --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+}
+
+.card {
+  --bs-card-spacer-y: 1rem;
+  --bs-card-spacer-x: 1rem;
+  --bs-card-title-spacer-y: 0.5rem;
+  --bs-card-border-width: 1px;
+  --bs-card-border-color: var(--bs-border-color-translucent);
+  --bs-card-border-radius: 0.375rem;
+  --bs-card-box-shadow: ;
+  --bs-card-inner-border-radius: calc(0.375rem - 1px);
+  --bs-card-cap-padding-y: 0.5rem;
+  --bs-card-cap-padding-x: 1rem;
+  --bs-card-cap-bg: rgba(0, 0, 0, 0.03);
+  --bs-card-cap-color: ;
+  --bs-card-height: ;
+  --bs-card-color: ;
+  --bs-card-bg: #fff;
+  --bs-card-img-overlay-padding: 1rem;
+  --bs-card-group-margin: 0.75rem;
+  position: relative;
+  display: flex;
+  flex-direction: column;
+  min-width: 0;
+  height: var(--bs-card-height);
+  word-wrap: break-word;
+  background-color: var(--bs-card-bg);
+  background-clip: border-box;
+  border: var(--bs-card-border-width) solid var(--bs-card-border-color);
+  border-radius: var(--bs-card-border-radius);
+}
+.card > hr {
+  margin-right: 0;
+  margin-left: 0;
+}
+.card > .list-group {
+  border-top: inherit;
+  border-bottom: inherit;
+}
+.card > .list-group:first-child {
+  border-top-width: 0;
+  border-top-left-radius: var(--bs-card-inner-border-radius);
+  border-top-right-radius: var(--bs-card-inner-border-radius);
+}
+.card > .list-group:last-child {
+  border-bottom-width: 0;
+  border-bottom-right-radius: var(--bs-card-inner-border-radius);
+  border-bottom-left-radius: var(--bs-card-inner-border-radius);
+}
+.card > .card-header + .list-group,
+.card > .list-group + .card-footer {
+  border-top: 0;
+}
+
+.card-body {
+  flex: 1 1 auto;
+  padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);
+  color: var(--bs-card-color);
+}
+
+.card-title {
+  margin-bottom: var(--bs-card-title-spacer-y);
+}
+
+.card-subtitle {
+  margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));
+  margin-bottom: 0;
+}
+
+.card-text:last-child {
+  margin-bottom: 0;
+}
+
+.card-link + .card-link {
+  margin-left: var(--bs-card-spacer-x);
+}
+
+.card-header {
+  padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);
+  margin-bottom: 0;
+  color: var(--bs-card-cap-color);
+  background-color: var(--bs-card-cap-bg);
+  border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);
+}
+.card-header:first-child {
+  border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;
+}
+
+.card-footer {
+  padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);
+  color: var(--bs-card-cap-color);
+  background-color: var(--bs-card-cap-bg);
+  border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);
+}
+.card-footer:last-child {
+  border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);
+}
+
+.card-header-tabs {
+  margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));
+  margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));
+  margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));
+  border-bottom: 0;
+}
+.card-header-tabs .nav-link.active {
+  background-color: var(--bs-card-bg);
+  border-bottom-color: var(--bs-card-bg);
+}
+
+.card-header-pills {
+  margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));
+  margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));
+}
+
+.card-img-overlay {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  padding: var(--bs-card-img-overlay-padding);
+  border-radius: var(--bs-card-inner-border-radius);
+}
+
+.card-img,
+.card-img-top,
+.card-img-bottom {
+  width: 100%;
+}
+
+.card-img,
+.card-img-top {
+  border-top-left-radius: var(--bs-card-inner-border-radius);
+  border-top-right-radius: var(--bs-card-inner-border-radius);
+}
+
+.card-img,
+.card-img-bottom {
+  border-bottom-right-radius: var(--bs-card-inner-border-radius);
+  border-bottom-left-radius: var(--bs-card-inner-border-radius);
+}
+
+.card-group > .card {
+  margin-bottom: var(--bs-card-group-margin);
+}
+@media (min-width: 576px) {
+  .card-group {
+    display: flex;
+    flex-flow: row wrap;
+  }
+  .card-group > .card {
+    flex: 1 0 0%;
+    margin-bottom: 0;
+  }
+  .card-group > .card + .card {
+    margin-left: 0;
+    border-left: 0;
+  }
+  .card-group > .card:not(:last-child) {
+    border-top-right-radius: 0;
+    border-bottom-right-radius: 0;
+  }
+  .card-group > .card:not(:last-child) .card-img-top,
+  .card-group > .card:not(:last-child) .card-header {
+    border-top-right-radius: 0;
+  }
+  .card-group > .card:not(:last-child) .card-img-bottom,
+  .card-group > .card:not(:last-child) .card-footer {
+    border-bottom-right-radius: 0;
+  }
+  .card-group > .card:not(:first-child) {
+    border-top-left-radius: 0;
+    border-bottom-left-radius: 0;
+  }
+  .card-group > .card:not(:first-child) .card-img-top,
+  .card-group > .card:not(:first-child) .card-header {
+    border-top-left-radius: 0;
+  }
+  .card-group > .card:not(:first-child) .card-img-bottom,
+  .card-group > .card:not(:first-child) .card-footer {
+    border-bottom-left-radius: 0;
+  }
+}
+
+.accordion {
+  --bs-accordion-color: #212529;
+  --bs-accordion-bg: #fff;
+  --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;
+  --bs-accordion-border-color: var(--bs-border-color);
+  --bs-accordion-border-width: 1px;
+  --bs-accordion-border-radius: 0.375rem;
+  --bs-accordion-inner-border-radius: calc(0.375rem - 1px);
+  --bs-accordion-btn-padding-x: 1.25rem;
+  --bs-accordion-btn-padding-y: 1rem;
+  --bs-accordion-btn-color: #212529;
+  --bs-accordion-btn-bg: var(--bs-accordion-bg);
+  --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  --bs-accordion-btn-icon-width: 1.25rem;
+  --bs-accordion-btn-icon-transform: rotate(-180deg);
+  --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;
+  --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  --bs-accordion-btn-focus-border-color: #86b7fe;
+  --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+  --bs-accordion-body-padding-x: 1.25rem;
+  --bs-accordion-body-padding-y: 1rem;
+  --bs-accordion-active-color: #0c63e4;
+  --bs-accordion-active-bg: #e7f1ff;
+}
+
+.accordion-button {
+  position: relative;
+  display: flex;
+  align-items: center;
+  width: 100%;
+  padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);
+  font-size: 1rem;
+  color: var(--bs-accordion-btn-color);
+  text-align: left;
+  background-color: var(--bs-accordion-btn-bg);
+  border: 0;
+  border-radius: 0;
+  overflow-anchor: none;
+  transition: var(--bs-accordion-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .accordion-button {
+    transition: none;
+  }
+}
+.accordion-button:not(.collapsed) {
+  color: var(--bs-accordion-active-color);
+  background-color: var(--bs-accordion-active-bg);
+  box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);
+}
+.accordion-button:not(.collapsed)::after {
+  background-image: var(--bs-accordion-btn-active-icon);
+  transform: var(--bs-accordion-btn-icon-transform);
+}
+.accordion-button::after {
+  flex-shrink: 0;
+  width: var(--bs-accordion-btn-icon-width);
+  height: var(--bs-accordion-btn-icon-width);
+  margin-left: auto;
+  content: "";
+  background-image: var(--bs-accordion-btn-icon);
+  background-repeat: no-repeat;
+  background-size: var(--bs-accordion-btn-icon-width);
+  transition: var(--bs-accordion-btn-icon-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .accordion-button::after {
+    transition: none;
+  }
+}
+.accordion-button:hover {
+  z-index: 2;
+}
+.accordion-button:focus {
+  z-index: 3;
+  border-color: var(--bs-accordion-btn-focus-border-color);
+  outline: 0;
+  box-shadow: var(--bs-accordion-btn-focus-box-shadow);
+}
+
+.accordion-header {
+  margin-bottom: 0;
+}
+
+.accordion-item {
+  color: var(--bs-accordion-color);
+  background-color: var(--bs-accordion-bg);
+  border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);
+}
+.accordion-item:first-of-type {
+  border-top-left-radius: var(--bs-accordion-border-radius);
+  border-top-right-radius: var(--bs-accordion-border-radius);
+}
+.accordion-item:first-of-type .accordion-button {
+  border-top-left-radius: var(--bs-accordion-inner-border-radius);
+  border-top-right-radius: var(--bs-accordion-inner-border-radius);
+}
+.accordion-item:not(:first-of-type) {
+  border-top: 0;
+}
+.accordion-item:last-of-type {
+  border-bottom-right-radius: var(--bs-accordion-border-radius);
+  border-bottom-left-radius: var(--bs-accordion-border-radius);
+}
+.accordion-item:last-of-type .accordion-button.collapsed {
+  border-bottom-right-radius: var(--bs-accordion-inner-border-radius);
+  border-bottom-left-radius: var(--bs-accordion-inner-border-radius);
+}
+.accordion-item:last-of-type .accordion-collapse {
+  border-bottom-right-radius: var(--bs-accordion-border-radius);
+  border-bottom-left-radius: var(--bs-accordion-border-radius);
+}
+
+.accordion-body {
+  padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);
+}
+
+.accordion-flush .accordion-collapse {
+  border-width: 0;
+}
+.accordion-flush .accordion-item {
+  border-right: 0;
+  border-left: 0;
+  border-radius: 0;
+}
+.accordion-flush .accordion-item:first-child {
+  border-top: 0;
+}
+.accordion-flush .accordion-item:last-child {
+  border-bottom: 0;
+}
+.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {
+  border-radius: 0;
+}
+
+.breadcrumb {
+  --bs-breadcrumb-padding-x: 0;
+  --bs-breadcrumb-padding-y: 0;
+  --bs-breadcrumb-margin-bottom: 1rem;
+  --bs-breadcrumb-bg: ;
+  --bs-breadcrumb-border-radius: ;
+  --bs-breadcrumb-divider-color: #6c757d;
+  --bs-breadcrumb-item-padding-x: 0.5rem;
+  --bs-breadcrumb-item-active-color: #6c757d;
+  display: flex;
+  flex-wrap: wrap;
+  padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);
+  margin-bottom: var(--bs-breadcrumb-margin-bottom);
+  font-size: var(--bs-breadcrumb-font-size);
+  list-style: none;
+  background-color: var(--bs-breadcrumb-bg);
+  border-radius: var(--bs-breadcrumb-border-radius);
+}
+
+.breadcrumb-item + .breadcrumb-item {
+  padding-left: var(--bs-breadcrumb-item-padding-x);
+}
+.breadcrumb-item + .breadcrumb-item::before {
+  float: left;
+  padding-right: var(--bs-breadcrumb-item-padding-x);
+  color: var(--bs-breadcrumb-divider-color);
+  content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */;
+}
+.breadcrumb-item.active {
+  color: var(--bs-breadcrumb-item-active-color);
+}
+
+.pagination {
+  --bs-pagination-padding-x: 0.75rem;
+  --bs-pagination-padding-y: 0.375rem;
+  --bs-pagination-font-size: 1rem;
+  --bs-pagination-color: var(--bs-link-color);
+  --bs-pagination-bg: #fff;
+  --bs-pagination-border-width: 1px;
+  --bs-pagination-border-color: #dee2e6;
+  --bs-pagination-border-radius: 0.375rem;
+  --bs-pagination-hover-color: var(--bs-link-hover-color);
+  --bs-pagination-hover-bg: #e9ecef;
+  --bs-pagination-hover-border-color: #dee2e6;
+  --bs-pagination-focus-color: var(--bs-link-hover-color);
+  --bs-pagination-focus-bg: #e9ecef;
+  --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+  --bs-pagination-active-color: #fff;
+  --bs-pagination-active-bg: #0d6efd;
+  --bs-pagination-active-border-color: #0d6efd;
+  --bs-pagination-disabled-color: #6c757d;
+  --bs-pagination-disabled-bg: #fff;
+  --bs-pagination-disabled-border-color: #dee2e6;
+  display: flex;
+  padding-left: 0;
+  list-style: none;
+}
+
+.page-link {
+  position: relative;
+  display: block;
+  padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);
+  font-size: var(--bs-pagination-font-size);
+  color: var(--bs-pagination-color);
+  text-decoration: none;
+  background-color: var(--bs-pagination-bg);
+  border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .page-link {
+    transition: none;
+  }
+}
+.page-link:hover {
+  z-index: 2;
+  color: var(--bs-pagination-hover-color);
+  background-color: var(--bs-pagination-hover-bg);
+  border-color: var(--bs-pagination-hover-border-color);
+}
+.page-link:focus {
+  z-index: 3;
+  color: var(--bs-pagination-focus-color);
+  background-color: var(--bs-pagination-focus-bg);
+  outline: 0;
+  box-shadow: var(--bs-pagination-focus-box-shadow);
+}
+.page-link.active, .active > .page-link {
+  z-index: 3;
+  color: var(--bs-pagination-active-color);
+  background-color: var(--bs-pagination-active-bg);
+  border-color: var(--bs-pagination-active-border-color);
+}
+.page-link.disabled, .disabled > .page-link {
+  color: var(--bs-pagination-disabled-color);
+  pointer-events: none;
+  background-color: var(--bs-pagination-disabled-bg);
+  border-color: var(--bs-pagination-disabled-border-color);
+}
+
+.page-item:not(:first-child) .page-link {
+  margin-left: -1px;
+}
+.page-item:first-child .page-link {
+  border-top-left-radius: var(--bs-pagination-border-radius);
+  border-bottom-left-radius: var(--bs-pagination-border-radius);
+}
+.page-item:last-child .page-link {
+  border-top-right-radius: var(--bs-pagination-border-radius);
+  border-bottom-right-radius: var(--bs-pagination-border-radius);
+}
+
+.pagination-lg {
+  --bs-pagination-padding-x: 1.5rem;
+  --bs-pagination-padding-y: 0.75rem;
+  --bs-pagination-font-size: 1.25rem;
+  --bs-pagination-border-radius: 0.5rem;
+}
+
+.pagination-sm {
+  --bs-pagination-padding-x: 0.5rem;
+  --bs-pagination-padding-y: 0.25rem;
+  --bs-pagination-font-size: 0.875rem;
+  --bs-pagination-border-radius: 0.25rem;
+}
+
+.badge {
+  --bs-badge-padding-x: 0.65em;
+  --bs-badge-padding-y: 0.35em;
+  --bs-badge-font-size: 0.75em;
+  --bs-badge-font-weight: 700;
+  --bs-badge-color: #fff;
+  --bs-badge-border-radius: 0.375rem;
+  display: inline-block;
+  padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);
+  font-size: var(--bs-badge-font-size);
+  font-weight: var(--bs-badge-font-weight);
+  line-height: 1;
+  color: var(--bs-badge-color);
+  text-align: center;
+  white-space: nowrap;
+  vertical-align: baseline;
+  border-radius: var(--bs-badge-border-radius);
+}
+.badge:empty {
+  display: none;
+}
+
+.btn .badge {
+  position: relative;
+  top: -1px;
+}
+
+.alert {
+  --bs-alert-bg: transparent;
+  --bs-alert-padding-x: 1rem;
+  --bs-alert-padding-y: 1rem;
+  --bs-alert-margin-bottom: 1rem;
+  --bs-alert-color: inherit;
+  --bs-alert-border-color: transparent;
+  --bs-alert-border: 1px solid var(--bs-alert-border-color);
+  --bs-alert-border-radius: 0.375rem;
+  position: relative;
+  padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);
+  margin-bottom: var(--bs-alert-margin-bottom);
+  color: var(--bs-alert-color);
+  background-color: var(--bs-alert-bg);
+  border: var(--bs-alert-border);
+  border-radius: var(--bs-alert-border-radius);
+}
+
+.alert-heading {
+  color: inherit;
+}
+
+.alert-link {
+  font-weight: 700;
+}
+
+.alert-dismissible {
+  padding-right: 3rem;
+}
+.alert-dismissible .btn-close {
+  position: absolute;
+  top: 0;
+  right: 0;
+  z-index: 2;
+  padding: 1.25rem 1rem;
+}
+
+.alert-primary {
+  --bs-alert-color: #084298;
+  --bs-alert-bg: #cfe2ff;
+  --bs-alert-border-color: #b6d4fe;
+}
+.alert-primary .alert-link {
+  color: #06357a;
+}
+
+.alert-secondary {
+  --bs-alert-color: #41464b;
+  --bs-alert-bg: #e2e3e5;
+  --bs-alert-border-color: #d3d6d8;
+}
+.alert-secondary .alert-link {
+  color: #34383c;
+}
+
+.alert-success {
+  --bs-alert-color: #0f5132;
+  --bs-alert-bg: #d1e7dd;
+  --bs-alert-border-color: #badbcc;
+}
+.alert-success .alert-link {
+  color: #0c4128;
+}
+
+.alert-info {
+  --bs-alert-color: #055160;
+  --bs-alert-bg: #cff4fc;
+  --bs-alert-border-color: #b6effb;
+}
+.alert-info .alert-link {
+  color: #04414d;
+}
+
+.alert-warning {
+  --bs-alert-color: #664d03;
+  --bs-alert-bg: #fff3cd;
+  --bs-alert-border-color: #ffecb5;
+}
+.alert-warning .alert-link {
+  color: #523e02;
+}
+
+.alert-danger {
+  --bs-alert-color: #842029;
+  --bs-alert-bg: #f8d7da;
+  --bs-alert-border-color: #f5c2c7;
+}
+.alert-danger .alert-link {
+  color: #6a1a21;
+}
+
+.alert-light {
+  --bs-alert-color: #636464;
+  --bs-alert-bg: #fefefe;
+  --bs-alert-border-color: #fdfdfe;
+}
+.alert-light .alert-link {
+  color: #4f5050;
+}
+
+.alert-dark {
+  --bs-alert-color: #141619;
+  --bs-alert-bg: #d3d3d4;
+  --bs-alert-border-color: #bcbebf;
+}
+.alert-dark .alert-link {
+  color: #101214;
+}
+
+@keyframes progress-bar-stripes {
+  0% {
+    background-position-x: 1rem;
+  }
+}
+.progress {
+  --bs-progress-height: 1rem;
+  --bs-progress-font-size: 0.75rem;
+  --bs-progress-bg: #e9ecef;
+  --bs-progress-border-radius: 0.375rem;
+  --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);
+  --bs-progress-bar-color: #fff;
+  --bs-progress-bar-bg: #0d6efd;
+  --bs-progress-bar-transition: width 0.6s ease;
+  display: flex;
+  height: var(--bs-progress-height);
+  overflow: hidden;
+  font-size: var(--bs-progress-font-size);
+  background-color: var(--bs-progress-bg);
+  border-radius: var(--bs-progress-border-radius);
+}
+
+.progress-bar {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  overflow: hidden;
+  color: var(--bs-progress-bar-color);
+  text-align: center;
+  white-space: nowrap;
+  background-color: var(--bs-progress-bar-bg);
+  transition: var(--bs-progress-bar-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .progress-bar {
+    transition: none;
+  }
+}
+
+.progress-bar-striped {
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-size: var(--bs-progress-height) var(--bs-progress-height);
+}
+
+.progress-bar-animated {
+  animation: 1s linear infinite progress-bar-stripes;
+}
+@media (prefers-reduced-motion: reduce) {
+  .progress-bar-animated {
+    animation: none;
+  }
+}
+
+.list-group {
+  --bs-list-group-color: #212529;
+  --bs-list-group-bg: #fff;
+  --bs-list-group-border-color: rgba(0, 0, 0, 0.125);
+  --bs-list-group-border-width: 1px;
+  --bs-list-group-border-radius: 0.375rem;
+  --bs-list-group-item-padding-x: 1rem;
+  --bs-list-group-item-padding-y: 0.5rem;
+  --bs-list-group-action-color: #495057;
+  --bs-list-group-action-hover-color: #495057;
+  --bs-list-group-action-hover-bg: #f8f9fa;
+  --bs-list-group-action-active-color: #212529;
+  --bs-list-group-action-active-bg: #e9ecef;
+  --bs-list-group-disabled-color: #6c757d;
+  --bs-list-group-disabled-bg: #fff;
+  --bs-list-group-active-color: #fff;
+  --bs-list-group-active-bg: #0d6efd;
+  --bs-list-group-active-border-color: #0d6efd;
+  display: flex;
+  flex-direction: column;
+  padding-left: 0;
+  margin-bottom: 0;
+  border-radius: var(--bs-list-group-border-radius);
+}
+
+.list-group-numbered {
+  list-style-type: none;
+  counter-reset: section;
+}
+.list-group-numbered > .list-group-item::before {
+  content: counters(section, ".") ". ";
+  counter-increment: section;
+}
+
+.list-group-item-action {
+  width: 100%;
+  color: var(--bs-list-group-action-color);
+  text-align: inherit;
+}
+.list-group-item-action:hover, .list-group-item-action:focus {
+  z-index: 1;
+  color: var(--bs-list-group-action-hover-color);
+  text-decoration: none;
+  background-color: var(--bs-list-group-action-hover-bg);
+}
+.list-group-item-action:active {
+  color: var(--bs-list-group-action-active-color);
+  background-color: var(--bs-list-group-action-active-bg);
+}
+
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);
+  color: var(--bs-list-group-color);
+  text-decoration: none;
+  background-color: var(--bs-list-group-bg);
+  border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);
+}
+.list-group-item:first-child {
+  border-top-left-radius: inherit;
+  border-top-right-radius: inherit;
+}
+.list-group-item:last-child {
+  border-bottom-right-radius: inherit;
+  border-bottom-left-radius: inherit;
+}
+.list-group-item.disabled, .list-group-item:disabled {
+  color: var(--bs-list-group-disabled-color);
+  pointer-events: none;
+  background-color: var(--bs-list-group-disabled-bg);
+}
+.list-group-item.active {
+  z-index: 2;
+  color: var(--bs-list-group-active-color);
+  background-color: var(--bs-list-group-active-bg);
+  border-color: var(--bs-list-group-active-border-color);
+}
+.list-group-item + .list-group-item {
+  border-top-width: 0;
+}
+.list-group-item + .list-group-item.active {
+  margin-top: calc(-1 * var(--bs-list-group-border-width));
+  border-top-width: var(--bs-list-group-border-width);
+}
+
+.list-group-horizontal {
+  flex-direction: row;
+}
+.list-group-horizontal > .list-group-item:first-child:not(:last-child) {
+  border-bottom-left-radius: var(--bs-list-group-border-radius);
+  border-top-right-radius: 0;
+}
+.list-group-horizontal > .list-group-item:last-child:not(:first-child) {
+  border-top-right-radius: var(--bs-list-group-border-radius);
+  border-bottom-left-radius: 0;
+}
+.list-group-horizontal > .list-group-item.active {
+  margin-top: 0;
+}
+.list-group-horizontal > .list-group-item + .list-group-item {
+  border-top-width: var(--bs-list-group-border-width);
+  border-left-width: 0;
+}
+.list-group-horizontal > .list-group-item + .list-group-item.active {
+  margin-left: calc(-1 * var(--bs-list-group-border-width));
+  border-left-width: var(--bs-list-group-border-width);
+}
+
+@media (min-width: 576px) {
+  .list-group-horizontal-sm {
+    flex-direction: row;
+  }
+  .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--bs-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--bs-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item + .list-group-item {
+    border-top-width: var(--bs-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--bs-list-group-border-width));
+    border-left-width: var(--bs-list-group-border-width);
+  }
+}
+@media (min-width: 768px) {
+  .list-group-horizontal-md {
+    flex-direction: row;
+  }
+  .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--bs-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--bs-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-md > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-md > .list-group-item + .list-group-item {
+    border-top-width: var(--bs-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-md > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--bs-list-group-border-width));
+    border-left-width: var(--bs-list-group-border-width);
+  }
+}
+@media (min-width: 992px) {
+  .list-group-horizontal-lg {
+    flex-direction: row;
+  }
+  .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--bs-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--bs-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item + .list-group-item {
+    border-top-width: var(--bs-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--bs-list-group-border-width));
+    border-left-width: var(--bs-list-group-border-width);
+  }
+}
+@media (min-width: 1200px) {
+  .list-group-horizontal-xl {
+    flex-direction: row;
+  }
+  .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--bs-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--bs-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item + .list-group-item {
+    border-top-width: var(--bs-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--bs-list-group-border-width));
+    border-left-width: var(--bs-list-group-border-width);
+  }
+}
+@media (min-width: 1400px) {
+  .list-group-horizontal-xxl {
+    flex-direction: row;
+  }
+  .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--bs-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--bs-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item + .list-group-item {
+    border-top-width: var(--bs-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--bs-list-group-border-width));
+    border-left-width: var(--bs-list-group-border-width);
+  }
+}
+.list-group-flush {
+  border-radius: 0;
+}
+.list-group-flush > .list-group-item {
+  border-width: 0 0 var(--bs-list-group-border-width);
+}
+.list-group-flush > .list-group-item:last-child {
+  border-bottom-width: 0;
+}
+
+.list-group-item-primary {
+  color: #084298;
+  background-color: #cfe2ff;
+}
+.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {
+  color: #084298;
+  background-color: #bacbe6;
+}
+.list-group-item-primary.list-group-item-action.active {
+  color: #fff;
+  background-color: #084298;
+  border-color: #084298;
+}
+
+.list-group-item-secondary {
+  color: #41464b;
+  background-color: #e2e3e5;
+}
+.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {
+  color: #41464b;
+  background-color: #cbccce;
+}
+.list-group-item-secondary.list-group-item-action.active {
+  color: #fff;
+  background-color: #41464b;
+  border-color: #41464b;
+}
+
+.list-group-item-success {
+  color: #0f5132;
+  background-color: #d1e7dd;
+}
+.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {
+  color: #0f5132;
+  background-color: #bcd0c7;
+}
+.list-group-item-success.list-group-item-action.active {
+  color: #fff;
+  background-color: #0f5132;
+  border-color: #0f5132;
+}
+
+.list-group-item-info {
+  color: #055160;
+  background-color: #cff4fc;
+}
+.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {
+  color: #055160;
+  background-color: #badce3;
+}
+.list-group-item-info.list-group-item-action.active {
+  color: #fff;
+  background-color: #055160;
+  border-color: #055160;
+}
+
+.list-group-item-warning {
+  color: #664d03;
+  background-color: #fff3cd;
+}
+.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {
+  color: #664d03;
+  background-color: #e6dbb9;
+}
+.list-group-item-warning.list-group-item-action.active {
+  color: #fff;
+  background-color: #664d03;
+  border-color: #664d03;
+}
+
+.list-group-item-danger {
+  color: #842029;
+  background-color: #f8d7da;
+}
+.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {
+  color: #842029;
+  background-color: #dfc2c4;
+}
+.list-group-item-danger.list-group-item-action.active {
+  color: #fff;
+  background-color: #842029;
+  border-color: #842029;
+}
+
+.list-group-item-light {
+  color: #636464;
+  background-color: #fefefe;
+}
+.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {
+  color: #636464;
+  background-color: #e5e5e5;
+}
+.list-group-item-light.list-group-item-action.active {
+  color: #fff;
+  background-color: #636464;
+  border-color: #636464;
+}
+
+.list-group-item-dark {
+  color: #141619;
+  background-color: #d3d3d4;
+}
+.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {
+  color: #141619;
+  background-color: #bebebf;
+}
+.list-group-item-dark.list-group-item-action.active {
+  color: #fff;
+  background-color: #141619;
+  border-color: #141619;
+}
+
+.btn-close {
+  box-sizing: content-box;
+  width: 1em;
+  height: 1em;
+  padding: 0.25em 0.25em;
+  color: #000;
+  background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;
+  border: 0;
+  border-radius: 0.375rem;
+  opacity: 0.5;
+}
+.btn-close:hover {
+  color: #000;
+  text-decoration: none;
+  opacity: 0.75;
+}
+.btn-close:focus {
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+  opacity: 1;
+}
+.btn-close:disabled, .btn-close.disabled {
+  pointer-events: none;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+          user-select: none;
+  opacity: 0.25;
+}
+
+.btn-close-white {
+  filter: invert(1) grayscale(100%) brightness(200%);
+}
+
+.toast {
+  --bs-toast-zindex: 1090;
+  --bs-toast-padding-x: 0.75rem;
+  --bs-toast-padding-y: 0.5rem;
+  --bs-toast-spacing: 1.5rem;
+  --bs-toast-max-width: 350px;
+  --bs-toast-font-size: 0.875rem;
+  --bs-toast-color: ;
+  --bs-toast-bg: rgba(255, 255, 255, 0.85);
+  --bs-toast-border-width: 1px;
+  --bs-toast-border-color: var(--bs-border-color-translucent);
+  --bs-toast-border-radius: 0.375rem;
+  --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+  --bs-toast-header-color: #6c757d;
+  --bs-toast-header-bg: rgba(255, 255, 255, 0.85);
+  --bs-toast-header-border-color: rgba(0, 0, 0, 0.05);
+  width: var(--bs-toast-max-width);
+  max-width: 100%;
+  font-size: var(--bs-toast-font-size);
+  color: var(--bs-toast-color);
+  pointer-events: auto;
+  background-color: var(--bs-toast-bg);
+  background-clip: padding-box;
+  border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);
+  box-shadow: var(--bs-toast-box-shadow);
+  border-radius: var(--bs-toast-border-radius);
+}
+.toast.showing {
+  opacity: 0;
+}
+.toast:not(.show) {
+  display: none;
+}
+
+.toast-container {
+  --bs-toast-zindex: 1090;
+  position: absolute;
+  z-index: var(--bs-toast-zindex);
+  width: -moz-max-content;
+  width: max-content;
+  max-width: 100%;
+  pointer-events: none;
+}
+.toast-container > :not(:last-child) {
+  margin-bottom: var(--bs-toast-spacing);
+}
+
+.toast-header {
+  display: flex;
+  align-items: center;
+  padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);
+  color: var(--bs-toast-header-color);
+  background-color: var(--bs-toast-header-bg);
+  background-clip: padding-box;
+  border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);
+  border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));
+  border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));
+}
+.toast-header .btn-close {
+  margin-right: calc(-0.5 * var(--bs-toast-padding-x));
+  margin-left: var(--bs-toast-padding-x);
+}
+
+.toast-body {
+  padding: var(--bs-toast-padding-x);
+  word-wrap: break-word;
+}
+
+.modal {
+  --bs-modal-zindex: 1055;
+  --bs-modal-width: 500px;
+  --bs-modal-padding: 1rem;
+  --bs-modal-margin: 0.5rem;
+  --bs-modal-color: ;
+  --bs-modal-bg: #fff;
+  --bs-modal-border-color: var(--bs-border-color-translucent);
+  --bs-modal-border-width: 1px;
+  --bs-modal-border-radius: 0.5rem;
+  --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
+  --bs-modal-inner-border-radius: calc(0.5rem - 1px);
+  --bs-modal-header-padding-x: 1rem;
+  --bs-modal-header-padding-y: 1rem;
+  --bs-modal-header-padding: 1rem 1rem;
+  --bs-modal-header-border-color: var(--bs-border-color);
+  --bs-modal-header-border-width: 1px;
+  --bs-modal-title-line-height: 1.5;
+  --bs-modal-footer-gap: 0.5rem;
+  --bs-modal-footer-bg: ;
+  --bs-modal-footer-border-color: var(--bs-border-color);
+  --bs-modal-footer-border-width: 1px;
+  position: fixed;
+  top: 0;
+  left: 0;
+  z-index: var(--bs-modal-zindex);
+  display: none;
+  width: 100%;
+  height: 100%;
+  overflow-x: hidden;
+  overflow-y: auto;
+  outline: 0;
+}
+
+.modal-dialog {
+  position: relative;
+  width: auto;
+  margin: var(--bs-modal-margin);
+  pointer-events: none;
+}
+.modal.fade .modal-dialog {
+  transition: transform 0.3s ease-out;
+  transform: translate(0, -50px);
+}
+@media (prefers-reduced-motion: reduce) {
+  .modal.fade .modal-dialog {
+    transition: none;
+  }
+}
+.modal.show .modal-dialog {
+  transform: none;
+}
+.modal.modal-static .modal-dialog {
+  transform: scale(1.02);
+}
+
+.modal-dialog-scrollable {
+  height: calc(100% - var(--bs-modal-margin) * 2);
+}
+.modal-dialog-scrollable .modal-content {
+  max-height: 100%;
+  overflow: hidden;
+}
+.modal-dialog-scrollable .modal-body {
+  overflow-y: auto;
+}
+
+.modal-dialog-centered {
+  display: flex;
+  align-items: center;
+  min-height: calc(100% - var(--bs-modal-margin) * 2);
+}
+
+.modal-content {
+  position: relative;
+  display: flex;
+  flex-direction: column;
+  width: 100%;
+  color: var(--bs-modal-color);
+  pointer-events: auto;
+  background-color: var(--bs-modal-bg);
+  background-clip: padding-box;
+  border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);
+  border-radius: var(--bs-modal-border-radius);
+  outline: 0;
+}
+
+.modal-backdrop {
+  --bs-backdrop-zindex: 1050;
+  --bs-backdrop-bg: #000;
+  --bs-backdrop-opacity: 0.5;
+  position: fixed;
+  top: 0;
+  left: 0;
+  z-index: var(--bs-backdrop-zindex);
+  width: 100vw;
+  height: 100vh;
+  background-color: var(--bs-backdrop-bg);
+}
+.modal-backdrop.fade {
+  opacity: 0;
+}
+.modal-backdrop.show {
+  opacity: var(--bs-backdrop-opacity);
+}
+
+.modal-header {
+  display: flex;
+  flex-shrink: 0;
+  align-items: center;
+  justify-content: space-between;
+  padding: var(--bs-modal-header-padding);
+  border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);
+  border-top-left-radius: var(--bs-modal-inner-border-radius);
+  border-top-right-radius: var(--bs-modal-inner-border-radius);
+}
+.modal-header .btn-close {
+  padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);
+  margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;
+}
+
+.modal-title {
+  margin-bottom: 0;
+  line-height: var(--bs-modal-title-line-height);
+}
+
+.modal-body {
+  position: relative;
+  flex: 1 1 auto;
+  padding: var(--bs-modal-padding);
+}
+
+.modal-footer {
+  display: flex;
+  flex-shrink: 0;
+  flex-wrap: wrap;
+  align-items: center;
+  justify-content: flex-end;
+  padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);
+  background-color: var(--bs-modal-footer-bg);
+  border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);
+  border-bottom-right-radius: var(--bs-modal-inner-border-radius);
+  border-bottom-left-radius: var(--bs-modal-inner-border-radius);
+}
+.modal-footer > * {
+  margin: calc(var(--bs-modal-footer-gap) * 0.5);
+}
+
+@media (min-width: 576px) {
+  .modal {
+    --bs-modal-margin: 1.75rem;
+    --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+  }
+  .modal-dialog {
+    max-width: var(--bs-modal-width);
+    margin-right: auto;
+    margin-left: auto;
+  }
+  .modal-sm {
+    --bs-modal-width: 300px;
+  }
+}
+@media (min-width: 992px) {
+  .modal-lg,
+  .modal-xl {
+    --bs-modal-width: 800px;
+  }
+}
+@media (min-width: 1200px) {
+  .modal-xl {
+    --bs-modal-width: 1140px;
+  }
+}
+.modal-fullscreen {
+  width: 100vw;
+  max-width: none;
+  height: 100%;
+  margin: 0;
+}
+.modal-fullscreen .modal-content {
+  height: 100%;
+  border: 0;
+  border-radius: 0;
+}
+.modal-fullscreen .modal-header,
+.modal-fullscreen .modal-footer {
+  border-radius: 0;
+}
+.modal-fullscreen .modal-body {
+  overflow-y: auto;
+}
+
+@media (max-width: 575.98px) {
+  .modal-fullscreen-sm-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-sm-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-sm-down .modal-header,
+  .modal-fullscreen-sm-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-sm-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 767.98px) {
+  .modal-fullscreen-md-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-md-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-md-down .modal-header,
+  .modal-fullscreen-md-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-md-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 991.98px) {
+  .modal-fullscreen-lg-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-lg-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-lg-down .modal-header,
+  .modal-fullscreen-lg-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-lg-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 1199.98px) {
+  .modal-fullscreen-xl-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-xl-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-xl-down .modal-header,
+  .modal-fullscreen-xl-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-xl-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 1399.98px) {
+  .modal-fullscreen-xxl-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-xxl-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-xxl-down .modal-header,
+  .modal-fullscreen-xxl-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-xxl-down .modal-body {
+    overflow-y: auto;
+  }
+}
+.tooltip {
+  --bs-tooltip-zindex: 1080;
+  --bs-tooltip-max-width: 200px;
+  --bs-tooltip-padding-x: 0.5rem;
+  --bs-tooltip-padding-y: 0.25rem;
+  --bs-tooltip-margin: ;
+  --bs-tooltip-font-size: 0.875rem;
+  --bs-tooltip-color: #fff;
+  --bs-tooltip-bg: #000;
+  --bs-tooltip-border-radius: 0.375rem;
+  --bs-tooltip-opacity: 0.9;
+  --bs-tooltip-arrow-width: 0.8rem;
+  --bs-tooltip-arrow-height: 0.4rem;
+  z-index: var(--bs-tooltip-zindex);
+  display: block;
+  padding: var(--bs-tooltip-arrow-height);
+  margin: var(--bs-tooltip-margin);
+  font-family: var(--bs-font-sans-serif);
+  font-style: normal;
+  font-weight: 400;
+  line-height: 1.5;
+  text-align: left;
+  text-align: start;
+  text-decoration: none;
+  text-shadow: none;
+  text-transform: none;
+  letter-spacing: normal;
+  word-break: normal;
+  white-space: normal;
+  word-spacing: normal;
+  line-break: auto;
+  font-size: var(--bs-tooltip-font-size);
+  word-wrap: break-word;
+  opacity: 0;
+}
+.tooltip.show {
+  opacity: var(--bs-tooltip-opacity);
+}
+.tooltip .tooltip-arrow {
+  display: block;
+  width: var(--bs-tooltip-arrow-width);
+  height: var(--bs-tooltip-arrow-height);
+}
+.tooltip .tooltip-arrow::before {
+  position: absolute;
+  content: "";
+  border-color: transparent;
+  border-style: solid;
+}
+
+.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {
+  bottom: 0;
+}
+.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {
+  top: -1px;
+  border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;
+  border-top-color: var(--bs-tooltip-bg);
+}
+
+/* rtl:begin:ignore */
+.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {
+  left: 0;
+  width: var(--bs-tooltip-arrow-height);
+  height: var(--bs-tooltip-arrow-width);
+}
+.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {
+  right: -1px;
+  border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;
+  border-right-color: var(--bs-tooltip-bg);
+}
+
+/* rtl:end:ignore */
+.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {
+  top: 0;
+}
+.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {
+  bottom: -1px;
+  border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);
+  border-bottom-color: var(--bs-tooltip-bg);
+}
+
+/* rtl:begin:ignore */
+.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {
+  right: 0;
+  width: var(--bs-tooltip-arrow-height);
+  height: var(--bs-tooltip-arrow-width);
+}
+.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {
+  left: -1px;
+  border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);
+  border-left-color: var(--bs-tooltip-bg);
+}
+
+/* rtl:end:ignore */
+.tooltip-inner {
+  max-width: var(--bs-tooltip-max-width);
+  padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);
+  color: var(--bs-tooltip-color);
+  text-align: center;
+  background-color: var(--bs-tooltip-bg);
+  border-radius: var(--bs-tooltip-border-radius);
+}
+
+.popover {
+  --bs-popover-zindex: 1070;
+  --bs-popover-max-width: 276px;
+  --bs-popover-font-size: 0.875rem;
+  --bs-popover-bg: #fff;
+  --bs-popover-border-width: 1px;
+  --bs-popover-border-color: var(--bs-border-color-translucent);
+  --bs-popover-border-radius: 0.5rem;
+  --bs-popover-inner-border-radius: calc(0.5rem - 1px);
+  --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+  --bs-popover-header-padding-x: 1rem;
+  --bs-popover-header-padding-y: 0.5rem;
+  --bs-popover-header-font-size: 1rem;
+  --bs-popover-header-color: ;
+  --bs-popover-header-bg: #f0f0f0;
+  --bs-popover-body-padding-x: 1rem;
+  --bs-popover-body-padding-y: 1rem;
+  --bs-popover-body-color: #212529;
+  --bs-popover-arrow-width: 1rem;
+  --bs-popover-arrow-height: 0.5rem;
+  --bs-popover-arrow-border: var(--bs-popover-border-color);
+  z-index: var(--bs-popover-zindex);
+  display: block;
+  max-width: var(--bs-popover-max-width);
+  font-family: var(--bs-font-sans-serif);
+  font-style: normal;
+  font-weight: 400;
+  line-height: 1.5;
+  text-align: left;
+  text-align: start;
+  text-decoration: none;
+  text-shadow: none;
+  text-transform: none;
+  letter-spacing: normal;
+  word-break: normal;
+  white-space: normal;
+  word-spacing: normal;
+  line-break: auto;
+  font-size: var(--bs-popover-font-size);
+  word-wrap: break-word;
+  background-color: var(--bs-popover-bg);
+  background-clip: padding-box;
+  border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);
+  border-radius: var(--bs-popover-border-radius);
+}
+.popover .popover-arrow {
+  display: block;
+  width: var(--bs-popover-arrow-width);
+  height: var(--bs-popover-arrow-height);
+}
+.popover .popover-arrow::before, .popover .popover-arrow::after {
+  position: absolute;
+  display: block;
+  content: "";
+  border-color: transparent;
+  border-style: solid;
+  border-width: 0;
+}
+
+.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {
+  bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));
+}
+.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {
+  border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;
+}
+.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {
+  bottom: 0;
+  border-top-color: var(--bs-popover-arrow-border);
+}
+.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {
+  bottom: var(--bs-popover-border-width);
+  border-top-color: var(--bs-popover-bg);
+}
+
+/* rtl:begin:ignore */
+.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {
+  left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));
+  width: var(--bs-popover-arrow-height);
+  height: var(--bs-popover-arrow-width);
+}
+.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {
+  border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;
+}
+.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {
+  left: 0;
+  border-right-color: var(--bs-popover-arrow-border);
+}
+.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {
+  left: var(--bs-popover-border-width);
+  border-right-color: var(--bs-popover-bg);
+}
+
+/* rtl:end:ignore */
+.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {
+  top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));
+}
+.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {
+  border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);
+}
+.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {
+  top: 0;
+  border-bottom-color: var(--bs-popover-arrow-border);
+}
+.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {
+  top: var(--bs-popover-border-width);
+  border-bottom-color: var(--bs-popover-bg);
+}
+.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {
+  position: absolute;
+  top: 0;
+  left: 50%;
+  display: block;
+  width: var(--bs-popover-arrow-width);
+  margin-left: calc(-0.5 * var(--bs-popover-arrow-width));
+  content: "";
+  border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);
+}
+
+/* rtl:begin:ignore */
+.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {
+  right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));
+  width: var(--bs-popover-arrow-height);
+  height: var(--bs-popover-arrow-width);
+}
+.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {
+  border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);
+}
+.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {
+  right: 0;
+  border-left-color: var(--bs-popover-arrow-border);
+}
+.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {
+  right: var(--bs-popover-border-width);
+  border-left-color: var(--bs-popover-bg);
+}
+
+/* rtl:end:ignore */
+.popover-header {
+  padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);
+  margin-bottom: 0;
+  font-size: var(--bs-popover-header-font-size);
+  color: var(--bs-popover-header-color);
+  background-color: var(--bs-popover-header-bg);
+  border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);
+  border-top-left-radius: var(--bs-popover-inner-border-radius);
+  border-top-right-radius: var(--bs-popover-inner-border-radius);
+}
+.popover-header:empty {
+  display: none;
+}
+
+.popover-body {
+  padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);
+  color: var(--bs-popover-body-color);
+}
+
+.carousel {
+  position: relative;
+}
+
+.carousel.pointer-event {
+  touch-action: pan-y;
+}
+
+.carousel-inner {
+  position: relative;
+  width: 100%;
+  overflow: hidden;
+}
+.carousel-inner::after {
+  display: block;
+  clear: both;
+  content: "";
+}
+
+.carousel-item {
+  position: relative;
+  display: none;
+  float: left;
+  width: 100%;
+  margin-right: -100%;
+  -webkit-backface-visibility: hidden;
+          backface-visibility: hidden;
+  transition: transform 0.6s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-item {
+    transition: none;
+  }
+}
+
+.carousel-item.active,
+.carousel-item-next,
+.carousel-item-prev {
+  display: block;
+}
+
+.carousel-item-next:not(.carousel-item-start),
+.active.carousel-item-end {
+  transform: translateX(100%);
+}
+
+.carousel-item-prev:not(.carousel-item-end),
+.active.carousel-item-start {
+  transform: translateX(-100%);
+}
+
+.carousel-fade .carousel-item {
+  opacity: 0;
+  transition-property: opacity;
+  transform: none;
+}
+.carousel-fade .carousel-item.active,
+.carousel-fade .carousel-item-next.carousel-item-start,
+.carousel-fade .carousel-item-prev.carousel-item-end {
+  z-index: 1;
+  opacity: 1;
+}
+.carousel-fade .active.carousel-item-start,
+.carousel-fade .active.carousel-item-end {
+  z-index: 0;
+  opacity: 0;
+  transition: opacity 0s 0.6s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-fade .active.carousel-item-start,
+  .carousel-fade .active.carousel-item-end {
+    transition: none;
+  }
+}
+
+.carousel-control-prev,
+.carousel-control-next {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  z-index: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 15%;
+  padding: 0;
+  color: #fff;
+  text-align: center;
+  background: none;
+  border: 0;
+  opacity: 0.5;
+  transition: opacity 0.15s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-control-prev,
+  .carousel-control-next {
+    transition: none;
+  }
+}
+.carousel-control-prev:hover, .carousel-control-prev:focus,
+.carousel-control-next:hover,
+.carousel-control-next:focus {
+  color: #fff;
+  text-decoration: none;
+  outline: 0;
+  opacity: 0.9;
+}
+
+.carousel-control-prev {
+  left: 0;
+}
+
+.carousel-control-next {
+  right: 0;
+}
+
+.carousel-control-prev-icon,
+.carousel-control-next-icon {
+  display: inline-block;
+  width: 2rem;
+  height: 2rem;
+  background-repeat: no-repeat;
+  background-position: 50%;
+  background-size: 100% 100%;
+}
+
+/* rtl:options: {
+  "autoRename": true,
+  "stringMap":[ {
+    "name"    : "prev-next",
+    "search"  : "prev",
+    "replace" : "next"
+  } ]
+} */
+.carousel-control-prev-icon {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e");
+}
+
+.carousel-control-next-icon {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+}
+
+.carousel-indicators {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 2;
+  display: flex;
+  justify-content: center;
+  padding: 0;
+  margin-right: 15%;
+  margin-bottom: 1rem;
+  margin-left: 15%;
+  list-style: none;
+}
+.carousel-indicators [data-bs-target] {
+  box-sizing: content-box;
+  flex: 0 1 auto;
+  width: 30px;
+  height: 3px;
+  padding: 0;
+  margin-right: 3px;
+  margin-left: 3px;
+  text-indent: -999px;
+  cursor: pointer;
+  background-color: #fff;
+  background-clip: padding-box;
+  border: 0;
+  border-top: 10px solid transparent;
+  border-bottom: 10px solid transparent;
+  opacity: 0.5;
+  transition: opacity 0.6s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-indicators [data-bs-target] {
+    transition: none;
+  }
+}
+.carousel-indicators .active {
+  opacity: 1;
+}
+
+.carousel-caption {
+  position: absolute;
+  right: 15%;
+  bottom: 1.25rem;
+  left: 15%;
+  padding-top: 1.25rem;
+  padding-bottom: 1.25rem;
+  color: #fff;
+  text-align: center;
+}
+
+.carousel-dark .carousel-control-prev-icon,
+.carousel-dark .carousel-control-next-icon {
+  filter: invert(1) grayscale(100);
+}
+.carousel-dark .carousel-indicators [data-bs-target] {
+  background-color: #000;
+}
+.carousel-dark .carousel-caption {
+  color: #000;
+}
+
+.spinner-grow,
+.spinner-border {
+  display: inline-block;
+  width: var(--bs-spinner-width);
+  height: var(--bs-spinner-height);
+  vertical-align: var(--bs-spinner-vertical-align);
+  border-radius: 50%;
+  animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);
+}
+
+@keyframes spinner-border {
+  to {
+    transform: rotate(360deg) /* rtl:ignore */;
+  }
+}
+.spinner-border {
+  --bs-spinner-width: 2rem;
+  --bs-spinner-height: 2rem;
+  --bs-spinner-vertical-align: -0.125em;
+  --bs-spinner-border-width: 0.25em;
+  --bs-spinner-animation-speed: 0.75s;
+  --bs-spinner-animation-name: spinner-border;
+  border: var(--bs-spinner-border-width) solid currentcolor;
+  border-right-color: transparent;
+}
+
+.spinner-border-sm {
+  --bs-spinner-width: 1rem;
+  --bs-spinner-height: 1rem;
+  --bs-spinner-border-width: 0.2em;
+}
+
+@keyframes spinner-grow {
+  0% {
+    transform: scale(0);
+  }
+  50% {
+    opacity: 1;
+    transform: none;
+  }
+}
+.spinner-grow {
+  --bs-spinner-width: 2rem;
+  --bs-spinner-height: 2rem;
+  --bs-spinner-vertical-align: -0.125em;
+  --bs-spinner-animation-speed: 0.75s;
+  --bs-spinner-animation-name: spinner-grow;
+  background-color: currentcolor;
+  opacity: 0;
+}
+
+.spinner-grow-sm {
+  --bs-spinner-width: 1rem;
+  --bs-spinner-height: 1rem;
+}
+
+@media (prefers-reduced-motion: reduce) {
+  .spinner-border,
+  .spinner-grow {
+    --bs-spinner-animation-speed: 1.5s;
+  }
+}
+.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {
+  --bs-offcanvas-zindex: 1045;
+  --bs-offcanvas-width: 400px;
+  --bs-offcanvas-height: 30vh;
+  --bs-offcanvas-padding-x: 1rem;
+  --bs-offcanvas-padding-y: 1rem;
+  --bs-offcanvas-color: ;
+  --bs-offcanvas-bg: #fff;
+  --bs-offcanvas-border-width: 1px;
+  --bs-offcanvas-border-color: var(--bs-border-color-translucent);
+  --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
+}
+
+@media (max-width: 575.98px) {
+  .offcanvas-sm {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--bs-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--bs-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--bs-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    transition: transform 0.3s ease-in-out;
+  }
+}
+@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-sm {
+    transition: none;
+  }
+}
+@media (max-width: 575.98px) {
+  .offcanvas-sm.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--bs-offcanvas-width);
+    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+}
+@media (max-width: 575.98px) {
+  .offcanvas-sm.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--bs-offcanvas-width);
+    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+}
+@media (max-width: 575.98px) {
+  .offcanvas-sm.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+}
+@media (max-width: 575.98px) {
+  .offcanvas-sm.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+}
+@media (max-width: 575.98px) {
+  .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {
+    transform: none;
+  }
+}
+@media (max-width: 575.98px) {
+  .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 576px) {
+  .offcanvas-sm {
+    --bs-offcanvas-height: auto;
+    --bs-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-sm .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-sm .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 767.98px) {
+  .offcanvas-md {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--bs-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--bs-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--bs-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    transition: transform 0.3s ease-in-out;
+  }
+}
+@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-md {
+    transition: none;
+  }
+}
+@media (max-width: 767.98px) {
+  .offcanvas-md.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--bs-offcanvas-width);
+    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+}
+@media (max-width: 767.98px) {
+  .offcanvas-md.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--bs-offcanvas-width);
+    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+}
+@media (max-width: 767.98px) {
+  .offcanvas-md.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+}
+@media (max-width: 767.98px) {
+  .offcanvas-md.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+}
+@media (max-width: 767.98px) {
+  .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {
+    transform: none;
+  }
+}
+@media (max-width: 767.98px) {
+  .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 768px) {
+  .offcanvas-md {
+    --bs-offcanvas-height: auto;
+    --bs-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-md .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-md .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 991.98px) {
+  .offcanvas-lg {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--bs-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--bs-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--bs-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    transition: transform 0.3s ease-in-out;
+  }
+}
+@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-lg {
+    transition: none;
+  }
+}
+@media (max-width: 991.98px) {
+  .offcanvas-lg.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--bs-offcanvas-width);
+    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+}
+@media (max-width: 991.98px) {
+  .offcanvas-lg.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--bs-offcanvas-width);
+    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+}
+@media (max-width: 991.98px) {
+  .offcanvas-lg.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+}
+@media (max-width: 991.98px) {
+  .offcanvas-lg.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+}
+@media (max-width: 991.98px) {
+  .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {
+    transform: none;
+  }
+}
+@media (max-width: 991.98px) {
+  .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 992px) {
+  .offcanvas-lg {
+    --bs-offcanvas-height: auto;
+    --bs-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-lg .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-lg .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 1199.98px) {
+  .offcanvas-xl {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--bs-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--bs-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--bs-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    transition: transform 0.3s ease-in-out;
+  }
+}
+@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-xl {
+    transition: none;
+  }
+}
+@media (max-width: 1199.98px) {
+  .offcanvas-xl.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--bs-offcanvas-width);
+    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+}
+@media (max-width: 1199.98px) {
+  .offcanvas-xl.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--bs-offcanvas-width);
+    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+}
+@media (max-width: 1199.98px) {
+  .offcanvas-xl.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+}
+@media (max-width: 1199.98px) {
+  .offcanvas-xl.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+}
+@media (max-width: 1199.98px) {
+  .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {
+    transform: none;
+  }
+}
+@media (max-width: 1199.98px) {
+  .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 1200px) {
+  .offcanvas-xl {
+    --bs-offcanvas-height: auto;
+    --bs-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-xl .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-xl .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--bs-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--bs-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--bs-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    transition: transform 0.3s ease-in-out;
+  }
+}
+@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-xxl {
+    transition: none;
+  }
+}
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--bs-offcanvas-width);
+    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+}
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--bs-offcanvas-width);
+    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+}
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+}
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--bs-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+}
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {
+    transform: none;
+  }
+}
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 1400px) {
+  .offcanvas-xxl {
+    --bs-offcanvas-height: auto;
+    --bs-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-xxl .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-xxl .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+.offcanvas {
+  position: fixed;
+  bottom: 0;
+  z-index: var(--bs-offcanvas-zindex);
+  display: flex;
+  flex-direction: column;
+  max-width: 100%;
+  color: var(--bs-offcanvas-color);
+  visibility: hidden;
+  background-color: var(--bs-offcanvas-bg);
+  background-clip: padding-box;
+  outline: 0;
+  transition: transform 0.3s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .offcanvas {
+    transition: none;
+  }
+}
+.offcanvas.offcanvas-start {
+  top: 0;
+  left: 0;
+  width: var(--bs-offcanvas-width);
+  border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+  transform: translateX(-100%);
+}
+.offcanvas.offcanvas-end {
+  top: 0;
+  right: 0;
+  width: var(--bs-offcanvas-width);
+  border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+  transform: translateX(100%);
+}
+.offcanvas.offcanvas-top {
+  top: 0;
+  right: 0;
+  left: 0;
+  height: var(--bs-offcanvas-height);
+  max-height: 100%;
+  border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+  transform: translateY(-100%);
+}
+.offcanvas.offcanvas-bottom {
+  right: 0;
+  left: 0;
+  height: var(--bs-offcanvas-height);
+  max-height: 100%;
+  border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
+  transform: translateY(100%);
+}
+.offcanvas.showing, .offcanvas.show:not(.hiding) {
+  transform: none;
+}
+.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {
+  visibility: visible;
+}
+
+.offcanvas-backdrop {
+  position: fixed;
+  top: 0;
+  left: 0;
+  z-index: 1040;
+  width: 100vw;
+  height: 100vh;
+  background-color: #000;
+}
+.offcanvas-backdrop.fade {
+  opacity: 0;
+}
+.offcanvas-backdrop.show {
+  opacity: 0.5;
+}
+
+.offcanvas-header {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);
+}
+.offcanvas-header .btn-close {
+  padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);
+  margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));
+  margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));
+  margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));
+}
+
+.offcanvas-title {
+  margin-bottom: 0;
+  line-height: 1.5;
+}
+
+.offcanvas-body {
+  flex-grow: 1;
+  padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);
+  overflow-y: auto;
+}
+
+.placeholder {
+  display: inline-block;
+  min-height: 1em;
+  vertical-align: middle;
+  cursor: wait;
+  background-color: currentcolor;
+  opacity: 0.5;
+}
+.placeholder.btn::before {
+  display: inline-block;
+  content: "";
+}
+
+.placeholder-xs {
+  min-height: 0.6em;
+}
+
+.placeholder-sm {
+  min-height: 0.8em;
+}
+
+.placeholder-lg {
+  min-height: 1.2em;
+}
+
+.placeholder-glow .placeholder {
+  animation: placeholder-glow 2s ease-in-out infinite;
+}
+
+@keyframes placeholder-glow {
+  50% {
+    opacity: 0.2;
+  }
+}
+.placeholder-wave {
+  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);
+          mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);
+  -webkit-mask-size: 200% 100%;
+          mask-size: 200% 100%;
+  animation: placeholder-wave 2s linear infinite;
+}
+
+@keyframes placeholder-wave {
+  100% {
+    -webkit-mask-position: -200% 0%;
+            mask-position: -200% 0%;
+  }
+}
+.clearfix::after {
+  display: block;
+  clear: both;
+  content: "";
+}
+
+.text-bg-primary {
+  color: #fff !important;
+  background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;
+}
+
+.text-bg-secondary {
+  color: #fff !important;
+  background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;
+}
+
+.text-bg-success {
+  color: #fff !important;
+  background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;
+}
+
+.text-bg-info {
+  color: #000 !important;
+  background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;
+}
+
+.text-bg-warning {
+  color: #000 !important;
+  background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;
+}
+
+.text-bg-danger {
+  color: #fff !important;
+  background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;
+}
+
+.text-bg-light {
+  color: #000 !important;
+  background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;
+}
+
+.text-bg-dark {
+  color: #fff !important;
+  background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;
+}
+
+.link-primary {
+  color: #0d6efd !important;
+}
+.link-primary:hover, .link-primary:focus {
+  color: #0a58ca !important;
+}
+
+.link-secondary {
+  color: #6c757d !important;
+}
+.link-secondary:hover, .link-secondary:focus {
+  color: #565e64 !important;
+}
+
+.link-success {
+  color: #198754 !important;
+}
+.link-success:hover, .link-success:focus {
+  color: #146c43 !important;
+}
+
+.link-info {
+  color: #0dcaf0 !important;
+}
+.link-info:hover, .link-info:focus {
+  color: #3dd5f3 !important;
+}
+
+.link-warning {
+  color: #ffc107 !important;
+}
+.link-warning:hover, .link-warning:focus {
+  color: #ffcd39 !important;
+}
+
+.link-danger {
+  color: #dc3545 !important;
+}
+.link-danger:hover, .link-danger:focus {
+  color: #b02a37 !important;
+}
+
+.link-light {
+  color: #f8f9fa !important;
+}
+.link-light:hover, .link-light:focus {
+  color: #f9fafb !important;
+}
+
+.link-dark {
+  color: #212529 !important;
+}
+.link-dark:hover, .link-dark:focus {
+  color: #1a1e21 !important;
+}
+
+.ratio {
+  position: relative;
+  width: 100%;
+}
+.ratio::before {
+  display: block;
+  padding-top: var(--bs-aspect-ratio);
+  content: "";
+}
+.ratio > * {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+}
+
+.ratio-1x1 {
+  --bs-aspect-ratio: 100%;
+}
+
+.ratio-4x3 {
+  --bs-aspect-ratio: 75%;
+}
+
+.ratio-16x9 {
+  --bs-aspect-ratio: 56.25%;
+}
+
+.ratio-21x9 {
+  --bs-aspect-ratio: 42.8571428571%;
+}
+
+.fixed-top {
+  position: fixed;
+  top: 0;
+  right: 0;
+  left: 0;
+  z-index: 1030;
+}
+
+.fixed-bottom {
+  position: fixed;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1030;
+}
+
+.sticky-top {
+  position: sticky;
+  top: 0;
+  z-index: 1020;
+}
+
+.sticky-bottom {
+  position: sticky;
+  bottom: 0;
+  z-index: 1020;
+}
+
+@media (min-width: 576px) {
+  .sticky-sm-top {
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-sm-bottom {
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 768px) {
+  .sticky-md-top {
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-md-bottom {
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 992px) {
+  .sticky-lg-top {
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-lg-bottom {
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 1200px) {
+  .sticky-xl-top {
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-xl-bottom {
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 1400px) {
+  .sticky-xxl-top {
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-xxl-bottom {
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+.hstack {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  align-self: stretch;
+}
+
+.vstack {
+  display: flex;
+  flex: 1 1 auto;
+  flex-direction: column;
+  align-self: stretch;
+}
+
+.visually-hidden,
+.visually-hidden-focusable:not(:focus):not(:focus-within) {
+  position: absolute !important;
+  width: 1px !important;
+  height: 1px !important;
+  padding: 0 !important;
+  margin: -1px !important;
+  overflow: hidden !important;
+  clip: rect(0, 0, 0, 0) !important;
+  white-space: nowrap !important;
+  border: 0 !important;
+}
+
+.stretched-link::after {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1;
+  content: "";
+}
+
+.text-truncate {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.vr {
+  display: inline-block;
+  align-self: stretch;
+  width: 1px;
+  min-height: 1em;
+  background-color: currentcolor;
+  opacity: 0.25;
+}
+
+.align-baseline {
+  vertical-align: baseline !important;
+}
+
+.align-top {
+  vertical-align: top !important;
+}
+
+.align-middle {
+  vertical-align: middle !important;
+}
+
+.align-bottom {
+  vertical-align: bottom !important;
+}
+
+.align-text-bottom {
+  vertical-align: text-bottom !important;
+}
+
+.align-text-top {
+  vertical-align: text-top !important;
+}
+
+.float-start {
+  float: left !important;
+}
+
+.float-end {
+  float: right !important;
+}
+
+.float-none {
+  float: none !important;
+}
+
+.opacity-0 {
+  opacity: 0 !important;
+}
+
+.opacity-25 {
+  opacity: 0.25 !important;
+}
+
+.opacity-50 {
+  opacity: 0.5 !important;
+}
+
+.opacity-75 {
+  opacity: 0.75 !important;
+}
+
+.opacity-100 {
+  opacity: 1 !important;
+}
+
+.overflow-auto {
+  overflow: auto !important;
+}
+
+.overflow-hidden {
+  overflow: hidden !important;
+}
+
+.overflow-visible {
+  overflow: visible !important;
+}
+
+.overflow-scroll {
+  overflow: scroll !important;
+}
+
+.d-inline {
+  display: inline !important;
+}
+
+.d-inline-block {
+  display: inline-block !important;
+}
+
+.d-block {
+  display: block !important;
+}
+
+.d-grid {
+  display: grid !important;
+}
+
+.d-table {
+  display: table !important;
+}
+
+.d-table-row {
+  display: table-row !important;
+}
+
+.d-table-cell {
+  display: table-cell !important;
+}
+
+.d-flex {
+  display: flex !important;
+}
+
+.d-inline-flex {
+  display: inline-flex !important;
+}
+
+.d-none {
+  display: none !important;
+}
+
+.shadow {
+  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
+}
+
+.shadow-sm {
+  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
+}
+
+.shadow-lg {
+  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
+}
+
+.shadow-none {
+  box-shadow: none !important;
+}
+
+.position-static {
+  position: static !important;
+}
+
+.position-relative {
+  position: relative !important;
+}
+
+.position-absolute {
+  position: absolute !important;
+}
+
+.position-fixed {
+  position: fixed !important;
+}
+
+.position-sticky {
+  position: sticky !important;
+}
+
+.top-0 {
+  top: 0 !important;
+}
+
+.top-50 {
+  top: 50% !important;
+}
+
+.top-100 {
+  top: 100% !important;
+}
+
+.bottom-0 {
+  bottom: 0 !important;
+}
+
+.bottom-50 {
+  bottom: 50% !important;
+}
+
+.bottom-100 {
+  bottom: 100% !important;
+}
+
+.start-0 {
+  left: 0 !important;
+}
+
+.start-50 {
+  left: 50% !important;
+}
+
+.start-100 {
+  left: 100% !important;
+}
+
+.end-0 {
+  right: 0 !important;
+}
+
+.end-50 {
+  right: 50% !important;
+}
+
+.end-100 {
+  right: 100% !important;
+}
+
+.translate-middle {
+  transform: translate(-50%, -50%) !important;
+}
+
+.translate-middle-x {
+  transform: translateX(-50%) !important;
+}
+
+.translate-middle-y {
+  transform: translateY(-50%) !important;
+}
+
+.border {
+  border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
+}
+
+.border-0 {
+  border: 0 !important;
+}
+
+.border-top {
+  border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
+}
+
+.border-top-0 {
+  border-top: 0 !important;
+}
+
+.border-end {
+  border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
+}
+
+.border-end-0 {
+  border-right: 0 !important;
+}
+
+.border-bottom {
+  border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
+}
+
+.border-bottom-0 {
+  border-bottom: 0 !important;
+}
+
+.border-start {
+  border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
+}
+
+.border-start-0 {
+  border-left: 0 !important;
+}
+
+.border-primary {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-secondary {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-success {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-info {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-warning {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-danger {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-light {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-dark {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-white {
+  --bs-border-opacity: 1;
+  border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;
+}
+
+.border-1 {
+  --bs-border-width: 1px;
+}
+
+.border-2 {
+  --bs-border-width: 2px;
+}
+
+.border-3 {
+  --bs-border-width: 3px;
+}
+
+.border-4 {
+  --bs-border-width: 4px;
+}
+
+.border-5 {
+  --bs-border-width: 5px;
+}
+
+.border-opacity-10 {
+  --bs-border-opacity: 0.1;
+}
+
+.border-opacity-25 {
+  --bs-border-opacity: 0.25;
+}
+
+.border-opacity-50 {
+  --bs-border-opacity: 0.5;
+}
+
+.border-opacity-75 {
+  --bs-border-opacity: 0.75;
+}
+
+.border-opacity-100 {
+  --bs-border-opacity: 1;
+}
+
+.w-25 {
+  width: 25% !important;
+}
+
+.w-50 {
+  width: 50% !important;
+}
+
+.w-75 {
+  width: 75% !important;
+}
+
+.w-100 {
+  width: 100% !important;
+}
+
+.w-auto {
+  width: auto !important;
+}
+
+.mw-100 {
+  max-width: 100% !important;
+}
+
+.vw-100 {
+  width: 100vw !important;
+}
+
+.min-vw-100 {
+  min-width: 100vw !important;
+}
+
+.h-25 {
+  height: 25% !important;
+}
+
+.h-50 {
+  height: 50% !important;
+}
+
+.h-75 {
+  height: 75% !important;
+}
+
+.h-100 {
+  height: 100% !important;
+}
+
+.h-auto {
+  height: auto !important;
+}
+
+.mh-100 {
+  max-height: 100% !important;
+}
+
+.vh-100 {
+  height: 100vh !important;
+}
+
+.min-vh-100 {
+  min-height: 100vh !important;
+}
+
+.flex-fill {
+  flex: 1 1 auto !important;
+}
+
+.flex-row {
+  flex-direction: row !important;
+}
+
+.flex-column {
+  flex-direction: column !important;
+}
+
+.flex-row-reverse {
+  flex-direction: row-reverse !important;
+}
+
+.flex-column-reverse {
+  flex-direction: column-reverse !important;
+}
+
+.flex-grow-0 {
+  flex-grow: 0 !important;
+}
+
+.flex-grow-1 {
+  flex-grow: 1 !important;
+}
+
+.flex-shrink-0 {
+  flex-shrink: 0 !important;
+}
+
+.flex-shrink-1 {
+  flex-shrink: 1 !important;
+}
+
+.flex-wrap {
+  flex-wrap: wrap !important;
+}
+
+.flex-nowrap {
+  flex-wrap: nowrap !important;
+}
+
+.flex-wrap-reverse {
+  flex-wrap: wrap-reverse !important;
+}
+
+.justify-content-start {
+  justify-content: flex-start !important;
+}
+
+.justify-content-end {
+  justify-content: flex-end !important;
+}
+
+.justify-content-center {
+  justify-content: center !important;
+}
+
+.justify-content-between {
+  justify-content: space-between !important;
+}
+
+.justify-content-around {
+  justify-content: space-around !important;
+}
+
+.justify-content-evenly {
+  justify-content: space-evenly !important;
+}
+
+.align-items-start {
+  align-items: flex-start !important;
+}
+
+.align-items-end {
+  align-items: flex-end !important;
+}
+
+.align-items-center {
+  align-items: center !important;
+}
+
+.align-items-baseline {
+  align-items: baseline !important;
+}
+
+.align-items-stretch {
+  align-items: stretch !important;
+}
+
+.align-content-start {
+  align-content: flex-start !important;
+}
+
+.align-content-end {
+  align-content: flex-end !important;
+}
+
+.align-content-center {
+  align-content: center !important;
+}
+
+.align-content-between {
+  align-content: space-between !important;
+}
+
+.align-content-around {
+  align-content: space-around !important;
+}
+
+.align-content-stretch {
+  align-content: stretch !important;
+}
+
+.align-self-auto {
+  align-self: auto !important;
+}
+
+.align-self-start {
+  align-self: flex-start !important;
+}
+
+.align-self-end {
+  align-self: flex-end !important;
+}
+
+.align-self-center {
+  align-self: center !important;
+}
+
+.align-self-baseline {
+  align-self: baseline !important;
+}
+
+.align-self-stretch {
+  align-self: stretch !important;
+}
+
+.order-first {
+  order: -1 !important;
+}
+
+.order-0 {
+  order: 0 !important;
+}
+
+.order-1 {
+  order: 1 !important;
+}
+
+.order-2 {
+  order: 2 !important;
+}
+
+.order-3 {
+  order: 3 !important;
+}
+
+.order-4 {
+  order: 4 !important;
+}
+
+.order-5 {
+  order: 5 !important;
+}
+
+.order-last {
+  order: 6 !important;
+}
+
+.m-0 {
+  margin: 0 !important;
+}
+
+.m-1 {
+  margin: 0.25rem !important;
+}
+
+.m-2 {
+  margin: 0.5rem !important;
+}
+
+.m-3 {
+  margin: 1rem !important;
+}
+
+.m-4 {
+  margin: 1.5rem !important;
+}
+
+.m-5 {
+  margin: 3rem !important;
+}
+
+.m-auto {
+  margin: auto !important;
+}
+
+.mx-0 {
+  margin-right: 0 !important;
+  margin-left: 0 !important;
+}
+
+.mx-1 {
+  margin-right: 0.25rem !important;
+  margin-left: 0.25rem !important;
+}
+
+.mx-2 {
+  margin-right: 0.5rem !important;
+  margin-left: 0.5rem !important;
+}
+
+.mx-3 {
+  margin-right: 1rem !important;
+  margin-left: 1rem !important;
+}
+
+.mx-4 {
+  margin-right: 1.5rem !important;
+  margin-left: 1.5rem !important;
+}
+
+.mx-5 {
+  margin-right: 3rem !important;
+  margin-left: 3rem !important;
+}
+
+.mx-auto {
+  margin-right: auto !important;
+  margin-left: auto !important;
+}
+
+.my-0 {
+  margin-top: 0 !important;
+  margin-bottom: 0 !important;
+}
+
+.my-1 {
+  margin-top: 0.25rem !important;
+  margin-bottom: 0.25rem !important;
+}
+
+.my-2 {
+  margin-top: 0.5rem !important;
+  margin-bottom: 0.5rem !important;
+}
+
+.my-3 {
+  margin-top: 1rem !important;
+  margin-bottom: 1rem !important;
+}
+
+.my-4 {
+  margin-top: 1.5rem !important;
+  margin-bottom: 1.5rem !important;
+}
+
+.my-5 {
+  margin-top: 3rem !important;
+  margin-bottom: 3rem !important;
+}
+
+.my-auto {
+  margin-top: auto !important;
+  margin-bottom: auto !important;
+}
+
+.mt-0 {
+  margin-top: 0 !important;
+}
+
+.mt-1 {
+  margin-top: 0.25rem !important;
+}
+
+.mt-2 {
+  margin-top: 0.5rem !important;
+}
+
+.mt-3 {
+  margin-top: 1rem !important;
+}
+
+.mt-4 {
+  margin-top: 1.5rem !important;
+}
+
+.mt-5 {
+  margin-top: 3rem !important;
+}
+
+.mt-auto {
+  margin-top: auto !important;
+}
+
+.me-0 {
+  margin-right: 0 !important;
+}
+
+.me-1 {
+  margin-right: 0.25rem !important;
+}
+
+.me-2 {
+  margin-right: 0.5rem !important;
+}
+
+.me-3 {
+  margin-right: 1rem !important;
+}
+
+.me-4 {
+  margin-right: 1.5rem !important;
+}
+
+.me-5 {
+  margin-right: 3rem !important;
+}
+
+.me-auto {
+  margin-right: auto !important;
+}
+
+.mb-0 {
+  margin-bottom: 0 !important;
+}
+
+.mb-1 {
+  margin-bottom: 0.25rem !important;
+}
+
+.mb-2 {
+  margin-bottom: 0.5rem !important;
+}
+
+.mb-3 {
+  margin-bottom: 1rem !important;
+}
+
+.mb-4 {
+  margin-bottom: 1.5rem !important;
+}
+
+.mb-5 {
+  margin-bottom: 3rem !important;
+}
+
+.mb-auto {
+  margin-bottom: auto !important;
+}
+
+.ms-0 {
+  margin-left: 0 !important;
+}
+
+.ms-1 {
+  margin-left: 0.25rem !important;
+}
+
+.ms-2 {
+  margin-left: 0.5rem !important;
+}
+
+.ms-3 {
+  margin-left: 1rem !important;
+}
+
+.ms-4 {
+  margin-left: 1.5rem !important;
+}
+
+.ms-5 {
+  margin-left: 3rem !important;
+}
+
+.ms-auto {
+  margin-left: auto !important;
+}
+
+.p-0 {
+  padding: 0 !important;
+}
+
+.p-1 {
+  padding: 0.25rem !important;
+}
+
+.p-2 {
+  padding: 0.5rem !important;
+}
+
+.p-3 {
+  padding: 1rem !important;
+}
+
+.p-4 {
+  padding: 1.5rem !important;
+}
+
+.p-5 {
+  padding: 3rem !important;
+}
+
+.px-0 {
+  padding-right: 0 !important;
+  padding-left: 0 !important;
+}
+
+.px-1 {
+  padding-right: 0.25rem !important;
+  padding-left: 0.25rem !important;
+}
+
+.px-2 {
+  padding-right: 0.5rem !important;
+  padding-left: 0.5rem !important;
+}
+
+.px-3 {
+  padding-right: 1rem !important;
+  padding-left: 1rem !important;
+}
+
+.px-4 {
+  padding-right: 1.5rem !important;
+  padding-left: 1.5rem !important;
+}
+
+.px-5 {
+  padding-right: 3rem !important;
+  padding-left: 3rem !important;
+}
+
+.py-0 {
+  padding-top: 0 !important;
+  padding-bottom: 0 !important;
+}
+
+.py-1 {
+  padding-top: 0.25rem !important;
+  padding-bottom: 0.25rem !important;
+}
+
+.py-2 {
+  padding-top: 0.5rem !important;
+  padding-bottom: 0.5rem !important;
+}
+
+.py-3 {
+  padding-top: 1rem !important;
+  padding-bottom: 1rem !important;
+}
+
+.py-4 {
+  padding-top: 1.5rem !important;
+  padding-bottom: 1.5rem !important;
+}
+
+.py-5 {
+  padding-top: 3rem !important;
+  padding-bottom: 3rem !important;
+}
+
+.pt-0 {
+  padding-top: 0 !important;
+}
+
+.pt-1 {
+  padding-top: 0.25rem !important;
+}
+
+.pt-2 {
+  padding-top: 0.5rem !important;
+}
+
+.pt-3 {
+  padding-top: 1rem !important;
+}
+
+.pt-4 {
+  padding-top: 1.5rem !important;
+}
+
+.pt-5 {
+  padding-top: 3rem !important;
+}
+
+.pe-0 {
+  padding-right: 0 !important;
+}
+
+.pe-1 {
+  padding-right: 0.25rem !important;
+}
+
+.pe-2 {
+  padding-right: 0.5rem !important;
+}
+
+.pe-3 {
+  padding-right: 1rem !important;
+}
+
+.pe-4 {
+  padding-right: 1.5rem !important;
+}
+
+.pe-5 {
+  padding-right: 3rem !important;
+}
+
+.pb-0 {
+  padding-bottom: 0 !important;
+}
+
+.pb-1 {
+  padding-bottom: 0.25rem !important;
+}
+
+.pb-2 {
+  padding-bottom: 0.5rem !important;
+}
+
+.pb-3 {
+  padding-bottom: 1rem !important;
+}
+
+.pb-4 {
+  padding-bottom: 1.5rem !important;
+}
+
+.pb-5 {
+  padding-bottom: 3rem !important;
+}
+
+.ps-0 {
+  padding-left: 0 !important;
+}
+
+.ps-1 {
+  padding-left: 0.25rem !important;
+}
+
+.ps-2 {
+  padding-left: 0.5rem !important;
+}
+
+.ps-3 {
+  padding-left: 1rem !important;
+}
+
+.ps-4 {
+  padding-left: 1.5rem !important;
+}
+
+.ps-5 {
+  padding-left: 3rem !important;
+}
+
+.gap-0 {
+  gap: 0 !important;
+}
+
+.gap-1 {
+  gap: 0.25rem !important;
+}
+
+.gap-2 {
+  gap: 0.5rem !important;
+}
+
+.gap-3 {
+  gap: 1rem !important;
+}
+
+.gap-4 {
+  gap: 1.5rem !important;
+}
+
+.gap-5 {
+  gap: 3rem !important;
+}
+
+.font-monospace {
+  font-family: var(--bs-font-monospace) !important;
+}
+
+.fs-1 {
+  font-size: calc(1.375rem + 1.5vw) !important;
+}
+
+.fs-2 {
+  font-size: calc(1.325rem + 0.9vw) !important;
+}
+
+.fs-3 {
+  font-size: calc(1.3rem + 0.6vw) !important;
+}
+
+.fs-4 {
+  font-size: calc(1.275rem + 0.3vw) !important;
+}
+
+.fs-5 {
+  font-size: 1.25rem !important;
+}
+
+.fs-6 {
+  font-size: 1rem !important;
+}
+
+.fst-italic {
+  font-style: italic !important;
+}
+
+.fst-normal {
+  font-style: normal !important;
+}
+
+.fw-light {
+  font-weight: 300 !important;
+}
+
+.fw-lighter {
+  font-weight: lighter !important;
+}
+
+.fw-normal {
+  font-weight: 400 !important;
+}
+
+.fw-bold {
+  font-weight: 700 !important;
+}
+
+.fw-semibold {
+  font-weight: 600 !important;
+}
+
+.fw-bolder {
+  font-weight: bolder !important;
+}
+
+.lh-1 {
+  line-height: 1 !important;
+}
+
+.lh-sm {
+  line-height: 1.25 !important;
+}
+
+.lh-base {
+  line-height: 1.5 !important;
+}
+
+.lh-lg {
+  line-height: 2 !important;
+}
+
+.text-start {
+  text-align: left !important;
+}
+
+.text-end {
+  text-align: right !important;
+}
+
+.text-center {
+  text-align: center !important;
+}
+
+.text-decoration-none {
+  text-decoration: none !important;
+}
+
+.text-decoration-underline {
+  text-decoration: underline !important;
+}
+
+.text-decoration-line-through {
+  text-decoration: line-through !important;
+}
+
+.text-lowercase {
+  text-transform: lowercase !important;
+}
+
+.text-uppercase {
+  text-transform: uppercase !important;
+}
+
+.text-capitalize {
+  text-transform: capitalize !important;
+}
+
+.text-wrap {
+  white-space: normal !important;
+}
+
+.text-nowrap {
+  white-space: nowrap !important;
+}
+
+/* rtl:begin:remove */
+.text-break {
+  word-wrap: break-word !important;
+  word-break: break-word !important;
+}
+
+/* rtl:end:remove */
+.text-primary {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-secondary {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-success {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-info {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-warning {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-danger {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-light {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-dark {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-black {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-white {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-body {
+  --bs-text-opacity: 1;
+  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;
+}
+
+.text-muted {
+  --bs-text-opacity: 1;
+  color: #6c757d !important;
+}
+
+.text-black-50 {
+  --bs-text-opacity: 1;
+  color: rgba(0, 0, 0, 0.5) !important;
+}
+
+.text-white-50 {
+  --bs-text-opacity: 1;
+  color: rgba(255, 255, 255, 0.5) !important;
+}
+
+.text-reset {
+  --bs-text-opacity: 1;
+  color: inherit !important;
+}
+
+.text-opacity-25 {
+  --bs-text-opacity: 0.25;
+}
+
+.text-opacity-50 {
+  --bs-text-opacity: 0.5;
+}
+
+.text-opacity-75 {
+  --bs-text-opacity: 0.75;
+}
+
+.text-opacity-100 {
+  --bs-text-opacity: 1;
+}
+
+.bg-primary {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-secondary {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-success {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-info {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-warning {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-danger {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-light {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-dark {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-black {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-white {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-body {
+  --bs-bg-opacity: 1;
+  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-transparent {
+  --bs-bg-opacity: 1;
+  background-color: transparent !important;
+}
+
+.bg-opacity-10 {
+  --bs-bg-opacity: 0.1;
+}
+
+.bg-opacity-25 {
+  --bs-bg-opacity: 0.25;
+}
+
+.bg-opacity-50 {
+  --bs-bg-opacity: 0.5;
+}
+
+.bg-opacity-75 {
+  --bs-bg-opacity: 0.75;
+}
+
+.bg-opacity-100 {
+  --bs-bg-opacity: 1;
+}
+
+.bg-gradient {
+  background-image: var(--bs-gradient) !important;
+}
+
+.user-select-all {
+  -webkit-user-select: all !important;
+     -moz-user-select: all !important;
+          user-select: all !important;
+}
+
+.user-select-auto {
+  -webkit-user-select: auto !important;
+     -moz-user-select: auto !important;
+          user-select: auto !important;
+}
+
+.user-select-none {
+  -webkit-user-select: none !important;
+     -moz-user-select: none !important;
+          user-select: none !important;
+}
+
+.pe-none {
+  pointer-events: none !important;
+}
+
+.pe-auto {
+  pointer-events: auto !important;
+}
+
+.rounded {
+  border-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-0 {
+  border-radius: 0 !important;
+}
+
+.rounded-1 {
+  border-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-2 {
+  border-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-3 {
+  border-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-4 {
+  border-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-5 {
+  border-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-circle {
+  border-radius: 50% !important;
+}
+
+.rounded-pill {
+  border-radius: var(--bs-border-radius-pill) !important;
+}
+
+.rounded-top {
+  border-top-left-radius: var(--bs-border-radius) !important;
+  border-top-right-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-end {
+  border-top-right-radius: var(--bs-border-radius) !important;
+  border-bottom-right-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-bottom {
+  border-bottom-right-radius: var(--bs-border-radius) !important;
+  border-bottom-left-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-start {
+  border-bottom-left-radius: var(--bs-border-radius) !important;
+  border-top-left-radius: var(--bs-border-radius) !important;
+}
+
+.visible {
+  visibility: visible !important;
+}
+
+.invisible {
+  visibility: hidden !important;
+}
+
+@media (min-width: 576px) {
+  .float-sm-start {
+    float: left !important;
+  }
+  .float-sm-end {
+    float: right !important;
+  }
+  .float-sm-none {
+    float: none !important;
+  }
+  .d-sm-inline {
+    display: inline !important;
+  }
+  .d-sm-inline-block {
+    display: inline-block !important;
+  }
+  .d-sm-block {
+    display: block !important;
+  }
+  .d-sm-grid {
+    display: grid !important;
+  }
+  .d-sm-table {
+    display: table !important;
+  }
+  .d-sm-table-row {
+    display: table-row !important;
+  }
+  .d-sm-table-cell {
+    display: table-cell !important;
+  }
+  .d-sm-flex {
+    display: flex !important;
+  }
+  .d-sm-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-sm-none {
+    display: none !important;
+  }
+  .flex-sm-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-sm-row {
+    flex-direction: row !important;
+  }
+  .flex-sm-column {
+    flex-direction: column !important;
+  }
+  .flex-sm-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-sm-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-sm-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-sm-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-sm-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-sm-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-sm-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-sm-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-sm-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-sm-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-sm-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-sm-center {
+    justify-content: center !important;
+  }
+  .justify-content-sm-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-sm-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-sm-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-sm-start {
+    align-items: flex-start !important;
+  }
+  .align-items-sm-end {
+    align-items: flex-end !important;
+  }
+  .align-items-sm-center {
+    align-items: center !important;
+  }
+  .align-items-sm-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-sm-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-sm-start {
+    align-content: flex-start !important;
+  }
+  .align-content-sm-end {
+    align-content: flex-end !important;
+  }
+  .align-content-sm-center {
+    align-content: center !important;
+  }
+  .align-content-sm-between {
+    align-content: space-between !important;
+  }
+  .align-content-sm-around {
+    align-content: space-around !important;
+  }
+  .align-content-sm-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-sm-auto {
+    align-self: auto !important;
+  }
+  .align-self-sm-start {
+    align-self: flex-start !important;
+  }
+  .align-self-sm-end {
+    align-self: flex-end !important;
+  }
+  .align-self-sm-center {
+    align-self: center !important;
+  }
+  .align-self-sm-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-sm-stretch {
+    align-self: stretch !important;
+  }
+  .order-sm-first {
+    order: -1 !important;
+  }
+  .order-sm-0 {
+    order: 0 !important;
+  }
+  .order-sm-1 {
+    order: 1 !important;
+  }
+  .order-sm-2 {
+    order: 2 !important;
+  }
+  .order-sm-3 {
+    order: 3 !important;
+  }
+  .order-sm-4 {
+    order: 4 !important;
+  }
+  .order-sm-5 {
+    order: 5 !important;
+  }
+  .order-sm-last {
+    order: 6 !important;
+  }
+  .m-sm-0 {
+    margin: 0 !important;
+  }
+  .m-sm-1 {
+    margin: 0.25rem !important;
+  }
+  .m-sm-2 {
+    margin: 0.5rem !important;
+  }
+  .m-sm-3 {
+    margin: 1rem !important;
+  }
+  .m-sm-4 {
+    margin: 1.5rem !important;
+  }
+  .m-sm-5 {
+    margin: 3rem !important;
+  }
+  .m-sm-auto {
+    margin: auto !important;
+  }
+  .mx-sm-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-sm-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-sm-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-sm-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-sm-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-sm-5 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-sm-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-sm-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-sm-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-sm-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-sm-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-sm-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-sm-5 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-sm-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-sm-0 {
+    margin-top: 0 !important;
+  }
+  .mt-sm-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-sm-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-sm-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-sm-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-sm-5 {
+    margin-top: 3rem !important;
+  }
+  .mt-sm-auto {
+    margin-top: auto !important;
+  }
+  .me-sm-0 {
+    margin-right: 0 !important;
+  }
+  .me-sm-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-sm-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-sm-3 {
+    margin-right: 1rem !important;
+  }
+  .me-sm-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-sm-5 {
+    margin-right: 3rem !important;
+  }
+  .me-sm-auto {
+    margin-right: auto !important;
+  }
+  .mb-sm-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-sm-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-sm-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-sm-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-sm-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-sm-5 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-sm-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-sm-0 {
+    margin-left: 0 !important;
+  }
+  .ms-sm-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-sm-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-sm-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-sm-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-sm-5 {
+    margin-left: 3rem !important;
+  }
+  .ms-sm-auto {
+    margin-left: auto !important;
+  }
+  .p-sm-0 {
+    padding: 0 !important;
+  }
+  .p-sm-1 {
+    padding: 0.25rem !important;
+  }
+  .p-sm-2 {
+    padding: 0.5rem !important;
+  }
+  .p-sm-3 {
+    padding: 1rem !important;
+  }
+  .p-sm-4 {
+    padding: 1.5rem !important;
+  }
+  .p-sm-5 {
+    padding: 3rem !important;
+  }
+  .px-sm-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-sm-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-sm-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-sm-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-sm-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-sm-5 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .py-sm-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-sm-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-sm-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-sm-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-sm-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-sm-5 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .pt-sm-0 {
+    padding-top: 0 !important;
+  }
+  .pt-sm-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-sm-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-sm-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-sm-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-sm-5 {
+    padding-top: 3rem !important;
+  }
+  .pe-sm-0 {
+    padding-right: 0 !important;
+  }
+  .pe-sm-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-sm-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-sm-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-sm-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-sm-5 {
+    padding-right: 3rem !important;
+  }
+  .pb-sm-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-sm-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-sm-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-sm-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-sm-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-sm-5 {
+    padding-bottom: 3rem !important;
+  }
+  .ps-sm-0 {
+    padding-left: 0 !important;
+  }
+  .ps-sm-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-sm-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-sm-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-sm-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-sm-5 {
+    padding-left: 3rem !important;
+  }
+  .gap-sm-0 {
+    gap: 0 !important;
+  }
+  .gap-sm-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-sm-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-sm-3 {
+    gap: 1rem !important;
+  }
+  .gap-sm-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-sm-5 {
+    gap: 3rem !important;
+  }
+  .text-sm-start {
+    text-align: left !important;
+  }
+  .text-sm-end {
+    text-align: right !important;
+  }
+  .text-sm-center {
+    text-align: center !important;
+  }
+}
+@media (min-width: 768px) {
+  .float-md-start {
+    float: left !important;
+  }
+  .float-md-end {
+    float: right !important;
+  }
+  .float-md-none {
+    float: none !important;
+  }
+  .d-md-inline {
+    display: inline !important;
+  }
+  .d-md-inline-block {
+    display: inline-block !important;
+  }
+  .d-md-block {
+    display: block !important;
+  }
+  .d-md-grid {
+    display: grid !important;
+  }
+  .d-md-table {
+    display: table !important;
+  }
+  .d-md-table-row {
+    display: table-row !important;
+  }
+  .d-md-table-cell {
+    display: table-cell !important;
+  }
+  .d-md-flex {
+    display: flex !important;
+  }
+  .d-md-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-md-none {
+    display: none !important;
+  }
+  .flex-md-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-md-row {
+    flex-direction: row !important;
+  }
+  .flex-md-column {
+    flex-direction: column !important;
+  }
+  .flex-md-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-md-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-md-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-md-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-md-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-md-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-md-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-md-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-md-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-md-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-md-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-md-center {
+    justify-content: center !important;
+  }
+  .justify-content-md-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-md-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-md-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-md-start {
+    align-items: flex-start !important;
+  }
+  .align-items-md-end {
+    align-items: flex-end !important;
+  }
+  .align-items-md-center {
+    align-items: center !important;
+  }
+  .align-items-md-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-md-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-md-start {
+    align-content: flex-start !important;
+  }
+  .align-content-md-end {
+    align-content: flex-end !important;
+  }
+  .align-content-md-center {
+    align-content: center !important;
+  }
+  .align-content-md-between {
+    align-content: space-between !important;
+  }
+  .align-content-md-around {
+    align-content: space-around !important;
+  }
+  .align-content-md-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-md-auto {
+    align-self: auto !important;
+  }
+  .align-self-md-start {
+    align-self: flex-start !important;
+  }
+  .align-self-md-end {
+    align-self: flex-end !important;
+  }
+  .align-self-md-center {
+    align-self: center !important;
+  }
+  .align-self-md-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-md-stretch {
+    align-self: stretch !important;
+  }
+  .order-md-first {
+    order: -1 !important;
+  }
+  .order-md-0 {
+    order: 0 !important;
+  }
+  .order-md-1 {
+    order: 1 !important;
+  }
+  .order-md-2 {
+    order: 2 !important;
+  }
+  .order-md-3 {
+    order: 3 !important;
+  }
+  .order-md-4 {
+    order: 4 !important;
+  }
+  .order-md-5 {
+    order: 5 !important;
+  }
+  .order-md-last {
+    order: 6 !important;
+  }
+  .m-md-0 {
+    margin: 0 !important;
+  }
+  .m-md-1 {
+    margin: 0.25rem !important;
+  }
+  .m-md-2 {
+    margin: 0.5rem !important;
+  }
+  .m-md-3 {
+    margin: 1rem !important;
+  }
+  .m-md-4 {
+    margin: 1.5rem !important;
+  }
+  .m-md-5 {
+    margin: 3rem !important;
+  }
+  .m-md-auto {
+    margin: auto !important;
+  }
+  .mx-md-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-md-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-md-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-md-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-md-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-md-5 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-md-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-md-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-md-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-md-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-md-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-md-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-md-5 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-md-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-md-0 {
+    margin-top: 0 !important;
+  }
+  .mt-md-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-md-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-md-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-md-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-md-5 {
+    margin-top: 3rem !important;
+  }
+  .mt-md-auto {
+    margin-top: auto !important;
+  }
+  .me-md-0 {
+    margin-right: 0 !important;
+  }
+  .me-md-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-md-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-md-3 {
+    margin-right: 1rem !important;
+  }
+  .me-md-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-md-5 {
+    margin-right: 3rem !important;
+  }
+  .me-md-auto {
+    margin-right: auto !important;
+  }
+  .mb-md-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-md-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-md-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-md-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-md-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-md-5 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-md-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-md-0 {
+    margin-left: 0 !important;
+  }
+  .ms-md-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-md-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-md-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-md-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-md-5 {
+    margin-left: 3rem !important;
+  }
+  .ms-md-auto {
+    margin-left: auto !important;
+  }
+  .p-md-0 {
+    padding: 0 !important;
+  }
+  .p-md-1 {
+    padding: 0.25rem !important;
+  }
+  .p-md-2 {
+    padding: 0.5rem !important;
+  }
+  .p-md-3 {
+    padding: 1rem !important;
+  }
+  .p-md-4 {
+    padding: 1.5rem !important;
+  }
+  .p-md-5 {
+    padding: 3rem !important;
+  }
+  .px-md-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-md-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-md-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-md-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-md-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-md-5 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .py-md-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-md-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-md-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-md-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-md-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-md-5 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .pt-md-0 {
+    padding-top: 0 !important;
+  }
+  .pt-md-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-md-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-md-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-md-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-md-5 {
+    padding-top: 3rem !important;
+  }
+  .pe-md-0 {
+    padding-right: 0 !important;
+  }
+  .pe-md-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-md-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-md-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-md-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-md-5 {
+    padding-right: 3rem !important;
+  }
+  .pb-md-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-md-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-md-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-md-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-md-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-md-5 {
+    padding-bottom: 3rem !important;
+  }
+  .ps-md-0 {
+    padding-left: 0 !important;
+  }
+  .ps-md-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-md-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-md-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-md-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-md-5 {
+    padding-left: 3rem !important;
+  }
+  .gap-md-0 {
+    gap: 0 !important;
+  }
+  .gap-md-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-md-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-md-3 {
+    gap: 1rem !important;
+  }
+  .gap-md-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-md-5 {
+    gap: 3rem !important;
+  }
+  .text-md-start {
+    text-align: left !important;
+  }
+  .text-md-end {
+    text-align: right !important;
+  }
+  .text-md-center {
+    text-align: center !important;
+  }
+}
+@media (min-width: 992px) {
+  .float-lg-start {
+    float: left !important;
+  }
+  .float-lg-end {
+    float: right !important;
+  }
+  .float-lg-none {
+    float: none !important;
+  }
+  .d-lg-inline {
+    display: inline !important;
+  }
+  .d-lg-inline-block {
+    display: inline-block !important;
+  }
+  .d-lg-block {
+    display: block !important;
+  }
+  .d-lg-grid {
+    display: grid !important;
+  }
+  .d-lg-table {
+    display: table !important;
+  }
+  .d-lg-table-row {
+    display: table-row !important;
+  }
+  .d-lg-table-cell {
+    display: table-cell !important;
+  }
+  .d-lg-flex {
+    display: flex !important;
+  }
+  .d-lg-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-lg-none {
+    display: none !important;
+  }
+  .flex-lg-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-lg-row {
+    flex-direction: row !important;
+  }
+  .flex-lg-column {
+    flex-direction: column !important;
+  }
+  .flex-lg-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-lg-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-lg-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-lg-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-lg-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-lg-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-lg-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-lg-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-lg-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-lg-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-lg-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-lg-center {
+    justify-content: center !important;
+  }
+  .justify-content-lg-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-lg-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-lg-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-lg-start {
+    align-items: flex-start !important;
+  }
+  .align-items-lg-end {
+    align-items: flex-end !important;
+  }
+  .align-items-lg-center {
+    align-items: center !important;
+  }
+  .align-items-lg-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-lg-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-lg-start {
+    align-content: flex-start !important;
+  }
+  .align-content-lg-end {
+    align-content: flex-end !important;
+  }
+  .align-content-lg-center {
+    align-content: center !important;
+  }
+  .align-content-lg-between {
+    align-content: space-between !important;
+  }
+  .align-content-lg-around {
+    align-content: space-around !important;
+  }
+  .align-content-lg-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-lg-auto {
+    align-self: auto !important;
+  }
+  .align-self-lg-start {
+    align-self: flex-start !important;
+  }
+  .align-self-lg-end {
+    align-self: flex-end !important;
+  }
+  .align-self-lg-center {
+    align-self: center !important;
+  }
+  .align-self-lg-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-lg-stretch {
+    align-self: stretch !important;
+  }
+  .order-lg-first {
+    order: -1 !important;
+  }
+  .order-lg-0 {
+    order: 0 !important;
+  }
+  .order-lg-1 {
+    order: 1 !important;
+  }
+  .order-lg-2 {
+    order: 2 !important;
+  }
+  .order-lg-3 {
+    order: 3 !important;
+  }
+  .order-lg-4 {
+    order: 4 !important;
+  }
+  .order-lg-5 {
+    order: 5 !important;
+  }
+  .order-lg-last {
+    order: 6 !important;
+  }
+  .m-lg-0 {
+    margin: 0 !important;
+  }
+  .m-lg-1 {
+    margin: 0.25rem !important;
+  }
+  .m-lg-2 {
+    margin: 0.5rem !important;
+  }
+  .m-lg-3 {
+    margin: 1rem !important;
+  }
+  .m-lg-4 {
+    margin: 1.5rem !important;
+  }
+  .m-lg-5 {
+    margin: 3rem !important;
+  }
+  .m-lg-auto {
+    margin: auto !important;
+  }
+  .mx-lg-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-lg-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-lg-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-lg-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-lg-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-lg-5 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-lg-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-lg-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-lg-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-lg-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-lg-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-lg-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-lg-5 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-lg-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-lg-0 {
+    margin-top: 0 !important;
+  }
+  .mt-lg-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-lg-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-lg-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-lg-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-lg-5 {
+    margin-top: 3rem !important;
+  }
+  .mt-lg-auto {
+    margin-top: auto !important;
+  }
+  .me-lg-0 {
+    margin-right: 0 !important;
+  }
+  .me-lg-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-lg-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-lg-3 {
+    margin-right: 1rem !important;
+  }
+  .me-lg-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-lg-5 {
+    margin-right: 3rem !important;
+  }
+  .me-lg-auto {
+    margin-right: auto !important;
+  }
+  .mb-lg-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-lg-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-lg-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-lg-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-lg-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-lg-5 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-lg-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-lg-0 {
+    margin-left: 0 !important;
+  }
+  .ms-lg-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-lg-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-lg-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-lg-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-lg-5 {
+    margin-left: 3rem !important;
+  }
+  .ms-lg-auto {
+    margin-left: auto !important;
+  }
+  .p-lg-0 {
+    padding: 0 !important;
+  }
+  .p-lg-1 {
+    padding: 0.25rem !important;
+  }
+  .p-lg-2 {
+    padding: 0.5rem !important;
+  }
+  .p-lg-3 {
+    padding: 1rem !important;
+  }
+  .p-lg-4 {
+    padding: 1.5rem !important;
+  }
+  .p-lg-5 {
+    padding: 3rem !important;
+  }
+  .px-lg-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-lg-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-lg-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-lg-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-lg-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-lg-5 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .py-lg-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-lg-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-lg-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-lg-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-lg-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-lg-5 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .pt-lg-0 {
+    padding-top: 0 !important;
+  }
+  .pt-lg-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-lg-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-lg-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-lg-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-lg-5 {
+    padding-top: 3rem !important;
+  }
+  .pe-lg-0 {
+    padding-right: 0 !important;
+  }
+  .pe-lg-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-lg-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-lg-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-lg-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-lg-5 {
+    padding-right: 3rem !important;
+  }
+  .pb-lg-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-lg-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-lg-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-lg-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-lg-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-lg-5 {
+    padding-bottom: 3rem !important;
+  }
+  .ps-lg-0 {
+    padding-left: 0 !important;
+  }
+  .ps-lg-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-lg-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-lg-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-lg-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-lg-5 {
+    padding-left: 3rem !important;
+  }
+  .gap-lg-0 {
+    gap: 0 !important;
+  }
+  .gap-lg-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-lg-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-lg-3 {
+    gap: 1rem !important;
+  }
+  .gap-lg-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-lg-5 {
+    gap: 3rem !important;
+  }
+  .text-lg-start {
+    text-align: left !important;
+  }
+  .text-lg-end {
+    text-align: right !important;
+  }
+  .text-lg-center {
+    text-align: center !important;
+  }
+}
+@media (min-width: 1200px) {
+  .float-xl-start {
+    float: left !important;
+  }
+  .float-xl-end {
+    float: right !important;
+  }
+  .float-xl-none {
+    float: none !important;
+  }
+  .d-xl-inline {
+    display: inline !important;
+  }
+  .d-xl-inline-block {
+    display: inline-block !important;
+  }
+  .d-xl-block {
+    display: block !important;
+  }
+  .d-xl-grid {
+    display: grid !important;
+  }
+  .d-xl-table {
+    display: table !important;
+  }
+  .d-xl-table-row {
+    display: table-row !important;
+  }
+  .d-xl-table-cell {
+    display: table-cell !important;
+  }
+  .d-xl-flex {
+    display: flex !important;
+  }
+  .d-xl-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-xl-none {
+    display: none !important;
+  }
+  .flex-xl-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-xl-row {
+    flex-direction: row !important;
+  }
+  .flex-xl-column {
+    flex-direction: column !important;
+  }
+  .flex-xl-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-xl-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-xl-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-xl-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-xl-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-xl-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-xl-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-xl-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-xl-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-xl-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-xl-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-xl-center {
+    justify-content: center !important;
+  }
+  .justify-content-xl-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-xl-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-xl-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-xl-start {
+    align-items: flex-start !important;
+  }
+  .align-items-xl-end {
+    align-items: flex-end !important;
+  }
+  .align-items-xl-center {
+    align-items: center !important;
+  }
+  .align-items-xl-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-xl-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-xl-start {
+    align-content: flex-start !important;
+  }
+  .align-content-xl-end {
+    align-content: flex-end !important;
+  }
+  .align-content-xl-center {
+    align-content: center !important;
+  }
+  .align-content-xl-between {
+    align-content: space-between !important;
+  }
+  .align-content-xl-around {
+    align-content: space-around !important;
+  }
+  .align-content-xl-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-xl-auto {
+    align-self: auto !important;
+  }
+  .align-self-xl-start {
+    align-self: flex-start !important;
+  }
+  .align-self-xl-end {
+    align-self: flex-end !important;
+  }
+  .align-self-xl-center {
+    align-self: center !important;
+  }
+  .align-self-xl-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-xl-stretch {
+    align-self: stretch !important;
+  }
+  .order-xl-first {
+    order: -1 !important;
+  }
+  .order-xl-0 {
+    order: 0 !important;
+  }
+  .order-xl-1 {
+    order: 1 !important;
+  }
+  .order-xl-2 {
+    order: 2 !important;
+  }
+  .order-xl-3 {
+    order: 3 !important;
+  }
+  .order-xl-4 {
+    order: 4 !important;
+  }
+  .order-xl-5 {
+    order: 5 !important;
+  }
+  .order-xl-last {
+    order: 6 !important;
+  }
+  .m-xl-0 {
+    margin: 0 !important;
+  }
+  .m-xl-1 {
+    margin: 0.25rem !important;
+  }
+  .m-xl-2 {
+    margin: 0.5rem !important;
+  }
+  .m-xl-3 {
+    margin: 1rem !important;
+  }
+  .m-xl-4 {
+    margin: 1.5rem !important;
+  }
+  .m-xl-5 {
+    margin: 3rem !important;
+  }
+  .m-xl-auto {
+    margin: auto !important;
+  }
+  .mx-xl-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-xl-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-xl-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-xl-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-xl-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-xl-5 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-xl-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-xl-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-xl-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-xl-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-xl-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-xl-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-xl-5 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-xl-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-xl-0 {
+    margin-top: 0 !important;
+  }
+  .mt-xl-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-xl-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-xl-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-xl-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-xl-5 {
+    margin-top: 3rem !important;
+  }
+  .mt-xl-auto {
+    margin-top: auto !important;
+  }
+  .me-xl-0 {
+    margin-right: 0 !important;
+  }
+  .me-xl-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-xl-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-xl-3 {
+    margin-right: 1rem !important;
+  }
+  .me-xl-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-xl-5 {
+    margin-right: 3rem !important;
+  }
+  .me-xl-auto {
+    margin-right: auto !important;
+  }
+  .mb-xl-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-xl-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-xl-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-xl-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-xl-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-xl-5 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-xl-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-xl-0 {
+    margin-left: 0 !important;
+  }
+  .ms-xl-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-xl-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-xl-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-xl-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-xl-5 {
+    margin-left: 3rem !important;
+  }
+  .ms-xl-auto {
+    margin-left: auto !important;
+  }
+  .p-xl-0 {
+    padding: 0 !important;
+  }
+  .p-xl-1 {
+    padding: 0.25rem !important;
+  }
+  .p-xl-2 {
+    padding: 0.5rem !important;
+  }
+  .p-xl-3 {
+    padding: 1rem !important;
+  }
+  .p-xl-4 {
+    padding: 1.5rem !important;
+  }
+  .p-xl-5 {
+    padding: 3rem !important;
+  }
+  .px-xl-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-xl-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-xl-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-xl-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-xl-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-xl-5 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .py-xl-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-xl-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-xl-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-xl-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-xl-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-xl-5 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .pt-xl-0 {
+    padding-top: 0 !important;
+  }
+  .pt-xl-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-xl-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-xl-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-xl-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-xl-5 {
+    padding-top: 3rem !important;
+  }
+  .pe-xl-0 {
+    padding-right: 0 !important;
+  }
+  .pe-xl-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-xl-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-xl-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-xl-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-xl-5 {
+    padding-right: 3rem !important;
+  }
+  .pb-xl-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-xl-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-xl-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-xl-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-xl-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-xl-5 {
+    padding-bottom: 3rem !important;
+  }
+  .ps-xl-0 {
+    padding-left: 0 !important;
+  }
+  .ps-xl-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-xl-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-xl-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-xl-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-xl-5 {
+    padding-left: 3rem !important;
+  }
+  .gap-xl-0 {
+    gap: 0 !important;
+  }
+  .gap-xl-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-xl-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-xl-3 {
+    gap: 1rem !important;
+  }
+  .gap-xl-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-xl-5 {
+    gap: 3rem !important;
+  }
+  .text-xl-start {
+    text-align: left !important;
+  }
+  .text-xl-end {
+    text-align: right !important;
+  }
+  .text-xl-center {
+    text-align: center !important;
+  }
+}
+@media (min-width: 1400px) {
+  .float-xxl-start {
+    float: left !important;
+  }
+  .float-xxl-end {
+    float: right !important;
+  }
+  .float-xxl-none {
+    float: none !important;
+  }
+  .d-xxl-inline {
+    display: inline !important;
+  }
+  .d-xxl-inline-block {
+    display: inline-block !important;
+  }
+  .d-xxl-block {
+    display: block !important;
+  }
+  .d-xxl-grid {
+    display: grid !important;
+  }
+  .d-xxl-table {
+    display: table !important;
+  }
+  .d-xxl-table-row {
+    display: table-row !important;
+  }
+  .d-xxl-table-cell {
+    display: table-cell !important;
+  }
+  .d-xxl-flex {
+    display: flex !important;
+  }
+  .d-xxl-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-xxl-none {
+    display: none !important;
+  }
+  .flex-xxl-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-xxl-row {
+    flex-direction: row !important;
+  }
+  .flex-xxl-column {
+    flex-direction: column !important;
+  }
+  .flex-xxl-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-xxl-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-xxl-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-xxl-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-xxl-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-xxl-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-xxl-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-xxl-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-xxl-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-xxl-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-xxl-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-xxl-center {
+    justify-content: center !important;
+  }
+  .justify-content-xxl-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-xxl-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-xxl-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-xxl-start {
+    align-items: flex-start !important;
+  }
+  .align-items-xxl-end {
+    align-items: flex-end !important;
+  }
+  .align-items-xxl-center {
+    align-items: center !important;
+  }
+  .align-items-xxl-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-xxl-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-xxl-start {
+    align-content: flex-start !important;
+  }
+  .align-content-xxl-end {
+    align-content: flex-end !important;
+  }
+  .align-content-xxl-center {
+    align-content: center !important;
+  }
+  .align-content-xxl-between {
+    align-content: space-between !important;
+  }
+  .align-content-xxl-around {
+    align-content: space-around !important;
+  }
+  .align-content-xxl-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-xxl-auto {
+    align-self: auto !important;
+  }
+  .align-self-xxl-start {
+    align-self: flex-start !important;
+  }
+  .align-self-xxl-end {
+    align-self: flex-end !important;
+  }
+  .align-self-xxl-center {
+    align-self: center !important;
+  }
+  .align-self-xxl-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-xxl-stretch {
+    align-self: stretch !important;
+  }
+  .order-xxl-first {
+    order: -1 !important;
+  }
+  .order-xxl-0 {
+    order: 0 !important;
+  }
+  .order-xxl-1 {
+    order: 1 !important;
+  }
+  .order-xxl-2 {
+    order: 2 !important;
+  }
+  .order-xxl-3 {
+    order: 3 !important;
+  }
+  .order-xxl-4 {
+    order: 4 !important;
+  }
+  .order-xxl-5 {
+    order: 5 !important;
+  }
+  .order-xxl-last {
+    order: 6 !important;
+  }
+  .m-xxl-0 {
+    margin: 0 !important;
+  }
+  .m-xxl-1 {
+    margin: 0.25rem !important;
+  }
+  .m-xxl-2 {
+    margin: 0.5rem !important;
+  }
+  .m-xxl-3 {
+    margin: 1rem !important;
+  }
+  .m-xxl-4 {
+    margin: 1.5rem !important;
+  }
+  .m-xxl-5 {
+    margin: 3rem !important;
+  }
+  .m-xxl-auto {
+    margin: auto !important;
+  }
+  .mx-xxl-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-xxl-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-xxl-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-xxl-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-xxl-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-xxl-5 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-xxl-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-xxl-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-xxl-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-xxl-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-xxl-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-xxl-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-xxl-5 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-xxl-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-xxl-0 {
+    margin-top: 0 !important;
+  }
+  .mt-xxl-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-xxl-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-xxl-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-xxl-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-xxl-5 {
+    margin-top: 3rem !important;
+  }
+  .mt-xxl-auto {
+    margin-top: auto !important;
+  }
+  .me-xxl-0 {
+    margin-right: 0 !important;
+  }
+  .me-xxl-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-xxl-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-xxl-3 {
+    margin-right: 1rem !important;
+  }
+  .me-xxl-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-xxl-5 {
+    margin-right: 3rem !important;
+  }
+  .me-xxl-auto {
+    margin-right: auto !important;
+  }
+  .mb-xxl-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-xxl-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-xxl-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-xxl-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-xxl-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-xxl-5 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-xxl-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-xxl-0 {
+    margin-left: 0 !important;
+  }
+  .ms-xxl-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-xxl-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-xxl-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-xxl-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-xxl-5 {
+    margin-left: 3rem !important;
+  }
+  .ms-xxl-auto {
+    margin-left: auto !important;
+  }
+  .p-xxl-0 {
+    padding: 0 !important;
+  }
+  .p-xxl-1 {
+    padding: 0.25rem !important;
+  }
+  .p-xxl-2 {
+    padding: 0.5rem !important;
+  }
+  .p-xxl-3 {
+    padding: 1rem !important;
+  }
+  .p-xxl-4 {
+    padding: 1.5rem !important;
+  }
+  .p-xxl-5 {
+    padding: 3rem !important;
+  }
+  .px-xxl-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-xxl-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-xxl-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-xxl-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-xxl-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-xxl-5 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .py-xxl-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-xxl-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-xxl-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-xxl-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-xxl-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-xxl-5 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .pt-xxl-0 {
+    padding-top: 0 !important;
+  }
+  .pt-xxl-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-xxl-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-xxl-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-xxl-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-xxl-5 {
+    padding-top: 3rem !important;
+  }
+  .pe-xxl-0 {
+    padding-right: 0 !important;
+  }
+  .pe-xxl-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-xxl-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-xxl-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-xxl-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-xxl-5 {
+    padding-right: 3rem !important;
+  }
+  .pb-xxl-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-xxl-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-xxl-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-xxl-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-xxl-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-xxl-5 {
+    padding-bottom: 3rem !important;
+  }
+  .ps-xxl-0 {
+    padding-left: 0 !important;
+  }
+  .ps-xxl-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-xxl-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-xxl-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-xxl-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-xxl-5 {
+    padding-left: 3rem !important;
+  }
+  .gap-xxl-0 {
+    gap: 0 !important;
+  }
+  .gap-xxl-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-xxl-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-xxl-3 {
+    gap: 1rem !important;
+  }
+  .gap-xxl-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-xxl-5 {
+    gap: 3rem !important;
+  }
+  .text-xxl-start {
+    text-align: left !important;
+  }
+  .text-xxl-end {
+    text-align: right !important;
+  }
+  .text-xxl-center {
+    text-align: center !important;
+  }
+}
+@media (min-width: 1200px) {
+  .fs-1 {
+    font-size: 2.5rem !important;
+  }
+  .fs-2 {
+    font-size: 2rem !important;
+  }
+  .fs-3 {
+    font-size: 1.75rem !important;
+  }
+  .fs-4 {
+    font-size: 1.5rem !important;
+  }
+}
+@media print {
+  .d-print-inline {
+    display: inline !important;
+  }
+  .d-print-inline-block {
+    display: inline-block !important;
+  }
+  .d-print-block {
+    display: block !important;
+  }
+  .d-print-grid {
+    display: grid !important;
+  }
+  .d-print-table {
+    display: table !important;
+  }
+  .d-print-table-row {
+    display: table-row !important;
+  }
+  .d-print-table-cell {
+    display: table-cell !important;
+  }
+  .d-print-flex {
+    display: flex !important;
+  }
+  .d-print-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-print-none {
+    display: none !important;
+  }
+}
+html {
+  scroll-padding-top: 3.5rem;
+}
+
+header {
+  padding-top: 9.5rem;
+  padding-bottom: 6rem;
+}
+
+section {
+  padding-top: 9rem;
+  padding-bottom: 9rem;
+}
\ No newline at end of file
diff --git a/main/templates/index.html b/main/templates/index.html
new file mode 100644
index 0000000..c11c932
--- /dev/null
+++ b/main/templates/index.html
@@ -0,0 +1,456 @@
+{% extends 'base.html' %}
+
+{% block content %}
+{% if not inProgress and fig == None %}
+<section class="gradient-custom p-5">
+    <div class="container py-5 h-100">
+        <div class="row justify-content-center align-items-center h-100">
+            <div class="col-12 col-lg-9 col-xl-7">
+                <div class="card shadow-2-strong card-registration" style="border-radius: 15px;">
+                    <div class="card-body p-4 p-md-5">
+                        <h3 class="mb-4 pb-2 pb-md-0 mb-md-2">Création d'une simulation</h3>
+                        <form action="startSimulation" method="post">
+                            <div class="row">
+                                <div class="col-md-6 mb-4">
+                                    <div class="form-outline">
+                                        <label class="form-label" for="takeProfit">Take profit %</label>
+                                        <input type="number"
+                                            class="form-control form-control-lg {{ err['takeProfit'] }}" id="takeProfit"
+                                            name="takeProfit" max="100.0" min="1.0"
+                                            value="{{ stickyForm['takeProfit'] }}" step="0.1" required>
+                                        <div class="valid-feedback">
+                                            Correct !
+                                        </div>
+                                        <div class="invalid-feedback">
+                                            Veuillez entrer un nombre entre 1.0 et 100.0
+                                        </div>
+                                    </div>
+
+                                </div>
+                                <div class="col-md-6 mb-4">
+
+                                    <div class="form-outline">
+                                        <label class="form-label" for="stopLoss">Stop Loss %</label>
+                                        <input type="number" class="form-control form-control-lg {{ err['stopLoss'] }}"
+                                            id="stopLoss" name="stopLoss" min="1.0" max="100.0"
+                                            value="{{ stickyForm['stopLoss'] }}" step="0.1" required>
+                                        <div class="valid-feedback">
+                                            Correct !
+                                        </div>
+                                        <div class="invalid-feedback">
+                                            Veuillez entrer un nombre entre 1 et 100.0
+                                        </div>
+                                    </div>
+
+                                </div>
+
+                            </div>
+
+                            <div class="row">
+                                <div class="col-md-6 mb-4 d-flex align-items-center">
+
+                                    <div class="form-outline datepicker w-100">
+                                        <label for="dateSimStart" class="form-label">Date du début de la
+                                            simulation</label>
+                                        <input type="date" class="form-control form-control-lg {{ err['dateSim'] }}"
+                                            id="dateSimStart" name="dateSimStart"
+                                            value="{{ stickyForm['dateSimStart'] }}" min="2022-02-05" max="2022-04-09"
+                                            required>
+                                        <div class="valid-feedback">
+                                            Correct !
+                                        </div>
+                                        <div class="invalid-feedback">
+                                            Veuillez entrer une date entre le 05/02/2022 et le 09/04/2022. La date du
+                                            début ne doit pas être plus grande que la date de la fin ou égale.
+                                        </div>
+                                    </div>
+
+                                </div>
+                                <div class="col-md-6 mb-4">
+
+                                    <div class="form-outline datepicker w-100">
+                                        <label for="dateSimEnd" class="form-label">Date de la fin de la
+                                            simulation</label>
+                                        <input type="date" class="form-control form-control-lg {{ err['dateSim'] }}"
+                                            id="dateSimEnd" name="dateSimEnd" value="{{ stickyForm['dateSimEnd'] }}"
+                                            min="2022-02-05" max="2022-04-09" required>
+                                        <div class="valid-feedback">
+                                            Correct !
+                                        </div>
+                                        <div class="invalid-feedback">
+                                            Veuillez entrer une date entre le 05/02/2022 et le 09/04/2022. La date de la
+                                            fin ne doit pas être plus petite que la date du début ou égale.
+                                        </div>
+
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="row">
+                                <!-- <div class="col-md-6 mb-4 pb-2">
+
+                                    <div class="form-outline">
+                                        <label class="form-label" for="candleSize">Taille de la bougie</label>
+                                        <input type="number" class="form-control form-control-lg" id="candleSize"
+                                            name="candleSize" max="20" min="5" value="10" step="1">
+                                    </div>
+
+                                </div> -->
+                                <div class="mb-4 pb-2">
+
+                                    <div class="form-inline">
+                                        <label class="form-label my-1 mr-2" for="indicator">Indicateur
+                                            technique</label>
+                                        <select class="form-control form-select {{ err['indicator'] }}"
+                                            name="indicatorSelect" id="indicatorSelect" required>
+                                            {% if stickyForm['indicatorSelect'] == '' %}
+                                            <option value="" selected disabled hidden>Sélectionner...</option>
+                                            {% endif %}
+                                            {% if stickyForm['indicatorSelect'] == 'SMA' %}
+                                            <option value="SMA" selected>Moyenne glissante</option>
+                                            {% else %}
+                                            <option value="SMA">Moyenne glissante</option>
+                                            {% endif %}
+                                            {% if stickyForm['indicatorSelect'] == 'random'%}
+                                            <option value="random" selected>Aléatoire</option>
+                                            {% else %}
+                                            <option value="random">Aléatoire</option>
+                                            {% endif %}
+                                            {% if stickyForm['indicatorSelect'] == 'test' %}
+                                            <option value="test" selected>test</option>
+                                            {% else %}
+                                            <option value="test">test</option>
+                                            {% endif %}
+                                        </select>
+                                        <div class="valid-feedback">
+                                            Correct !
+                                        </div>
+                                        <div class="invalid-feedback">
+                                            Veuillez sélectionner un indicateur de la liste.
+                                        </div>
+                                    </div>
+
+                                </div>
+                            </div>
+
+                            <div class="row" id="rowSMA" style="display: none;">
+                                <div class="col-md-6 mb-4">
+                                    <div class="form-outline">
+                                        <label class="form-label" for="MA1">Moyenne glissante courte</label>
+                                        <input type="number" class="form-control form-control-lg {{ err['ma'] }}"
+                                            id="MA1" name="MA1" max="100" min="5" value="{{ stickyForm['MA1'] }}"
+                                            step="5">
+                                        <div class="valid-feedback">
+                                            Correct !
+                                        </div>
+                                        <div class="invalid-feedback">
+                                            Veuillez entrer un nombre entre 5 et 100. La moyenne glissante courte
+                                            doit être plus petite que la longue.
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="col-md-6 mb-4">
+                                    <div class="form-outline">
+                                        <label class="form-label" for="MA2">Moyenne glissante longue</label>
+                                        <input type="number" class="form-control form-control-lg {{ err['ma'] }}"
+                                            id="MA2" name="MA2" max="105" min="10" value="{{ stickyForm['MA2'] }}"
+                                            step="5">
+                                        <div class="valid-feedback">
+                                            Correct !
+                                        </div>
+                                        <div class="invalid-feedback">
+                                            Veuillez entrer un nombre entre 10 et 105. La moyenne glissante
+                                            longue doit être plus grande que la courte.
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="row" id="rowRandom" style="display: none;">
+                                <div class="col-md-6 mb-4">
+                                    <div class="form-outline">
+                                        <label class="form-label" for="M">Random</label>
+                                        <input type="number" class="form-control form-control-lg" id="MA1" name="MA1"
+                                            max="100" min="5" value="20" step="5">
+                                    </div>
+
+                                </div>
+                                <div class="col-md-6 mb-4">
+                                    <div class="form-outline">
+                                        <label class="form-label" for="M">Random</label>
+                                        <input type="number" class="form-control form-control-lg" id="MA2" name="MA2"
+                                            max="105" min="10" value="40" step="5">
+                                    </div>
+
+                                </div>
+                            </div>
+                            <div class="row" id="rowTest" style="display: none;">
+                                <div class="col-md-6 mb-4">
+                                    <div class="form-outline">
+                                        <label class="form-label" for="M">Test 1</label>
+                                        <input type="number" class="form-control form-control-lg" id="MA1" name="MA1"
+                                            max="100" min="5" value="20" step="5">
+                                    </div>
+
+                                </div>
+                                <div class="col-md-6 mb-4">
+                                    <label class="form-label" for="M">Test 2</label>
+                                    <div class="form-check form-switch">
+                                        <input class="form-check-input" type="checkbox" id="flexSwitchCheckDefault">
+                                        <label class="form-check-label" for="flexSwitchCheckDefault">Test</label>
+                                    </div>
+
+                                </div>
+                            </div>
+                            <div class="row text-center">
+                                <div class="mt-4 pt-2">
+                                    <button type="submit" class="btn btn-primary btn-lg">Lancer la simulation</button>
+                                </div>
+                            </div>
+                        </form>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</section>
+{% endif %}
+{% if inProgress %}
+<section class="gradient-custom p-5 h-100 align-items-center my-auto">
+    <div class="container py-5 h-100">
+        <div class="row justify-content-center align-items-center h-100">
+            <div class="col-12 col-lg-9 col-xl-7">
+                <div class="card shadow-2-strong card-registration" style="border-radius: 15px;">
+                    <div class="card-body p-4 p-md-5">
+                        <div class="progress">
+                            <div class="progress-bar" id="progressBar" role="progressbar" aria-valuenow="0"
+                                aria-valuemin="0" aria-valuemax="100" style="width:0%"></div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</section>
+{% endif %}
+{% if fig != None %}
+{% set moneySymbol = [] %}
+<section class="gradient-custom p-5 h-100 align-items-center my-auto">
+    <div class="container py-5 h-100">
+        <div class="card shadow-2-strong card-registration" style="border-radius: 15px;">
+            <div class="card-body p-4">
+                <div class="row">
+                    <div id="chart">
+                    </div>
+                </div>
+                <div class="row">
+                    {% for symbol in res['profits'] %}
+                    {% set _ = moneySymbol.append(symbol) %}
+                    <div class="col-md-6 mb-4 text-center">
+                        {% if symbol == "USDT" %}
+                        <h1>{{ symbol }} : <span style="color:green"> +{{ res['moneyProfits'][symbol]|round(2)|string
+                                }}₮ ({{
+                                res['profits'][symbol]|round(2)|string+"%" }})</span></h1>
+                        {% elif symbol == "BTC" %}
+                        <h1>{{ symbol }} : <span style="color:green"> +{{
+                                "{:.5f}".format(res['moneyProfits'][symbol])|string }}₿ ({{
+                                res['profits'][symbol]|round(2)|string+"%" }})</span></h1>
+                        {% endif %}
+                    </div>
+                    {% endfor %}
+                    {% for symbol in res['losses'] %}
+                    {% set _ = moneySymbol.append(symbol) %}
+                    <div class="col-md-6 mb-4 text-center">
+                        {% if symbol == "USDT" %}
+                        <h1>{{ symbol }} : <span style="color:red">{{ res['moneyLosses'][symbol]|round(2)|string }}₮ ({{
+                                res['losses'][symbol]|round(2)|string+"%" }})</span></h1>
+                        {% elif symbol == "BTC" %}
+                        <h1>{{ symbol }} : <span style="color:red">{{ "{:.5f}".format(res['moneyLosses'][symbol])|string
+                                }}₿ ({{
+                                res['losses'][symbol]|round(2)|string+"%" }})</span></h1>
+                        {% endif %}
+                    </div>
+                    {% endfor %}
+                    {% if res['profits'] == {} and res['losses'] == {} %}
+                    <div class="text-center">
+                        <h1>Aucun résultats</h1>
+                        <br>
+                    </div>
+                    {% endif %}
+                </div>
+                <div class="row align-items-center">
+                    <div class="col-sm mb-4 text-center">
+                        <button type="button" class="btn btn-secondary btn-lg" id="btnShowMoreInfo">Afficher plus de
+                            résultats</button>
+                    </div>
+                    <div class="col-sm mb-4 text-center">
+                        <!-- Button trigger modal -->
+                        <button type="button" class="btn btn-primary btn-lg" data-bs-toggle="modal"
+                            data-bs-target="#modalSimulation">
+                            Démarrer une nouvelle simulation
+                        </button>
+
+                        <!-- Modal -->
+                        <div class="modal fade" id="modalSimulation" tabindex="-1" aria-hidden="true">
+                            <div class="modal-dialog">
+                                <div class="modal-content">
+                                    <div class="modal-header">
+                                        <h5 class="modal-title">Nouvelle simulation</h5>
+                                        <button type="button" class="btn-close" data-bs-dismiss="modal"
+                                            aria-label="Fermer"></button>
+                                    </div>
+                                    <div class="modal-body">
+                                        <div class="row">
+                                            <div class="col-sm mb-4 text-center">
+                                                <a href="resetSimulation">
+                                                    <button type="button" class="btn btn-primary btn-lg">Restaurer les
+                                                        valeurs par défaut</button></a>
+                                                <br>
+                                                <br>
+                                                <a href="resetSimulationWithParams">
+                                                    <button type="button" class="btn btn-primary btn-lg">Modifier les
+                                                        anciennes valeurs</button></a>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="modal-footer">
+                                        <button type="button" class="btn btn-secondary"
+                                            data-bs-dismiss="modal">Fermer</button>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="col-sm mb-4 text-center">
+                        <button type="button" class="btn btn-success btn-lg">
+                            Enregistrer la simulation <i class="bi bi-save"></i>
+                        </button>
+                    </div>
+                </div>
+                <div id="moreResults" style="display: none;">
+                    <div class="row pt-3 mb-3 border-top">
+                        <div class="col-sm text-center">
+                            <h4>Balance avant</h4>
+                        </div>
+                        {% for i in moneySymbol %}
+                        <div class="col-sm text-center">
+                            {% if i == "USDT" %}
+                            <h4>{{ res['startBalance'][i] }}₮</h4>
+                            {% elif i == "BTC" %}
+                            <h4>{{res['startBalance'][i] }}₿ </h4>
+                            {% endif %}
+                        </div>
+                        {% endfor %}
+                    </div>
+                    <div class="row pt-3 mb-3 border-top">
+                        <div class="col-sm text-center">
+                            <h4>Balance après</h4>
+                        </div>
+                        {% for i in res['profits'] %}
+                        <div class="col-sm text-center">
+                            {% if i == "USDT" %}
+                            <h4>{{ res['startBalance'][i] + res['moneyProfits'][i]}}₮</h4>
+                            {% elif i == "BTC" %}
+                            <h4>{{"{:.5f}".format(res['startBalance'][i] + res['moneyProfits'][i])}}₿ </h4>
+                            {% endif %}
+                        </div>
+                        {% endfor %}
+                        {% for i in res['losses'] %}
+                        <div class="col-sm text-center">
+                            {% if i == "USDT" %}
+                            <h4>{{ res['startBalance'][i] + res['moneyLosses'][i]}}₮</h4>
+                            {% elif i == "BTC" %}
+                            <h4>{{"{:.5f}".format(res['startBalance'][i] + res['moneyLosses'][i])}}₿ </h4>
+                            {% endif %}
+                        </div>
+                        {% endfor %}
+                    </div>
+                    <div class="row pt-3 mb-3 border-top">
+                        <div class="col-sm text-center">
+                            <h5>Nombre d'ordres gagants : {{ res['nbWins'] }}</h5>
+                        </div>
+                        <div class="col-sm text-center">
+                            <h5>Nombre d'ordres perdants : {{ res['nbLosses'] }}</h5>
+                        </div>
+                        <div class="col-sm text-center">
+                            <h5>Nombre total d'ordres : {{ res['totalTrades'] }}</h5>
+                        </div>
+                        <div class="col-sm text-center">
+                            <h5>Pourcentage de réussite : {{ res['winrate'] }}%</h5>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</section>
+{% endif %}
+<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
+<script>
+
+
+    const showMoreInfo = document.getElementById('btnShowMoreInfo');
+
+    const indicatorSelect = document.getElementById('indicatorSelect');
+    const SMA = document.getElementById('rowSMA');
+    const random = document.getElementById('rowRandom');
+    const test = document.getElementById('rowTest');
+    var inProgress = {{ inProgress| lower }};
+    var chart = null;
+
+    {% if fig != None %}
+    var chart = {{ fig | safe }};
+    Plotly.plot("chart", chart, {});
+    {% endif %}
+
+    if (!inProgress && chart == null) {
+        indicatorChange();
+        indicatorSelect.addEventListener('change', indicatorChange);
+    }
+    if (inProgress) {
+        updateProgressBar();
+    }
+
+
+    {% if fig != None %}
+    showMoreInfo.addEventListener('click', function () {
+        if (moreResults.style.display === 'none') {
+            moreResults.style.display = 'block';
+            showMoreInfo.innerHTML = 'Masquer les résultats';
+        } else {
+            moreResults.style.display = 'none';
+            showMoreInfo.innerHTML = 'Afficher plus de résultats';
+        }
+    });
+    {% endif %}
+
+    function updateProgressBar() {
+        $.ajax({
+            url: '/progress',
+            success: function (data) {
+                var progress = data.progress;
+                $('#progressBar').css('width', progress + '%');
+                if (progress === 100) {
+                    location.reload();
+                } else {
+                    setTimeout(updateProgressBar, 1000);
+                }
+            }
+        });
+    }
+
+    function indicatorChange() {
+        if (indicatorSelect.value === 'SMA') {
+            SMA.style.display = 'flex';
+            random.style.display = 'none';
+            test.style.display = 'none';
+        } else if (indicatorSelect.value === 'random') {
+            random.style.display = 'flex';
+            SMA.style.display = 'none';
+            test.style.display = 'none';
+        } else if (indicatorSelect.value === 'test') {
+            test.style.display = 'flex';
+            SMA.style.display = 'none';
+            random.style.display = 'none';
+        }
+    }
+</script>
+{% endblock %}
\ No newline at end of file
diff --git a/main/templates/js/scripts.js b/main/templates/js/scripts.js
new file mode 100644
index 0000000..ada90ce
--- /dev/null
+++ b/main/templates/js/scripts.js
@@ -0,0 +1,34 @@
+/*!
+* Start Bootstrap - Scrolling Nav v5.0.6 (https://startbootstrap.com/template/scrolling-nav)
+* Copyright 2013-2023 Start Bootstrap
+* Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-scrolling-nav/blob/master/LICENSE)
+*/
+//
+// Scripts
+// 
+
+window.addEventListener('DOMContentLoaded', event => {
+
+    // Activate Bootstrap scrollspy on the main nav element
+    const mainNav = document.body.querySelector('#mainNav');
+    if (mainNav) {
+        new bootstrap.ScrollSpy(document.body, {
+            target: '#mainNav',
+            rootMargin: '0px 0px -40%',
+        });
+    };
+
+    // Collapse responsive navbar when toggler is visible
+    const navbarToggler = document.body.querySelector('.navbar-toggler');
+    const responsiveNavItems = [].slice.call(
+        document.querySelectorAll('#navbarResponsive .nav-link')
+    );
+    responsiveNavItems.map(function (responsiveNavItem) {
+        responsiveNavItem.addEventListener('click', () => {
+            if (window.getComputedStyle(navbarToggler).display !== 'none') {
+                navbarToggler.click();
+            }
+        });
+    });
+
+});
diff --git a/others/.DS_Store b/others/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..d4b30f0c0cc0ec1f5db36c1332075fa1ac1bbb88
GIT binary patch
literal 6148
zcmZQzU|@7AO)+F(5MW?n;9!8zEL;p&0Z1N%F(jFwBD^5;z-DAJlrY3I#53qI6hP%h
zsnHM^4S~TM0-(Ih4bHQf40#O5`M1(DCqFqUCqD^VJUB8iFzEdU1F&}>x(XO78Il<i
z8Il<?7*avzpy^sqoUWwu;sU5$JCX`=GK)(L46ZRUF|)9;v2(C<aC5{4XXKX$mn4>y
z7CR*tMT2-D`T03XFm_^6SY~Q@ynu*veqKppW?pI$NJ(&JN@`MKQA~JdUP^wsQ+{b)
zN-<b3RDy$(gEL-0qPp71z*tAY*wC<6N1@u%$UsNI#LT3&mXkwNS>HM+K07BjFTV@y
zYX(L}2+aTrIVclMbu%z9;0TkPbi?4}{9I_6XnY5^%G`Vx7ic(eFfcTDo$fgT3U?gl
z=H{o6pt>Lf*%b*ON8>QJEVw8yCqFM8Qm!-bF}N|LGL(Sh*qNb-p^~A1p@bnHT*{-R
z5=L3H_?Bb{U`S*rVkl-vWhi0@X2@j7WhiCHVMt^sVaR02XUJm+Vn}5u28)$oH4zl9
z$mx!sp@1QWA)lcHY(gGGIzv1|4nrnG5?0+m(cHtsP{2^ckk63DkO|fW(hsVw(EPy!
z@;kDvybNUw`EYlG>?>iY#AYJ{D8AN!v&nx@5D#JuP01YGgV>FuP8$t@(GVDz5CD}A
z3eY;h0ZKPOXpj^GBLf4t3&6<0zyfn2Be);H0Fnb~1<@d_AR45Vff2+4n*r9!zzEgK
z2=0b}^nto0AR4Tlfsp~Moq>@7tQ}tcGD5U7FhXr+g!WJvA=()jA=()jA=+Wi8>L4>
zU^E1vA;1iw1wi$`D+2?r{y#+3C^;GeqaiRXLx7RRCD_FYTq$GsAE>Sc)u-S-BUBxz
wI%Wjb(-1yL30N}|WI#~@%z?;(w1TRAa8=C60IA7G8v?Kp8l^`=fc_x>09*;->Hq)$

literal 0
HcmV?d00001

diff --git a/others/FetchCrypto.py b/others/FetchCrypto.py
new file mode 100644
index 0000000..3245bcd
--- /dev/null
+++ b/others/FetchCrypto.py
@@ -0,0 +1,219 @@
+##
+# @file FetchCrypto.py
+#
+# @brief some functions for the documentation
+#
+# @section  Author
+# - Created by Lucas Pighini
+
+import os
+import plotly.graph_objects as go
+from datetime import datetime
+import pandas as pd
+import asyncio
+import requests
+import json
+import time
+import matplotlib.pyplot as plt
+import numpy as np
+
+xdata = []
+ydata = []
+targets = [0.01, 0.02 ,0.02, 0.015, 0.04,0.02]
+stoploss = [0.02, 0.01 ,0.015, 0.02, 0.01 ,0.02]
+win = [0.2, 0.3 ,0.4, 0.5, 0.6, 0.7]
+
+
+
+btcusd_Min = 0.6425905
+batbtc_min = 0.12
+
+ethusd = 0.4542726
+trades_day= [5,10,20,50,100]
+def candles():
+    response = requests.get("https://api.hitbtc.com/api/3/public/candles/BTCUSDT")
+    df_history = pd.read_json(response.text)
+    print(response.text)
+    df_history.columns = ['timestamp','open','close','min','max','volume','volume_quote']
+    df_history['MA5'] = df_history.close.rolling(5).mean()
+    df_history['MA20'] = df_history.close.rolling(20).mean()
+    fig = go.Figure(data=[go.Candlestick(x=df_history['timestamp'],
+                open=df_history['open'],
+                high=df_history['max'],
+                low=df_history['min'],
+                close=df_history['close'],
+                name="Candles"),go.Scatter(x=df_history.timestamp, y=df_history.MA5,name="MA5", line=dict(color='orange', width=1)),
+                      go.Scatter(x=df_history.timestamp, y=df_history.MA20,name="MA20", line=dict(color='green', width=1))])
+    
+    fig.update_layout(
+    title="BTCUSDT",
+    xaxis_title="Date",
+    yaxis_title="USD",
+    font=dict(
+        family="Courier New, monospace", size=18, color="#7f7f7f")
+        )
+    fig.show()
+
+
+    df_history.to_html('temp.html')
+    print(df_history.to_string(index=False))
+
+
+
+
+
+def estimation(fee, balance,min_trade,trades_day,loss,lbl):
+    current = balance
+
+    trades = [balance]
+
+    while current >0:
+        sum = 0
+        sum += min_trade+ (min_trade*fee)
+        sum *= loss
+        current -= sum
+        trades.append(current)
+
+    print(f"Number loosing trades order : {len(trades)} with fee at : {fee} for symbol : {lbl}", )
+    plots = []
+
+    for i in range(len(trades_day)):
+        plots.append([])
+        for j in range(int(len(trades)/trades_day[i])+1):
+            if((j)*trades_day[i])>=len(trades):
+                idx = len(trades)-1
+            else:
+                idx =(j)*trades_day[i]
+            
+            plots[i].append(trades[idx])
+        plots[i].append(0)
+
+    
+    return plots
+def calcwfee(fee, trade,target):
+    p1 = trade - (trade*fee)
+    p2 = p1 + (p1*target)
+    p2 = p2 - (p2*fee)
+    pt = p2/p1 *100
+    return p2-trade, pt
+
+def calclfee(fee, trade,loss):
+    p1 = trade - (trade*fee)
+    p2 = p1 - (p1*loss)
+    p2 = p2 - (p2*fee)
+    pt = p2/p1 *100
+    return trade-p2, pt
+
+def GainLoss(balance,trade, fee,nbTrans,target, stoploss, win):
+    wins = []
+    losses = []
+    breakeven = []
+    datas = [[],[],[],[],[]]
+    for w in range(len(win)):
+        for t in range(len(target)):
+            ws,wt = calcwfee(fee,trade,target[t])
+            ls,wt = calclfee(fee,trade,stoploss[t])
+            totwin = (ws*nbTrans)*win[w]
+            totloss =(ls*nbTrans)*(1-win[w])
+            tmpLoss = stoploss[t]+(stoploss[t]*fee)
+            tmpTarget = target[t]-(target[t]*fee)
+            tmpbalance = balance + totwin -totloss
+            wins.append(totwin) 
+            losses.append(totloss)
+            breakeven.append(stoploss[t]/(target[t]+stoploss[t]))
+            datas.append([tmpbalance,target[t]*100,stoploss[t]*100,win[w]* 100,totwin,totloss,(tmpLoss/((tmpTarget)+tmpLoss))*100])
+            #print(f"Units : {tmpbalance} Trades = {nbTrans} target = {target[t]*100}% Stoploss ={stoploss[t]*100}% and %win = {win[w]* 100}  Gain = {totwin} Loss = {totloss} breakeven = {(tmpLoss/((tmpTarget)+tmpLoss))*100} ")
+   
+    print("Result with 200 trades and starting with 50 units \n")
+    df = pd.DataFrame(datas,columns=['Final Units','Target','StopLoss','Winrate','TotalGain','TotalLoss', 'Breakeven'])
+    print(df.dropna())
+
+
+def f(x, y):
+    return np.sin(np.sqrt(x ** 2 + y ** 2))
+
+
+
+def winrate():
+    x = np.linspace(0.5,10,100)
+    f = lambda x:  1/(1+x)
+    y = f(x)
+
+    plt.xlabel('Win/Loss ratio')
+    plt.ylabel('Expected winrate')
+
+    # plot the function
+    plt.plot(x,y, 'y')
+
+
+def display(lst,clr,lbl,axs):
+    axs.plot(lst , color=clr ,label=lbl,linewidth=2, markersize=12)
+    axs.legend(loc="upper right")
+def plotbreakeven(gain,loss,fee):
+    fig = plt.figure()
+    z = []
+    ax = plt.axes(projection='3d')
+
+    # Data for a three-dimensional line
+    for i in range(len(gain)):
+        stpl =loss[i] + loss[i]*fee
+        win =gain[i] - gain[i]*fee
+        z.append(stpl/win+stpl)
+        print(stpl/win+ stpl)
+    print(z)
+    ax.plot3D(gain, loss, z, 'gray')
+
+    # Data for three-dimensional scattered points
+    ax.scatter3D(gain, loss, z, c=z, cmap='Greens');
+    plt.show()
+
+#GainLoss(btcusd_Min,0.001)
+winrate()
+
+# res_l= estimation(0.0001,50,btcusd_Min,trades_day,1,"BTC/USDT")
+# res_m = estimation(0.0025,50,btcusd_Min,trades_day,1,"BTC/USDT")
+# colors = ['red','blue','green','cyan','grey']
+# figure, axis = plt.subplots(2, 2)
+
+# for i in range(len(res_m)):
+#     lbl = str(trades_day[i]) +" trades per day"
+#     display(res_m[i],colors[i],lbl,axis[0,0])
+# axis[0,0].set_xlim([0, 100])
+
+
+# axis[0,0].set_title("BTCUSDT Maker fees only lose")
+
+# for i in range(len(res_l)):
+#     lbl = str(trades_day[i]) +" trades per day"
+#     display(res_l[i],colors[i],lbl,axis[0,1])
+
+# axis[0,1].set_title("BTCUSDT Taker fees lose only")
+# axis[0,1].set_xlim([0, 100])
+
+
+# res_l = estimation(0.0001,50,btcusd_Min,trades_day,0.5,"BTC/USDT")
+# res_m = estimation(0.0025,50,btcusd_Min,trades_day,0.5,"BTC/USDT")
+
+# colors = ['red','blue','green','cyan','grey']
+
+# for i in range(len(res_m)):
+#     lbl = str(trades_day[i]) +" trades per day"
+#     display(res_m[i],colors[i],lbl,axis[1,0])
+
+# axis[1,0].set_title("BTCUSDT Maker fees 50% loss")
+# axis[1,0].set_xlim([0, 100])
+
+
+# for i in range(len(res_l)):
+#     lbl = str(trades_day[i]) +" trades per day"
+#     display(res_l[i],colors[i],lbl,axis[1,1])
+# axis[1,1].set_title("BTCUSDT Taker fees 50% loss")
+# axis[1,1].set_xlim([0, 100])
+
+# plt.show()
+
+#candles()
+GainLoss(50,1,0.0009,200,targets,stoploss,win)
+gains = [0.02, 0.03 ,0.03,0.04, 0.04, 0.04]
+losses = [0.01, 0.02 ,0.03,0.03, 0.02, 0.01]
+plotbreakeven(gains,losses,0.0009)
diff --git a/others/ParserSimulationResult.py b/others/ParserSimulationResult.py
new file mode 100644
index 0000000..9591e48
--- /dev/null
+++ b/others/ParserSimulationResult.py
@@ -0,0 +1,133 @@
+##
+# @file ParserSimulationResult.py
+#
+# @brief Contains main functions for parsing and plotting of the simulation's results
+#
+# @section  Author
+# - Created by Lucas Pighini
+
+from DataManagement import getSimulationResults
+import json
+import matplotlib.pyplot as plt
+from plotting_lib import  plotCyclesResult, plot3d_SLTP_Time, plotSLTP_Winrate_Gain,plotRatioWinrate,plotRatioDuration
+from simulation import Simulation
+
+#Get data for a givin startegy and parses it
+def ParseSimulDatas(nameStrat):
+    #get simulation results from mongo curso
+
+    row = getSimulationResults(nameStrat)
+    res = []
+    for r in row:
+        res.append(r)
+    print(res)
+    return res
+
+#count and plot number of simul with best winrate of each type of cycle
+def PlotCyclesTypes(res):
+    avs = 0
+    vas = 0
+    avs = {"BTCUSDT":0,"ETHUSDT":0,"XRPBTC":0,"BNBBUSD":0}
+    vas = {"BTCUSDT":0,"ETHUSDT":0,"XRPBTC":0,"BNBBUSD":0}
+    print("STARTOS")
+    for r in res:
+        print(r)
+        print(vas[r["market"]]) 
+        avs[r["market"]] += r["AV_wins"] + r["AV_loss"]
+        vas[r["market"]] += r["VA_wins"] + r["VA_loss"]
+
+    return avs, vas
+
+def plot3DWinrateForMarkets(res):
+    gains_WR = {"BTCUSDT":[],"ETHUSDT":[],"XRPBTC":[],"BNBBUSD":[]}
+    losses_WR = {"BTCUSDT":[],"ETHUSDT":[],"XRPBTC":[],"BNBBUSD":[]}
+    nb_gains = 0
+    nb_losses = 0
+    for r in res:
+        if bool(r["profits"]) == True:
+            gains_WR[r["market"]].append([r["StopLoss"]*100,r["TakeProfit"]*100, r["winrate"]*100])
+            nb_gains += 1
+        else:
+            losses_WR[r["market"]].append([r["StopLoss"]*100,r["TakeProfit"]*100,r["winrate"]*100])
+            nb_losses += 1
+
+    return gains_WR, losses_WR,nb_gains,nb_losses
+
+def plotRatio_SLTP_Winrate_ForMarkets(res):
+    gains_WR = {"BTCUSDT":[],"ETHUSDT":[],"XRPBTC":[],"BNBBUSD":[]}
+    losses_WR = {"BTCUSDT":[],"ETHUSDT":[],"XRPBTC":[],"BNBBUSD":[]}
+    nb_gains = 0
+    nb_losses = 0
+    for r in res:
+        if bool(r["profits"]) == True:
+            gains_WR[r["market"]].append([r["StopLoss"]/r["TakeProfit"], r["winrate"]*100])
+            nb_gains += 1
+        else:
+            losses_WR[r["market"]].append([r["StopLoss"]/r["TakeProfit"],r["winrate"]*100])
+            nb_losses += 1
+
+    return gains_WR, losses_WR,nb_gains,nb_losses
+
+def plotRatio_SLTP_Duration_ForMarkets(res):
+    gains_WR = {"BTCUSDT":[],"ETHUSDT":[],"XRPBTC":[],"BNBBUSD":[]}
+    losses_WR = {"BTCUSDT":[],"ETHUSDT":[],"XRPBTC":[],"BNBBUSD":[]}
+    nb_gains = 0
+    nb_losses = 0
+    for r in res:
+        if bool(r["profits"]) == True:
+            gains_WR[r["market"]].append([r["StopLoss"]/r["TakeProfit"], r["avg_time_order"]])
+            nb_gains += 1
+        else:
+            losses_WR[r["market"]].append([r["StopLoss"]/r["TakeProfit"],r["avg_time_order"]])
+            nb_losses += 1
+
+    return gains_WR, losses_WR,nb_gains,nb_losses
+
+#count number of simul with best winrate of each type of cycle
+def PlotCyclesTypesWinrate(res):
+    avs = 0
+    vas = 0
+    avs = {"BTCUSDT":0,"ETHUSDT":0,"XRPBTC":0,"BNBBUSD":0}
+    vas = {"BTCUSDT":0,"ETHUSDT":0,"XRPBTC":0,"BNBBUSD":0}
+    for r in res:
+        print(r)
+        if (r["AV_wins"]+1)/(r["AV_loss"]+1) > (r["VA_wins"]+1)/(r["VA_loss"]+1):
+            print(vas[r["market"]])
+            avs[r["market"]] += 1
+        else:
+            print(vas[r["market"]])
+            vas[r["market"]] += 1
+    return avs, vas
+    #p
+datas = ParseSimulDatas()
+avs, vas = PlotCyclesTypes(datas)
+
+# sim = Simulation(None,None,"BTCUSDT",None,None)
+
+# sim.startsimulation("lagrange","BTCUSDT")
+# sim = Simulation(None,None,"ETHUSDT",None,None)
+
+# sim.startsimulation("lagrange","ETHUSDT")
+# sim = Simulation(None,None,"XRPBTC",None,None)
+
+# sim.startsimulation("lagrange","XRPBTC")
+# sim = Simulation(None,None,"BNBBUSD",None,None)
+
+# sim.startsimulation("lagrange","BNBBUSD")
+
+plotCyclesResult(avs, vas,["BTCUSDT", "ETHUSDT","XRPBTC","BNBBUSD"])
+markets = ["BTCUSDT", "ETHUSDT","XRPBTC","BNBBUSD"]
+# avs, vas = PlotCyclesTypesWinrate(datas)
+# gains, losses, nb_losses, nb_gains = plotWinrateForMarkets(datas)
+# print(f"nb_gains: {nb_gains}")
+# print(f"nb_losses: {nb_losses}")
+# plotCyclesResult(avs, vas,markets)
+
+plot3d_SLTP_Time(datas)
+
+gains_WR, losses_WR,nb_gains,nb_losses = plot3DWinrateForMarkets(datas)
+plotSLTP_Winrate_Gain(gains_WR, losses_WR,markets)
+# gains_WR, losses_WR,nb_gains,nb_losses= plotRatio_SLTP_Winrate_ForMarkets(datas)
+# plotRatioWinrate(gains_WR, losses_WR,markets)
+gains_WR, losses_WR,nb_gains,nb_losses= plotRatio_SLTP_Duration_ForMarkets(datas)
+plotRatioDuration(gains_WR, losses_WR,markets)
\ No newline at end of file
diff --git a/others/__init__.py b/others/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/others/__pycache__/__init__.cpython-310.pyc b/others/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d0759d100a87bd34bd4e8630eb0fe4c2f2ff8113
GIT binary patch
literal 207
zcmd1j<>g{vU|{&k!<7u8AA<;F%*epN;K0DZP|U)>z>vZa%%I8Wx00a<B#a<_73qf-
zrxq3K=aeQV7VG<DCKV+XRqFfZCuQcOD!Ak)m*%GCl@#kI=jYZX78K;9);Z_om!`Pn
zCl~8G=a&{0>l-Vi=BDZg6y;~7mISBfrWThJrRqBt6oeEdrex-&>*tqbfXt7N&&<m#
diI3MSsJz8tlbfGXnv-e=a!WB20|NsK0|3s;H?05w

literal 0
HcmV?d00001

diff --git a/others/__pycache__/__init__.cpython-39.pyc b/others/__pycache__/__init__.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..0081f0d3d7c7ec992371dde2de26178ab79ccdb6
GIT binary patch
literal 139
zcmYe~<>g{vU|{&k!<7u8AA<;F%*epN;K0DZP|U)>z>vZa%%I8Wx00a<B#a<_8R%!^
z=ceixWTt26yQCIpm*f}dI~Ej#6eXr)=B4ZBmt>?C73;^xXXa&=#K-FuRNmsS$<0qG
N%}KQbne-WCBLH859?t*(

literal 0
HcmV?d00001

diff --git a/others/__pycache__/plotting_lib.cpython-310.pyc b/others/__pycache__/plotting_lib.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..34ec4b525760f548b07a60482fe85ea0e70c4e08
GIT binary patch
literal 6512
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
GJkkK~uVr=s

literal 0
HcmV?d00001

diff --git a/others/__pycache__/plotting_lib.cpython-39.pyc b/others/__pycache__/plotting_lib.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..db6fd0316d6e7b1e239ca4a1b3e0c6e68898fb78
GIT binary patch
literal 6428
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
J$sx@l4FGqHJc9rL

literal 0
HcmV?d00001

diff --git a/others/plotting_lib.py b/others/plotting_lib.py
new file mode 100644
index 0000000..bb238fa
--- /dev/null
+++ b/others/plotting_lib.py
@@ -0,0 +1,357 @@
+##
+# @file plotting_lib.py
+#
+# @brief Contains main functions for plotting used in documentation
+#
+# @section  Author
+# - Created by Lucas Pighini
+from cProfile import label
+import pandas_ta as ta
+import pandas as pd
+import plotly.graph_objects as go
+import matplotlib.pyplot as plt
+import json
+import numpy as np
+import random
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+from matplotlib.ticker import LinearLocator
+
+
+def plot_MA_Price_Orders(mas,prices,periodes,orders,market):
+
+    #plot 1d list of prices
+    prices=pd.DataFrame(prices,columns=['price','date'])
+    prices['date'] = pd.to_datetime(prices['date'])
+
+
+    #print head and tail
+    print(prices.head())
+    print(prices.tail())
+    #plot moving average
+    fig = go.Figure()
+    layout = go.Layout(
+        plot_bgcolor='#efefef',
+        # Font Families
+        font_family='Monospace',
+        font_color='#000000',
+        font_size=20,
+        xaxis=dict(
+            rangeslider=dict(
+                visible=False
+            ))
+    )
+    fig.update_layout(layout)
+
+    df_order = pd.DataFrame(orders,columns=['date','type','price','amount','duration'])
+    df_order['date'] = pd.to_datetime(df_order['date'])
+    #get all coplum with type = AV
+    df_order_av = df_order[df_order['type'] == 'AV']
+    df_order_va = df_order[df_order['type'] == 'VA']
+
+
+    print(df_order_av.head())
+    print(df_order_va.head())
+
+    #scatter, av in green triangle and va in red
+  
+
+
+    #set index of df to date
+    print(type(mas))
+    print(mas)
+    for p in periodes:
+        # self.sma[symbol][str(p1)].append([ma1,date])
+        df = pd.DataFrame(mas[str(p)], columns=['sma','date'])
+   
+        df['date'] = pd.to_datetime(df['date'])
+
+        print(df.head())
+        print(df.tail())  
+        fig.add_trace(
+            go.Scatter(
+                x=df['date'],
+                y=df['sma'],
+                #generate random color
+                line=dict(color=f'rgb({random.randint(0,255)},{random.randint(0,255)},{random.randint(0,255)})', width=2),
+                name='sma'+str(p)
+            )
+        )
+    #plot price
+    fig.add_trace(
+        go.Scatter(
+            x=prices['date'],
+            y=prices['price'],
+            #generate random color
+            line=dict(color="black", width=1),
+            name='price'
+        )
+    )
+    fig.add_trace(
+        go.Scatter(
+            x=df_order_av['date'],y=df_order_av['price'],mode="markers",
+            marker_symbol="triangle-up-dot",
+            marker_line_color="black", marker_color="green",
+            marker_line_width=2, marker_size=25,name="Cycle AV"
+        )
+    )
+    fig.add_trace(
+        go.Scatter(
+            x=df_order_va['date'],y=df_order_va['price'],mode="markers",
+            marker_symbol="triangle-down-dot",
+            marker_line_color="black", marker_color="red",
+            marker_line_width=2, marker_size=25,name="Cycle VA"
+        )
+    )
+    #add title
+    fig.update_layout(title_text="Moving Averages, price and orders for "+str(market))
+    fig.show()
+
+
+
+def plotSMA(df_ma, df_price):
+        # Get the data
+       
+        # Create the Plot
+        fig = go.Figure(data=[
+            go.Scatter( 
+                x=df_price.index,
+                y=df_price['price'],
+                #generate random color
+                line=dict(color="#000000", width=2),
+                name='price'
+            ),
+        ])
+        # Make it pretty
+        layout = go.Layout(
+            plot_bgcolor='#efefef',
+            # Font Families
+            font_family='Monospace',
+            font_color='#000000',
+            font_size=20,
+            xaxis=dict(
+                rangeslider=dict(
+                    visible=False
+                ))
+        )
+        fig.update_layout(layout)
+
+        fig.add_trace(
+            go.Scatter(
+                x=df_ma.index,
+                y=df_ma['SMA_10'],
+                line=dict(color='#ff9900', width=2),
+                name='SMA_10'
+            )
+        )
+        # Add the EMA 5
+        fig.add_trace(
+            go.Scatter(
+                x=df_ma.index,
+                y=df_ma['SMA_5'],
+                line=dict(color='#ff0000', width=2),
+                name='SMA_5'
+            )
+        )
+        # See things again
+        fig.show()
+
+def plot3d_SLTP_Time(datas):
+    fig = plt.figure()
+    ax = fig.add_subplot(111, projection='3d')
+    # Create the 
+    X = []
+    Y = []
+    Z = []
+    for data in datas:
+        X.append(data["StopLoss"])
+        Y.append(data["TakeProfit"])
+        Z.append(data["avg_time_order"])
+
+
+    ax.scatter3D(X, Y, Z, cmap='Greens')
+    ax.set_xlabel('StopLoss')
+    ax.set_ylabel('TakeProfit')
+    ax.set_zlabel('duration')
+    plt.show()
+
+    fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
+
+
+    # Plot the surface.
+    surf = ax.plot_trisurf(X, Y, np.array(Z), cmap=cm.coolwarm,
+                        linewidth=0, antialiased=False)
+
+    # Customize the z axis.
+    ax.set_zlim(min(Z), max(Z))
+    ax.set_xlim(max(X), min(X))
+
+    ax.zaxis.set_major_locator(LinearLocator(10))
+    # A StrMethodFormatter is used automatically
+    ax.zaxis.set_major_formatter('{x:.02f}')
+
+    # Add a color bar which maps values to colors.
+    fig.colorbar(surf, shrink=0.5, aspect=5)
+    fig.show()
+
+#for each markets, plot 3d sl tp winrate, gains in green and losses in red 
+def plotSLTP_Winrate_Gain(gains,losses,markets):
+    for m in markets:
+        fig = plt.figure()
+        ax = fig.add_subplot(111, projection="3d")
+        # Create the 
+        Xg = []
+        Yg = []
+        Zg = []
+
+        Xl = []
+        Yl = []
+        Zl = []
+        for g in gains[m]:
+            Xg.append(g[0])
+            Yg.append(g[1])
+            Zg.append(g[2])
+
+        for l in losses[m]:
+            Xl.append(l[0])
+            Yl.append(l[1])
+            Zl.append(l[2])
+
+        ax.scatter3D(Xg, Yg, Zg, cmap='Greens',color='green')
+        ax.scatter3D(Xl, Yl, Zl, cmap='Greens',color="red")
+
+        ax.set_title(m)
+        ax.set_xlabel('StopLoss')
+        ax.set_ylabel('TakeProfit')
+        ax.set_zlabel('winrate')
+        plt.show()
+
+        # fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
+
+
+        # # Plot the surface.
+        # surf = ax.plot_trisurf(X, Y, np.array(Z), cmap=cm.coolwarm,
+        #                     linewidth=0, antialiased=False)
+
+        # # Customize the z axis.
+        # ax.set_zlim(min(Z), max(Z))
+        # ax.set_xlim(max(X), min(X))
+
+        # ax.zaxis.set_major_locator(LinearLocator(10))
+        # # A StrMethodFormatter is used automatically
+        # ax.zaxis.set_major_formatter('{x:.02f}')
+
+        # # Add a color bar which maps values to colors.
+        # fig.colorbar(surf, shrink=0.5, aspect=5)
+        # fig.show()
+
+
+def plotRatioDuration(gains,losses,markets):
+    #Scatter plot of winrate for ratio for each markets
+    for m in markets:
+        fig = plt.figure()
+        xg = []
+        yg = []
+        xl = []
+        yl = []
+
+        for g in gains[m]:
+            xg.append(g[0])
+            yg.append(g[1])
+        for l in losses[m]:
+            xl.append(l[0])
+            yl.append(l[1])
+        w = plt.scatter(xg,yg,c='green')
+        l=  plt.scatter(xl,yl,c='red')
+        plt.legend((w,l), ("profits", "losses"), loc="lower right", title="Results :")
+        plt.title(f"Average duration orders with SL/TP for market {m}")
+        #add label of points
+
+        plt.xlabel('SL/TP')
+        plt.ylabel('Duration [Minutes]')
+        plt.show()
+
+def plotRatioWinrate(gains,losses,markets):
+    #Scatter plot of winrate for ratio for each markets
+    for m in markets:
+        fig = plt.figure()
+        xg = []
+        yg = []
+        xl = []
+        yl = []
+
+        for g in gains[m]:
+            xg.append(g[0])
+            yg.append(g[1])
+        for l in losses[m]:
+            xl.append(l[0])
+            yl.append(l[1])
+        plt.ylim(0,100)
+        w = plt.scatter(xg,yg,c='green')
+        l=  plt.scatter(xl,yl,c='red')
+        plt.title(f"Winrate with SL/TP for market {m}")
+        plt.legend((w,l), ("profits", "losses"), loc="lower right", title="Results :")
+
+        plt.xlabel('SL/TP')
+        plt.ylabel('winrate')
+        plt.show()
+
+
+
+def plotCyclesResult(avs, vas, markets):
+    av_markets = []
+    va_markets = []
+    width = 0.35
+    for m in markets:
+        av_markets.append(avs[m])
+        va_markets.append(vas[m])
+    fig, ax = plt.subplots()
+    ind = np.arange(4)
+    print(avs)
+    p1 = ax.bar(ind, av_markets, width, label='AV')
+    p2 = ax.bar(ind, va_markets, width,
+                bottom=av_markets, label='VA')
+
+    ax.axhline(0, color='grey', linewidth=0.8)
+    ax.set_ylabel('Scores')
+    ax.set_title('Simuls with higher AV or VA winrates')
+    ax.legend()
+    ax.set_xticks(ind)
+    ax.set_xticklabels(["BTCUSDT","ETHUSDT","XRPUSDT","BNBBUSD"])
+    # Label with label_type 'center' instead of the default 'edge'
+    ax.bar_label(p1, label_type='edge')
+    ax.bar_label(p2, label_type='edge')
+    ax.bar_label(p2)
+
+    plt.show()
+
+def plotCandles(df):
+        df = pd.DataFrame(df)
+        # Disable multiprocessing, calculate averages
+        # Create the Plot
+        fig = go.Figure(data=[
+            go.Candlestick(
+                x=df.index,
+                open=df['Open'],
+                high=df['High'],
+                low=df['Low'],
+                close=df['Close'],
+                increasing_line_color='#ff9900',
+                decreasing_line_color='black',
+                showlegend=False,
+            ),
+        ])
+        # Make it pretty
+        layout = go.Layout(
+            plot_bgcolor='#efefef',
+            # Font Families
+            font_family='Monospace',
+            font_color='#000000',
+            font_size=20,
+            xaxis=dict(
+                rangeslider=dict(
+                    visible=False
+                ))
+        )
+        fig.update_layout(layout)
+        fig.show()
diff --git a/others/profiling.py b/others/profiling.py
new file mode 100644
index 0000000..e4983a2
--- /dev/null
+++ b/others/profiling.py
@@ -0,0 +1,16 @@
+##
+# @file profilling.py
+#
+# @brief Prifling file for documentation
+#
+# @section  Author
+# - Created by Lucas Pighini
+
+import pstats
+p = pstats.Stats("outBest.o")
+res = p.sort_stats(pstats.SortKey.TIME, pstats.SortKey.CUMULATIVE).print_stats(30)
+#write results to file
+with open("profiling.txt", "w") as f:
+    f.write(str(res))
+    f.close()
+
diff --git a/others/volatility.py b/others/volatility.py
new file mode 100644
index 0000000..75859c0
--- /dev/null
+++ b/others/volatility.py
@@ -0,0 +1,50 @@
+import pandas_datareader.data as web
+import datetime
+import numpy as np
+import matplotlib.pyplot as plt
+start = datetime.datetime(2021, 1, 1)
+end = datetime.datetime(2021, 12, 31)
+NASDAQ = web.DataReader(['nasdaq100'], 'fred', start, end).dropna()
+
+start = datetime.datetime(2021, 1, 1)
+end = datetime.datetime(2021, 12, 31)
+SP500 = web.DataReader(['sp500'], 'fred', start, end).dropna()
+
+
+BTC = web.DataReader('BTC-USD', 'yahoo', start, end).dropna()
+ETH = web.DataReader('ETH-USD', 'yahoo', start, end).dropna()
+
+
+
+
+print(SP500 )
+print(len(NASDAQ ))
+print(len(BTC) )
+print(ETH )
+
+
+
+def calcVolatility(df, lbl,days):
+    df['returns'] = np.log(df[lbl]/df[lbl].shift())
+    volatility = df['returns'].std()*days**.5
+    res = str(round(volatility, 4)*100)
+    return res
+
+
+def displayVolatility(df,volatility,lbl,ax):
+
+    df['returns'].hist(ax=ax, bins=50, alpha=0.6, color='b')
+    ax.set_xlabel("Log return")
+    ax.set_ylabel("Freq of log return")
+    ax.set_title(f"{lbl} volatility: " + volatility + "%")
+    ax.plot()
+
+fig, axs = plt.subplots(2,2)
+fig.tight_layout(pad=3.0)
+
+displayVolatility(SP500,calcVolatility(SP500, "sp500",len(SP500)),"sp500",axs[0,0])
+displayVolatility(NASDAQ,calcVolatility(NASDAQ, "nasdaq100",len(NASDAQ)),"nasdaq100",axs[0,1])
+displayVolatility(BTC,calcVolatility(BTC, "Close",len(BTC)),"BTC-USD",axs[1,0])
+displayVolatility(ETH,calcVolatility(ETH, "Close",len(ETH)),"ETH-USD",axs[1,1])
+
+plt.show()
\ No newline at end of file
-- 
GitLab