diff --git a/config.xml b/config.xml
index eb13011cdf4779d3b30ceef1ce608886e7de2d73..6074c7bd07e0b131d99bbe14e3ccb50cb925932e 100644
--- a/config.xml
+++ b/config.xml
@@ -1,10 +1,10 @@
 <?xml version='1.0' encoding='utf-8'?>
-<widget id="no.nibio.vips.observation" version="1.0.9"
+<widget id="no.nibio.vips.observation" version="2.0.10"
 	xmlns="http://www.w3.org/ns/widgets"
 	xmlns:android="http://schemas.android.com/apk/res/android"
 	xmlns:cdv="http://cordova.apache.org/ns/1.0">
 	<name>VIPS Field Observation App</name>
-	<description>The Field Observation app for VIPS users. 
+	<description>The Field Observation app for VIPS users.
 Build it with 'npm run build' before any cordova
 specific actions - so that vuejs can
 compile to www folder</description>
@@ -21,16 +21,22 @@ compile to www folder</description>
 	<!--allow-intent href="mailto:*" /-->
 	<!--allow-intent href="geo:*" /-->
 	<plugin name="cordova-plugin-geolocation" spec="4.1.0" />
-	<platform name="android">
+  <preference name="StatusBarOverlaysWebView" value="false" />
+  <preference name="StatusBarStyle" value="default" />
+  <preference name="AutoHideSplashScreen" value="true" />
+  <preference name="SplashScreenDelay" value="2500" />
+
+  <platform name="android">
 		<allow-intent href="market:*" />
 		<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
       		<application android:usesCleartextTraffic="true" />
   		</edit-config>
-	</platform>
+    <preference name="AndroidWindowSplashScreenAnimatedIcon" value="platform_assets/android/splash/splashscreen_2732x2732.png" />
+  </platform>
 	<platform name="ios">
 		<allow-intent href="itms:*" />
 		<allow-intent href="itms-apps:*" />
-        
+
         <icon src="platform_assets/ios/app_icons/20.png" width="20" height="20" />
         <icon src="platform_assets/ios/app_icons/29.png" width="29" height="29" />
         <icon src="platform_assets/ios/app_icons/40.png" width="40" height="40" />
@@ -50,7 +56,9 @@ compile to www folder</description>
         <icon src="platform_assets/ios/app_icons/167.png" width="167" height="167" />
         <icon src="platform_assets/ios/app_icons/180.png" width="180" height="180" />
         <icon src="platform_assets/ios/app_icons/1024.png" width="1024" height="1024" />
-        
+
+        <splash src="platform_assets/ios/splash/Default@2x~universal~anyany.png" />
+
         <edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge">
             <string>Bruker kameraet for å ta bilder av skadegjørere i felt</string>
         </edit-config>
diff --git a/document/archive/README_Sync.md b/document/archive/README_Sync.md
index a1e388de95df606219332098b75a34ceefaf3d8a..2a2295dfa6c17063bd313679791b391a4518be5e 100644
--- a/document/archive/README_Sync.md
+++ b/document/archive/README_Sync.md
@@ -2,7 +2,7 @@
 > Technical details about Sync process
 
 ## Features
-### 1. One way sync 
+### 1. One way sync
 > One way Sync  received the required data from Server and overwrites to local (normally local storage)
 <br>
 Affected data in Ony way sync
@@ -21,6 +21,7 @@ Data in one way sync stored in localstorage system.
 Affected data in two way sync :
 ```
 Observation List
+Observation Time Series List
 Point of Interest (POI) List
 ```
 In Two way Sync, text data stored in localstorage system and image data stored in local IndexedDB
@@ -46,7 +47,7 @@ syncOneWayDifferentTimeStamp()
 > This one way sync works when data changes in server with different timestamp
 
 ### syncTwoWay()
->As mentioned earlier, two way sync works mainly on Observations and Point of Interests. 
+>As mentioned earlier, two way sync works mainly on Observations and Point of Interests.
 <br>
 This function decides which services (Observation / Point of interest) required and call method  ``` syncTwoWayInitiate() ``` for initiate two way sync.
 
diff --git a/index.html b/index.html
index 721058e84703ec36a35d7c44c51721e37c95d9d5..31ec88a9e1241f682ca8e47bfd99f93b327b2b5e 100644
--- a/index.html
+++ b/index.html
@@ -1,84 +1,96 @@
 <!doctype html>
 <html lang="en">
-  
-<head>
-    <meta charset="utf-8">
-    <meta name="format-detection" content="telephone=no">
-	<meta name="msapplication-tap-highlight" content="no">
-	<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
-  
-  <!--meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' https://code.jquery.com 'unsafe-inline' 'unsafe-eval'; media-src *; img-src 'self' http://opencache.statkart.no ; connect-src 'self' http://logic.vips.nibio.no   https://logic.vips.nibio.no  http://vipslogic-local.no  https://opencache.statkart.no;"-->
-<meta http-equiv="Content-Security-Policy" content="default-src * data: blob: 'unsafe-inline' 'unsafe-eval';worker-src blob:;connect-src 'self' *">
-    <meta name="description" content="">
-    <meta name="author" content="Tor-Einar Skog">
-    <title>VIPS Feltobservasjoner</title>
-    <!-- Bootstrap core CSS -->
-    <link href="static/css/bootstrap.min.css" rel="stylesheet">
-    <!-- Custom styles for this Boostrap template -->
-    <link href="static/css/offcanvas.css" rel="stylesheet">
-	<!-- Custom styles for this app -->
-	<link href="static/css/vipsobsapp.css" rel="stylesheet">
-
-<style>
-html, body {
-    overflow-x: inherit !important
-}
 
-.dropdown-menu{
-    transform: translate3d(5px, 35px, 0px)!important;
-}
+<head>
+  <meta charset="utf-8">
+  <meta name="format-detection" content="telephone=no">
+  <meta name="msapplication-tap-highlight" content="no">
+  <meta name="viewport"
+        content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
 
-</style>
+  <meta http-equiv="Content-Security-Policy"
+        content="default-src * data: blob: 'unsafe-inline' 'unsafe-eval';worker-src blob:;connect-src 'self' *">
+  <meta name="description" content="">
+  <meta name="author" content="Tor-Einar Skog">
+  <title>VIPS Feltobservasjoner</title>
+  <!-- Bootstrap core CSS -->
+  <link href="static/css/bootstrap.min.css" rel="stylesheet">
+  <!-- Custom styles for this Boostrap template -->
+  <link href="static/css/offcanvas.css" rel="stylesheet">
+  <!-- Custom styles for this app -->
+  <link href="static/css/vipsobsapp.css" rel="stylesheet">
 
+  <style>
+    html, body {
+      overflow-x: inherit !important
+    }
+    .dropdown-menu {
+      transform: translate3d(5px, 35px, 0px) !important;
+    }
+  </style>
 </head>
 
 <body class="bg-light">
-    
+
 <nav class="navbar fixed-top navbar-dark bg-dark" id="vipsobsappmenu">
-  
   <router-link class="navbar-brand" to="/">
-   
-  <img src="static/css/images/logo_vips_hvit.png" style="height: 27px; position: relative; top: -3px; margin-right: 15px"/><span id="appHeader" ></span></router-link>
+    <img src="static/css/images/logo_vips_hvit.png"
+         style="height: 27px; position: relative; top: -3px; margin-left:10px; margin-right: 15px"/><span
+    id="appHeader"></span></router-link>
   <button class="navbar-toggler border-0" type="button" onclick="$('.offcanvas-collapse').toggleClass('open');">
     <span class="navbar-toggler-icon" id="navbarTogglerIcon"></span>
   </button>
-  
+
   <div class="navbar-collapse offcanvas-collapse" id="menuContainer">
     <!-- The login part of the app (LoginSystem.vue) is mounted here -->
-    <login-system ></login-system>
-  <hr/>
-    <ul v-if="sharedState.uuid != '' && sharedState.uuid" class="navbar-nav mr-auto">
+    <login-system></login-system>
+    <hr/>
+    <ul v-if="sharedState.uuid != '' && sharedState.uuid" class="navbar-nav me-auto">
       <li class="nav-item">
-        <router-link class="nav-link" to="/" onclick="$('.offcanvas-collapse').toggleClass('open')">{{ $t("observationlist.heading")}}</router-link>
+        <router-link class="nav-link" to="/" onclick="$('.offcanvas-collapse').toggleClass('open')">
+          {{ $t("observationlist.heading") }}
+        </router-link>
       </li>
       <li class="nav-item">
-        <router-link class="nav-link" to="/places" onclick="$('.offcanvas-collapse').toggleClass('open')">{{ $t("placeslist.heading")}}</router-link>
+        <router-link class="nav-link" to="/observationTimeSeriesList"
+                     onclick="$('.offcanvas-collapse').toggleClass('open')">
+          {{ $t("observationTimeSeriesList.heading") }}
+        </router-link>
       </li>
-	<li class="nav-item">
-        <router-link class="nav-link" to="/cropCategory" onclick="$('.offcanvas-collapse').toggleClass('open')">{{ $t("cropcategory")}}</router-link>
+      <li class="nav-item">
+        <router-link class="nav-link" to="/places" onclick="$('.offcanvas-collapse').toggleClass('open')">
+          {{ $t("placeslist.heading") }}
+        </router-link>
       </li>
       <li class="nav-item">
-          <a class="vips-btn" data-toggle="collapse" href="#divAbout" aria-expanded="false" aria-controls="divAbout">{{ $t("about.header")}}</a>
-          <div class="collapse" id="divAbout">
-			<div v-html="$t('about.text')"></div>
-            <br>
-			{{ $t("about.version") }}: {{ version }}
-          </div>
+        <router-link class="nav-link" to="/cropCategory" onclick="$('.offcanvas-collapse').toggleClass('open')">
+          {{ $t("cropcategory") }}
+        </router-link>
+      </li>
+      <li class="nav-item">
+        <a class="vips-btn" data-bs-toggle="collapse" href="#divAbout" aria-expanded="false"
+           aria-controls="divAbout">{{ $t("about.header") }}</a>
+        <div class="collapse" id="divAbout">
+          <div v-html="$t('about.text')"></div>
+          <br>
+          {{ $t("about.version") }}: {{ version }}
+        </div>
       </li>
-
     </ul>
-  </v-if>
-    
   </div>
 </nav>
 
 <!-- This is where the main app (governed by the router) is mounted -->
 <main id="app"/>
 
-<script src="static/js/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
-<script>window.jQuery || document.write('<script src="static/js/jquery-3.5.1.slim.min.js"><\/script>')</script><script src="static/js/bootstrap.bundle.min.js"></script><script src="static/js/popper.min.js"></script>
+<script src="static/js/jquery-3.5.1.slim.min.js"
+        integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
+        crossorigin="anonymous"></script>
+<script>window.jQuery || document.write('<script src="static/js/jquery-3.5.1.slim.min.js"><\/script>')</script>
+<script src="static/js/bootstrap.bundle.min.js"></script>
+<script src="static/js/popper.min.js"></script>
 <script src="static/js/offcanvas.js"></script>
 <script src="cordova.js"></script>
 
-  </body>
+</body>
 </html>
diff --git a/package.json b/package.json
index cf88979d79b950e89331d9877b1b43facf832237..82b6e1d9c04b9ae331dbe2ae60710f3e79233518 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "vipsobservationapp",
-  "version": "1.0.9",
+  "version": "2.0.10",
   "private": true,
   "description": "The Field Pest Observation App for VIPS users",
   "author": "Tor-Einar Skog <tor-einar.skog@nibio.no>",
@@ -12,9 +12,9 @@
   },
   "dependencies": {
     "@formschema/native": "^2.0.0-alpha.2",
-    "@fortawesome/fontawesome-svg-core": "^1.3.0",
-    "@fortawesome/free-regular-svg-icons": "^6.0.0",
-    "@fortawesome/free-solid-svg-icons": "^6.0.0",
+    "@fortawesome/fontawesome-svg-core": "^6.5.0",
+    "@fortawesome/free-regular-svg-icons": "^6.5.0",
+    "@fortawesome/free-solid-svg-icons": "^6.5.0",
     "@fortawesome/vue-fontawesome": "^2.0.2",
     "@json-editor/json-editor": "^2.9.1",
     "browser-image-compression": "^1.0.17",
@@ -27,7 +27,7 @@
     "vue-router": "^3.0.1"
   },
   "devDependencies": {
-    "@fortawesome/fontawesome-free": "^5.15.3",
+    "@fortawesome/fontawesome-free": "^5.15.4",
     "@intlify/vue-i18n-loader": "^1.0.0",
     "autoprefixer": "^7.1.2",
     "babel-core": "^6.22.1",
@@ -46,6 +46,7 @@
     "cordova-plugin-camera": "^6.0.0",
     "cordova-plugin-geolocation": "^4.1.0",
     "cordova-plugin-inappbrowser": "^5.0.0",
+    "cordova-plugin-statusbar": "^4.0.0",
     "css-loader": "^0.28.0",
     "extract-text-webpack-plugin": "^3.0.0",
     "file-loader": "^1.1.4",
@@ -89,11 +90,12 @@
       "cordova-plugin-camera": {
         "ANDROIDX_CORE_VERSION": "1.6.+"
       },
-      "cordova-plugin-inappbrowser": {}
+      "cordova-plugin-inappbrowser": {},
+      "cordova-plugin-statusbar": {}
     }
   },
   "engines": {
     "node": ">= 6.0.0",
     "npm": ">= 3.0.0"
   }
-}
\ No newline at end of file
+}
diff --git a/platform_assets/android/splash/splashscreen_2732x2732.png b/platform_assets/android/splash/splashscreen_2732x2732.png
new file mode 100644
index 0000000000000000000000000000000000000000..3e4a6e07e9881c94ad0c2fa5381747c4ca347bd7
Binary files /dev/null and b/platform_assets/android/splash/splashscreen_2732x2732.png differ
diff --git a/platform_assets/ios/splash/Default@2x~universal~anyany.png b/platform_assets/ios/splash/Default@2x~universal~anyany.png
new file mode 100644
index 0000000000000000000000000000000000000000..3e4a6e07e9881c94ad0c2fa5381747c4ca347bd7
Binary files /dev/null and b/platform_assets/ios/splash/Default@2x~universal~anyany.png differ
diff --git a/src/App.vue b/src/App.vue
index 236a66d05a2d5e6cc99c9331ffcce2bd921987df..85963a26a63f2543bbc635392feca1f3979833c4 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,25 +1,25 @@
  <!--
-    
-  Copyright (c) 2022 NIBIO <http://www.nibio.no/>. 
-  
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
   This file is part of VIPSObservationApp.
   VIPSObservationApp is free software: you can redistribute it and/or modify
-  it under the terms of the NIBIO Open Source License as published by 
+  it under the terms of the NIBIO Open Source License as published by
   NIBIO, either version 1 of the License, or (at your option) any
   later version.
-  
+
   VIPSObservationApp is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   NIBIO Open Source License for more details.
-  
+
   You should have received a copy of the NIBIO Open Source License
   along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
-    
+
   Author: Bhabesh Bhabani Mukhopadhyay
   Author: Tor-Einar Skog <tor-einar.skog@nibio.no>
   Dated : 19-Aug-2021
-    
+
 -->
 <template>
     <main id="app" role="main" class="container">
@@ -33,7 +33,7 @@ import CommonUtil from "@/components/CommonUtil";
 export default {
   name: 'App',
   components : {
-    
+
 },
   methods: {
 	},
@@ -44,14 +44,3 @@ export default {
   }
 }
 </script>
-
-<style>
-body {
-  font-family: 'Avenir', Helvetica, Arial, sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  /*text-align: center;*/
-  color: #2c3e50;
-  margin-top: 15px;
-}
-</style>
diff --git a/src/components/CommonUtil.vue b/src/components/CommonUtil.vue
index 00c44084136cb6db33f278a17a6c6c75dc320c53..8162f245b984aeaf8aa314b937061090287bd4d6 100644
--- a/src/components/CommonUtil.vue
+++ b/src/components/CommonUtil.vue
@@ -15,6 +15,7 @@
 		CONST_STORAGE_PEST_LIST: 'store-pest-list',
 		CONST_STORAGE_CROP_PEST_LIST: 'store-crop-pest-list',
 		CONST_STORAGE_OBSERVATION_LIST: 'store-observation-list',
+    CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST: 'store-observation-time-series-list',
 		CONST_STORAGE_IMAGE_LIST: 'store-image-list',
 		CONST_STORAGE_POI_LIST: 'store-poi-list',
 		CONST_STORAGE_VISIBILITY_POLYGON: 'store-polygon',
@@ -34,6 +35,7 @@
 		CONST_CROP_CATEGORY_ID: 'cropCategoryId',
 		CONST_ORGANISM_ID: 'organismId',
 
+    CONST_OBSERVATION_TIME_SERIES_COUNT_START_ID: -1,
 		CONST_OBSERVATION_COUNT_START_ID: -1,
 		CONST_POI_COUNT_START_ID: -1,
 
@@ -42,7 +44,7 @@
 		CONST_URL_AUTH_UUID: '/rest/auth/uuid',
 		CONST_URL_AUTH_LOGIN: '/rest/auth/login',
 		CONST_URL_LAST_TIMESTAMP: '/rest/observation/organismsystemupdated',
-		
+
 		CONST_URL_USER: '/user',
 
 		CONST_URL_CROP_CATEGORY: '/rest/organism/cropcategory/',
@@ -52,6 +54,7 @@
 
 		CONST_URL_SYNC_UPDATE_OBSERVATIONS: '/rest/observation/syncobservationlistfromapp',
 		CONST_URL_SYNC_UPDATE_OBSERVATION: '/rest/observation/syncobservationfromapp',
+    CONST_URL_SYNC_UPDATE_OBSERVATION_TIME_SERIES: '/rest/observationtimeseries/syncfromapp',
 
 		CONST_URL_REGISTER_NEW_USER: '/rest/user/register',
 		CONST_URL_DELETE_USER: '/rest/user/deleteme',
@@ -59,6 +62,7 @@
 		CONST_URL_SYNC_UPDATE_POI: '/rest/poi/syncpoifromapp',
 
 		CONST_URL_USER_OBSERVATION_LIST: '/rest/observation/list/user',
+    CONST_URL_USER_OBSERVATION_TIME_SERIES_LIST: '/rest/observationtimeseries/list/user',
 		CONST_URL_USER_POI: '/rest/poi/user',
 		CONST_URL_POLYGON_SERVICES: '/rest/observation/polygonservices/',
 
@@ -81,12 +85,33 @@
 
 		CONST_FIELD_MANDATORY: '<font color=red>*</font>',
 
-		logInfo: function(message) {
+		logInfo: function(message, obj) {
 			if(CommonUtilLocal.CONST_DEBUG){
-				console.info(message);
+        if (obj !== undefined) {
+          console.info(message, obj);
+        } else {
+          console.info(message);
+        }
 			}
 		},
-
+    logError: function(message, obj) {
+      if(CommonUtilLocal.CONST_DEBUG) {
+        if (obj !== undefined) {
+          console.error(message, obj);
+        } else {
+          console.error(message);
+        }
+      }
+    },
+    timeSeriesLabel(observationTimeSeries) {
+      if (observationTimeSeries && observationTimeSeries.name) {
+        let timeSeriesName = observationTimeSeries.name;
+        timeSeriesName = timeSeriesName.replace(/\s/g, '');
+        timeSeriesName = timeSeriesName.slice(0, 8);
+        return timeSeriesName.toUpperCase();
+      }
+      return "";
+    },
 		setHeaderTitle: function (headerTitle) {
 			document.getElementById("appHeader").innerHTML = headerTitle;
 		},
@@ -94,10 +119,10 @@
 			return "nb";
 			// TODO: Enable this when more languages are supported
 			/*
-			return typeof navigator.language != 'undefined' ? 
+			return typeof navigator.language != 'undefined' ?
 					navigator.language.trim().substring(0, 2)
 					: null;
 			*/
 		}
 	}
-</script>
\ No newline at end of file
+</script>
diff --git a/src/components/CropCategory.vue b/src/components/CropCategory.vue
index d2f097c1ed3af467c856d41c327046bd88f0dad3..15c3a759b622c5351ca545a39983dcf0ccf41202 100644
--- a/src/components/CropCategory.vue
+++ b/src/components/CropCategory.vue
@@ -1,95 +1,109 @@
 <!--
-    
-  Copyright (c) 2022 NIBIO <http://www.nibio.no/>. 
-  
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
   This file is part of VIPSObservationApp.
   VIPSObservationApp is free software: you can redistribute it and/or modify
-  it under the terms of the NIBIO Open Source License as published by 
+  it under the terms of the NIBIO Open Source License as published by
   NIBIO, either version 1 of the License, or (at your option) any
   later version.
-  
+
   VIPSObservationApp is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   NIBIO Open Source License for more details.
-  
+
   You should have received a copy of the NIBIO Open Source License
   along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
-    
+
   Author: Bhabesh Bhabani Mukhopadhyay
   Author: Tor-Einar Skog <tor-einar.skog@nibio.no>
-    
+
 -->
 <template>
-	<div id="divCropCategory">
-		<a v-show="listSelectedIds.length > 0" class="vips-btn" @click="$router.go(-1)">{{ $t("save.label") }}</a>
-		<div v-show="listSelectedIds.length == 0" class="alert alert-info" role="alert">
-			{{ $t("crop.category.empty.alert") }}
-		</div>
-		<ul class="list-group" style="text-align: left">
-			<li class="list-group-item" v-for="item in listCropCategoris">
-				<input type="checkbox" v-bind:value="item.cropCategoryId" v-model="listSelectedIds" />
-				{{ getCropCategoryLocalName(item) }}
-			</li>
-		</ul>
-		<!-- <span>Checked names: {{ listSelectedIds }}</span> -->
-	</div>
+  <div id="divCropCategory">
+    <div class="mt-2">
+      <div class="alert alert-info" role="alert">
+        {{ $t("crop.category.empty.alert") }}
+      </div>
+      <ul class="list-group">
+        <li class="list-group-item" v-for="item in listCropCategoris">
+          <div class="form-check form-switch">
+            <input class="form-check-input" type="checkbox" v-bind:value="item.cropCategoryId" v-model="listSelectedIds">
+            <label class="form-check-label" for="cropCategoryId">{{ getCropCategoryLocalName(item) }}</label>
+          </div>
+        </li>
+      </ul>
+    </div>
+    <div class="text-end mt-2" v-show="listSelectedIds.length > 0">
+      <a class="vips-btn" @click="$router.go(-1)">{{ $t("save.label") }}</a>
+    </div>
+  </div>
 </template>
 
 <script>
-	import CommonUtil from '@/components/CommonUtil'
-	export default {
-		name: "cropCategory",
-		data() {
-			return {
-				isCropIdsNotAvailable: true,
-				listSelectedIds: [],
-				listCropCategoris: [],
-			};
-		},
-		watch: {
-			listSelectedIds: function (newVal, val) {
-				localStorage.setItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST, newVal);
-			},
-		},
-		methods: {
-			getCropCategoryLocalName: function (cropCategory) {
-				if (cropCategory.cropCategoryLocalSet != undefined) {
-					for (var i = 0; i < cropCategory.cropCategoryLocalSet.length; i++) {
-						if (cropCategory.cropCategoryLocalSet[i].cropCategoryLocalPK.locale == this.$i18n.locale) {
-							return cropCategory.cropCategoryLocalSet[i].localName;
-						}
-					}
-				}
-				return cropCategory.defaultName;
-			},
-		},
-		mounted() {
-			CommonUtil.setHeaderTitle(this.$i18n.t("cropcategory"));
-			if (localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_CATEGORY)) {
-				this.listCropCategoris = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_CATEGORY));
-			}
-
-			if (
-				null != localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST) &&
-				localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST) != "" &&
-				typeof localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST) != "undefined"
-			) {
-				this.listSelectedIds = localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST).split(",");
-				if ((this.listSelectedIds).length > 0) {
-					this.isCropIdsNotAvailable = false;
-				}
-			}
-
-
+import CommonUtil from '@/components/CommonUtil'
 
+export default {
+  name: "cropCategory",
+  data() {
+    return {
+      isCropIdsNotAvailable: true,
+      listSelectedIds: [],
+      listCropCategoris: [],
+    };
+  },
+  watch: {
+    listSelectedIds: function (newVal, val) {
+      localStorage.setItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST, newVal);
+    },
+  },
+  methods: {
+    // Must wait for crop categories and selected ids to be loaded into local storage
+    waitForCropCategories() {
+      let elapsed = 0;
+      const timeout = 4000;
+      const checkInterval = 200;
+      const checkData = setInterval(() => {
+        const categories = localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_CATEGORY);
+        const selected = localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST);
 
-		},
-	};
+        if (categories) {
+          this.listCropCategoris = JSON.parse(categories);
+          this.listSelectedIds = selected != null ? selected.split(",") : [];
+          if ((this.listSelectedIds).length > 0) {
+            this.isCropIdsNotAvailable = false;
+          }
+          clearInterval(checkData);
+        } else {
+          elapsed += checkInterval;
+          if (elapsed >= timeout) {
+            clearInterval(checkData)
+            console.error("Unable to get crop category information!")
+          }
+        }
+      }, checkInterval);
+    },
+    getCropCategoryLocalName: function (cropCategory) {
+      if (cropCategory.cropCategoryLocalSet != undefined) {
+        for (let i = 0; i < cropCategory.cropCategoryLocalSet.length; i++) {
+          if (cropCategory.cropCategoryLocalSet[i].cropCategoryLocalPK.locale == this.$i18n.locale) {
+            return cropCategory.cropCategoryLocalSet[i].localName;
+          }
+        }
+      }
+      return cropCategory.defaultName;
+    },
+  },
+  mounted() {
+    CommonUtil.setHeaderTitle(this.$i18n.t("cropcategory"));
+    this.waitForCropCategories();
+  },
+};
 </script>
 
 <style scoped>
-	.custom-checkbox .custom-control-input:checked~.custom-control-label::before {
-		background-color: green;
-	}
-</style>
\ No newline at end of file
+.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before {
+  background-color: green;
+}
+</style>
diff --git a/src/components/LoginSystem.vue b/src/components/LoginSystem.vue
index 1149de2aa930a5734e6dbff0c344ed2ed5ba53d1..d6c0ed2e3dccb796c846b34f7faed223b25245c7 100644
--- a/src/components/LoginSystem.vue
+++ b/src/components/LoginSystem.vue
@@ -1,63 +1,72 @@
 <!--
-    
-  Copyright (c) 2022 NIBIO <http://www.nibio.no/>. 
-  
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
   This file is part of VIPSObservationApp.
   VIPSObservationApp is free software: you can redistribute it and/or modify
-  it under the terms of the NIBIO Open Source License as published by 
+  it under the terms of the NIBIO Open Source License as published by
   NIBIO, either version 1 of the License, or (at your option) any
   later version.
-  
+
   VIPSObservationApp is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   NIBIO Open Source License for more details.
-  
+
   You should have received a copy of the NIBIO Open Source License
   along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
-    
+
   Author: Bhabesh Bhabani Mukhopadhyay
   Author: Tor-Einar Skog <tor-einar.skog@nibio.no>
   Dated : 19-Aug-2021
-    
+
 -->
 <template>
 	<div>
-		<div v-if="$root.sharedState.uuid" style="margin-top: 15px;">
-			<font-awesome-icon style="font-size: large; color: #3d8052; padding-left: 5px;" icon="fa-user" /> <span
-				v-text="userLoggedInName"></span>
-			<br />
-			<a class="btn btn-primary" v-on:click="handleLogout()">{{ $t("logout.button.label")}}</a>
-			<router-link to="/DeleteUserForm" class="btn btn-danger" onclick="$('.offcanvas-collapse').toggleClass('open')">{{ $t("deleteuser.button.label") }}</router-link>
+		<div v-if="$root.sharedState.uuid">
+      <div class="row mt-4">
+        <div class="col-12">
+          <font-awesome-icon style="font-size: large; color: #3d8052; padding-left: 5px;" icon="fa-user" />
+          {{ userLoggedInName }}
+        </div>
+      </div>
+
+      <div class="row mt-4">
+        <div class="col-12 ">
+          <a class="btn btn-primary" v-on:click="handleLogout()">{{ $t("logout.button.label")}}</a>
+          <router-link to="/DeleteUserForm" class="btn btn-danger" onclick="$('.offcanvas-collapse').toggleClass('open')">{{ $t("deleteuser.button.label") }}</router-link>
+        </div>
+      </div>
 		</div>
-		<div v-else>
+		<div v-else class="row">
 			<form class="my-2 my-lg-0">
-				<div class="form-group">
-					<input class="form-control mr-sm-2" type="text"
-						:placeholder="$t('login.username.field.placeholder')"
-						:aria-label="$t('login.username.field.placeholder')" v-model="username"
-						v-on:keyup.enter="handleLogin()" />
-				</div>
-				<div class="form-group">
-					<input class="form-control mr-sm-2" type="password" :placeholder="$t('login.pwd.field.placeholder')"
-						:aria-label="$t('login.pwd.field.placeholder')" v-model="password"
-						v-on:keyup.enter="handleLogin()" />
-				</div>
-				<div class="form-group">
-					<button class="btn btn-primary" type="button" v-on:click="handleLogin()"
-						v-on:keyup.enter="handleLogin()">
-						{{ $t("login.button.label")}}
-					</button>
-					<router-link to="/RegisterUserForm" class="btn btn-warning" onclick="$('.offcanvas-collapse').toggleClass('open')">{{ $t("registeruser.button.label") }}</router-link>
-				</div>
-				<div v-show="!showForgottenPasswordForm && !showForgottenPasswordSubmitSuccessMsg"  class="form-group" v-on:click="showForgottenPasswordForm=true"><a href="#" class="card-link">{{ $t("login.forgotpassword.label") }}</a></div>
+
+        <div class="form-floating mb-3">
+          <input id="username" type="text" class="form-control" v-model="username" @keyup.enter="handleLogin()" autocapitalize="none" />
+          <label for="username">{{ this.$i18n.t("login.username.field.placeholder") }}</label>
+        </div>
+        <div class="form-floating mb-3">
+          <input id="password" type="password" class="form-control" v-model="password" @keyup.enter="handleLogin()"/>
+          <label for="password">{{ this.$i18n.t("login.pwd.field.placeholder") }}</label>
+        </div>
+
+				<div class="form-group mb-3 justify-content-end">
+          <router-link to="/RegisterUserForm" class="btn btn-warning" onclick="$('.offcanvas-collapse').toggleClass('open')">{{ $t("registeruser.button.label") }}</router-link>
+          <button class="btn btn-primary ms-2" type="button" @click="handleLogin()" @keyup.enter="handleLogin()">
+            {{ $t("login.button.label")}}
+          </button>
+        </div>
+				<div class="form-group mb-3 justify-content-end" v-show="!showForgottenPasswordForm && !showForgottenPasswordSubmitSuccessMsg" @click="showForgottenPasswordForm=true; submitFailed=false; errorMessage=undefined;">
+          <a href="#" class="card-link">{{ $t("login.forgotpassword.label") }}</a>
+        </div>
 				<div v-show="showForgottenPasswordForm" >
-					<h4>{{ $t("login.forgotpassword.label") }}</h4>
-					{{ $t("login.forgotpassword.description")}}
-					<div class="form-group">
-						<input type="email" class="form-control" v-model="email" :placeholder="$t('login.forgotpassword.field.placeholder')"/>
+					<h4>{{ $t("login.forgotpassword.label") }} <a href="#" @click.prevent="showForgottenPasswordForm=false">Lukk</a></h4>
+					<p>{{ $t("login.forgotpassword.description")}}</p>
+					<div class="form-floating mb-3">
+						<input id="email" type="email" class="form-control" v-model="email" :placeholder="$t('login.forgotpassword.field.placeholder')"/>
+            <label for="email">{{ $t('login.forgotpassword.field.placeholder') }}</label>
 					</div>
-					<div class="form-group">
+					<div class="form-group mb-3">
 						<button class="btn btn-primary" type="button" v-on:click="handleForgottenPassword()">
 							{{ $t("login.forgotpassword.button.label")}}
 						</button>
@@ -67,15 +76,9 @@
 					<h4>{{ $t("login.forgotpassword.label") }}</h4>
 					{{ $t("login.forgotpassword.success.msg")}}
 				</div>
-				
-				<div v-show="errMsg" class="alert alert-warning alert-dismissible fade show">
-					{{errMsg}}
-					<button type="button" class="close" data-dismiss="alert" aria-label="Close">
-						<span aria-hidden="true">&times;</span>
-					</button>
-				</div>
-				<div v-show="isLogginFail" class="text-danger">
-					{{ $t("login.systems.wrong.credential") }}
+
+				<div v-if="submitFailed && errorMessage" class="form-group alert alert-danger mt-4">
+          {{ errorMessage }}
 				</div>
 			</form>
 
@@ -109,8 +112,8 @@
 				password: "",
 				appUser: {},
 				isSyncNeeded: false,
-				errMsg: '',
-				isLogginFail: false,
+				submitFailed: false,
+        errorMessage: undefined,
 				email: "",
 				showForgottenPasswordForm: false,
 				showForgottenPasswordSubmitSuccessMsg: false
@@ -120,7 +123,6 @@
 		methods: {
 			/** Get  user details from local storage */
 			getUserFromStorage() {
-
 				let strUser = localStorage.getItem(CommonUtil.CONST_STORAGE_USER_DETAIL);
 				if (strUser && strUser != 'undefined') {
 					let user = JSON.parse(strUser);
@@ -132,9 +134,9 @@
 					this.userLoggedInName = this.$root.sharedState.user.firstName + " " + this.$root.sharedState.user.lastName;
 				}
 				/** Show the observation list instead of welcome page if user is logged in */
-				if(this.$root.sharedState.uuid)
-				{
-					this.$router.push("/");
+        const cropCategorySelected = localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST) !== null;
+				if(this.$root.sharedState.uuid && !cropCategorySelected) {
+					this.$router.push("/cropCategory");
 				}
 			},
 
@@ -149,7 +151,6 @@
 						method: "GET",
 						headers: jsonHeader,
 					}).then((response) => {
-
 						if (response.status != 200 && response.status != 201) {
 							this.$root.sharedState.uuid = '';
 						} else {
@@ -157,6 +158,7 @@
 							this.getUserFromStorage();
 							/** Sync Operation for valid timestamp */
 							this.$refs.Sync.syncOneWayDifferentTimeStamp(this.appUser);
+              this.$refs.Sync.syncTwoWayAtLogin();
 						}
 					});
 				}
@@ -170,11 +172,18 @@
 			},
 			/** Login process . sending user credential */
 			handleLogin() {
-				this.showForgottenPasswordSubmitSuccessMsg = false;
+        this.showForgottenPasswordSubmitSuccessMsg = false;
+        this.removeError();
 				let This = this;
 
 				this.$root.sharedState.uuid = '';
 				localStorage.setItem(CommonUtil.CONST_STORAGE_UUID, "");
+
+        // Validate input
+        if (!this.username || !this.password) {
+          this.createLoginError(-1, this.$i18n.t("login.systems.user.password.required"))
+          return
+        }
 				let jsonBody = JSON.stringify({"username": this.username, "password": this.password});
 				/** Fetch to get UUID */
 				fetch(
@@ -189,11 +198,11 @@
 				)
 					.then(function (response) {
 						if (response.status === 200 || response.status === 201) {
-							This.isLogginFail = false;
+							This.removeError();
 							return response.json();
 						}
 						else {
-							This.isLogginFail = true;
+              This.createLoginError(response.status);
 							return false;
 						}
 					})
@@ -231,11 +240,11 @@
 										this.$refs.Sync.isSyncOnewayNeeded(loggedUser);
 										this.$refs.Sync.syncTwoWayAtLogin();
 										localStorage.setItem(CommonUtil.CONST_STORAGE_UUID, uuid);
-										if (this.$router.currentRoute.path != "/") {
-											this.$router.push('/')
+                    if (this.$router.currentRoute.path !== "/cropCategory") {
+                      this.$router.push("/cropCategory");
 										}
 									}
-									
+
 									this.createIndexedDB();
 								}
 								); // END inner fetch
@@ -245,11 +254,11 @@
 			createIndexedDB() {
 				// User is successfully logged in. We create the database (indexedDB)
 				// for storing images
-				
+
 				// Load the database, in case we need to create the schema
 				let dbRequest = indexedDB.open(CommonUtil.CONST_DB_NAME, CommonUtil.CONST_DB_VERSION);
-				
-		
+
+
 				dbRequest.onupgradeneeded = function (event) {
 					CommonUtil.logInfo("No/outdated IndexedDB database found. Updating schema.");
 					// Define the database schema here
@@ -274,6 +283,12 @@
 				this.$router.push('/Logout');
 			},
 			handleForgottenPassword: async function(){
+        this.removeError();
+
+        if(!this.email || this.email.indexOf("@") < 0) {
+          this.createLoginError(-1, this.$i18n.t("login.systems.invalid.email"));
+          return;
+        }
 				const formData = new URLSearchParams();
 				formData.append("email", this.email);
 				const response = await fetch(
@@ -296,6 +311,7 @@
 			removeStoredData() {
 				/* Remove localstorage */
 				localStorage.removeItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST);
+        localStorage.removeItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST)
 				localStorage.removeItem(CommonUtil.CONST_STORAGE_UUID);
 				localStorage.removeItem(CommonUtil.CONST_STORAGE_USER_DETAIL);
 				localStorage.removeItem(CommonUtil.CONST_STORE_TIMESTAMP);
@@ -319,8 +335,23 @@
 				delReq.onblocked = function () {
 					CommonUtil.logInfo('delete DB not successful because of operation block');
 				}
-
-			}
+			},
+      removeError() {
+        this.submitFailed = false;
+        this.errorMessage = undefined;
+      },
+      createLoginError(status, message) {
+        this.submitFailed = true;
+        if(message) {
+          this.errorMessage = message;
+        } else if (status === 500 || status === 503) {
+          this.errorMessage = this.$i18n.t("login.systems.server.error");
+        } else if(status === 404) {
+          this.errorMessage = this.$i18n.t("login.systems.wrong.credential");
+        } else {
+          this.errorMessage = "Error " + status;
+        }
+      },
 
 		},
 		mounted() {
@@ -346,4 +377,4 @@
 </script>
 
 <style scoped>
-</style>
\ No newline at end of file
+</style>
diff --git a/src/components/MapObservation.vue b/src/components/MapObservation.vue
index 6f7605b3088433c2001d308d45435119fb9939cd..08bd87f1bcff95511d8a1f7d4912efb287a0210c 100644
--- a/src/components/MapObservation.vue
+++ b/src/components/MapObservation.vue
@@ -1,584 +1,571 @@
 <!--
-    
-  Copyright (c) 2022 NIBIO <http://www.nibio.no/>. 
-  
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
   This file is part of VIPSObservationApp.
   VIPSObservationApp is free software: you can redistribute it and/or modify
-  it under the terms of the NIBIO Open Source License as published by 
+  it under the terms of the NIBIO Open Source License as published by
   NIBIO, either version 1 of the License, or (at your option) any
   later version.
-  
+
   VIPSObservationApp is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   NIBIO Open Source License for more details.
-  
+
   You should have received a copy of the NIBIO Open Source License
   along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
-    
+
   Author: Bhabesh Bhabani Mukhopadhyay
   Author: Tor-Einar Skog <tor-einar.skog@nibio.no>
   Dated : 19-Aug-2021
-    
+
 -->
 <template>
-	<div>
-		<div id='map-observation'>
-			<div v-if="isMyMapPanelVisible">
-				<div v-if="isMapClicked">
-					<div id="btnBack">
-						<router-link id='btnBack_1'
-							:to="{name: 'Observation', params:{observationId:myObservationId, paramGeoinfo:initGeoInfo, paramObservation:mapObservation }}"
-							class="vips-btn">
-							{{ $t("map.link.cancel.label") }} <i class="fas fa-times"></i>
-						</router-link>
-						&nbsp;
-						<router-link id='btnBack_2'
-							:to="{name: 'Observation', params:{observationId:myObservationId, paramGeoinfo:myGeoInfo, paramObservation:mapObservation}}"
-							class="vips-btn">
-							{{ $t("map.link.OK.label") }} <i class="fas fa-check"></i>
-						</router-link>
-					</div>
-				</div>
-				<div v-else>
-					<router-link id='btnBack'
-						:to="{name: 'Observation', params:{observationId:myObservationId, paramGeoinfo:myGeoInfo, paramObservation:mapObservation}}"
-						class="vips-btn">
-						<span v-if="wasPoiSelected">{{ $t("map.link.OK.label") }}</span><span v-else>{{ $t("map.link.back.label") }}</span> 
-					</router-link>
-				</div>
-			</div>
-			<div v-if="isMyMapPanelVisible" id='map-mylocation' style="margin: 5px;">
-				<a v-on:click="myposition" style="cursor:pointer; ">
-					<font-awesome-icon style="font-size: x-large; padding: 5px; color: white; background-color:#3d8052;"
-						icon="location-crosshairs" /></a>
-			</div>
-		</div>
-
-
-
-		<div id="ObservationMapPanel" v-if="isMyMapPanelVisible" ref='ObservationMapPanel'>
-			<div>
-
-				<select class="form-control" v-model="poi.pointOfInterestId" v-on:change="selectPOI($event)"
-					ref="dropDownPOI">
-					<option v-for="poi in lstPOI" v-bind:value="poi.pointOfInterestId">{{poi.name}}</option>
-				</select>
-				<div id="poiMarker">
-					<img src="@/assets/map_icon.png">
-				</div>
-
-			</div>
-		</div>
-		<div v-else>
-			<div id='divPrivacy' ref='divPrivacy' class="form-group">
-				<visibility :locationIsPrivate="locationIsPrivate" :polygonService="polygonService"
-					v-on:visibilityMapAction="visibilityMapAction" />
-			</div>
-		</div>
-		<common-util ref="CommonUtil" />
-	</div>
+  <div>
+    <div id='map-observation'>
+      <div v-if="isMyMapPanelVisible">
+        <div v-if="isMapClicked || wasPoiSelected">
+          <div id="btnBack">
+            <router-link id='btnBack_1'
+                         :to="{name: 'Observation', params:{observationId:myObservationId, paramGeoinfo:initGeoInfo, paramObservation:mapObservation }}"
+                         class="vips-btn">
+              {{ $t("map.link.cancel.label") }} <i class="fas fa-times"></i>
+            </router-link>
+            &nbsp;
+            <router-link id='btnBack_2'
+                         :to="{name: 'Observation', params:{observationId:myObservationId, paramGeoinfo:myGeoInfo, paramObservation:mapObservation}}"
+                         class="vips-btn">
+              {{ $t("map.link.OK.label") }} <i class="fas fa-check"></i>
+            </router-link>
+          </div>
+        </div>
+        <div v-else>
+          <router-link id='btnBack'
+                       :to="{name: 'Observation', params:{observationId:myObservationId, paramGeoinfo:myGeoInfo, paramObservation:mapObservation}}"
+                       class="vips-btn">
+            {{ $t("map.link.back.label") }}
+          </router-link>
+        </div>
+      </div>
+      <div v-if="isMyMapPanelVisible" id='map-mylocation' style="margin: 5px;">
+        <a v-on:click="myposition" style="cursor:pointer; ">
+          <font-awesome-icon style="font-size: x-large; padding: 5px; color: white; background-color:#3d8052;"
+                             icon="location-crosshairs"/>
+        </a>
+      </div>
+    </div>
+
+
+    <div id="ObservationMapPanel" v-if="isMyMapPanelVisible" ref='ObservationMapPanel'>
+      <div class="p-2">
+        <div class="form-check form-switch pb-2">
+          <input type="checkbox" class="form-check-input" v-model="showOnlyUsersPOIs"  id="showOnlyUsersPOIs" @change="handleFiltersChanged">
+          <label class="form-check-label" for="showOnlyUsersPOIs">{{ $t("places.label.onlyUsersPOIs") }}</label>
+        </div>
+        <div>
+          <select class="form-select" v-model="poi.pointOfInterestId" v-on:change="selectPOI($event)">
+            <option v-for="poi in lstPOI" v-bind:value="poi.pointOfInterestId">{{ poi.name }}</option>
+          </select>
+        </div>
+      </div>
+      <div id="poiMarker">
+        <img src="@/assets/map_icon.png">
+      </div>
+    </div>
+    <div v-else>
+      <div id='divPrivacy' ref='divPrivacy' class="form-group">
+        <visibility :locationIsPrivate="locationIsPrivate" :polygonService="polygonService" :disabled="disabled"
+                    v-on:visibilityMapAction="visibilityMapAction"/>
+      </div>
+    </div>
+    <common-util ref="CommonUtil"/>
+  </div>
 </template>
 
 <script>
-	import CommonUtil from '@/components/CommonUtil'
-	import 'ol/ol.css';
-	import Map from 'ol/Map';
-	import OSM from 'ol/source/OSM';
-	import TileLayer from 'ol/layer/Tile';
-	import View from 'ol/View';
-	import WMTS, {optionsFromCapabilities} from 'ol/source/WMTS';
-	import WMTSCapabilities from 'ol/format/WMTSCapabilities';
-
-	import {Vector as VectorSource} from 'ol/source';
-	import {Vector as VectorLayer} from 'ol/layer';
-	import Collection from 'ol/Collection';
-	import {fromLonLat} from 'ol/proj';
-
-	import Circle from 'ol/geom/Circle';
-	import {Circle as CircleStyle, Fill, Stroke, Style, Icon} from 'ol/style';
-	import Feature from 'ol/Feature';
-	import GeoJSON from 'ol/format/GeoJSON';
-
-	import {toStringXY} from 'ol/coordinate';
-	import {transform} from 'ol/proj';
-	import Point from 'ol/geom/Point';
-	import {Modify} from 'ol/interaction';
-	import Draw from 'ol/interaction/Draw';
-	import Overlay from 'ol/Overlay';
-	import Geolocation from 'ol/Geolocation';
-	import Visibility from '@/components/Visibility'
-
-	import i18n from '@/App'
-
-
-
-	let parser = new WMTSCapabilities();
-
-
-	export default {
-		name: 'MapObservation',
-		props: ['observationId', 'geoinfo', 'isMapPanelVisible', 'locationPointOfInterestId', 'locationIsPrivate', 'polygonService', 'observation'],
-		components: {CommonUtil, Visibility},
-		data() {
-			return {
-				CONST_URL_DOMAIN: '',
-				isMyMapPanelVisible: '',
-				myGeoInfo: '',
-				initGeoInfo: '',
-				latitude: 0,
-				longitude: 0,
-				mapZoom: 0,
-				mapInteractions: '',
-				lstPOI: [],
-				poi: {pointOfInterestId: 'undefined', name: this.$i18n.t("mapobservation.label.selectPOI")},
-				myMap: '',
-				myObservationId: '',
-				mapObservation: {},
-				isMapClicked: false,
-				wasPoiSelected: false
-			}
-		},
-		methods: {
-			visibilityMapAction(paramPrivate, paramPolygonService) {
-				this.$emit('visibilityObservationAction', paramPrivate, paramPolygonService);
-			},
-			/** My current location */
-			myposition() {
-				let options = {enableHighAccuracy: true};
-				navigator.geolocation.getCurrentPosition(this.geolocationSuccess, this.geolocationError, options);
-
-			},
-			/**
-			 * Get GeoInfo
-			 *  */
-			geolocationSuccess(pos) {
-				this.poi.pointOfInterestId = 'undefined';
-				this.longitude = pos.coords.latitude;
-				this.latitude = pos.coords.longitude;
-				let coord = [pos.coords.longitude, pos.coords.latitude];
-				let transFormCord = transform(coord, 'EPSG:3857', 'EPSG:4326');
-				this.myMap.getView().setCenter(fromLonLat(coord));
-
-				this.clearMapLayers();
-
-				let myImage = this.myImage();
-
-				let vectorSource = new VectorSource({});
-				var iconFeature = new Feature({
-					geometry: new Point(fromLonLat(coord))
-				});
-
-				vectorSource.addFeature(iconFeature);
-				var vectorLayer = new VectorLayer({
-					source: vectorSource,
-					style: new Style({
-						image: myImage,
-					}),
-				});
-
-
-
-				let geoJSON = new GeoJSON();
-				let resultGeoJSON = geoJSON.writeFeatures(vectorLayer.getSource().getFeatures());
-				this.myGeoInfo = JSON.parse(resultGeoJSON);
-				this.myGeoInfo.features[0].geometry.coordinates = coord;
-
-				this.myMap.addLayer(vectorLayer);
-
-				this.myMap.getView().setZoom(CommonUtil.CONST_GPS_OBSERVATION_ZOOM);
-
-			},
-			geolocationError(error) {
-				CommonUtil.logInfo('geolocation error : ' + geolocationError);
-			},
-
-			/** Display of Map */
-			initMap(myLatitude, myLongitude) {
-
-				let pointOfInterestId = this.poi.pointOfInterestId;
-				let This = this;
-				let urlMap = CommonUtil.CONST_GPS_URL_NORWAY_MAP;    // Norway Map
-
-				let myGeoInfo = this.myGeoInfo;
-				let latitude = myLatitude;
-				let longitude = myLongitude;
-				let mapZoom = this.mapZoom;
-
-				let image = this.myImage();
-
-
-				let vectorSource = this.myVectorGeoSource();
-
-				let vectorGeoLayer = this.myVectorGeoLayer(vectorSource, image);
-
-				let mapInteractions = this.myInteractions(this.mapInteractions);
-
-				let mapView = this.myView(latitude, longitude, mapZoom);
-
-
-				let localIsMyMapPanelVisible = this.isMyMapPanelVisible;
-				let coordinate = [latitude, longitude];
-
-				let pointMarker = this.myOverLay(coordinate);
-				let pointMarkerCoord = this.myOverLayCoord(latitude, longitude);
-
-				/* Fetch Norway Map */
-
-				fetch(urlMap)
-					.then(function (response) {
-						return response.text();
-					})
-					.then(function (text) {
-						let parser = new WMTSCapabilities();
-						let result = parser.read(text);
-
-						let options = optionsFromCapabilities(result, {
-							layer: 'topo4',
-							matrixSet: 'EPSG:3857',
-						});
-						//CommonUtil.logInfo(options);
-						// Need to force https on the tiles URL (bug in the service?)
-						options.urls[0] = options.urls[0].replace("http","https");
-
-						This.myMap = new Map({
-							layers: [
-
-								new TileLayer({
-									opacity: 1,
-									source: new WMTS(options),
-								}),
-								vectorGeoLayer
-
-							],
-							controls: [],
-							interactions: mapInteractions,
-
-							target: 'map-observation',
-							view: mapView,
-							overlays: [pointMarkerCoord],
-							renderer: 'canvas',
-						});
-
-
+import CommonUtil from '@/components/CommonUtil'
+import 'ol/ol.css';
+import Map from 'ol/Map';
+import TileLayer from 'ol/layer/Tile';
+import View from 'ol/View';
+import WMTS, {optionsFromCapabilities} from 'ol/source/WMTS';
+import WMTSCapabilities from 'ol/format/WMTSCapabilities';
+
+import {Vector as VectorSource} from 'ol/source';
+import {Vector as VectorLayer} from 'ol/layer';
+import {fromLonLat, transform} from 'ol/proj';
+import {Circle as CircleStyle, Fill, Stroke, Style} from 'ol/style';
+import Feature from 'ol/Feature';
+import GeoJSON from 'ol/format/GeoJSON';
+
+import {toStringXY} from 'ol/coordinate';
+import Point from 'ol/geom/Point';
+import Overlay from 'ol/Overlay';
+import Visibility from '@/components/Visibility'
+
+
+let parser = new WMTSCapabilities();
+
+
+export default {
+  name: 'MapObservation',
+  props: ['observationId', 'geoinfo', 'isMapPanelVisible', 'locationPointOfInterestId', 'locationIsPrivate', 'polygonService', 'observation', 'disabled'],
+  components: {CommonUtil, Visibility},
+  data() {
+    return {
+      CONST_URL_DOMAIN: '',
+      isMyMapPanelVisible: '',
+      myGeoInfo: '',
+      initGeoInfo: '',
+      latitude: 0,
+      longitude: 0,
+      mapZoom: 0,
+      mapInteractions: '',
+      lstPOI: [],
+      poi: {pointOfInterestId: 'undefined', name: this.$i18n.t("mapobservation.label.selectPOI")},
+      myMap: '',
+      myObservationId: '',
+      mapObservation: {},
+      isMapClicked: false,
+      wasPoiSelected: false,
+      showOnlyUsersPOIs: true
+    }
+  },
+  methods: {
+    visibilityMapAction(paramPrivate, paramPolygonService) {
+      this.$emit('visibilityObservationAction', paramPrivate, paramPolygonService);
+    },
+    /** My current location */
+    myposition() {
+      let options = {enableHighAccuracy: true};
+      navigator.geolocation.getCurrentPosition(this.geolocationSuccess, this.geolocationError, options);
+
+    },
+    /**
+     * Get GeoInfo
+     *  */
+    geolocationSuccess(pos) {
+      this.poi.pointOfInterestId = 'undefined';
+      this.longitude = pos.coords.latitude;
+      this.latitude = pos.coords.longitude;
+      let coord = [pos.coords.longitude, pos.coords.latitude];
+      let transFormCord = transform(coord, 'EPSG:3857', 'EPSG:4326');
+      this.myMap.getView().setCenter(fromLonLat(coord));
+
+      this.clearMapLayers();
+
+      let myImage = this.myImage();
+
+      let vectorSource = new VectorSource({});
+      var iconFeature = new Feature({
+        geometry: new Point(fromLonLat(coord))
+      });
+
+      vectorSource.addFeature(iconFeature);
+      var vectorLayer = new VectorLayer({
+        source: vectorSource,
+        style: new Style({
+          image: myImage,
+        }),
+      });
+
+
+      let geoJSON = new GeoJSON();
+      let resultGeoJSON = geoJSON.writeFeatures(vectorLayer.getSource().getFeatures());
+      this.myGeoInfo = JSON.parse(resultGeoJSON);
+      this.myGeoInfo.features[0].geometry.coordinates = coord;
+
+      this.myMap.addLayer(vectorLayer);
+
+      this.myMap.getView().setZoom(CommonUtil.CONST_GPS_OBSERVATION_ZOOM);
+
+    },
+    geolocationError(error) {
+      CommonUtil.logInfo('geolocation error : ' + geolocationError);
+    },
+
+    /** Display of Map */
+    initMap(myLatitude, myLongitude) {
+
+      let pointOfInterestId = this.poi.pointOfInterestId;
+      let This = this;
+      let urlMap = CommonUtil.CONST_GPS_URL_NORWAY_MAP;    // Norway Map
+
+      let myGeoInfo = this.myGeoInfo;
+      let latitude = myLatitude;
+      let longitude = myLongitude;
+      let mapZoom = this.mapZoom;
+
+      let image = this.myImage();
+
+
+      let vectorSource = this.myVectorGeoSource();
+
+      let vectorGeoLayer = this.myVectorGeoLayer(vectorSource, image);
+
+      let mapInteractions = this.myInteractions(this.mapInteractions);
+
+      let mapView = this.myView(latitude, longitude, mapZoom);
+
+
+      let localIsMyMapPanelVisible = this.isMyMapPanelVisible;
+      let coordinate = [latitude, longitude];
+
+      let pointMarker = this.myOverLay(coordinate);
+      let pointMarkerCoord = this.myOverLayCoord(latitude, longitude);
+
+      /* Fetch Norway Map */
+
+      fetch(urlMap)
+        .then(function (response) {
+          return response.text();
+        })
+        .then(function (text) {
+          let parser = new WMTSCapabilities();
+          let result = parser.read(text);
+
+          let options = optionsFromCapabilities(result, {
+            layer: 'topo4',
+            matrixSet: 'EPSG:3857',
+          });
+          //CommonUtil.logInfo(options);
+          // Need to force https on the tiles URL (bug in the service?)
+          options.urls[0] = options.urls[0].replace("http", "https");
+
+          This.myMap = new Map({
+            layers: [
 
-						/* On click event of map to get the location */
-						This.myMap.on(['singleclick'], function (event) {
-							if (localIsMyMapPanelVisible) {
-								This.isMapClicked = true;
+              new TileLayer({
+                opacity: 1,
+                source: new WMTS(options),
+              }),
+              vectorGeoLayer
 
-								This.poi.pointOfInterestId = 'undefined';
+            ],
+            controls: [],
+            interactions: mapInteractions,
 
-								let transFormCord = transform(event.coordinate, 'EPSG:3857', 'EPSG:4326');
-								This.latitude = transFormCord[0];
-								This.longitude = transFormCord[1];
-								let mapNewCord = toStringXY(transform(event.coordinate, 'EPSG:3857', 'EPSG:4326'), 4);
+            target: 'map-observation',
+            view: mapView,
+            overlays: [pointMarkerCoord],
+            renderer: 'canvas',
+          });
 
 
-								This.myMap.getView().setCenter(fromLonLat(transFormCord));
+          /* On click event of map to get the location */
+          This.myMap.on(['singleclick'], function (event) {
+            if (localIsMyMapPanelVisible) {
+              This.isMapClicked = true;
 
-								/******* Below code for vector marker positioning */
+              This.poi.pointOfInterestId = 'undefined';
 
-								var iconFeature = new Feature({
-									geometry: new Point(fromLonLat(transFormCord))
-								});
-								This.clearMapLayers();
-								if (vectorSource) {}
-								else {
-									vectorSource = new VectorSource({});
-								}
+              let transFormCord = transform(event.coordinate, 'EPSG:3857', 'EPSG:4326');
+              This.latitude = transFormCord[0];
+              This.longitude = transFormCord[1];
+              let mapNewCord = toStringXY(transform(event.coordinate, 'EPSG:3857', 'EPSG:4326'), 4);
 
-								if (vectorSource) {
-									vectorSource.addFeature(iconFeature);
 
-									var vectorLayer = new VectorLayer({
-										source: vectorSource,
-										style: new Style({
-											image: image,
-										}),
-									});
+              This.myMap.getView().setCenter(fromLonLat(transFormCord));
 
-									This.myMap.addLayer(vectorLayer);
+              /******* Below code for vector marker positioning */
 
-									let geoGSON = new GeoJSON();
-									let resultGeoGSON = geoGSON.writeFeatures(vectorLayer.getSource().getFeatures(), {
-										dataProjection: 'EPSG:4326',
-										featureProjection: 'EPSG:3857'
-									});
-									This.myGeoInfo = JSON.parse(resultGeoGSON);
+              var iconFeature = new Feature({
+                geometry: new Point(fromLonLat(transFormCord))
+              });
+              This.clearMapLayers();
+              if (vectorSource) {
+              } else {
+                vectorSource = new VectorSource({});
+              }
 
-								}
-							}
-
-						});
-
-					})
-
-
-			},
-
-
-			myVectorGeoSource() {
-				if (this.myGeoInfo) {
-					return new VectorSource({
-						features: new GeoJSON({
-							dataProjection: "EPSG:4326",
-							featureProjection: "EPSG:3857"
-						}).readFeatures(this.myGeoInfo),
-					})
-				}
-			},
-
-			myVectorGeoLayer(vectorSource, image) {
-				return new VectorLayer({
-					source: vectorSource,
-					style: new Style({
-						image: image,
-					}),
-				})
-			},
-			myView(latitude, longitude, mapZoom) {
-				return new View({
-					center: fromLonLat([latitude, longitude]),
-					zoom: mapZoom
-				})
-			},
-
-			myImage() {
-				var fill = new Fill({
-					color: 'white'
-				});
-
-				return new CircleStyle({
-					radius: 15,
-					fill: fill,
-					stroke: new Stroke({color: '#3d8052', width: 15}),
-				});
-			},
-
-
-			myOverLay(coordinates) {
-				return new Overlay({
-					position: fromLonLat(coordinates),
-					positioning: 'bottom-center',
-					element: document.getElementById('poiMarker'),
-					stopEvent: false
-				});
-			},
-
-
-			myOverLayCoord(latitude, longitude) {
-				let coordinate = [latitude, longitude];
-				return this.myOverLay(coordinate);
-			},
-
-
-			myStyleFunction(styles, feature) {
-				return styles[feature.getGeometry().getType()];
-			},
-
-			myInteractions(mapInteractions) {
-				return (mapInteractions) ? [] : '';
-			},
-
-			/* Get point of interest */
-			getMyPointOfInterst(lstPOI) {
-				let userUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
-				let jsonHeader = {Authorization: userUUID};
-
-				lstPOI.push({pointOfInterestId: 'undefined', name: this.$i18n.t("mapobservation.label.noPOIselected")});
-
-				fetch(this.CONST_URL_DOMAIN + CommonUtil.CONST_URL_USER_POI,
-					{
-						method: "GET",
-						headers: jsonHeader,
-					}).then((response) => {
-						if (response.status == 200) {
-							return response.json()
-						}
-					})
-					.then((jsonLstPOI) => {
-						$.each(jsonLstPOI, function (index, poi) {
-							let myPOI = poi;
-							lstPOI.push(myPOI);
-						})
-
-					})
-			},
-
-			/* Clear existing sources in map layers */
-			clearMapLayers() {
-				let myLayers = this.myMap.getLayers();
-				if (myLayers) {
-					this.myMap.getLayers().forEach(function (layer) {
-						let source = layer.get('source');
-						if (source) {
-							source.clear();
-						}
-
-					})
-				}
-			},
-
-			selectPOI(event) {
-				this.wasPoiSelected = true;
-				let myPOI = this.poi;
-				if (event.target.value != 0) {
-					$.each(this.lstPOI, function (index, poi) {
-						if (poi.pointOfInterestId === JSON.parse(event.target.value)) {
-							myPOI = poi;
-							return false;
-						}
-					})
-
-					this.myGeoInfo = JSON.parse(myPOI.geoJSON);
-					let coordinate = this.myGeoInfo.features[0].geometry.coordinates;
-					this.latitude = coordinate[0];
-					this.longitude = coordinate[1];
-
-
-
-					let myImage = this.myImage();
-					let transFormCord = [this.latitude, this.longitude];
-					//let vectorSource        =   this.myVectorGeoSource();
-					let vectorSource = new VectorSource({});
-
-					var iconFeature = new Feature({
-						geometry: new Point(fromLonLat(transFormCord))
-					});
-
-					vectorSource.addFeature(iconFeature);
-
-					var vectorLayer = new VectorLayer({
-						source: vectorSource,
-						style: new Style({
-							image: myImage,
-						}),
-					});
-
-					this.clearMapLayers();
-					this.myMap.addLayer(vectorLayer);
-
-					this.myMap.getView().setCenter(fromLonLat(coordinate));
-					this.myMap.getView().setZoom(CommonUtil.CONST_GPS_OBSERVATION_ZOOM);
-				}
-
-
-
-			}
-
-		},
-		mounted() {
-
-			this.CONST_URL_DOMAIN = CommonUtil.CONST_URL_DOMAIN;
-			this.latitude = CommonUtil.CONST_GPS_DEFAULT_LATITUDE_NORWAY;
-			this.longitude = CommonUtil.CONST_GPS_DEFAULT_LONGITUDE_NORWAY;
-
-			let routeParam = this.$route.params;
-
-			// This ensures that the map fills the entire viewport
-			var mapDiv = document.getElementById("map-observation");
-			var navDiv = document.getElementById("vipsobsappmenu");
-			var appDiv = document.getElementById("app");
-			var panelObDiv = document.getElementById("ObservationMapPanel");
-			var divPrivacy = document.getElementById("divPrivacy");
-
-			if (routeParam.observation) {
-				this.mapObservation = routeParam.observation;
-			}
-
-			if (routeParam.observationId) {
-				this.myObservationId = routeParam.observationId;
-			}
-			if (this.observationId) {
-				this.myObservationId = this.observationId;
-			}
-
-			if (routeParam.isMapPanelVisible) {
-				this.isMyMapPanelVisible = routeParam.isMapPanelVisible;
-
-			}
-			if (this.isMapPanelVisible) {
-				this.isMyMapPanelVisible = this.isMapPanelVisible;
-			}
-
-			if (this.isMyMapPanelVisible) {
-				mapDiv.style.height = (screen.height - navDiv.offsetHeight) + "px";
-				this.mapInteractions = '';
-
-				appDiv.style.marginTop = "0";
-				appDiv.style.paddingRight = "0";
-				appDiv.style.paddingLeft = "0";
-
-				this.getMyPointOfInterst(this.lstPOI);
-			}
-			else {
-				mapDiv.style.height = 300 + "px";
-				this.mapInteractions = 'interactions:[]';
-			}
-
-			if (routeParam.geoinfo) {
-				this.myGeoInfo = routeParam.geoinfo;
-				this.initGeoInfo = routeParam.geoinfo;
-
-			}
-			if (this.geoinfo) {
-				this.myGeoInfo = this.geoinfo;
-				this.initGeoInfo = this.geoinfo;
-			}
-
-
-			if (this.myGeoInfo) {
-				this.latitude = this.myGeoInfo.features[0].geometry.coordinates[0];
-				this.longitude = this.myGeoInfo.features[0].geometry.coordinates[1];
-				this.mapZoom = CommonUtil.CONST_GPS_OBSERVATION_ZOOM;
-			}
-			else {
-				this.mapZoom = CommonUtil.CONST_GPS_DEFAULT_ZOOM;
-				//this.mapZoom = CommonUtil.CONST_GPS_OBSERVATION_ZOOM;
-			}
-
-			if (routeParam.locationPointOfInterestId) {
-				this.poi.pointOfInterestId = routeParam.locationPointOfInterestId;
-			}
-
-			this.$nextTick(function () {
-				this.initMap(this.latitude, this.longitude);
-			});
-		},
-		beforeDestroy() {
-			// This resets the container layout when leaving the router page
-			var appDiv = document.getElementById("app");
-			//appDiv.style.marginTop="60px";
-			appDiv.style.paddingRight = "15px";
-			appDiv.style.paddingLeft = "15px";
-		},
-
-	}
+              if (vectorSource) {
+                vectorSource.addFeature(iconFeature);
+
+                var vectorLayer = new VectorLayer({
+                  source: vectorSource,
+                  style: new Style({
+                    image: image,
+                  }),
+                });
+
+                This.myMap.addLayer(vectorLayer);
+
+                let geoGSON = new GeoJSON();
+                let resultGeoGSON = geoGSON.writeFeatures(vectorLayer.getSource().getFeatures(), {
+                  dataProjection: 'EPSG:4326',
+                  featureProjection: 'EPSG:3857'
+                });
+                This.myGeoInfo = JSON.parse(resultGeoGSON);
+
+              }
+            }
+
+          });
+
+        })
+
+
+    },
+
+
+    myVectorGeoSource() {
+      if (this.myGeoInfo) {
+        return new VectorSource({
+          features: new GeoJSON({
+            dataProjection: "EPSG:4326",
+            featureProjection: "EPSG:3857"
+          }).readFeatures(this.myGeoInfo),
+        })
+      }
+    },
+
+    myVectorGeoLayer(vectorSource, image) {
+      return new VectorLayer({
+        source: vectorSource,
+        style: new Style({
+          image: image,
+        }),
+      })
+    },
+    myView(latitude, longitude, mapZoom) {
+      return new View({
+        center: fromLonLat([latitude, longitude]),
+        zoom: mapZoom
+      })
+    },
+
+    myImage() {
+      var fill = new Fill({
+        color: 'white'
+      });
+
+      return new CircleStyle({
+        radius: 15,
+        fill: fill,
+        stroke: new Stroke({color: '#3d8052', width: 15}),
+      });
+    },
+
+
+    myOverLay(coordinates) {
+      return new Overlay({
+        position: fromLonLat(coordinates),
+        positioning: 'bottom-center',
+        element: document.getElementById('poiMarker'),
+        stopEvent: false
+      });
+    },
+
+
+    myOverLayCoord(latitude, longitude) {
+      let coordinate = [latitude, longitude];
+      return this.myOverLay(coordinate);
+    },
+
+
+    myStyleFunction(styles, feature) {
+      return styles[feature.getGeometry().getType()];
+    },
+
+    myInteractions(mapInteractions) {
+      return (mapInteractions) ? [] : '';
+    },
+
+    handleFiltersChanged() {
+      this.getMyPointsOfInterest();
+    },
+    /* Get point of interest */
+    getMyPointsOfInterest() {
+      const userId = this.$root.sharedState.userId;
+      let allPOIs = []
+      allPOIs.push({pointOfInterestId: 'undefined', name: this.$i18n.t("mapobservation.label.noPOIselected")});
+      let listPOIAll = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
+      const onlyMy = this.showOnlyUsersPOIs;
+      listPOIAll.forEach(function (poi) {
+        if(onlyMy) {
+          if (userId === poi.userId) {
+            allPOIs.push(poi);
+          }
+        } else {
+          allPOIs.push(poi);
+        }
+      });
+      this.lstPOI = allPOIs;
+    },
+
+    /* Clear existing sources in map layers */
+    clearMapLayers() {
+      let myLayers = this.myMap.getLayers();
+      if (myLayers) {
+        this.myMap.getLayers().forEach(function (layer) {
+          let source = layer.get('source');
+          if (source) {
+            source.clear();
+          }
+
+        })
+      }
+    },
+
+    selectPOI(event) {
+      this.wasPoiSelected = true;
+      let myPOI = this.poi;
+      if (event.target.value != 0) {
+        $.each(this.lstPOI, function (index, poi) {
+          if (poi.pointOfInterestId === JSON.parse(event.target.value)) {
+            myPOI = poi;
+            return false;
+          }
+        })
+
+        this.myGeoInfo = JSON.parse(myPOI.geoJSON);
+        let coordinate = this.myGeoInfo.features[0].geometry.coordinates;
+        this.latitude = coordinate[0];
+        this.longitude = coordinate[1];
+
+
+        let myImage = this.myImage();
+        let transFormCord = [this.latitude, this.longitude];
+        //let vectorSource        =   this.myVectorGeoSource();
+        let vectorSource = new VectorSource({});
+
+        var iconFeature = new Feature({
+          geometry: new Point(fromLonLat(transFormCord))
+        });
+
+        vectorSource.addFeature(iconFeature);
+
+        var vectorLayer = new VectorLayer({
+          source: vectorSource,
+          style: new Style({
+            image: myImage,
+          }),
+        });
+
+        this.clearMapLayers();
+        this.myMap.addLayer(vectorLayer);
+
+        this.myMap.getView().setCenter(fromLonLat(coordinate));
+        this.myMap.getView().setZoom(CommonUtil.CONST_GPS_OBSERVATION_ZOOM);
+      }
+
+
+    }
+
+  },
+  mounted() {
+
+    this.CONST_URL_DOMAIN = CommonUtil.CONST_URL_DOMAIN;
+    this.latitude = CommonUtil.CONST_GPS_DEFAULT_LATITUDE_NORWAY;
+    this.longitude = CommonUtil.CONST_GPS_DEFAULT_LONGITUDE_NORWAY;
+
+    this.showOnlyUsersPOIs = true;
+    let routeParam = this.$route.params;
+
+    // This ensures that the map fills the entire viewport
+    var mapDiv = document.getElementById("map-observation");
+    var navDiv = document.getElementById("vipsobsappmenu");
+    var appDiv = document.getElementById("app");
+    var panelObDiv = document.getElementById("ObservationMapPanel");
+    var divPrivacy = document.getElementById("divPrivacy");
+
+    if (routeParam.observation) {
+      this.mapObservation = routeParam.observation;
+    }
+
+    if (routeParam.observationId) {
+      this.myObservationId = routeParam.observationId;
+    }
+    if (this.observationId) {
+      this.myObservationId = this.observationId;
+    }
+
+    if (routeParam.isMapPanelVisible) {
+      this.isMyMapPanelVisible = routeParam.isMapPanelVisible;
+
+    }
+    if (this.isMapPanelVisible) {
+      this.isMyMapPanelVisible = this.isMapPanelVisible;
+    }
+
+    if (this.isMyMapPanelVisible) {
+      mapDiv.style.height = (screen.height - navDiv.offsetHeight) + "px";
+      this.mapInteractions = '';
+
+      appDiv.style.marginTop = "0";
+      appDiv.style.paddingRight = "0";
+      appDiv.style.paddingLeft = "0";
+
+      this.getMyPointsOfInterest();
+    } else {
+      mapDiv.style.height = 300 + "px";
+      this.mapInteractions = 'interactions:[]';
+    }
+
+    if (routeParam.geoinfo) {
+      this.myGeoInfo = routeParam.geoinfo;
+      this.initGeoInfo = routeParam.geoinfo;
+
+    }
+    if (this.geoinfo) {
+      this.myGeoInfo = this.geoinfo;
+      this.initGeoInfo = this.geoinfo;
+    }
+
+
+    if (this.myGeoInfo) {
+      this.latitude = this.myGeoInfo.features[0].geometry.coordinates[0];
+      this.longitude = this.myGeoInfo.features[0].geometry.coordinates[1];
+      this.mapZoom = CommonUtil.CONST_GPS_OBSERVATION_ZOOM;
+      this.showOnlyUsersPOIs = this.myGeoInfo.features[0].properties && this.myGeoInfo.features[0].properties.pointOfInterestTypeId !== 1;
+    } else {
+      this.mapZoom = CommonUtil.CONST_GPS_DEFAULT_ZOOM;
+    }
+
+    if (routeParam.locationPointOfInterestId) {
+      this.poi.pointOfInterestId = routeParam.locationPointOfInterestId;
+    }
+    this.getMyPointsOfInterest();
+
+    this.$nextTick(function () {
+      this.initMap(this.latitude, this.longitude);
+    });
+  },
+  beforeDestroy() {
+    // This resets the container layout when leaving the router page
+    var appDiv = document.getElementById("app");
+    //appDiv.style.marginTop="60px";
+    appDiv.style.paddingRight = "15px";
+    appDiv.style.paddingLeft = "15px";
+  },
+
+}
 </script>
 
 <style scoped>
-	html,
-	body,
-	#map-observation {
-		margin: 0;
-		width: 100%;
-	}
-
-	#ObservationMapPanel {
-		position: absolute;
-		bottom: 0;
-		left: 0;
-	}
-
-	#btnBack {
-		position: fixed;
-		z-index: 2000;
-	}
-
-	#map-mylocation {
-		position: fixed;
-		right: 0;
-		z-index: 2000;
-	}
-</style>
\ No newline at end of file
+html,
+body,
+#map-observation {
+  margin: 0;
+  width: 100%;
+}
+
+#ObservationMapPanel {
+  background-color: white;
+  position: absolute;
+  bottom: 0;
+  left: 0;
+}
+
+#btnBack {
+  position: fixed;
+  z-index: 2000;
+}
+
+#map-mylocation {
+  position: fixed;
+  right: 0;
+  z-index: 2000;
+}
+</style>
diff --git a/src/components/MapObservationTimeSeries.vue b/src/components/MapObservationTimeSeries.vue
new file mode 100644
index 0000000000000000000000000000000000000000..15f044f2d50153cf93d040a9cfa80c6d8c7f590b
--- /dev/null
+++ b/src/components/MapObservationTimeSeries.vue
@@ -0,0 +1,399 @@
+<!--
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
+  This file is part of VIPSObservationApp.
+  VIPSObservationApp is free software: you can redistribute it and/or modify
+  it under the terms of the NIBIO Open Source License as published by
+  NIBIO, either version 1 of the License, or (at your option) any
+  later version.
+
+  VIPSObservationApp is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  NIBIO Open Source License for more details.
+
+  You should have received a copy of the NIBIO Open Source License
+  along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
+
+  Dated : 13-Mar-2024
+-->
+<template>
+  <div>
+    <div id='map-observation-time-series'></div>
+    <visibility :locationIsPrivate="locationIsPrivate" :polygonService="polygonService" :disabled="disabled"
+                v-on:visibilityMapAction="visibilityMapAction" />
+    <common-util ref="CommonUtil" />
+  </div>
+</template>
+
+<script>
+import CommonUtil from '@/components/CommonUtil'
+import 'ol/ol.css';
+import Map from 'ol/Map';
+import TileLayer from 'ol/layer/Tile';
+import View from 'ol/View';
+import WMTS, {optionsFromCapabilities} from 'ol/source/WMTS';
+import WMTSCapabilities from 'ol/format/WMTSCapabilities';
+
+import {Vector as VectorSource} from 'ol/source';
+import {Vector as VectorLayer} from 'ol/layer';
+import {fromLonLat} from 'ol/proj';
+
+import {Circle as CircleStyle, Fill, Stroke, Style, Icon} from 'ol/style';
+import Feature from 'ol/Feature';
+import GeoJSON from 'ol/format/GeoJSON';
+
+import {transform} from 'ol/proj';
+import Point from 'ol/geom/Point';
+import Overlay from 'ol/Overlay';
+import Visibility from '@/components/Visibility'
+
+let parser = new WMTSCapabilities();
+
+export default {
+  name: 'MapObservationTimeSeries',
+  props: ['observationTimeSeriesId', 'geoinfo', 'locationPointOfInterestId', 'locationIsPrivate', 'polygonService', 'observationTimeSeries', 'disabled'],
+  components: {CommonUtil, Visibility},
+  data() {
+    return {
+      CONST_URL_DOMAIN: '',
+      myGeoInfo: '',
+      initGeoInfo: '',
+      latitude: 0,
+      longitude: 0,
+      mapZoom: 0,
+      mapInteractions: '',
+      lstPOI: [],
+      poi: {pointOfInterestId: 'undefined', name: this.$i18n.t("mapObservationTimeSeries.label.selectPOI")},
+      myMap: '',
+      myObservationTimeSeriesId: '',
+      mapObservationTimeSeries: {},
+      isMapClicked: false,
+      wasPoiSelected: false
+    }
+  },
+  methods: {
+    visibilityMapAction(paramPrivate, paramPolygonService) {
+      this.$emit('visibilityObservationTimeSeriesAction', paramPrivate, paramPolygonService);
+    },
+    /**
+     * Get GeoInfo
+     *  */
+    geolocationSuccess(pos) {
+      this.poi.pointOfInterestId = 'undefined';
+      this.longitude = pos.coords.latitude;
+      this.latitude = pos.coords.longitude;
+      let coord = [pos.coords.longitude, pos.coords.latitude];
+      let transFormCord = transform(coord, 'EPSG:3857', 'EPSG:4326');
+      this.myMap.getView().setCenter(fromLonLat(coord));
+
+      this.clearMapLayers();
+
+      let myImage = this.locationMarker();
+
+      let vectorSource = new VectorSource({});
+      var iconFeature = new Feature({
+        geometry: new Point(fromLonLat(coord))
+      });
+
+      vectorSource.addFeature(iconFeature);
+      var vectorLayer = new VectorLayer({
+        source: vectorSource,
+        style: new Style({
+          image: myImage,
+        }),
+      });
+
+
+
+      let geoJSON = new GeoJSON();
+      let resultGeoJSON = geoJSON.writeFeatures(vectorLayer.getSource().getFeatures());
+      this.myGeoInfo = JSON.parse(resultGeoJSON);
+      this.myGeoInfo.features[0].geometry.coordinates = coord;
+
+      this.myMap.addLayer(vectorLayer);
+
+      this.myMap.getView().setZoom(CommonUtil.CONST_GPS_OBSERVATION_ZOOM);
+
+    },
+    geolocationError(error) {
+      CommonUtil.logInfo('geolocation error : ' + geolocationError);
+    },
+
+    /** Display of Map */
+    initMap(myLatitude, myLongitude) {
+      let This = this;
+      let urlMap = CommonUtil.CONST_GPS_URL_NORWAY_MAP;    // Norway Map
+      let latitude = myLatitude;
+      let longitude = myLongitude;
+
+      let mapZoom = this.mapZoom;
+      let image = this.locationMarker();
+
+      let vectorSource = this.myVectorGeoSource();
+      let vectorGeoLayer = this.myVectorGeoLayer(vectorSource, image);
+      let mapInteractions = this.myInteractions(this.mapInteractions);
+      let mapView = this.myView(latitude, longitude, mapZoom);
+      let pointMarkerCoord = this.myOverLayCoord(latitude, longitude);
+
+      /* Fetch Norway Map */
+      fetch(urlMap)
+          .then(function (response) {
+            return response.text();
+          })
+          .then(function (text) {
+            let parser = new WMTSCapabilities();
+            let result = parser.read(text);
+
+            let options = optionsFromCapabilities(result, {
+              layer: 'topo4',
+              matrixSet: 'EPSG:3857',
+            });
+            options.urls[0] = options.urls[0].replace("http","https");
+
+            This.myMap = new Map({
+              layers: [
+
+                new TileLayer({
+                  opacity: 1,
+                  source: new WMTS(options),
+                }),
+                vectorGeoLayer
+
+              ],
+              controls: [],
+              interactions: mapInteractions,
+
+              target: 'map-observation-time-series',
+              view: mapView,
+              overlays: [pointMarkerCoord],
+              renderer: 'canvas',
+            });
+          })
+    },
+
+    myVectorGeoSource() {
+      if (this.myGeoInfo) {
+        return new VectorSource({
+          features: new GeoJSON({
+            dataProjection: "EPSG:4326",
+            featureProjection: "EPSG:3857"
+          }).readFeatures(this.myGeoInfo),
+        })
+      }
+    },
+
+    myVectorGeoLayer(vectorSource, image) {
+      return new VectorLayer({
+        source: vectorSource,
+        style: new Style({
+          image: image,
+        }),
+      })
+    },
+
+    myView(latitude, longitude, mapZoom) {
+      return new View({
+        center: fromLonLat([latitude, longitude]),
+        zoom: mapZoom
+      })
+    },
+
+    locationMarker() {
+      let fill = new Fill({
+        color: 'white'
+      });
+      return new CircleStyle({
+        radius: 15,
+        fill: fill,
+        stroke: new Stroke({color: '#3d8052', width: 15}),
+      });
+    },
+
+    myOverLay(coordinates) {
+      return new Overlay({
+        position: fromLonLat(coordinates),
+        positioning: 'bottom-center',
+        element: document.getElementById('poiMarker'),
+        stopEvent: false
+      });
+    },
+
+    myOverLayCoord(latitude, longitude) {
+      let coordinate = [latitude, longitude];
+      return this.myOverLay(coordinate);
+    },
+
+    myStyleFunction(styles, feature) {
+      return styles[feature.getGeometry().getType()];
+    },
+
+    myInteractions(mapInteractions) {
+      return (mapInteractions) ? [] : '';
+    },
+
+    /* Get point of interest */
+    getMyPointsOfInterest() {
+      const userId = this.$root.sharedState.userId;
+      let allPOIs = []
+      allPOIs.push({pointOfInterestId: 'undefined', name: this.$i18n.t("mapobservation.label.noPOIselected")});
+      let listPOIAll = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
+      listPOIAll.forEach(function (poi) {
+        if (userId === poi.userId) {
+          allPOIs.push(poi);
+        }
+      });
+      this.lstPOI = allPOIs;
+    },
+
+    /* Clear existing sources in map layers */
+    clearMapLayers() {
+      let myLayers = this.myMap.getLayers();
+      if (myLayers) {
+        this.myMap.getLayers().forEach(function (layer) {
+          let source = layer.get('source');
+          if (source) {
+            source.clear();
+          }
+
+        })
+      }
+    },
+
+    selectPOI(event) {
+      this.wasPoiSelected = true;
+      let myPOI = this.poi;
+      if (event.target.value !== 0) {
+        $.each(this.lstPOI, function (index, poi) {
+          if (poi.pointOfInterestId === JSON.parse(event.target.value)) {
+            myPOI = poi;
+            return false;
+          }
+        })
+
+        this.myGeoInfo = JSON.parse(myPOI.geoJSON);
+        let coordinate = this.myGeoInfo.features[0].geometry.coordinates;
+        this.latitude = coordinate[0];
+        this.longitude = coordinate[1];
+
+        let myImage = this.locationMarker();
+        let transFormCord = [this.latitude, this.longitude];
+        let vectorSource = new VectorSource({});
+
+        let iconFeature = new Feature({
+          geometry: new Point(fromLonLat(transFormCord))
+        });
+        vectorSource.addFeature(iconFeature);
+
+        let vectorLayer = new VectorLayer({
+          source: vectorSource,
+          style: new Style({
+            image: myImage,
+          }),
+        });
+
+        this.clearMapLayers();
+        this.myMap.addLayer(vectorLayer);
+
+        this.myMap.getView().setCenter(fromLonLat(coordinate));
+        this.myMap.getView().setZoom(CommonUtil.CONST_GPS_OBSERVATION_ZOOM);
+      }
+    }
+  },
+  mounted() {
+    this.CONST_URL_DOMAIN = CommonUtil.CONST_URL_DOMAIN;
+    this.latitude = CommonUtil.CONST_GPS_DEFAULT_LATITUDE_NORWAY;
+    this.longitude = CommonUtil.CONST_GPS_DEFAULT_LONGITUDE_NORWAY;
+
+    let routeParam = this.$route.params;
+
+    // This ensures that the map fills the entire viewport
+    let mapDiv = document.getElementById("map-observation-time-series");
+    let navDiv = document.getElementById("vipsobsappmenu");
+    let appDiv = document.getElementById("app");
+
+    if (routeParam.observationTimeSeries) {
+      this.mapObservationTimeSeries = routeParam.observationTimeSeries;
+    }
+    if (routeParam.observationTimeSeriesId) {
+      this.myObservationTimeSeriesId = routeParam.observationTimeSeriesId;
+    }
+    if (this.observationTimeSeriesId) {
+      this.myObservationTimeSeriesId = this.observationTimeSeriesId;
+    }
+
+    if (routeParam.isMapPanelVisible) {
+      this.isMyMapPanelVisible = routeParam.isMapPanelVisible;
+
+    }
+    if (this.isMapPanelVisible) {
+      this.isMyMapPanelVisible = this.isMapPanelVisible;
+    }
+
+    if (this.isMyMapPanelVisible) {
+      mapDiv.style.height = (screen.height - navDiv.offsetHeight) + "px";
+      this.mapInteractions = '';
+
+      appDiv.style.marginTop = "0";
+      appDiv.style.paddingRight = "0";
+      appDiv.style.paddingLeft = "0";
+
+      this.getMyPointsOfInterest();
+    }
+    else {
+      mapDiv.style.height = 300 + "px";
+      this.mapInteractions = 'interactions:[]';
+    }
+
+    if (routeParam.geoinfo) {
+      this.myGeoInfo = routeParam.geoinfo;
+      this.initGeoInfo = routeParam.geoinfo;
+
+    }
+    if (this.geoinfo) {
+      this.myGeoInfo = this.geoinfo;
+      this.initGeoInfo = this.geoinfo;
+    }
+
+    if (this.myGeoInfo) {
+      this.latitude = this.myGeoInfo.features[0].geometry.coordinates[0];
+      this.longitude = this.myGeoInfo.features[0].geometry.coordinates[1];
+      this.mapZoom = CommonUtil.CONST_GPS_OBSERVATION_ZOOM;
+    }
+    else {
+      this.mapZoom = CommonUtil.CONST_GPS_DEFAULT_ZOOM;
+    }
+
+    if (routeParam.locationPointOfInterestId) {
+      this.poi.pointOfInterestId = routeParam.locationPointOfInterestId;
+    }
+    this.$nextTick(function () {
+      this.initMap(this.latitude, this.longitude);
+    });
+  },
+  beforeDestroy() {
+    // This resets the container layout when leaving the router page
+    let appDiv = document.getElementById("app");
+    appDiv.style.paddingRight = "15px";
+    appDiv.style.paddingLeft = "15px";
+  },
+
+}
+</script>
+
+<style scoped>
+html,
+body,
+#map-observation-time-series {
+  margin: 0;
+  width: 100%;
+}
+
+#ObservationTimeSeriesMapPanel {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+}
+
+</style>
diff --git a/src/components/MapPOI.vue b/src/components/MapPOI.vue
index d566279c46db4142eca8e29a1d4c4eb2098b6707..1d4b3560bed059703d06c87611d83a29aa5cdbae 100644
--- a/src/components/MapPOI.vue
+++ b/src/components/MapPOI.vue
@@ -1,25 +1,25 @@
 <!--
-    
-  Copyright (c) 2022 NIBIO <http://www.nibio.no/>. 
-  
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
   This file is part of VIPSObservationApp.
   VIPSObservationApp is free software: you can redistribute it and/or modify
-  it under the terms of the NIBIO Open Source License as published by 
+  it under the terms of the NIBIO Open Source License as published by
   NIBIO, either version 1 of the License, or (at your option) any
   later version.
-  
+
   VIPSObservationApp is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   NIBIO Open Source License for more details.
-  
+
   You should have received a copy of the NIBIO Open Source License
   along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
-    
+
   Author: Bhabesh Bhabani Mukhopadhyay
   Author: Tor-Einar Skog <tor-einar.skog@nibio.no>
   Dated : 19-Aug-2021
-    
+
 -->
 <template>
 	<div>
@@ -32,7 +32,6 @@
 					icon="location-crosshairs" /></a>
 		</div>
 		<div id='map-poi'></div>
-
 		<div id='divPoiData' class="container">
 			<div class="form-group"><input class="form-control" :placeholder="$t('mapPOI.poiName.label')" id='poiName'
 					ref='poiName' v-model="poi.name" :disabled="!userCanEditPOI" /></div>
@@ -45,10 +44,10 @@
 				</select>
 			</div>
 			<div class="form-group" v-show="userCanEditPOI">
-				<div class="float-right">
+				<div class="float-end">
+          <a v-show="POIExists" class="vips-btn danger"
+             v-on:click="callForRemovePOI">{{$t("delete.label")}}</a>
 					<a class="vips-btn" v-on:click="validate">{{$t("save.label")}}</a>
-					<a v-show="POIExists" class="vips-btn danger"
-						v-on:click="callForRemovePOI">{{$t("delete.label")}}</a>
 				</div>
 			</div>
 		</div>
@@ -95,7 +94,7 @@
 	export default {
 		name: 'MapPOI',
 		components: {Sync},
-		props: ['pointOfInterestId'],
+		props: ['pointOfInterestId', 'backToTimeSeriesList'],
 
 		data() {
 			return {
@@ -104,8 +103,8 @@
 				poiTypes: [],
 				msgErr: '',
 				map: '',
-
-
+        observations: [],
+        observationTimeSeries: []
 			}
 		},
 		computed: {
@@ -117,12 +116,15 @@
 			}
 		},
 		methods: {
-
 			isPOIOwnedByUser() {
 				return !this.poi.pointOfInterestId || (this.poi.userId && this.poi.userId == this.$root.sharedState.userId);
 			},
 			callForRemovePOI() {
-				if (confirm(this.$i18n.t("mapPOI.modal.label.deleteprompt") + " " + this.poi.name + "?")) {
+        if (this.observations.length || this.observationTimeSeries.length) {
+          alert(this.$i18n.t("mapPOI.modal.alert.hasObservations"))
+          return;
+        }
+        if (confirm(this.$i18n.t("mapPOI.modal.label.deleteprompt") + " " + this.poi.name + "?")) {
 					this.deletePOI();
 				}
 			},
@@ -169,7 +171,7 @@
 					return;
 				}
 
-				// TODO Simplify this logic 
+				// TODO Simplify this logic
 				if (!this.poi.pointOfInterestTypeId) {
 					if (this.poi.pointOfInterestTypeId === 0) {
 						// Pass
@@ -187,9 +189,7 @@
 			getPointOfInterest(id) {
 				let lstPOI = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
 				let poi = lstPOI.find(({pointOfInterestId}) => pointOfInterestId === id);
-
 				this.poi = poi;
-
 			},
 			saveToStore() {
 				let This = this;
@@ -225,7 +225,11 @@
 				}
 				localStorage.setItem(CommonUtil.CONST_STORAGE_POI_LIST, JSON.stringify(lstPOI));
 				this.$refs.sync.syncTwoWay();
-				this.$router.push('/places');
+        if(this.backToTimeSeriesList) {
+          this.$router.push('/observationTimeSeriesList');
+        } else {
+          this.$router.push('/places');
+        }
 			},
 			/** new POI pointOfInterestId */
 			getNewPoiId(lstPOI) {
@@ -254,9 +258,6 @@
 				return newId;
 			},
 
-
-
-
 			myImage() {
 				var fill = new Fill({
 					color: 'white'
@@ -418,7 +419,7 @@
 							layer: 'topo4',
 							matrixSet: 'EPSG:3857',
 						});
-						
+
 						// Need to force https on the tiles URL (bug in the service?)
 						options.urls[0] = options.urls[0].replace("http","https");
 
@@ -529,14 +530,17 @@
 
 			this.mapZoom = CommonUtil.CONST_GPS_OBSERVATION_ZOOM;
 			this.poiTypes = CommonUtil.CONST_POI_TYPES;
-			//CommonUtil.logInfo(this.poiTypes);
 
-			if (this.$route.params.pointOfInterestId) {
-				this.getPointOfInterest(this.$route.params.pointOfInterestId);
+      const poiId = this.$route.params.pointOfInterestId
+			if (poiId) {
+				this.getPointOfInterest(poiId);
+        let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
+        let lstObservationTimeSeries = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST));
+
+        this.observations = lstObservations ? lstObservations.filter(({locationPointOfInterestId}) => locationPointOfInterestId === poiId) : [];
+        this.observationTimeSeries = lstObservationTimeSeries ? lstObservationTimeSeries.filter(({locationPointOfInterestId}) => locationPointOfInterestId === poiId) : [];
 			}
 			this.mapInit();
-
-
 		},
 		beforeDestroy() {
 			// This resets the container layout when leaving the router page
@@ -578,4 +582,4 @@
 		z-index: 1100;
 		bottom: 0;
 	}
-</style>
\ No newline at end of file
+</style>
diff --git a/src/components/Observation.vue b/src/components/Observation.vue
index dd34103227296127691096f35e24d9142554a999..08c392b91b10686f1f7f58ac41663f5ab972b0ff 100644
--- a/src/components/Observation.vue
+++ b/src/components/Observation.vue
@@ -1,838 +1,929 @@
 <!--
-    
-  Copyright (c) 2022 NIBIO <http://www.nibio.no/>. 
-  
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
   This file is part of VIPSObservationApp.
   VIPSObservationApp is free software: you can redistribute it and/or modify
-  it under the terms of the NIBIO Open Source License as published by 
+  it under the terms of the NIBIO Open Source License as published by
   NIBIO, either version 1 of the License, or (at your option) any
   later version.
-  
+
   VIPSObservationApp is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   NIBIO Open Source License for more details.
-  
+
   You should have received a copy of the NIBIO Open Source License
   along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
-    
+
   Author: Bhabesh Bhabani Mukhopadhyay
   Author: Tor-Einar Skog <tor-einar.skog@nibio.no>
   Dated : 19-Aug-2021
-    
 -->
 <template>
-	<div id="observation">
-		<div>
-			<router-link class="vips-btn" to="/">{{ $t("back.label") }}</router-link>
-		</div>
-
-		<div v-if="observation.deleted">
-			<div class="alert alert-warning" role="alert">
-				{{ $t("err.observation.remove.warn") }}
-			</div>
-		</div>
-
-		<div class="form-group">
-			<select required class="form-control" id="divCropId" ref='divCropId' v-model="selectedCropId"
-				v-on:change="selectCrop($event)">
-				<option v-for="crop in crops" :value='crop.organismId'>{{crop.localName}}</option>
-			</select>
-		</div>
-
-		<div class="form-group">
-			<select :disabled="selectedCropId <= 0" required class="form-control" v-model="pest.pestId" id='divPestId'
-				ref='divPestId'>
-				<option v-for="pest in pests" v-bind:value='pest.pestId'>{{pest.pestName}}</option>
-			</select>
-		</div>
-
-
-		<div class="form-group row">
-			<label for="strDateObservation" class="col-1 col-form-label">
-				<font-awesome-icon style="font-size: x-large;" icon="calendar-days" /></label>
-			<div class="col-7">
-				<input class="form-control" id="strDateObservation" ref="strDateObservation" type="datetime-local"
-					:max="maxObservationDate" :min="minObservationDate" v-model="strDateObservation"
-					v-on:change="capturedTime($event)" />
-			</div>
-		</div>
-		<div class="form-group">
-	  		<div class="checkbox">
-				<label>
-					<input type="checkbox" v-model="observation.isPositive" name="isPositive">
-				</label>
-				{{ $t("observation.is_positive.label") }}
-	  		</div>
-	  	</div>
-
-		<div v-if="pest.pestId" class="row">
-			<div class="col-1">
-				<font-awesome-icon style="font-size: x-large; margin-top: 7px;" icon="map-location" />
-			</div>
-			<div class="col-7">
-				<router-link id="linkMap" class="vips-btn" ref='linkMap'
-					:to="{name:'MapObservation', params: {observationId:observation.observationId,geoinfo:mapGeoinfo,isMapPanelVisible:newMapPanel,locationPointOfInterestId:mapLocationPointOfInterestId, observation:observation}}">
-					{{ $t("observation.map.label") }}</router-link>
-			</div>
-		</div>
-		<div v-if="mapGeoinfo" id="divMapGeoInfo">
-			<div class="col" style="margin-top: 15px;">
-				<map-observation :geoinfo="mapGeoinfo" :isMapPanelVisible="isMapPanelVisible"
-					:locationIsPrivate="observation.locationIsPrivate" :polygonService="observation.polygonService"
-					v-on:visibilityObservationAction="visibilityObservationAction"></map-observation>
-			</div>
-		</div>
-
-
-		<div v-if="isMounted">
-			<div>
-				<font-awesome-icon style="font-size: x-large; vertical-align:middle;" icon="scale-balanced" /><a
-					class="vips-btn"
-					v-on:click="toggleShowQuantification">{{ $t("observation.quantification.label") }}</a></div>
-			<div v-if="isQuantification">
-				<fieldset v-if="isMounted" id='divSchemaForm' class="form-group border">
-					<legend style="font-size: 1em !important;">{{ $t("observation.quantification.form.label") }}
-					</legend>
-					<quantification :isEditable="false" :observationId="observation.observationId"
-						:organismId="observation.organismId" :schemaData="observation.observationData"
-						v-on:updateQuantificationData="updateQuantificationData"> </quantification>
-				</fieldset>
-			</div>
-		</div>
-
-		<observation-illustration-board v-if="isMounted"
-			v-bind:initialObservationIllustrations="observation.observationIllustrationSet"
-			v-bind:observationId="observation.observationId"
-			@observationIllustrationSetUpdated="handleObservationIllustrationSetUpdated" />
-
-		
-
-		<div ref='divObservationText' class="form-group">
-			<div>
-				<font-awesome-icon icon="fa-regular fa-file-lines" style="font-size: x-large;" />
-			</div>
-			<div><input ref="observationHeader" type="text" class="form-control"
-					v-model="observation.observationHeading"
-					:placeholder="$t('observation.detail.heading.placeholder')" /></div>
-			<div><textarea v-model="observation.observationText" class="form-control" rows="4"
-					:placeholder="$t('observation.detail.body.placeholder')" /></div>
-		</div>
-		
-		<div class="form-group">
-	  		<div class="checkbox">
-				<label>
-					<input type="checkbox" v-model="observation.broadcastMessage" name="broadcastMessage">
-				</label>
-				{{ $t("observation.broadcast.label") }}
-				<font-awesome-icon icon="fa-solid fa-circle-question" class="helpIcon" onclick="document.getElementById('infoModal').style.display = 'block';"/>
-	  		</div>
-	  	</div>
-
-		<div v-if="observation.deleted"></div>
-		<div v-else class="float-right">
-			<a class="vips-btn" v-on:click="saveObservation">{{$t("save.label")}}</a>
-			<a v-show="isDeleteBttnVisible" class="vips-btn danger"
-				v-on:click="callForRemoveObservation">{{$t("delete.label")}}</a>
-		</div>
-		
-		<div class="centeredModal" id="infoModal" onclick="this.style.display='none';">
-			<font-awesome-icon icon="fa-solid fa-circle-question"/>
-			<p>{{ $t("observation.broadcast.helptext") }}</p>
-		</div>
-		
-		<sync ref="sync" />
-	</div>
+  <div id="observation">
+    <div class="mb-3">
+      <router-link v-if="backToTimeSeries"
+                   :to="{name:'ObservationTimeSeriesList', params: {paramExpandedId:this.paramObservationTimeSeries.observationTimeSeriesId}}"
+                   class="vips-btn">
+        {{ $t("back.label") }}
+      </router-link>
+      <router-link v-else class="vips-btn" to="/">{{ $t("back.label") }}</router-link>
+    </div>
+
+    <div v-if="this.observation.observationTimeSeries || this.observation.observationTimeSeriesId" class="mt-3 mb-3">
+      <b>{{ $t("observation.for.observationTimeSeries.name") }} <i>{{timeSeriesName()}}</i></b>
+    </div>
+
+    <div v-if="observation.deleted">
+      <div class="alert alert-warning" role="alert">
+        {{ $t("err.observation.remove.warn") }}
+      </div>
+    </div>
+
+    <div class="form-floating mb-3">
+      <select id="cropId" class="form-select" :disabled="isPartOfTimeSeries" required
+              v-model="formData.cropId"
+              v-on:change="selectCrop($event)">
+        <option v-for="crop in formOptions.crops" :value='crop.organismId'>{{ crop.localName }}</option>
+      </select>
+      <label for="cropId">{{ this.$i18n.t("observation.selectcrop") }}</label>
+    </div>
+
+    <div class="form-floating mb-3">
+      <select id="pestId" class="form-select" :disabled="formData.cropId <= 0 || isPartOfTimeSeries" required
+              v-model="formData.pestId" @change="selectPest($event)">
+        <option v-for="pest in formOptions.pests" v-bind:value='pest.pestId'>{{ pest.pestName }}</option>
+      </select>
+      <label for="pestId">{{ this.$i18n.t("observation.selectpest") }}</label>
+    </div>
+
+    <div v-if="this.observation.observationTimeSeries" class="form-group row">
+      <div class="col-12 d-flex align-items-center">
+        Plassering:&nbsp;<span v-html="currentLocationName()"></span>
+      </div>
+    </div>
+    <div v-else class="row form-group mb-2">
+      <div class="col-8 d-flex align-items-center ">
+        <router-link id="linkMap" class="vips-btn large" ref='linkMap' v-if="!isPartOfTimeSeries"
+                     :to="{name:'MapObservation', params: {observationId:observation.observationId,geoinfo:mapGeoinfo,isMapPanelVisible:newMapPanel,locationPointOfInterestId:mapLocationPointOfInterestId, observation:observation}}">
+          <font-awesome-icon class="form-icon" icon="map-location"/>{{ mapGeoinfo ? $t("observation.map.label.edit") : $t("observation.map.label.new") }}
+        </router-link>
+      </div>
+      <div class="col-4 d-flex align-items-end justify-content-end" v-html="currentLocationName()"></div>
+    </div>
+
+      <div v-if="mapGeoinfo" id="divMapGeoInfo">
+        <map-observation :disabled="isPartOfTimeSeries" :geoinfo="mapGeoinfo" :isMapPanelVisible="isMapPanelVisible"
+                         :locationIsPrivate="observation.locationIsPrivate"
+                         :polygonService="observation.polygonService"
+                         v-on:visibilityObservationAction="visibilityObservationAction"/>
+      </div>
+      <div class="form-floating mb-3">
+          <input id="strDateObservation" class="form-control" ref="strDateObservation" type="date"
+                 :max="maxObservationDate" :min="minObservationDate" v-model="strDateObservation"
+                 v-on:change="capturedTime($event)" placeholder="Dato for observasjon"/>
+        <label for="strDateObservation">{{ $t("observationTimeSeries.date.label") }}</label>
+      </div>
+
+      <div class="form-check form-switch mb-3 row">
+        <div class="col-12">
+          <input class="form-check-input" type="checkbox" @change="setDefaultHeader" v-model="observation.isPositive"
+                 id="isPositive">
+          <label class="form-check-label" for="isPositive">{{ $t("observation.is_positive.label") }}</label>
+        </div>
+      </div>
+
+    <div class="form-group mb-3 row">
+      <div class="col">
+        <a v-if="showQuantificationForm"
+            class="vips-btn large"
+            v-on:click="toggleShowQuantification">
+          <font-awesome-icon class="form-icon" icon="scale-balanced"/>
+           {{ $t("observation.quantification.remove.label") }}
+        </a>
+        <a v-else
+          class="vips-btn large"
+          v-on:click="toggleShowQuantification">
+          <font-awesome-icon class="form-icon" icon="scale-balanced"/>
+          {{ $t("observation.quantification.label") }}
+        </a>
+      </div>
+    </div>
+    <div class="form-group mb-3 row" v-if="showQuantificationForm">
+      <fieldset id='divSchemaForm' class="form-group border">
+        <legend style="font-size: 1em !important;">{{ $t("observation.quantification.form.label") }}
+        </legend>
+        <quantification :isEditable="false" :observationId="observation.observationId"
+                        :organismId="observation.organismId" :schemaData="observation.observationData"
+                        v-on:updateQuantificationData="updateQuantificationData"
+                        v-on:quantificationErrorCount="updateQuantificationErrorCount"></quantification>
+      </fieldset>
+    </div>
+    <observation-illustration-board
+        v-bind:initialObservationIllustrations="observation.observationIllustrationSet"
+        v-bind:observationId="observation.observationId"
+        @observationIllustrationSetUpdated="handleObservationIllustrationSetUpdated"/>
+
+    <div class="row form-group mb-3">
+      <div class="col">
+        <div class="form-check form-switch mb-2">
+          <input class="form-check-input" type="checkbox" @change="setDefaultHeader" v-model="useDefaultHeader"
+                 id="useDefaultHeader">
+          <label class="form-check-label" for="useDefaultHeader">Bruk standardtittel</label>
+        </div>
+        <div class="form-floating">
+          <input id="heading" type="text" class="form-control" v-model="observation.observationHeading"
+                 :disabled="useDefaultHeader"/>
+          <label for="heading">{{ this.$i18n.t("observation.detail.heading.placeholder") }}</label>
+        </div>
+      </div>
+    </div>
+    <div class="row mb-3">
+      <div class="col">
+        <div class="form-floating">
+          <textarea id="body" v-model="observation.observationText" class="form-control" rows="4"/>
+          <label for="body">{{ this.$i18n.t("observation.detail.body.placeholder") }}</label>
+        </div>
+      </div>
+    </div>
+    <div class="row mb-3">
+      <div class="col">
+        <div class="form-check form-switch mb-3">
+          <input class="form-check-input" type="checkbox" v-model="observation.broadcastMessage" id="broadcastMessage">
+          <label class="form-check-label" for="broadcastMessage">{{ $t("observation.broadcast.label") }}</label>
+          <font-awesome-icon icon="fa-solid fa-circle-question" class="helpIcon"
+                             onclick="document.getElementById('infoModal').style.display = 'block';"/>
+        </div>
+      </div>
+    </div>
+    <div v-if="!observation.deleted" class="float-end">
+      <a v-if="isDeleteBttnVisible" class="vips-btn danger" @click="callForRemoveObservation">{{
+          $t("delete.label")
+        }}</a>
+      <span v-else>
+        <router-link v-if="backToTimeSeries"
+                     :to="{name:'ObservationTimeSeriesList', params: {paramExpandedId:this.paramObservationTimeSeries.observationTimeSeriesId}}"
+                     class="vips-btn danger">
+          {{ $t("cancel.label") }}
+        </router-link>
+        <router-link v-else class="vips-btn danger" to="/">{{ $t("cancel.label") }}</router-link>
+      </span>
+      <a class="vips-btn" @click="saveObservation">{{ $t("save.label") }}</a>
+    </div>
+
+    <div class="centeredModal" id="infoModal" onclick="this.style.display='none';">
+      <font-awesome-icon icon="fa-solid fa-circle-question"/>
+      <p>{{ $t("observation.broadcast.helptext") }}</p>
+    </div>
+
+    <sync ref="sync"/>
+  </div>
 
 </template>
 
 <script>
-	import CommonUtil from '@/components/CommonUtil'
-	import {DateTime} from 'luxon'
-	import MapObservation from '@/components/MapObservation'
-	import Quantification from '@/components/Quantification.vue'
-	import Sync from '@/components/Sync'
-	import ObservationIllustrationBoard from "@/components/ObservationIllustrationBoard"
-
-
-
-	export default {
-		name: 'Observation',
-		props: ['observationId', 'paramGeoinfo', 'locationPointOfInterestId', 'paramObservation', 'createClone'],
-		components: {MapObservation, Quantification, Sync, ObservationIllustrationBoard},
-		data() {
-			return {
-				isGeoInfoNotAvailable: false,
-				isStrDateObservationEmpty: false,
-				isObservationHeaderEmpty: false,
-				isDeleteBttnVisible: true,
-				isPositive: true,
-				isQuantification: false,
-				isMounted: false,
-				msg: this.$i18n.t("observation.msg"),
-				observation: {
-				},
-				selectedCropId: -1,
-				crops: [],
-				pests: [],
-				crop: {'cropId': '', 'cropName': this.$i18n.t("observation.selectcrop")},
-				pest: {'pestId': '', 'pestName': this.$i18n.t("observation.selectpest")},
-				isActive: false,
-				//dateObservation                 : DateTime,
-				strDateObservation: null,
-				maxObservationDate: null,
-				minObservationDate: null,
-				mapGeoinfo: null,
-				mapLocationPointOfInterestId: '',
-				isMapPanelVisible: false,
-				newMapPanel: true,
-				observationForStore:
-				{
-					observationId: '',
-					timeOfObservation: '',
-					statusChangedTime: '',
-					organismId: '',
-					cropOrganismId: '',
-					observationHeading: '',
-					observationText: '',
-					uploaded: false
-				}
-			}
-		},
-		methods: {
-			handleObservationIllustrationSetUpdated(newList) {
-				this.observation.observationIllustrationSet = newList;
-			},
-			callForRemoveObservation() {
-				if (confirm(this.$i18n.t("err.observation.remove.msg"))) {
-					this.prepareForRemove();
-				}
-			},
-			prepareForRemove() {
-				if (this.observationId) {
-					if (this.observationId < 0) {
-						/** Just remove it locally */
-						this.removeLocalObservation(this.observationId);
-						this.$router.push('/');
-					}
-					else {
-						/** Mark the record - for sending to server */
-						this.observationForStore.deleted = true;
-						this.saveObservation();
-					}
-				}
-			},
-
-			/** Remove local Observation */
-			removeLocalObservation(id) {
-				let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
-				let indexPosition = null;
-				$.each(lstObservations, function (index, observation) {
-					if (observation.observationId === id) {
-						indexPosition = index;
-						return false;
-					}
-				});
-
-				if (indexPosition || indexPosition === 0) {
-					this.removeImageRecord(id);
-
-					lstObservations.splice(indexPosition, 1);
-					localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST, JSON.stringify(lstObservations));
-				}
-			},
-			/**
-			 * Remove image data from indexed DB 
-			 */
-			removeImageRecord(observationId) {
-				let entityName = CommonUtil.CONST_DB_ENTITY_PHOTO;
-				let dbRequest = indexedDB.open(CommonUtil.CONST_DB_NAME, CommonUtil.CONST_DB_VERSION);
-				let indexName = CommonUtil.CONST_DB_INDEX_NAME_OBSERVATION_ID;
-				dbRequest.onsuccess = function (evt) {
-					let db = evt.target.result;
-					let transaction = db.transaction([entityName], 'readwrite');
-					let objectstore = transaction.objectStore(entityName);
-					let indexStore = objectstore.index(indexName);
-					let keyRange = IDBKeyRange.only(observationId);
-					let cursorRequest = indexStore.openCursor(keyRange);
-					cursorRequest.onsuccess = function (event) {
-						let cursor = event.target.result;
-						if (cursor) {
-							cursor.delete();
-							cursor.continue();
-						}
-						
-					}
-					db.close();
-				}
-			},
-			/** Validation on save */
-			validate() {
-				let result = true;
-				let msg = "";
-
-				if (!this.strDateObservation) {
-					msg += this.$i18n.t("err.observation.date.empty") + "\n";
-					result = false;
-				}
-
-
-				if (!this.mapGeoinfo) {
-					msg += this.$i18n.t("err.observation.geoinfo") + "\n";
-					result = false;
-				}
-
-				if (!this.observation.observationHeading) {
-					msg += this.$i18n.t("err.observation.header.empty") + "\n";
-					result = false;
-				}
-				if (!result) {
-					alert(msg);
-				}
-				return result;
-
-			},
-			visibilityObservationAction(paramPrivate, paramPolygonService) {
-				this.observationForStore.locationIsPrivate = paramPrivate;
-				if (paramPolygonService) {
-					this.observationForStore.polygonService = paramPolygonService;
-				}
-				else {
-					this.observationForStore.polygonService = '';
-				}
-			},
-			toggleShowQuantification() {
-				this.isQuantification = !this.isQuantification;
-			},
-			/** Get observation from local storage system */
-			getObservationFromStore(id) {
-				// For existing observation
-				if (id) {
-
-					let jsonObservation = {};
-
-					let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));              // Observation List
-
-					/* 
-					  Check availability of observation object 
-					- mainly from map component 
-					- to hold crop, pest data
-					*/
-
-					if (this.paramObservation) {
-
-						this.getObservationCrops(this.paramObservation);
-						this.getObservationPests(this.paramObservation);
-
-						this.strDateObservation = DateTime.fromISO(this.paramObservation.timeOfObservation).toFormat('yyyy-MM-dd\'T\'HH:mm:ss');
-					}
-					else {
-						jsonObservation = lstObservations.find(({observationId}) => observationId === id);                           // Selection Observation
-						this.observation = jsonObservation;
-						if(this.observation.isPositive == undefined)
-						{
-							this.observation.isPositive = true;
-						}
-						this.observation.observationData = JSON.parse(jsonObservation.observationData);
-						if (jsonObservation.statusTypeId) {}
-						else {
-							this.observation.statusTypeId = CommonUtil.CONST_STATUS_PENDING;
-						}
-
-						/* For related Crop and Crop list */
-						this.getObservationCrops(jsonObservation);
-						/* For related Pest and Pest list */
-						this.getObservationPests(jsonObservation);
-
-						this.strDateObservation = DateTime.fromISO(jsonObservation.timeOfObservation).toFormat('yyyy-MM-dd\'T\'HH:mm:ss');
-					}
-
-					if (this.paramGeoinfo) {
-						this.mapGeoinfo = this.paramGeoinfo;
-					}
-					else if (jsonObservation.geoinfo) {
-						this.mapGeoinfo = JSON.parse(jsonObservation.geoinfo);
-					}
-					else {
-
-						if (jsonObservation.location && jsonObservation.location.geoJSON) {
-							this.mapGeoinfo = JSON.parse(jsonObservation.location.geoJSON);
-							this.mapLocationPointOfInterestId = jsonObservation.locationPointOfInterestId;
-						}
-					}
-					this.selectedCropId = this.observation.cropOrganismId;
-				}
-				else {
-					//TODO for new Observation
-				}
-			},
-
-			/** Get related crop and crop list for a selected Observation */
-			getObservationCrops(jsonObservation) {
-
-				//CommonUtil.logInfo(jsonObservation);
-
-				let lstCrops = [];
-				let lstCropIds = [];
-				let lstCropList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_LIST));
-
-				/** Try to get list of crops from crop category ids */
-				let lstCropCategories = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_CATEGORY));
-
-
-				/** For Selected Observation We require List of related crop ids for dropdown   */
-				// Iterating crop categories
-				$.each(lstCropCategories, function (index, category) {
-					// Iterating each category data
-					$.each(category, function (key, data) {
-						//find the key meant for crop id/ids
-						if (key === 'cropOrganismIds') {
-							this.isActive = true;
-							// iterate and get the required cropids relaed to selected observation id
-							$.each(data, function (index, item) {
-								if (parseInt(item) === parseInt(jsonObservation.cropOrganismId)) {
-									lstCropIds = data;
-									return false;
-								}
-							});
-						}
-					})
-				});
-				/* Get list of related crops with their id and name */
-				this.getCrops(lstCropIds);
-
-				let jsonSelectedCrop = this.crops.find(({organismId}) => organismId === parseInt(jsonObservation.cropOrganismId));
-				if (jsonSelectedCrop) {
-					this.crop = {"cropId": jsonSelectedCrop.organismId, "cropName": jsonSelectedCrop.latinName};
-				}
-			},
-
-			/** Get related pests for a particular crop of a observation */
-			getObservationPests(jsonObservation) {
-				let lstPests = [];
-				let lstPestIds = [];
-				let lstPestList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_PEST_LIST));
-				let lstCropPestList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_PEST_LIST));
-
-				$.each(lstCropPestList, function (index, cropPests) {
-					if (parseInt(cropPests.cropOrganismId) === parseInt(jsonObservation.cropOrganismId)) {
-						lstPestIds = cropPests.pestOrganismIds;
-					}
-
-				});
-				this.getPests(lstPestIds);
-
-				let jsonSelectedPest = this.pests.find(({pestId}) => pestId === jsonObservation.organismId);
-				if (jsonSelectedPest) {
-					this.pest = {"pestId": jsonSelectedPest.pestId, "pestName": jsonSelectedPest.pestName};
-				}
-
-
-			},
-
-			/** On selecting a particular crop */
-			selectCrop(event) {
-				this.observation.cropOrganismId = this.selectedCropId;
-				var selectedCropId = this.selectedCropId;
-				let crop = this.crop;
-				let lstPestIds = [];
-				let lstCropPestList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_PEST_LIST));
-				$.each(lstCropPestList, function (cropId, cropPest) {
-					if (selectedCropId == cropId) {
-						let jsonPestId = cropPest.pestOrganismIds;
-						lstPestIds = lstPestIds.concat(jsonPestId);
-					}
-				});
-				this.getPests(lstPestIds);
-			},
-
-			capturedTime(event) {
-				this.observation.timeOfObservation = this.strDateObservation;
-			},
-
-			/** Get New Observation  */
-			getNewObservation() {
-				this.isDeleteBttnVisible = false;
-				let lstCropIds = [];
-				let cropCategoryIdProp = CommonUtil.CONST_CROP_CATEGORY_ID;
-				let jsonCrops = [];
-				let arrCropCatIds = localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST).split(",");
-				let jsonCropCategoryList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_CATEGORY));
-
-				/* Iterate Selected Crop Ids */
-				$.each(arrCropCatIds, function (index, cropCatId) {
-					if (cropCatId != "") {
-						let jsonCropCategory = jsonCropCategoryList.find(({cropCategoryId}) => cropCategoryId === JSON.parse(cropCatId));
-						let jsonCropIds = jsonCropCategory.cropOrganismIds;
-						lstCropIds = lstCropIds.concat(jsonCropIds);
-					}
-				});
-
-				this.getCrops(lstCropIds);
-
-				this.pest = {"pestId": '', "pestName": this.$i18n.t("observation.selectpest")};
-				this.pests = [this.pest];
-
-				this.getNewObservationId();
-			},
-
-			/** Get Crops */
-			getCrops(lstCropIds) {
-				let This = this;
-				let lstCrops = [];
-				if (!this.observationId) {
-					lstCrops.push({"organismId": -1, "localName": this.$i18n.t("observation.selectcrop")});
-				}
-				let lstCropList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_LIST));
-				$.each(lstCropIds, function (index, cropId) {
-					let jsonDetailCrop = lstCropList.find(({organismId}) => organismId === cropId);
-					let organismLocaleSet = jsonDetailCrop.organismLocaleSet;
-					let cropName = jsonDetailCrop.latinName;
-
-					if (organismLocaleSet) {
-						let strLocale = CommonUtil.getSystemLocale();
-
-						organismLocaleSet.forEach(function (localObj) {
-
-							if (localObj.organismLocalePK.locale === strLocale) {
-								if (localObj.localName) {
-									cropName = localObj.localName;
-								}
-
-								return false;
-
-							}
-						});
-
-					}
-					let jsonCrop = {'organismId': cropId, 'localName': cropName};
-					lstCrops.push(jsonCrop);
-				});
-
-				this.crops = lstCrops;
-			},
-
-			/** Get Pests */
-			getPests(lstPestIds) {
-				let This = this;
-				let lstPests = [];
-
-				if (!this.observationId) {
-					lstPests.push({"pestId": '', "pestName": this.$i18n.t("observation.selectpest")});
-				}
-
-				let lstPestList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_PEST_LIST));
-				$.each(lstPestIds, function (index, pestId) {
-					let jsonDetailPest = lstPestList.find(({organismId}) => organismId === pestId);
-					let jsonPest = {};
-					if (jsonDetailPest) {
-						let pestName = jsonDetailPest.latinName;
-						let organismLocaleSet = jsonDetailPest.organismLocaleSet;
-
-						if (organismLocaleSet) {
-							let strLocale = CommonUtil.getSystemLocale();
-							organismLocaleSet.forEach(localObj => {
-								if (localObj.organismLocalePK.locale === strLocale) {
-									if (localObj.localName) {
-										pestName = localObj.localName;
-									}
-									return false;
-								}
-							});
-						}
-						jsonPest = {"pestId": jsonDetailPest.organismId, "pestName": pestName};
-						lstPests.push(jsonPest);
-					}
-				});
-
-				lstPests.push({"pestId": -10, "pestName": this.$i18n.t("observation.unregisteredpest")});
-				this.pests = lstPests;
-			},
-
-			/** Get new observation Id */
-			getNewObservationId(lstObservations) {
-				let newId = 0;
-				let observationIds = [];
-
-
-				if (lstObservations) {
-					$.each(lstObservations, function (index, observation) {
-						if (observation.observationId < 0) {
-							observationIds.push(Math.abs(observation.observationId));
-						}
-					});
-					if (observationIds.length === 0) {
-						newId = CommonUtil.CONST_OBSERVATION_COUNT_START_ID;
-					}
-					else {
-						let largestValue = Math.max.apply(null, observationIds);
-						newId = -Math.abs(largestValue + 1);
-					}
-				}
-				else {
-					newId = CommonUtil.CONST_OBSERVATION_COUNT_START_ID;
-				}
-
-				return newId;
-			},
-
-			/** Save Observation */
-			saveObservation() {
-				if (!this.validate()) {return false;}
-				//CommonUtil.logInfo("this.mapGeoinfo=" + this.mapGeoinfo);
-				let This = this;
-
-
-				let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
-				/** Whether record to be updated */
-				let isRecordAvailable = null;
-				if (lstObservations) {
-					isRecordAvailable = lstObservations.find(({observationId}) => observationId === this.observation.observationId);
-				}
-
-				this.observationForStore.cropOrganismId = this.observation.cropOrganismId;
-				this.observationForStore.organismId = this.observation.organismId;
-				this.observationForStore.timeOfObservation = this.strDateObservation;
-				this.observationForStore.isPositive= this.observation.isPositive;
-				this.observationForStore.statusChangedTime = this.strDateObservation;
-				if (this.observation.statusTypeId) {
-					this.observationForStore.statusTypeId = this.observation.statusTypeId;
-				}
-				else {
-					this.observationForStore.statusTypeId = CommonUtil.CONST_STATUS_PENDING;
-				}
-				
-				this.observationForStore.userId = this.observation.userId;
-				this.observationForStore.geoinfo = JSON.stringify(this.mapGeoinfo); //this.observation.geoinfo;
-				//CommonUtil.logInfo("this.mapGeoinfo=" + this.mapGeoinfo + ". this.observationForStore.geoinfo=" + this.observationForStore.geoinfo);
-				this.observationForStore.locationPointOfInterestId = this.observation.locationPointOfInterestId;
-				this.observationForStore.broadcastMessage = this.observation.broadcastMessage;
-				this.observationForStore.statusRemarks = this.observation.statusRemarks;
-				this.observationForStore.observationHeading = this.observation.observationHeading;
-				this.observationForStore.observationText = this.observation.observationText;
-				this.observationForStore.observationData = JSON.stringify(this.observation.observationData)//'{"number":0,"unit":"Number"}'; //"{\"number\":0,\"unit\":\"Number\"}"; 
-				this.observationForStore.isQuantified = this.observationForStore.observationData.trim().length > 4; // 4 is accounting for quotation marks
-				this.observationForStore.observationIllustrationSet = this.observation.observationIllustrationSet;
-
-				// Update the record inside the list of observations
-				if (this.observationId && isRecordAvailable) {
-					this.observationForStore.observationId = this.observationId;
-					let localObservationForStore = this.observationForStore;
-					let selectedObservationId = this.observationId;
-
-					// Reference to this is lost in here
-					for (var i = 0; i < lstObservations.length; i++)
-					{
-						var jobservation = lstObservations[i];
-						if (jobservation.observationId === selectedObservationId) {
-							jobservation.cropOrganismId = localObservationForStore.cropOrganismId;
-							jobservation.organismId = localObservationForStore.organismId;
-							jobservation.timeOfObservation = localObservationForStore.timeOfObservation;
-							jobservation.isPositive = localObservationForStore.isPositive;
-							jobservation.statusChangedTime = localObservationForStore.statusChangedTime;
-							jobservation.statusTypeId = localObservationForStore.statusTypeId;
-							jobservation.isQuantified = localObservationForStore.isQuantified;
-							jobservation.userId = localObservationForStore.userId;
-
-							jobservation.geoinfo = localObservationForStore.geoinfo;
-							//CommonUtil.logInfo("this.mapGeoinfo=" + this.mapGeoinfo + ". jobservation.geoinfo=" + jobservation.geoinfo + ". localObservationForStore.geoinfo = " + localObservationForStore.geoinfo);
-							jobservation.locationPointOfInterestId = localObservationForStore.locationPointOfInterestId;
-							jobservation.broadcastMessage = localObservationForStore.broadcastMessage;
-							jobservation.observationIllustrationSet = localObservationForStore.observationIllustrationSet;
-
-							jobservation.observationData = localObservationForStore.observationData;
-							jobservation.observationHeading = localObservationForStore.observationHeading;
-							jobservation.observationText = localObservationForStore.observationText;
-							jobservation.locationIsPrivate = localObservationForStore.locationIsPrivate;
-							jobservation.polygonService = localObservationForStore.polygonService;
-							jobservation.uploaded = localObservationForStore.uploaded;
-
-							if (localObservationForStore.deleted) {
-								jobservation.deleted = localObservationForStore.deleted;
-							}
-
-							break;
-						}
-					}
-					/*CommonUtil.logInfo("Here are the observations:" + JSON.stringify(lstObservations));
-					CommonUtil.logInfo(lstObservations);*/
-				}
-				else {
-					this.observationForStore.observationId = this.getNewObservationId(lstObservations);
-					if (!lstObservations) {
-						lstObservations = [];
-
-					}
-					this.observationForStore.statusTypeId = CommonUtil.CONST_STATUS_PENDING;
-					//CommonUtil.logInfo("this.observationForStore=" + this.observationForStore);
-					lstObservations.push(this.observationForStore);
-				}
-				localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST, JSON.stringify(lstObservations));
-				//CommonUtil.logInfo("....and AFTER STORING: " + localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
-				// Sync on save. saveObservation() is also called from the DELETE button
-				this.$refs.sync.syncTwoWay();
-				this.$router.replace({path: '/'});
-
-
-			},
-			updateQuantificationData(schemaData) {
-				this.observation.observationData = schemaData;
-			},
-
-		},
-		filters: {
-			dateFormat: function (timeStr) {
-				return DateTime.fromISO(timeStr).toFormat('yyyy-MM-dd\'T\'hh:mm:ss');
-			}
-		},
-		watch: {
-
-
-
-			pest: {
-
-				handler(val) {
-					if (this.pest.pestId) {
-						this.observation.organismId = this.pest.pestId;
-						this.isMounted = true;
-					}
-				},
-				deep: true,
-				immediate: true
-			}
-		},
-		mounted() {
-			CommonUtil.setHeaderTitle(this.$i18n.t("observation.msg"));
-
-			var dtToday = new Date();
-
-			var month = dtToday.getMonth() + 1;
-			var day = dtToday.getDate();
-			var year = dtToday.getFullYear();
-			var hh = dtToday.getHours();
-			var min = dtToday.getMinutes();
-
-			if (month < 10)
-				month = '0' + month.toString();
-			if (day < 10)
-				day = '0' + day.toString();
-			if (hh < 10)
-				hh = '0' + hh.toString();
-			if (min < 10)
-				min = '0' + min.toString();
-
-
-			var maxDate = year + '-' + month + '-' + day;
-			var minDate = year + '-' + '01' + '-' + '01';
-
-			this.maxObservationDate = maxDate + 'T00:00';
-			this.minObservationDate = minDate + 'T00:00';
-
-			this.strDateObservation = maxDate + 'T' + hh + ':' + min;
-
-			this.observation.timeOfObservation = this.strDateObservation;
-
-			/* Check existing Observation Object - Mainly from Map component
-				It helps to retain the data back to Observation from Map
-			*/
-			if (this.paramObservation) {
-				this.observation = this.paramObservation;
-			}
-			if (this.paramGeoinfo) {
-				this.mapGeoinfo = this.paramGeoinfo;
-			}
-
-
-
-			/* Get details of existing Observation */
-			if (this.observationId) {
-				var nowStrDateObservation = this.strDateObservation;
-				this.getObservationFromStore(this.observationId);
-				this.observation.observationId = this.observationId;
-				if(this.createClone != undefined && this.createClone)
-				{
-					// Set id to null
-					this.observation.observationId = null;
-					// Set timestamp to "now"
-					this.strDateObservation = nowStrDateObservation;
-					this.observation.timeOfObservation = this.strDateObservation;
-					// Remove image collection
-					this.observation.observationIllustrationSet = [];
-					// Remove quantification
-					this.observation.observationData = "";
-					// Change header to Header + "KOPI"
-					this.observation.observationHeading = this.observation.observationHeading + " " + this.$i18n.t("copy").toUpperCase() + " " + maxDate; 
-					this.isDeleteBttnVisible = false;
-				}
-
-			}
-			else {
-				let isCropIdsAvailable = false;
-				if (localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST)) {
-
-					let lstCropIds = localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST).split(",");
-					if (lstCropIds.length > 0) {
-						isCropIdsAvailable = true;
-					}
-				}
-
-				if (isCropIdsAvailable) {
-					let newObservationId = 0;
-					let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
-					newObservationId = this.getNewObservationId(lstObservations);
-					this.observation.observationId = newObservationId;
-					this.observation.observationData = '';
-					this.observation.broadcastMessage = true;
-					this.observation.isPositive = true;
-					this.getNewObservation();
-					this.observation.observationIllustrationSet = [];
-				}
-				else {
-					this.$router.push('/cropCategory');
-				}
-				if (this.locationPointOfInterestId) {
-					this.mapLocationPointOfInterestId = this.locationPointOfInterestId;
-
-				}
-			}
-			if (!this.paramObservation) {
-				this.observationForStore.locationIsPrivate = this.observation.locationIsPrivate;
-				this.observationForStore.polygonService = this.observation.polygonService;
-			}
-		},
-		beforeRouteEnter(to,from,next){
-			next(vm=>{
-				if(vm.$root.sharedState.uuid == ""){ next("/Welcome"); }
-				else { next(); }
-			})
-		}
-
-	}
+import CommonUtil from '@/components/CommonUtil'
+import {DateTime} from 'luxon'
+import MapObservation from '@/components/MapObservation'
+import Quantification from '@/components/Quantification.vue'
+import Sync from '@/components/Sync'
+import ObservationIllustrationBoard from "@/components/ObservationIllustrationBoard"
+
+export default {
+  name: 'Observation',
+  props: ['observationId', 'paramGeoinfo', 'locationPointOfInterestId', 'paramObservation', 'paramObservationTimeSeries', 'createClone'],
+  components: {MapObservation, Quantification, Sync, ObservationIllustrationBoard},
+  data() {
+    return {
+      formOptions: {
+        crops: [],
+        pests: [],
+      },
+      formData: {
+        cropId: -1,
+        pestId: -1,
+      },
+      useDefaultHeader: false,
+      backToTimeSeries: false, // Redirect to page for observation time series
+      isPartOfTimeSeries: false, // Exists in or is created for an observation time series
+      isDeleteBttnVisible: true,
+      isPositive: true,
+      showQuantificationForm: false,
+      isPestSelected: false,
+      observation: {},
+      hourDefault: '00',
+      minuteDefault: '00',
+      isActive: false,
+      strDateObservation: null,
+      maxObservationDate: null,
+      minObservationDate: null,
+      mapGeoinfo: null,
+      mapLocationPointOfInterestId: null,
+      isMapPanelVisible: false,
+      newMapPanel: true,
+      quantificationErrorCount: 0,
+      observationForStore:
+          {
+            observationId: '',
+            timeOfObservation: '',
+            statusChangedTime: '',
+            organismId: '',
+            cropOrganismId: '',
+            observationHeading: '',
+            observationText: '',
+            observationTimeSeriesId: '',
+            uploaded: false
+          }
+    }
+  },
+  methods: {
+    setDefaultHeader() {
+      if (this.useDefaultHeader) {
+        this.observation.observationHeading = this.getDefaultHeader();
+      }
+    },
+    timeSeriesName() {
+        if(this.observation.observationTimeSeries) {
+          return this.observation.observationTimeSeries.name;
+        } else if(this.observation.observationTimeSeriesId) {
+          const jsonLocalOtsList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST));
+          const ots = jsonLocalOtsList.find(({observationTimeSeriesId}) => observationTimeSeriesId === this.observation.observationTimeSeriesId);
+          return ots ? ots.name: "ukjent"
+        }
+    },
+    handleObservationIllustrationSetUpdated(newList) {
+      this.observation.observationIllustrationSet = newList;
+    },
+    callForRemoveObservation() {
+      if (confirm(this.$i18n.t("err.observation.remove.msg"))) {
+        this.prepareForRemove();
+      }
+    },
+    prepareForRemove() {
+      if (this.observationId) {
+        if (this.observationId < 0) {
+          /** Just remove it locally */
+          this.removeLocalObservation(this.observationId);
+          this.$router.push('/');
+        } else {
+          /** Mark the record - for sending to server */
+          this.observationForStore.deleted = true;
+          this.saveObservation();
+        }
+      }
+    },
+
+    /** Remove local Observation */
+    removeLocalObservation(id) {
+      let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
+      let indexPosition = null;
+      $.each(lstObservations, function (index, observation) {
+        if (observation.observationId === id) {
+          indexPosition = index;
+          return false;
+        }
+      });
+
+      if (indexPosition || indexPosition === 0) {
+        this.removeImageRecord(id);
+
+        lstObservations.splice(indexPosition, 1);
+        localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST, JSON.stringify(lstObservations));
+      }
+    },
+    /**
+     * Remove image data from indexed DB
+     */
+    removeImageRecord(observationId) {
+      let entityName = CommonUtil.CONST_DB_ENTITY_PHOTO;
+      let dbRequest = indexedDB.open(CommonUtil.CONST_DB_NAME, CommonUtil.CONST_DB_VERSION);
+      let indexName = CommonUtil.CONST_DB_INDEX_NAME_OBSERVATION_ID;
+      dbRequest.onsuccess = function (evt) {
+        let db = evt.target.result;
+        let transaction = db.transaction([entityName], 'readwrite');
+        let objectstore = transaction.objectStore(entityName);
+        let indexStore = objectstore.index(indexName);
+        let keyRange = IDBKeyRange.only(observationId);
+        let cursorRequest = indexStore.openCursor(keyRange);
+        cursorRequest.onsuccess = function (event) {
+          let cursor = event.target.result;
+          if (cursor) {
+            cursor.delete();
+            cursor.continue();
+          }
+
+        }
+        db.close();
+      }
+    },
+    /** Validation on save */
+    validate() {
+      let result = true;
+      let msg = "";
+
+      if (this.quantificationErrorCount > 0) {
+        msg += this.$i18n.t("err.observation.quantification.errors") + "\n";
+        result = false;
+      }
+
+      if (!this.strDateObservation) {
+        msg += this.$i18n.t("err.observation.date.empty") + "\n";
+        result = false;
+      }
+
+      if (this.observation.observationTimeSeries) {
+        const givenDate = new Date(this.strDateObservation);
+        const timeSeriesYear = this.observation.observationTimeSeries.year;
+        if (givenDate.getFullYear() !== this.observation.observationTimeSeries.year) {
+          msg += this.$i18n.t("err.observation.date.timeseries.year") + " (" + timeSeriesYear + ")\n";
+          result = false;
+        }
+      }
+
+
+      if (!this.mapGeoinfo) {
+        msg += this.$i18n.t("err.observation.geoinfo") + "\n";
+        result = false;
+      }
+
+      if (!this.observation.observationHeading) {
+        msg += this.$i18n.t("err.observation.header.empty") + "\n";
+        result = false;
+      }
+      if (!result) {
+        alert(msg);
+      }
+      return result;
+
+    },
+    visibilityObservationAction(paramPrivate, paramPolygonService) {
+      this.observationForStore.locationIsPrivate = paramPrivate;
+      if (paramPolygonService) {
+        this.observationForStore.polygonService = paramPolygonService;
+      } else {
+        this.observationForStore.polygonService = '';
+      }
+    },
+    toggleShowQuantification() {
+      if(!this.formData.pestId > 0) {
+        this.setShowQuantification(false);
+      } else if (this.showQuantificationForm) {
+        this.setShowQuantification(false);
+      } else {
+        this.setShowQuantification(true);
+      }
+    },
+    setShowQuantification(display) {
+      this.showQuantificationForm = display;
+      if(!display) {
+        this.observation.observationData = "";
+        this.quantificationErrorCount = 0;
+      }
+    },
+    getPointOfInterestFromLocalStorage(id) {
+      let jsonLocalPoiList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
+      return jsonLocalPoiList.find(({pointOfInterestId}) => pointOfInterestId === id);
+    },
+    currentLocationName() {
+      if (this.mapLocationPointOfInterestId) {
+        return this.getPointOfInterestFromLocalStorage(this.mapLocationPointOfInterestId).name;
+      }
+      if (this.mapGeoinfo && this.mapGeoinfo.features[0].geometry) {
+        return this.$i18n.t("observation.map.latitude") + ": " + this.mapGeoinfo.features[0].geometry.coordinates[0] + " <br>" + this.$i18n.t("observation.map.longitude") + ": " + this.mapGeoinfo.features[0].geometry.coordinates[1];
+      }
+      return ""
+    },
+    getObservationFromLocalStorage(id) {
+      // For existing observation
+      if (id) {
+        let jsonObservation = {};
+        let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
+
+        if (this.paramObservation) {
+          this.getObservationCrops(this.paramObservation.cropOrganismId);
+          this.getObservationPests(this.paramObservation.cropOrganismId, this.paramObservation.organismId);
+          this.strDateObservation = DateTime.fromISO(this.paramObservation.timeOfObservation).toFormat('yyyy-MM-dd');
+        } else {
+          jsonObservation = lstObservations.find(({observationId}) => observationId === id);
+          this.observation = jsonObservation;
+          this.observation.locationPointOfInterest = jsonObservation.location;
+
+          if (this.observation.isPositive == undefined) {
+            this.observation.isPositive = true;
+          }
+          this.observation.observationData = JSON.parse(jsonObservation.observationData);
+          if (jsonObservation.statusTypeId) {
+          } else {
+            this.observation.statusTypeId = CommonUtil.CONST_STATUS_PENDING;
+          }
+          this.getObservationCrops(parseInt(jsonObservation.cropOrganismId));
+          this.getObservationPests(parseInt(jsonObservation.cropOrganismId), parseInt(jsonObservation.organismId));
+          this.strDateObservation = DateTime.fromISO(jsonObservation.timeOfObservation).toFormat('yyyy-MM-dd');
+
+          const defHeader = this.getDefaultHeader();
+          this.useDefaultHeader = this.observation.observationHeading === defHeader;
+        }
+
+        if (this.paramGeoinfo) {
+          this.mapGeoinfo = this.paramGeoinfo;
+        } else if (jsonObservation.location) {
+          this.mapGeoinfo = JSON.parse(jsonObservation.location.geoJSON);
+          this.mapLocationPointOfInterestId = jsonObservation.locationPointOfInterestId;
+        } else {
+          if (jsonObservation.geoinfo) {
+            this.mapGeoinfo = JSON.parse(jsonObservation.geoinfo);
+          }
+          if (jsonObservation.locationPointOfInterestId) {
+            this.mapLocationPointOfInterestId = jsonObservation.locationPointOfInterestId;
+          }
+        }
+        this.formData.cropId = this.observation.cropOrganismId;
+      }
+    },
+
+    /** Get related crop and crop list for a selected Observation or ObservationTimeSeries */
+    getObservationCrops(cropOrganismId) {
+      // Try to get list of crops from crop category ids
+      let lstCropCategories = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_CATEGORY));
+      let lstCropIds = [];
+
+      /** For Selected Observation We require List of related crop ids for dropdown   */
+      // Iterating crop categories
+      $.each(lstCropCategories, function (index, category) {
+        // Iterating each category data
+        $.each(category, function (key, data) {
+          //find the key meant for crop id/ids
+          if (key === 'cropOrganismIds') {
+            this.isActive = true;
+            // iterate and get the required cropids relaed to selected observation id
+            $.each(data, function (index, item) {
+              if (parseInt(item) === cropOrganismId) {
+                lstCropIds = data;
+                return false;
+              }
+            });
+          }
+        })
+      });
+      /* Get list of related crops with their id and name */
+      this.setCrops(lstCropIds);
+      this.crop = this.getSelectedCrop(cropOrganismId);
+    },
+
+    getSelectedCrop(cropOrganismId) {
+      let selectedCrop = this.formOptions.crops.find(({organismId}) => organismId === cropOrganismId);
+      if (selectedCrop) {
+        return {"cropId": selectedCrop.organismId, "cropName": selectedCrop.localName};
+      }
+      return {"cropId": cropOrganismId, "cropName": "IKKE FUNNET"}
+    },
+
+    /** Get related pests for a particular crop of an observation or observation-time series */
+    getObservationPests(cropOrganismId, pestOrganismId) {
+      let lstCropPestList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_PEST_LIST));
+      let lstPestIds = [];
+      $.each(lstCropPestList, function (index, cropPests) {
+        if (parseInt(cropPests.cropOrganismId) === cropOrganismId) {
+          lstPestIds = cropPests.pestOrganismIds;
+        }
+      });
+      this.setPests(lstPestIds);
+      this.formData.pestId = pestOrganismId;
+    },
+
+    /** On selecting a particular crop */
+    selectCrop() {
+      if (this.formData.cropId !== this.observation.cropOrganismId) {
+        const lstCropPestList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_PEST_LIST));
+
+        const lstPestIds = [];
+        for (const [cropId, cropPest] of Object.entries(lstCropPestList)) {
+          if (this.formData.cropId === parseInt(cropId)) {
+            lstPestIds.push(...cropPest.pestOrganismIds);
+          }
+        }
+        this.setPests(lstPestIds);
+        this.formData.pestId = null;
+        this.observation.cropOrganismId = this.formData.cropId;
+      }
+    },
+
+    /** On selecting a particular pest */
+    selectPest() {
+      // If crop/pest is changed
+      if (this.formData.pestId !== this.observation.organismId) {
+        this.observation.organismId = this.formData.pestId;
+        this.isPestSelected = true;
+        this.setShowQuantification(false);
+        this.observation.observationHeading = "";
+        this.useDefaultHeader = false;
+        this.observation.organismId = this.formData.pestId;
+
+        // Should be true by default for all but 68 (eplevikler)
+        this.observation.broadcastMessage = this.formData.pestId !== 68;
+      }
+    },
+
+    capturedTime(event) {
+      this.observation.timeOfObservation = this.strDateObservation + 'T' + this.hourDefault + ':' + this.minuteDefault;
+    },
+
+    // Set up available crops for observation form
+    setupCropsAndPests() {
+      let arrCropCatIds = [];
+      let lstCropIds = [];
+      const strCropCatIds = localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST);
+      if (strCropCatIds) {
+        arrCropCatIds = strCropCatIds.split(",");
+      }
+      let jsonCropCategoryList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_CATEGORY));
+      $.each(arrCropCatIds, function (index, cropCatId) {
+        if (cropCatId != "") {
+          let jsonCropCategory = jsonCropCategoryList.find(({cropCategoryId}) => cropCategoryId === JSON.parse(cropCatId));
+          let jsonCropIds = jsonCropCategory.cropOrganismIds;
+          lstCropIds = lstCropIds.concat(jsonCropIds);
+        }
+      });
+      this.setCrops(lstCropIds);
+      if (this.formOptions.crops.length === 1) {
+        this.formData.cropId = this.formOptions.crops[0].organismId;
+        this.selectCrop();
+      }
+
+    },
+
+    /** Get Crops */
+    setCrops(lstCropIds) {
+      let lstCropList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_LIST));
+
+      let lstCrops = [];
+      for (const cropId of lstCropIds) {
+        let jsonDetailCrop = lstCropList.find(({organismId}) => organismId === cropId);
+
+        if (jsonDetailCrop) {
+          let cropName = jsonDetailCrop.latinName;
+          const organismLocaleSet = jsonDetailCrop.organismLocaleSet;
+
+          if (organismLocaleSet) {
+            const strLocale = CommonUtil.getSystemLocale();
+            const localObj = organismLocaleSet.find(localObj => localObj.organismLocalePK.locale === strLocale);
+            if (localObj && localObj.localName) {
+              cropName = localObj.localName;
+            }
+          }
+          lstCrops.push({'organismId': cropId, 'localName': cropName});
+        }
+      }
+      this.formOptions.crops = lstCrops;
+    },
+    /** Get Pests */
+    setPests(lstPestIds) {
+      let lstPestList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_PEST_LIST));
+
+      let lstPests = [];
+      for (const pestId of lstPestIds) {
+        const jsonDetailPest = lstPestList.find(({organismId}) => organismId === pestId);
+
+        if (jsonDetailPest) {
+          let pestName = jsonDetailPest.latinName;
+          const organismLocaleSet = jsonDetailPest.organismLocaleSet;
+
+          if (organismLocaleSet) {
+            const strLocale = CommonUtil.getSystemLocale();
+            const localObj = organismLocaleSet.find(localObj => localObj.organismLocalePK.locale === strLocale);
+
+            if (localObj && localObj.localName) {
+              pestName = localObj.localName;
+            }
+          }
+          lstPests.push({pestId: jsonDetailPest.organismId, pestName: pestName});
+        }
+      }
+      lstPests.push({"pestId": -10, "pestName": this.$i18n.t("observation.unregisteredpest")});
+      this.formOptions.pests = lstPests;
+    },
+
+    /** Get new observation Id */
+    getNewObservationId(lstObservations) {
+      let newId = 0;
+      let observationIds = [];
+
+      if (lstObservations) {
+        $.each(lstObservations, function (index, observation) {
+          if (observation.observationId < 0) {
+            observationIds.push(Math.abs(observation.observationId));
+          }
+        });
+        if (observationIds.length === 0) {
+          newId = CommonUtil.CONST_OBSERVATION_COUNT_START_ID;
+        } else {
+          let largestValue = Math.max.apply(null, observationIds);
+          newId = -Math.abs(largestValue + 1);
+        }
+      } else {
+        newId = CommonUtil.CONST_OBSERVATION_COUNT_START_ID;
+      }
+
+      return newId;
+    },
+
+    /** Save Observation */
+    saveObservation() {
+      if (!this.validate()) {
+        return false;
+      }
+      let This = this;
+
+      let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
+      /** Whether record to be updated */
+      let isRecordAvailable = null;
+      if (lstObservations) {
+        isRecordAvailable = lstObservations.find(({observationId}) => observationId === this.observation.observationId);
+      }
+      this.observationForStore.cropOrganismId = this.observation.cropOrganismId;
+      this.observationForStore.organismId = this.observation.organismId;
+      this.observationForStore.timeOfObservation = this.strDateObservation;
+      this.observationForStore.isPositive = this.observation.isPositive;
+      this.observationForStore.statusChangedTime = this.strDateObservation;
+      if (this.observation.statusTypeId) {
+        this.observationForStore.statusTypeId = this.observation.statusTypeId;
+      } else {
+        this.observationForStore.statusTypeId = CommonUtil.CONST_STATUS_PENDING;
+      }
+      this.observationForStore.userId = this.observation.userId;
+      this.observationForStore.observationTimeSeriesId = this.observation.observationTimeSeriesId;
+      if(this.mapLocationPointOfInterestId) {
+          this.observationForStore.locationPointOfInterestId = this.mapLocationPointOfInterestId;
+      } else {
+          this.observationForStore.geoinfo = JSON.stringify(this.mapGeoinfo);
+      }
+      this.observationForStore.broadcastMessage = this.observation.broadcastMessage;
+      this.observationForStore.statusRemarks = this.observation.statusRemarks;
+      this.observationForStore.observationHeading = this.observation.observationHeading;
+      this.observationForStore.observationText = this.observation.observationText;
+      this.observationForStore.observationData = JSON.stringify(this.observation.observationData)//'{"number":0,"unit":"Number"}'; //"{\"number\":0,\"unit\":\"Number\"}";
+      this.observationForStore.isQuantified = this.observationForStore.observationData.trim().length > 4; // 4 is accounting for quotation marks
+      this.observationForStore.observationIllustrationSet = this.observation.observationIllustrationSet;
+
+      // Update the record inside the list of observations
+      if (this.observationId && isRecordAvailable) {
+        this.observationForStore.observationId = this.observationId;
+        let localObservationForStore = this.observationForStore;
+        let selectedObservationId = this.observationId;
+
+        // Reference to this is lost in here
+        for (let i = 0; i < lstObservations.length; i++) {
+          let jobservation = lstObservations[i];
+          if (jobservation.observationId === selectedObservationId) {
+            jobservation.cropOrganismId = localObservationForStore.cropOrganismId;
+            jobservation.organismId = localObservationForStore.organismId;
+            jobservation.timeOfObservation = localObservationForStore.timeOfObservation;
+            jobservation.isPositive = localObservationForStore.isPositive;
+            jobservation.statusChangedTime = localObservationForStore.statusChangedTime;
+            jobservation.statusTypeId = localObservationForStore.statusTypeId;
+            jobservation.isQuantified = localObservationForStore.isQuantified;
+            jobservation.userId = localObservationForStore.userId;
+            jobservation.observationTimeSeriesId = localObservationForStore.observationTimeSeriesId;
+
+            jobservation.geoinfo = localObservationForStore.geoinfo;
+            jobservation.locationPointOfInterestId = localObservationForStore.locationPointOfInterestId;
+            jobservation.broadcastMessage = localObservationForStore.broadcastMessage;
+            jobservation.observationIllustrationSet = localObservationForStore.observationIllustrationSet;
+
+            jobservation.observationData = localObservationForStore.observationData;
+            jobservation.observationHeading = localObservationForStore.observationHeading;
+            jobservation.observationText = localObservationForStore.observationText;
+            jobservation.locationIsPrivate = localObservationForStore.locationIsPrivate;
+            jobservation.polygonService = localObservationForStore.polygonService;
+            jobservation.uploaded = localObservationForStore.uploaded;
+
+            if (localObservationForStore.deleted) {
+              jobservation.deleted = localObservationForStore.deleted;
+            }
+
+            break;
+          }
+        }
+
+      } else {
+        this.observationForStore.observationId = this.getNewObservationId(lstObservations);
+        if (!lstObservations) {
+          lstObservations = [];
+
+        }
+        this.observationForStore.statusTypeId = CommonUtil.CONST_STATUS_PENDING;
+        lstObservations.push(this.observationForStore);
+      }
+      localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST, JSON.stringify(lstObservations));
+
+      this.$refs.sync.syncTwoWay();
+
+      if (this.backToTimeSeries) {
+        this.$router.replace({
+          path: '/observationTimeSeriesList',
+          query: {
+            paramExpandedId: this.paramObservationTimeSeries.observationTimeSeriesId,
+          }
+        });
+      } else {
+        this.$router.replace({path: '/'});
+      }
+    },
+    updateQuantificationData(schemaData) {
+      this.observation.observationData = schemaData;
+    },
+    updateQuantificationErrorCount(errorCount) {
+      this.quantificationErrorCount = errorCount
+    },
+    getDefaultHeader() {
+      let selectedCrop = this.getSelectedCrop(this.observation.cropOrganismId);
+      let selectedPest = this.formOptions.pests.find(({pestId}) => pestId === this.observation.organismId);
+      if (selectedCrop && selectedPest) {
+        let selectedPoi = this.observation.locationPointOfInterest;
+        if (!selectedPoi) {
+          let poiIdFromFeature = this.mapGeoinfo && this.mapGeoinfo.features[0].properties ? this.mapGeoinfo.features[0].properties.pointOfInterestId : null;
+          let selectedPoiId = this.observation.locationPointOfInterestId ? this.observation.locationPointOfInterestId : poiIdFromFeature;
+          if (selectedPoiId) {
+            selectedPoi = this.getPoi(selectedPoiId);
+          }
+        }
+        let place = selectedPoi ? selectedPoi.name : selectedCrop.cropName.toLowerCase();
+        let found = this.observation.isPositive ? "Funn av " : "Ingen funn av ";
+        let pestName = selectedPest.pestId < 0 ? "noe" : selectedPest.pestName.toLowerCase();
+        return found + " " + pestName + " i " + place;
+      }
+      return ""
+    },
+    getPoi(poiId) {
+      let listPOIAll = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
+      return listPOIAll.find(({pointOfInterestId}) => pointOfInterestId === poiId);
+    }
+  },
+  filters: {
+    dateFormat: function (timeStr) {
+      return DateTime.fromISO(timeStr).toFormat('yyyy-MM-dd');
+    }
+  },
+  watch: {
+    formData: {
+      handler(val) {
+      },
+      deep: true,
+      immediate: true
+    },
+  },
+  mounted() {
+    CommonUtil.setHeaderTitle(this.$i18n.t("observation.msg"));
+
+    const currentDate = new Date();
+    const baseDate = this.paramObservationTimeSeries ? new Date(this.paramObservationTimeSeries.year, currentDate.getMonth(), currentDate.getDate()) : currentDate;
+    const month = String(baseDate.getMonth() + 1).padStart(2, '0');
+    const day = String(baseDate.getDate()).padStart(2, '0');
+    const year = baseDate.getFullYear();
+
+    const maxDate = `${year}-${month}-${day}`;
+    const minDate = `${year}-01-01`;
+
+    this.maxObservationDate = maxDate;
+    this.minObservationDate = minDate;
+    this.strDateObservation = maxDate;
+    this.observation.timeOfObservation = this.strDateObservation + 'T' + this.hourDefault + ':' + this.minuteDefault;
+
+    /* Check existing Observation Object - Mainly from Map component
+      It helps to retain the data back to Observation from Map
+    */
+    if (this.paramObservation) {
+      this.observation = this.paramObservation;
+    }
+    if (this.paramGeoinfo) {
+      this.mapGeoinfo = this.paramGeoinfo;
+      if (this.paramGeoinfo.features[0].properties) {
+        this.mapLocationPointOfInterestId = this.paramGeoinfo.features[0].properties.pointOfInterestId
+      }
+    }
+    /* Get details of existing Observation */
+    if (this.observationId) {
+      this.getObservationFromLocalStorage(this.observationId);
+
+      if (this.createClone != undefined && this.createClone) {
+        this.useDefaultHeader = false;
+        this.observation.observationId = null;
+        this.observation.timeOfObservation = this.strDateObservation + 'T' + this.hourDefault + ':' + this.minuteDefault;
+        this.observation.observationIllustrationSet = [];
+        this.observation.observationData = "";
+        this.observation.observationHeading = this.observation.observationHeading + " " + this.$i18n.t("copy").toUpperCase() + " " + maxDate;
+        this.isDeleteBttnVisible = false;
+      }
+    } else {
+      let isCropIdsAvailable = false;
+      if (localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST)) {
+        let lstCropIds = localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST).split(",");
+        if (lstCropIds.length > 0) {
+          isCropIdsAvailable = true;
+        }
+      }
+      if (!isCropIdsAvailable) {
+        this.$router.push('/cropCategory');
+      }
+      let newObservationId = 0;
+      let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
+      newObservationId = this.getNewObservationId(lstObservations);
+      this.observation.observationId = newObservationId;
+      this.observation.observationData = '';
+      this.observation.broadcastMessage = true;
+      this.observation.isPositive = true;
+      this.observation.observationIllustrationSet = [];
+      this.setupCropsAndPests();
+      this.isDeleteBttnVisible = false;
+
+      // Special treatment if observation belongs to an observation time series
+      if (this.paramObservationTimeSeries) {
+        this.observation.observationTimeSeries = this.paramObservationTimeSeries;
+        this.observation.observationTimeSeriesId = this.paramObservationTimeSeries.observationTimeSeriesId;
+
+        this.getObservationCrops(this.paramObservationTimeSeries.cropOrganismId);
+        this.getObservationPests(this.paramObservationTimeSeries.cropOrganismId, this.paramObservationTimeSeries.organismId);
+        this.observation.cropOrganismId = this.paramObservationTimeSeries.cropOrganismId;
+        this.observation.organismId = this.paramObservationTimeSeries.organismId;
+
+        this.observation.locationPointOfInterestId = this.paramObservationTimeSeries.locationPointOfInterestId;
+        this.observation.locationPointOfInterest = this.paramObservationTimeSeries.locationPointOfInterest;
+        this.observation.locationIsPrivate = this.paramObservationTimeSeries.locationIsPrivate;
+        this.observation.polygonService = this.paramObservationTimeSeries.polygonService;
+        this.formData.cropId = this.paramObservationTimeSeries.cropOrganismId;
+        this.mapLocationPointOfInterestId = this.paramObservationTimeSeries.locationPointOfInterestId;
+        if (this.paramObservationTimeSeries.locationPointOfInterest) {
+          this.mapGeoinfo = JSON.parse(this.paramObservationTimeSeries.locationPointOfInterest.geoJSON);
+        } else if (this.paramObservationTimeSeries.geoInfo) {
+          this.mapGeoinfo = JSON.parse(this.paramObservationTimeSeries.geoInfo);
+        }
+      }
+
+      if (this.locationPointOfInterestId) {
+        this.mapLocationPointOfInterestId = this.locationPointOfInterestId;
+      }
+    }
+    if (!this.paramObservation) {
+      this.observationForStore.locationIsPrivate = this.observation.locationIsPrivate;
+      this.observationForStore.polygonService = this.observation.polygonService;
+    }
+    this.backToTimeSeries = this.paramObservationTimeSeries;
+
+    this.isPartOfTimeSeries = (this.observation.observationTimeSeries !== undefined && this.observation.observationTimeSeries !== null) || (this.observation.observationTimeSeriesId !== undefined && this.observation.observationTimeSeriesId !== null);
+
+    this.showQuantificationForm = this.observation.observationData && this.observation.observationData !== ''
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      if (vm.$root.sharedState.uuid == "") {
+        next("/Welcome");
+      } else {
+        next();
+      }
+    })
+  }
+
+}
 </script>
 
 <style scoped>
-	#btnCloseQuantification {
-		float: right;
-		top: 0px;
-		right: 0px;
-	}
-
-	#divSchemaForm {
-		padding: 10px;
-	}
-	.centeredModal {
-		position: fixed;
-		display: none;
-		width: 95%;
-		padding: 10px;
-		border: 2px solid #3d8052;
-		border-radius: 5px;
-		background-color: white;
-		top: 50%;
-		left: 50%;
-		transform: translate(-50%, -50%);
-	}
-	.helpIcon {
-		color: #3d8052;
-	}
+#btnCloseQuantification {
+  float: right;
+  top: 0px;
+  right: 0px;
+}
+
+#divSchemaForm {
+  padding: 10px;
+}
+
+.centeredModal {
+  position: fixed;
+  display: none;
+  width: 95%;
+  padding: 10px;
+  border: 2px solid #3d8052;
+  border-radius: 5px;
+  background-color: white;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+}
+
+.form-check-input:checked {
+  background-color: #3d8052 !important;
+  border: 0;
+}
+
+.form-check-input:focus, .label::after, label.form-check-label:focus, .form-check-input::after, .form-check-input:not(:disabled):not(.disabled):active:focus {
+  color: black;
+  outline: 0;
+  border: 0;
+  box-shadow: 0 0 0 0.1rem #3d8052 !important;
+}
+
+.helpIcon {
+  color: #3d8052;
+}
 </style>
diff --git a/src/components/ObservationIllustrationBoard.vue b/src/components/ObservationIllustrationBoard.vue
index 6078a4e6f84c42611f05b5c538393123951f81c1..a34d052333c51616286a42e89aea3499f0d9cdb4 100644
--- a/src/components/ObservationIllustrationBoard.vue
+++ b/src/components/ObservationIllustrationBoard.vue
@@ -1,37 +1,41 @@
 <!--
-    
-  Copyright (c) 2022 NIBIO <http://www.nibio.no/>. 
-  
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
   This file is part of VIPSObservationApp.
   VIPSObservationApp is free software: you can redistribute it and/or modify
-  it under the terms of the NIBIO Open Source License as published by 
+  it under the terms of the NIBIO Open Source License as published by
   NIBIO, either version 1 of the License, or (at your option) any
   later version.
-  
+
   VIPSObservationApp is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   NIBIO Open Source License for more details.
-  
+
   You should have received a copy of the NIBIO Open Source License
   along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
 
   Author: Tor-Einar Skog <tor-einar.skog@nibio.no>
   Dated : 2022-02-23
-    
+
 -->
 
 <template>
-	<div class="row">
-		<div class="col-6">
-			<font-awesome-icon style="font-size: x-large; vertical-align: middle;" icon="camera" />
-			<a class="vips-btn medium" id="cameraLauncher" ref='cameraLauncher'
-				@click="launchCamera">{{ $t("photo.label.takephoto") }}</a>
-		</div>
-		<div class="col-6">
-			<font-awesome-icon style="font-size: x-large; vertical-align: middle;" icon="file-image" />
-			<a type="button" class="vips-btn medium" id="cameraLauncher" ref='cameraLauncher'
-				@click="launchGallery">{{ $t("photo.label.selectphoto") }}</a>
+	<div class="form-group mb-3 row">
+    <div class="col-6 d-flex align-items-center">
+      <a class="vips-btn large" id="cameraLauncher" ref='cameraLauncher'
+         @click="launchCamera">
+        <font-awesome-icon class="form-icon" icon="camera" />
+        {{ $t("photo.label.takephoto") }}
+      </a>
+    </div>
+    <div class="col-6 d-flex align-items-center">
+			<a type="button" class="vips-btn large" id="cameraLauncher" ref='cameraLauncher'
+				@click="launchGallery">
+        <font-awesome-icon class="form-icon" icon="file-image" />
+        {{ $t("photo.label.selectphoto") }}
+      </a>
 		</div>
 		<div class="container">
 			<div class="row" v-for="observationIllustrationPair in observationIllustrationPairs">
@@ -46,7 +50,6 @@
 			<img :src="modalImageBase64Data" class="img-fluid" />
 		</div>
 	</div>
-	</div>
 
 </template>
 
@@ -71,7 +74,7 @@
 		methods: {
 			// Triggered by the delete event in the ObservationIllustration component
 			deleteObservationIllustrationMetaData: function (observationIllustrationPK) {
-				// The ObservationIllustration file data has already been deleted by the component 
+				// The ObservationIllustration file data has already been deleted by the component
 				// Mark the meta data as deleted from the current observation
 				// It will be removed on the next sync
 				var updatedList = [];
@@ -165,14 +168,14 @@
 							this.organizeIllustrationsForRendering(); // Need to do this to ensure the first image is rendered
 							this.$emit("observationIllustrationSetUpdated", this.observationIllustrations);
 						};
-						
+
 					};
 
 					// Add the component to the ObservationIllustrationBoard
 					// Mark the observation as "InNeedOfSync" or similar...
 					db.close();
 				}
-				
+
 			},
 			onFail: function (message) {
 				alert(message);
@@ -216,8 +219,6 @@
 			}
 		}
 	};
-
-
 </script>
 
 <style scoped>
@@ -233,4 +234,4 @@
 		left: 50%;
 		transform: translate(-50%, -50%);
 	}
-</style>
\ No newline at end of file
+</style>
diff --git a/src/components/ObservationList.vue b/src/components/ObservationList.vue
index 979e1d83c573b63f41293384280cd6b4e87a3a26..1b96f8d3370853bdbc483c38f3b13243e6523fec 100644
--- a/src/components/ObservationList.vue
+++ b/src/components/ObservationList.vue
@@ -1,25 +1,25 @@
 <!--
-    
-  Copyright (c) 2022 NIBIO <http://www.nibio.no/>. 
-  
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
   This file is part of VIPSObservationApp.
   VIPSObservationApp is free software: you can redistribute it and/or modify
-  it under the terms of the NIBIO Open Source License as published by 
+  it under the terms of the NIBIO Open Source License as published by
   NIBIO, either version 1 of the License, or (at your option) any
   later version.
-  
+
   VIPSObservationApp is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   NIBIO Open Source License for more details.
-  
+
   You should have received a copy of the NIBIO Open Source License
   along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
-    
+
   Author: Bhabesh Bhabani Mukhopadhyay
   Author: Tor-Einar Skog <tor-einar.skog@nibio.no>
   Dated : 19-Aug-2021
-    
+
 -->
 <template>
 	<div>
@@ -28,8 +28,7 @@
 				<button type="button" class="btn btn-primary">+</button>
 			</router-link>
 		</div>
-
-		<div v-if="observations && observations.length > 0" class="bg-light">
+		<div v-if="observationsExist()" class="bg-light mt-2">
 			<ul class="list-group bg-light" v-if="isInitialized">
 				<!-- TODO: Remove the sync status classes (v-bind:class). Do it after sync has been automatized -->
 				<router-link :to="{name: 'Observation', params: {observationId:obs.observationId}}"
@@ -37,18 +36,25 @@
 					v-bind:class="{'text-danger':obs.isNew, 'text-primary':obs.toUpload, 'text-secondary':obs.isDeleted}"
 					v-for="obs in sortedObservations" v-if="!obs.isDeleted" v-bind:key="obs.observationId">
 					<div v-if="obs.isDeleted">
-						<strike> {{ obs.timeOfObservation | dateFormat }} <b>{{obs.observationHeading}}</b> </strike>
+						<strike> {{ obs.timeOfObservation | dateFormat }} <br/><b>{{obs.observationHeading}}</b> </strike>
 					</div>
 					<div v-else class="row">
-						<div class="col-10">
-						{{ obs.timeOfObservation | dateFormat }} <b>{{obs.observationHeading}}</b>
+						<div class="col-8">
+  						<span class="list-label">{{ obs.timeOfObservation | dateFormat }}</span><br/>{{obs.observationHeading}}
 						</div>
-						<div class="col-2">
+            <div class="col-4 d-flex align-items-center justify-content-end">
+              <router-link v-if="obs.observationTimeSeriesId"
+                           :to="{name:'ObservationTimeSeriesList', params: {paramExpandedId: obs.observationTimeSeriesId}}">
+                <span class="badge badge-pill badge-info">{{timeSeriesLabel(obs)}}</span>
+              </router-link>
+              <router-link v-else-if="obs.observationTimeSeries"
+                           :to="{name:'ObservationTimeSeriesList', params: {paramExpandedId: obs.observationTimeSeries.observationTimeSeriesId}}">
+                <span class="badge badge-pill badge-info">{{timeSeriesLabel(obs)}}</span>
+              </router-link>
 							<router-link
 								:to="{name: 'Observation', params: {observationId:obs.observationId,createClone:true}}"
 								class="addobs-btn">
-								<font-awesome-icon style="font-size: x-large; color: #3d8052; "
-										icon="fa-solid fa-clone" /></i>
+								<font-awesome-icon class="icon" icon="fa-solid fa-clone" />
 							</router-link>
 						</div>
 					</div>
@@ -56,7 +62,7 @@
 
 			</ul>
 		</div>
-		<div v-else class="alert alert-info" role="alert">{{ $t("observationlist.alert.emptylist")}}</div>
+		<div v-else class="alert alert-info mt-2" role="alert">{{ $t("observationlist.alert.emptylist")}}</div>
 		<common-util ref="CommonUtil" />
 		<sync ref="Sync" />
 	</div>
@@ -67,7 +73,6 @@
 	import Sync from '@/components/Sync'
 	import {DateTime} from 'luxon'
 
-
 	export default {
 		name: "ObservationList",
 		data() {
@@ -76,10 +81,14 @@
 				isInitialized: false,
 				CONST_URL_DOMAIN: '',
 				observations: undefined,
+        otsList: undefined
 			};
 		},
 		components: {CommonUtil, Sync},
 		methods: {
+      observationsExist() {
+        return this.observations && this.observations.filter(({isDeleted}) => !isDeleted).length > 0;
+      },
 			/** Extract observations from localstorage */
 			getObservationsFromStore() {
 				this.isInitialized = true;
@@ -99,23 +108,45 @@
 									observation.toUpload = true;
 								}
 							}
-
 						}
-
 					});
 					this.observations = lstObservations;
 				}
-
 			},
-
-
+      loadObservationTimeSeriesListFromLocalStore() {
+        const jsonLocalOtsList = localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST);
+        if (jsonLocalOtsList) {
+          this.otsList = JSON.parse(jsonLocalOtsList);
+        }
+      },
+      timeSeriesLabel(observation) {
+        if(observation.observationTimeSeries) {
+          return CommonUtil.timeSeriesLabel(observation.observationTimeSeries);
+        } else if(observation.observationTimeSeriesId) {
+          const ots = this.otsList.find(({observationTimeSeriesId}) => observationTimeSeriesId === observation.observationTimeSeriesId);
+          return ots ? CommonUtil.timeSeriesLabel(ots): ""
+        }
+      }
 		},
 		computed: {
 			sortedObservations: function () {
 				this.observations.sort((a, b) => {
-					return new Date(b.timeOfObservation) - new Date(a.timeOfObservation);
+          // Compare observation IDs first
+          if (a.observationId < 0 && b.observationId >= 0) {
+            return -1; // a comes before b
+          } else if (a.observationId >= 0 && b.observationId < 0) {
+            return 1; // b comes before a
+          } else if (a.observationId < 0 && b.observationId < 0) {
+            // Both observation IDs are negative, so compare them directly
+            return b.observationId - a.observationId;
+          } else {
+            const timeComparison = new Date(b.timeOfObservation) - new Date(a.timeOfObservation);
+            if(timeComparison === 0) {
+              return b.observationId - a.observationId;
+            }
+            return timeComparison
+          }
 				});
-
 				return this.observations;
 			}
 		},
@@ -130,8 +161,9 @@
 			CommonUtil.setHeaderTitle(this.$i18n.t("observationlist.heading"));
 			this.CONST_URL_DOMAIN = CommonUtil.CONST_URL_DOMAIN;
 			let strUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
-			if (strUUID) {
+      if (strUUID) {
 				this.getObservationsFromStore();
+        this.loadObservationTimeSeriesListFromLocalStore();
 			}
 			// Making it globally available, so that e.g. the Sync component can update the list
 			// calling e.g. this.$root.sharedState.observationListComponent.getObservationsFromStore();
@@ -168,4 +200,9 @@
 		border-radius: 0 !important;
 		border-width: 0px 0px 1px 0px !important;
 	}
-</style>
\ No newline at end of file
+
+  .badge {
+    font-family: monospace;
+  }
+
+</style>
diff --git a/src/components/ObservationTimeSeries.vue b/src/components/ObservationTimeSeries.vue
new file mode 100644
index 0000000000000000000000000000000000000000..48d457cddb6131702610026f46ede263b2f2a97a
--- /dev/null
+++ b/src/components/ObservationTimeSeries.vue
@@ -0,0 +1,490 @@
+<!--
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
+  This file is part of VIPSObservationApp.
+  VIPSObservationApp is free software: you can redistribute it and/or modify
+  it under the terms of the NIBIO Open Source License as published by
+  NIBIO, either version 1 of the License, or (at your option) any
+  later version.
+
+  VIPSObservationApp is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  NIBIO Open Source License for more details.
+
+  You should have received a copy of the NIBIO Open Source License
+  along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
+
+  Dated : 13-Mar-2024
+-->
+
+<template xmlns="http://www.w3.org/1999/html">
+  <div class="mt-2">
+    <div class="mb-2">
+      <router-link :to="{name:'ObservationTimeSeriesList', params: {paramExpandedId: this.dataToSubmit.id, paramYear: this.paramYear}}"
+                   class="vips-btn">
+        {{ $t("back.label") }}
+      </router-link>
+    </div>
+    <div v-if="uneditable()" class="alert alert-info alert-dismissible fade show">
+      <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
+      {{ $t("observationTimeSeries.uneditable.explanation") }}
+    </div>
+
+    <div v-if="dataToSubmit.deleted">
+      <div class="alert alert-warning" role="alert">
+        {{ $t("err.observationTimeSeries.remove.warn") }}
+      </div>
+    </div>
+    <div class="form-floating mb-3">
+      <select id="cropId" class="form-select" required
+              v-model="dataToSubmit.cropId"
+              :disabled="uneditable()"
+              v-on:change="selectCrop()">
+        <option v-for="crop in formOptions.crops" :value='crop.organismId'>{{ crop.localName }}</option>
+      </select>
+      <label for="cropId">{{ this.$i18n.t("observationTimeSeries.selectcrop") }}</label>
+    </div>
+
+    <div class="form-floating mb-3">
+      <select id="pestId" class="form-select" required
+              v-model="dataToSubmit.pestId"
+              :disabled="dataToSubmit.cropId < 0 || uneditable()">
+        <option v-for="pest in formOptions.pests" v-bind:value="pest.pestId">{{ pest.pestName }}</option>
+      </select>
+      <label for="pestId">{{ this.$i18n.t("observationTimeSeries.selectpest") }}</label>
+    </div>
+
+    <div class="form-floating mb-3">
+      <select id="poiId" class="form-select" required
+              v-model="dataToSubmit.poiId"
+              :disabled="uneditable()"
+              v-on:change="selectPOI($event)">
+        <option v-for="poi in formOptions.pois" v-bind:value="poi.pointOfInterestId">{{ poi.name }}</option>
+      </select>
+      <label for="poiId">{{ this.$i18n.t("observationTimeSeries.selectpoi") }}</label>
+    </div>
+
+    <map-observation-time-series v-if="dataToSubmit.poiId" class="mb-3" :geoinfo="dataToSubmit.geoJSON"
+                                 :locationIsPrivate="dataToSubmit.locationIsPrivate"
+                                 :polygonService="dataToSubmit.polygonService" :disabled="uneditable()"
+                                 v-on:visibilityObservationTimeSeriesAction="setVisibilityAndMasking"/>
+
+    <div class="form-floating mb-3">
+      <select id="year" class="form-select" required v-model="dataToSubmit.year" :disabled="uneditable()">
+        <option v-for="year in formOptions.years" :value="year">{{ year }}</option>
+      </select>
+      <label for="year">Velg år</label>
+    </div>
+
+    <div class="row">
+      <div class="col-sm-6">
+        <div class="form-floating mb-3">
+          <input id="name" type="text" class="form-control" v-model="dataToSubmit.name"/>
+          <label for="name">{{ this.$i18n.t("observationTimeSeries.detail.name.placeholder") }}</label>
+        </div>
+      </div>
+      <div class="col-sm-6 ps-3 mb-3">
+        <div v-if="dataToSubmit.name">Merkelapp:</div>
+        {{ label(dataToSubmit) }}
+      </div>
+    </div>
+
+    <div class="form-floating mb-3">
+      <textarea id="description" class="form-control" rows="4" v-model="dataToSubmit.description"/>
+      <label for="description">{{ this.$i18n.t("observationTimeSeries.detail.description.placeholder") }}</label>
+    </div>
+
+    <div class="form-group float-end" v-if="!dataToSubmit.deleted">
+      <a v-if="isDeleteButtonVisible" class="vips-btn danger"
+         v-on:click="callForRemoveObservationTimeSeries">{{ $t("delete.label") }}</a>
+      <router-link v-else
+                   :to="{name:'ObservationTimeSeriesList', params: {paramYear: this.dataToSubmit.year}}"
+                   class="vips-btn danger">
+        {{ $t("cancel.label") }}
+      </router-link>
+      <a class="vips-btn" v-on:click="saveObservationTimeSeries">{{ $t("save.label") }}</a>
+    </div>
+    <sync ref="sync"/>
+  </div>
+
+</template>
+
+<script>
+import CommonUtil from '@/components/CommonUtil'
+import {DateTime} from 'luxon'
+import Sync from '@/components/Sync'
+import MapObservationTimeSeries from "./MapObservationTimeSeries.vue";
+
+export default {
+  name: 'ObservationTimeSeries',
+  props: ['observationTimeSeriesId', 'createClone', 'paramYear'],
+  components: {Sync, MapObservationTimeSeries},
+  data() {
+    return {
+      isMounted: false,
+      formOptions: {
+        crops: [],
+        pests: [],
+        pois: [],
+        years: []
+      },
+      dataToSubmit: {
+        id: undefined,
+        cropId: -1,
+        pestId: -1,
+        poiId: undefined,
+        poi: undefined,
+        locationIsPrivate: false,
+        polygonService: undefined,
+        year: undefined,
+        name: undefined,
+        description: undefined,
+        deleted: false
+      },
+      observations: [],
+      isDeleteButtonVisible: true,
+    }
+  },
+  methods: {
+    setupNewForm() {
+      if (!this.cropCategoryIsSelected()) {
+        this.$router.push('/cropCategory');
+      }
+      this.formOptions.crops = this.loadCropsFromLocalStorage();
+      if (this.formOptions.crops.length === 1) {
+        let cropId = this.formOptions.crops[0].organismId
+        this.dataToSubmit.cropId = cropId;
+        this.formOptions.pests = this.loadPestsFromLocalStorageForCrop(cropId);
+      } else {
+        this.formOptions.pests = []
+      }
+      this.formOptions.pois = this.loadUserPoisFromLocalStorage();
+      this.dataToSubmit.id = this.getNewObservationTimeSeriesId();
+      this.isDeleteButtonVisible = false;
+    },
+
+    setupEditForm() {
+      let ots = this.getObservationTimeSeriesFromStore(this.observationTimeSeriesId);
+      if (!ots) {
+        console.error("No locally stored observation time series found for given ID", this.observationTimeSeriesId);
+        this.$router.push('/observationTimeSeriesList');
+      }
+      this.formOptions.crops = this.loadCropsForCurrentlySelectedCrop(ots.cropOrganismId);
+      this.formOptions.pests = this.loadPestsFromLocalStorageForCrop(ots.cropOrganismId)
+      this.formOptions.pois = this.loadUserPoisFromLocalStorage();
+      this.observations = this.loadObservationsFromLocalStore(ots.observationTimeSeriesId);
+
+      this.dataToSubmit.id = ots.observationTimeSeriesId;
+      this.dataToSubmit.cropId = ots.cropOrganismId;
+      this.dataToSubmit.pestId = ots.organismId;
+      this.dataToSubmit.year = ots.year;
+      this.dataToSubmit.name = ots.name;
+      this.dataToSubmit.description = ots.description;
+
+      this.dataToSubmit.poiId = ots.locationPointOfInterestId;
+
+      const selectedPoi = this.formOptions.pois.find(({pointOfInterestId}) => pointOfInterestId === this.dataToSubmit.poiId)
+      this.dataToSubmit.geoJSON = JSON.parse(selectedPoi.geoJSON);
+
+      this.dataToSubmit.locationIsPrivate = ots.locationIsPrivate;
+      this.dataToSubmit.polygonService = ots.polygonService;
+
+
+      if (this.createClone) {
+        this.dataToSubmit.id = null;
+        this.dataToSubmit.name = ots.name + " " + this.$i18n.t("copy").toUpperCase();
+        this.isDeleteButtonVisible = false;
+      }
+    },
+    cropCategoryIsSelected() {
+      let localCropIdList = []
+      let localCropIdStr = localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST);
+      if (localCropIdStr) {
+        localCropIdList = localCropIdStr.split(",");
+      }
+      return localCropIdList.length > 0
+    },
+    loadCropsForCurrentlySelectedCrop(cropId) {
+      let lstCropCategories = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_CATEGORY));
+      let cropsForCategory = []
+      lstCropCategories.forEach(category => {
+        const cropIds = category.cropOrganismIds;
+        if (cropIds) {
+          if (cropIds.includes(cropId)) {
+            cropsForCategory = this.loadCropsFromLocalStorage(category.cropCategoryId);
+          }
+        }
+      });
+      return cropsForCategory;
+    },
+    loadCropsFromLocalStorage(cropCategoryId) {
+      const allAvailableCropCategories = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_CATEGORY));
+      let cropCategoriesToDisplay = []
+      if (!cropCategoryId) {
+        let localSelectedCropCategories = localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_ID_LIST);
+        if (localSelectedCropCategories !== undefined && localSelectedCropCategories !== null) {
+          cropCategoriesToDisplay = localSelectedCropCategories.split(",").filter(cropCatId => cropCatId !== "");
+        }
+      } else {
+        cropCategoriesToDisplay.push(String(cropCategoryId));
+      }
+      let cropIdList = [];
+      cropCategoriesToDisplay.forEach(selectedCropCategoryId => {
+        const jsonCropCategory = allAvailableCropCategories.find(({cropCategoryId: ccId}) => ccId === JSON.parse(selectedCropCategoryId));
+        if (jsonCropCategory) {
+          cropIdList.push(...jsonCropCategory.cropOrganismIds);
+        }
+      });
+      let cropList = [];
+      const lstCropList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_LIST));
+      cropIdList.forEach(cropId => {
+        const jsonDetailCrop = lstCropList.find(({organismId}) => organismId === cropId);
+        if (jsonDetailCrop) {
+          let cropName = jsonDetailCrop.latinName;
+          const organismLocaleSet = jsonDetailCrop.organismLocaleSet;
+          const strLocale = CommonUtil.getSystemLocale();
+          if (organismLocaleSet) {
+            const localObj = organismLocaleSet.find(({organismLocalePK}) => organismLocalePK.locale === strLocale);
+            if (localObj && localObj.localName) {
+              cropName = localObj.localName;
+            }
+          }
+          const jsonCrop = {'organismId': cropId, 'localName': cropName};
+          cropList.push(jsonCrop);
+        }
+      });
+      return cropList;
+    },
+    loadUserPoisFromLocalStorage() {
+      let userId = this.$root.sharedState.userId;
+      let jsonLocalPoiList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
+      let jsonUserPoiList = []
+      jsonLocalPoiList.forEach(poi => {
+        if (poi.userId === userId) {
+          jsonUserPoiList.push(poi);
+        }
+      });
+      if (jsonUserPoiList.length === 0) {
+        this.$router.push({path: '/places', query: {poiRequired: 'true'}})
+      }
+      return jsonUserPoiList;
+    },
+    loadObservationsFromLocalStore(observationTimeSeriesId) {
+      let observationsForTimeSeries = [];
+      const jsonLocalObservationList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
+      if (jsonLocalObservationList && jsonLocalObservationList.length > 0) {
+        jsonLocalObservationList.forEach(observation => {
+          let obsOts = observation.observationTimeSeries;
+          if (obsOts && obsOts.observationTimeSeriesId === observationTimeSeriesId) {
+            observationsForTimeSeries.push(observation);
+          }
+        });
+      }
+      return observationsForTimeSeries;
+    },
+    label(observationTimeSeries) {
+      return CommonUtil.timeSeriesLabel(observationTimeSeries);
+    },
+    setVisibilityAndMasking(paramPrivate, paramPolygonService) {
+      this.dataToSubmit.locationIsPrivate = paramPrivate;
+      this.dataToSubmit.polygonService = paramPolygonService;
+    },
+    selectPOI(event) {
+      let selectedPoiId = event.target.value;
+      if (selectedPoiId) {
+        const selectedPoi = this.formOptions.pois.find(({pointOfInterestId}) => String(pointOfInterestId) === selectedPoiId)
+        if(selectedPoi) {
+          this.dataToSubmit.poiId = selectedPoi.pointOfInterestId;
+          this.dataToSubmit.geoJSON = JSON.parse(selectedPoi.geoJSON);
+        }
+      }
+    },
+    callForRemoveObservationTimeSeries() {
+      if (this.observations.length > 0) {
+        alert(this.$i18n.t("err.observationTimeSeries.remove.info"))
+      } else if (confirm(this.$i18n.t("err.observationTimeSeries.remove.msg"))) {
+        if (this.observationTimeSeriesId) {
+          if (this.observationTimeSeriesId < 0) {
+            this.removeLocalObservationTimeSeries(this.observationTimeSeriesId);
+            this.$router.push('/observationTimeSeriesList');
+          } else {
+            this.dataToSubmit.deleted = true;
+            this.saveObservationTimeSeries();
+          }
+        }
+      }
+    },
+    removeLocalObservationTimeSeries(otsId) {
+      let jsonLocalOtsList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST));
+      let indexPosition = jsonLocalOtsList.findIndex(ots => ots.observationTimeSeriesId === otsId);
+      if (indexPosition !== -1) {
+        jsonLocalOtsList.splice(indexPosition, 1);
+        localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST, JSON.stringify(jsonLocalOtsList));
+      }
+    },
+
+    /** Validation on save */
+    validate() {
+      let result = true;
+      let msg = "";
+      if (!this.dataToSubmit.poiId) {
+        msg += this.$i18n.t("err.observationTimeSeries.poi.empty") + "\n";
+        result = false;
+      }
+      if (!this.dataToSubmit.name) {
+        msg += this.$i18n.t("err.observationTimeSeries.header.empty") + "\n";
+        result = false;
+      }
+      if (!result) {
+        alert(msg);
+      }
+      return result;
+    },
+
+    getObservationTimeSeriesFromStore(otsId) {
+      if (otsId) {
+        let localOtsList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST));
+        return localOtsList.find(({observationTimeSeriesId}) => observationTimeSeriesId === otsId);
+      }
+      return null;
+    },
+    loadPestsFromLocalStorageForCrop(cropId) {
+      let pestIds = [];
+      let jsonLocalCropPestList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_CROP_PEST_LIST));
+      Object.values(jsonLocalCropPestList).forEach(cropPest => {
+        if (cropId === cropPest.cropOrganismId) {
+          let jsonPestId = cropPest.pestOrganismIds;
+          pestIds = pestIds.concat(jsonPestId);
+        }
+      })
+      let pests = [];
+      let jsonLocalPestList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_PEST_LIST));
+      if (!jsonLocalPestList) {
+        console.error("No pests in local storage")
+      }
+      pestIds.forEach(pestId => {
+        let pest = jsonLocalPestList.find(({organismId}) => organismId === pestId);
+        if (pest) {
+          let pestName = pest.latinName;
+          let organismLocaleSet = pest.organismLocaleSet;
+
+          if (organismLocaleSet) {
+            let strLocale = CommonUtil.getSystemLocale();
+            organismLocaleSet.forEach(localObj => {
+              if (localObj.organismLocalePK.locale === strLocale) {
+                if (localObj.localName) {
+                  pestName = localObj.localName;
+                }
+                return false;
+              }
+            });
+          }
+          pests.push({"pestId": pest.organismId, "pestName": pestName});
+        }
+      })
+      pests.push({"pestId": -10, "pestName": this.$i18n.t("observation.unregisteredpest")});
+      return pests;
+    },
+    selectCrop() {
+      this.formOptions.pests = this.loadPestsFromLocalStorageForCrop(this.dataToSubmit.cropId);
+    },
+    getNewObservationTimeSeriesId() {
+      const jsonLocalOtsList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST));
+
+      if (jsonLocalOtsList) {
+        const negativeIds = jsonLocalOtsList
+            .filter(ots => ots.observationTimeSeriesId < 0)
+            .map(ots => Math.abs(ots.observationTimeSeriesId));
+
+        if (negativeIds.length === 0) {
+          return CommonUtil.CONST_OBSERVATION_TIME_SERIES_COUNT_START_ID;
+        } else {
+          const largestValue = Math.max(...negativeIds);
+          return -Math.abs(largestValue + 1);
+        }
+      } else {
+        return CommonUtil.CONST_OBSERVATION_TIME_SERIES_COUNT_START_ID;
+      }
+    },
+    saveObservationTimeSeries() {
+      if (!this.dataToSubmit.deleted && !this.validate()) {
+        return false;
+      }
+      const idOfOtsToSave = this.dataToSubmit.id;
+
+      let otsToSave = {};
+      otsToSave.observationTimeSeriesId = idOfOtsToSave;
+      otsToSave.cropOrganismId = this.dataToSubmit.cropId;
+      otsToSave.organismId = this.dataToSubmit.pestId;
+      otsToSave.locationPointOfInterestId = this.dataToSubmit.poiId;
+      otsToSave.year = this.dataToSubmit.year;
+      otsToSave.name = this.dataToSubmit.name;
+      otsToSave.description = this.dataToSubmit.description;
+      otsToSave.locationIsPrivate = this.dataToSubmit.locationIsPrivate;
+      otsToSave.polygonService = this.dataToSubmit.polygonService;
+      otsToSave.deleted = this.dataToSubmit.deleted
+      otsToSave.uploaded = false
+
+      // Update the record inside the list of locally stored observation time series
+      let localOtsList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST));
+      if (!localOtsList) {
+        localOtsList = [];
+      }
+      const localOtsToUpdate = localOtsList.find(ots => ots.observationTimeSeriesId === idOfOtsToSave);
+      if (localOtsToUpdate) {
+        Object.assign(localOtsToUpdate, otsToSave);
+      } else {
+        otsToSave.observationTimeSeriesId = this.getNewObservationTimeSeriesId();
+        localOtsList.push(otsToSave);
+      }
+      localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST, JSON.stringify(localOtsList));
+      this.$refs.sync.syncTwoWay();
+      this.$router.replace({
+        path: '/observationTimeSeriesList',
+        query: {
+          paramYear: otsToSave.year
+        }
+      });
+    },
+    uneditable() {
+      return !this.createClone && this.observations && this.observations.length > 0;
+    }
+  },
+  mounted() {
+    let currentYear = new Date().getFullYear();
+    this.dataToSubmit.year = this.paramYear ? this.paramYear : currentYear;
+    this.formOptions.years = [];
+    for (let i = currentYear - 9; i <= currentYear; i++) {
+      this.formOptions.years.push(i);
+    }
+
+    if (this.observationTimeSeriesId) {
+      CommonUtil.setHeaderTitle(this.$i18n.t("observationTimeSeries.edit"));
+      this.setupEditForm();
+    } else {
+      CommonUtil.setHeaderTitle(this.$i18n.t("observationTimeSeries.add"));
+      this.setupNewForm();
+    }
+  },
+  filters: {
+    dateFormat: function (timeStr) {
+      return DateTime.fromISO(timeStr).toFormat('yyyy-MM-dd\'T\'hh:mm:ss');
+    }
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      if (vm.$root.sharedState.uuid === "") {
+        next("/Welcome");
+      } else {
+        next();
+      }
+    })
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/components/ObservationTimeSeriesList.vue b/src/components/ObservationTimeSeriesList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..d64197a81e37576a93ddeb4c39ecfea20e23ee94
--- /dev/null
+++ b/src/components/ObservationTimeSeriesList.vue
@@ -0,0 +1,320 @@
+<!--
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
+  This file is part of VIPSObservationApp.
+  VIPSObservationApp is free software: you can redistribute it and/or modify
+  it under the terms of the NIBIO Open Source License as published by
+  NIBIO, either version 1 of the License, or (at your option) any
+  later version.
+
+  VIPSObservationApp is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  NIBIO Open Source License for more details.
+
+  You should have received a copy of the NIBIO Open Source License
+  along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
+
+  Dated : 13-Mar-2024
+-->
+<template>
+  <div class="mt-2">
+    <div class="addItem" v-if="myPoiList.length > 0">
+      <router-link :to="{name: 'ObservationTimeSeries', params: {paramYear: this.selectedYear }}">
+        <button type="button" class="btn btn-primary">+</button>
+      </router-link>
+    </div>
+    <div v-if="myPoiList.length > 0" class="alert alert-info alert-dismissible fade show mt-2" role="alert">
+      <button v-if="observationTimeSeriesExist" type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
+      <span v-if="!observationTimeSeriesExist">{{ $t("observationTimeSeriesList.alert.emptylist") }}</span>
+      <span v-else>{{ $t("observationTimeSeriesList.alert.emptylist") }} Trykk på tidsserien for å legge til en observasjon.</span>
+    </div>
+    <div v-if="myPoiList.length === 0" class="alert alert-info mt-2" role="alert">
+      Du må <router-link :to="{name: 'MapPOI', params: {backToTimeSeriesList:true}}">registrere et sted</router-link> før du kan opprette en tidsserie.
+    </div>
+    <div v-else class="bg-light">
+      <div class="form-floating mb-3" v-if="sortedYears().length > 1">
+        <select id="selectedYear" class="form-select" v-model="selectedYear">
+          <option v-for="year in sortedYears()" :value="year">{{ year}}</option>
+        </select>
+        <label for="selectedYear">Velg år</label>
+      </div>
+      <ul class="list-group list-group-flush bg-light" v-if="isInitialized">
+        <li v-for="ots in sortedObservationTimeSeries" class="list-group-item list-group-item-action bg-light">
+          <a href="#"
+             @click.prevent="toggleExpandedRow(ots.observationTimeSeriesId)"
+
+             v-bind:class="{'text-danger': ots.isNew, 'text-primary': ots.toUpload, 'text-secondary': ots.isDeleted}"
+             v-if="!ots.isDeleted"
+             v-bind:key="ots.observationTimeSeriesId"
+          >
+            <div v-if="ots.isDeleted" class="row deleted">
+              <b>{{ ots.name }}</b>
+            </div>
+            <div v-else class="row">
+              <div class="col-9">
+                <span class="list-label">{{label(ots)}}</span><br>{{ ots.name }}
+              </div>
+              <div class="col-3 d-flex align-items-center justify-content-end">
+                  <span class="badge badge-pill badge-info">{{ getObservationCount(ots.observationTimeSeriesId) }}</span>
+                <router-link
+                    :to="{name: 'ObservationTimeSeries', params: {observationTimeSeriesId: ots.observationTimeSeriesId}}"
+                    v-bind:class="{'text-danger':ots.isNew, 'text-primary':ots.toUpload, 'text-secondary':ots.isDeleted}"
+                    v-if="!ots.isDeleted" v-bind:key="ots.observationTimeSeriesId">
+                  <font-awesome-icon class="icon" icon="fa-solid fa-pen-to-square" />
+                </router-link>
+                <router-link
+                    :to="{name: 'ObservationTimeSeries', params: {observationTimeSeriesId: ots.observationTimeSeriesId, createClone:true}}"
+                    class="addobs-btn">
+                  <font-awesome-icon class="icon" icon="fa-solid fa-clone"/>
+                </router-link>
+              </div>
+            </div>
+          </a>
+          <ul class="list-group list-group-flush bg-light ms-1 mt-2 mb-2" v-if="isRowExpanded(ots.observationTimeSeriesId)">
+            <li v-for="obs in observationMap[ots.observationTimeSeriesId]">
+              <router-link :to="{name: 'Observation', params: {observationId:obs.observationId, paramObservationTimeSeries: ots}}"
+                           class="list-group-item list-group-item-action bg-light"
+                           v-bind:class="{'text-danger':obs.isNew, 'text-primary':obs.toUpload, 'text-secondary':obs.isDeleted}"
+                           v-if="!obs.isDeleted" v-bind:key="obs.observationId">
+                <span class="list-label">{{ obs.timeOfObservation | dateFormat }}</span><br/>{{ obs.observationHeading }}
+              </router-link>
+            </li>
+          </ul>
+          <div v-if="isRowExpanded(ots.observationTimeSeriesId)" class="ms-4 mt-2 mb-2">
+            <div v-if="ots.uploaded === false">{{ $t("observationTimeSeries.observation.add.not.available")}}</div>
+            <router-link v-else :to="{name: 'Observation', params: {paramObservationTimeSeries: ots}}"
+                         class="bg-light">
+              <font-awesome-icon class="small-icon" :icon="['fas', 'square-plus']" /> {{ $t("observation.msg")}}
+            </router-link>
+          </div>
+        </li>
+      </ul>
+    </div>
+    <common-util ref="CommonUtil"/>
+    <sync ref="Sync"/>
+  </div>
+</template>
+
+<script>
+import CommonUtil from '@/components/CommonUtil'
+import Sync from '@/components/Sync'
+import {DateTime} from 'luxon'
+
+export default {
+  name: "ObservationTimeSeriesList",
+  props: ['paramExpandedId', 'paramYear'],
+  data() {
+    return {
+      isInitialized: false,
+      currentlyExpandedId: undefined,
+      selectedYear: new Date().getFullYear(),
+      otsYearMap:  {},
+      myPoiList: [],
+      observationTimeSeriesExist: false,
+      otsList: undefined,
+      observationMap: {},
+    };
+  },
+  components: {CommonUtil, Sync},
+  methods: {
+    label(observationTimeSeries) {
+      return CommonUtil.timeSeriesLabel(observationTimeSeries);
+    },
+    sortedYears() {
+      return Object.keys(this.otsYearMap).map(Number).sort((a, b) => a - b);
+    },
+    toggleExpandedRow(id) {
+      if(!this.isRowExpanded(id)) {
+        this.currentlyExpandedId = id;
+      } else {
+        this.currentlyExpandedId = undefined;
+      }
+    },
+    isRowExpanded(id) {
+      return parseInt(this.currentlyExpandedId) === parseInt(id);
+    },
+    getObservationCount(observationTimeSeriesId) {
+      if (this.observationMap[observationTimeSeriesId]) {
+        return this.observationMap[observationTimeSeriesId].length
+      }
+      return 0;
+    },
+    getObservationTimeSeriesFromStore(otsId) {
+      if (otsId) {
+        let localOtsList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST));
+        return localOtsList.find(({observationTimeSeriesId}) => observationTimeSeriesId === parseInt(otsId));
+      }
+      return null;
+    },
+    loadUserPoisFromLocalStorage() {
+      let userId = this.$root.sharedState.userId;
+      let jsonLocalPoiList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
+      let jsonUserPoiList = []
+      jsonLocalPoiList.forEach(poi => {
+        if (poi.userId === userId) {
+          jsonUserPoiList.push(poi);
+        }
+      });
+      this.myPoiList = jsonUserPoiList;
+    },
+    loadObservationTimeSeriesListFromLocalStore() {
+      this.isInitialized = true;
+      this.otsYearMap = {}
+      const jsonLocalOtsList = localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST);
+      if (jsonLocalOtsList) {
+        const localOtsList = JSON.parse(jsonLocalOtsList);
+        localOtsList.forEach(ots => {
+          // Check if the ObservationTimeSeries hasn't been uploaded yet
+          if (ots.uploaded === false) {
+            if (ots.deleted) {
+              ots.isDeleted = ots.deleted;
+            } else {
+              // Check if the ObservationTimeSeries is new (observationTimeSeriesId < 0)
+              ots.isNew = ots.observationTimeSeriesId < 0;
+              ots.toUpload = !ots.isNew;
+            }
+          }
+          this.addObservationTimeSeriesToMap(ots);
+        });
+        this.otsList = localOtsList;
+      }
+      this.observationTimeSeriesExist = this.otsList.length > 0;
+    },
+    addObservationTimeSeriesToMap(ots) {
+      const year = parseInt(ots.year);
+      if (!isNaN(year)) {
+        if (!this.otsYearMap.hasOwnProperty(year)) {
+          this.otsYearMap[year] = [];
+        }
+        this.otsYearMap[year].push(ots);
+      }
+    },
+    loadObservationMapFromLocalStore() {
+      const localObservationList = localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST);
+      if (localObservationList) {
+        const jsonLocalObservationList = JSON.parse(localObservationList);
+        this.observationMap = {};
+        jsonLocalObservationList.forEach(observation => {
+          const ostId = observation.observationTimeSeries && observation.observationTimeSeries.observationTimeSeriesId ? observation.observationTimeSeries.observationTimeSeriesId : undefined;
+          // If observation has been deleted (but not yet synced) - remove from map
+          if (observation.deleted) {
+            return
+          }
+          if (!this.observationMap.hasOwnProperty(ostId)) {
+            this.observationMap[ostId] = [observation];
+          } else {
+            this.observationMap[ostId].push(observation);
+          }
+        });
+      }
+    },
+    yearIsSetAndContainsTimeSeries(paramYear) {
+      return paramYear && this.otsYearMap[paramYear] && this.otsYearMap[paramYear].length > 0
+    }
+  },
+  computed: {
+    sortedObservationTimeSeries: function () {
+      if(!this.otsYearMap[this.selectedYear]) {
+        return [];
+      }
+      this.otsYearMap[this.selectedYear].sort((a, b) => {
+        if (a.observationTimeSeriesId < 0 && b.observationTimeSeriesId >= 0) {
+          return -1;
+        } else if (a.observationTimeSeriesId >= 0 && b.observationTimeSeriesId < 0) {
+          return 1;
+        } else {
+          return b.observationTimeSeriesId - a.observationTimeSeriesId;
+        }
+      });
+      return this.otsYearMap[this.selectedYear];
+    }
+  },
+  filters: {
+    dateFormat: function (timeStr) {
+      return DateTime.fromISO(timeStr).toISODate();
+    }
+  },
+  mounted() {
+    CommonUtil.setHeaderTitle(this.$i18n.t("observationTimeSeriesList.heading"));
+
+    let strUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
+    if (strUUID) {
+      this.loadObservationTimeSeriesListFromLocalStore();
+      this.loadObservationMapFromLocalStore();
+      this.loadUserPoisFromLocalStorage();
+    }
+
+    if (this.$router.currentRoute.query.paramExpandedId) {
+      this.currentlyExpandedId = this.$router.currentRoute.query.paramExpandedId
+    } else {
+      this.currentlyExpandedId = this.paramExpandedId;
+    }
+    if(this.currentlyExpandedId > 0) {
+      let expandedOts = this.getObservationTimeSeriesFromStore(this.currentlyExpandedId);
+      if(expandedOts) {
+        this.selectedYear = expandedOts.year;
+      }
+    } else if(this.yearIsSetAndContainsTimeSeries(this.$router.currentRoute.query.paramYear)) {
+      this.selectedYear = this.$router.currentRoute.query.paramYear;
+    } else if(this.yearIsSetAndContainsTimeSeries(this.paramYear)) {
+      this.selectedYear = this.paramYear;
+    } else {
+      const currentYear = new Date().getFullYear();
+      if (this.yearIsSetAndContainsTimeSeries(currentYear)) {
+        this.selectedYear = currentYear
+      } else {
+        this.selectedYear = this.sortedYears()[0];
+      }
+    }
+    // Making it globally available
+    this.$root.sharedState.observationTimeSeriesListComponent = this;
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      if (vm.$root.sharedState.uuid == "") {
+        next("/Welcome");
+      } else {
+        next();
+      }
+    })
+  }
+}
+</script>
+
+<style scoped>
+h1,
+h2 {
+  font-weight: normal;
+}
+
+ul {
+  list-style-type: none;
+  padding: 0;
+}
+
+li {
+  margin: 0 0;
+}
+
+a {
+  color: black;
+  text-decoration: none;
+  border-radius: 0 !important;
+  border-width: 0px 0px 1px 0px !important;
+}
+
+.alert a {
+  text-decoration: underline !important;
+}
+
+.small-icon {
+  color: #3d8052;
+  margin-right: 5px;
+}
+
+.deleted {
+  text-decoration: line-through;
+}
+</style>
diff --git a/src/components/PlacesList.vue b/src/components/PlacesList.vue
index 6e7c3820bd95e9795556552131a50e9c140b8250..c2b51cb3b236c76a31d432bbcd2dc3ec40ade9a4 100644
--- a/src/components/PlacesList.vue
+++ b/src/components/PlacesList.vue
@@ -1,191 +1,193 @@
 <!--
-    
-  Copyright (c) 2022 NIBIO <http://www.nibio.no/>. 
-  
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
   This file is part of VIPSObservationApp.
   VIPSObservationApp is free software: you can redistribute it and/or modify
-  it under the terms of the NIBIO Open Source License as published by 
+  it under the terms of the NIBIO Open Source License as published by
   NIBIO, either version 1 of the License, or (at your option) any
   later version.
-  
+
   VIPSObservationApp is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   NIBIO Open Source License for more details.
-  
+
   You should have received a copy of the NIBIO Open Source License
   along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
-    
+
   Author: Bhabesh Bhabani Mukhopadhyay
   Author: Tor-Einar Skog <tor-einar.skog@nibio.no>
   Dated : 19-Aug-2021
-    
+
 -->
 <template>
-	<div>
-		<div class="addItem poiList">
-			<router-link to="/mapPOI">
-				<button type="button" class="btn btn-primary">+</button>
-			</router-link>
-		</div>
-		<div class="alert alert-info">
-			<button type="button" class="close" data-dismiss="alert" aria-label="Close">
-			    <span aria-hidden="true">&times;</span>
-			  </button>
-			{{ $t("placeslist.explanation") }}
-		</div>
-		<div class="form-group form-check">
-		    <input type="checkbox" class="form-check-input" v-model="showOnlyUsersPOIs" @change="handleFiltersChanged" id="showOnlyUsersPOIs">
-		    <label class="form-check-label" for="showOnlyUsersPOIs">Bare mine steder</label>
-		  </div>
-		<div>
-			<div class="row form-group" style="margin-left:0px;">
-				<div><input class="form-control" type="text" v-model.trim="textSearch"
-						:placeholder="$t('places.search.label')" @input="handleFiltersChanged"> </div>
-			</div>
-			<!-- TODO: Remove the sync status classes (v-bind:class). Do it after sync has been automatized -->
-			<router-link class="list-group-item list-group-item-action bg-light" ref='linkMapPoi'
-				:to="{name:'MapPOI', params: {pointOfInterestId:poi.pointOfInterestId}}"
-				v-bind:class="{'text-danger':poi.isNew, 'text-primary':poi.toUpload, 'text-secondary':poi.isDeleted}"
-				v-for="poi in listPOI" v-bind:key="poi.pointOfInterestId">
-				<div v-if="poi.isDeleted" class="row">
-					<div class="col-9">
-						<strike>{{poi.name}}</strike>
-					</div>
-					<div class="col-3"></div>
-				</div>
-				<div v-else class="row">
-					<div class="col-10">
-						<div :style="poi.isOwnPOI?'font-weight:bold;':false">{{poi.name}}</div>
-					</div>
-					<div class="col-2">
-						<router-link
-							:to="{name: 'Observation', params: {locationPointOfInterestId:poi.pointOfInterestId, paramGeoinfo: JSON.parse(poi.geoJSON)}}"
-							class="addobs-btn">
-							<font-awesome-icon style="font-size: x-large; color: #3d8052; "
-								icon="magnifying-glass-plus" /></i></router-link>
-					</div>
-				</div>
-			</router-link>
-		</div>
-		<common-util ref="CommonUtil" />
-	</div>
+  <div>
+    <div class="addItem poiList">
+      <router-link to="/mapPOI">
+        <button type="button" class="btn btn-primary">+</button>
+      </router-link>
+    </div>
+    <div class="alert alert-info alert-dismissible fade show mt-2">
+      <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
+      <span v-if="poiRequired">{{ $t("observationTimeSeries.placeslist.explanation") }}</span>
+      <span v-else>{{ $t("placeslist.explanation") }}</span>
+    </div>
+
+    <div class="row form-group form-switch">
+      <div class="col-12 form-check">
+        <input type="checkbox" class="form-check-input" v-model="showOnlyUsersPOIs"  id="showOnlyUsersPOIs" @change="handleFiltersChanged">
+        <label class="form-check-label" for="showOnlyUsersPOIs">{{ $t("places.label.onlyUsersPOIs") }}</label>
+      </div>
+    </div>
+
+    <div class="row form-group mt-3">
+      <div class="col-12">
+        <input class="form-control" type="text" v-model.trim="textSearch" :placeholder="$t('places.search.label')"
+               @input="handleFiltersChanged"></div>
+    </div>
+    <div class="row form-group mt-3">
+      <div class="col-12">
+        <ul v-for="poi in listPOI" v-bind:key="poi.pointOfInterestId" class="list-group list-group-flush">
+          <li class="list-group-item list-group-item-action bg-light">
+            <router-link class="list-group-item list-group-item-action bg-light" ref='linkMapPoi'
+                         :to="{name:'MapPOI', params: {pointOfInterestId:poi.pointOfInterestId}}"
+                         :class="{'text-danger':poi.isNew, 'text-primary':poi.toUpload, 'text-secondary':poi.isDeleted}">
+              <div class="row">
+                <div class="col-12 d-flex align-items-center">
+                  <span v-if="poi.isDeleted" class="text-decoration-line-through">{{ poi.name }}</span>
+                  <span v-else-if="poi.isOwnPOI" class="fw-bold">{{ poi.name }}</span>
+                  <span v-else>{{ poi.name }}</span>
+                </div>
+              </div>
+            </router-link>
+          </li>
+        </ul>
+      </div>
+    </div>
+    <common-util ref="CommonUtil"/>
+  </div>
 </template>
 
 <script>
-	import CommonUtil from '@/components/CommonUtil'
-
-	export default {
-		name: 'PlacesList',
-		components: {CommonUtil},
-		data() {
-			return {
-				CONST_URL_DOMAIN: '',
-				listPOI: [],
-				listPOIAll: [],
-				textSearch: null,
-				showOnlyUsersPOIs: true
-			}
-		},
-		methods: {
-			filterListPOI(){
-				var userId = this.$root.sharedState.userId;
-				var candidateList = [];//this.listPOIAll;
-				if(this.showOnlyUsersPOIs)
-				{
-					candidateList = this.listPOIAll.filter((poi) =>{
-						return userId == poi.userId;
-					})
-				}
-				else
-				{
-					candidateList = this.listPOIAll;
-				}
-				if(this.textSearch){
-					return candidateList.filter((poi) => {
-						let poiName = poi.name;
-						return poiName.toLowerCase().indexOf(this.textSearch.toLowerCase()) != -1;
-					});
-				}
-				return candidateList;
-			},
-			fetchFromServer() {
-				let strUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
-				let jsonHeader = {Authorization: strUUID};
-
-				fetch(this.CONST_URL_DOMAIN + CommonUtil.CONST_URL_USER_POI, {
-					method: "GET",
-					headers: jsonHeader,
-				}).then((response) => response.json())
-					.then((data) => {
-						localStorage.setItem(CommonUtil.CONST_STORAGE_POI_LIST, JSON.stringify(data));
-						//this.getObservationsFromStore();
-					})
-
-			},
-			handleFiltersChanged(){
-				this.listPOI = this.filterListPOI();
-			},
-			getPOIListFromStore() {
-				var userId = this.$root.sharedState.userId;
-				this.listPOIAll = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
-				this.listPOIAll.forEach(function (poi) {
-					if (poi.uploaded === false) {
-						if (poi.deleted) {
-							poi.isDeleted = true;
-						}
-						else {
-							if (poi.pointOfInterestId < 0) {
-								poi.isNew = true;
-							}
-							else {
-								poi.toUpload = true;
-							}
-						}
-
-					}
-					poi.isOwnPOI = userId == poi.userId;
-				});
-				
-				// Sorting own POIs first, then alphabetic
-				this.listPOIAll.sort((poi1, poi2)=>{
-					if(poi1.userId == userId &&  poi2.userId != userId)
-					{
-						return -1;
-					}
-					if(poi1.userId != userId &&  poi2.userId == userId)
-					{
-						return 1;
-					}
-					if (poi1.name.toLowerCase() < poi2.name.toLowerCase()) {return -1;}
-					if (poi1.name.toLowerCase() > poi2.name.toLowerCase()) {return 1;}
-					return 0;
-				});
-			}
-		},
-
-		mounted() {
-			CommonUtil.setHeaderTitle(this.$i18n.t("placeslist.heading"));
-			this.CONST_URL_DOMAIN = CommonUtil.CONST_URL_DOMAIN;
-			this.getPOIListFromStore();
-			this.listPOI = this.filterListPOI();
-			// Making it globally available, so that e.g. the Sync component can update the list
-			// calling e.g. this.$root.sharedState.placesListComponent.fooBar();
-			this.$root.sharedState.placesListComponent = this;
-
-		},
-		beforeRouteEnter(to,from,next){
-			next(vm=>{
-				if(vm.$root.sharedState.uuid == ""){ next("/Welcome"); }
-				else { next(); }
-			})
-		}
-	}
+import CommonUtil from '@/components/CommonUtil'
+
+export default {
+  name: 'PlacesList',
+  components: {CommonUtil},
+  data() {
+    return {
+      CONST_URL_DOMAIN: '',
+      listPOI: [],
+      listPOIAll: [],
+      textSearch: null,
+      showOnlyUsersPOIs: true,
+      poiRequired: false
+    }
+  },
+  methods: {
+    filterListPOI() {
+      var userId = this.$root.sharedState.userId;
+      var candidateList = [];//this.listPOIAll;
+      if (this.showOnlyUsersPOIs) {
+        candidateList = this.listPOIAll.filter((poi) => {
+          return userId == poi.userId;
+        })
+      } else {
+        candidateList = this.listPOIAll;
+      }
+      if (this.textSearch) {
+        return candidateList.filter((poi) => {
+          let poiName = poi.name;
+          return poiName.toLowerCase().indexOf(this.textSearch.toLowerCase()) != -1;
+        });
+      }
+      return candidateList;
+    },
+    fetchFromServer() {
+      let strUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
+      let jsonHeader = {Authorization: strUUID};
+
+      fetch(this.CONST_URL_DOMAIN + CommonUtil.CONST_URL_USER_POI, {
+        method: "GET",
+        headers: jsonHeader,
+      }).then((response) => response.json())
+        .then((data) => {
+          localStorage.setItem(CommonUtil.CONST_STORAGE_POI_LIST, JSON.stringify(data));
+          //this.getObservationsFromStore();
+        })
+
+    },
+    handleFiltersChanged() {
+      this.listPOI = this.filterListPOI();
+    },
+    getPOIListFromStore() {
+      const userId = this.$root.sharedState.userId;
+      this.listPOIAll = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
+      this.listPOIAll.forEach(function (poi) {
+        poi.isOwnPOI = userId == poi.userId;
+        poi.isNew = poi.pointOfInterestId < 0;
+        if (poi.uploaded === false) {
+          if (poi.deleted) {
+            poi.isDeleted = true;
+          } else if (poi.pointOfInterestId >= 0) {
+            poi.toUpload = true;
+          }
+        }
+      });
+
+      // Sorting own POIs first, then alphabetic
+      this.listPOIAll.sort((poi1, poi2) => {
+        if (poi1.userId == userId && poi2.userId != userId) {
+          return -1;
+        }
+        if (poi1.userId != userId && poi2.userId == userId) {
+          return 1;
+        }
+        if (poi1.name.toLowerCase() < poi2.name.toLowerCase()) {
+          return -1;
+        }
+        if (poi1.name.toLowerCase() > poi2.name.toLowerCase()) {
+          return 1;
+        }
+        return 0;
+      });
+      this.listPOI = this.filterListPOI();
+    }
+  },
+
+  mounted() {
+    CommonUtil.setHeaderTitle(this.$i18n.t("placeslist.heading"));
+    this.CONST_URL_DOMAIN = CommonUtil.CONST_URL_DOMAIN;
+    this.poiRequired = this.$route.query.poiRequired;
+
+    this.showOnlyUsersPOIs = true
+    this.getPOIListFromStore();
+    this.listPOI = this.filterListPOI();
+
+    // Making it globally available, so that e.g. the Sync component can update the list
+    // calling e.g. this.$root.sharedState.placesListComponent.fooBar();
+    this.$root.sharedState.placesListComponent = this;
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      if (vm.$root.sharedState.uuid == "") {
+        next("/Welcome");
+      } else {
+        next();
+      }
+    })
+  }
+}
 </script>
 <style scoped>
-	a {
-		color: black;
-		border-radius: 0 !important;
-		border-width: 0px 0px 1px 0px !important;
-	}
-</style>
\ No newline at end of file
+a {
+  color: black;
+  border-radius: 0 !important;
+  border-width: 0px 0px 1px 0px !important;
+}
+
+.icon {
+  color: #3d8052;
+}
+</style>
diff --git a/src/components/Quantification.vue b/src/components/Quantification.vue
index 35509e2a8eea0c0078ab4bacb8f041718f469e41..589137d42520ad659a30c8331e578306433b052d 100644
--- a/src/components/Quantification.vue
+++ b/src/components/Quantification.vue
@@ -1,29 +1,32 @@
 <!--
-    
-  Copyright (c) 2022 NIBIO <http://www.nibio.no/>. 
-  
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
   This file is part of VIPSObservationApp.
   VIPSObservationApp is free software: you can redistribute it and/or modify
-  it under the terms of the NIBIO Open Source License as published by 
+  it under the terms of the NIBIO Open Source License as published by
   NIBIO, either version 1 of the License, or (at your option) any
   later version.
-  
+
   VIPSObservationApp is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   NIBIO Open Source License for more details.
-  
+
   You should have received a copy of the NIBIO Open Source License
   along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
-    
+
   Author: Bhabesh Bhabani Mukhopadhyay
   Author: Tor-Einar Skog <tor-einar.skog@nibio.no>
   Dated : 19-Aug-2021
-    
+
 -->
 <template>
 	<div>
 		<div id="quantificationForm"/>
+    <div v-if="validationErrorCount > 0" class="alert alert-danger" role="alert">
+      Kvantifiseringsskjema inneholder {{validationErrorCount}} feil som må rettes
+    </div>
 	</div>
 </template>
 <script>
@@ -39,6 +42,7 @@
 				iseditable: true,
 				observationDataSchema: {},
 				observationData: null,
+        validationErrorCount: 0,
 				editor: null
 			}
 		},
@@ -52,13 +56,15 @@
 		methods:
 		{
 			change() {
-				this.observationData = this.editor.getValue();
-				this.$emit('updateQuantificationData', this.observationData);
+        this.observationData = this.editor.getValue();
+        this.$emit('updateQuantificationData', this.observationData);
+        this.validationErrorCount = this.editor.validate().length;
+        this.$emit('quantificationErrorCount',  this.validationErrorCount)
 			},
 			initQuantification() {
 				this.observation_Id = (this.observationId) ? this.observationId : this.$route.params.observationId;
 				this.organism_id = (this.organismId) ? this.organismId : this.$route.params.organismId;
-				
+
 				let pestList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_PEST_LIST));
 				let pest = pestList.find(({organismId}) => organismId === this.organism_id);
 				if(pest == null)
@@ -70,17 +76,22 @@
 				}
 				this.observationDataSchema = JSON.parse(pest.observationDataSchema);
 				if(this.observationData == null)
-				{ 
+				{
 					this.observationData = JSON.parse(pest.observationData);
 				}
 
 				// Only on first time setup
 				if(this.editor == null)
 				{
+          JSONEditor.defaults.languages.no = {
+            error_type: "Verdi angitt med feil datatype",
+          };
+          JSONEditor.defaults.language = 'no';
+
 					this.editor = new JSONEditor(document.getElementById('quantificationForm'),{
 						schema: this.observationDataSchema,
 						ajax: true, // If true, JSON Editor will load external URLs in $ref via ajax.
-						theme: "bootstrap4",
+						theme: "bootstrap5",
 						disable_edit_json: true, // If true, remove all Edit JSON buttons from objects.
 						disable_properties: true, // If true, remove all Edit Properties buttons from objects.
 						remove_button_labels: true, // Display only icons in buttons. This works only if iconlib is set.
@@ -113,4 +124,4 @@
 		},
 
 	}
-</script>
\ No newline at end of file
+</script>
diff --git a/src/components/RegisterUserForm.vue b/src/components/RegisterUserForm.vue
index 16119c14882b8f0be5040367ccfe21701afd32ed..c48bb7a358c2d676d0349aba9779c600dc0df4f9 100644
--- a/src/components/RegisterUserForm.vue
+++ b/src/components/RegisterUserForm.vue
@@ -1,7 +1,7 @@
 <!--
-    
-  Copyright (c) 2023 NIBIO <http://www.nibio.no/>. 
-  
+
+  Copyright (c) 2023 NIBIO <http://www.nibio.no/>.
+
   This file is part of VIPSObservationApp.
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU Affero General Public License as published by
@@ -15,168 +15,159 @@
 
   You should have received a copy of the GNU Affero General Public License
   along with this program.  If not, see <https://www.gnu.org/licenses/>.
-    
+
   Author: Tor-Einar Skog <tor-einar.skog@nibio.no>
   Created : 2023-04-18
-    
 -->
-
 <template>
-	<div >
+  <div>
     <form @submit="checkForm" v-if="step==1">
-        <h2>{{ $t("registeruser.button.label") }}</h2>
-        <p>{{ $t("registeruserform.description") }}</p>
-        <p v-if="errors.length">
-          <b>Please correct the following error(s):</b>
-          <ul>
-            <li v-for="error in errors">{{ error }}</li>
-          </ul>
-        </p>
-        <div class="form-group">
-          <label for="firstName">{{ $t("registeruserform.firstName") }}</label>
-          <input type="text" class="form-control" v-model.trim.lazy="firstName" />
-        </div>
-        <div class="form-group">
-          <label for="lastName">{{ $t("registeruserform.lastName") }}</label>
-          <input type="text" class="form-control" v-model.trim.lazy="lastName" />
-        </div>
-        <div class="form-group">
-          <label for="email">{{ $t("registeruserform.email") }}</label>
-          <input type="email" class="form-control" v-model.trim.lazy="email" aria-describedby="emailHelp"/>
-          <small id="emailHelp" class="form-text text-muted">{{ $t("registeruserform.email.help") }}</small>
-        </div>
-        <div class="form-group">
-          <label for="username">{{ $t("registeruserform.username") }}</label>
-          <input type="text" class="form-control" v-model.trim.lazy="username" aria-describedby="usernameHelp"/>
-          <small id="usernameHelp" class="form-text text-muted">{{ $t("registeruserform.username.help") }}</small>
-        </div>
-        <div class="form-group">
-          <label for="password">{{ $t("registeruserform.password") }}</label>
-          <input type="password" class="form-control" v-model.trim="password" aria-describedby="passwordHelp"/>
-          <small id="passwordHelp" class="form-text text-muted">{{ $t("registeruserform.password.help") }}</small>
-        </div>
-        <div class="form-group">
-          <label for="password2">{{ $t("registeruserform.password2") }}</label>
-          <input type="password" id="password2" class="form-control" v-model="password2" aria-describedby="password2Help"/>
-          <small id="password2Help" class="form-text text-muted">{{ $t("registeruserform.password2.help") }}</small>
-        </div>
-        <button type="submit" class="btn btn-primary">{{ $t("registeruserform.submit.label") }}</button>
-      </form>
-    
+      <h2>{{ $t("registeruser.button.label") }}</h2>
+      <p>{{ $t("registeruserform.description") }}</p>
+      <div class="alert alert-danger" v-if="errors.length">
+        <b>Please correct the following error(s):</b>
+        <ul>
+          <li v-for="error in errors">{{ error }}</li>
+        </ul>
+      </div>
+      <div class="form-floating mb-3">
+        <input type="text" class="form-control" v-model.trim.lazy="firstName"/>
+        <label for="firstName">{{ $t("registeruserform.firstName") }}</label>
+      </div>
+      <div class="form-floating mb-3">
+        <input type="text" class="form-control" v-model.trim.lazy="lastName"/>
+        <label for="lastName">{{ $t("registeruserform.lastName") }}</label>
+      </div>
+      <div class="form-floating mb-3">
+        <input type="email" class="form-control" v-model.trim.lazy="email" aria-describedby="emailHelp"/>
+        <label for="email">{{ $t("registeruserform.email") }}</label>
+        <small id="emailHelp" class="form-text text-muted">{{ $t("registeruserform.email.help") }}</small>
+      </div>
+      <div class="form-floating mb-3">
+        <input type="text" class="form-control" v-model.trim.lazy="username" aria-describedby="usernameHelp"/>
+        <label for="username">{{ $t("registeruserform.username") }}</label>
+        <small id="usernameHelp" class="form-text text-muted">{{ $t("registeruserform.username.help") }}</small>
+      </div>
+      <div class="form-floating mb-3">
+        <input type="password" class="form-control" v-model.trim="password" aria-describedby="passwordHelp"/>
+        <label for="password">{{ $t("registeruserform.password") }}</label>
+        <small id="passwordHelp" class="form-text text-muted">{{ $t("registeruserform.password.help") }}</small>
+      </div>
+      <div class="form-floating mb-3">
+        <input type="password" id="password2" class="form-control" v-model="password2"
+               aria-describedby="password2Help"/>
+        <label for="password2">{{ $t("registeruserform.password2") }}</label>
+        <small id="password2Help" class="form-text text-muted">{{ $t("registeruserform.password2.help") }}</small>
+      </div>
+      <button type="submit" class="btn btn-primary mb-3">{{ $t("registeruserform.submit.label") }}</button>
+    </form>
+
     <div v-if="step==2">
       <h2>{{ $t("registeruser.button.label") }}</h2>
       <p>{{ $t("registeruserform.step_2.heading") }}</p>
       <p>{{ $t("registeruserform.step_2.description") }}</p>
       <div class="form-group form-check">
         <input type="checkbox" class="form-check-input" v-model="emailIsConfirmed" id="emailIsConfirmed">
-        <label class="form-check-label" for="emailIsConfirmed">{{ $t("registeruserform.step_2.emailConfirmationDeclaration") }}</label>
+        <label class="form-check-label"
+               for="emailIsConfirmed">{{ $t("registeruserform.step_2.emailConfirmationDeclaration") }}</label>
       </div>
-      <button type="submit" :disabled="!emailIsConfirmed" class="btn btn-primary" @click="autoLogin();">{{ $t("login.button.label") }}</button>
+      <button type="submit" :disabled="!emailIsConfirmed" class="btn btn-primary" @click="autoLogin();">
+        {{ $t("login.button.label") }}
+      </button>
     </div>
   </div>
 </template>
 
 <script>
-	import CommonUtil from '@/components/CommonUtil';
+import CommonUtil from '@/components/CommonUtil';
 
-  export default {
-    name: 'RegisterUserForm',
-    data() {
-      return {
-        username: "",
-        password: "",
-        password2: "",
-        email: "",
-        firstName: "",
-        lastName: "",
-        preferredLocale: "nb",
-        phoneCountryCode: "47",
-        organizationId: 1,
-        errors: [],
-        step: 1,
-        emailIsConfirmed: false
-      };
+export default {
+  name: 'RegisterUserForm',
+  data() {
+    return {
+      username: "",
+      password: "",
+      password2: "",
+      email: "",
+      firstName: "",
+      lastName: "",
+      preferredLocale: "nb",
+      phoneCountryCode: "47",
+      organizationId: 1,
+      errors: [],
+      step: 1,
+      emailIsConfirmed: false
+    };
+  },
+  methods: {
+    checkForm: function (e) {
+      e.preventDefault();
+      this.errors = [];
+      if (this.firstName == "") {
+        this.errors.push("First name must be set");
+      }
+      if (this.lastName == "") {
+        this.errors.push("Last name must be set");
+      }
+      if (this.email == "") {
+        this.errors.push("Email must be set");
+      }
+      if (this.username == "") {
+        this.errors.push("Username must be set");
+      }
+      if (this.password == "") {
+        this.errors.push("Password must be set");
+      }
+      if (this.password != this.password2) {
+        this.errors.push("The passwords do not match")
+      }
+
+      // Form OK. Submit
+      if (this.errors.length == 0) {
+        this.submitForm();
+      }
     },
-    methods: {
-      checkForm: function(e) {
-        e.preventDefault();
-        this.errors=[];
-        if(this.firstName == "")
-        {
-          this.errors.push("First name must be set");
-        }
-        if(this.lastName == "")
-        {
-          this.errors.push("Last name must be set");
-        }
-        if(this.email == "")
-        {
-          this.errors.push("Email must be set");
-        }
-        if(this.username == "")
-        {
-          this.errors.push("Username must be set");
-        }
-        if(this.password == "")
-        {
-          this.errors.push("Password must be set");
-        }
-        if(this.password != this.password2)
+    submitForm: async function () {
+      const response = await fetch(
+        CommonUtil.CONST_URL_DOMAIN + CommonUtil.CONST_URL_REGISTER_NEW_USER,
         {
-          this.errors.push("The passwords do not match")
+          method: "POST",
+          headers: {
+            "Content-Type": "application/json"
+          },
+          body: JSON.stringify(
+            {
+              "firstName": this.firstName,
+              "lastName": this.lastName,
+              "email": this.email,
+              "username": this.username,
+              "password": this.password,
+              "organizationId": this.organizationId,
+              "preferredLocale": this.preferredLocale,
+              "phoneCountryCode": this.phoneCountryCode
+            }
+          )
         }
+      );
 
-        // Form OK. Submit
-        if(this.errors.length == 0)
-        {
-          this.submitForm();
-        }
-      },
-      submitForm: async function(){
-        const response = await fetch(
-          CommonUtil.CONST_URL_DOMAIN + CommonUtil.CONST_URL_REGISTER_NEW_USER,
-          {
-            method: "POST",
-            headers: {
-							"Content-Type": "application/json"
-            },
-            body: JSON.stringify(
-              {
-                "firstName": this.firstName,
-                "lastName": this.lastName,
-                "email": this.email,
-                "username": this.username,
-                "password": this.password,
-                "organizationId": this.organizationId,
-                "preferredLocale": this.preferredLocale,
-                "phoneCountryCode": this.phoneCountryCode
-              }
-            )
-          }
-        );
-        
-        const data = await response.json();
+      const data = await response.json();
 
-        if(response.status != 200)
-        {
-          if(data["errorMessages"] != null)
-          {
-            this.errors = data["errorMessages"];
-          }
-          else
-          {
-            alert("Something went wrong. Status code = " + response.status + ". Please contact your system administrator");
-          }
-          return false;
+      if (response.status != 200) {
+        if (data["errorMessages"] != null) {
+          this.errors = data["errorMessages"];
+        } else {
+          alert("Something went wrong. Status code = " + response.status + ". Please contact your system administrator");
         }
-
-        // Show message about confirming email
-        // Show button for auto login
-        this.step = 2;
-      },
-      autoLogin: function() {
-        this.$root.$emit("autoLogin", {"username":this.username, "password":this.password});
+        return false;
       }
+
+      // Show message about confirming email
+      // Show button for auto login
+      this.step = 2;
+    },
+    autoLogin: function () {
+      this.$root.$emit("autoLogin", {"username": this.username, "password": this.password});
     }
   }
-</script>
\ No newline at end of file
+}
+</script>
diff --git a/src/components/Sync.vue b/src/components/Sync.vue
index 505f53109d30b05f1f08cc4214777aa5fb25cb74..8b4be9a6e25da83745ad3b14d6e0707d4ddde66b 100644
--- a/src/components/Sync.vue
+++ b/src/components/Sync.vue
@@ -1,1018 +1,1180 @@
 <!--
-    
-  Copyright (c) 2022 NIBIO <http://www.nibio.no/>. 
-  
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
   This file is part of VIPSObservationApp.
   VIPSObservationApp is free software: you can redistribute it and/or modify
-  it under the terms of the NIBIO Open Source License as published by 
+  it under the terms of the NIBIO Open Source License as published by
   NIBIO, either version 1 of the License, or (at your option) any
   later version.
-  
+
   VIPSObservationApp is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   NIBIO Open Source License for more details.
-  
+
   You should have received a copy of the NIBIO Open Source License
   along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
-    
+
   Author: Bhabesh Bhabani Mukhopadhyay
   Author: Tor-Einar Skog <tor-einar.skog@nibio.no>
   Dated : 19-Aug-2021
-    
+
 -->
 <template>
-	<div>
-		<div v-if="loading">
-			<div class="spinner-border text-success" role="status">
-
-			</div> <span class="text-danger"> Data Loading...</span>
-			<!-- -- Sync :  <div v-html="isSyncNeeded"></div> -->
-		</div>
-		<div v-show="isMounted">
-			<common-util ref="CommonUtil" />
-		</div>
-	</div>
+  <div>
+    <div v-if="loading">
+      <div class="spinner-border text-success" role="status">
+
+      </div>
+      <span class="text-danger"> Data Loading...</span>
+      <!-- -- Sync :  <div v-html="isSyncNeeded"></div> -->
+    </div>
+    <div v-show="isMounted">
+      <common-util ref="CommonUtil"/>
+    </div>
+  </div>
 </template>
 
 <script>
-	import CommonUtil from "@/components/CommonUtil";
-
-	export default {
-		name: "Sync",
-		components: {CommonUtil},
-		props: {
-			isSyncNeeded: Boolean
-		},
-		data() {
-			return {
-				isMounted: false,
-				CONST_URL_DOMAIN: '',
-				booIsSyncOneWayReady: false,
-				booIsSyncTwoWayReady: false,
-				arrSyncOneWay: [
-					{"name": CommonUtil.CONST_STORAGE_CROP_CATEGORY, "complete": false},
-					{"name": CommonUtil.CONST_STORAGE_CROP_LIST, "complete": false},
-					{"name": CommonUtil.CONST_STORAGE_PEST_LIST, "complete": false},
-					{"name": CommonUtil.CONST_STORAGE_CROP_PEST_LIST, "complete": false},
-					{"name": CommonUtil.CONST_STORAGE_VISIBILITY_POLYGON, "complete": false},
-				],
-				arrSyncTwoWay: [
-					{"name": CommonUtil.CONST_STORAGE_OBSERVATION_LIST, "complete": false},
-					{"name": CommonUtil.CONST_STORAGE_POI_LIST, "complete": false},
-
-				],
-				appUser: {},
-				loading: false,
-				counterTwoWaySyncPOST: 0,
-				totalTwoWaySyncPOST: 0,
-				counterTwoWaySyncPOST: 0,
-			};
-		},
-		watch: {
-			booIsSyncOneWayReady:
-			{
-				immediate: true,
-				handler(val, oldVal) {
-					if (val) {
-
-						/* Starting of Sync */
-						CommonUtil.logInfo('----- SYNC ONE WAY STARTED -----');
-						this.syncOneWay();
-					}
-					if (typeof (booIsSyncOneWayReady) === undefined) {
-						this.loading = false;
-						/* refresh for next time */
-						this.refreshOneWaySyncItems();
-					}
+import CommonUtil from "@/components/CommonUtil";
+
+export default {
+  name: "Sync",
+  components: {CommonUtil},
+  props: {
+    isSyncNeeded: Boolean
+  },
+  data() {
+    return {
+      isMounted: false,
+      CONST_URL_DOMAIN: '',
+      booIsSyncOneWayReady: false,
+      booIsSyncTwoWayReady: false,
+      arrSyncOneWay: [
+        {"name": CommonUtil.CONST_STORAGE_CROP_CATEGORY, "complete": false},
+        {"name": CommonUtil.CONST_STORAGE_CROP_LIST, "complete": false},
+        {"name": CommonUtil.CONST_STORAGE_PEST_LIST, "complete": false},
+        {"name": CommonUtil.CONST_STORAGE_CROP_PEST_LIST, "complete": false},
+        {"name": CommonUtil.CONST_STORAGE_VISIBILITY_POLYGON, "complete": false},
+      ],
+      arrSyncTwoWay: [
+        {"name": CommonUtil.CONST_STORAGE_OBSERVATION_LIST, "complete": false},
+        {"name": CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST, "complete": false},
+        {"name": CommonUtil.CONST_STORAGE_POI_LIST, "complete": false},
+      ],
+      appUser: {},
+      loading: false,
+      totalTwoWaySyncPOST: 0,
+      counterTwoWaySyncPOST: 0,
+    };
+  },
+  watch: {
+    booIsSyncOneWayReady:
+        {
+          immediate: true,
+          handler(val, oldVal) {
+            if (val) {
+
+              /* Starting of Sync */
+              CommonUtil.logInfo('----- SYNC ONE WAY STARTED -----');
+              this.syncOneWay();
+            }
+            if (typeof (booIsSyncOneWayReady) === undefined) {
+              this.loading = false;
+              /* refresh for next time */
+              this.refreshOneWaySyncItems();
+            }
 					if (typeof (booIsSyncOneWayReady) == false) {
-						this.loading = false;
-					}
-				}
-			},
-			booIsSyncTwoWayReady:
-			{
-				immediate: true,
-				handler(val, oldVal) {
-					if (val) {
-						this.loading = true;
-						CommonUtil.logInfo('----- SYNC TWO WAY STARTED -----');
-						this.syncTwoWayAtLogin();
-						this.loading = false;
-					}
-				}
-			}
-		},
-		methods: {
-			/** One way Sync. Fetching the data from server and stored in local storage */
-			syncOneWay() {
-				if (this.booIsSyncOneWayReady) {
-					this.loading = true;
-
-					let appUser = this.appUser;
-					let funStorageSet = this.oneWaySyncStorageSet;
+              this.loading = false;
+            }
+          }
+        },
+    booIsSyncTwoWayReady:
+        {
+          immediate: true,
+          handler(val, oldVal) {
+            if (val) {
+              this.loading = true;
+              CommonUtil.logInfo('----- SYNC TWO WAY STARTED -----');
+              this.syncTwoWayAtLogin();
+              this.loading = false;
+            }
+          }
+        }
+  },
+  methods: {
+    /** One way Sync. Fetching the data from server and stored in local storage */
+    syncOneWay() {
+      if (this.booIsSyncOneWayReady) {
+        this.loading = true;
+
+        let appUser = this.appUser;
+        let funStorageSet = this.oneWaySyncStorageSet;
 
 					if (typeof (appUser) == undefined || appUser == null || appUser === '') {
-						// TODO if appUser is not available
-					}
-					else {
-						let strUrl = '';
-						let This = this;
-						$.each(this.arrSyncOneWay, function (index, value) {
-							switch (value.name) {
-								case CommonUtil.CONST_STORAGE_CROP_CATEGORY:
-									strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_CROP_CATEGORY + appUser.organization_id;
-									break;
-								case CommonUtil.CONST_STORAGE_CROP_LIST:
-									strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_CROP_LIST;
-									break;
-								case CommonUtil.CONST_STORAGE_PEST_LIST:
-									strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_PEST_LIST + '?organizationId=' + appUser.organization_id;
-									break;
-								case CommonUtil.CONST_STORAGE_CROP_PEST_LIST:
-									strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_CROP_PEST_LIST;
-									break;
-								case CommonUtil.CONST_STORAGE_VISIBILITY_POLYGON:
-									strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_POLYGON_SERVICES + appUser.organization_id;
-									break;
-								default:
-							}
-
-							funStorageSet(value, strUrl);
-						});
-					}
-
-					this.loading = false;
-				}
-			},
-
-			syncTwoWayAtLogin() {
-
-				let appUser = this.appUser;
-				let funStorageSet = this.oneWaySyncStorageSet;
+          // TODO if appUser is not available
+        } else {
+          let strUrl = '';
+          let This = this;
+          $.each(this.arrSyncOneWay, function (index, value) {
+            switch (value.name) {
+              case CommonUtil.CONST_STORAGE_CROP_CATEGORY:
+                strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_CROP_CATEGORY + appUser.organization_id;
+                break;
+              case CommonUtil.CONST_STORAGE_CROP_LIST:
+                strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_CROP_LIST;
+                break;
+              case CommonUtil.CONST_STORAGE_PEST_LIST:
+                strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_PEST_LIST + '?organizationId=' + appUser.organization_id;
+                break;
+              case CommonUtil.CONST_STORAGE_CROP_PEST_LIST:
+                strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_CROP_PEST_LIST;
+                break;
+              case CommonUtil.CONST_STORAGE_VISIBILITY_POLYGON:
+                strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_POLYGON_SERVICES + appUser.organization_id;
+                break;
+              default:
+            }
+
+            funStorageSet(value, strUrl);
+          });
+        }
+
+        this.loading = false;
+      }
+    },
+
+    syncTwoWayAtLogin() {
+
+      let appUser = this.appUser;
+      let funStorageSet = this.oneWaySyncStorageSet;
 
 				if (typeof (appUser) == undefined || appUser == null || appUser === '') {
-					// TODO if appUser is not available
-				}
-				else {
-
-					this.syncTwoWay();
-				}
-			},
-			syncTwoWay() {
-				// Run this only when we are online
-				if (navigator.onLine) {
-					let strUrl = '';
-					let This = this;
-					$.each(this.arrSyncTwoWay, function (index, value) {
-						switch (value.name) {
-							case CommonUtil.CONST_STORAGE_OBSERVATION_LIST:
-								strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_USER_OBSERVATION_LIST;
-								break;
-							case CommonUtil.CONST_STORAGE_POI_LIST:
-								strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_USER_POI;
-								break;
-
-							default:
-						}
-
-						This.syncTwoWayInitiate(value, strUrl);
-					});
-				}
-			},
-
-			/**  Writing server data to localstorage using sync */
-			oneWaySyncStorageSet(value, strUrl) {
-
-				fetch(strUrl)
-					.then((response) => response.json())
-					.then((data) => {
-						localStorage.setItem(value.name, JSON.stringify(data));
-						value.complete = true;
-						this.setOneWaySyncStatus(value);
-					});
-
-			},
-
-			/** Set status whether the sync of items completed or not */
-			setOneWaySyncStatus(itemValue) {
-				let booFlag;
-				/* Set the status - array value status set by reference */
-				$.each(this.arrSyncOneWay, function (index, value) {
-					if (value.name === itemValue.name) {
-						value.complete = itemValue.complete;
-					}
-				});
-
-				/* Set the global flag  - to mark the end of sync*/
-				$.each(this.arrSyncOneWay, function (index, value) {
-					if (value.complete === false) {
-						booFlag = false;
-					}
-				});
-				this.booIsSyncOneWayReady = booFlag;
-
-			},
-
-			/** Reset One way sync items */
-			refreshOneWaySyncItems() {
-				$.each(this.arrSyncOneWay, function (index, value) {
-					value.complete = false;
-				})
-				this.booIsSyncOneWayReady = false;
-			},
-
-			/** Deciding factor whether oneway should start or not */
-			isSyncOnewayNeeded(loggedUser) {
-				if (!this.booIsSyncOneWayReady) {
-					this.syncOneWayEmptyProduct(loggedUser);
-					this.syncOneWayDifferentUser(loggedUser);
-					this.syncOneWayDifferentTimeStamp(loggedUser);
-				}
-
-			},
-
-			/** Oneway Sync on empty products in store -- (e.g. first time) */
-			syncOneWayEmptyProduct(appUser) {
-
-				let booLocalIsSyncOneWayReady = false;
-				if (!this.booIsSyncOneWayReady) {
-					$.each(this.arrSyncOneWay, function (index, value) {
-						let strItem = localStorage.getItem(value.name);
-						/** Check empty local storage  */
+        // TODO if appUser is not available
+      } else {
+
+        this.syncTwoWay();
+      }
+    },
+    syncTwoWay() {
+      // Run this only when we are online
+      if (navigator.onLine) {
+        let strUrl = '';
+        let This = this;
+        $.each(this.arrSyncTwoWay, function (index, value) {
+          switch (value.name) {
+            case CommonUtil.CONST_STORAGE_OBSERVATION_LIST:
+              strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_USER_OBSERVATION_LIST;
+              break;
+            case CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST:
+              strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_USER_OBSERVATION_TIME_SERIES_LIST;
+              break;
+            case CommonUtil.CONST_STORAGE_POI_LIST:
+              strUrl = This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_USER_POI;
+              break;
+
+            default:
+          }
+          This.syncTwoWayInitiate(value, strUrl);
+        });
+      } else {
+        CommonUtil.logError("Offline, sync is not run");
+      }
+    },
+
+    /**  Writing server data to localstorage using sync */
+    oneWaySyncStorageSet(value, strUrl) {
+
+      fetch(strUrl)
+          .then((response) => response.json())
+          .then((data) => {
+            localStorage.setItem(value.name, JSON.stringify(data));
+            value.complete = true;
+            this.setOneWaySyncStatus(value);
+          });
+
+    },
+
+    /** Set status whether the sync of items completed or not */
+    setOneWaySyncStatus(itemValue) {
+      let booFlag;
+      /* Set the status - array value status set by reference */
+      $.each(this.arrSyncOneWay, function (index, value) {
+        if (value.name === itemValue.name) {
+          value.complete = itemValue.complete;
+        }
+      });
+
+      /* Set the global flag  - to mark the end of sync*/
+      $.each(this.arrSyncOneWay, function (index, value) {
+        if (value.complete === false) {
+          booFlag = false;
+        }
+      });
+      this.booIsSyncOneWayReady = booFlag;
+
+    },
+
+    /** Reset One way sync items */
+    refreshOneWaySyncItems() {
+      $.each(this.arrSyncOneWay, function (index, value) {
+        value.complete = false;
+      })
+      this.booIsSyncOneWayReady = false;
+    },
+
+    /** Deciding factor whether oneway should start or not */
+    isSyncOnewayNeeded(loggedUser) {
+      if (!this.booIsSyncOneWayReady) {
+        this.syncOneWayEmptyProduct(loggedUser);
+        this.syncOneWayDifferentUser(loggedUser);
+        this.syncOneWayDifferentTimeStamp(loggedUser);
+      }
+
+    },
+
+    /** Oneway Sync on empty products in store -- (e.g. first time) */
+    syncOneWayEmptyProduct(appUser) {
+
+      let booLocalIsSyncOneWayReady = false;
+      if (!this.booIsSyncOneWayReady) {
+        $.each(this.arrSyncOneWay, function (index, value) {
+          let strItem = localStorage.getItem(value.name);
+          /** Check empty local storage  */
 						if (typeof (strItem) == undefined || strItem == null || strItem === '') {
-							booLocalIsSyncOneWayReady = true;
+            booLocalIsSyncOneWayReady = true;
 
-							return false;
-						}
-					});
-					this.booIsSyncOneWayReady = booLocalIsSyncOneWayReady;
-					this.appUser = appUser;
-				}
-			},
+            return false;
+          }
+        });
+        this.booIsSyncOneWayReady = booLocalIsSyncOneWayReady;
+        this.appUser = appUser;
+      }
+    },
 
-			/** Oneway Sync For Different user login */
-			syncOneWayDifferentUser(loggedUser) {
+    /** Oneway Sync For Different user login */
+    syncOneWayDifferentUser(loggedUser) {
 
-				if (!this.booIsSyncOneWayReady) {
-					let userStored = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_USER_DETAIL));
+      if (!this.booIsSyncOneWayReady) {
+        let userStored = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_USER_DETAIL));
 					if (userStored.userId != loggedUser.userId) {
-						this.booIsSyncOneWayReady = true;
-						this.appUser = loggedUser;
-					}
-				}
-
-			},
-
-			/** Oneway sync for different timestamp (e.g. changes in server) */
-			syncOneWayDifferentTimeStamp(appUser) {
-				if (!this.booIsSyncOneWayReady) {
-					let strStoreTimeStamp = localStorage.getItem(CommonUtil.CONST_STORE_TIMESTAMP);
-
-					let jsonHeader = {Authorization: appUser.userUuid};
-
-					fetch(
-						this.CONST_URL_DOMAIN + CommonUtil.CONST_URL_LAST_TIMESTAMP,
-						{
-							method: "GET",
-							headers: jsonHeader,
-						}
-					)
-						.then((response) => response.json())
-						.then((data) => {
+          this.booIsSyncOneWayReady = true;
+          this.appUser = loggedUser;
+        }
+      }
+
+    },
+
+    /** Oneway sync for different timestamp (e.g. changes in server) */
+    syncOneWayDifferentTimeStamp(appUser) {
+      if (!this.booIsSyncOneWayReady) {
+        let strStoreTimeStamp = localStorage.getItem(CommonUtil.CONST_STORE_TIMESTAMP);
+
+        let jsonHeader = {Authorization: appUser.userUuid};
+
+        fetch(
+            this.CONST_URL_DOMAIN + CommonUtil.CONST_URL_LAST_TIMESTAMP,
+            {
+              method: "GET",
+              headers: jsonHeader,
+            }
+        )
+            .then((response) => response.json())
+            .then((data) => {
 
 							if (typeof (strStoreTimeStamp) == undefined || strStoreTimeStamp == null || strStoreTimeStamp === '') {
-								localStorage.setItem(CommonUtil.CONST_STORE_TIMESTAMP, JSON.stringify(data));
-								this.booIsSyncOneWayReady = true;
-								this.appUser = appUser;
-							}
-							else {
-								let jsonServerTimeStamp = data;
-								let jsonStoredTimeStamp = JSON.parse(strStoreTimeStamp);
-								let jsTimeStamp = new Date(jsonServerTimeStamp.lastUpdated);
-								let dtStoreTimeStamp = new Date(jsonStoredTimeStamp.lastUpdated);
+                localStorage.setItem(CommonUtil.CONST_STORE_TIMESTAMP, JSON.stringify(data));
+                this.booIsSyncOneWayReady = true;
+                this.appUser = appUser;
+              } else {
+                let jsonServerTimeStamp = data;
+                let jsonStoredTimeStamp = JSON.parse(strStoreTimeStamp);
+                let jsTimeStamp = new Date(jsonServerTimeStamp.lastUpdated);
+                let dtStoreTimeStamp = new Date(jsonStoredTimeStamp.lastUpdated);
 
 								if (jsTimeStamp.getTime() != dtStoreTimeStamp.getTime()) {
-									this.booIsSyncOneWayReady = true;
-									this.appUser = appUser;
+                  this.booIsSyncOneWayReady = true;
+                  this.appUser = appUser;
 
-									localStorage.setItem(CommonUtil.CONST_STORE_TIMESTAMP, JSON.stringify(data));
+                  localStorage.setItem(CommonUtil.CONST_STORE_TIMESTAMP, JSON.stringify(data));
 
 
-								}
+                }
 
-							}
+              }
 
-						});
+            });
 
-				}
-			},
+      }
+    },
 
-			/** Decide which two way sync  will start */
-			syncTwoWayInitiate(value, strUrl) {
+    /** Decide which two way sync  will start */
+    syncTwoWayInitiate(value, strUrl) {
 
-				switch (value.name) {
-					case CommonUtil.CONST_STORAGE_OBSERVATION_LIST:
-						this.syncTwoWayObservation(value, strUrl);
-						break;
-					case CommonUtil.CONST_STORAGE_POI_LIST:
-						this.syncTwoWayPOI(value, strUrl);
-						break;
+      switch (value.name) {
+        case CommonUtil.CONST_STORAGE_OBSERVATION_LIST:
+          this.syncTwoWayObservation(value, strUrl);
+          break;
+        case CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST:
+          this.syncTwoWayObservationTimeSeries(value, strUrl);
+          break;
+        case CommonUtil.CONST_STORAGE_POI_LIST:
+          this.syncTwoWayPOI(value, strUrl);
+          break;
 
-					default:
-				}
+        default:
+      }
 
-			},
+    },
 
-			/** Two way Sync  POI */
-			syncTwoWayPOI(value, strUrl) {
-				this.syncPOISendPrepare(value);
-			},
+    /** Two way Sync  POI */
+    syncTwoWayPOI(value, strUrl) {
+      this.syncPOISendPrepare(value);
+    },
 
-			/** Findout which data at POI need to be synced */
-			syncPOISendPrepare(value) {
-				let This = this;
-				let lstPOI = JSON.parse(localStorage.getItem(value.name));
+    /** Findout which data at POI need to be synced */
+    syncPOISendPrepare(value) {
+      let This = this;
+      let lstPOI = JSON.parse(localStorage.getItem(value.name));
 
-				if (lstPOI) {
-					let lstPOIUpload = lstPOI.filter(poi => poi.uploaded === false);
-					this.totalTwoWaySyncPOST = lstPOIUpload.length;
+      if (lstPOI) {
+        let lstPOIUpload = lstPOI.filter(poi => poi.uploaded === false);
+        this.totalTwoWaySyncPOST = lstPOIUpload.length;
 					if (lstPOIUpload && lstPOIUpload.length != 0) {
-						lstPOIUpload.forEach(function (poi) {
-							This.syncPOIPOST(poi, This.totalTwoWaySyncPOST);
-						})
-					}
-					else {
-						/** Create the list using GET */
-						let totalTwoWaySyncPOST = 0;
-						let updatedPOI = {};
-						This.getPOIFromServerTwowaySync(totalTwoWaySyncPOST, updatedPOI);
-					}
-				}
-				else {
-					/** Create the list using GET */
-					this.getPOIFromServerTwowaySync(0, undefined);
-				}
-			},
-
-			/** Posting required POI data for sync */
-			syncPOIPOST(poi, totalTwoWaySyncPOST) {
-				let This = this;
-				let userUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
-				let jsonBody = null;
-
-				if (poi.deleted) {
-					/** prepare POI object for server Delete Operation */
-					let delPOI = {};
-					delPOI.pointOfInterestId = poi.pointOfInterestId;
-					delPOI.deleted = poi.deleted;
-					jsonBody = JSON.stringify(delPOI);
-
-					this.removeLocalPOI(poi.pointOfInterestId);
-				}
-				else {
-					jsonBody = JSON.stringify(poi);
-				}
-
-				fetch(
-					This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_SYNC_UPDATE_POI,
-					{
-						method: "POST",
-						headers: {
-							"Content-Type": "application/json",
-							'Authorization': userUUID
-						},
-						body: jsonBody
-					})
-					.then(function (response) {
-						if (response.status === 200) {
-
-						}
-						else {
-							/** Even if the response is not success, still need to increase the counter, 
-							 * to decide for next action  after all PUSH */
-							This.counterTwoWaySyncPOST = This.counterTwoWaySyncPOST + 1;
-							if (response.status === 500) {
-								return false;
-							}
-						}
-						return response.text()
-					})
-					.then((data) => {
-						if (data) {
-							let updatedPOI = JSON.parse(data);
-							if (updatedPOI.deleted) {
-								This.removeLocalPOI(poupdatedPOI.pointOfInterestId);
-							}
-							else {
-								if (poi.pointOfInterestId < 0) {
-									let indexPosition = null;
-									let lstPOI = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
-									$.each(lstPOI, function (index, jsonPOI) {
+          lstPOIUpload.forEach(function (poi) {
+            This.syncPOIPOST(poi, This.totalTwoWaySyncPOST);
+          })
+        } else {
+          /** Create the list using GET */
+          let totalTwoWaySyncPOST = 0;
+          let updatedPOI = {};
+          This.getPOIFromServerTwowaySync(totalTwoWaySyncPOST, updatedPOI);
+        }
+      } else {
+        /** Create the list using GET */
+        this.getPOIFromServerTwowaySync(0, undefined);
+      }
+    },
+
+    /** Posting required POI data for sync */
+    syncPOIPOST(poi, totalTwoWaySyncPOST) {
+      let This = this;
+      let userUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
+      let jsonBody = null;
+
+      if (poi.deleted) {
+        /** prepare POI object for server Delete Operation */
+        let delPOI = {};
+        delPOI.pointOfInterestId = poi.pointOfInterestId;
+        delPOI.deleted = poi.deleted;
+        jsonBody = JSON.stringify(delPOI);
+
+        this.removeLocalPOI(poi.pointOfInterestId);
+      } else {
+        jsonBody = JSON.stringify(poi);
+      }
+
+      fetch(
+          This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_SYNC_UPDATE_POI,
+          {
+            method: "POST",
+            headers: {
+              "Content-Type": "application/json",
+              'Authorization': userUUID
+            },
+            body: jsonBody
+          })
+          .then(function (response) {
+            if (response.status === 200) {
+            } else {
+              /** Even if the response is not success, still need to increase the counter,
+               * to decide for next action  after all PUSH */
+              This.counterTwoWaySyncPOST = This.counterTwoWaySyncPOST + 1;
+              if (response.status === 500) {
+                return false;
+              }
+            }
+            return response.text()
+          })
+          .then((data) => {
+            if (data) {
+              let updatedPOI = JSON.parse(data);
+              if (updatedPOI.deleted) {
+                This.removeLocalPOI(updatedPOI.pointOfInterestId);
+              } else {
+                if (poi.pointOfInterestId < 0) {
+                  let indexPosition = null;
+                  let lstPOI = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
+                  $.each(lstPOI, function (index, jsonPOI) {
 										if (poi.pointOfInterestId == jsonPOI.pointOfInterestId) {
-											indexPosition = index;
-											return false;
-										}
-									})
-
-									if (indexPosition) {
-										/** Remove/delete the POI with nagative number (localy created ) */
-										lstPOI.splice(indexPosition, 1);
-										localStorage.setItem(CommonUtil.CONST_STORAGE_POI_LIST, JSON.stringify(lstPOI));
-										this.getPOIFromServerTwowaySync(1, updatedPOI);
-									}
-								}
-								if (poi.pointOfInterestId === updatedPOI.pointOfInterestId) {
-
-									this.updatePOIPOST(updatedPOI, totalTwoWaySyncPOST);
-								}
-							}
-
-						}
-					})
-			},
-
-			/** Update POI after response from server */
-			updatePOIPOST(updatedPOI, totalTwoWaySyncPOST) {
-				let lstPOI = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
-				let counter = undefined;
-				$.each(lstPOI, function (index, jsonPOI) {
-					if (jsonPOI.pointOfInterestId === updatedPOI.pointOfInterestId) {
-						counter = index;
-						return false;
-					}
-				});
-
-				if (counter) {
-					lstPOI[counter] = updatedPOI;
-					localStorage.setItem(CommonUtil.CONST_STORAGE_POI_LIST, JSON.stringify(lstPOI));
-
-					this.counterTwoWaySyncPOST = this.counterTwoWaySyncPOST + 1;
-					CommonUtil.logInfo('total number of upload : ' + totalTwoWaySyncPOST + ' ---- counter value : ' + this.counterTwoWaySyncPOST);
-
-					if (this.counterTwoWaySyncPOST === totalTwoWaySyncPOST) {
-						this.counterTwoWaySyncPOST = 0;
-						this.getPOIFromServerTwowaySync(totalTwoWaySyncPOST, updatedPOI);
-					}
-
-
-				}
-
-			},
-
-			/** GET POIs */
-			getPOIFromServerTwowaySync(totalTwoWaySyncPOST, updatedPOI) {
-				let This = this;
-				let strUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
-				let jsonHeader = {Authorization: strUUID};
-				fetch(This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_USER_POI, {
-					method: "GET",
-					headers: jsonHeader,
-				}).then((response) => response.json())
-					.then((data) => {
-						let serverPOIs = data;
-						if (localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST)) {
-							let lstLocalPOI = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
-							serverPOIs.forEach(function (serverPOI) {
-								let arrIndex = undefined;
-								let booNoRecordFound = false;
-								let booRecordFound = false;
-								$.each(lstLocalPOI, function (index, localPOI) {
-									if (serverPOI.pointOfInterestId === localPOI.pointOfInterestId) {
-										booRecordFound = true;
-										if (updatedPOI && (totalTwoWaySyncPOST === 1 && updatedPOI.pointOfInterestId === serverPOI.pointOfInterestId)) {
-										}
-										else {
-											if (serverPOI.lastEditedTime) {
-												let srvDate = new Date(serverPOI.lastEditedTime);
-												let localDate = new Date(localPOI.lastEditedTime);
-
-												if (srvDate >= localDate) {
-													arrIndex = index;
-													return false;
-												}
-
-											}
-											else {
-												arrIndex = index;
-												return false;
-											}
-										}
-
-									}
-								});
+                      indexPosition = index;
+                      return false;
+                    }
+                  })
+
+                  if (indexPosition) {
+                    /** Remove/delete the POI with nagative number (localy created ) */
+                    lstPOI.splice(indexPosition, 1);
+                    localStorage.setItem(CommonUtil.CONST_STORAGE_POI_LIST, JSON.stringify(lstPOI));
+                    this.getPOIFromServerTwowaySync(1, updatedPOI);
+                  }
+                }
+                if (poi.pointOfInterestId === updatedPOI.pointOfInterestId) {
+
+                  this.updatePOIPOST(updatedPOI, totalTwoWaySyncPOST);
+                }
+              }
+
+            }
+          })
+    },
+
+    /** Update POI after response from server */
+    updatePOIPOST(updatedPOI, totalTwoWaySyncPOST) {
+      let lstPOI = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
+      let counter = undefined;
+      $.each(lstPOI, function (index, jsonPOI) {
+        if (jsonPOI.pointOfInterestId === updatedPOI.pointOfInterestId) {
+          counter = index;
+          return false;
+        }
+      });
+
+      if (counter) {
+        lstPOI[counter] = updatedPOI;
+        localStorage.setItem(CommonUtil.CONST_STORAGE_POI_LIST, JSON.stringify(lstPOI));
+
+        this.counterTwoWaySyncPOST = this.counterTwoWaySyncPOST + 1;
+        CommonUtil.logInfo('total number of upload : ' + totalTwoWaySyncPOST + ' ---- counter value : ' + this.counterTwoWaySyncPOST);
+
+        if (this.counterTwoWaySyncPOST === totalTwoWaySyncPOST) {
+          this.counterTwoWaySyncPOST = 0;
+          this.getPOIFromServerTwowaySync(totalTwoWaySyncPOST, updatedPOI);
+        }
+
+
+      }
+
+    },
+
+    /** GET POIs */
+    getPOIFromServerTwowaySync(totalTwoWaySyncPOST, updatedPOI) {
+      let This = this;
+      let strUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
+      let jsonHeader = {Authorization: strUUID};
+      fetch(This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_USER_POI, {
+        method: "GET",
+        headers: jsonHeader,
+      }).then((response) => response.json())
+          .then((data) => {
+            let serverPOIs = data;
+            if (localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST)) {
+              let lstLocalPOI = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
+              serverPOIs.forEach(function (serverPOI) {
+                let arrIndex = undefined;
+                let booNoRecordFound = false;
+                let booRecordFound = false;
+                $.each(lstLocalPOI, function (index, localPOI) {
+                  if (serverPOI.pointOfInterestId === localPOI.pointOfInterestId) {
+                    booRecordFound = true;
+                    if (updatedPOI && (totalTwoWaySyncPOST === 1 && updatedPOI.pointOfInterestId === serverPOI.pointOfInterestId)) {
+                    } else {
+                      if (serverPOI.lastEditedTime) {
+                        let srvDate = new Date(serverPOI.lastEditedTime);
+                        let localDate = new Date(localPOI.lastEditedTime);
+
+                        if (srvDate >= localDate) {
+                          arrIndex = index;
+                          return false;
+                        }
+
+                      } else {
+                        arrIndex = index;
+                        return false;
+                      }
+                    }
+
+                  }
+                });
 
 								if (booRecordFound) {}
 								else {
-									booNoRecordFound = true;
-								}
-								if (arrIndex) {
+                  booNoRecordFound = true;
+                }
+                if (arrIndex) {
 
-									lstLocalPOI[arrIndex] = serverPOI;
-								}
-								if (booNoRecordFound) {
-									lstLocalPOI.push(serverPOI);
-									return false;
-								}
+                  lstLocalPOI[arrIndex] = serverPOI;
+                }
+                if (booNoRecordFound) {
+                  lstLocalPOI.push(serverPOI);
+                  return false;
+                }
 
-							});
+              });
 
-							localStorage.setItem(CommonUtil.CONST_STORAGE_POI_LIST, JSON.stringify(lstLocalPOI));
+              localStorage.setItem(CommonUtil.CONST_STORAGE_POI_LIST, JSON.stringify(lstLocalPOI));
 
-						}
-						else {
+            } else {
 
-							localStorage.setItem(CommonUtil.CONST_STORAGE_POI_LIST, JSON.stringify(serverPOIs));
-						}
+              localStorage.setItem(CommonUtil.CONST_STORAGE_POI_LIST, JSON.stringify(serverPOIs));
+            }
 
-						// Update the POI list after sync
+            // Update the POI list after sync
 						if (this.$root.sharedState.placesListComponent != undefined) {
-							this.$root.sharedState.placesListComponent.getPOIListFromStore();
-						}
-					})
-
-			},
-			/** Remove local POI */
-			removeLocalPOI(id) {
-				let lstPOI = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
-				let indexPosition = null;
-				$.each(lstPOI, function (index, poi) {
-					if (poi.pointOfInterestId === id) {
-						indexPosition = index;
-						return false;
-					}
-				});
-
-				if (indexPosition) {
-
-					lstPOI.splice(indexPosition, 1);
-					localStorage.setItem(CommonUtil.CONST_STORAGE_POI_LIST, JSON.stringify(lstPOI));
-				}
-			},
-
-			/** Two way Sync - Observation */
-			syncTwoWayObservation(value, strUrl) {
-				this.syncObservationSendPrepare(value);
-			},
-
-			/** Sync - Observation - embed with image data for POST */
-			syncObservationSendPrepare(value) {
-				let This = this;
-				let lstObservations = JSON.parse(localStorage.getItem(value.name));
-				if (lstObservations) {
-
-					let lstObservationUpload = lstObservations.filter(observation => observation.uploaded === false);
-					this.totalTwoWaySyncPOST = lstObservationUpload.length;
+              this.$root.sharedState.placesListComponent.getPOIListFromStore();
+            }
+          })
+
+    },
+    /** Remove local POI */
+    removeLocalPOI(id) {
+      let lstPOI = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_POI_LIST));
+      let indexPosition = null;
+      $.each(lstPOI, function (index, poi) {
+        if (poi.pointOfInterestId === id) {
+          indexPosition = index;
+          return false;
+        }
+      });
+
+      if (indexPosition) {
+
+        lstPOI.splice(indexPosition, 1);
+        localStorage.setItem(CommonUtil.CONST_STORAGE_POI_LIST, JSON.stringify(lstPOI));
+      }
+    },
+
+    /** Two way Sync - Observation */
+    syncTwoWayObservation(value, strUrl) {
+      this.syncObservationSendPrepare(value);
+    },
+
+    /** Two way Sync - Observation time series */
+    syncTwoWayObservationTimeSeries(value, strUrl) {
+      this.syncObservationTimeSeriesSendPrepare(value);
+    },
+
+    /** Sync - Observation - embed with image data for POST */
+    syncObservationSendPrepare(value) {
+      let This = this;
+      let lstObservations = JSON.parse(localStorage.getItem(value.name));
+      if (lstObservations) {
+
+        let lstObservationUpload = lstObservations.filter(observation => observation.uploaded === false);
+        this.totalTwoWaySyncPOST = lstObservationUpload.length;
 
 					if (lstObservationUpload && lstObservationUpload.length != 0) {
-						lstObservationUpload.forEach(function (observation) {
-							//CommonUtil.logInfo("syncObservationSendPrepare:observation.geoinfo= " + observation.geoinfo);
-
-							let observationForStore = {};
-							observationForStore.observationId = observation.observationId;
-							observationForStore.cropOrganismId = observation.cropOrganismId;
-							observationForStore.organismId = observation.organismId
-							observationForStore.timeOfObservation = observation.timeOfObservation;
-							observationForStore.isPositive = observation.isPositive;
-							observationForStore.statusChangedTime = observation.statusChangedTime;
-							observationForStore.statusTypeId = observation.statusTypeId;
-							observationForStore.isQuantified = observation.isQuantified;
-							observationForStore.userId = observation.userId;
-							observationForStore.geoinfo = observation.geoinfo;
-							observationForStore.locationPointOfInterestId = observation.locationPointOfInterestId;
-							observationForStore.broadcastMessage = observation.broadcastMessage;
-							observationForStore.statusRemarks = observation.statusRemarks;
-							observationForStore.observationHeading = observation.observationHeading;
-							observationForStore.observationText = observation.observationText;
-							observationForStore.observationData = observation.observationData;
-							observationForStore.locationIsPrivate = observation.locationIsPrivate;
-							observationForStore.polygonService = observation.polygonService;
-							observationForStore.uploaded = observation.uploaded;
-							observationForStore.observationIllustrationSet = observation.observationIllustrationSet;
-							if (observation.deleted) {
-								observationForStore.deleted = observation.deleted;
-							}
-
-							This.syncObservationSendPrepareSingleObject(observationForStore, This.totalTwoWaySyncPOST);
-
-						});
-					}
-					else {
-						let totalTwoWaySyncPOST = 0;
-						let updatedObservation = {};
-						/** GET Observations  */
-						this.getObservationsFromServerTwowaySync(totalTwoWaySyncPOST, updatedObservation);
-					}
-				}
-				else {
-
-					this.getObservationsFromServerTwowaySync(0, undefined);
-				}
-
-			},
-
-			/** Prepare a single object includes image data */
-			syncObservationSendPrepareSingleObject(observation, totalTwoWaySyncPOST, syncObservationPOST) {
-
-				let This = this;
-				let entityName = CommonUtil.CONST_DB_ENTITY_PHOTO;
-				if (observation.uploaded === false) {
-					let observationUpload = observation;
-					let observationIllustrationSet = observationUpload.observationIllustrationSet;
-
-					//  talk to Innodb,  embed image data to JSON POST and exit
-					let dbRequest = indexedDB.open(CommonUtil.CONST_DB_NAME, CommonUtil.CONST_DB_VERSION);
-					dbRequest.onsuccess = function (evt) {
-						let db = evt.target.result;
-
-						if (db.objectStoreNames.contains(entityName)) {
-							let transaction = db.transaction([entityName], 'readwrite');
-							let objectstore = transaction.objectStore(entityName);
-							if (observationIllustrationSet) {
-								observationIllustrationSet.forEach(function (illustration) {
-									let fileName = illustration.observationIllustrationPK.fileName;
-
-									let objectstoreRequest = objectstore.get(fileName);
-
-
-									objectstoreRequest.onsuccess = function (event) {
-
-										let observationImage = event.target.result;
-										if (observationImage) {
-											let imageTextData = observationImage.illustration.imageTextData;
-											illustration.imageTextData = imageTextData;
-										}
-									}
-								});
-							}
-
-							transaction.oncomplete = function () {
-								This.syncObservationPOST(observation, totalTwoWaySyncPOST);
-								
-							}
-						}
-						else {
-							This.syncObservationPOST(observation, totalTwoWaySyncPOST);
-							db.close();
-						}
-						db.close();
-					}
-				}
-			},
-
-			/** Posting Observation data to VIPS server for sync */
-			syncObservationPOST(observation, totalTwoWaySyncPOST) {
-				//CommonUtil.logInfo("syncObservationPOST: observation.geoinfo=" + observation.geoinfo);
-				let This = this;
-				//if(this.isSyncNeeded)
-				{
-					let userUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
-					let jsonBody = null;
-
-					if (observation.deleted) {
-						let delObservation = {};
-						delObservation.observationId = observation.observationId;
-						delObservation.deleted = observation.deleted;
-						jsonBody = JSON.stringify(delObservation);
-					}
-					else {
-						jsonBody = JSON.stringify(observation);
-					}
-
-
-
-					if (observation.deleted) {
-						This.removeLocalObservation(observation.observationId);
-					}
-					/*CommonUtil.logInfo("syncObservationPOST: jsonbody=" + jsonBody);
-								CommonUtil.logInfo("Sending observation");*/
-					fetch(
-						This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_SYNC_UPDATE_OBSERVATION,
-						{
-							method: "POST",
-							headers: {
-								"Content-Type": "application/json",
-								'Authorization': userUUID
-							},
-							body: jsonBody
-						}
-					)
-						.then(function (response) {
-
-							if (response.status === 200) {
-								//CommonUtil.logInfo("Done POSTING")
-							}
-							else {
-								/** Even if the response is not success, still need to increase the counter, 
-								 * to decide for next action  after all PUSH */
-								This.counterTwoWaySyncPOST = This.counterTwoWaySyncPOST + 1;
-							}
-							return response.text()
-						})
-						.then((data) => {
-							if (data) {
-
-								//console.info(data);
-								let updatedObservation = JSON.parse(data);
-
-								if (observation.observationId < 0) {
-									let indexPosition = null;
-									let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
-									$.each(lstObservations, function (index, jsonObservation) {
+          lstObservationUpload.forEach(function (observation) {
+            //CommonUtil.logInfo("syncObservationSendPrepare:observation.geoinfo= " + observation.geoinfo);
+
+            let observationForStore = {};
+            observationForStore.observationId = observation.observationId;
+            observationForStore.observationTimeSeriesId = observation.observationTimeSeriesId;
+            observationForStore.cropOrganismId = observation.cropOrganismId;
+            observationForStore.organismId = observation.organismId
+            observationForStore.timeOfObservation = observation.timeOfObservation;
+            observationForStore.isPositive = observation.isPositive;
+            observationForStore.statusChangedTime = observation.statusChangedTime;
+            observationForStore.statusTypeId = observation.statusTypeId;
+            observationForStore.isQuantified = observation.isQuantified;
+            observationForStore.userId = observation.userId;
+            observationForStore.geoinfo = observation.geoinfo;
+            observationForStore.locationPointOfInterestId = observation.locationPointOfInterestId;
+            observationForStore.broadcastMessage = observation.broadcastMessage;
+            observationForStore.statusRemarks = observation.statusRemarks;
+            observationForStore.observationHeading = observation.observationHeading;
+            observationForStore.observationText = observation.observationText;
+            observationForStore.observationData = observation.observationData;
+            observationForStore.locationIsPrivate = observation.locationIsPrivate;
+            observationForStore.polygonService = observation.polygonService;
+            observationForStore.uploaded = observation.uploaded;
+            observationForStore.observationIllustrationSet = observation.observationIllustrationSet;
+            if (observation.deleted) {
+              observationForStore.deleted = observation.deleted;
+            }
+            This.syncObservationSendPrepareSingleObject(observationForStore, This.totalTwoWaySyncPOST);
+          });
+        } else {
+          let totalTwoWaySyncPOST = 0;
+          let updatedObservation = {};
+          /** GET Observations  */
+          this.getObservationsFromServerTwowaySync(totalTwoWaySyncPOST, updatedObservation);
+        }
+      } else {
+        this.getObservationsFromServerTwowaySync(0, undefined);
+      }
+
+    },
+
+    /** Sync - observation time series - for POST */
+    syncObservationTimeSeriesSendPrepare(value) {
+      let This = this;
+      let otsLocalList = JSON.parse(localStorage.getItem(value.name));
+      if (otsLocalList) {
+
+        let otsLocalListForUpload = otsLocalList.filter(ots => ots.uploaded === false);
+        this.totalTwoWaySyncPOST = otsLocalListForUpload.length;
+
+        // There are new observation time series which have not previously been uploaded
+        if (otsLocalListForUpload && otsLocalListForUpload.length > 0) {
+          otsLocalListForUpload.forEach(function (ots) {
+            This.syncObservationTimeSeriesPOST(ots, This.totalTwoWaySyncPOST);
+          });
+        } else {
+          let totalTwoWaySyncPOST = 0;
+          let updatedObservationTimeSeries = {};
+          /** GET Observations  */
+          this.getObservationTimeSeriesListFromServerTwoWaySync(totalTwoWaySyncPOST, updatedObservationTimeSeries);
+        }
+      } else {
+        this.getObservationTimeSeriesListFromServerTwoWaySync(0, undefined);
+      }
+
+    },
+
+    /** Prepare a single object includes image data */
+    syncObservationSendPrepareSingleObject(observation, totalTwoWaySyncPOST, syncObservationPOST) {
+
+      let This = this;
+      let entityName = CommonUtil.CONST_DB_ENTITY_PHOTO;
+      if (observation.uploaded === false) {
+        let observationIllustrationSet = observation.observationIllustrationSet;
+
+        //  talk to Innodb,  embed image data to JSON POST and exit
+        let dbRequest = indexedDB.open(CommonUtil.CONST_DB_NAME, CommonUtil.CONST_DB_VERSION);
+        dbRequest.onsuccess = function (evt) {
+          let db = evt.target.result;
+
+          if (db.objectStoreNames.contains(entityName)) {
+            let transaction = db.transaction([entityName], 'readwrite');
+            let objectstore = transaction.objectStore(entityName);
+            if (observationIllustrationSet) {
+              observationIllustrationSet.forEach(function (illustration) {
+                let fileName = illustration.observationIllustrationPK.fileName;
+
+                let objectstoreRequest = objectstore.get(fileName);
+
+
+                objectstoreRequest.onsuccess = function (event) {
+
+                  let observationImage = event.target.result;
+                  if (observationImage) {
+                    let imageTextData = observationImage.illustration.imageTextData;
+                    illustration.imageTextData = imageTextData;
+                  }
+                }
+              });
+            }
+
+            transaction.oncomplete = function () {
+              This.syncObservationPOST(observation, totalTwoWaySyncPOST);
+
+            }
+          } else {
+            This.syncObservationPOST(observation, totalTwoWaySyncPOST);
+            db.close();
+          }
+          db.close();
+        }
+      }
+    },
+
+    /** Posting Observation data to VIPS server for sync */
+    syncObservationPOST(observation, totalTwoWaySyncPOST) {
+      //CommonUtil.logInfo("syncObservationPOST: observation.geoinfo=" + observation.geoinfo);
+      let This = this;
+      //if(this.isSyncNeeded)
+      {
+        let userUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
+        let jsonBody = null;
+
+        if (observation.deleted) {
+          let delObservation = {};
+          delObservation.observationId = observation.observationId;
+          delObservation.deleted = observation.deleted;
+          jsonBody = JSON.stringify(delObservation);
+        } else {
+          jsonBody = JSON.stringify(observation);
+        }
+
+
+        if (observation.deleted) {
+          This.removeLocalObservation(observation.observationId);
+        }
+        /*CommonUtil.logInfo("syncObservationPOST: jsonbody=" + jsonBody);
+              CommonUtil.logInfo("Sending observation");*/
+        fetch(
+            This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_SYNC_UPDATE_OBSERVATION,
+            {
+              method: "POST",
+              headers: {
+                "Content-Type": "application/json",
+                'Authorization': userUUID
+              },
+              body: jsonBody
+            }
+        )
+            .then(function (response) {
+
+              if (response.status === 200) {
+                //CommonUtil.logInfo("Done POSTING")
+              } else {
+                console.error("Posting failed with status code " + response.status, This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_SYNC_UPDATE_OBSERVATION)
+                /** Even if the response is not success, still need to increase the counter,
+                 * to decide for next action  after all PUSH */
+                This.counterTwoWaySyncPOST = This.counterTwoWaySyncPOST + 1;
+              }
+              return response.text()
+            })
+            .then((data) => {
+              if (data) {
+
+                //console.info(data);
+                let updatedObservation = JSON.parse(data);
+
+                if (observation.observationId < 0) {
+                  let indexPosition = null;
+                  let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
+                  $.each(lstObservations, function (index, jsonObservation) {
 										if (observation.observationId == jsonObservation.observationId) {
-											indexPosition = index;
-											return false;
-
-										}
-									})
-									if (indexPosition || indexPosition === 0) {
-										/** Remove/delete the Observation with nagative number (localy created ) */
-										lstObservations.splice(indexPosition, 1);
-										localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST, JSON.stringify(lstObservations));
-										this.getObservationsFromServerTwowaySync(1, updatedObservation)
-									}
-
-								}
-
-								if (updatedObservation.observationId === observation.observationId) {
-									this.updateObservationPOST(updatedObservation, totalTwoWaySyncPOST);
-
-								}
-
-							}
-						});
-				}
-
-			},
-
-			/** After App's POST opecation, update local observation when response received from VIPS Server */
-			updateObservationPOST(updatedObservation, totalTwoWaySyncPOST) {
-
-				let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
-
-				let observationOld = {};
-				let counter = undefined;
-				$.each(lstObservations, function (index, jsonObservation) {
-					if (jsonObservation.observationId === updatedObservation.observationId) {
-						observationOld = Object.assign({}, jsonObservation); // Deep cloning
-						counter = index;
-						return false;
-					}
-
-				});
-
-				if (counter || counter === 0) {
-
-					let illustrationsUpdated = updatedObservation.observationIllustrationSet;
-					let illustrationsOld = observationOld.observationIllustrationSet;
-
-					illustrationsOld.forEach(function (illOld) {
-						let recFound = false;
-						if (illustrationsUpdated) {
-							illustrationsUpdated.forEach(function (illUpdated) {
-								if (illOld.observationIllustrationPK.fileName === illUpdated.observationIllustrationPK.fileName) {
-									recFound = true;
-									return false;
-								}
-							});
-						}
-						if (recFound) {
-							delete illOld.uploaded;
-							if (illOld.deleted) {
-								CommonUtil.logInfo('record to delete --- found');
-							}
-						}
-					})
-					updatedObservation.observationIllustrationSet = observationOld.observationIllustrationSet;
-
-
-					lstObservations[counter] = updatedObservation;
-					localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST, JSON.stringify(lstObservations));
-
-					this.counterTwoWaySyncPOST = this.counterTwoWaySyncPOST + 1;
-					CommonUtil.logInfo('total number of upload : ' + totalTwoWaySyncPOST + ' ---- counter value : ' + this.counterTwoWaySyncPOST);
-					if (this.counterTwoWaySyncPOST === totalTwoWaySyncPOST) {
-						this.counterTwoWaySyncPOST = 0;
-						this.getObservationsFromServerTwowaySync(totalTwoWaySyncPOST, updatedObservation);
-					}
-				}
-
-			},
-
-			/** GET Observations from server to sync local data */
-			getObservationsFromServerTwowaySync(totalTwoWaySyncPOST, updatedObservation) {
-
-				let This = this;
-				let strUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
-				let jsonHeader = {Authorization: strUUID};
-
-				fetch(This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_USER_OBSERVATION_LIST, {
-					method: "GET",
-					headers: jsonHeader,
-				}).then((response) => response.json())
-					.then((data) => {
-						let serverObservations = data;
-						if (localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST)) {
-							let lstLocalObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
-
-							serverObservations.forEach(function (srvObservation) {
-								let arrIndex = undefined;
-								let booNoRecordFound = false;
-								let booRecordFound = false;
-
-								$.each(lstLocalObservations, function (index, localObservation) {
-									if (srvObservation.observationId === localObservation.observationId) {
-										booRecordFound = true;
-										if (updatedObservation && (totalTwoWaySyncPOST === 1 && updatedObservation.observationId === srvObservation.observationId)) {
-
-										}
-										else {
-											if (srvObservation.lastEditedTime) {
-												if (localObservation.lastEditedTime) {
-
-													let srvDate = new Date(srvObservation.lastEditedTime);
-													let localDate = new Date(localObservation.lastEditedTime);
-
-													if (srvDate >= localDate) {
-														arrIndex = index;
-														return false;
-													}
-												}
-												else {
-													arrIndex = index;
-													return false;
-												}
-											}
-											else {
-												arrIndex = index;
-												return false;
-											}
-										}
-
-									}
-									else {
-										//booNoRecordFound = true;
-									}
-
-								})
+                      indexPosition = index;
+                      return false;
+
+                    }
+                  })
+                  if (indexPosition || indexPosition === 0) {
+                    /** Remove/delete the Observation with nagative number (localy created ) */
+                    lstObservations.splice(indexPosition, 1);
+                    localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST, JSON.stringify(lstObservations));
+                    this.getObservationsFromServerTwowaySync(1, updatedObservation)
+                  }
+
+                }
+
+                if (updatedObservation.observationId === observation.observationId) {
+                  this.updateObservationPOST(updatedObservation, totalTwoWaySyncPOST);
+
+                }
+
+              }
+            });
+      }
+
+    },
+
+    /** Posting observation time series data to VIPS server for sync */
+    syncObservationTimeSeriesPOST(ots, totalTwoWaySyncPOST) {
+      let This = this;
+      let userUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
+      let jsonBody = null;
+
+      if (ots.deleted) {
+        let delObservationTimeSeries = {};
+        delObservationTimeSeries.observationTimeSeriesId = ots.observationTimeSeriesId;
+        delObservationTimeSeries.deleted = ots.deleted;
+        jsonBody = JSON.stringify(delObservationTimeSeries);
+        This.removeLocalObservationTimeSeries(ots.observationTimeSeriesId);
+      } else {
+        jsonBody = JSON.stringify(ots);
+      }
+      fetch(
+          This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_SYNC_UPDATE_OBSERVATION_TIME_SERIES,
+          {
+            method: "POST",
+            headers: {
+              "Content-Type": "application/json",
+              'Authorization': userUUID
+            },
+            body: jsonBody
+          }
+      )
+          .then(function (response) {
+            if (response.status === 200) {
+              CommonUtil.logInfo("Done POSTING")
+            } else {
+              /** Even if the response is not success, still need to increase the counter,
+               * to decide for next action after all PUSH */
+              This.counterTwoWaySyncPOST = This.counterTwoWaySyncPOST + 1;
+            }
+            return response.text()
+          })
+          .then((data) => {
+            if (data) {
+              let updatedObservationTimeSeries = JSON.parse(data);
+
+              if (ots.observationTimeSeriesId < 0) {
+                let indexPosition = null;
+                let lstObservationTimeSeries = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST));
+                $.each(lstObservationTimeSeries, function (index, jsonOts) {
+                  if (ots.observationTimeSeriesId === jsonOts.observationTimeSeriesId) {
+                    indexPosition = index;
+                    return false;
+                  }
+                })
+                if (indexPosition || indexPosition === 0) {
+                  /** Remove/delete the observation time series with negative number (locally created ) */
+                  lstObservationTimeSeries.splice(indexPosition, 1);
+                  localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST, JSON.stringify(lstObservationTimeSeries));
+                  this.getObservationTimeSeriesListFromServerTwoWaySync(1, updatedObservationTimeSeries)
+                }
+              }
+              if (updatedObservationTimeSeries.observationTimeSeriesId === ots.observationTimeSeriesId) {
+                this.updateObservationTimeSeriesPOST(updatedObservationTimeSeries, totalTwoWaySyncPOST);
+              }
+            }
+          });
+    },
+
+    /** After App's POST opecation, update local observation when response received from VIPS Server */
+    updateObservationPOST(updatedObservation, totalTwoWaySyncPOST) {
+
+      let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
+
+      let observationOld = {};
+      let counter = undefined;
+      $.each(lstObservations, function (index, jsonObservation) {
+        if (jsonObservation.observationId === updatedObservation.observationId) {
+          observationOld = Object.assign({}, jsonObservation); // Deep cloning
+          counter = index;
+          return false;
+        }
+
+      });
+
+      if (counter || counter === 0) {
+
+        let illustrationsUpdated = updatedObservation.observationIllustrationSet;
+        let illustrationsOld = observationOld.observationIllustrationSet;
+
+        illustrationsOld.forEach(function (illOld) {
+          let recFound = false;
+          if (illustrationsUpdated) {
+            illustrationsUpdated.forEach(function (illUpdated) {
+              if (illOld.observationIllustrationPK.fileName === illUpdated.observationIllustrationPK.fileName) {
+                recFound = true;
+                return false;
+              }
+            });
+          }
+          if (recFound) {
+            delete illOld.uploaded;
+            if (illOld.deleted) {
+              CommonUtil.logInfo('record to delete --- found');
+            }
+          }
+        })
+        updatedObservation.observationIllustrationSet = observationOld.observationIllustrationSet;
+
+
+        lstObservations[counter] = updatedObservation;
+        localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST, JSON.stringify(lstObservations));
+
+        this.counterTwoWaySyncPOST = this.counterTwoWaySyncPOST + 1;
+        CommonUtil.logInfo('total number of upload : ' + totalTwoWaySyncPOST + ' ---- counter value : ' + this.counterTwoWaySyncPOST);
+        if (this.counterTwoWaySyncPOST === totalTwoWaySyncPOST) {
+          this.counterTwoWaySyncPOST = 0;
+          this.getObservationsFromServerTwowaySync(totalTwoWaySyncPOST, updatedObservation);
+        }
+      }
+
+    },
+
+    // Update local observation time series when response received from VIPS Server
+    updateObservationTimeSeriesPOST(updatedOts, totalTwoWaySyncPOST) {
+      let jsonLocalOtsList = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST));
+
+      let counter = undefined;
+      // Find corresponding observation time series in local storage
+      $.each(jsonLocalOtsList, function (index, jsonOts) {
+        if (jsonOts.observationTimeSeriesId === updatedOts.observationTimeSeriesId) {
+          counter = index;
+          return false;
+        }
+      });
+      if (counter !== undefined && counter >= 0) {
+        jsonLocalOtsList[counter] = updatedOts;
+        localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST, JSON.stringify(jsonLocalOtsList));
+
+        this.counterTwoWaySyncPOST = this.counterTwoWaySyncPOST + 1;
+        CommonUtil.logInfo('total number of upload : ' + totalTwoWaySyncPOST + ' ---- counter value : ' + this.counterTwoWaySyncPOST);
+        if (this.counterTwoWaySyncPOST === totalTwoWaySyncPOST) {
+          this.counterTwoWaySyncPOST = 0;
+          this.getObservationTimeSeriesListFromServerTwoWaySync(totalTwoWaySyncPOST, updatedOts);
+        }
+      }
+
+    },
+
+    /** GET Observations from server to sync local data */
+    getObservationsFromServerTwowaySync(totalTwoWaySyncPOST, updatedObservation) {
+
+      let This = this;
+      let strUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
+      let jsonHeader = {Authorization: strUUID};
+
+      fetch(This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_USER_OBSERVATION_LIST, {
+        method: "GET",
+        headers: jsonHeader,
+      }).then((response) => response.json())
+          .then((data) => {
+            let serverObservations = data;
+            if (localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST)) {
+              let lstLocalObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
+
+              serverObservations.forEach(function (srvObservation) {
+                let arrIndex = undefined;
+                let booNoRecordFound = false;
+                let booRecordFound = false;
+
+                $.each(lstLocalObservations, function (index, localObservation) {
+                  if (srvObservation.observationId === localObservation.observationId) {
+                    booRecordFound = true;
+                    if (updatedObservation && (totalTwoWaySyncPOST === 1 && updatedObservation.observationId === srvObservation.observationId)) {
+
+                    } else {
+                      if (srvObservation.lastEditedTime) {
+                        if (localObservation.lastEditedTime) {
+
+                          let srvDate = new Date(srvObservation.lastEditedTime);
+                          let localDate = new Date(localObservation.lastEditedTime);
+
+                          if (srvDate >= localDate) {
+                            arrIndex = index;
+                            return false;
+                          }
+                        } else {
+                          arrIndex = index;
+                          return false;
+                        }
+                      } else {
+                        arrIndex = index;
+                        return false;
+                      }
+                    }
+
+                  } else {
+                    //booNoRecordFound = true;
+                  }
+
+                })
 								if (booRecordFound) {}
 								else {
-									booNoRecordFound = true;
-								}
-								if (arrIndex || arrIndex === 0) {
-									lstLocalObservations[arrIndex] = srvObservation;
-								}
-								if (booNoRecordFound) {
-									lstLocalObservations.push(srvObservation);
-									return false;
-								}
-
-
-							});
-							//CommonUtil.logInfo(lstLocalObservations);
-							localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST, JSON.stringify(lstLocalObservations));
-						}
-						else {
-							localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST, JSON.stringify(serverObservations));
-							//this.$router.replace({path:'/'});
-							/*                     this.$router.push("/").catch(()=>{});
-												this.$router.go(); */
-						}
-
-						serverObservations.forEach(function (srvObservation) {
-							let observationId = srvObservation.observationId;
-							let organismId = srvObservation.organismId;
-							let illustrations = srvObservation.observationIllustrationSet;
+                  booNoRecordFound = true;
+                }
+                if (arrIndex || arrIndex === 0) {
+                  lstLocalObservations[arrIndex] = srvObservation;
+                }
+                if (booNoRecordFound) {
+                  lstLocalObservations.push(srvObservation);
+                  return false;
+                }
+
+
+              });
+              //CommonUtil.logInfo(lstLocalObservations);
+              localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST, JSON.stringify(lstLocalObservations));
+            } else {
+              localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST, JSON.stringify(serverObservations));
+              //this.$router.replace({path:'/'});
+              /*                     this.$router.push("/").catch(()=>{});
+                        this.$router.go(); */
+            }
+
+            serverObservations.forEach(function (srvObservation) {
+              let observationId = srvObservation.observationId;
+              let organismId = srvObservation.organismId;
+              let illustrations = srvObservation.observationIllustrationSet;
 
 							if (illustrations && illustrations.length != 0) {
-								illustrations.forEach(function (illustration) {
-									let imageFileName = illustration.observationIllustrationPK.fileName;
-									if (imageFileName) {
-										This.fetchImageFromServer(observationId, organismId, imageFileName);
-									}
-								})
-							}
-						});
-						// Update the data model for the observation list.
-						if (this.$root.sharedState.observationListComponent != undefined) {
-							this.$root.sharedState.observationListComponent.getObservationsFromStore();
-						}
-					})
-			},
-
-			/** GET image from server */
-			fetchImageFromServer(observationId, organismId, imageFileName) {
-
-				let photoURL = this.CONST_URL_DOMAIN + CommonUtil.CONST_URL_STATIC_IMAGE_PATH + organismId + '/' + imageFileName;
-				let imgTest;
-				let This = this;
-				let observationImage = {
-					observationId: '',
-					organismId: '',
-					illustration: {
-						fileName: '',
-						imageTextData: '',
-						deleted: false
-					}
-				};
-				observationImage.observationId = observationId;
-				observationImage.organismId = organismId;
-				observationImage.illustration.fileName = imageFileName;
-
-
-
-				if (organismId) {
-					const toDataURL = url => fetch(url)
-						.then(response => response.blob())
-						.then(blob => new Promise((resolve, reject) => {
-							const reader = new FileReader()
-							reader.onloadend = () => resolve(reader.result)
-							reader.onerror = reject
-							reader.readAsDataURL(blob)
-						}))
-
-
-					toDataURL(photoURL)
-						.then(imageTextData => {
-							observationImage.illustration.imageTextData = imageTextData;
-							This.storeImageData(observationImage);
-						})
-				}
-
-			},
-			/** Store image from server 
-			 */
-			storeImageData(observationImage) {
-				let This = this;
-				let entityName = CommonUtil.CONST_DB_ENTITY_PHOTO;
-
-				let dbRequest = indexedDB.open(CommonUtil.CONST_DB_NAME, CommonUtil.CONST_DB_VERSION);
-				dbRequest.onsuccess = function (evt) {
-					let db = evt.target.result;
-					if (db.objectStoreNames.contains(entityName)) {
-						let transaction = db.transaction([entityName], 'readwrite');
-						let objectstore = transaction.objectStore(entityName).add(observationImage, observationImage.illustration.fileName);
-					}
-					else {
-						alert("Photo part of IndexedDB not created. Please report this error.");
-					}
-					db.close();
-				}
-
-			},
-
-			/** Remove local Observation */
-			removeLocalObservation(id) {
-				let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
-				let indexPosition = null;
-				$.each(lstObservations, function (index, observation) {
-					if (observation.observationId === id) {
-						indexPosition = index;
-						return false;
-					}
-				});
-				if (indexPosition || indexPosition === 0) {
-					this.removeImageRecord(id);
-
-					lstObservations.splice(indexPosition, 1);
-					localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST, JSON.stringify(lstObservations));
-				}
-			},
-			/**
-			 * Remove image data from indexed DB 
-			 */
-			removeImageRecord(observationId) {
-				let entityName = CommonUtil.CONST_DB_ENTITY_PHOTO;
-				let dbRequest = indexedDB.open(CommonUtil.CONST_DB_NAME, CommonUtil.CONST_DB_VERSION);
-				let indexName = CommonUtil.CONST_DB_INDEX_NAME_OBSERVATION_ID;
-				dbRequest.onsuccess = function (evt) {
-					let db = evt.target.result;
-					if (db.objectStoreNames.contains(entityName)) {
-						let transaction = db.transaction([entityName], 'readwrite');
-						let objectstore = transaction.objectStore(entityName);
-						let indexStore = objectstore.index(indexName);
-						let keyRange = IDBKeyRange.only(observationId);
-						let cursorRequest = indexStore.openCursor(keyRange);
-						cursorRequest.onsuccess = function (event) {
-							let cursor = event.target.result;
-							if (cursor) {
-								cursor.delete();
-								cursor.continue();
-							}
-						}
-					}
-					db.close();
-				}
-
-			},
-
-
-
-		},
-		mounted() {
-			this.isMounted = true;
-			this.CONST_URL_DOMAIN = CommonUtil.CONST_URL_DOMAIN;
-		}
-
-	};
-</script>
\ No newline at end of file
+                illustrations.forEach(function (illustration) {
+                  let imageFileName = illustration.observationIllustrationPK.fileName;
+                  if (imageFileName) {
+                    This.fetchImageFromServer(observationId, organismId, imageFileName);
+                  }
+                })
+              }
+            });
+            // Update the data model for the observation list and observation time series list
+            if (this.$root.sharedState.observationListComponent) {
+              this.$root.sharedState.observationListComponent.getObservationsFromStore();
+            }
+            if (this.$root.sharedState.observationTimeSeriesListComponent) {
+              this.$root.sharedState.observationTimeSeriesListComponent.loadObservationMapFromLocalStore();
+            }
+          })
+    },
+
+    // GET observation time series list from server to sync local data
+    getObservationTimeSeriesListFromServerTwoWaySync(totalTwoWaySyncPOST, updatedObservationTimeSeries) {
+      let This = this;
+      let strUUID = localStorage.getItem(CommonUtil.CONST_STORAGE_UUID);
+      let jsonHeader = {Authorization: strUUID};
+
+      fetch(This.CONST_URL_DOMAIN + CommonUtil.CONST_URL_USER_OBSERVATION_TIME_SERIES_LIST, {
+        method: "GET",
+        headers: jsonHeader,
+      }).then((response) => response.json())
+          .then((data) => {
+            let jsonServerOtsList = data;
+            let jsonLocalOtsList = localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST);
+            if (jsonLocalOtsList) {
+              jsonLocalOtsList = JSON.parse(jsonLocalOtsList);
+
+              jsonServerOtsList.forEach(serverOts => {
+                serverOts.uploaded = true;
+                let existingIndex = jsonLocalOtsList.findIndex(localOts => serverOts.observationTimeSeriesId === localOts.observationTimeSeriesId);
+                if (existingIndex !== -1) {
+                  let localOts = jsonLocalOtsList[existingIndex];
+                  let serverLastModified = new Date(serverOts.lastModified);
+                  let localLastModified = new Date(localOts.lastModified);
+
+                  if (!localOts.lastModified || serverLastModified >= localLastModified) {
+                    jsonLocalOtsList[existingIndex] = serverOts;
+                  }
+                } else {
+                  jsonLocalOtsList.push(serverOts);
+                }
+              });
+              localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST, JSON.stringify(jsonLocalOtsList));
+            } else {
+              localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST, JSON.stringify(jsonServerOtsList));
+            }
+
+            // Update the data model for the observation time series list.
+            if (this.$root.sharedState.observationTimeSeriesListComponent !== undefined) {
+              this.$root.sharedState.observationTimeSeriesListComponent.loadObservationTimeSeriesListFromLocalStore();
+            }
+          })
+    },
+
+    /** GET image from server */
+    fetchImageFromServer(observationId, organismId, imageFileName) {
+
+      let photoURL = this.CONST_URL_DOMAIN + CommonUtil.CONST_URL_STATIC_IMAGE_PATH + organismId + '/' + imageFileName;
+      let imgTest;
+      let This = this;
+      let observationImage = {
+        observationId: '',
+        organismId: '',
+        illustration: {
+          fileName: '',
+          imageTextData: '',
+          deleted: false
+        }
+      };
+      observationImage.observationId = observationId;
+      observationImage.organismId = organismId;
+      observationImage.illustration.fileName = imageFileName;
+
+
+      if (organismId) {
+        const toDataURL = url => fetch(url)
+            .then(response => response.blob())
+            .then(blob => new Promise((resolve, reject) => {
+              const reader = new FileReader()
+              reader.onloadend = () => resolve(reader.result)
+              reader.onerror = reject
+              reader.readAsDataURL(blob)
+            }))
+
+
+        toDataURL(photoURL)
+            .then(imageTextData => {
+              observationImage.illustration.imageTextData = imageTextData;
+              This.storeImageData(observationImage);
+            })
+      }
+
+    },
+    /** Store image from server
+     */
+    storeImageData(observationImage) {
+      let This = this;
+      let entityName = CommonUtil.CONST_DB_ENTITY_PHOTO;
+
+      let dbRequest = indexedDB.open(CommonUtil.CONST_DB_NAME, CommonUtil.CONST_DB_VERSION);
+      dbRequest.onsuccess = function (evt) {
+        let db = evt.target.result;
+        if (db.objectStoreNames.contains(entityName)) {
+          let transaction = db.transaction([entityName], 'readwrite');
+          let objectstore = transaction.objectStore(entityName).add(observationImage, observationImage.illustration.fileName);
+        } else {
+          alert("Photo part of IndexedDB not created. Please report this error.");
+        }
+        db.close();
+      }
+
+    },
+
+    /** Remove local Observation */
+    removeLocalObservation(id) {
+      let lstObservations = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST));
+      let indexPosition = null;
+      $.each(lstObservations, function (index, observation) {
+        if (observation.observationId === id) {
+          indexPosition = index;
+          return false;
+        }
+      });
+      if (indexPosition || indexPosition === 0) {
+        this.removeImageRecord(id);
+
+        lstObservations.splice(indexPosition, 1);
+        localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_LIST, JSON.stringify(lstObservations));
+      }
+    },
+
+    /** Remove local observation time series */
+    removeLocalObservationTimeSeries(id) {
+      let listObservationTimeSeries = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST));
+      let indexPosition = null;
+      $.each(listObservationTimeSeries, function (index, observationTimeSeries) {
+        if (observationTimeSeries.observationTimeSeriesId === id) {
+          indexPosition = index;
+          return false;
+        }
+      });
+      if (indexPosition || indexPosition === 0) {
+        listObservationTimeSeries.splice(indexPosition, 1);
+        localStorage.setItem(CommonUtil.CONST_STORAGE_OBSERVATION_TIME_SERIES_LIST, JSON.stringify(listObservationTimeSeries));
+      }
+    },
+
+    /**
+     * Remove image data from indexed DB
+     */
+    removeImageRecord(observationId) {
+      let entityName = CommonUtil.CONST_DB_ENTITY_PHOTO;
+      let dbRequest = indexedDB.open(CommonUtil.CONST_DB_NAME, CommonUtil.CONST_DB_VERSION);
+      let indexName = CommonUtil.CONST_DB_INDEX_NAME_OBSERVATION_ID;
+      dbRequest.onsuccess = function (evt) {
+        let db = evt.target.result;
+        if (db.objectStoreNames.contains(entityName)) {
+          let transaction = db.transaction([entityName], 'readwrite');
+          let objectstore = transaction.objectStore(entityName);
+          let indexStore = objectstore.index(indexName);
+          let keyRange = IDBKeyRange.only(observationId);
+          let cursorRequest = indexStore.openCursor(keyRange);
+          cursorRequest.onsuccess = function (event) {
+            let cursor = event.target.result;
+            if (cursor) {
+              cursor.delete();
+              cursor.continue();
+            }
+          }
+        }
+        db.close();
+      }
+
+    },
+
+
+  },
+  mounted() {
+    this.isMounted = true;
+    this.CONST_URL_DOMAIN = CommonUtil.CONST_URL_DOMAIN;
+  }
+
+};
+</script>
diff --git a/src/components/Visibility.vue b/src/components/Visibility.vue
index 0a84253cfec5423e75b66c86e16e6236d1a8c58b..d699d746f43c54df27ce29115f445b50addd5e4b 100644
--- a/src/components/Visibility.vue
+++ b/src/components/Visibility.vue
@@ -1,110 +1,104 @@
 <!--
-    
-  Copyright (c) 2022 NIBIO <http://www.nibio.no/>. 
-  
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
   This file is part of VIPSObservationApp.
   VIPSObservationApp is free software: you can redistribute it and/or modify
-  it under the terms of the NIBIO Open Source License as published by 
+  it under the terms of the NIBIO Open Source License as published by
   NIBIO, either version 1 of the License, or (at your option) any
   later version.
-  
+
   VIPSObservationApp is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   NIBIO Open Source License for more details.
-  
+
   You should have received a copy of the NIBIO Open Source License
   along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
-    
+
   Author: Bhabesh Bhabani Mukhopadhyay
   Author: Tor-Einar Skog <tor-einar.skog@nibio.no>
   Dated : 19-Aug-2021
-    
 -->
+
 <template>
-	<select class="form-control" v-model=visibilityId ref='visibility' v-show="isMounted"
-		v-on:change="selectVisibility($event)">
-		<option v-for="privacy in visibilities" v-bind:value="privacy.value" v-bind:key="privacy.value">{{privacy.name}}
-		</option>
-	</select>
+  <div class="form-floating mb-3" v-if="isMounted">
+    <select id="visibility" class="form-select" v-model=visibilityId :disabled="disabled"
+            v-on:change="selectVisibility($event)">
+      <option v-for="privacy in visibilities" v-bind:value="privacy.value">{{ privacy.name }}</option>
+    </select>
+    <label for="visibility"> {{ this.$i18n.t("visibility.label.undefined") }}</label>
+  </div>
 </template>
-<script>
-	import CommonUtil from '@/components/CommonUtil'
-	export default {
-		props: ['locationIsPrivate', 'polygonService'],
-		data() {
-			return {
-				isMounted: false,
-				visibilities: [
-					{name: this.$i18n.t("visibility.label.undefined"), value: 'undefined'},
-					{name: this.$i18n.t("visibility.label.private"), value: 3},
-					{name: this.$i18n.t("visibility.label.public"), value: 4},
-				],
-				visibilityId: 'undefined'
-			}
-
-		},
-		methods: {
-			buildVisibilities() {
-				let This = this;
-				let polygons = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_VISIBILITY_POLYGON));
-				$.each(polygons, function (index, data) {
-
-					let polygon = {};
-					polygon.name = data.polygonServiceName;
-					polygon.value = data.polygonServiceId;
-
-					This.visibilities.push(polygon)
-
-				})
-
-				if (this.locationIsPrivate) {
-					this.visibilityId = 3; // Private = 3 check data()
-				}
-				else {
-					if (this.polygonService) {
-						this.visibilityId = this.polygonService.polygonServiceId;
-					}
-					else {
-						this.visibilityId = 4; // Public = 4 check data()
-					}
 
+<script>
+import CommonUtil from '@/components/CommonUtil'
 
-				}
+export default {
+  props: ['locationIsPrivate', 'polygonService', 'disabled'],
+  data() {
+    return {
+      isMounted: false,
+      visibilities: [
+        {name: this.$i18n.t("visibility.label.private"), value: 3},
+        {name: this.$i18n.t("visibility.label.public"), value: 4},
+      ],
+      visibilityId: 'undefined'
+    }
 
-				this.isMounted = true;
+  },
+  methods: {
+    buildVisibilities() {
+      let This = this;
+      let polygons = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_VISIBILITY_POLYGON));
+      polygons.forEach(polygonService => {
+        let polygon = {};
+        polygon.value = polygonService.polygonServiceId;
+        polygon.name = this.$i18n.t("visibility.label.polygon." + polygonService.polygonServiceId);
+        This.visibilities.push(polygon)
+      });
 
-			},
-			selectVisibility(event) {
-				let paramPrivate = false;
-				let paramPolygonService = '';
-				let polygons = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_VISIBILITY_POLYGON));
-				let polygon = polygons.find(({polygonServiceId}) => polygonServiceId === parseInt(event.target.value));
+      if (this.locationIsPrivate) {
+        this.visibilityId = 3; // Private = 3 check data()
+      } else {
+        if (this.polygonService) {
+          this.visibilityId = this.polygonService.polygonServiceId;
+        } else {
+          this.visibilityId = 4; // Public = 4 check data()
+        }
+      }
+      this.isMounted = true;
+    },
+    selectVisibility(event) {
+      let paramPrivate = false;
+      let paramPolygonService = '';
+      let polygons = JSON.parse(localStorage.getItem(CommonUtil.CONST_STORAGE_VISIBILITY_POLYGON));
+      let polygon = polygons.find(({polygonServiceId}) => polygonServiceId === parseInt(event.target.value));
 
-				if (event.target.value) {
-					switch (parseInt(event.target.value)) {
-						case 1:
-							paramPolygonService = polygon;
-							break;
-						case 2:
-							paramPolygonService = polygon;
-							break;
-						case 3:
-							paramPrivate = true;
-							break;
-						case 4:
-							break;
-						default:
-							CommonUtil.logInfo('Selected option is beyond the range');
-					}
+      if (event.target.value) {
+        switch (parseInt(event.target.value)) {
+          case 1:
+            paramPolygonService = polygon;
+            break;
+          case 2:
+            paramPolygonService = polygon;
+            break;
+          case 3:
+            paramPrivate = true;
+            break;
+          case 4:
+            break;
+          default:
+            CommonUtil.logInfo('Selected option is beyond the range');
+        }
 
-				}
-				this.$emit('visibilityMapAction', paramPrivate, paramPolygonService);
-			},
-		},
-		mounted() {
-			this.buildVisibilities();
-		}
+      }
+      this.$emit('visibilityMapAction', paramPrivate, paramPolygonService);
+    },
+  },
+  mounted() {
+    this.buildVisibilities();
+  }
 
-	}
-</script>
\ No newline at end of file
+}
+</script>
diff --git a/src/components/Welcome.vue b/src/components/Welcome.vue
index 47cac01ba431fc713f9425b7dfc3202ca076ff4a..24dc88cca6c591294e5d898403b19adc4f2a0359 100644
--- a/src/components/Welcome.vue
+++ b/src/components/Welcome.vue
@@ -1,64 +1,65 @@
 <!--
-    
-  Copyright (c) 2022 NIBIO <http://www.nibio.no/>. 
-  
+
+  Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
+
   This file is part of VIPSObservationApp.
   VIPSObservationApp is free software: you can redistribute it and/or modify
-  it under the terms of the NIBIO Open Source License as published by 
+  it under the terms of the NIBIO Open Source License as published by
   NIBIO, either version 1 of the License, or (at your option) any
   later version.
-  
+
   VIPSObservationApp is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   NIBIO Open Source License for more details.
-  
+
   You should have received a copy of the NIBIO Open Source License
   along with VIPSObservationApp.  If not, see <http://www.nibio.no/licenses/>.
-    
+
   Author: Bhabesh Bhabani Mukhopadhyay
   Author: Tor-Einar Skog <tor-einar.skog@nibio.no>
   Dated : 19-Aug-2021
-    
+
 -->
 <template>
-	<div class="main">
-		<center>
-			<p><img src="../assets/welcome_illus.png" style="width: 70%; margin-bottom: 50px;" /></p>
-			<h2>{{$t("welcome.header.text")}}</h2>
-			<p v-html="$t('welcome.body.text')"></p>
-			<footer v-html="$t('welcome.footer.text')" />
-		</center>
-	</div>
+  <div class="main">
+    <div class="row">
+      <div class="col mb-4 mt-3">
+        <img src="../assets/welcome_illus.png" class="welcome-image img-fluid" alt="Front page image" />
+      </div>
+    </div>
+    <h2>{{ $t("welcome.header.text") }}</h2>
+    <p v-html="$t('welcome.body.text')"></p>
+    <footer v-html="$t('welcome.footer.text')"/>
+  </div>
 </template>
 
 <style scoped>
-	.main {
-		padding-right: 15px;
-		padding-left: 15px;
-	}
+.main {
+  padding-right: 15px;
+  padding-left: 15px;
+  text-align: center;
+}
 
-	footer {
-		margin-top: 55px;
-		font-size: small;
-		background-color: #3d8052;
-		color: white;
-		font-weight: bold;
-		padding: 15px;
-	}
+footer {
+  margin-top: 55px;
+  font-size: small;
+  background-color: #3d8052;
+  color: white;
+  font-weight: bold;
+  padding: 15px;
+}
 </style>
 
 <script>
-	export default ({
-		data() {
-			return {
-
-			}
-		},
-		methods: {
-
-		},
-		mounted() {
-		}
-	})
-</script>
\ No newline at end of file
+import CommonUtil from '@/components/CommonUtil'
+export default ({
+  data() {
+    return {}
+  },
+  methods: {},
+  mounted() {
+    CommonUtil.setHeaderTitle(this.$i18n.t("index.header"));
+  }
+})
+</script>
diff --git a/src/locales/nb.json b/src/locales/nb.json
index 2bad181fb6e2635d1efa1242e17a38d5ca841246..2c6a109c1f6aecd8ff794a42faa59657a04daf8b 100644
--- a/src/locales/nb.json
+++ b/src/locales/nb.json
@@ -1,103 +1,143 @@
 {
-	"observationlist.heading": "Mine observasjoner",
-	"observationlist.alert.emptylist": "Du har ingen registrerte observasjoner. For å registrere en ny, klikk på pluss-ikonet nede til høyre.",
-	"welcome.header.text": "VIPS feltobservasjonsapp",
-	"welcome.body.text": "I denne appen kan du registrere, stedfeste og ta bilder av skadegjørere i landbruket. Registreringene kan brukes som førstefunn, inngå i modellberegninger og brukes til rapportering og forskning.<br/>For å bruke appen må du ha en brukerkonto på VIPS. Hvis du ikke har det, <a href='#/RegisterUserForm' onclick=\"cordova.InAppBrowser.open('/RegisterUserForm')\">klikk her for å opprette</a>.<br/>Har du brukerkonto allerede? Klikk på menyikonet oppe til høyre for å logge inn.",
-	"welcome.footer.text": "VIPS (Varsling Innen PlanteSkadegjørere) er utviklet av NIBIO og Norsk Landbruksrådgiving. Rådgivningstjenesten registrerer angrep av skadegjørere i felt, mens NIBIO leverer klimadata og tar seg av utvikling, drift og vedlikehold av systemet. Les mer på <a href='#' style='color: white; text-decoration:underline;' onclick=\"cordova.InAppBrowser.open('https://www.vips-landbruk.no/', '_system')\">VIPS</a>",
-	"login.button.label": "Logg inn",
-	"logout.button.label": "Logg ut",
-	"login.username.field.placeholder": "Brukernavn",
-	"login.pwd.field.placeholder": "Passord",
-	"login.systems.wrong.credential": "Feil brukernavn og/eller passord. Vennligst prøv igjen.",
-	"logout.header.text": "Logg ut",
-	"logout.success.text": "Du er nå utlogget",
-	"login.forgotpassword.label": "Glemt passord",
-	"login.forgotpassword.description": "En e-post sendes til den adressen du registrerer her med informasjon om hvordan du nullstiller nåværende passord og oppretter et nytt.",
-	"login.forgotpassword.field.placeholder": "E-postadresse",
-	"login.forgotpassword.button.label": "Send e-postadresse",
-	"login.forgotpassword.success.msg": "Din henvendelse er behandlet og akseptert. En e-post med flere instruksjoner har blitt sendt til den registrerte e-postadressen. Vennligst sjekk alle spamfiltre hvis du ikke har mottatt den innen kort tid.",
-	"observation.date.label": "Observasjonsdato",
-	"observation.is_positive.label": "Skadegjører påvist",
-	"observation.quantification.label": "Tell/kvantifiser",
-	"observation.quantification.form.label": "Observasjonsspesifikke detaljer",
-	"observation.detail.heading.placeholder": "Overskrift (Hva er funnet hvor?)",
-	"observation.detail.body.placeholder": "Brødtekst (Flere detaljer)",
-	"observation.broadcast.label": "Synlig for andre i VIPS",
-	"observation.broadcast.helptext": "Beskrivelsen av observasjonen vil kunne leses av andre, og de som abonnerer på meldinger om denne skadegjøreren/kulturen vil bli informert. Geografisk synlighet styres av valglisten under kartet.",
-	"observation.map.label": "Velg plassering",
-	"observation.msg": "Registrer observasjon",
-	"observation.selectcrop": "Velg kultur",
-	"observation.selectpest": "Velg skadegjører",
-	"observation.unregisteredpest": "Annet (Finnes ikke i VIPS-databasen)",
-	"photo.label.takephoto": "Ta bilde",
-	"photo.label.selectphoto": "Velg bilde",
-	"photo.modal.deleteprompt": "Bildet vil bli slettet",
-	"photo.modal.label.pleasechoose": "Vennligst velg",
-	"photo.modal.observationphoto.label": "Observasjonsbilde",
-	"back.label": "Tilbake",
-	"save.label": "Lagre",
-	"delete.label": "Slett",
-	"close.label": "Lukk",
-	"action.label": "Handling",
-	"map.link.back.label": "Tilbake",
-	"map.link.OK.label": "OK",
-	"map.link.cancel.label": "Avbryt",
-	"mapobservation.label.selectPOI": "Velg et sted",
-	"mapobservation.label.noPOIselected": "Velg et forhåndsdefinert sted",
-	"mapPOI.poiName.label": "Stedsnavn",
-	"mapPOI.modal.label.saveprompt": "Lagre informasjon for",
-	"mapPOI.modal.label.pleasechoose": "Vennligst velg",
-	"mapPOI.modal.label.deleteprompt": "Slette informasjon for",
-	"mapPOI.modal.alert.missingGeoInfo": "Stedet mangler en plassering",
-	"mapPOI.modal.alert.missingPOIType": "Vennligst angi hva slags type sted dette er",
-	"mapPOI.modal.alert.missingPOIName": "Vennligst angi et navn på stedet",
-	"General": "Generelt",
-	"Farm": "Gård",
-	"Field": "Felt",
-	"Trap": "Felle",
-	"Weather station": "Målestasjon",
-	"places.search.label": "Søk",
-	"placeslist.heading": "Mine steder",
-	"placeslist.explanation" : "\"Steder\" er forhåndsdefinerte punkter med eget navn. Kjekt å bruke hvis man skal legge inn flere observasjoner over tid på samme sted. Klikk på forstørrelsesikonet for å legge inn en observasjon på dette stedet",
-	"crop.category.empty.alert": "For å kunne registrere observasjoner, må du først velge de kulturgruppene du ønsker å jobbe med",
-	"cropcategory": "Kulturgrupper",
-	"alert.header.label": "!! ADVARSEL !!",
-	"alert.header.error.label": "!! FEIL !!",
-	"alert.footer.label": "Vennligst velg et av alternativene",
-	"err.observation.date.empty": "Observasjonsdato må være utfylt",
-	"err.observation.geoinfo": "Lokalitet må være utfylt",
-	"err.observation.header.empty": "Observasjonsdetaljer må være utfylt",
-	"err.observation.remove.msg": "Observasjonen vil bli slettet. Er du helt sikker?",
-	"err.observation.remove.warn": "Observasjonen vil bli slettet",
-	"sync": "Synkroniser med server",
-	"settings.heading": "Innstillinger",
-	"visibility.label.undefined": "Velg geografisk synlighet",
-	"visibility.label.private": "Privat",
-	"visibility.label.public": "Offentlig",
-	"index.header": "Feltobservasjoner",
-	"about.header": "Om appen",
-	"about.version": "Versjon",
-	"about.text": "<p>Appen er utviklet av <a href='#' onclick=\"cordova.InAppBrowser.open('https://nibio.no/', '_system')\">NIBIO</a>s <a href='#' onclick=\"cordova.InAppBrowser.open('https://www.vips-landbruk.no/', '_system')\">VIPS-team</a>.</p><p>Prosjektleder for VIPS: <a href='#' onclick=\"cordova.InAppBrowser.open('https://www.nibio.no/ansatte/berit-nordskog', '_system')\">Berit Nordskog</a></p><p>&copy; 2023 <a href='#' onclick=\"cordova.InAppBrowser.open('https://nibio.no/', '_system')\">NIBIO</a></p>",
-	"registeruser.button.label": "Registrer ny bruker",
-	"registeruserform.description": "Etter at brukeren er opprettet kan du registrere observasjoner i VIPS, men de blir ikke automatisk godkjent. Det skjer først etter at en administrator godkjenner brukeren. Dette skjer normalt innen 1-3 virkedager, og du blir informert pr. e-post om dette.",
-	"registeruserform.firstName": "Fornavn",
-	"registeruserform.lastName": "Etternavn",
-	"registeruserform.email": "E-post",
-	"registeruserform.username": "Brukernavn",
-	"registeruserform.password": "Passord",
-	"registeruserform.password2": "Gjenta passord",
-	"registeruserform.email.help": "Vi vil aldri dele din e-post med tredjepart",
-	"registeruserform.username.help": "Husk brukernavnet ditt; Det brukes for innlogging i kombinasjon med passord",
-	"registeruserform.password.help": "Passordet lagres i kryptert form",
-	"registeruserform.password2.help": "Vennligst gjenta passordet for sikkerhets skyld",
-	"registeruserform.submit.label": "Registrer bruker",
-	"registeruserform.step_2.heading": "Din brukerinformasjon ble registrert.",
-	"registeruserform.step_2.description": "For å kunne logge deg inn, må du bekrefte din e-postadresse. VIPS (noreply@logic.vips.nibio.no) har sendt en e-post til din oppgitte e-postadresse. Vennligst sjekk din innboks og alle spamfiltre, og svar på e-posten ihht instruksjonene. Etter dette kan du klikke på login-knappen nedenfor for å starte å bruke appen.",
-	"registeruserform.step_2.emailConfirmationDeclaration": "Ja, jeg har bekreftet min e-postadresse",
-	"deleteuser.button.label": "Slett min konto",
-	"deleteuserform.description": "Når kontoen din slettes, blir du logget ut og dataene dine blir slettet, også de du har lagt inn i VIPSLogic(administrasjonssystemet på web). Husk at dette kan være data som er viktige for andre enn deg. Du kan velge å la VIPS beholde feltobservasjonene dine. De blir da overført til en anonym VIPS-konto.",
-	"deleteuserform.keepdata.label": "Ja, VIPS kan beholde mine feltobservasjoner",
-	"deleteuserform.submit.label": "Slett min konto",
-	"deleteuserform.submit.confirm.msg": "Er du HELT sikker på at du vil slette kontoen din? Husk at alle data blir ugjenkallelig slettet.",
-	"copy" : "Kopi"
-}
\ No newline at end of file
+  "observationTimeSeriesList.heading": "Mine tidsserier",
+  "observationTimeSeries.add": "Registrer tidsserie",
+  "observationTimeSeries.edit": "Rediger tidsserie",
+  "err.observationTimeSeries.header.empty": "Tidsseriebeskrivelse må være utfylt",
+  "err.observationTimeSeries.remove.info": "Du må slette alle tilhørende observasjoner før du kan slette tidsserien.",
+  "err.observationTimeSeries.remove.warn": "Tidsserien vil bli slettet",
+  "err.observationTimeSeries.remove.msg": "Tidsserien vil bli slettet. Er du helt sikker?",
+  "err.observationTimeSeries.poi.empty": "Tidsserien må registreres på et forhåndsdefinert sted",
+  "observationTimeSeriesList.alert.emptylist": "Tidsserier gir deg muligheten til å knytte sammen en rekke observasjoner gjort på samme sted, for samme kultur og skadegjører. Trykk på pluss-knappen nederst til høyre for å registrere en tidsserie.",
+  "observationTimeSeriesList.observation.single": "1 observasjon",
+  "observationTimeSeries.map.label": "Velg plassering",
+  "observationTimeSeries.broadcast.label": "Synlig for andre i VIPS",
+  "observationTimeSeries.selectcrop": "Velg kultur",
+  "observationTimeSeries.selectpest": "Velg skadegjører",
+  "observationTimeSeries.selectpoi": "Velg et forhåndsdefinert sted",
+  "observationTimeSeries.date.label": "Dato for observasjon",
+  "observationTimeSeries.detail.name.placeholder": "Tittel",
+  "observationTimeSeries.detail.description.placeholder": "Beskrivelse",
+  "observationTimeSeries.observation.add.not.available": "Observasjoner kan legges til så snart tidsserien er lagret til databasen. Forsøk igjen senere.",
+  "observation.for.observationTimeSeries.name": "Observasjon for tidsserie",
+  "observation.for.observationTimeSeries.location": "på lokasjon",
+  "mapObservationTimeSeries.label.selectPOI": "Velg et sted",
+  "mapObservationTimeSeries.label.noPOIselected": "Velg et forhåndsdefinert sted",
+  "observationTimeSeries.unregisteredpest": "Annet (Finnes ikke i VIPS-databasen)",
+  "observationTimeSeries.uneditable.explanation": "For tidsserier med registrerte observasjoner er det ikke mulig å endre kultur, skadegjører, sted eller år.",
+  "observationTimeSeries.placeslist.explanation": "\"Steder\" er forhåndsdefinerte punkter med eget navn. For å registrere en tidsserie må du først registrere et nytt sted med type \"Felle\".",
+  "observationlist.heading": "Mine observasjoner",
+  "observationlist.alert.emptylist": "Du har ingen registrerte observasjoner. For å registrere en ny, klikk på pluss-ikonet nede til høyre.",
+  "welcome.header.text": "VIPS feltobservasjonsapp",
+  "welcome.body.text": "I denne appen kan du registrere, stedfeste og ta bilder av skadegjørere i landbruket. Registreringene kan brukes som førstefunn, inngå i modellberegninger og brukes til rapportering og forskning.<br/>For å bruke appen må du ha en brukerkonto på VIPS. Hvis du ikke har det, <a href='#/RegisterUserForm' onclick=\"cordova.InAppBrowser.open('/RegisterUserForm')\">klikk her for å opprette</a>.<br/>Har du brukerkonto allerede? Klikk på menyikonet oppe til høyre for å logge inn.",
+  "welcome.footer.text": "VIPS (Varsling Innen PlanteSkadegjørere) er utviklet av NIBIO og Norsk Landbruksrådgiving. Rådgivningstjenesten registrerer angrep av skadegjørere i felt, mens NIBIO leverer klimadata og tar seg av utvikling, drift og vedlikehold av systemet. Les mer på <a href='#' style='color: white; text-decoration:underline;' onclick=\"cordova.InAppBrowser.open('https://www.vips-landbruk.no/', '_system')\">VIPS</a>",
+  "login.button.label": "Logg inn",
+  "logout.button.label": "Logg ut",
+  "login.username.field.placeholder": "Brukernavn",
+  "login.pwd.field.placeholder": "Passord",
+  "login.systems.server.error": "Får ikke kontakt med server, vennligst prøv igjen senere. Ta kontakt med oss hvis feilen vedvarer.",
+  "login.systems.user.password.required": "Du må legge inn både brukernavn og passord.",
+  "login.systems.invalid.email": "Du må legge inn en gyldig epost-adresse.",
+  "login.systems.wrong.credential": "Feil brukernavn og/eller passord. Vennligst prøv igjen.",
+  "logout.header.text": "Logg ut",
+  "logout.success.text": "Du er nå utlogget",
+  "login.forgotpassword.label": "Glemt passord",
+  "login.forgotpassword.description": "En e-post sendes til den adressen du registrerer her med informasjon om hvordan du nullstiller nåværende passord og oppretter et nytt.",
+  "login.forgotpassword.field.placeholder": "E-postadresse",
+  "login.forgotpassword.button.label": "Send e-postadresse",
+  "login.forgotpassword.success.msg": "Din henvendelse er behandlet og akseptert. En e-post med flere instruksjoner har blitt sendt til den registrerte e-postadressen. Vennligst sjekk alle spamfiltre hvis du ikke har mottatt den innen kort tid.",
+  "observation.date.label": "Observasjonsdato",
+  "observation.is_positive.label": "Skadegjører påvist",
+  "observation.quantification.label": "Tell/kvantifiser",
+  "observation.quantification.remove.label": "Slett kvantifisering",
+  "observation.quantification.form.label": "Observasjonsspesifikke detaljer",
+  "observation.detail.heading.placeholder": "Tittel",
+  "observation.detail.body.placeholder": "Beskrivelse",
+  "observation.broadcast.label": "Synlig for andre i VIPS",
+  "observation.broadcast.helptext": "Beskrivelsen av observasjonen vil kunne leses av andre, og de som abonnerer på meldinger om denne skadegjøreren/kulturen vil bli informert. Geografisk synlighet styres av valglisten under kartet.",
+  "observation.map.latitude": "Breddegrad",
+  "observation.map.longitude": "Lengdegrad",
+  "observation.map.label.new": "Velg plassering",
+  "observation.map.label.edit": "Endre plassering",
+  "observation.msg": "Registrer observasjon",
+  "observation.selectcrop": "Velg kultur",
+  "observation.selectpest": "Velg skadegjører",
+  "observation.unregisteredpest": "Annet (Finnes ikke i VIPS-databasen)",
+  "photo.label.takephoto": "Ta bilde",
+  "photo.label.selectphoto": "Velg bilde",
+  "photo.modal.deleteprompt": "Bildet vil bli slettet",
+  "photo.modal.label.pleasechoose": "Vennligst velg",
+  "photo.modal.observationphoto.label": "Observasjonsbilde",
+  "back.label": "Tilbake",
+  "save.label": "Lagre",
+  "delete.label": "Slett",
+  "cancel.label": "Avbryt",
+  "close.label": "Lukk",
+  "action.label": "Handling",
+  "map.link.back.label": "Tilbake",
+  "map.link.OK.label": "OK",
+  "map.link.cancel.label": "Avbryt",
+  "mapobservation.label.selectPOI": "Velg et sted",
+  "mapobservation.label.noPOIselected": "Velg et forhåndsdefinert sted",
+  "places.label.onlyUsersPOIs": "Bare mine steder",
+  "mapPOI.poiName.label": "Stedsnavn",
+  "mapPOI.modal.label.saveprompt": "Lagre informasjon for",
+  "mapPOI.modal.label.pleasechoose": "Vennligst velg",
+  "mapPOI.modal.label.deleteprompt": "Slette informasjon for",
+  "mapPOI.modal.alert.missingGeoInfo": "Stedet mangler en plassering",
+  "mapPOI.modal.alert.missingPOIType": "Vennligst angi hva slags type sted dette er",
+  "mapPOI.modal.alert.missingPOIName": "Vennligst angi et navn på stedet",
+  "mapPOI.modal.alert.hasObservations": "Du må slette alle tilhørende observasjoner og tidsserier før du kan slette stedet.",
+  "General": "Generelt",
+  "Farm": "Gård",
+  "Field": "Felt",
+  "Trap": "Felle",
+  "Weather station": "Målestasjon",
+  "places.search.label": "Søk",
+  "placeslist.heading": "Mine steder",
+  "placeslist.explanation": "\"Steder\" er forhåndsdefinerte punkter med eget navn. Gå til \"Mine tidsserier\" i menyen dersom du ønsker å legge inn en tidsserie med flere observasjoner på samme egendefinerte sted.",
+  "crop.category.empty.alert": "For å kunne registrere observasjoner, må du først velge de kulturgruppene du ønsker å jobbe med",
+  "cropcategory": "Kulturgrupper",
+  "alert.header.label": "!! ADVARSEL !!",
+  "alert.header.error.label": "!! FEIL !!",
+  "alert.footer.label": "Vennligst velg et av alternativene",
+  "err.observation.quantification.errors": "Kvantifiseringsskjema inneholder valideringsfeil",
+  "err.observation.date.empty": "Observasjonsdato må være utfylt",
+  "err.observation.date.timeseries.year": "Observasjonsdato må være innenfor tidsserie-år",
+  "err.observation.geoinfo": "Plassering må være valgt",
+  "err.observation.header.empty": "Observasjonsdetaljer må være utfylt",
+  "err.observation.remove.msg": "Observasjonen vil bli slettet. Er du helt sikker?",
+  "err.observation.remove.warn": "Observasjonen vil bli slettet",
+  "sync": "Synkroniser med server",
+  "settings.heading": "Innstillinger",
+  "visibility.label.undefined": "Vis plassering",
+  "visibility.label.private": "Kun for meg som punkt",
+  "visibility.label.public": "Offentlig som punkt",
+  "visibility.label.polygon.1": "Offentlig som kommune",
+  "visibility.label.polygon.2": "Offentlig som fylke",
+  "index.header": "Feltobservasjoner",
+  "about.header": "Om appen",
+  "about.version": "Versjon",
+  "about.text": "<p>Appen er utviklet av <a href='#' onclick=\"cordova.InAppBrowser.open('https://nibio.no/', '_system')\">NIBIO</a>s <a href='#' onclick=\"cordova.InAppBrowser.open('https://www.vips-landbruk.no/', '_system')\">VIPS-team</a>.</p><p>Prosjektleder for VIPS: <a href='#' onclick=\"cordova.InAppBrowser.open('https://www.nibio.no/ansatte/berit-nordskog', '_system')\">Berit Nordskog</a></p><p>&copy; 2024 <a href='#' onclick=\"cordova.InAppBrowser.open('https://nibio.no/', '_system')\">NIBIO</a></p>",
+  "registeruser.button.label": "Registrer ny bruker",
+  "registeruserform.description": "Etter at brukeren er opprettet kan du registrere observasjoner i VIPS, men de blir ikke automatisk godkjent. Det skjer først etter at en administrator godkjenner brukeren. Dette skjer normalt innen 1-3 virkedager, og du blir informert pr. e-post om dette.",
+  "registeruserform.firstName": "Fornavn",
+  "registeruserform.lastName": "Etternavn",
+  "registeruserform.email": "E-post",
+  "registeruserform.username": "Brukernavn",
+  "registeruserform.password": "Passord",
+  "registeruserform.password2": "Gjenta passord",
+  "registeruserform.email.help": "Vi vil aldri dele din e-post med tredjepart",
+  "registeruserform.username.help": "Husk brukernavnet ditt; Det brukes for innlogging i kombinasjon med passord",
+  "registeruserform.password.help": "Passordet lagres i kryptert form",
+  "registeruserform.password2.help": "Vennligst gjenta passordet for sikkerhets skyld",
+  "registeruserform.submit.label": "Registrer bruker",
+  "registeruserform.step_2.heading": "Din brukerinformasjon ble registrert.",
+  "registeruserform.step_2.description": "For å kunne logge deg inn, må du bekrefte din e-postadresse. VIPS (noreply@logic.vips.nibio.no) har sendt en e-post til din oppgitte e-postadresse. Vennligst sjekk din innboks og alle spamfiltre, og svar på e-posten ihht instruksjonene. Etter dette kan du klikke på login-knappen nedenfor for å starte å bruke appen.",
+  "registeruserform.step_2.emailConfirmationDeclaration": "Ja, jeg har bekreftet min e-postadresse",
+  "deleteuser.button.label": "Slett min konto",
+  "deleteuserform.description": "Når kontoen din slettes, blir du logget ut og dataene dine blir slettet, også de du har lagt inn i VIPSLogic(administrasjonssystemet på web). Husk at dette kan være data som er viktige for andre enn deg. Du kan velge å la VIPS beholde feltobservasjonene dine. De blir da overført til en anonym VIPS-konto.",
+  "deleteuserform.keepdata.label": "Ja, VIPS kan beholde mine feltobservasjoner",
+  "deleteuserform.submit.label": "Slett min konto",
+  "deleteuserform.submit.confirm.msg": "Er du HELT sikker på at du vil slette kontoen din? Husk at alle data blir ugjenkallelig slettet.",
+  "copy": "Kopi"
+}
diff --git a/src/main.js b/src/main.js
index 38d4b1c7fc3670151adc63f8317a4b373e4d80c0..2a343c1eeb3f14fc59f4e8e8a752a1c75d7d62ab 100644
--- a/src/main.js
+++ b/src/main.js
@@ -35,7 +35,10 @@ import { faClone } from '@fortawesome/free-solid-svg-icons'
 library.add(faClone);
 import { faTrashCan } from '@fortawesome/free-regular-svg-icons'
 library.add(faTrashCan);
-
+import { faPenToSquare } from '@fortawesome/free-solid-svg-icons'
+library.add(faPenToSquare);
+import { faSquarePlus } from '@fortawesome/free-solid-svg-icons'
+library.add(faSquarePlus);
 
 import {version} from '../package'
 
@@ -68,7 +71,7 @@ const init = () => {
 	    },
 
       methods: {
-			
+
 	  },
 
       i18n,
@@ -77,7 +80,7 @@ const init = () => {
         CommonUtil.logInfo("Vue is ready");
         CommonUtil.logInfo("User's preferred language is " + this.$i18n.locale);
         // Are we logged in already?
-		
+
 	    },
       mounted() {
         // Emitted from RegisterUserForm, meant for LoginSystem
diff --git a/src/router/index.js b/src/router/index.js
index 7475b7284a3588822bcb2583a6d9c52f3c78b7a3..b7f0d72daa630c639fbdc91a4b27eac7fe3f05f8 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -2,6 +2,8 @@ import Vue from 'vue'
 import Router from 'vue-router'
 import Welcome from '@/components/Welcome'
 import ObservationList from '@/components/ObservationList'
+import ObservationTimeSeries from '@/components/ObservationTimeSeries'
+import ObservationTimeSeriesList from '@/components/ObservationTimeSeriesList'
 import PlacesList from '@/components/PlacesList'
 import Settings from '@/components/Settings'
 import Observation from '@/components/Observation'
@@ -12,7 +14,6 @@ import Quantification from '@/components/Quantification'
 import RegisterUserForm from '@/components/RegisterUserForm'
 import DeleteUserForm from '@/components/DeleteUserForm'
 
-
 Vue.use(Router)
 
 const router = new Router({
@@ -21,12 +22,24 @@ const router = new Router({
       path: '/welcome',
       name: 'Welcome',
       component: Welcome
-    }, 
+    },
      {
       path: '/',
       name: 'ObservationList',
       component: ObservationList
-    }, 
+    },
+    {
+      path: '/observationTimeSeriesList',
+      name: 'ObservationTimeSeriesList',
+      component: ObservationTimeSeriesList,
+      props:true
+    },
+    {
+      path: '/observationTimeSeries',
+      name: 'ObservationTimeSeries',
+      component: ObservationTimeSeries,
+      props:true
+    },
     {
       path: '/places',
       name: 'PlacesList',
@@ -56,7 +69,8 @@ const router = new Router({
     {
       path : '/MapPOI',
       name : 'MapPOI',
-      component : MapPOI
+      component : MapPOI,
+      props: true
     },
     {
       path : '/Quantification',
@@ -77,7 +91,7 @@ const router = new Router({
       path : '/logout',
       name : 'Logout',
       component : Welcome
-    },        
+    },
 
   ]
 })
diff --git a/static/css/bootstrap.min.css b/static/css/bootstrap.min.css
index ef399d21ce7e2d18d0a931ea90c65461ff40a103..39934146ffdc3af1e17b83657576b2d21f3cbecd 100644
--- a/static/css/bootstrap.min.css
+++ b/static/css/bootstrap.min.css
@@ -1,7 +1,6 @@
-/*!
- * Bootstrap v4.6.0 (https://getbootstrap.com/)
- * Copyright 2011-2021 The Bootstrap Authors
- * Copyright 2011-2021 Twitter, Inc.
+@charset "UTF-8";/*!
+ * Bootstrap  v5.3.3 (https://getbootstrap.com/)
+ * Copyright 2011-2024 The Bootstrap Authors
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.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:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.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(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.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") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%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(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%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") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;overflow:hidden;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50%/100% 100% no-repeat}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.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:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;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-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{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-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.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:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;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:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;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:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;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:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;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:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;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:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";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;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";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;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;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:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.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}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!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:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!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;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.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}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.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}.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}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}
+ */:root,[data-bs-theme=light]{--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-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--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-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--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-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width:0.25rem;--bs-focus-ring-opacity:0.25;--bs-focus-ring-color:rgba(13, 110, 253, 0.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}*,::after,::before{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:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}.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 + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .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}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.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:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,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}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button: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:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::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:.5rem}.initialism{font-size:.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:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.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(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-emphasis-color);--bs-table-striped-bg:rgba(var(--bs-emphasis-color-rgb), 0.05);--bs-table-active-color:var(--bs-emphasis-color);--bs-table-active-bg:rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-table-hover-color:var(--bs-emphasis-color);--bs-table-hover-bg:rgba(var(--bs-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.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-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#a6b5cc;--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:#b5b6b7;--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:#a7b9b1;--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:#a6c3ca;--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:#ccc2a4;--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:#c6acae;--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:#c6c7c8;--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:#4d5154;--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:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .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:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-moz-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: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");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon,none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.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{--bs-form-check-bg:var(--bs-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.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 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-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]{--bs-form-check-bg-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;--bs-form-check-bg-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:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: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");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: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;--bs-form-switch-bg: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:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;-webkit-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@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:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;-moz-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@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:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .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 .75rem}.form-floating>.form-control-plaintext::-moz-placeholder,.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:not(:-moz-placeholder-shown),.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:not(:-moz-placeholder-shown)~label::after{position:absolute;inset:1rem 0.375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control-plaintext~label::after,.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem 0.375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#6c757d}.form-floating>.form-control:disabled~label::after,.form-floating>:disabled~label::after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{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:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.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,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.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,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){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:calc(var(--bs-border-width) * -1);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:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .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(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: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");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .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(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: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");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):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:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--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 .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .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,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{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,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{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:0 0 0 #000;--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-group-lg>.btn,.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.fade{transition:opacity .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 .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.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:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:var(--bs-box-shadow);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--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:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.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:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.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:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.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;border-radius:var(--bs-dropdown-item-border-radius,0)}.dropdown-item:focus,.dropdown-item:hover{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:.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-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(var(--bs-border-width) * -1)}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.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-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.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:var(--bs-secondary-color);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;background:0 0;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);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));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:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{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:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.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-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:0.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{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(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb), 1);--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(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb), 1);--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%2833, 37, 41, 0.75%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(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--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-lg,.navbar>.container-md,.navbar>.container-sm,.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:focus,.navbar-brand:hover{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 .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{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,.navbar[data-bs-theme=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")}[data-bs-theme=dark] .navbar-toggler-icon{--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-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--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);color:var(--bs-body-color);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);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.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(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.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(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.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-bottom,.card-img-top{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-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{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-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--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:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--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='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%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='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");--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:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.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;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-header .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-header .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-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-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}.accordion-flush>.accordion-item>.accordion-collapse{border-radius:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%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-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%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")}.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:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);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, "/")}.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:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--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:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);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 .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .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)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{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:calc(var(--bs-border-width) * -1)}.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:var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.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:var(--bs-border-radius);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:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);--bs-alert-link-color:inherit;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;color:var(--bs-alert-link-color)}.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:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color:var(--bs-success-text-emphasis);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color:var(--bs-info-text-emphasis);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color:var(--bs-warning-text-emphasis);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--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,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.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:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--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:focus,.list-group-item-action:hover{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{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg: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");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;--bs-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.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(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);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:-webkit-max-content;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(-.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:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:var(--bs-box-shadow-sm);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--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:var(--bs-border-width);--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:var(--bs-border-width);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 .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;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) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.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) * .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) * .5)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:var(--bs-box-shadow)}.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-footer,.modal-fullscreen .modal-header{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-footer,.modal-fullscreen-sm-down .modal-header{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-footer,.modal-fullscreen-md-down .modal-header{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-footer,.modal-fullscreen-lg-down .modal-header{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-footer,.modal-fullscreen-xl-down .modal-header{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-footer,.modal-fullscreen-xxl-down .modal-header{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:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--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;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-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.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:var(--bs-body-bg);--bs-popover-border-width:var(--bs-border-width);--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow:var(--bs-box-shadow);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color:inherit;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--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::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-top>.popover-arrow::before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.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-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-end>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::before{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.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-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-start>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.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 .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{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:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.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%}.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:.5;transition:opacity .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-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-border,.spinner-grow{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)}}.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-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--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:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:var(--bs-box-shadow-sm);--bs-offcanvas-transition:transform 0.3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@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:var(--bs-offcanvas-transition)}}@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%)}.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%)}.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%)}.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%)}.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{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:var(--bs-offcanvas-transition)}}@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%)}.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%)}.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%)}.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%)}.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{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:var(--bs-offcanvas-transition)}}@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%)}.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%)}.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%)}.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%)}.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{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:var(--bs-offcanvas-transition)}}@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%)}.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%)}.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%)}.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%)}.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{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:var(--bs-offcanvas-transition)}}@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%)}.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%)}.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%)}.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%)}.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{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:var(--bs-offcanvas-transition)}@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.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{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:.5}.offcanvas-header{display:flex;align-items:center;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin:calc(-.5 * var(--bs-offcanvas-padding-y)) calc(-.5 * var(--bs-offcanvas-padding-x)) calc(-.5 * var(--bs-offcanvas-padding-y)) auto}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.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:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.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(var(--bs-primary-rgb),var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(var(--bs-secondary-rgb),var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(var(--bs-success-rgb),var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(var(--bs-danger-rgb),var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(var(--bs-light-rgb),var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(var(--bs-dark-rgb),var(--bs-bg-opacity,1))!important}.link-primary{color:RGBA(var(--bs-primary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:RGBA(10,88,202,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--bs-secondary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,94,100,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--bs-success-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:RGBA(20,108,67,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(61,213,243,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(255,205,57,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--bs-danger-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:RGBA(176,42,55,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:RGBA(249,250,251,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--bs-dark-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:RGBA(26,30,33,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,.75))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,0.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,0.75))!important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,0.5));text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,0.5));text-underline-offset:0.25em;-webkit-backface-visibility:hidden;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media (prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:var(--bs-icon-link-transform,translate3d(.25em,0,0))}.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:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;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){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}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!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:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.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}.object-fit-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.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}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y: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-inline-grid{display:inline-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:var(--bs-box-shadow)!important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--bs-focus-ring-color:rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color:rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color:rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color:rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color:rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color:rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color:rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color:rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;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-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-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-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.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:.25rem!important}.m-2{margin:.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:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.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:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.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:.25rem!important}.mt-2{margin-top:.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:.25rem!important}.me-2{margin-right:.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:.25rem!important}.mb-2{margin-bottom:.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:.25rem!important}.ms-2{margin-left:.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:.25rem!important}.p-2{padding:.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:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.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:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.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:.25rem!important}.pt-2{padding-top:.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:.25rem!important}.pe-2{padding-right:.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:.25rem!important}.pb-2{padding-bottom:.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:.25rem!important}.ps-2{padding-left:.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:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:3rem!important;column-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 + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .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-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!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}.text-break{word-wrap:break-word!important;word-break:break-word!important}.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:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!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}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10{--bs-link-opacity:0.1}.link-opacity-10-hover:hover{--bs-link-opacity:0.1}.link-opacity-25{--bs-link-opacity:0.25}.link-opacity-25-hover:hover{--bs-link-opacity:0.25}.link-opacity-50{--bs-link-opacity:0.5}.link-opacity-50-hover:hover{--bs-link-opacity:0.5}.link-opacity-75{--bs-link-opacity:0.75}.link-opacity-75-hover:hover{--bs-link-opacity:0.75}.link-opacity-100{--bs-link-opacity:1}.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-offset-1{text-underline-offset:0.125em!important}.link-offset-1-hover:hover{text-underline-offset:0.125em!important}.link-offset-2{text-underline-offset:0.25em!important}.link-offset-2-hover:hover{text-underline-offset:0.25em!important}.link-offset-3{text-underline-offset:0.375em!important}.link-offset-3-hover:hover{text-underline-offset:0.375em!important}.link-underline-primary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important}.link-underline-info{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-underline-opacity-0{--bs-link-underline-opacity:0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10{--bs-link-underline-opacity:0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:0.1}.link-underline-opacity-25{--bs-link-underline-opacity:0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:0.25}.link-underline-opacity-50{--bs-link-underline-opacity:0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:0.5}.link-underline-opacity-75{--bs-link-underline-opacity:0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:0.75}.link-underline-opacity-100{--bs-link-underline-opacity:1}.link-underline-opacity-100-hover:hover{--bs-link-underline-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-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!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-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.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-xxl)!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-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit: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-inline-grid{display:inline-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:.25rem!important}.m-sm-2{margin:.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:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.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:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.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:.25rem!important}.mt-sm-2{margin-top:.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:.25rem!important}.me-sm-2{margin-right:.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:.25rem!important}.mb-sm-2{margin-bottom:.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:.25rem!important}.ms-sm-2{margin-left:.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:.25rem!important}.p-sm-2{padding:.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:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.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:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.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:.25rem!important}.pt-sm-2{padding-top:.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:.25rem!important}.pe-sm-2{padding-right:.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:.25rem!important}.pb-sm-2{padding-bottom:.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:.25rem!important}.ps-sm-2{padding-left:.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:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-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}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit: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-inline-grid{display:inline-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:.25rem!important}.m-md-2{margin:.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:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.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:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.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:.25rem!important}.mt-md-2{margin-top:.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:.25rem!important}.me-md-2{margin-right:.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:.25rem!important}.mb-md-2{margin-bottom:.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:.25rem!important}.ms-md-2{margin-left:.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:.25rem!important}.p-md-2{padding:.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:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.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:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.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:.25rem!important}.pt-md-2{padding-top:.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:.25rem!important}.pe-md-2{padding-right:.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:.25rem!important}.pb-md-2{padding-bottom:.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:.25rem!important}.ps-md-2{padding-left:.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:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-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}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit: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-inline-grid{display:inline-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:.25rem!important}.m-lg-2{margin:.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:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.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:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.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:.25rem!important}.mt-lg-2{margin-top:.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:.25rem!important}.me-lg-2{margin-right:.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:.25rem!important}.mb-lg-2{margin-bottom:.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:.25rem!important}.ms-lg-2{margin-left:.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:.25rem!important}.p-lg-2{padding:.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:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.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:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.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:.25rem!important}.pt-lg-2{padding-top:.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:.25rem!important}.pe-lg-2{padding-right:.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:.25rem!important}.pb-lg-2{padding-bottom:.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:.25rem!important}.ps-lg-2{padding-left:.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:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-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}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit: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-inline-grid{display:inline-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:.25rem!important}.m-xl-2{margin:.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:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.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:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.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:.25rem!important}.mt-xl-2{margin-top:.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:.25rem!important}.me-xl-2{margin-right:.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:.25rem!important}.mb-xl-2{margin-bottom:.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:.25rem!important}.ms-xl-2{margin-left:.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:.25rem!important}.p-xl-2{padding:.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:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.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:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.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:.25rem!important}.pt-xl-2{padding-top:.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:.25rem!important}.pe-xl-2{padding-right:.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:.25rem!important}.pb-xl-2{padding-bottom:.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:.25rem!important}.ps-xl-2{padding-left:.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:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-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}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit: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-inline-grid{display:inline-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:.25rem!important}.m-xxl-2{margin:.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:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.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:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.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:.25rem!important}.mt-xxl-2{margin-top:.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:.25rem!important}.me-xxl-2{margin-right:.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:.25rem!important}.mb-xxl-2{margin-bottom:.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:.25rem!important}.ms-xxl-2{margin-left:.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:.25rem!important}.p-xxl-2{padding:.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:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.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:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.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:.25rem!important}.pt-xxl-2{padding-top:.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:.25rem!important}.pe-xxl-2{padding-right:.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:.25rem!important}.pb-xxl-2{padding-bottom:.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:.25rem!important}.ps-xxl-2{padding-left:.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:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-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-inline-grid{display:inline-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}}
 /*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/static/css/vipsobsapp.css b/static/css/vipsobsapp.css
index a8186a89b52e76551d153768db3a0a5ac19cd7e4..3c3e42c08bf9990c861ce9f0b34e0c636bd8f71b 100644
--- a/static/css/vipsobsapp.css
+++ b/static/css/vipsobsapp.css
@@ -1,11 +1,25 @@
+body {
+  font-family: 'Avenir', Helvetica, Arial, sans-serif;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  color: #2c3e50;
+  margin-top: 20px;
+}
+
 .navbar {
-	background-color: #3d8052 !important;
+  background-color: #3d8052 !important;
 }
 
 .offcanvas-collapse {
 	background-color: white;
 	border-left: 1px solid #3d8052;
-	
+
+}
+
+.list-label {
+  font-family: monospace;
+  color: grey;
+  font-size: 0.8rem;
 }
 
 a.nav-link{
@@ -33,7 +47,15 @@ a.nav-link{
 	border-color: #3d80529a;
 }
 
+.form-icon {
+  font-size: large;
+  vertical-align:middle;
+  margin-right: 5px;
+  margin-bottom: 4px;
+}
+
 a.vips-btn {
+	text-decoration: none !important;
 	background-color: #3d8052;
 	color: white;
 	padding: 8px 10px 6px 10px;
@@ -41,7 +63,7 @@ a.vips-btn {
 	cursor: pointer;
 	display: inline-block;
 	font-weight:bold;
-	width: 120px;
+	width: 124px;
 	text-align: center;
 	font-size: smaller;
 }
@@ -50,6 +72,10 @@ a.vips-btn.danger {
 	background-color: #F0564D;
 }
 
+a.vips-btn.large {
+  width: 170px;
+}
+
 a.vips-btn.medium {
 	width: 90px;
 }
@@ -58,6 +84,18 @@ a.vips-btn.small {
 	width: 60px;
 }
 
+.icon {
+	font-size: 1.5rem;
+	color: #3d8052;
+	margin-left: 5px !important;
+}
+
+.badge {
+	font-size: 0.8rem;
+	background-color: #3d8052 !important;
+	margin-left: 5px;
+}
+
 div.addItem {
 		position: fixed;
 		bottom: 25px;
@@ -78,5 +116,4 @@ div.addItem button {
   border-radius: 5px;
   margin-top: 10px;
   background-color: #badec5;
-}	
-	
\ No newline at end of file
+}
diff --git a/static/js/bootstrap.bundle.min.js b/static/js/bootstrap.bundle.min.js
index 7961bdaf8e0e91721bc5832cdca1df128bad1b27..04e9185bd638bb11ef576be7b8439f2a7bdcb05e 100644
--- a/static/js/bootstrap.bundle.min.js
+++ b/static/js/bootstrap.bundle.min.js
@@ -1,7 +1,7 @@
 /*!
-  * Bootstrap v4.6.0 (https://getbootstrap.com/)
-  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Bootstrap v5.3.3 (https://getbootstrap.com/)
+  * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
   */
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap={},t.jQuery)}(this,(function(t,e){"use strict";function n(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var i=n(e);function o(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function r(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}function a(){return(a=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t}).apply(this,arguments)}function s(t){var e=this,n=!1;return i.default(this).one(l.TRANSITION_END,(function(){n=!0})),setTimeout((function(){n||l.triggerTransitionEnd(e)}),t),this}var l={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=i.default(t).css("transition-duration"),n=i.default(t).css("transition-delay"),o=parseFloat(e),r=parseFloat(n);return o||r?(e=e.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(e)+parseFloat(n))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){i.default(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=e[i],a=r&&l.isElement(r)?"element":null===(s=r)||"undefined"==typeof s?""+s:{}.toString.call(s).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(a))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+a+'" but expected type "'+o+'".')}var s},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?l.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof i.default)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=i.default.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};l.jQueryDetection(),i.default.fn.emulateTransitionEnd=s,i.default.event.special[l.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(i.default(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var u="alert",f=i.default.fn[u],d=function(){function t(t){this._element=t}var e=t.prototype;return e.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},e.dispose=function(){i.default.removeData(this._element,"bs.alert"),this._element=null},e._getRootElement=function(t){var e=l.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=i.default(t).closest(".alert")[0]),n},e._triggerCloseEvent=function(t){var e=i.default.Event("close.bs.alert");return i.default(t).trigger(e),e},e._removeElement=function(t){var e=this;if(i.default(t).removeClass("show"),i.default(t).hasClass("fade")){var n=l.getTransitionDurationFromElement(t);i.default(t).one(l.TRANSITION_END,(function(n){return e._destroyElement(t,n)})).emulateTransitionEnd(n)}else this._destroyElement(t)},e._destroyElement=function(t){i.default(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.alert");o||(o=new t(this),n.data("bs.alert",o)),"close"===e&&o[e](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}}]),t}();i.default(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',d._handleDismiss(new d)),i.default.fn[u]=d._jQueryInterface,i.default.fn[u].Constructor=d,i.default.fn[u].noConflict=function(){return i.default.fn[u]=f,d._jQueryInterface};var c=i.default.fn.button,h=function(){function t(t){this._element=t,this.shouldAvoidTriggerChange=!1}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,n=i.default(this._element).closest('[data-toggle="buttons"]')[0];if(n){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var r=n.querySelector(".active");r&&i.default(r).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),this.shouldAvoidTriggerChange||i.default(o).trigger("change")),o.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&i.default(this._element).toggleClass("active"))},e.dispose=function(){i.default.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(e,n){return this.each((function(){var o=i.default(this),r=o.data("bs.button");r||(r=new t(this),o.data("bs.button",r)),r.shouldAvoidTriggerChange=n,"toggle"===e&&r[e]()}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}}]),t}();i.default(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=t.target,n=e;if(i.default(e).hasClass("btn")||(e=i.default(e).closest(".btn")[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var o=e.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();"INPUT"!==n.tagName&&"LABEL"===e.tagName||h._jQueryInterface.call(i.default(e),"toggle","INPUT"===n.tagName)}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=i.default(t.target).closest(".btn")[0];i.default(e).toggleClass("focus",/^focus(in)?$/.test(t.type))})),i.default(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}for(var r=0,a=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;r<a;r++){var s=t[r];"true"===s.getAttribute("aria-pressed")?s.classList.add("active"):s.classList.remove("active")}})),i.default.fn.button=h._jQueryInterface,i.default.fn.button.Constructor=h,i.default.fn.button.noConflict=function(){return i.default.fn.button=c,h._jQueryInterface};var p="carousel",m=".bs.carousel",g=i.default.fn[p],v={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},_={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},b={TOUCH:"touch",PEN:"pen"},y=function(){function t(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var e=t.prototype;return e.next=function(){this._isSliding||this._slide("next")},e.nextWhenVisible=function(){var t=i.default(this._element);!document.hidden&&t.is(":visible")&&"hidden"!==t.css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide("prev")},e.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(l.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.to=function(t){var e=this;this._activeElement=this._element.querySelector(".active.carousel-item");var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)i.default(this._element).one("slid.bs.carousel",(function(){return e.to(t)}));else{if(n===t)return this.pause(),void this.cycle();var o=t>n?"next":"prev";this._slide(o,this._items[t])}},e.dispose=function(){i.default(this._element).off(m),i.default.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(t){return t=a({},v,t),l.typeCheckConfig(p,t,_),t},e._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},e._addEventListeners=function(){var t=this;this._config.keyboard&&i.default(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&i.default(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},e._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var e=function(e){t._pointerEvent&&b[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},n=function(e){t._pointerEvent&&b[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};i.default(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(i.default(this._element).on("pointerdown.bs.carousel",(function(t){return e(t)})),i.default(this._element).on("pointerup.bs.carousel",(function(t){return n(t)})),this._element.classList.add("pointer-event")):(i.default(this._element).on("touchstart.bs.carousel",(function(t){return e(t)})),i.default(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),i.default(this._element).on("touchend.bs.carousel",(function(t){return n(t)})))}},e._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},e._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},e._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var a=(o+("prev"===t?-1:1))%this._items.length;return-1===a?this._items[this._items.length-1]:this._items[a]},e._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),r=i.default.Event("slide.bs.carousel",{relatedTarget:t,direction:e,from:o,to:n});return i.default(this._element).trigger(r),r},e._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));i.default(e).removeClass("active");var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&i.default(n).addClass("active")}},e._updateInterval=function(){var t=this._activeElement||this._element.querySelector(".active.carousel-item");if(t){var e=parseInt(t.getAttribute("data-interval"),10);e?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=e):this._config.interval=this._config.defaultInterval||this._config.interval}},e._slide=function(t,e){var n,o,r,a=this,s=this._element.querySelector(".active.carousel-item"),u=this._getItemIndex(s),f=e||s&&this._getItemByDirection(t,s),d=this._getItemIndex(f),c=Boolean(this._interval);if("next"===t?(n="carousel-item-left",o="carousel-item-next",r="left"):(n="carousel-item-right",o="carousel-item-prev",r="right"),f&&i.default(f).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(f,r).isDefaultPrevented()&&s&&f){this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(f),this._activeElement=f;var h=i.default.Event("slid.bs.carousel",{relatedTarget:f,direction:r,from:u,to:d});if(i.default(this._element).hasClass("slide")){i.default(f).addClass(o),l.reflow(f),i.default(s).addClass(n),i.default(f).addClass(n);var p=l.getTransitionDurationFromElement(s);i.default(s).one(l.TRANSITION_END,(function(){i.default(f).removeClass(n+" "+o).addClass("active"),i.default(s).removeClass("active "+o+" "+n),a._isSliding=!1,setTimeout((function(){return i.default(a._element).trigger(h)}),0)})).emulateTransitionEnd(p)}else i.default(s).removeClass("active"),i.default(f).addClass("active"),this._isSliding=!1,i.default(this._element).trigger(h);c&&this.cycle()}},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this).data("bs.carousel"),o=a({},v,i.default(this).data());"object"==typeof e&&(o=a({},o,e));var r="string"==typeof e?e:o.slide;if(n||(n=new t(this,o),i.default(this).data("bs.carousel",n)),"number"==typeof e)n.to(e);else if("string"==typeof r){if("undefined"==typeof n[r])throw new TypeError('No method named "'+r+'"');n[r]()}else o.interval&&o.ride&&(n.pause(),n.cycle())}))},t._dataApiClickHandler=function(e){var n=l.getSelectorFromElement(this);if(n){var o=i.default(n)[0];if(o&&i.default(o).hasClass("carousel")){var r=a({},i.default(o).data(),i.default(this).data()),s=this.getAttribute("data-slide-to");s&&(r.interval=!1),t._jQueryInterface.call(i.default(o),r),s&&i.default(o).data("bs.carousel").to(s),e.preventDefault()}}},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return v}}]),t}();i.default(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",y._dataApiClickHandler),i.default(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),e=0,n=t.length;e<n;e++){var o=i.default(t[e]);y._jQueryInterface.call(o,o.data())}})),i.default.fn[p]=y._jQueryInterface,i.default.fn[p].Constructor=y,i.default.fn[p].noConflict=function(){return i.default.fn[p]=g,y._jQueryInterface};var w="collapse",E=i.default.fn[w],T={toggle:!0,parent:""},C={toggle:"boolean",parent:"(string|element)"},S=function(){function t(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]')),i=0,o=n.length;i<o;i++){var r=n[i],a=l.getSelectorFromElement(r),s=[].slice.call(document.querySelectorAll(a)).filter((function(e){return e===t}));null!==a&&s.length>0&&(this._selector=a,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e=t.prototype;return e.toggle=function(){i.default(this._element).hasClass("show")?this.hide():this.show()},e.show=function(){var e,n,o=this;if(!this._isTransitioning&&!i.default(this._element).hasClass("show")&&(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(e=null),!(e&&(n=i.default(e).not(this._selector).data("bs.collapse"))&&n._isTransitioning))){var r=i.default.Event("show.bs.collapse");if(i.default(this._element).trigger(r),!r.isDefaultPrevented()){e&&(t._jQueryInterface.call(i.default(e).not(this._selector),"hide"),n||i.default(e).data("bs.collapse",null));var a=this._getDimension();i.default(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[a]=0,this._triggerArray.length&&i.default(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var s="scroll"+(a[0].toUpperCase()+a.slice(1)),u=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,(function(){i.default(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[a]="",o.setTransitioning(!1),i.default(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(u),this._element.style[a]=this._element[s]+"px"}}},e.hide=function(){var t=this;if(!this._isTransitioning&&i.default(this._element).hasClass("show")){var e=i.default.Event("hide.bs.collapse");if(i.default(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",l.reflow(this._element),i.default(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var r=0;r<o;r++){var a=this._triggerArray[r],s=l.getSelectorFromElement(a);if(null!==s)i.default([].slice.call(document.querySelectorAll(s))).hasClass("show")||i.default(a).addClass("collapsed").attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var u=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,(function(){t.setTransitioning(!1),i.default(t._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(u)}}},e.setTransitioning=function(t){this._isTransitioning=t},e.dispose=function(){i.default.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},e._getConfig=function(t){return(t=a({},T,t)).toggle=Boolean(t.toggle),l.typeCheckConfig(w,t,C),t},e._getDimension=function(){return i.default(this._element).hasClass("width")?"width":"height"},e._getParent=function(){var e,n=this;l.isElement(this._config.parent)?(e=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(e=this._config.parent[0])):e=document.querySelector(this._config.parent);var o='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',r=[].slice.call(e.querySelectorAll(o));return i.default(r).each((function(e,i){n._addAriaAndCollapsedClass(t._getTargetFromElement(i),[i])})),e},e._addAriaAndCollapsedClass=function(t,e){var n=i.default(t).hasClass("show");e.length&&i.default(e).toggleClass("collapsed",!n).attr("aria-expanded",n)},t._getTargetFromElement=function(t){var e=l.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.collapse"),r=a({},T,n.data(),"object"==typeof e&&e?e:{});if(!o&&r.toggle&&"string"==typeof e&&/show|hide/.test(e)&&(r.toggle=!1),o||(o=new t(this,r),n.data("bs.collapse",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return T}}]),t}();i.default(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var e=i.default(this),n=l.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(n));i.default(o).each((function(){var t=i.default(this),n=t.data("bs.collapse")?"toggle":e.data();S._jQueryInterface.call(t,n)}))})),i.default.fn[w]=S._jQueryInterface,i.default.fn[w].Constructor=S,i.default.fn[w].noConflict=function(){return i.default.fn[w]=E,S._jQueryInterface};var D="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,N=function(){for(var t=["Edge","Trident","Firefox"],e=0;e<t.length;e+=1)if(D&&navigator.userAgent.indexOf(t[e])>=0)return 1;return 0}();var k=D&&window.Promise?function(t){var e=!1;return function(){e||(e=!0,window.Promise.resolve().then((function(){e=!1,t()})))}}:function(t){var e=!1;return function(){e||(e=!0,setTimeout((function(){e=!1,t()}),N))}};function A(t){return t&&"[object Function]"==={}.toString.call(t)}function I(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function O(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function x(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=I(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?t:x(O(t))}function j(t){return t&&t.referenceNode?t.referenceNode:t}var L=D&&!(!window.MSInputMethodContext||!document.documentMode),P=D&&/MSIE 10/.test(navigator.userAgent);function F(t){return 11===t?L:10===t?P:L||P}function R(t){if(!t)return document.documentElement;for(var e=F(10)?document.body:null,n=t.offsetParent||null;n===e&&t.nextElementSibling;)n=(t=t.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===I(n,"position")?R(n):n:t?t.ownerDocument.documentElement:document.documentElement}function H(t){return null!==t.parentNode?H(t.parentNode):t}function M(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;var n=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?t:e,o=n?e:t,r=document.createRange();r.setStart(i,0),r.setEnd(o,0);var a,s,l=r.commonAncestorContainer;if(t!==l&&e!==l||i.contains(o))return"BODY"===(s=(a=l).nodeName)||"HTML"!==s&&R(a.firstElementChild)!==a?R(l):l;var u=H(t);return u.host?M(u.host,e):M(t,H(e).host)}function q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===e?"scrollTop":"scrollLeft",i=t.nodeName;if("BODY"===i||"HTML"===i){var o=t.ownerDocument.documentElement,r=t.ownerDocument.scrollingElement||o;return r[n]}return t[n]}function B(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=q(e,"top"),o=q(e,"left"),r=n?-1:1;return t.top+=i*r,t.bottom+=i*r,t.left+=o*r,t.right+=o*r,t}function Q(t,e){var n="x"===e?"Left":"Top",i="Left"===n?"Right":"Bottom";return parseFloat(t["border"+n+"Width"])+parseFloat(t["border"+i+"Width"])}function W(t,e,n,i){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],F(10)?parseInt(n["offset"+t])+parseInt(i["margin"+("Height"===t?"Top":"Left")])+parseInt(i["margin"+("Height"===t?"Bottom":"Right")]):0)}function U(t){var e=t.body,n=t.documentElement,i=F(10)&&getComputedStyle(n);return{height:W("Height",e,n,i),width:W("Width",e,n,i)}}var V=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},Y=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),z=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},X=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t};function K(t){return X({},t,{right:t.left+t.width,bottom:t.top+t.height})}function G(t){var e={};try{if(F(10)){e=t.getBoundingClientRect();var n=q(t,"top"),i=q(t,"left");e.top+=n,e.left+=i,e.bottom+=n,e.right+=i}else e=t.getBoundingClientRect()}catch(t){}var o={left:e.left,top:e.top,width:e.right-e.left,height:e.bottom-e.top},r="HTML"===t.nodeName?U(t.ownerDocument):{},a=r.width||t.clientWidth||o.width,s=r.height||t.clientHeight||o.height,l=t.offsetWidth-a,u=t.offsetHeight-s;if(l||u){var f=I(t);l-=Q(f,"x"),u-=Q(f,"y"),o.width-=l,o.height-=u}return K(o)}function $(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=F(10),o="HTML"===e.nodeName,r=G(t),a=G(e),s=x(t),l=I(e),u=parseFloat(l.borderTopWidth),f=parseFloat(l.borderLeftWidth);n&&o&&(a.top=Math.max(a.top,0),a.left=Math.max(a.left,0));var d=K({top:r.top-a.top-u,left:r.left-a.left-f,width:r.width,height:r.height});if(d.marginTop=0,d.marginLeft=0,!i&&o){var c=parseFloat(l.marginTop),h=parseFloat(l.marginLeft);d.top-=u-c,d.bottom-=u-c,d.left-=f-h,d.right-=f-h,d.marginTop=c,d.marginLeft=h}return(i&&!n?e.contains(s):e===s&&"BODY"!==s.nodeName)&&(d=B(d,e)),d}function J(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.ownerDocument.documentElement,i=$(t,n),o=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),a=e?0:q(n),s=e?0:q(n,"left"),l={top:a-i.top+i.marginTop,left:s-i.left+i.marginLeft,width:o,height:r};return K(l)}function Z(t){var e=t.nodeName;if("BODY"===e||"HTML"===e)return!1;if("fixed"===I(t,"position"))return!0;var n=O(t);return!!n&&Z(n)}function tt(t){if(!t||!t.parentElement||F())return document.documentElement;for(var e=t.parentElement;e&&"none"===I(e,"transform");)e=e.parentElement;return e||document.documentElement}function et(t,e,n,i){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},a=o?tt(t):M(t,j(e));if("viewport"===i)r=J(a,o);else{var s=void 0;"scrollParent"===i?"BODY"===(s=x(O(e))).nodeName&&(s=t.ownerDocument.documentElement):s="window"===i?t.ownerDocument.documentElement:i;var l=$(s,a,o);if("HTML"!==s.nodeName||Z(a))r=l;else{var u=U(t.ownerDocument),f=u.height,d=u.width;r.top+=l.top-l.marginTop,r.bottom=f+l.top,r.left+=l.left-l.marginLeft,r.right=d+l.left}}var c="number"==typeof(n=n||0);return r.left+=c?n:n.left||0,r.top+=c?n:n.top||0,r.right-=c?n:n.right||0,r.bottom-=c?n:n.bottom||0,r}function nt(t){return t.width*t.height}function it(t,e,n,i,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var a=et(n,i,r,o),s={top:{width:a.width,height:e.top-a.top},right:{width:a.right-e.right,height:a.height},bottom:{width:a.width,height:a.bottom-e.bottom},left:{width:e.left-a.left,height:a.height}},l=Object.keys(s).map((function(t){return X({key:t},s[t],{area:nt(s[t])})})).sort((function(t,e){return e.area-t.area})),u=l.filter((function(t){var e=t.width,i=t.height;return e>=n.clientWidth&&i>=n.clientHeight})),f=u.length>0?u[0].key:l[0].key,d=t.split("-")[1];return f+(d?"-"+d:"")}function ot(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,o=i?tt(e):M(e,j(n));return $(n,o,i)}function rt(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),n=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),i=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:t.offsetWidth+i,height:t.offsetHeight+n}}function at(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,(function(t){return e[t]}))}function st(t,e,n){n=n.split("-")[0];var i=rt(t),o={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),a=r?"top":"left",s=r?"left":"top",l=r?"height":"width",u=r?"width":"height";return o[a]=e[a]+e[l]/2-i[l]/2,o[s]=n===s?e[s]-i[u]:e[at(s)],o}function lt(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function ut(t,e,n){return(void 0===n?t:t.slice(0,function(t,e,n){if(Array.prototype.findIndex)return t.findIndex((function(t){return t[e]===n}));var i=lt(t,(function(t){return t[e]===n}));return t.indexOf(i)}(t,"name",n))).forEach((function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=t.function||t.fn;t.enabled&&A(n)&&(e.offsets.popper=K(e.offsets.popper),e.offsets.reference=K(e.offsets.reference),e=n(e,t))})),e}function ft(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=ot(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=it(this.options.placement,t.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),t.originalPlacement=t.placement,t.positionFixed=this.options.positionFixed,t.offsets.popper=st(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=ut(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}function dt(t,e){return t.some((function(t){var n=t.name;return t.enabled&&n===e}))}function ct(t){for(var e=[!1,"ms","Webkit","Moz","O"],n=t.charAt(0).toUpperCase()+t.slice(1),i=0;i<e.length;i++){var o=e[i],r=o?""+o+n:t;if("undefined"!=typeof document.body.style[r])return r}return null}function ht(){return this.state.isDestroyed=!0,dt(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[ct("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function pt(t){var e=t.ownerDocument;return e?e.defaultView:window}function mt(t,e,n,i){n.updateBound=i,pt(t).addEventListener("resize",n.updateBound,{passive:!0});var o=x(t);return function t(e,n,i,o){var r="BODY"===e.nodeName,a=r?e.ownerDocument.defaultView:e;a.addEventListener(n,i,{passive:!0}),r||t(x(a.parentNode),n,i,o),o.push(a)}(o,"scroll",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function gt(){this.state.eventsEnabled||(this.state=mt(this.reference,this.options,this.state,this.scheduleUpdate))}function vt(){var t,e;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(t=this.reference,e=this.state,pt(t).removeEventListener("resize",e.updateBound),e.scrollParents.forEach((function(t){t.removeEventListener("scroll",e.updateBound)})),e.updateBound=null,e.scrollParents=[],e.scrollElement=null,e.eventsEnabled=!1,e))}function _t(t){return""!==t&&!isNaN(parseFloat(t))&&isFinite(t)}function bt(t,e){Object.keys(e).forEach((function(n){var i="";-1!==["width","height","top","right","bottom","left"].indexOf(n)&&_t(e[n])&&(i="px"),t.style[n]=e[n]+i}))}var yt=D&&/Firefox/i.test(navigator.userAgent);function wt(t,e,n){var i=lt(t,(function(t){return t.name===e})),o=!!i&&t.some((function(t){return t.name===n&&t.enabled&&t.order<i.order}));if(!o){var r="`"+e+"`",a="`"+n+"`";console.warn(a+" modifier is required by "+r+" modifier in order to work, be sure to include it before "+r+"!")}return o}var Et=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],Tt=Et.slice(3);function Ct(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Tt.indexOf(t),i=Tt.slice(n+1).concat(Tt.slice(0,n));return e?i.reverse():i}var St="flip",Dt="clockwise",Nt="counterclockwise";function kt(t,e,n,i){var o=[0,0],r=-1!==["right","left"].indexOf(i),a=t.split(/(\+|\-)/).map((function(t){return t.trim()})),s=a.indexOf(lt(a,(function(t){return-1!==t.search(/,|\s/)})));a[s]&&-1===a[s].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,u=-1!==s?[a.slice(0,s).concat([a[s].split(l)[0]]),[a[s].split(l)[1]].concat(a.slice(s+1))]:[a];return(u=u.map((function(t,i){var o=(1===i?!r:r)?"height":"width",a=!1;return t.reduce((function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,a=!0,t):a?(t[t.length-1]+=e,a=!1,t):t.concat(e)}),[]).map((function(t){return function(t,e,n,i){var o=t.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],a=o[2];if(!r)return t;if(0===a.indexOf("%")){var s=void 0;switch(a){case"%p":s=n;break;case"%":case"%r":default:s=i}return K(s)[e]/100*r}if("vh"===a||"vw"===a)return("vh"===a?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r;return r}(t,o,e,n)}))}))).forEach((function(t,e){t.forEach((function(n,i){_t(n)&&(o[e]+=n*("-"===t[i-1]?-1:1))}))})),o}var At={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(t){var e=t.placement,n=e.split("-")[0],i=e.split("-")[1];if(i){var o=t.offsets,r=o.reference,a=o.popper,s=-1!==["bottom","top"].indexOf(n),l=s?"left":"top",u=s?"width":"height",f={start:z({},l,r[l]),end:z({},l,r[l]+r[u]-a[u])};t.offsets.popper=X({},a,f[i])}return t}},offset:{order:200,enabled:!0,fn:function(t,e){var n=e.offset,i=t.placement,o=t.offsets,r=o.popper,a=o.reference,s=i.split("-")[0],l=void 0;return l=_t(+n)?[+n,0]:kt(n,r,a,s),"left"===s?(r.top+=l[0],r.left-=l[1]):"right"===s?(r.top+=l[0],r.left+=l[1]):"top"===s?(r.left+=l[0],r.top-=l[1]):"bottom"===s&&(r.left+=l[0],r.top+=l[1]),t.popper=r,t},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(t,e){var n=e.boundariesElement||R(t.instance.popper);t.instance.reference===n&&(n=R(n));var i=ct("transform"),o=t.instance.popper.style,r=o.top,a=o.left,s=o[i];o.top="",o.left="",o[i]="";var l=et(t.instance.popper,t.instance.reference,e.padding,n,t.positionFixed);o.top=r,o.left=a,o[i]=s,e.boundaries=l;var u=e.priority,f=t.offsets.popper,d={primary:function(t){var n=f[t];return f[t]<l[t]&&!e.escapeWithReference&&(n=Math.max(f[t],l[t])),z({},t,n)},secondary:function(t){var n="right"===t?"left":"top",i=f[n];return f[t]>l[t]&&!e.escapeWithReference&&(i=Math.min(f[n],l[t]-("right"===t?f.width:f.height))),z({},n,i)}};return u.forEach((function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";f=X({},f,d[e](t))})),t.offsets.popper=f,t},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(t){var e=t.offsets,n=e.popper,i=e.reference,o=t.placement.split("-")[0],r=Math.floor,a=-1!==["top","bottom"].indexOf(o),s=a?"right":"bottom",l=a?"left":"top",u=a?"width":"height";return n[s]<r(i[l])&&(t.offsets.popper[l]=r(i[l])-n[u]),n[l]>r(i[s])&&(t.offsets.popper[l]=r(i[s])),t}},arrow:{order:500,enabled:!0,fn:function(t,e){var n;if(!wt(t.instance.modifiers,"arrow","keepTogether"))return t;var i=e.element;if("string"==typeof i){if(!(i=t.instance.popper.querySelector(i)))return t}else if(!t.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),t;var o=t.placement.split("-")[0],r=t.offsets,a=r.popper,s=r.reference,l=-1!==["left","right"].indexOf(o),u=l?"height":"width",f=l?"Top":"Left",d=f.toLowerCase(),c=l?"left":"top",h=l?"bottom":"right",p=rt(i)[u];s[h]-p<a[d]&&(t.offsets.popper[d]-=a[d]-(s[h]-p)),s[d]+p>a[h]&&(t.offsets.popper[d]+=s[d]+p-a[h]),t.offsets.popper=K(t.offsets.popper);var m=s[d]+s[u]/2-p/2,g=I(t.instance.popper),v=parseFloat(g["margin"+f]),_=parseFloat(g["border"+f+"Width"]),b=m-t.offsets.popper[d]-v-_;return b=Math.max(Math.min(a[u]-p,b),0),t.arrowElement=i,t.offsets.arrow=(z(n={},d,Math.round(b)),z(n,c,""),n),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(t,e){if(dt(t.instance.modifiers,"inner"))return t;if(t.flipped&&t.placement===t.originalPlacement)return t;var n=et(t.instance.popper,t.instance.reference,e.padding,e.boundariesElement,t.positionFixed),i=t.placement.split("-")[0],o=at(i),r=t.placement.split("-")[1]||"",a=[];switch(e.behavior){case St:a=[i,o];break;case Dt:a=Ct(i);break;case Nt:a=Ct(i,!0);break;default:a=e.behavior}return a.forEach((function(s,l){if(i!==s||a.length===l+1)return t;i=t.placement.split("-")[0],o=at(i);var u=t.offsets.popper,f=t.offsets.reference,d=Math.floor,c="left"===i&&d(u.right)>d(f.left)||"right"===i&&d(u.left)<d(f.right)||"top"===i&&d(u.bottom)>d(f.top)||"bottom"===i&&d(u.top)<d(f.bottom),h=d(u.left)<d(n.left),p=d(u.right)>d(n.right),m=d(u.top)<d(n.top),g=d(u.bottom)>d(n.bottom),v="left"===i&&h||"right"===i&&p||"top"===i&&m||"bottom"===i&&g,_=-1!==["top","bottom"].indexOf(i),b=!!e.flipVariations&&(_&&"start"===r&&h||_&&"end"===r&&p||!_&&"start"===r&&m||!_&&"end"===r&&g),y=!!e.flipVariationsByContent&&(_&&"start"===r&&p||_&&"end"===r&&h||!_&&"start"===r&&g||!_&&"end"===r&&m),w=b||y;(c||v||w)&&(t.flipped=!0,(c||v)&&(i=a[l+1]),w&&(r=function(t){return"end"===t?"start":"start"===t?"end":t}(r)),t.placement=i+(r?"-"+r:""),t.offsets.popper=X({},t.offsets.popper,st(t.instance.popper,t.offsets.reference,t.placement)),t=ut(t.instance.modifiers,t,"flip"))})),t},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(t){var e=t.placement,n=e.split("-")[0],i=t.offsets,o=i.popper,r=i.reference,a=-1!==["left","right"].indexOf(n),s=-1===["top","left"].indexOf(n);return o[a?"left":"top"]=r[n]-(s?o[a?"width":"height"]:0),t.placement=at(e),t.offsets.popper=K(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!wt(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,n=lt(t.instance.modifiers,(function(t){return"preventOverflow"===t.name})).boundaries;if(e.bottom<n.top||e.left>n.right||e.top>n.bottom||e.right<n.left){if(!0===t.hide)return t;t.hide=!0,t.attributes["x-out-of-boundaries"]=""}else{if(!1===t.hide)return t;t.hide=!1,t.attributes["x-out-of-boundaries"]=!1}return t}},computeStyle:{order:850,enabled:!0,fn:function(t,e){var n=e.x,i=e.y,o=t.offsets.popper,r=lt(t.instance.modifiers,(function(t){return"applyStyle"===t.name})).gpuAcceleration;void 0!==r&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var a=void 0!==r?r:e.gpuAcceleration,s=R(t.instance.popper),l=G(s),u={position:o.position},f=function(t,e){var n=t.offsets,i=n.popper,o=n.reference,r=Math.round,a=Math.floor,s=function(t){return t},l=r(o.width),u=r(i.width),f=-1!==["left","right"].indexOf(t.placement),d=-1!==t.placement.indexOf("-"),c=e?f||d||l%2==u%2?r:a:s,h=e?r:s;return{left:c(l%2==1&&u%2==1&&!d&&e?i.left-1:i.left),top:h(i.top),bottom:h(i.bottom),right:c(i.right)}}(t,window.devicePixelRatio<2||!yt),d="bottom"===n?"top":"bottom",c="right"===i?"left":"right",h=ct("transform"),p=void 0,m=void 0;if(m="bottom"===d?"HTML"===s.nodeName?-s.clientHeight+f.bottom:-l.height+f.bottom:f.top,p="right"===c?"HTML"===s.nodeName?-s.clientWidth+f.right:-l.width+f.right:f.left,a&&h)u[h]="translate3d("+p+"px, "+m+"px, 0)",u[d]=0,u[c]=0,u.willChange="transform";else{var g="bottom"===d?-1:1,v="right"===c?-1:1;u[d]=m*g,u[c]=p*v,u.willChange=d+", "+c}var _={"x-placement":t.placement};return t.attributes=X({},_,t.attributes),t.styles=X({},u,t.styles),t.arrowStyles=X({},t.offsets.arrow,t.arrowStyles),t},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(t){var e,n;return bt(t.instance.popper,t.styles),e=t.instance.popper,n=t.attributes,Object.keys(n).forEach((function(t){!1!==n[t]?e.setAttribute(t,n[t]):e.removeAttribute(t)})),t.arrowElement&&Object.keys(t.arrowStyles).length&&bt(t.arrowElement,t.arrowStyles),t},onLoad:function(t,e,n,i,o){var r=ot(o,e,t,n.positionFixed),a=it(n.placement,r,e,t,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return e.setAttribute("x-placement",a),bt(e,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},It=function(){function t(e,n){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};V(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(i.update)},this.update=k(this.update.bind(this)),this.options=X({},t.Defaults,o),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(X({},t.Defaults.modifiers,o.modifiers)).forEach((function(e){i.options.modifiers[e]=X({},t.Defaults.modifiers[e]||{},o.modifiers?o.modifiers[e]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(t){return X({name:t},i.options.modifiers[t])})).sort((function(t,e){return t.order-e.order})),this.modifiers.forEach((function(t){t.enabled&&A(t.onLoad)&&t.onLoad(i.reference,i.popper,i.options,t,i.state)})),this.update();var r=this.options.eventsEnabled;r&&this.enableEventListeners(),this.state.eventsEnabled=r}return Y(t,[{key:"update",value:function(){return ft.call(this)}},{key:"destroy",value:function(){return ht.call(this)}},{key:"enableEventListeners",value:function(){return gt.call(this)}},{key:"disableEventListeners",value:function(){return vt.call(this)}}]),t}();It.Utils=("undefined"!=typeof window?window:global).PopperUtils,It.placements=Et,It.Defaults=At;var Ot="dropdown",xt=i.default.fn[Ot],jt=new RegExp("38|40|27"),Lt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},Pt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},Ft=function(){function t(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var e=t.prototype;return e.toggle=function(){if(!this._element.disabled&&!i.default(this._element).hasClass("disabled")){var e=i.default(this._menu).hasClass("show");t._clearMenus(),e||this.show(!0)}},e.show=function(e){if(void 0===e&&(e=!1),!(this._element.disabled||i.default(this._element).hasClass("disabled")||i.default(this._menu).hasClass("show"))){var n={relatedTarget:this._element},o=i.default.Event("show.bs.dropdown",n),r=t._getParentFromElement(this._element);if(i.default(r).trigger(o),!o.isDefaultPrevented()){if(!this._inNavbar&&e){if("undefined"==typeof It)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");var a=this._element;"parent"===this._config.reference?a=r:l.isElement(this._config.reference)&&(a=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(a=this._config.reference[0])),"scrollParent"!==this._config.boundary&&i.default(r).addClass("position-static"),this._popper=new It(a,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===i.default(r).closest(".navbar-nav").length&&i.default(document.body).children().on("mouseover",null,i.default.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),i.default(this._menu).toggleClass("show"),i.default(r).toggleClass("show").trigger(i.default.Event("shown.bs.dropdown",n))}}},e.hide=function(){if(!this._element.disabled&&!i.default(this._element).hasClass("disabled")&&i.default(this._menu).hasClass("show")){var e={relatedTarget:this._element},n=i.default.Event("hide.bs.dropdown",e),o=t._getParentFromElement(this._element);i.default(o).trigger(n),n.isDefaultPrevented()||(this._popper&&this._popper.destroy(),i.default(this._menu).toggleClass("show"),i.default(o).toggleClass("show").trigger(i.default.Event("hidden.bs.dropdown",e)))}},e.dispose=function(){i.default.removeData(this._element,"bs.dropdown"),i.default(this._element).off(".bs.dropdown"),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},e.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},e._addEventListeners=function(){var t=this;i.default(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},e._getConfig=function(t){return t=a({},this.constructor.Default,i.default(this._element).data(),t),l.typeCheckConfig(Ot,t,this.constructor.DefaultType),t},e._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}return this._menu},e._getPlacement=function(){var t=i.default(this._element.parentNode),e="bottom-start";return t.hasClass("dropup")?e=i.default(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?e="right-start":t.hasClass("dropleft")?e="left-start":i.default(this._menu).hasClass("dropdown-menu-right")&&(e="bottom-end"),e},e._detectNavbar=function(){return i.default(this._element).closest(".navbar").length>0},e._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=a({},e.offsets,t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},e._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),a({},t,this._config.popperConfig)},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this).data("bs.dropdown");if(n||(n=new t(this,"object"==typeof e?e:null),i.default(this).data("bs.dropdown",n)),"string"==typeof e){if("undefined"==typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},t._clearMenus=function(e){if(!e||3!==e.which&&("keyup"!==e.type||9===e.which))for(var n=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),o=0,r=n.length;o<r;o++){var a=t._getParentFromElement(n[o]),s=i.default(n[o]).data("bs.dropdown"),l={relatedTarget:n[o]};if(e&&"click"===e.type&&(l.clickEvent=e),s){var u=s._menu;if(i.default(a).hasClass("show")&&!(e&&("click"===e.type&&/input|textarea/i.test(e.target.tagName)||"keyup"===e.type&&9===e.which)&&i.default.contains(a,e.target))){var f=i.default.Event("hide.bs.dropdown",l);i.default(a).trigger(f),f.isDefaultPrevented()||("ontouchstart"in document.documentElement&&i.default(document.body).children().off("mouseover",null,i.default.noop),n[o].setAttribute("aria-expanded","false"),s._popper&&s._popper.destroy(),i.default(u).removeClass("show"),i.default(a).removeClass("show").trigger(i.default.Event("hidden.bs.dropdown",l)))}}}},t._getParentFromElement=function(t){var e,n=l.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},t._dataApiKeydownHandler=function(e){if(!(/input|textarea/i.test(e.target.tagName)?32===e.which||27!==e.which&&(40!==e.which&&38!==e.which||i.default(e.target).closest(".dropdown-menu").length):!jt.test(e.which))&&!this.disabled&&!i.default(this).hasClass("disabled")){var n=t._getParentFromElement(this),o=i.default(n).hasClass("show");if(o||27!==e.which){if(e.preventDefault(),e.stopPropagation(),!o||27===e.which||32===e.which)return 27===e.which&&i.default(n.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void i.default(this).trigger("click");var r=[].slice.call(n.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return i.default(t).is(":visible")}));if(0!==r.length){var a=r.indexOf(e.target);38===e.which&&a>0&&a--,40===e.which&&a<r.length-1&&a++,a<0&&(a=0),r[a].focus()}}}},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return Lt}},{key:"DefaultType",get:function(){return Pt}}]),t}();i.default(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',Ft._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",Ft._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",Ft._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),Ft._jQueryInterface.call(i.default(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),i.default.fn[Ot]=Ft._jQueryInterface,i.default.fn[Ot].Constructor=Ft,i.default.fn[Ot].noConflict=function(){return i.default.fn[Ot]=xt,Ft._jQueryInterface};var Rt=i.default.fn.modal,Ht={backdrop:!0,keyboard:!0,focus:!0,show:!0},Mt={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},qt=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var e=t.prototype;return e.toggle=function(t){return this._isShown?this.hide():this.show(t)},e.show=function(t){var e=this;if(!this._isShown&&!this._isTransitioning){i.default(this._element).hasClass("fade")&&(this._isTransitioning=!0);var n=i.default.Event("show.bs.modal",{relatedTarget:t});i.default(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),i.default(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return e.hide(t)})),i.default(this._dialog).on("mousedown.dismiss.bs.modal",(function(){i.default(e._element).one("mouseup.dismiss.bs.modal",(function(t){i.default(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return e._showElement(t)})))}},e.hide=function(t){var e=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var n=i.default.Event("hide.bs.modal");if(i.default(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var o=i.default(this._element).hasClass("fade");if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),i.default(document).off("focusin.bs.modal"),i.default(this._element).removeClass("show"),i.default(this._element).off("click.dismiss.bs.modal"),i.default(this._dialog).off("mousedown.dismiss.bs.modal"),o){var r=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,(function(t){return e._hideModal(t)})).emulateTransitionEnd(r)}else this._hideModal()}}},e.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return i.default(t).off(".bs.modal")})),i.default(document).off("focusin.bs.modal"),i.default.removeData(this._element,"bs.modal"),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},e.handleUpdate=function(){this._adjustDialog()},e._getConfig=function(t){return t=a({},Ht,t),l.typeCheckConfig("modal",t,Mt),t},e._triggerBackdropTransition=function(){var t=this,e=i.default.Event("hidePrevented.bs.modal");if(i.default(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._element.scrollHeight>document.documentElement.clientHeight;n||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");var o=l.getTransitionDurationFromElement(this._dialog);i.default(this._element).off(l.TRANSITION_END),i.default(this._element).one(l.TRANSITION_END,(function(){t._element.classList.remove("modal-static"),n||i.default(t._element).one(l.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,o)})).emulateTransitionEnd(o),this._element.focus()}},e._showElement=function(t){var e=this,n=i.default(this._element).hasClass("fade"),o=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),i.default(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,n&&l.reflow(this._element),i.default(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var r=i.default.Event("shown.bs.modal",{relatedTarget:t}),a=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,i.default(e._element).trigger(r)};if(n){var s=l.getTransitionDurationFromElement(this._dialog);i.default(this._dialog).one(l.TRANSITION_END,a).emulateTransitionEnd(s)}else a()},e._enforceFocus=function(){var t=this;i.default(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(e){document!==e.target&&t._element!==e.target&&0===i.default(t._element).has(e.target).length&&t._element.focus()}))},e._setEscapeEvent=function(){var t=this;this._isShown?i.default(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||i.default(this._element).off("keydown.dismiss.bs.modal")},e._setResizeEvent=function(){var t=this;this._isShown?i.default(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):i.default(window).off("resize.bs.modal")},e._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){i.default(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),i.default(t._element).trigger("hidden.bs.modal")}))},e._removeBackdrop=function(){this._backdrop&&(i.default(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(t){var e=this,n=i.default(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",n&&this._backdrop.classList.add(n),i.default(this._backdrop).appendTo(document.body),i.default(this._element).on("click.dismiss.bs.modal",(function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._triggerBackdropTransition():e.hide())})),n&&l.reflow(this._backdrop),i.default(this._backdrop).addClass("show"),!t)return;if(!n)return void t();var o=l.getTransitionDurationFromElement(this._backdrop);i.default(this._backdrop).one(l.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){i.default(this._backdrop).removeClass("show");var r=function(){e._removeBackdrop(),t&&t()};if(i.default(this._element).hasClass("fade")){var a=l.getTransitionDurationFromElement(this._backdrop);i.default(this._backdrop).one(l.TRANSITION_END,r).emulateTransitionEnd(a)}else r()}else t&&t()},e._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},e._setScrollbar=function(){var t=this;if(this._isBodyOverflowing){var e=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),n=[].slice.call(document.querySelectorAll(".sticky-top"));i.default(e).each((function(e,n){var o=n.style.paddingRight,r=i.default(n).css("padding-right");i.default(n).data("padding-right",o).css("padding-right",parseFloat(r)+t._scrollbarWidth+"px")})),i.default(n).each((function(e,n){var o=n.style.marginRight,r=i.default(n).css("margin-right");i.default(n).data("margin-right",o).css("margin-right",parseFloat(r)-t._scrollbarWidth+"px")}));var o=document.body.style.paddingRight,r=i.default(document.body).css("padding-right");i.default(document.body).data("padding-right",o).css("padding-right",parseFloat(r)+this._scrollbarWidth+"px")}i.default(document.body).addClass("modal-open")},e._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));i.default(t).each((function(t,e){var n=i.default(e).data("padding-right");i.default(e).removeData("padding-right"),e.style.paddingRight=n||""}));var e=[].slice.call(document.querySelectorAll(".sticky-top"));i.default(e).each((function(t,e){var n=i.default(e).data("margin-right");"undefined"!=typeof n&&i.default(e).css("margin-right",n).removeData("margin-right")}));var n=i.default(document.body).data("padding-right");i.default(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},e._getScrollbarWidth=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},t._jQueryInterface=function(e,n){return this.each((function(){var o=i.default(this).data("bs.modal"),r=a({},Ht,i.default(this).data(),"object"==typeof e&&e?e:{});if(o||(o=new t(this,r),i.default(this).data("bs.modal",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e](n)}else r.show&&o.show(n)}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return Ht}}]),t}();i.default(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var e,n=this,o=l.getSelectorFromElement(this);o&&(e=document.querySelector(o));var r=i.default(e).data("bs.modal")?"toggle":a({},i.default(e).data(),i.default(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var s=i.default(e).one("show.bs.modal",(function(t){t.isDefaultPrevented()||s.one("hidden.bs.modal",(function(){i.default(n).is(":visible")&&n.focus()}))}));qt._jQueryInterface.call(i.default(e),r,this)})),i.default.fn.modal=qt._jQueryInterface,i.default.fn.modal.Constructor=qt,i.default.fn.modal.noConflict=function(){return i.default.fn.modal=Rt,qt._jQueryInterface};var Bt=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Qt={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Wt=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,Ut=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function Vt(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)return n(t);for(var i=(new window.DOMParser).parseFromString(t,"text/html"),o=Object.keys(e),r=[].slice.call(i.body.querySelectorAll("*")),a=function(t,n){var i=r[t],a=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var s=[].slice.call(i.attributes),l=[].concat(e["*"]||[],e[a]||[]);s.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===Bt.indexOf(n)||Boolean(t.nodeValue.match(Wt)||t.nodeValue.match(Ut));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1})(t,l)||i.removeAttribute(t.nodeName)}))},s=0,l=r.length;s<l;s++)a(s);return i.body.innerHTML}var Yt="tooltip",zt=i.default.fn[Yt],Xt=new RegExp("(^|\\s)bs-tooltip\\S+","g"),Kt=["sanitize","whiteList","sanitizeFn"],Gt={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},$t={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Jt={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",customClass:"",sanitize:!0,sanitizeFn:null,whiteList:Qt,popperConfig:null},Zt={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},te=function(){function t(t,e){if("undefined"==typeof It)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=i.default(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(i.default(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),i.default.removeData(this.element,this.constructor.DATA_KEY),i.default(this.element).off(this.constructor.EVENT_KEY),i.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&i.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===i.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=i.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){i.default(this.element).trigger(e);var n=l.findShadowRoot(this.element),o=i.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!o)return;var r=this.getTipElement(),a=l.getUID(this.constructor.NAME);r.setAttribute("id",a),this.element.setAttribute("aria-describedby",a),this.setContent(),this.config.animation&&i.default(r).addClass("fade");var s="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,u=this._getAttachment(s);this.addAttachmentClass(u);var f=this._getContainer();i.default(r).data(this.constructor.DATA_KEY,this),i.default.contains(this.element.ownerDocument.documentElement,this.tip)||i.default(r).appendTo(f),i.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new It(this.element,r,this._getPopperConfig(u)),i.default(r).addClass("show"),i.default(r).addClass(this.config.customClass),"ontouchstart"in document.documentElement&&i.default(document.body).children().on("mouseover",null,i.default.noop);var d=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,i.default(t.element).trigger(t.constructor.Event.SHOWN),"out"===e&&t._leave(null,t)};if(i.default(this.tip).hasClass("fade")){var c=l.getTransitionDurationFromElement(this.tip);i.default(this.tip).one(l.TRANSITION_END,d).emulateTransitionEnd(c)}else d()}},e.hide=function(t){var e=this,n=this.getTipElement(),o=i.default.Event(this.constructor.Event.HIDE),r=function(){"show"!==e._hoverState&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),i.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(i.default(this.element).trigger(o),!o.isDefaultPrevented()){if(i.default(n).removeClass("show"),"ontouchstart"in document.documentElement&&i.default(document.body).children().off("mouseover",null,i.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,i.default(this.tip).hasClass("fade")){var a=l.getTransitionDurationFromElement(n);i.default(n).one(l.TRANSITION_END,r).emulateTransitionEnd(a)}else r();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(t){i.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(i.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),i.default(t).removeClass("fade show")},e.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Vt(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?i.default(e).parent().is(t)||t.empty().append(e):t.text(i.default(e).text())},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return a({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=a({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:l.isElement(this.config.container)?i.default(this.config.container):i.default(document).find(this.config.container)},e._getAttachment=function(t){return $t[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)i.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var n="hover"===e?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===e?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;i.default(t.element).on(n,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},i.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=a({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||i.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),i.default(e.getTipElement()).hasClass("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){"show"===e._hoverState&&e.show()}),e.config.delay.show):e.show())},e._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||i.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){"out"===e._hoverState&&e.hide()}),e.config.delay.hide):e.hide())},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=i.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==Kt.indexOf(t)&&delete e[t]})),"number"==typeof(t=a({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),l.typeCheckConfig(Yt,t,this.constructor.DefaultType),t.sanitize&&(t.template=Vt(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=i.default(this.getTipElement()),e=t.attr("class").match(Xt);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(i.default(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.tooltip"),r="object"==typeof e&&e;if((o||!/dispose|hide/.test(e))&&(o||(o=new t(this,r),n.data("bs.tooltip",o)),"string"==typeof e)){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return Jt}},{key:"NAME",get:function(){return Yt}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return Zt}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return Gt}}]),t}();i.default.fn[Yt]=te._jQueryInterface,i.default.fn[Yt].Constructor=te,i.default.fn[Yt].noConflict=function(){return i.default.fn[Yt]=zt,te._jQueryInterface};var ee="popover",ne=i.default.fn[ee],ie=new RegExp("(^|\\s)bs-popover\\S+","g"),oe=a({},te.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),re=a({},te.DefaultType,{content:"(string|element|function)"}),ae={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},se=function(t){var e,n;function o(){return t.apply(this,arguments)||this}n=t,(e=o).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n;var a=o.prototype;return a.isWithContent=function(){return this.getTitle()||this._getContent()},a.addAttachmentClass=function(t){i.default(this.getTipElement()).addClass("bs-popover-"+t)},a.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},a.setContent=function(){var t=i.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},a._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},a._cleanTipClass=function(){var t=i.default(this.getTipElement()),e=t.attr("class").match(ie);null!==e&&e.length>0&&t.removeClass(e.join(""))},o._jQueryInterface=function(t){return this.each((function(){var e=i.default(this).data("bs.popover"),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new o(this,n),i.default(this).data("bs.popover",e)),"string"==typeof t)){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}}))},r(o,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return oe}},{key:"NAME",get:function(){return ee}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return ae}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return re}}]),o}(te);i.default.fn[ee]=se._jQueryInterface,i.default.fn[ee].Constructor=se,i.default.fn[ee].noConflict=function(){return i.default.fn[ee]=ne,se._jQueryInterface};var le="scrollspy",ue=i.default.fn[le],fe={offset:10,method:"auto",target:""},de={offset:"number",method:"string",target:"(string|element)"},ce=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,i.default(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return n._process(t)})),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?"offset":"position",n="auto"===this._config.method?e:this._config.method,o="position"===n?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var e,r=l.getSelectorFromElement(t);if(r&&(e=document.querySelector(r)),e){var a=e.getBoundingClientRect();if(a.width||a.height)return[i.default(e)[n]().top+o,r]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){i.default.removeData(this._element,"bs.scrollspy"),i.default(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=a({},fe,"object"==typeof t&&t?t:{})).target&&l.isElement(t.target)){var e=i.default(t.target).attr("id");e||(e=l.getUID(le),i.default(t.target).attr("id",e)),t.target="#"+e}return l.typeCheckConfig(le,t,de),t},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},e._activate=function(t){this._activeTarget=t,this._clear();var e=this._selector.split(",").map((function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'})),n=i.default([].slice.call(document.querySelectorAll(e.join(","))));n.hasClass("dropdown-item")?(n.closest(".dropdown").find(".dropdown-toggle").addClass("active"),n.addClass("active")):(n.addClass("active"),n.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),n.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),i.default(this._scrollElement).trigger("activate.bs.scrollspy",{relatedTarget:t})},e._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(t){return t.classList.contains("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this).data("bs.scrollspy");if(n||(n=new t(this,"object"==typeof e&&e),i.default(this).data("bs.scrollspy",n)),"string"==typeof e){if("undefined"==typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return fe}}]),t}();i.default(window).on("load.bs.scrollspy.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-spy="scroll"]')),e=t.length;e--;){var n=i.default(t[e]);ce._jQueryInterface.call(n,n.data())}})),i.default.fn[le]=ce._jQueryInterface,i.default.fn[le].Constructor=ce,i.default.fn[le].noConflict=function(){return i.default.fn[le]=ue,ce._jQueryInterface};var he=i.default.fn.tab,pe=function(){function t(t){this._element=t}var e=t.prototype;return e.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&i.default(this._element).hasClass("active")||i.default(this._element).hasClass("disabled"))){var e,n,o=i.default(this._element).closest(".nav, .list-group")[0],r=l.getSelectorFromElement(this._element);if(o){var a="UL"===o.nodeName||"OL"===o.nodeName?"> li > .active":".active";n=(n=i.default.makeArray(i.default(o).find(a)))[n.length-1]}var s=i.default.Event("hide.bs.tab",{relatedTarget:this._element}),u=i.default.Event("show.bs.tab",{relatedTarget:n});if(n&&i.default(n).trigger(s),i.default(this._element).trigger(u),!u.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(e=document.querySelector(r)),this._activate(this._element,o);var f=function(){var e=i.default.Event("hidden.bs.tab",{relatedTarget:t._element}),o=i.default.Event("shown.bs.tab",{relatedTarget:n});i.default(n).trigger(e),i.default(t._element).trigger(o)};e?this._activate(e,e.parentNode,f):f()}}},e.dispose=function(){i.default.removeData(this._element,"bs.tab"),this._element=null},e._activate=function(t,e,n){var o=this,r=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?i.default(e).children(".active"):i.default(e).find("> li > .active"))[0],a=n&&r&&i.default(r).hasClass("fade"),s=function(){return o._transitionComplete(t,r,n)};if(r&&a){var u=l.getTransitionDurationFromElement(r);i.default(r).removeClass("show").one(l.TRANSITION_END,s).emulateTransitionEnd(u)}else s()},e._transitionComplete=function(t,e,n){if(e){i.default(e).removeClass("active");var o=i.default(e.parentNode).find("> .dropdown-menu .active")[0];o&&i.default(o).removeClass("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(i.default(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),l.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&i.default(t.parentNode).hasClass("dropdown-menu")){var r=i.default(t).closest(".dropdown")[0];if(r){var a=[].slice.call(r.querySelectorAll(".dropdown-toggle"));i.default(a).addClass("active")}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.tab");if(o||(o=new t(this),n.data("bs.tab",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}}]),t}();i.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),pe._jQueryInterface.call(i.default(this),"show")})),i.default.fn.tab=pe._jQueryInterface,i.default.fn.tab.Constructor=pe,i.default.fn.tab.noConflict=function(){return i.default.fn.tab=he,pe._jQueryInterface};var me=i.default.fn.toast,ge={animation:"boolean",autohide:"boolean",delay:"number"},ve={animation:!0,autohide:!0,delay:500},_e=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=i.default.Event("show.bs.toast");if(i.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var n=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),i.default(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),l.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,n).emulateTransitionEnd(o)}else n()}},e.hide=function(){if(this._element.classList.contains("show")){var t=i.default.Event("hide.bs.toast");i.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),i.default(this._element).off("click.dismiss.bs.toast"),i.default.removeData(this._element,"bs.toast"),this._element=null,this._config=null},e._getConfig=function(t){return t=a({},ve,i.default(this._element).data(),"object"==typeof t&&t?t:{}),l.typeCheckConfig("toast",t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;i.default(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add("hide"),i.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var n=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.toast");if(o||(o=new t(this,"object"==typeof e&&e),n.data("bs.toast",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e](this)}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"DefaultType",get:function(){return ge}},{key:"Default",get:function(){return ve}}]),t}();i.default.fn.toast=_e._jQueryInterface,i.default.fn.toast.Constructor=_e,i.default.fn.toast.noConflict=function(){return i.default.fn.toast=me,_e._jQueryInterface},t.Alert=d,t.Button=h,t.Carousel=y,t.Collapse=S,t.Dropdown=Ft,t.Modal=qt,t.Popover=se,t.Scrollspy=ce,t.Tab=pe,t.Toast=_e,t.Tooltip=te,t.Util=l,Object.defineProperty(t,"__esModule",{value:!0})}));
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function j(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function M(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${M(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${M(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=j(t.dataset[n])}return e},getDataAttribute:(t,e)=>j(t.getAttribute(`data-bs-${M(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e?e.split(",").map((t=>n(t))).join(","):null},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",jt="collapsing",Mt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(jt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(jt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(jt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(jt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(Mt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function je(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const Me={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:je(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:je(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C<v.length;C++){var O=v[C],x=be(O),k=Fe(O)===Xt,L=[zt,Rt].indexOf(x)>=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},j=p?3:1;j>0&&"break"!==P(j);j--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],j=f?-T[$]/2:0,M=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-j-q-z-O.mainAxis:M-q-z-O.mainAxis,K=v?-E[$]/2+j+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return!e.some((function(t){return!(t&&"function"==typeof t.getBoundingClientRect)}))}function mi(t){void 0===t&&(t={});var e=t,i=e.defaultModifiers,n=void 0===i?[]:i,s=e.defaultOptions,o=void 0===s?fi:s;return function(t,e,i){void 0===i&&(i=o);var s,r,a={placement:"bottom",orderedModifiers:[],options:Object.assign({},fi,o),modifiersData:{},elements:{reference:t,popper:e},attributes:{},styles:{}},l=[],c=!1,h={state:a,setOptions:function(i){var s="function"==typeof i?i(a.options):i;d(),a.options=Object.assign({},o,a.options,s),a.scrollParents={reference:pe(t)?Je(t):t.contextElement?Je(t.contextElement):[],popper:Je(e)};var r,c,u=function(t){var e=ui(t);return de.reduce((function(t,i){return t.concat(e.filter((function(t){return t.phase===i})))}),[])}((r=[].concat(n,a.options.modifiers),c=r.reduce((function(t,e){var i=t[e.name];return t[e.name]=i?Object.assign({},i,e,{options:Object.assign({},i.options,e.options),data:Object.assign({},i.data,e.data)}):e,t}),{}),Object.keys(c).map((function(t){return c[t]}))));return a.orderedModifiers=u.filter((function(t){return t.enabled})),a.orderedModifiers.forEach((function(t){var e=t.name,i=t.options,n=void 0===i?{}:i,s=t.effect;if("function"==typeof s){var o=s({state:a,name:e,instance:h,options:n});l.push(o||function(){})}})),h.update()},forceUpdate:function(){if(!c){var t=a.elements,e=t.reference,i=t.popper;if(pi(e,i)){a.rects={reference:di(e,$e(i),"fixed"===a.options.strategy),popper:Ce(i)},a.reset=!1,a.placement=a.options.placement,a.orderedModifiers.forEach((function(t){return a.modifiersData[t.name]=Object.assign({},t.data)}));for(var n=0;n<a.orderedModifiers.length;n++)if(!0!==a.reset){var s=a.orderedModifiers[n],o=s.fn,r=s.options,l=void 0===r?{}:r,d=s.name;"function"==typeof o&&(a=o({state:a,options:l,name:d,instance:h})||a)}else a.reset=!1,n=-1}}},update:(s=function(){return new Promise((function(t){h.forceUpdate(),t(a)}))},function(){return r||(r=new Promise((function(t){Promise.resolve().then((function(){r=void 0,t(s())}))}))),r}),destroy:function(){d(),c=!0}};if(!pi(t,e))return h;function d(){l.forEach((function(t){return t()})),l=[]}return h.setOptions(i).then((function(t){!c&&i.onFirstUpdate&&i.onFirstUpdate(t)})),h}}var gi=mi(),_i=mi({defaultModifiers:[Re,ci,Be,_e]}),bi=mi({defaultModifiers:[Re,ci,Be,_e,li,si,hi,Me,ai]});const vi=Object.freeze(Object.defineProperty({__proto__:null,afterMain:ae,afterRead:se,afterWrite:he,applyStyles:_e,arrow:Me,auto:Kt,basePlacements:Qt,beforeMain:oe,beforeRead:ie,beforeWrite:le,bottom:Rt,clippingParents:Ut,computeStyles:Be,createPopper:bi,createPopperBase:gi,createPopperLite:_i,detectOverflow:ii,end:Yt,eventListeners:Re,flip:si,hide:ai,left:Vt,main:re,modifierPhases:de,offset:li,placements:ee,popper:Jt,popperGenerator:mi,popperOffsets:ci,preventOverflow:hi,read:ne,reference:Zt,right:qt,start:Xt,top:zt,variationPlacements:te,viewport:Gt,write:ce},Symbol.toStringTag,{value:"Module"})),yi="dropdown",wi=".bs.dropdown",Ai=".data-api",Ei="ArrowUp",Ti="ArrowDown",Ci=`hide${wi}`,Oi=`hidden${wi}`,xi=`show${wi}`,ki=`shown${wi}`,Li=`click${wi}${Ai}`,Si=`keydown${wi}${Ai}`,Di=`keyup${wi}${Ai}`,$i="show",Ii='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Ni=`${Ii}.${$i}`,Pi=".dropdown-menu",ji=p()?"top-end":"top-start",Mi=p()?"top-start":"top-end",Fi=p()?"bottom-end":"bottom-start",Hi=p()?"bottom-start":"bottom-end",Wi=p()?"left-start":"right-start",Bi=p()?"right-start":"left-start",zi={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Ri={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class qi extends W{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=z.next(this._element,Pi)[0]||z.prev(this._element,Pi)[0]||z.findOne(Pi,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return zi}static get DefaultType(){return Ri}static get NAME(){return yi}toggle(){return this._isShown()?this.hide():this.show()}show(){if(l(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!N.trigger(this._element,xi,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add($i),this._element.classList.add($i),N.trigger(this._element,ki,t)}}hide(){if(l(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!N.trigger(this._element,Ci,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._popper&&this._popper.destroy(),this._menu.classList.remove($i),this._element.classList.remove($i),this._element.setAttribute("aria-expanded","false"),F.removeDataAttribute(this._menu,"popper"),N.trigger(this._element,Oi,t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!o(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${yi.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===vi)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=this._parent:o(this._config.reference)?t=r(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const e=this._getPopperConfig();this._popper=bi(t,this._menu,e)}_isShown(){return this._menu.classList.contains($i)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return Wi;if(t.classList.contains("dropstart"))return Bi;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?Mi:ji:e?Hi:Fi}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,jn=`hide${xn}`,Mn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,jn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,Mn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,Mn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"<div></div>"},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",js="Home",Ms="End",Fs="active",Hs="fade",Ws="show",Bs=".dropdown-toggle",zs=`:not(${Bs})`,Rs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',qs=`.nav-link${zs}, .list-group-item${zs}, [role="tab"]${zs}, ${Rs}`,Vs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Ks extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,js,Ms].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([js,Ms].includes(t.key))i=e[t.key===js?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Ks.getOrCreateInstance(i).show())}_getChildren(){return z.find(qs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(Bs,Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(qs)?t:z.findOne(qs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Ks.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,Rs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Ks.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(Vs))Ks.getOrCreateInstance(t)})),m(Ks);const Qs=".bs.toast",Xs=`mouseover${Qs}`,Ys=`mouseout${Qs}`,Us=`focusin${Qs}`,Gs=`focusout${Qs}`,Js=`hide${Qs}`,Zs=`hidden${Qs}`,to=`show${Qs}`,eo=`shown${Qs}`,io="hide",no="show",so="showing",oo={animation:"boolean",autohide:"boolean",delay:"number"},ro={animation:!0,autohide:!0,delay:5e3};class ao extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return ro}static get DefaultType(){return oo}static get NAME(){return"toast"}show(){N.trigger(this._element,to).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(io),d(this._element),this._element.classList.add(no,so),this._queueCallback((()=>{this._element.classList.remove(so),N.trigger(this._element,eo),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Js).defaultPrevented||(this._element.classList.add(so),this._queueCallback((()=>{this._element.classList.add(io),this._element.classList.remove(so,no),N.trigger(this._element,Zs)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(no),super.dispose()}isShown(){return this._element.classList.contains(no)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Xs,(t=>this._onInteraction(t,!0))),N.on(this._element,Ys,(t=>this._onInteraction(t,!1))),N.on(this._element,Us,(t=>this._onInteraction(t,!0))),N.on(this._element,Gs,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ao.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ao),m(ao),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Ks,Toast:ao,Tooltip:cs}}));
 //# sourceMappingURL=bootstrap.bundle.min.js.map
\ No newline at end of file