From 85f8f36556121a28f765d55fb4d6510edd2165d3 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Sun, 26 May 2024 17:48:34 +0200 Subject: [PATCH 01/17] Bump to Chaos Monkey 3.1.0 (#264) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 48a93ca3f..bca3066ca 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 17 2023.0.1 - 2.3.10 + 3.1.0 1.7.1 + 3.4.0 3.6.0 1.8.2 1.0.20 diff --git a/spring-petclinic-api-gateway/src/main/wro/wro.xml b/spring-petclinic-api-gateway/src/main/wro/wro.xml index 86574683c..80608cd5f 100644 --- a/spring-petclinic-api-gateway/src/main/wro/wro.xml +++ b/spring-petclinic-api-gateway/src/main/wro/wro.xml @@ -1,6 +1,6 @@ - classpath:META-INF/resources/webjars/bootstrap/3.3.7-1/less/bootstrap.less + classpath:META-INF/resources/webjars/bootstrap/3.4.0/less/bootstrap.less /petclinic.less From 5c758622a320d5fc2c8cbd8e6c06751cf1129ec5 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Fri, 2 Aug 2024 19:03:50 +0200 Subject: [PATCH 03/17] Add Dev Container configuration (#271) * Add Dev Container configuration * Remove the postCreateCommand * Add configuration tips for VS Code in Dev Container --- .devcontainer/devcontainer.json | 33 ++++++++++++++++++++++++++++ spring-petclinic-api-gateway/pom.xml | 2 ++ 2 files changed, 35 insertions(+) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..aee21c032 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,33 @@ +{ + "name": "Spring Petclinic Microservices", + // Java Development Container Images https://mcr.microsoft.com/en-us/product/devcontainers/java/tags + "image": "mcr.microsoft.com/devcontainers/java:17-bullseye", + // Features list https://containers.dev/features + "features": { + "ghcr.io/devcontainers/features/java:1": { + "installMaven": "true", + "installGradle": "false" + }, + "ghcr.io/devcontainers/features/azure-cli:1":{}, // Install Azure CLI + "ghcr.io/devcontainers/features/docker-in-docker:2":{}, // install docker + }, + "customizations": { + // Configure properties specific to VScode + "vscode": { + "settings": { + // VSCode settings https://github.com/redhat-developer/vscode-java/blob/master/README.md + "java.server.launchMode": "Standard" + }, + "extensions":[ + "vscjava.vscode-java-pack", + "vscjava.vscode-maven", + "github.vscode-github-actions", + "github.vscode-pull-request-github", + "redhat.vscode-xml", + "vmware.vscode-boot-dev-pack", + "mhutchie.git-graph" + ] + }, + }, + "forwardPorts": [8080, 8888, 8761] +} diff --git a/spring-petclinic-api-gateway/pom.xml b/spring-petclinic-api-gateway/pom.xml index f870bd915..e813364b9 100644 --- a/spring-petclinic-api-gateway/pom.xml +++ b/spring-petclinic-api-gateway/pom.xml @@ -152,6 +152,8 @@ ${wro4j.version} + + generate-resources run From b12e5655caa579acacdfab9ea7cb07d889cac4e8 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Sat, 3 Aug 2024 09:39:34 +0000 Subject: [PATCH 04/17] Add GitHub Codespaces badge --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index dd466438f..e447aec41 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ This microservices branch was initially derived from [AngularJS version](https:/ To achieve that goal, we use Spring Cloud Gateway, Spring Cloud Circuit Breaker, Spring Cloud Config, Micrometer Tracing, Resilience4j, Open Telemetry and the Eureka Service Discovery from the [Spring Cloud Netflix](https://github.com/spring-cloud/spring-cloud-netflix) technology stack. +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/spring-petclinic/spring-petclinic-microservices) + ## Starting services locally without Docker Every microservice is a Spring Boot application and can be started locally using IDE ([Lombok](https://projectlombok.org/) plugin has to be set up) or `../mvnw spring-boot:run` command. Please note that supporting services (Config and Discovery Server) must be started before any other application (Customers, Vets, Visits and API). From 09172e93c31b055689a3ecc6707cbfa2eea7c34f Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Sat, 3 Aug 2024 12:11:00 +0200 Subject: [PATCH 05/17] Bump to Spring Cloud 2023.0.3 and Spring Boot 3.2.7 (#272) --- pom.xml | 6 +++--- spring-petclinic-admin-server/pom.xml | 2 +- spring-petclinic-api-gateway/pom.xml | 2 +- spring-petclinic-config-server/pom.xml | 2 +- spring-petclinic-customers-service/pom.xml | 2 +- spring-petclinic-discovery-server/pom.xml | 2 +- spring-petclinic-vets-service/pom.xml | 2 +- spring-petclinic-visits-service/pom.xml | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index bca3066ca..da8d98809 100644 --- a/pom.xml +++ b/pom.xml @@ -6,12 +6,12 @@ org.springframework.boot spring-boot-starter-parent - 3.2.4 + 3.2.7 org.springframework.samples spring-petclinic-microservices - 3.2.4 + 3.2.7 ${project.artifactId} pom @@ -28,7 +28,7 @@ 17 - 2023.0.1 + 2023.0.3 3.1.0 1.7.1 diff --git a/spring-petclinic-admin-server/pom.xml b/spring-petclinic-admin-server/pom.xml index a0a5e31d4..2c537636a 100644 --- a/spring-petclinic-admin-server/pom.xml +++ b/spring-petclinic-admin-server/pom.xml @@ -12,7 +12,7 @@ org.springframework.samples spring-petclinic-microservices - 3.2.4 + 3.2.7 diff --git a/spring-petclinic-api-gateway/pom.xml b/spring-petclinic-api-gateway/pom.xml index e813364b9..88fb1021e 100644 --- a/spring-petclinic-api-gateway/pom.xml +++ b/spring-petclinic-api-gateway/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.2.4 + 3.2.7 diff --git a/spring-petclinic-config-server/pom.xml b/spring-petclinic-config-server/pom.xml index a78f51481..36db9e1c0 100644 --- a/spring-petclinic-config-server/pom.xml +++ b/spring-petclinic-config-server/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.2.4 + 3.2.7 diff --git a/spring-petclinic-customers-service/pom.xml b/spring-petclinic-customers-service/pom.xml index 947c603b4..56cf73dc3 100644 --- a/spring-petclinic-customers-service/pom.xml +++ b/spring-petclinic-customers-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.2.4 + 3.2.7 diff --git a/spring-petclinic-discovery-server/pom.xml b/spring-petclinic-discovery-server/pom.xml index 2c694c29a..74e1f8a27 100644 --- a/spring-petclinic-discovery-server/pom.xml +++ b/spring-petclinic-discovery-server/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.2.4 + 3.2.7 diff --git a/spring-petclinic-vets-service/pom.xml b/spring-petclinic-vets-service/pom.xml index e9c2744ce..d60b1ae6e 100644 --- a/spring-petclinic-vets-service/pom.xml +++ b/spring-petclinic-vets-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.2.4 + 3.2.7 diff --git a/spring-petclinic-visits-service/pom.xml b/spring-petclinic-visits-service/pom.xml index 4cbc3e624..6d3109018 100644 --- a/spring-petclinic-visits-service/pom.xml +++ b/spring-petclinic-visits-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.2.4 + 3.2.7 From 4aee9a8d17978e6de2be59f31b773c0d2da91378 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Sun, 4 Aug 2024 11:08:06 +0200 Subject: [PATCH 06/17] Bootstrap 5 with SCSS migration (#273) * Bootstrap 5 with SCSS migration * Bump Angular version * Remove class="container" --- README.md | 11 + spring-petclinic-api-gateway/pom.xml | 109 +- .../src/main/less/petclinic.less | 250 - .../src/main/resources/static/css/header.css | 62 + .../main/resources/static/css/petclinic.css | 9520 +++++++++++++++++ .../main/resources/static/css/responsive.css | 28 + .../main/resources/static/css/typography.css | 43 + .../src/main/resources/static/index.html | 4 +- .../static/scripts/fragments/nav.html | 56 +- .../owner-details/owner-details.template.html | 4 +- .../owner-form/owner-form.template.html | 2 +- .../scripts/pet-form/pet-form.template.html | 2 +- .../scripts/visits/visits.template.html | 4 +- .../static/scss/header.scss} | 0 .../main/resources/static/scss/petclinic.scss | 214 + .../static/scss/responsive.scss} | 2 +- .../static/scss/typography.scss} | 0 .../src/main/wro/wro.properties | 4 - .../src/main/wro/wro.xml | 6 - 19 files changed, 9977 insertions(+), 344 deletions(-) delete mode 100644 spring-petclinic-api-gateway/src/main/less/petclinic.less create mode 100644 spring-petclinic-api-gateway/src/main/resources/static/css/header.css create mode 100644 spring-petclinic-api-gateway/src/main/resources/static/css/petclinic.css create mode 100644 spring-petclinic-api-gateway/src/main/resources/static/css/responsive.css create mode 100644 spring-petclinic-api-gateway/src/main/resources/static/css/typography.css rename spring-petclinic-api-gateway/src/main/{less/header.less => resources/static/scss/header.scss} (100%) create mode 100644 spring-petclinic-api-gateway/src/main/resources/static/scss/petclinic.scss rename spring-petclinic-api-gateway/src/main/{less/responsive.less => resources/static/scss/responsive.scss} (98%) rename spring-petclinic-api-gateway/src/main/{less/typography.less => resources/static/scss/typography.scss} (100%) delete mode 100644 spring-petclinic-api-gateway/src/main/wro/wro.properties delete mode 100644 spring-petclinic-api-gateway/src/main/wro/wro.xml diff --git a/README.md b/README.md index e447aec41..97b4b35a2 100644 --- a/README.md +++ b/README.md @@ -200,6 +200,17 @@ mvn clean install -Dmaven.test.skip -P buildDocker -Ddocker.image.prefix=${REPOS The `scripts/pushImages.sh` and `scripts/tagImages.sh` shell scripts could also be used once you build your image with the `buildDocker` maven profile. The `scripts/tagImages.sh` requires to declare the `VERSION` env variable. +## Compiling the CSS + +There is a `petclinic.css` in `spring-petclinic-api-gateway/src/main/resources/static/css`. +It was generated from the `petclinic.scss` source, combined with the [Bootstrap](https://getbootstrap.com/) library. +If you make changes to the `scss`, or upgrade Bootstrap, you will need to re-compile the CSS resources +using the Maven profile `css` of the `spring-petclinic-api-gateway`module. +```bash +cd spring-petclinic-api-gateway +mvn generate-resources -P css +``` + ## Interesting Spring Petclinic forks The Spring Petclinic `main` branch in the main [spring-projects](https://github.com/spring-projects/spring-petclinic) diff --git a/spring-petclinic-api-gateway/pom.xml b/spring-petclinic-api-gateway/pom.xml index 88fb1021e..2cdb6259b 100644 --- a/spring-petclinic-api-gateway/pom.xml +++ b/spring-petclinic-api-gateway/pom.xml @@ -15,12 +15,11 @@ - - 3.4.0 - 3.6.0 - 1.8.2 - 1.0.20 - 1.8.0 + 5.3.3 + 4.7.0 + 1.8.3 + 1.0.30 + 0.2.29 8081 ${basedir}/../docker @@ -107,9 +106,9 @@ ${webjars-angular.version} - org.webjars - jquery - ${webjars-jquery.version} + org.webjars.npm + font-awesome + ${webjars-font-awesome.version} org.webjars @@ -144,47 +143,6 @@ - - - - ro.isdc.wro4j - wro4j-maven-plugin - ${wro4j.version} - - - - - generate-resources - - run - - - - - ro.isdc.wro.maven.plugin.manager.factory.ConfigurableWroManagerFactory - ${project.build.directory}/classes/static/css - ${basedir}/src/main/wro/wro.xml - ${basedir}/src/main/wro/wro.properties - ${basedir}/src/main/less - - - - org.webjars - bootstrap - ${webjars-bootstrap.version} - - - - - org.mockito - mockito-core - ${mockito.version} - - - - - - buildDocker @@ -197,5 +155,56 @@ + + css + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + + generate-resources + + unpack + + + + + org.webjars.npm + bootstrap + ${webjars-bootstrap.version} + + + ${project.build.directory}/webjars + + + + + + + com.gitlab.haynes + libsass-maven-plugin + ${libsass-maven-plugin.version} + + + generate-resources + + + compile + + + + + ${basedir}/src/main/resources/static/scss/ + ${basedir}/src/main/resources/static/css/ + ${project.build.directory}/webjars/META-INF/resources/webjars/bootstrap/${webjars-bootstrap.version}/scss/ + + + + + diff --git a/spring-petclinic-api-gateway/src/main/less/petclinic.less b/spring-petclinic-api-gateway/src/main/less/petclinic.less deleted file mode 100644 index 26ff4ca3c..000000000 --- a/spring-petclinic-api-gateway/src/main/less/petclinic.less +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Copyright 2016 the original author or authors. - * - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -@icon-font-path: "../webjars/bootstrap/fonts/"; - -@spring-green: #6db33f; -@spring-dark-green: #5fa134; -@spring-brown: #34302D; -@spring-grey: #838789; -@spring-light-grey: #f1f1f1; - -@body-bg: @spring-light-grey; -@text-color: @spring-brown; -@link-color: @spring-dark-green; -@link-hover-color: @spring-dark-green; - -@navbar-default-link-color: @spring-light-grey; -@navbar-default-link-active-color: @spring-light-grey; -@navbar-default-link-hover-color: @spring-light-grey; -@navbar-default-link-hover-bg: @spring-green; -@navbar-default-toggle-icon-bar-bg: @spring-light-grey; -@navbar-default-toggle-hover-bg: transparent; -@navbar-default-link-active-bg: @spring-green; - -@border-radius-base: 0; -@border-radius-large: 0; -@border-radius-small: 0; - -@btn-default-color: @spring-light-grey; -@btn-default-bg: @spring-brown; -@btn-default-border: @spring-green; - -@nav-tabs-active-link-hover-color: @spring-light-grey; -@nav-tabs-active-link-hover-bg: @spring-brown; -@nav-tabs-active-link-hover-border-color: @spring-brown; -@nav-tabs-border-color: @spring-brown; - -@pagination-active-bg: @spring-brown; -@pagination-active-border: @spring-green; -@table-border-color: @spring-brown; - -@import "typography.less"; -@import "header.less"; - -.table > thead > tr > th { - background-color: lighten(@spring-brown, 3%); - color: @spring-light-grey; -} - -.table-filter { - background-color: @spring-brown; - padding: 9px 12px; -} - -.nav > li > a { - color: @spring-grey; -} - -.btn-default { - border-width: 2px; - transition: border 0.15s; - -webkit-transition: border 0.15s; - -moz-transition: border 0.15s; - -o-transition: border 0.15s; - -ms-transition: border 0.15s; - - &:hover, - &:focus, - &:active, - &.active, - .open .dropdown-toggle& { - background-color: @spring-brown; - border-color: @spring-brown; - } -} - - -.container .text-muted { - margin: 20px 0; -} - -code { - font-size: 80%; -} - -.xd-container { - margin-top: 40px; - margin-bottom: 100px; - padding-left: 5px; - padding-right: 5px; -} - -h1 { - margin-bottom: 15px -} - -.index-page--subtitle { - font-size: 16px; - line-height: 24px; - margin: 0 0 30px; -} - -.form-horizontal button.btn-inverse { - margin-left: 32px; -} - -#job-params-modal .modal-dialog { - width: 90%; - margin-left:auto; - margin-right:auto; -} - -[ng-cloak].splash { - display: block !important; -} -[ng-cloak] { - display: none; -} - -.splash { - background: @spring-green; - color: @spring-brown; - display: none; -} - -.error-page { - margin-top: 100px; - text-align: center; -} - -.error-page .error-title { - font-size: 24px; - line-height: 24px; - margin: 30px 0 0; -} - -table td { - vertical-align: middle; -} - -table td .progress { - margin-bottom: 0; -} - -table td.action-column { - width: 1px; -} - -.help-block { - color: lighten(@text-color, 50%); // lighten the text some for contrast -} - -.xd-containers { - font-size: 15px; -} - -.cluster-view > table td { - vertical-align: top; -} - -.cluster-view .label, .cluster-view .column-block { - display: block; -} - -.cluster-view .input-group-addon { - width: 0%; -} - -.cluster-view { - margin-bottom: 0; -} - -.deployment-status-deployed { - .label-success; -} - -.deployment-status-incomplete { - .label-warning; -} - -.deployment-status-failed { - .label-danger; -} - -.deployment-status-deploying { - .label-info -} -.deployment-status-na { -} - -.container-details-table th { - background-color: lighten(@spring-brown, 3%); - color: @spring-light-grey; -} - -.status-help-content-table td { - color: @spring-brown; -} - -.alert-success { - .alert-variant(fade(@alert-success-bg, 70%); @alert-success-border; @alert-success-text); -} -.alert-info { - .alert-variant(fade(@alert-info-bg, 70%); @alert-info-border; @alert-info-text); -} -.alert-warning { - .alert-variant(fade(@alert-warning-bg, 70%); @alert-warning-border; @alert-warning-text); -} -.alert-danger { - .alert-variant(fade(@alert-danger-bg, 70%); @alert-danger-border; @alert-danger-text); -} - -.myspinner { - animation-name: spinner; - animation-duration: 2s; - animation-iteration-count: infinite; - animation-timing-function: linear; - - -webkit-transform-origin: 49% 50%; - -webkit-animation-name: spinner; - -webkit-animation-duration: 2s; - -webkit-animation-iteration-count: infinite; - -webkit-animation-timing-function: linear; -} - -@keyframes "spinner" { - from { transform: rotate( 0deg ); } - to { transform: rotate( 360deg ); } -} - -@-webkit-keyframes "spinner" { - from { -webkit-transform: rotate( 0deg ); } - to { -webkit-transform: rotate( 360deg ); } -} - -hr { - border-top: 1px dotted @spring-brown; -} - -@import "responsive.less"; diff --git a/spring-petclinic-api-gateway/src/main/resources/static/css/header.css b/spring-petclinic-api-gateway/src/main/resources/static/css/header.css new file mode 100644 index 000000000..edd0889f0 --- /dev/null +++ b/spring-petclinic-api-gateway/src/main/resources/static/css/header.css @@ -0,0 +1,62 @@ +.navbar { + border-top: 4px solid #6db33f; + background-color: #34302d; + margin-bottom: 0px; + border-bottom: 0; + border-left: 0; + border-right: 0; } + +.navbar a.navbar-brand { + background: url("../images/spring-logo-dataflow.png") -1px -1px no-repeat; + margin: 12px 0 6px; + width: 229px; + height: 46px; + display: inline-block; + text-decoration: none; + padding: 0; } + +.navbar a.navbar-brand span { + display: block; + width: 229px; + height: 46px; + background: url("../images/spring-logo-dataflow.png") -1px -48px no-repeat; + opacity: 0; + -moz-transition: opacity 0.12s ease-in-out; + -webkit-transition: opacity 0.12s ease-in-out; + -o-transition: opacity 0.12s ease-in-out; } + +.navbar a.navbar-brand:hover span { + opacity: 1; } + +.navbar li > a, .navbar-text { + font-family: "montserratregular", sans-serif; + text-shadow: none; + font-size: 14px; + /* line-height: 14px; */ + padding: 28px 20px; + transition: all 0.15s; + -webkit-transition: all 0.15s; + -moz-transition: all 0.15s; + -o-transition: all 0.15s; + -ms-transition: all 0.15s; } + +.navbar li > a { + text-transform: uppercase; } + +.navbar .navbar-text { + margin-top: 0; + margin-bottom: 0; } + +.navbar li:hover > a { + color: #eeeeee; + background-color: #6db33f; } + +.navbar-toggle { + border-width: 0; } + .navbar-toggle .icon-bar + .icon-bar { + margin-top: 3px; } + .navbar-toggle .icon-bar { + width: 19px; + height: 3px; } + +/*# sourceMappingURL=../../../../../target/header.css.map */ \ No newline at end of file diff --git a/spring-petclinic-api-gateway/src/main/resources/static/css/petclinic.css b/spring-petclinic-api-gateway/src/main/resources/static/css/petclinic.css new file mode 100644 index 000000000..d5fb1c5b9 --- /dev/null +++ b/spring-petclinic-api-gateway/src/main/resources/static/css/petclinic.css @@ -0,0 +1,9520 @@ +/* + * Copyright 2016 the original author or authors. + * + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*! + * 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, +[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; } + +*, +*::before, +*::after { + box-sizing: border-box; } + +@media (prefers-reduced-motion: no-preference) { + :root { + scroll-behavior: smooth; } } + +body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + +hr { + margin: 1rem 0; + color: inherit; + border: 0; + border-top: var(--bs-border-width) solid; + opacity: 0.25; } + +h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; + 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 + 0.9vw); } + @media (min-width: 1200px) { + h2, .h2 { + font-size: 2rem; } } +h3, .h3 { + font-size: calc(1.3rem + 0.6vw); } + @media (min-width: 1200px) { + h3, .h3 { + font-size: 1.75rem; } } +h4, .h4 { + font-size: calc(1.275rem + 0.3vw); } + @media (min-width: 1200px) { + h4, .h4 { + font-size: 1.5rem; } } +h5, .h5 { + font-size: 1.25rem; } + +h6, .h6 { + font-size: 1rem; } + +p { + margin-top: 0; + margin-bottom: 1rem; } + +abbr[title] { + text-decoration: underline dotted; + cursor: help; + text-decoration-skip-ink: none; } + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; } + +ol, +ul { + padding-left: 2rem; } + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; } + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; } + +dt { + font-weight: 700; } + +dd { + margin-bottom: .5rem; + margin-left: 0; } + +blockquote { + margin: 0 0 1rem; } + +b, +strong { + font-weight: bolder; } + +small, .small { + font-size: 0.875em; } + +mark, .mark { + padding: 0.1875em; + color: var(--bs-highlight-color); + background-color: var(--bs-highlight-bg); } + +sub, +sup { + position: relative; + font-size: 0.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; } + +pre, +code, +kbd, +samp { + font-family: var(--bs-font-monospace); + font-size: 1em; } + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; } + pre code { + font-size: inherit; + color: inherit; + word-break: normal; } + +code { + font-size: 0.875em; + color: var(--bs-code-color); + word-wrap: break-word; } + a > code { + color: inherit; } + +kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--bs-body-bg); + background-color: var(--bs-body-color); + border-radius: 0.25rem; } + kbd kbd { + padding: 0; + font-size: 1em; } + +figure { + margin: 0 0 1rem; } + +img, +svg { + vertical-align: middle; } + +table { + caption-side: bottom; + border-collapse: collapse; } + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-secondary-color); + text-align: left; } + +th { + text-align: inherit; + text-align: -webkit-match-parent; } + +thead, +tbody, +tfoot, +tr, +td, +th { + border-color: inherit; + border-style: solid; + border-width: 0; } + +label { + display: inline-block; } + +button { + border-radius: 0; } + +button:focus:not(:focus-visible) { + outline: 0; } + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; } + +button, +select { + text-transform: none; } + +[role="button"] { + cursor: pointer; } + +select { + word-wrap: normal; } + select:disabled { + opacity: 1; } + +[list]:not([type="date"]):not([type="datetime-local"]):not([type="month"]):not([type="week"]):not([type="time"])::-webkit-calendar-picker-indicator { + display: none !important; } + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; } + button:not(:disabled), + [type="button"]:not(:disabled), + [type="reset"]:not(:disabled), + [type="submit"]:not(:disabled) { + cursor: pointer; } + +::-moz-focus-inner { + padding: 0; + border-style: none; } + +textarea { + resize: vertical; } + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; } + +legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; } + @media (min-width: 1200px) { + legend { + font-size: 1.5rem; } } + legend + * { + clear: left; } + +::-webkit-datetime-edit-fields-wrapper, +::-webkit-datetime-edit-text, +::-webkit-datetime-edit-minute, +::-webkit-datetime-edit-hour-field, +::-webkit-datetime-edit-day-field, +::-webkit-datetime-edit-month-field, +::-webkit-datetime-edit-year-field { + padding: 0; } + +::-webkit-inner-spin-button { + height: auto; } + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; } + +/* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ +::-webkit-search-decoration { + -webkit-appearance: none; } + +::-webkit-color-swatch-wrapper { + padding: 0; } + +::file-selector-button { + font: inherit; + -webkit-appearance: button; } + +output { + display: inline-block; } + +iframe { + border: 0; } + +summary { + display: list-item; + cursor: pointer; } + +progress { + vertical-align: baseline; } + +[hidden] { + display: none !important; } + +.lead { + font-size: 1.25rem; + font-weight: 300; } + +.display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-1 { + font-size: 5rem; } } +.display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-2 { + font-size: 4.5rem; } } +.display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-3 { + font-size: 4rem; } } +.display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-4 { + font-size: 3.5rem; } } +.display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-5 { + font-size: 3rem; } } +.display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-6 { + font-size: 2.5rem; } } +.list-unstyled { + padding-left: 0; + list-style: none; } + +.list-inline { + padding-left: 0; + list-style: none; } + +.list-inline-item { + display: inline-block; } + .list-inline-item:not(:last-child) { + margin-right: 0.5rem; } + +.initialism { + font-size: 0.875em; + text-transform: uppercase; } + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; } + .blockquote > :last-child { + margin-bottom: 0; } + +.blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; } + .blockquote-footer::before { + content: "\2014\00A0"; } + +.img-fluid { + max-width: 100%; + height: auto; } + +.img-thumbnail { + padding: 0.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: 0.5rem; + line-height: 1; } + +.figure-caption { + font-size: 0.875em; + color: var(--bs-secondary-color); } + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + width: 100%; + padding-right: calc(var(--bs-gutter-x) * .5); + padding-left: calc(var(--bs-gutter-x) * .5); + margin-right: auto; + margin-left: auto; } + +@media (min-width: 576px) { + .container-sm, .container { + max-width: 540px; } } + +@media (min-width: 768px) { + .container-md, .container-sm, .container { + max-width: 720px; } } + +@media (min-width: 992px) { + .container-lg, .container-md, .container-sm, .container { + max-width: 960px; } } + +@media (min-width: 1200px) { + .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1140px; } } + +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1320px; } } + +: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.33333%; } + +.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.66667%; } + +.col-auto { + flex: 0 0 auto; + width: auto; } + +.col-1 { + flex: 0 0 auto; + width: 8.33333%; } + +.col-2 { + flex: 0 0 auto; + width: 16.66667%; } + +.col-3 { + flex: 0 0 auto; + width: 25%; } + +.col-4 { + flex: 0 0 auto; + width: 33.33333%; } + +.col-5 { + flex: 0 0 auto; + width: 41.66667%; } + +.col-6 { + flex: 0 0 auto; + width: 50%; } + +.col-7 { + flex: 0 0 auto; + width: 58.33333%; } + +.col-8 { + flex: 0 0 auto; + width: 66.66667%; } + +.col-9 { + flex: 0 0 auto; + width: 75%; } + +.col-10 { + flex: 0 0 auto; + width: 83.33333%; } + +.col-11 { + flex: 0 0 auto; + width: 91.66667%; } + +.col-12 { + flex: 0 0 auto; + width: 100%; } + +.offset-1 { + margin-left: 8.33333%; } + +.offset-2 { + margin-left: 16.66667%; } + +.offset-3 { + margin-left: 25%; } + +.offset-4 { + margin-left: 33.33333%; } + +.offset-5 { + margin-left: 41.66667%; } + +.offset-6 { + margin-left: 50%; } + +.offset-7 { + margin-left: 58.33333%; } + +.offset-8 { + margin-left: 66.66667%; } + +.offset-9 { + margin-left: 75%; } + +.offset-10 { + margin-left: 83.33333%; } + +.offset-11 { + margin-left: 91.66667%; } + +.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.33333%; } + .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.66667%; } + .col-sm-auto { + flex: 0 0 auto; + width: auto; } + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333%; } + .col-sm-2 { + flex: 0 0 auto; + width: 16.66667%; } + .col-sm-3 { + flex: 0 0 auto; + width: 25%; } + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333%; } + .col-sm-5 { + flex: 0 0 auto; + width: 41.66667%; } + .col-sm-6 { + flex: 0 0 auto; + width: 50%; } + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333%; } + .col-sm-8 { + flex: 0 0 auto; + width: 66.66667%; } + .col-sm-9 { + flex: 0 0 auto; + width: 75%; } + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333%; } + .col-sm-11 { + flex: 0 0 auto; + width: 91.66667%; } + .col-sm-12 { + flex: 0 0 auto; + width: 100%; } + .offset-sm-0 { + margin-left: 0; } + .offset-sm-1 { + margin-left: 8.33333%; } + .offset-sm-2 { + margin-left: 16.66667%; } + .offset-sm-3 { + margin-left: 25%; } + .offset-sm-4 { + margin-left: 33.33333%; } + .offset-sm-5 { + margin-left: 41.66667%; } + .offset-sm-6 { + margin-left: 50%; } + .offset-sm-7 { + margin-left: 58.33333%; } + .offset-sm-8 { + margin-left: 66.66667%; } + .offset-sm-9 { + margin-left: 75%; } + .offset-sm-10 { + margin-left: 83.33333%; } + .offset-sm-11 { + margin-left: 91.66667%; } + .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.33333%; } + .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.66667%; } + .col-md-auto { + flex: 0 0 auto; + width: auto; } + .col-md-1 { + flex: 0 0 auto; + width: 8.33333%; } + .col-md-2 { + flex: 0 0 auto; + width: 16.66667%; } + .col-md-3 { + flex: 0 0 auto; + width: 25%; } + .col-md-4 { + flex: 0 0 auto; + width: 33.33333%; } + .col-md-5 { + flex: 0 0 auto; + width: 41.66667%; } + .col-md-6 { + flex: 0 0 auto; + width: 50%; } + .col-md-7 { + flex: 0 0 auto; + width: 58.33333%; } + .col-md-8 { + flex: 0 0 auto; + width: 66.66667%; } + .col-md-9 { + flex: 0 0 auto; + width: 75%; } + .col-md-10 { + flex: 0 0 auto; + width: 83.33333%; } + .col-md-11 { + flex: 0 0 auto; + width: 91.66667%; } + .col-md-12 { + flex: 0 0 auto; + width: 100%; } + .offset-md-0 { + margin-left: 0; } + .offset-md-1 { + margin-left: 8.33333%; } + .offset-md-2 { + margin-left: 16.66667%; } + .offset-md-3 { + margin-left: 25%; } + .offset-md-4 { + margin-left: 33.33333%; } + .offset-md-5 { + margin-left: 41.66667%; } + .offset-md-6 { + margin-left: 50%; } + .offset-md-7 { + margin-left: 58.33333%; } + .offset-md-8 { + margin-left: 66.66667%; } + .offset-md-9 { + margin-left: 75%; } + .offset-md-10 { + margin-left: 83.33333%; } + .offset-md-11 { + margin-left: 91.66667%; } + .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.33333%; } + .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.66667%; } + .col-lg-auto { + flex: 0 0 auto; + width: auto; } + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333%; } + .col-lg-2 { + flex: 0 0 auto; + width: 16.66667%; } + .col-lg-3 { + flex: 0 0 auto; + width: 25%; } + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333%; } + .col-lg-5 { + flex: 0 0 auto; + width: 41.66667%; } + .col-lg-6 { + flex: 0 0 auto; + width: 50%; } + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333%; } + .col-lg-8 { + flex: 0 0 auto; + width: 66.66667%; } + .col-lg-9 { + flex: 0 0 auto; + width: 75%; } + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333%; } + .col-lg-11 { + flex: 0 0 auto; + width: 91.66667%; } + .col-lg-12 { + flex: 0 0 auto; + width: 100%; } + .offset-lg-0 { + margin-left: 0; } + .offset-lg-1 { + margin-left: 8.33333%; } + .offset-lg-2 { + margin-left: 16.66667%; } + .offset-lg-3 { + margin-left: 25%; } + .offset-lg-4 { + margin-left: 33.33333%; } + .offset-lg-5 { + margin-left: 41.66667%; } + .offset-lg-6 { + margin-left: 50%; } + .offset-lg-7 { + margin-left: 58.33333%; } + .offset-lg-8 { + margin-left: 66.66667%; } + .offset-lg-9 { + margin-left: 75%; } + .offset-lg-10 { + margin-left: 83.33333%; } + .offset-lg-11 { + margin-left: 91.66667%; } + .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.33333%; } + .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.66667%; } + .col-xl-auto { + flex: 0 0 auto; + width: auto; } + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333%; } + .col-xl-2 { + flex: 0 0 auto; + width: 16.66667%; } + .col-xl-3 { + flex: 0 0 auto; + width: 25%; } + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333%; } + .col-xl-5 { + flex: 0 0 auto; + width: 41.66667%; } + .col-xl-6 { + flex: 0 0 auto; + width: 50%; } + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333%; } + .col-xl-8 { + flex: 0 0 auto; + width: 66.66667%; } + .col-xl-9 { + flex: 0 0 auto; + width: 75%; } + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333%; } + .col-xl-11 { + flex: 0 0 auto; + width: 91.66667%; } + .col-xl-12 { + flex: 0 0 auto; + width: 100%; } + .offset-xl-0 { + margin-left: 0; } + .offset-xl-1 { + margin-left: 8.33333%; } + .offset-xl-2 { + margin-left: 16.66667%; } + .offset-xl-3 { + margin-left: 25%; } + .offset-xl-4 { + margin-left: 33.33333%; } + .offset-xl-5 { + margin-left: 41.66667%; } + .offset-xl-6 { + margin-left: 50%; } + .offset-xl-7 { + margin-left: 58.33333%; } + .offset-xl-8 { + margin-left: 66.66667%; } + .offset-xl-9 { + margin-left: 75%; } + .offset-xl-10 { + margin-left: 83.33333%; } + .offset-xl-11 { + margin-left: 91.66667%; } + .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.33333%; } + .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.66667%; } + .col-xxl-auto { + flex: 0 0 auto; + width: auto; } + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333%; } + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66667%; } + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; } + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333%; } + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66667%; } + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; } + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333%; } + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66667%; } + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; } + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333%; } + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66667%; } + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; } + .offset-xxl-0 { + margin-left: 0; } + .offset-xxl-1 { + margin-left: 8.33333%; } + .offset-xxl-2 { + margin-left: 16.66667%; } + .offset-xxl-3 { + margin-left: 25%; } + .offset-xxl-4 { + margin-left: 33.33333%; } + .offset-xxl-5 { + margin-left: 41.66667%; } + .offset-xxl-6 { + margin-left: 50%; } + .offset-xxl-7 { + margin-left: 58.33333%; } + .offset-xxl-8 { + margin-left: 66.66667%; } + .offset-xxl-9 { + margin-left: 75%; } + .offset-xxl-10 { + margin-left: 83.33333%; } + .offset-xxl-11 { + margin-left: 91.66667%; } + .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: 0.5rem 0.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: 0.25rem 0.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(even) { + --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: 0.5rem; } + +.col-form-label { + padding-top: calc(0.375rem + var(--bs-border-width)); + padding-bottom: calc(0.375rem + var(--bs-border-width)); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; } + +.col-form-label-lg { + padding-top: calc(0.5rem + var(--bs-border-width)); + padding-bottom: calc(0.5rem + var(--bs-border-width)); + font-size: 1.25rem; } + +.col-form-label-sm { + padding-top: calc(0.25rem + var(--bs-border-width)); + padding-bottom: calc(0.25rem + var(--bs-border-width)); + font-size: 0.875rem; } + +.form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-secondary-color); } + +.form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + 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 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; } } + .form-control[type="file"] { + overflow: hidden; } + .form-control[type="file"]:not(:disabled):not([readonly]) { + cursor: pointer; } + .form-control:focus { + color: var(--bs-body-color); + background-color: var(--bs-body-bg); + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .form-control::-webkit-date-and-time-value { + min-width: 85px; + height: 1.5em; + margin: 0; } + .form-control::-webkit-datetime-edit { + display: block; + padding: 0; } + .form-control::placeholder { + color: var(--bs-secondary-color); + opacity: 1; } + .form-control:disabled { + background-color: var(--bs-secondary-bg); + opacity: 1; } + .form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + margin-inline-end: 0.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 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-control::file-selector-button { + transition: none; } } + .form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: var(--bs-secondary-bg); } + +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.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-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; } + +.form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + .form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + margin-inline-end: 0.5rem; } + +.form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); } + .form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + margin-inline-end: 1rem; } + +textarea.form-control { + min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); } + +textarea.form-control-sm { + min-height: calc(1.5em + 0.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 + 0.75rem + calc(var(--bs-border-width) * 2)); + padding: 0.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 + 0.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: 0.375rem 2.25rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + 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 0.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 0.15s ease-in-out, box-shadow 0.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 0.25rem rgba(13, 110, 253, 0.25); } + .form-select[multiple], .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; } + .form-select:disabled { + background-color: var(--bs-secondary-bg); } + .form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 var(--bs-body-color); } + +.form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + +.form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.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: 0.125rem; } + .form-check .form-check-input { + float: left; + margin-left: -1.5em; } + +.form-check-reverse { + padding-right: 1.5em; + padding-left: 0; + text-align: right; } + .form-check-reverse .form-check-input { + float: right; + margin-right: -1.5em; + margin-left: 0; } + +.form-check-input { + --bs-form-check-bg: var(--bs-body-bg); + flex-shrink: 0; + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + 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); + print-color-adjust: exact; } + .form-check-input[type="checkbox"] { + border-radius: 0.25em; } + .form-check-input[type="radio"] { + border-radius: 50%; } + .form-check-input:active { + filter: brightness(90%); } + .form-check-input:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; } + .form-check-input[type="checkbox"]:checked { + --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[type="radio"]:checked { + --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: 0.5; } + .form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { + cursor: default; + opacity: 0.5; } + +.form-switch { + padding-left: 2.5em; } + .form-switch .form-check-input { + --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 0.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: 0.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; + 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 0.25rem rgba(13, 110, 253, 0.25); } + .form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .form-range::-moz-focus-outer { + border: 0; } + .form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + appearance: none; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-range::-webkit-slider-thumb { + transition: none; } } + .form-range::-webkit-slider-thumb:active { + background-color: #b6d4fe; } + .form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--bs-secondary-bg); + border-color: transparent; + border-radius: 1rem; } + .form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + appearance: none; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-range::-moz-range-thumb { + transition: none; } } + .form-range::-moz-range-thumb:active { + background-color: #b6d4fe; } + .form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: 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 0.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 0.1s ease-in-out, transform 0.1s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-floating > label { + transition: none; } } + .form-floating > .form-control, + .form-floating > .form-control-plaintext { + padding: 1rem 0.75rem; } + .form-floating > .form-control::placeholder, + .form-floating > .form-control-plaintext::placeholder { + color: transparent; } + .form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown), + .form-floating > .form-control-plaintext:focus, + .form-floating > .form-control-plaintext:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; } + .form-floating > .form-control:-webkit-autofill, + .form-floating > .form-control-plaintext:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; } + .form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; } + .form-floating > .form-control:focus ~ label, + .form-floating > .form-control:not(:placeholder-shown) ~ label, + .form-floating > .form-control-plaintext ~ label, + .form-floating > .form-select ~ label { + color: rgba(var(--bs-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } + .form-floating > .form-control:focus ~ label::after, + .form-floating > .form-control:not(:placeholder-shown) ~ label::after, + .form-floating > .form-control-plaintext ~ 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), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } + .form-floating > .form-control-plaintext ~ label { + border-width: var(--bs-border-width) 0; } + .form-floating > :disabled ~ label, + .form-floating > .form-control:disabled ~ label { + color: #6c757d; } + .form-floating > :disabled ~ label::after, + .form-floating > .form-control: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-select, + .input-group > .form-floating { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; } + .input-group > .form-control:focus, + .input-group > .form-select:focus, + .input-group > .form-floating:focus-within { + z-index: 5; } + .input-group .btn { + position: relative; + z-index: 2; } + .input-group .btn:focus { + z-index: 5; } + +.input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: 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 > .form-control, +.input-group-lg > .form-select, +.input-group-lg > .input-group-text, +.input-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); } + +.input-group-sm > .form-control, +.input-group-sm > .form-select, +.input-group-sm > .input-group-text, +.input-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + +.input-group-lg > .form-select, +.input-group-sm > .form-select { + padding-right: 3rem; } + +.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3), +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4), +.input-group.has-validation > .form-floating:nth-last-child(n + 3) > .form-control, +.input-group.has-validation > .form-floating:nth-last-child(n + 3) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: 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: 0.25rem; + font-size: 0.875em; + color: var(--bs-form-valid-color); } + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--bs-success); + border-radius: var(--bs-border-radius); } + +.was-validated :valid ~ .valid-feedback, +.was-validated :valid ~ .valid-tooltip, +.is-valid ~ .valid-feedback, +.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: var(--bs-form-valid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: var(--bs-form-valid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .form-select:valid, .form-select.is-valid { + border-color: var(--bs-form-valid-border-color); } + .was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select[size="1"]:valid:not([multiple]), .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid[size="1"]:not([multiple]) { + --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 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-select:valid:focus, .form-select.is-valid:focus { + border-color: var(--bs-form-valid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + +.was-validated .form-control-color:valid, .form-control-color.is-valid { + width: calc(3rem + calc(1.5em + 0.75rem)); } + +.was-validated .form-check-input:valid, .form-check-input.is-valid { + border-color: var(--bs-form-valid-border-color); } + .was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { + background-color: var(--bs-form-valid-color); } + .was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + .was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: var(--bs-form-valid-color); } + +.form-check-inline .form-check-input ~ .valid-feedback { + margin-left: .5em; } + +.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control.is-valid:not(:focus), .was-validated .input-group > .form-select:not(:focus):valid, +.input-group > .form-select.is-valid:not(:focus), .was-validated .input-group > .form-floating:not(:focus-within):valid, +.input-group > .form-floating.is-valid:not(:focus-within) { + z-index: 3; } + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-form-invalid-color); } + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--bs-danger); + border-radius: var(--bs-border-radius); } + +.was-validated :invalid ~ .invalid-feedback, +.was-validated :invalid ~ .invalid-tooltip, +.is-invalid ~ .invalid-feedback, +.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: var(--bs-form-invalid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: var(--bs-form-invalid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .form-select:invalid, .form-select.is-invalid { + border-color: var(--bs-form-invalid-border-color); } + .was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select[size="1"]:invalid:not([multiple]), .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid[size="1"]:not([multiple]) { + --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 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { + border-color: var(--bs-form-invalid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + +.was-validated .form-control-color:invalid, .form-control-color.is-invalid { + width: calc(3rem + calc(1.5em + 0.75rem)); } + +.was-validated .form-check-input:invalid, .form-check-input.is-invalid { + border-color: var(--bs-form-invalid-border-color); } + .was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { + background-color: var(--bs-form-invalid-color); } + .was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + .was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: var(--bs-form-invalid-color); } + +.form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: .5em; } + +.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control.is-invalid:not(:focus), .was-validated .input-group > .form-select:not(:focus):invalid, +.input-group > .form-select.is-invalid:not(:focus), .was-validated .input-group > .form-floating:not(:focus-within):invalid, +.input-group > .form-floating.is-invalid:not(:focus-within) { + 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; + user-select: none; + border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); + border-radius: var(--bs-btn-border-radius); + background-color: var(--bs-btn-bg); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .btn { + transition: none; } } + .btn:hover { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); } + .btn-check + .btn:hover { + color: var(--bs-btn-color); + background-color: var(--bs-btn-bg); + border-color: var(--bs-btn-border-color); } + .btn:focus-visible { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); } + .btn-check:focus-visible + .btn { + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); } + .btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show { + color: var(--bs-btn-active-color); + background-color: var(--bs-btn-active-bg); + border-color: var(--bs-btn-active-border-color); } + .btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible { + box-shadow: var(--bs-btn-focus-box-shadow); } + .btn-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-lg, .btn-group-lg > .btn { + --bs-btn-padding-y: 0.5rem; + --bs-btn-padding-x: 1rem; + --bs-btn-font-size: 1.25rem; + --bs-btn-border-radius: var(--bs-border-radius-lg); } + +.btn-sm, .btn-group-sm > .btn { + --bs-btn-padding-y: 0.25rem; + --bs-btn-padding-x: 0.5rem; + --bs-btn-font-size: 0.875rem; + --bs-btn-border-radius: var(--bs-border-radius-sm); } + +.fade { + transition: opacity 0.15s linear; } + @media (prefers-reduced-motion: reduce) { + .fade { + transition: none; } } + .fade:not(.show) { + opacity: 0; } + +.collapse:not(.show) { + display: none; } + +.collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; } + @media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; } } + .collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; } + @media (prefers-reduced-motion: reduce) { + .collapsing.collapse-horizontal { + transition: none; } } +.dropup, +.dropend, +.dropdown, +.dropstart, +.dropup-center, +.dropdown-center { + position: relative; } + +.dropdown-toggle { + white-space: nowrap; } + .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; } + .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropdown-menu { + --bs-dropdown-zindex: 1000; + --bs-dropdown-min-width: 10rem; + --bs-dropdown-padding-x: 0; + --bs-dropdown-padding-y: 0.5rem; + --bs-dropdown-spacer: 0.125rem; + --bs-dropdown-font-size: 1rem; + --bs-dropdown-color: 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: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; } + +.dropup .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--bs-dropdown-spacer); } + +.dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; } + +.dropend .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropend .dropdown-toggle::after { + vertical-align: 0; } + +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--bs-dropdown-spacer); } + +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; } + +.dropstart .dropdown-toggle::after { + display: none; } + +.dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; } + +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropstart .dropdown-toggle::before { + vertical-align: 0; } + +.dropdown-divider { + height: 0; + margin: var(--bs-dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--bs-dropdown-divider-bg); + opacity: 1; } + +.dropdown-item { + display: block; + width: 100%; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + clear: both; + font-weight: 400; + color: var(--bs-dropdown-link-color); + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; + border-radius: var(--bs-dropdown-item-border-radius, 0); } + .dropdown-item:hover, .dropdown-item:focus { + color: var(--bs-dropdown-link-hover-color); + background-color: var(--bs-dropdown-link-hover-bg); } + .dropdown-item.active, .dropdown-item:active { + color: var(--bs-dropdown-link-active-color); + text-decoration: none; + background-color: var(--bs-dropdown-link-active-bg); } + .dropdown-item.disabled, .dropdown-item:disabled { + color: var(--bs-dropdown-link-disabled-color); + pointer-events: none; + background-color: transparent; } + +.dropdown-menu.show { + display: block; } + +.dropdown-header { + display: block; + padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); + margin-bottom: 0; + font-size: 0.875rem; + color: var(--bs-dropdown-header-color); + white-space: nowrap; } + +.dropdown-item-text { + display: block; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + color: var(--bs-dropdown-link-color); } + +.dropdown-menu-dark { + --bs-dropdown-color: #dee2e6; + --bs-dropdown-bg: #343a40; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-box-shadow: ; + --bs-dropdown-link-color: #dee2e6; + --bs-dropdown-link-hover-color: #fff; + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-header-color: #adb5bd; } + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; } + .btn-group > .btn, + .btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; } + .btn-group > .btn-check:checked + .btn, + .btn-group > .btn-check:focus + .btn, + .btn-group > .btn:hover, + .btn-group > .btn:focus, + .btn-group > .btn:active, + .btn-group > .btn.active, + .btn-group-vertical > .btn-check:checked + .btn, + .btn-group-vertical > .btn-check:focus + .btn, + .btn-group-vertical > .btn:hover, + .btn-group-vertical > .btn:focus, + .btn-group-vertical > .btn:active, + .btn-group-vertical > .btn.active { + z-index: 1; } + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .btn-toolbar .input-group { + width: auto; } + +.btn-group { + border-radius: var(--bs-border-radius); } + .btn-group > :not(.btn-check:first-child) + .btn, + .btn-group > .btn-group:not(:first-child) { + margin-left: calc(var(--bs-border-width) * -1); } + .btn-group > .btn:not(:last-child):not(.dropdown-toggle), + .btn-group > .btn.dropdown-toggle-split:first-child, + .btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .btn-group > .btn:nth-child(n + 3), + .btn-group > :not(.btn-check) + .btn, + .btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; } + .dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { + margin-left: 0; } + .dropstart .dropdown-toggle-split::before { + margin-right: 0; } + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; } + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; } + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; } + .btn-group-vertical > .btn, + .btn-group-vertical > .btn-group { + width: 100%; } + .btn-group-vertical > .btn:not(:first-child), + .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: calc(var(--bs-border-width) * -1); } + .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), + .btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + .btn-group-vertical > .btn ~ .btn, + .btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.nav { + --bs-nav-link-padding-x: 1rem; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-link-color); + --bs-nav-link-hover-color: var(--bs-link-hover-color); + --bs-nav-link-disabled-color: 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: none; + border: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .nav-link { + transition: none; } } + .nav-link:hover, .nav-link:focus { + color: var(--bs-nav-link-hover-color); } + .nav-link:focus-visible { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.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:hover, .nav-tabs .nav-link:focus { + isolation: isolate; + border-color: var(--bs-nav-tabs-link-hover-border-color); } + .nav-tabs .nav-link.active, + .nav-tabs .nav-item.show .nav-link { + color: var(--bs-nav-tabs-link-active-color); + background-color: var(--bs-nav-tabs-link-active-bg); + border-color: var(--bs-nav-tabs-link-active-border-color); } + .nav-tabs .dropdown-menu { + margin-top: calc(-1 * var(--bs-nav-tabs-border-width)); + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.nav-pills { + --bs-nav-pills-border-radius: 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:hover, .nav-underline .nav-link:focus { + 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-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; } + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; } + +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; } + +.tab-content > .tab-pane { + display: none; } + +.tab-content > .active { + display: block; } + +.navbar { + --bs-navbar-padding-x: 0; + --bs-navbar-padding-y: 0.5rem; + --bs-navbar-color: rgba(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-sm, + .navbar > .container-md, + .navbar > .container-lg, + .navbar > .container-xl, + .navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; } + +.navbar-brand { + padding-top: var(--bs-navbar-brand-padding-y); + padding-bottom: var(--bs-navbar-brand-padding-y); + margin-right: var(--bs-navbar-brand-margin-end); + font-size: var(--bs-navbar-brand-font-size); + color: var(--bs-navbar-brand-color); + text-decoration: none; + white-space: nowrap; } + .navbar-brand:hover, .navbar-brand:focus { + color: var(--bs-navbar-brand-hover-color); } + +.navbar-nav { + --bs-nav-link-padding-x: 0; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-navbar-color); + --bs-nav-link-hover-color: var(--bs-navbar-hover-color); + --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; } + .navbar-nav .nav-link.active, .navbar-nav .nav-link.show { + color: var(--bs-navbar-active-color); } + .navbar-nav .dropdown-menu { + position: static; } + +.navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-navbar-color); } + .navbar-text a, + .navbar-text a:hover, + .navbar-text a:focus { + color: var(--bs-navbar-active-color); } + +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; } + +.navbar-toggler { + padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); + font-size: var(--bs-navbar-toggler-font-size); + line-height: 1; + color: var(--bs-navbar-color); + background-color: transparent; + border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); + border-radius: var(--bs-navbar-toggler-border-radius); + transition: var(--bs-navbar-toggler-transition); } + @media (prefers-reduced-motion: reduce) { + .navbar-toggler { + transition: none; } } + .navbar-toggler:hover { + text-decoration: none; } + .navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width); } + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-image: var(--bs-navbar-toggler-icon-bg); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; } + +.navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; } + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-sm .navbar-nav { + flex-direction: row; } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-sm .navbar-toggler { + display: none; } + .navbar-expand-sm .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-sm .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-sm .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 768px) { + .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-md .navbar-nav { + flex-direction: row; } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-md .navbar-toggler { + display: none; } + .navbar-expand-md .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-md .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-md .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 992px) { + .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-lg .navbar-nav { + flex-direction: row; } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-lg .navbar-toggler { + display: none; } + .navbar-expand-lg .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-lg .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-lg .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-xl .navbar-nav { + flex-direction: row; } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-xl .navbar-toggler { + display: none; } + .navbar-expand-xl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-xl .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-xl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 1400px) { + .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-xxl .navbar-nav { + flex-direction: row; } + .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-xxl .navbar-toggler { + display: none; } + .navbar-expand-xxl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-xxl .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-xxl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +.navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand .navbar-nav { + flex-direction: row; } + .navbar-expand .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand .navbar-nav-scroll { + overflow: visible; } + .navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand .navbar-toggler { + display: none; } + .navbar-expand .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand .offcanvas .offcanvas-header { + display: none; } + .navbar-expand .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } + +.navbar-dark, +.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-top, +.card-img-bottom { + width: 100%; } + +.card-img, +.card-img-top { + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); } + +.card-img, +.card-img-bottom { + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); } + +.card-group > .card { + margin-bottom: var(--bs-card-group-margin); } + +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; } + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; } + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; } } + +.accordion { + --bs-accordion-color: 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, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; } + +.breadcrumb-item.active { + color: var(--bs-breadcrumb-item-active-color); } + +.pagination { + --bs-pagination-padding-x: 0.75rem; + --bs-pagination-padding-y: 0.375rem; + --bs-pagination-font-size: 1rem; + --bs-pagination-color: var(--bs-link-color); + --bs-pagination-bg: 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 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .page-link { + transition: none; } } + .page-link:hover { + z-index: 2; + color: var(--bs-pagination-hover-color); + background-color: var(--bs-pagination-hover-bg); + border-color: var(--bs-pagination-hover-border-color); } + .page-link:focus { + z-index: 3; + color: var(--bs-pagination-focus-color); + background-color: var(--bs-pagination-focus-bg); + outline: 0; + box-shadow: var(--bs-pagination-focus-box-shadow); } + .page-link.active, .active > .page-link { + z-index: 3; + color: var(--bs-pagination-active-color); + background-color: var(--bs-pagination-active-bg); + border-color: var(--bs-pagination-active-border-color); } + .page-link.disabled, .disabled > .page-link { + color: var(--bs-pagination-disabled-color); + pointer-events: none; + background-color: var(--bs-pagination-disabled-bg); + border-color: var(--bs-pagination-disabled-border-color); } + +.page-item:not(:first-child) .page-link { + margin-left: 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, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: var(--bs-progress-height) var(--bs-progress-height); } + +.progress-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:hover, .list-group-item-action:focus { + z-index: 1; + color: var(--bs-list-group-action-hover-color); + text-decoration: none; + background-color: var(--bs-list-group-action-hover-bg); } + .list-group-item-action:active { + color: var(--bs-list-group-action-active-color); + background-color: var(--bs-list-group-action-active-bg); } + +.list-group-item { + position: relative; + display: block; + padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x); + color: var(--bs-list-group-color); + text-decoration: none; + background-color: var(--bs-list-group-bg); + border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color); } + .list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; } + .list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; } + .list-group-item.disabled, .list-group-item:disabled { + color: var(--bs-list-group-disabled-color); + pointer-events: none; + background-color: var(--bs-list-group-disabled-bg); } + .list-group-item.active { + z-index: 2; + color: var(--bs-list-group-active-color); + background-color: var(--bs-list-group-active-bg); + border-color: var(--bs-list-group-active-border-color); } + .list-group-item + .list-group-item { + border-top-width: 0; } + .list-group-item + .list-group-item.active { + margin-top: calc(-1 * var(--bs-list-group-border-width)); + border-top-width: var(--bs-list-group-border-width); } + +.list-group-horizontal { + flex-direction: row; } + .list-group-horizontal > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; } + .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; } + .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; } + .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; } + .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 1400px) { + .list-group-horizontal-xxl { + flex-direction: row; } + .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +.list-group-flush { + border-radius: 0; } + .list-group-flush > .list-group-item { + border-width: 0 0 var(--bs-list-group-border-width); } + .list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; } + +.list-group-item-primary { + --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: 0.25em 0.25em; + color: var(--bs-btn-close-color); + background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat; + border: 0; + border-radius: 0.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; + 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: 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 0.3s ease-out; + transform: translate(0, -50px); } + @media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; } } + .modal.show .modal-dialog { + transform: none; } + .modal.modal-static .modal-dialog { + transform: scale(1.02); } + +.modal-dialog-scrollable { + height: calc(100% - var(--bs-modal-margin) * 2); } + .modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; } + .modal-dialog-scrollable .modal-body { + overflow-y: auto; } + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - var(--bs-modal-margin) * 2); } + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--bs-modal-color); + pointer-events: auto; + background-color: var(--bs-modal-bg); + background-clip: padding-box; + border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); + border-radius: var(--bs-modal-border-radius); + outline: 0; } + +.modal-backdrop { + --bs-backdrop-zindex: 1050; + --bs-backdrop-bg: #000; + --bs-backdrop-opacity: 0.5; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-backdrop-zindex); + width: 100vw; + height: 100vh; + background-color: var(--bs-backdrop-bg); } + .modal-backdrop.fade { + opacity: 0; } + .modal-backdrop.show { + opacity: var(--bs-backdrop-opacity); } + +.modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + 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-header, + .modal-fullscreen .modal-footer { + border-radius: 0; } + .modal-fullscreen .modal-body { + overflow-y: auto; } + +@media (max-width: 575.98px) { + .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-sm-down .modal-header, + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 767.98px) { + .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-md-down .modal-header, + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 991.98px) { + .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-lg-down .modal-header, + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 1199.98px) { + .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-xl-down .modal-header, + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 1399.98px) { + .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-xxl-down .modal-header, + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; } } + +.tooltip { + --bs-tooltip-zindex: 1080; + --bs-tooltip-max-width: 200px; + --bs-tooltip-padding-x: 0.5rem; + --bs-tooltip-padding-y: 0.25rem; + --bs-tooltip-margin: ; + --bs-tooltip-font-size: 0.875rem; + --bs-tooltip-color: 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-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow { + bottom: calc(-1 * var(--bs-tooltip-arrow-height)); } + .bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before { + top: -1px; + border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0; + border-top-color: var(--bs-tooltip-bg); } + +/* rtl:begin:ignore */ +.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow { + left: calc(-1 * var(--bs-tooltip-arrow-height)); + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); } + .bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before { + right: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0; + border-right-color: var(--bs-tooltip-bg); } + +/* rtl:end:ignore */ +.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow { + top: calc(-1 * var(--bs-tooltip-arrow-height)); } + .bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height); + border-bottom-color: var(--bs-tooltip-bg); } + +/* rtl:begin:ignore */ +.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow { + right: calc(-1 * var(--bs-tooltip-arrow-height)); + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); } + .bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before { + left: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height); + border-left-color: var(--bs-tooltip-bg); } + +/* rtl:end:ignore */ +.tooltip-inner { + max-width: var(--bs-tooltip-max-width); + padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x); + color: var(--bs-tooltip-color); + text-align: center; + background-color: var(--bs-tooltip-bg); + border-radius: var(--bs-tooltip-border-radius); } + +.popover { + --bs-popover-zindex: 1070; + --bs-popover-max-width: 276px; + --bs-popover-font-size: 0.875rem; + --bs-popover-bg: 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::before, .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; + border-width: 0; } + +.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow { + bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); } + .bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after { + border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0; } + .bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::before { + bottom: 0; + border-top-color: var(--bs-popover-arrow-border); } + .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after { + bottom: var(--bs-popover-border-width); + border-top-color: var(--bs-popover-bg); } + +/* rtl:begin:ignore */ +.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow { + left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); } + .bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0; } + .bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::before { + left: 0; + border-right-color: var(--bs-popover-arrow-border); } + .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::after { + left: var(--bs-popover-border-width); + border-right-color: var(--bs-popover-bg); } + +/* rtl:end:ignore */ +.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow { + top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); } + .bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after { + border-width: 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height); } + .bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::before { + top: 0; + border-bottom-color: var(--bs-popover-arrow-border); } + .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after { + top: var(--bs-popover-border-width); + border-bottom-color: var(--bs-popover-bg); } + +.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: var(--bs-popover-arrow-width); + margin-left: calc(-.5 * var(--bs-popover-arrow-width)); + content: ""; + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg); } + +/* rtl:begin:ignore */ +.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow { + right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); } + .bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height); } + .bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::before { + right: 0; + border-left-color: var(--bs-popover-arrow-border); } + .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::after { + right: var(--bs-popover-border-width); + border-left-color: var(--bs-popover-bg); } + +/* rtl:end:ignore */ +.popover-header { + padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x); + margin-bottom: 0; + font-size: var(--bs-popover-header-font-size); + color: var(--bs-popover-header-color); + background-color: var(--bs-popover-header-bg); + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-top-left-radius: var(--bs-popover-inner-border-radius); + border-top-right-radius: var(--bs-popover-inner-border-radius); } + .popover-header:empty { + display: none; } + +.popover-body { + padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x); + color: var(--bs-popover-body-color); } + +.carousel { + position: relative; } + +.carousel.pointer-event { + touch-action: pan-y; } + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; } + .carousel-inner::after { + display: block; + clear: both; + content: ""; } + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; } } +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; } + +.carousel-item-next:not(.carousel-item-start), +.active.carousel-item-end { + transform: translateX(100%); } + +.carousel-item-prev:not(.carousel-item-end), +.active.carousel-item-start { + transform: translateX(-100%); } + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; } + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-start, +.carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; } + +.carousel-fade .active.carousel-item-start, +.carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; } + @media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-start, + .carousel-fade .active.carousel-item-end { + transition: none; } } +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; } + @media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; } } + .carousel-control-prev:hover, .carousel-control-prev:focus, + .carousel-control-next:hover, + .carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; } + +.carousel-control-prev { + left: 0; } + +.carousel-control-next { + right: 0; } + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; } + +.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") /*rtl: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-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") /*rtl: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-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: 0.5; + transition: opacity 0.6s ease; } + @media (prefers-reduced-motion: reduce) { + .carousel-indicators [data-bs-target] { + transition: none; } } + .carousel-indicators .active { + opacity: 1; } + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: #fff; + text-align: center; } + +.carousel-dark .carousel-control-prev-icon, +.carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); } + +.carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; } + +.carousel-dark .carousel-caption { + color: #000; } + +[data-bs-theme="dark"] .carousel .carousel-control-prev-icon, +[data-bs-theme="dark"] .carousel .carousel-control-next-icon, .carousel[data-bs-theme="dark"] .carousel-control-prev-icon, +.carousel[data-bs-theme="dark"] .carousel-control-next-icon { + filter: invert(1) grayscale(100); } + +[data-bs-theme="dark"] .carousel .carousel-indicators [data-bs-target], .carousel[data-bs-theme="dark"] .carousel-indicators [data-bs-target] { + background-color: #000; } + +[data-bs-theme="dark"] .carousel .carousel-caption, .carousel[data-bs-theme="dark"] .carousel-caption { + color: #000; } + +.spinner-grow, +.spinner-border { + display: inline-block; + width: var(--bs-spinner-width); + height: var(--bs-spinner-height); + vertical-align: var(--bs-spinner-vertical-align); + border-radius: 50%; + animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); } + +@keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; } } + +.spinner-border { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-border-width: 0.25em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-border; + border: var(--bs-spinner-border-width) solid currentcolor; + border-right-color: transparent; } + +.spinner-border-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; + --bs-spinner-border-width: 0.2em; } + +@keyframes spinner-grow { + 0% { + transform: scale(0); } + 50% { + opacity: 1; + transform: none; } } + +.spinner-grow { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-grow; + background-color: currentcolor; + opacity: 0; } + +.spinner-grow-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; } + +@media (prefers-reduced-motion: reduce) { + .spinner-border, + .spinner-grow { + --bs-spinner-animation-speed: 1.5s; } } + +.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm { + --bs-offcanvas-zindex: 1045; + --bs-offcanvas-width: 400px; + --bs-offcanvas-height: 30vh; + --bs-offcanvas-padding-x: 1rem; + --bs-offcanvas-padding-y: 1rem; + --bs-offcanvas-color: 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.showing, .offcanvas-sm.show:not(.hiding) { + transform: none; } + .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show { + visibility: visible; } } + +@media (min-width: 576px) { + .offcanvas-sm { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-sm .offcanvas-header { + display: none; } + .offcanvas-sm .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 767.98px) { + .offcanvas-md { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: 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.showing, .offcanvas-md.show:not(.hiding) { + transform: none; } + .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show { + visibility: visible; } } + +@media (min-width: 768px) { + .offcanvas-md { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-md .offcanvas-header { + display: none; } + .offcanvas-md .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 991.98px) { + .offcanvas-lg { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: 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.showing, .offcanvas-lg.show:not(.hiding) { + transform: none; } + .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show { + visibility: visible; } } + +@media (min-width: 992px) { + .offcanvas-lg { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-lg .offcanvas-header { + display: none; } + .offcanvas-lg .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 1199.98px) { + .offcanvas-xl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: 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.showing, .offcanvas-xl.show:not(.hiding) { + transform: none; } + .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show { + visibility: visible; } } + +@media (min-width: 1200px) { + .offcanvas-xl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-xl .offcanvas-header { + display: none; } + .offcanvas-xl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 1399.98px) { + .offcanvas-xxl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: 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.showing, .offcanvas-xxl.show:not(.hiding) { + transform: none; } + .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show { + visibility: visible; } } + +@media (min-width: 1400px) { + .offcanvas-xxl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-xxl .offcanvas-header { + display: none; } + .offcanvas-xxl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +.offcanvas { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: 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.showing, .offcanvas.show:not(.hiding) { + transform: none; } + .offcanvas.showing, .offcanvas.hiding, .offcanvas.show { + visibility: visible; } + +.offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; } + .offcanvas-backdrop.fade { + opacity: 0; } + .offcanvas-backdrop.show { + opacity: 0.5; } + +.offcanvas-header { + display: flex; + align-items: center; + 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: 0.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: 0.2; } } + +.placeholder-wave { + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-size: 200% 100%; + animation: placeholder-wave 2s linear infinite; } + +@keyframes placeholder-wave { + 100% { + 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; + text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-primary:hover, .link-primary:focus { + color: RGBA(10, 88, 202, var(--bs-link-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; + text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-secondary:hover, .link-secondary:focus { + color: RGBA(86, 94, 100, var(--bs-link-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; + text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-success:hover, .link-success:focus { + color: RGBA(20, 108, 67, var(--bs-link-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; + text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-info:hover, .link-info:focus { + color: RGBA(61, 213, 243, var(--bs-link-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; + text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-warning:hover, .link-warning:focus { + color: RGBA(255, 205, 57, var(--bs-link-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; + text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-danger:hover, .link-danger:focus { + color: RGBA(176, 42, 55, var(--bs-link-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; + text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-light:hover, .link-light:focus { + color: RGBA(249, 250, 251, var(--bs-link-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; + text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-dark:hover, .link-dark:focus { + color: RGBA(26, 30, 33, var(--bs-link-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; + text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-body-emphasis:hover, .link-body-emphasis:focus { + color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-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: 0.375rem; + align-items: center; + text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5)); + text-underline-offset: 0.25em; + backface-visibility: hidden; } + .icon-link > .bi { + flex-shrink: 0; + width: 1em; + height: 1em; + fill: currentcolor; + transition: 0.2s ease-in-out transform; } + @media (prefers-reduced-motion: reduce) { + .icon-link > .bi { + transition: none; } } +.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi { + transform: var(--bs-icon-link-transform, translate3d(0.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: calc(3 / 4 * 100%); } + +.ratio-16x9 { + --bs-aspect-ratio: calc(9 / 16 * 100%); } + +.ratio-21x9 { + --bs-aspect-ratio: calc(9 / 21 * 100%); } + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; } + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; } + +.sticky-top { + position: sticky; + top: 0; + z-index: 1020; } + +.sticky-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } + +@media (min-width: 576px) { + .sticky-sm-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-sm-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 768px) { + .sticky-md-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-md-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 992px) { + .sticky-lg-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-lg-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 1200px) { + .sticky-xl-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-xl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 1400px) { + .sticky-xxl-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-xxl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +.hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; } + +.vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; } + +.visually-hidden, +.visually-hidden-focusable:not(:focus):not(:focus-within) { + 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:not(caption), + .visually-hidden-focusable:not(:focus):not(:focus-within):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: 0.25; } + +.align-baseline { + vertical-align: baseline !important; } + +.align-top { + vertical-align: top !important; } + +.align-middle { + vertical-align: middle !important; } + +.align-bottom { + vertical-align: bottom !important; } + +.align-text-bottom { + vertical-align: text-bottom !important; } + +.align-text-top { + vertical-align: text-top !important; } + +.float-start { + float: left !important; } + +.float-end { + float: right !important; } + +.float-none { + float: none !important; } + +.object-fit-contain { + object-fit: contain !important; } + +.object-fit-cover { + object-fit: cover !important; } + +.object-fit-fill { + object-fit: fill !important; } + +.object-fit-scale { + object-fit: scale-down !important; } + +.object-fit-none { + object-fit: none !important; } + +.opacity-0 { + opacity: 0 !important; } + +.opacity-25 { + opacity: 0.25 !important; } + +.opacity-50 { + opacity: 0.5 !important; } + +.opacity-75 { + opacity: 0.75 !important; } + +.opacity-100 { + opacity: 1 !important; } + +.overflow-auto { + overflow: auto !important; } + +.overflow-hidden { + overflow: hidden !important; } + +.overflow-visible { + overflow: visible !important; } + +.overflow-scroll { + overflow: scroll !important; } + +.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: 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: 0.25rem !important; } + +.m-2 { + margin: 0.5rem !important; } + +.m-3 { + margin: 1rem !important; } + +.m-4 { + margin: 1.5rem !important; } + +.m-5 { + margin: 3rem !important; } + +.m-auto { + margin: auto !important; } + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; } + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + +.mt-0 { + margin-top: 0 !important; } + +.mt-1 { + margin-top: 0.25rem !important; } + +.mt-2 { + margin-top: 0.5rem !important; } + +.mt-3 { + margin-top: 1rem !important; } + +.mt-4 { + margin-top: 1.5rem !important; } + +.mt-5 { + margin-top: 3rem !important; } + +.mt-auto { + margin-top: auto !important; } + +.me-0 { + margin-right: 0 !important; } + +.me-1 { + margin-right: 0.25rem !important; } + +.me-2 { + margin-right: 0.5rem !important; } + +.me-3 { + margin-right: 1rem !important; } + +.me-4 { + margin-right: 1.5rem !important; } + +.me-5 { + margin-right: 3rem !important; } + +.me-auto { + margin-right: auto !important; } + +.mb-0 { + margin-bottom: 0 !important; } + +.mb-1 { + margin-bottom: 0.25rem !important; } + +.mb-2 { + margin-bottom: 0.5rem !important; } + +.mb-3 { + margin-bottom: 1rem !important; } + +.mb-4 { + margin-bottom: 1.5rem !important; } + +.mb-5 { + margin-bottom: 3rem !important; } + +.mb-auto { + margin-bottom: auto !important; } + +.ms-0 { + margin-left: 0 !important; } + +.ms-1 { + margin-left: 0.25rem !important; } + +.ms-2 { + margin-left: 0.5rem !important; } + +.ms-3 { + margin-left: 1rem !important; } + +.ms-4 { + margin-left: 1.5rem !important; } + +.ms-5 { + margin-left: 3rem !important; } + +.ms-auto { + margin-left: auto !important; } + +.p-0 { + padding: 0 !important; } + +.p-1 { + padding: 0.25rem !important; } + +.p-2 { + padding: 0.5rem !important; } + +.p-3 { + padding: 1rem !important; } + +.p-4 { + padding: 1.5rem !important; } + +.p-5 { + padding: 3rem !important; } + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + +.pt-0 { + padding-top: 0 !important; } + +.pt-1 { + padding-top: 0.25rem !important; } + +.pt-2 { + padding-top: 0.5rem !important; } + +.pt-3 { + padding-top: 1rem !important; } + +.pt-4 { + padding-top: 1.5rem !important; } + +.pt-5 { + padding-top: 3rem !important; } + +.pe-0 { + padding-right: 0 !important; } + +.pe-1 { + padding-right: 0.25rem !important; } + +.pe-2 { + padding-right: 0.5rem !important; } + +.pe-3 { + padding-right: 1rem !important; } + +.pe-4 { + padding-right: 1.5rem !important; } + +.pe-5 { + padding-right: 3rem !important; } + +.pb-0 { + padding-bottom: 0 !important; } + +.pb-1 { + padding-bottom: 0.25rem !important; } + +.pb-2 { + padding-bottom: 0.5rem !important; } + +.pb-3 { + padding-bottom: 1rem !important; } + +.pb-4 { + padding-bottom: 1.5rem !important; } + +.pb-5 { + padding-bottom: 3rem !important; } + +.ps-0 { + padding-left: 0 !important; } + +.ps-1 { + padding-left: 0.25rem !important; } + +.ps-2 { + padding-left: 0.5rem !important; } + +.ps-3 { + padding-left: 1rem !important; } + +.ps-4 { + padding-left: 1.5rem !important; } + +.ps-5 { + padding-left: 3rem !important; } + +.gap-0 { + gap: 0 !important; } + +.gap-1 { + gap: 0.25rem !important; } + +.gap-2 { + gap: 0.5rem !important; } + +.gap-3 { + gap: 1rem !important; } + +.gap-4 { + gap: 1.5rem !important; } + +.gap-5 { + gap: 3rem !important; } + +.row-gap-0 { + row-gap: 0 !important; } + +.row-gap-1 { + row-gap: 0.25rem !important; } + +.row-gap-2 { + row-gap: 0.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 { + column-gap: 0 !important; } + +.column-gap-1 { + column-gap: 0.25rem !important; } + +.column-gap-2 { + column-gap: 0.5rem !important; } + +.column-gap-3 { + column-gap: 1rem !important; } + +.column-gap-4 { + column-gap: 1.5rem !important; } + +.column-gap-5 { + 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 + 0.9vw) !important; } + +.fs-3 { + font-size: calc(1.3rem + 0.6vw) !important; } + +.fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; } + +.fs-5 { + font-size: 1.25rem !important; } + +.fs-6 { + font-size: 1rem !important; } + +.fst-italic { + font-style: italic !important; } + +.fst-normal { + font-style: normal !important; } + +.fw-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; } + +/* rtl:begin:remove */ +.text-break { + word-wrap: break-word !important; + word-break: break-word !important; } + +/* rtl:end:remove */ +.text-primary { + --bs-text-opacity: 1; + color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important; } + +.text-secondary { + --bs-text-opacity: 1; + color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important; } + +.text-success { + --bs-text-opacity: 1; + color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important; } + +.text-info { + --bs-text-opacity: 1; + color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important; } + +.text-warning { + --bs-text-opacity: 1; + color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important; } + +.text-danger { + --bs-text-opacity: 1; + color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important; } + +.text-light { + --bs-text-opacity: 1; + color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important; } + +.text-dark { + --bs-text-opacity: 1; + color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important; } + +.text-black { + --bs-text-opacity: 1; + color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important; } + +.text-white { + --bs-text-opacity: 1; + color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important; } + +.text-body { + --bs-text-opacity: 1; + color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important; } + +.text-muted { + --bs-text-opacity: 1; + color: var(--bs-secondary-color) !important; } + +.text-black-50 { + --bs-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; } + +.text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; } + +.text-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; + text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-secondary { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-success { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-info { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-warning { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-danger { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-light { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-dark { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline { + --bs-link-underline-opacity: 1; + 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 { + user-select: all !important; } + +.user-select-auto { + user-select: auto !important; } + +.user-select-none { + 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 { + object-fit: contain !important; } + .object-fit-sm-cover { + object-fit: cover !important; } + .object-fit-sm-fill { + object-fit: fill !important; } + .object-fit-sm-scale { + object-fit: scale-down !important; } + .object-fit-sm-none { + 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: 0.25rem !important; } + .m-sm-2 { + margin: 0.5rem !important; } + .m-sm-3 { + margin: 1rem !important; } + .m-sm-4 { + margin: 1.5rem !important; } + .m-sm-5 { + margin: 3rem !important; } + .m-sm-auto { + margin: auto !important; } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-sm-0 { + margin-top: 0 !important; } + .mt-sm-1 { + margin-top: 0.25rem !important; } + .mt-sm-2 { + margin-top: 0.5rem !important; } + .mt-sm-3 { + margin-top: 1rem !important; } + .mt-sm-4 { + margin-top: 1.5rem !important; } + .mt-sm-5 { + margin-top: 3rem !important; } + .mt-sm-auto { + margin-top: auto !important; } + .me-sm-0 { + margin-right: 0 !important; } + .me-sm-1 { + margin-right: 0.25rem !important; } + .me-sm-2 { + margin-right: 0.5rem !important; } + .me-sm-3 { + margin-right: 1rem !important; } + .me-sm-4 { + margin-right: 1.5rem !important; } + .me-sm-5 { + margin-right: 3rem !important; } + .me-sm-auto { + margin-right: auto !important; } + .mb-sm-0 { + margin-bottom: 0 !important; } + .mb-sm-1 { + margin-bottom: 0.25rem !important; } + .mb-sm-2 { + margin-bottom: 0.5rem !important; } + .mb-sm-3 { + margin-bottom: 1rem !important; } + .mb-sm-4 { + margin-bottom: 1.5rem !important; } + .mb-sm-5 { + margin-bottom: 3rem !important; } + .mb-sm-auto { + margin-bottom: auto !important; } + .ms-sm-0 { + margin-left: 0 !important; } + .ms-sm-1 { + margin-left: 0.25rem !important; } + .ms-sm-2 { + margin-left: 0.5rem !important; } + .ms-sm-3 { + margin-left: 1rem !important; } + .ms-sm-4 { + margin-left: 1.5rem !important; } + .ms-sm-5 { + margin-left: 3rem !important; } + .ms-sm-auto { + margin-left: auto !important; } + .p-sm-0 { + padding: 0 !important; } + .p-sm-1 { + padding: 0.25rem !important; } + .p-sm-2 { + padding: 0.5rem !important; } + .p-sm-3 { + padding: 1rem !important; } + .p-sm-4 { + padding: 1.5rem !important; } + .p-sm-5 { + padding: 3rem !important; } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-sm-0 { + padding-top: 0 !important; } + .pt-sm-1 { + padding-top: 0.25rem !important; } + .pt-sm-2 { + padding-top: 0.5rem !important; } + .pt-sm-3 { + padding-top: 1rem !important; } + .pt-sm-4 { + padding-top: 1.5rem !important; } + .pt-sm-5 { + padding-top: 3rem !important; } + .pe-sm-0 { + padding-right: 0 !important; } + .pe-sm-1 { + padding-right: 0.25rem !important; } + .pe-sm-2 { + padding-right: 0.5rem !important; } + .pe-sm-3 { + padding-right: 1rem !important; } + .pe-sm-4 { + padding-right: 1.5rem !important; } + .pe-sm-5 { + padding-right: 3rem !important; } + .pb-sm-0 { + padding-bottom: 0 !important; } + .pb-sm-1 { + padding-bottom: 0.25rem !important; } + .pb-sm-2 { + padding-bottom: 0.5rem !important; } + .pb-sm-3 { + padding-bottom: 1rem !important; } + .pb-sm-4 { + padding-bottom: 1.5rem !important; } + .pb-sm-5 { + padding-bottom: 3rem !important; } + .ps-sm-0 { + padding-left: 0 !important; } + .ps-sm-1 { + padding-left: 0.25rem !important; } + .ps-sm-2 { + padding-left: 0.5rem !important; } + .ps-sm-3 { + padding-left: 1rem !important; } + .ps-sm-4 { + padding-left: 1.5rem !important; } + .ps-sm-5 { + padding-left: 3rem !important; } + .gap-sm-0 { + gap: 0 !important; } + .gap-sm-1 { + gap: 0.25rem !important; } + .gap-sm-2 { + gap: 0.5rem !important; } + .gap-sm-3 { + gap: 1rem !important; } + .gap-sm-4 { + gap: 1.5rem !important; } + .gap-sm-5 { + gap: 3rem !important; } + .row-gap-sm-0 { + row-gap: 0 !important; } + .row-gap-sm-1 { + row-gap: 0.25rem !important; } + .row-gap-sm-2 { + row-gap: 0.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 { + column-gap: 0 !important; } + .column-gap-sm-1 { + column-gap: 0.25rem !important; } + .column-gap-sm-2 { + column-gap: 0.5rem !important; } + .column-gap-sm-3 { + column-gap: 1rem !important; } + .column-gap-sm-4 { + column-gap: 1.5rem !important; } + .column-gap-sm-5 { + 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 { + object-fit: contain !important; } + .object-fit-md-cover { + object-fit: cover !important; } + .object-fit-md-fill { + object-fit: fill !important; } + .object-fit-md-scale { + object-fit: scale-down !important; } + .object-fit-md-none { + 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: 0.25rem !important; } + .m-md-2 { + margin: 0.5rem !important; } + .m-md-3 { + margin: 1rem !important; } + .m-md-4 { + margin: 1.5rem !important; } + .m-md-5 { + margin: 3rem !important; } + .m-md-auto { + margin: auto !important; } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-md-0 { + margin-top: 0 !important; } + .mt-md-1 { + margin-top: 0.25rem !important; } + .mt-md-2 { + margin-top: 0.5rem !important; } + .mt-md-3 { + margin-top: 1rem !important; } + .mt-md-4 { + margin-top: 1.5rem !important; } + .mt-md-5 { + margin-top: 3rem !important; } + .mt-md-auto { + margin-top: auto !important; } + .me-md-0 { + margin-right: 0 !important; } + .me-md-1 { + margin-right: 0.25rem !important; } + .me-md-2 { + margin-right: 0.5rem !important; } + .me-md-3 { + margin-right: 1rem !important; } + .me-md-4 { + margin-right: 1.5rem !important; } + .me-md-5 { + margin-right: 3rem !important; } + .me-md-auto { + margin-right: auto !important; } + .mb-md-0 { + margin-bottom: 0 !important; } + .mb-md-1 { + margin-bottom: 0.25rem !important; } + .mb-md-2 { + margin-bottom: 0.5rem !important; } + .mb-md-3 { + margin-bottom: 1rem !important; } + .mb-md-4 { + margin-bottom: 1.5rem !important; } + .mb-md-5 { + margin-bottom: 3rem !important; } + .mb-md-auto { + margin-bottom: auto !important; } + .ms-md-0 { + margin-left: 0 !important; } + .ms-md-1 { + margin-left: 0.25rem !important; } + .ms-md-2 { + margin-left: 0.5rem !important; } + .ms-md-3 { + margin-left: 1rem !important; } + .ms-md-4 { + margin-left: 1.5rem !important; } + .ms-md-5 { + margin-left: 3rem !important; } + .ms-md-auto { + margin-left: auto !important; } + .p-md-0 { + padding: 0 !important; } + .p-md-1 { + padding: 0.25rem !important; } + .p-md-2 { + padding: 0.5rem !important; } + .p-md-3 { + padding: 1rem !important; } + .p-md-4 { + padding: 1.5rem !important; } + .p-md-5 { + padding: 3rem !important; } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-md-0 { + padding-top: 0 !important; } + .pt-md-1 { + padding-top: 0.25rem !important; } + .pt-md-2 { + padding-top: 0.5rem !important; } + .pt-md-3 { + padding-top: 1rem !important; } + .pt-md-4 { + padding-top: 1.5rem !important; } + .pt-md-5 { + padding-top: 3rem !important; } + .pe-md-0 { + padding-right: 0 !important; } + .pe-md-1 { + padding-right: 0.25rem !important; } + .pe-md-2 { + padding-right: 0.5rem !important; } + .pe-md-3 { + padding-right: 1rem !important; } + .pe-md-4 { + padding-right: 1.5rem !important; } + .pe-md-5 { + padding-right: 3rem !important; } + .pb-md-0 { + padding-bottom: 0 !important; } + .pb-md-1 { + padding-bottom: 0.25rem !important; } + .pb-md-2 { + padding-bottom: 0.5rem !important; } + .pb-md-3 { + padding-bottom: 1rem !important; } + .pb-md-4 { + padding-bottom: 1.5rem !important; } + .pb-md-5 { + padding-bottom: 3rem !important; } + .ps-md-0 { + padding-left: 0 !important; } + .ps-md-1 { + padding-left: 0.25rem !important; } + .ps-md-2 { + padding-left: 0.5rem !important; } + .ps-md-3 { + padding-left: 1rem !important; } + .ps-md-4 { + padding-left: 1.5rem !important; } + .ps-md-5 { + padding-left: 3rem !important; } + .gap-md-0 { + gap: 0 !important; } + .gap-md-1 { + gap: 0.25rem !important; } + .gap-md-2 { + gap: 0.5rem !important; } + .gap-md-3 { + gap: 1rem !important; } + .gap-md-4 { + gap: 1.5rem !important; } + .gap-md-5 { + gap: 3rem !important; } + .row-gap-md-0 { + row-gap: 0 !important; } + .row-gap-md-1 { + row-gap: 0.25rem !important; } + .row-gap-md-2 { + row-gap: 0.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 { + column-gap: 0 !important; } + .column-gap-md-1 { + column-gap: 0.25rem !important; } + .column-gap-md-2 { + column-gap: 0.5rem !important; } + .column-gap-md-3 { + column-gap: 1rem !important; } + .column-gap-md-4 { + column-gap: 1.5rem !important; } + .column-gap-md-5 { + 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 { + object-fit: contain !important; } + .object-fit-lg-cover { + object-fit: cover !important; } + .object-fit-lg-fill { + object-fit: fill !important; } + .object-fit-lg-scale { + object-fit: scale-down !important; } + .object-fit-lg-none { + 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: 0.25rem !important; } + .m-lg-2 { + margin: 0.5rem !important; } + .m-lg-3 { + margin: 1rem !important; } + .m-lg-4 { + margin: 1.5rem !important; } + .m-lg-5 { + margin: 3rem !important; } + .m-lg-auto { + margin: auto !important; } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-lg-0 { + margin-top: 0 !important; } + .mt-lg-1 { + margin-top: 0.25rem !important; } + .mt-lg-2 { + margin-top: 0.5rem !important; } + .mt-lg-3 { + margin-top: 1rem !important; } + .mt-lg-4 { + margin-top: 1.5rem !important; } + .mt-lg-5 { + margin-top: 3rem !important; } + .mt-lg-auto { + margin-top: auto !important; } + .me-lg-0 { + margin-right: 0 !important; } + .me-lg-1 { + margin-right: 0.25rem !important; } + .me-lg-2 { + margin-right: 0.5rem !important; } + .me-lg-3 { + margin-right: 1rem !important; } + .me-lg-4 { + margin-right: 1.5rem !important; } + .me-lg-5 { + margin-right: 3rem !important; } + .me-lg-auto { + margin-right: auto !important; } + .mb-lg-0 { + margin-bottom: 0 !important; } + .mb-lg-1 { + margin-bottom: 0.25rem !important; } + .mb-lg-2 { + margin-bottom: 0.5rem !important; } + .mb-lg-3 { + margin-bottom: 1rem !important; } + .mb-lg-4 { + margin-bottom: 1.5rem !important; } + .mb-lg-5 { + margin-bottom: 3rem !important; } + .mb-lg-auto { + margin-bottom: auto !important; } + .ms-lg-0 { + margin-left: 0 !important; } + .ms-lg-1 { + margin-left: 0.25rem !important; } + .ms-lg-2 { + margin-left: 0.5rem !important; } + .ms-lg-3 { + margin-left: 1rem !important; } + .ms-lg-4 { + margin-left: 1.5rem !important; } + .ms-lg-5 { + margin-left: 3rem !important; } + .ms-lg-auto { + margin-left: auto !important; } + .p-lg-0 { + padding: 0 !important; } + .p-lg-1 { + padding: 0.25rem !important; } + .p-lg-2 { + padding: 0.5rem !important; } + .p-lg-3 { + padding: 1rem !important; } + .p-lg-4 { + padding: 1.5rem !important; } + .p-lg-5 { + padding: 3rem !important; } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-lg-0 { + padding-top: 0 !important; } + .pt-lg-1 { + padding-top: 0.25rem !important; } + .pt-lg-2 { + padding-top: 0.5rem !important; } + .pt-lg-3 { + padding-top: 1rem !important; } + .pt-lg-4 { + padding-top: 1.5rem !important; } + .pt-lg-5 { + padding-top: 3rem !important; } + .pe-lg-0 { + padding-right: 0 !important; } + .pe-lg-1 { + padding-right: 0.25rem !important; } + .pe-lg-2 { + padding-right: 0.5rem !important; } + .pe-lg-3 { + padding-right: 1rem !important; } + .pe-lg-4 { + padding-right: 1.5rem !important; } + .pe-lg-5 { + padding-right: 3rem !important; } + .pb-lg-0 { + padding-bottom: 0 !important; } + .pb-lg-1 { + padding-bottom: 0.25rem !important; } + .pb-lg-2 { + padding-bottom: 0.5rem !important; } + .pb-lg-3 { + padding-bottom: 1rem !important; } + .pb-lg-4 { + padding-bottom: 1.5rem !important; } + .pb-lg-5 { + padding-bottom: 3rem !important; } + .ps-lg-0 { + padding-left: 0 !important; } + .ps-lg-1 { + padding-left: 0.25rem !important; } + .ps-lg-2 { + padding-left: 0.5rem !important; } + .ps-lg-3 { + padding-left: 1rem !important; } + .ps-lg-4 { + padding-left: 1.5rem !important; } + .ps-lg-5 { + padding-left: 3rem !important; } + .gap-lg-0 { + gap: 0 !important; } + .gap-lg-1 { + gap: 0.25rem !important; } + .gap-lg-2 { + gap: 0.5rem !important; } + .gap-lg-3 { + gap: 1rem !important; } + .gap-lg-4 { + gap: 1.5rem !important; } + .gap-lg-5 { + gap: 3rem !important; } + .row-gap-lg-0 { + row-gap: 0 !important; } + .row-gap-lg-1 { + row-gap: 0.25rem !important; } + .row-gap-lg-2 { + row-gap: 0.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 { + column-gap: 0 !important; } + .column-gap-lg-1 { + column-gap: 0.25rem !important; } + .column-gap-lg-2 { + column-gap: 0.5rem !important; } + .column-gap-lg-3 { + column-gap: 1rem !important; } + .column-gap-lg-4 { + column-gap: 1.5rem !important; } + .column-gap-lg-5 { + 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 { + object-fit: contain !important; } + .object-fit-xl-cover { + object-fit: cover !important; } + .object-fit-xl-fill { + object-fit: fill !important; } + .object-fit-xl-scale { + object-fit: scale-down !important; } + .object-fit-xl-none { + 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: 0.25rem !important; } + .m-xl-2 { + margin: 0.5rem !important; } + .m-xl-3 { + margin: 1rem !important; } + .m-xl-4 { + margin: 1.5rem !important; } + .m-xl-5 { + margin: 3rem !important; } + .m-xl-auto { + margin: auto !important; } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-xl-0 { + margin-top: 0 !important; } + .mt-xl-1 { + margin-top: 0.25rem !important; } + .mt-xl-2 { + margin-top: 0.5rem !important; } + .mt-xl-3 { + margin-top: 1rem !important; } + .mt-xl-4 { + margin-top: 1.5rem !important; } + .mt-xl-5 { + margin-top: 3rem !important; } + .mt-xl-auto { + margin-top: auto !important; } + .me-xl-0 { + margin-right: 0 !important; } + .me-xl-1 { + margin-right: 0.25rem !important; } + .me-xl-2 { + margin-right: 0.5rem !important; } + .me-xl-3 { + margin-right: 1rem !important; } + .me-xl-4 { + margin-right: 1.5rem !important; } + .me-xl-5 { + margin-right: 3rem !important; } + .me-xl-auto { + margin-right: auto !important; } + .mb-xl-0 { + margin-bottom: 0 !important; } + .mb-xl-1 { + margin-bottom: 0.25rem !important; } + .mb-xl-2 { + margin-bottom: 0.5rem !important; } + .mb-xl-3 { + margin-bottom: 1rem !important; } + .mb-xl-4 { + margin-bottom: 1.5rem !important; } + .mb-xl-5 { + margin-bottom: 3rem !important; } + .mb-xl-auto { + margin-bottom: auto !important; } + .ms-xl-0 { + margin-left: 0 !important; } + .ms-xl-1 { + margin-left: 0.25rem !important; } + .ms-xl-2 { + margin-left: 0.5rem !important; } + .ms-xl-3 { + margin-left: 1rem !important; } + .ms-xl-4 { + margin-left: 1.5rem !important; } + .ms-xl-5 { + margin-left: 3rem !important; } + .ms-xl-auto { + margin-left: auto !important; } + .p-xl-0 { + padding: 0 !important; } + .p-xl-1 { + padding: 0.25rem !important; } + .p-xl-2 { + padding: 0.5rem !important; } + .p-xl-3 { + padding: 1rem !important; } + .p-xl-4 { + padding: 1.5rem !important; } + .p-xl-5 { + padding: 3rem !important; } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-xl-0 { + padding-top: 0 !important; } + .pt-xl-1 { + padding-top: 0.25rem !important; } + .pt-xl-2 { + padding-top: 0.5rem !important; } + .pt-xl-3 { + padding-top: 1rem !important; } + .pt-xl-4 { + padding-top: 1.5rem !important; } + .pt-xl-5 { + padding-top: 3rem !important; } + .pe-xl-0 { + padding-right: 0 !important; } + .pe-xl-1 { + padding-right: 0.25rem !important; } + .pe-xl-2 { + padding-right: 0.5rem !important; } + .pe-xl-3 { + padding-right: 1rem !important; } + .pe-xl-4 { + padding-right: 1.5rem !important; } + .pe-xl-5 { + padding-right: 3rem !important; } + .pb-xl-0 { + padding-bottom: 0 !important; } + .pb-xl-1 { + padding-bottom: 0.25rem !important; } + .pb-xl-2 { + padding-bottom: 0.5rem !important; } + .pb-xl-3 { + padding-bottom: 1rem !important; } + .pb-xl-4 { + padding-bottom: 1.5rem !important; } + .pb-xl-5 { + padding-bottom: 3rem !important; } + .ps-xl-0 { + padding-left: 0 !important; } + .ps-xl-1 { + padding-left: 0.25rem !important; } + .ps-xl-2 { + padding-left: 0.5rem !important; } + .ps-xl-3 { + padding-left: 1rem !important; } + .ps-xl-4 { + padding-left: 1.5rem !important; } + .ps-xl-5 { + padding-left: 3rem !important; } + .gap-xl-0 { + gap: 0 !important; } + .gap-xl-1 { + gap: 0.25rem !important; } + .gap-xl-2 { + gap: 0.5rem !important; } + .gap-xl-3 { + gap: 1rem !important; } + .gap-xl-4 { + gap: 1.5rem !important; } + .gap-xl-5 { + gap: 3rem !important; } + .row-gap-xl-0 { + row-gap: 0 !important; } + .row-gap-xl-1 { + row-gap: 0.25rem !important; } + .row-gap-xl-2 { + row-gap: 0.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 { + column-gap: 0 !important; } + .column-gap-xl-1 { + column-gap: 0.25rem !important; } + .column-gap-xl-2 { + column-gap: 0.5rem !important; } + .column-gap-xl-3 { + column-gap: 1rem !important; } + .column-gap-xl-4 { + column-gap: 1.5rem !important; } + .column-gap-xl-5 { + 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 { + object-fit: contain !important; } + .object-fit-xxl-cover { + object-fit: cover !important; } + .object-fit-xxl-fill { + object-fit: fill !important; } + .object-fit-xxl-scale { + object-fit: scale-down !important; } + .object-fit-xxl-none { + 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: 0.25rem !important; } + .m-xxl-2 { + margin: 0.5rem !important; } + .m-xxl-3 { + margin: 1rem !important; } + .m-xxl-4 { + margin: 1.5rem !important; } + .m-xxl-5 { + margin: 3rem !important; } + .m-xxl-auto { + margin: auto !important; } + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-xxl-0 { + margin-top: 0 !important; } + .mt-xxl-1 { + margin-top: 0.25rem !important; } + .mt-xxl-2 { + margin-top: 0.5rem !important; } + .mt-xxl-3 { + margin-top: 1rem !important; } + .mt-xxl-4 { + margin-top: 1.5rem !important; } + .mt-xxl-5 { + margin-top: 3rem !important; } + .mt-xxl-auto { + margin-top: auto !important; } + .me-xxl-0 { + margin-right: 0 !important; } + .me-xxl-1 { + margin-right: 0.25rem !important; } + .me-xxl-2 { + margin-right: 0.5rem !important; } + .me-xxl-3 { + margin-right: 1rem !important; } + .me-xxl-4 { + margin-right: 1.5rem !important; } + .me-xxl-5 { + margin-right: 3rem !important; } + .me-xxl-auto { + margin-right: auto !important; } + .mb-xxl-0 { + margin-bottom: 0 !important; } + .mb-xxl-1 { + margin-bottom: 0.25rem !important; } + .mb-xxl-2 { + margin-bottom: 0.5rem !important; } + .mb-xxl-3 { + margin-bottom: 1rem !important; } + .mb-xxl-4 { + margin-bottom: 1.5rem !important; } + .mb-xxl-5 { + margin-bottom: 3rem !important; } + .mb-xxl-auto { + margin-bottom: auto !important; } + .ms-xxl-0 { + margin-left: 0 !important; } + .ms-xxl-1 { + margin-left: 0.25rem !important; } + .ms-xxl-2 { + margin-left: 0.5rem !important; } + .ms-xxl-3 { + margin-left: 1rem !important; } + .ms-xxl-4 { + margin-left: 1.5rem !important; } + .ms-xxl-5 { + margin-left: 3rem !important; } + .ms-xxl-auto { + margin-left: auto !important; } + .p-xxl-0 { + padding: 0 !important; } + .p-xxl-1 { + padding: 0.25rem !important; } + .p-xxl-2 { + padding: 0.5rem !important; } + .p-xxl-3 { + padding: 1rem !important; } + .p-xxl-4 { + padding: 1.5rem !important; } + .p-xxl-5 { + padding: 3rem !important; } + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-xxl-0 { + padding-top: 0 !important; } + .pt-xxl-1 { + padding-top: 0.25rem !important; } + .pt-xxl-2 { + padding-top: 0.5rem !important; } + .pt-xxl-3 { + padding-top: 1rem !important; } + .pt-xxl-4 { + padding-top: 1.5rem !important; } + .pt-xxl-5 { + padding-top: 3rem !important; } + .pe-xxl-0 { + padding-right: 0 !important; } + .pe-xxl-1 { + padding-right: 0.25rem !important; } + .pe-xxl-2 { + padding-right: 0.5rem !important; } + .pe-xxl-3 { + padding-right: 1rem !important; } + .pe-xxl-4 { + padding-right: 1.5rem !important; } + .pe-xxl-5 { + padding-right: 3rem !important; } + .pb-xxl-0 { + padding-bottom: 0 !important; } + .pb-xxl-1 { + padding-bottom: 0.25rem !important; } + .pb-xxl-2 { + padding-bottom: 0.5rem !important; } + .pb-xxl-3 { + padding-bottom: 1rem !important; } + .pb-xxl-4 { + padding-bottom: 1.5rem !important; } + .pb-xxl-5 { + padding-bottom: 3rem !important; } + .ps-xxl-0 { + padding-left: 0 !important; } + .ps-xxl-1 { + padding-left: 0.25rem !important; } + .ps-xxl-2 { + padding-left: 0.5rem !important; } + .ps-xxl-3 { + padding-left: 1rem !important; } + .ps-xxl-4 { + padding-left: 1.5rem !important; } + .ps-xxl-5 { + padding-left: 3rem !important; } + .gap-xxl-0 { + gap: 0 !important; } + .gap-xxl-1 { + gap: 0.25rem !important; } + .gap-xxl-2 { + gap: 0.5rem !important; } + .gap-xxl-3 { + gap: 1rem !important; } + .gap-xxl-4 { + gap: 1.5rem !important; } + .gap-xxl-5 { + gap: 3rem !important; } + .row-gap-xxl-0 { + row-gap: 0 !important; } + .row-gap-xxl-1 { + row-gap: 0.25rem !important; } + .row-gap-xxl-2 { + row-gap: 0.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 { + column-gap: 0 !important; } + .column-gap-xxl-1 { + column-gap: 0.25rem !important; } + .column-gap-xxl-2 { + column-gap: 0.5rem !important; } + .column-gap-xxl-3 { + column-gap: 1rem !important; } + .column-gap-xxl-4 { + column-gap: 1.5rem !important; } + .column-gap-xxl-5 { + 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; } } + +.table > thead > tr > th { + background-color: #3c3834; + color: #f1f1f1; } + +.table-filter { + background-color: #34302D; + padding: 9px 12px; } + +.nav > li > a { + color: #838789; } + +.btn-primary { + margin-top: 12px; + border-width: 2px; + transition: border 0.15s; + color: #f1f1f1; + background: #34302D; + border-color: #6db33f; + -webkit-transition: border 0.15s; + -moz-transition: border 0.15s; + -o-transition: border 0.15s; + -ms-transition: border 0.15s; } + .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, + .btn-primary .open .dropdown-toggle { + background-color: #34302D; + border-color: #34302D; } + +.container .text-muted { + margin: 20px 0; } + +code { + font-size: 80%; } + +.xd-container { + margin-top: 40px; + margin-bottom: 100px; + padding-left: 5px; + padding-right: 5px; } + +h1, .h1 { + margin-bottom: 15px; } + +.index-page--subtitle { + font-size: 16px; + line-height: 24px; + margin: 0 0 30px; } + +.form-horizontal button.btn-inverse { + margin-left: 32px; } + +#job-params-modal .modal-dialog { + width: 90%; + margin-left: auto; + margin-right: auto; } + +.splash[ng-cloak] { + display: block !important; } + +[ng-cloak] { + display: none; } + +.splash { + background: #6db33f; + color: #34302D; + display: none; } + +.error-page { + margin-top: 100px; + text-align: center; } + +.error-page .error-title { + font-size: 24px; + line-height: 24px; + margin: 30px 0 0; } + +table td { + vertical-align: middle; } + +table td .progress { + margin-bottom: 0; } + +table td.action-column { + width: 1px; } + +.help-block { + color: #b6afaa; } + +.xd-containers { + font-size: 15px; } + +.cluster-view > table td { + vertical-align: top; } + +.cluster-view .label, .cluster-view .column-block { + display: block; } + +.cluster-view .input-group-addon { + width: 0%; } + +.cluster-view { + margin-bottom: 0; } + +.container-details-table th { + background-color: #3c3834; + color: #f1f1f1; } + +.status-help-content-table td { + color: #34302D; } + +.logo { + width: 200px; } + +.myspinner { + animation-name: spinner; + animation-duration: 2s; + animation-iteration-count: infinite; + animation-timing-function: linear; + -webkit-transform-origin: 49% 50%; + -webkit-animation-name: spinner; + -webkit-animation-duration: 2s; + -webkit-animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; } + +hr { + border-top: 1px dotted #34302D; } + +@font-face { + font-family: 'varela_roundregular'; + src: url("../fonts/varela_round-webfont.eot"); + src: url("../fonts/varela_round-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/varela_round-webfont.woff") format("woff"), url("../fonts/varela_round-webfont.ttf") format("truetype"), url("../fonts/varela_round-webfont.svg#varela_roundregular") format("svg"); + font-weight: normal; + font-style: normal; } + +@font-face { + font-family: 'montserratregular'; + src: url("../fonts/montserrat-webfont.eot"); + src: url("../fonts/montserrat-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/montserrat-webfont.woff") format("woff"), url("../fonts/montserrat-webfont.ttf") format("truetype"), url("../fonts/montserrat-webfont.svg#montserratregular") format("svg"); + font-weight: normal; + font-style: normal; } + +body, h1, .h1, h2, .h2, h3, .h3, p, input { + margin: 0; + font-weight: 400; + font-family: "varela_roundregular", sans-serif; + color: #34302d; } + +h1, .h1 { + font-size: 24px; + line-height: 30px; + font-family: "montserratregular", sans-serif; } + +h2, .h2 { + font-size: 18px; + font-weight: 700; + line-height: 24px; + margin-bottom: 10px; + font-family: "montserratregular", sans-serif; } + +h3, .h3 { + font-size: 16px; + line-height: 24px; + margin-bottom: 10px; + font-weight: 700; } + +strong { + font-weight: 700; + font-family: "montserratregular", sans-serif; } + +.navbar { + border-top: 4px solid #6db33f; + background-color: #34302d; + margin-bottom: 0px; + border-bottom: 0; + border-left: 0; + border-right: 0; } + +.navbar a.navbar-brand { + background: url("../images/spring-logo-dataflow.png") -1px -1px no-repeat; + margin: 12px 0 6px; + width: 229px; + height: 46px; + display: inline-block; + text-decoration: none; + padding: 0; } + +.navbar a.navbar-brand span { + display: block; + width: 229px; + height: 46px; + background: url("../images/spring-logo-dataflow.png") -1px -48px no-repeat; + opacity: 0; + -moz-transition: opacity 0.12s ease-in-out; + -webkit-transition: opacity 0.12s ease-in-out; + -o-transition: opacity 0.12s ease-in-out; } + +.navbar a.navbar-brand:hover span { + opacity: 1; } + +.navbar li > a, .navbar-text { + font-family: "montserratregular", sans-serif; + text-shadow: none; + font-size: 14px; + /* line-height: 14px; */ + padding: 28px 20px; + transition: all 0.15s; + -webkit-transition: all 0.15s; + -moz-transition: all 0.15s; + -o-transition: all 0.15s; + -ms-transition: all 0.15s; } + +.navbar li > a { + text-transform: uppercase; } + +.navbar .navbar-text { + margin-top: 0; + margin-bottom: 0; } + +.navbar li:hover > a { + color: #eeeeee; + background-color: #6db33f; } + +.navbar-toggle { + border-width: 0; } + .navbar-toggle .icon-bar + .icon-bar { + margin-top: 3px; } + .navbar-toggle .icon-bar { + width: 19px; + height: 3px; } + +@media (max-width: 768px) { + .navbar-toggle { + position: absolute; + z-index: 9999; + left: 0px; + top: 0px; } + .navbar a.navbar-brand { + display: block; + margin: 0 auto 0 auto; + width: 148px; + height: 50px; + float: none; + background: url("../images/spring-logo-dataflow-mobile.png") 0 center no-repeat; } + .homepage-billboard .homepage-subtitle { + font-size: 21px; + line-height: 21px; } + .navbar a.navbar-brand span { + display: none; } + .navbar { + border-top-width: 0; } + .xd-container { + margin-top: 20px; + margin-bottom: 30px; } + .index-page--subtitle { + margin-top: 10px; + margin-bottom: 30px; } } + +/*# sourceMappingURL=../../../../../target/petclinic.css.map */ \ No newline at end of file diff --git a/spring-petclinic-api-gateway/src/main/resources/static/css/responsive.css b/spring-petclinic-api-gateway/src/main/resources/static/css/responsive.css new file mode 100644 index 000000000..4d2cb8d9b --- /dev/null +++ b/spring-petclinic-api-gateway/src/main/resources/static/css/responsive.css @@ -0,0 +1,28 @@ +@media (max-width: 768px) { + .navbar-toggle { + position: absolute; + z-index: 9999; + left: 0px; + top: 0px; } + .navbar a.navbar-brand { + display: block; + margin: 0 auto 0 auto; + width: 148px; + height: 50px; + float: none; + background: url("../images/spring-logo-dataflow-mobile.png") 0 center no-repeat; } + .homepage-billboard .homepage-subtitle { + font-size: 21px; + line-height: 21px; } + .navbar a.navbar-brand span { + display: none; } + .navbar { + border-top-width: 0; } + .xd-container { + margin-top: 20px; + margin-bottom: 30px; } + .index-page--subtitle { + margin-top: 10px; + margin-bottom: 30px; } } + +/*# sourceMappingURL=../../../../../target/responsive.css.map */ \ No newline at end of file diff --git a/spring-petclinic-api-gateway/src/main/resources/static/css/typography.css b/spring-petclinic-api-gateway/src/main/resources/static/css/typography.css new file mode 100644 index 000000000..da0411668 --- /dev/null +++ b/spring-petclinic-api-gateway/src/main/resources/static/css/typography.css @@ -0,0 +1,43 @@ +@font-face { + font-family: 'varela_roundregular'; + src: url("../fonts/varela_round-webfont.eot"); + src: url("../fonts/varela_round-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/varela_round-webfont.woff") format("woff"), url("../fonts/varela_round-webfont.ttf") format("truetype"), url("../fonts/varela_round-webfont.svg#varela_roundregular") format("svg"); + font-weight: normal; + font-style: normal; } + +@font-face { + font-family: 'montserratregular'; + src: url("../fonts/montserrat-webfont.eot"); + src: url("../fonts/montserrat-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/montserrat-webfont.woff") format("woff"), url("../fonts/montserrat-webfont.ttf") format("truetype"), url("../fonts/montserrat-webfont.svg#montserratregular") format("svg"); + font-weight: normal; + font-style: normal; } + +body, h1, h2, h3, p, input { + margin: 0; + font-weight: 400; + font-family: "varela_roundregular", sans-serif; + color: #34302d; } + +h1 { + font-size: 24px; + line-height: 30px; + font-family: "montserratregular", sans-serif; } + +h2 { + font-size: 18px; + font-weight: 700; + line-height: 24px; + margin-bottom: 10px; + font-family: "montserratregular", sans-serif; } + +h3 { + font-size: 16px; + line-height: 24px; + margin-bottom: 10px; + font-weight: 700; } + +strong { + font-weight: 700; + font-family: "montserratregular", sans-serif; } + +/*# sourceMappingURL=../../../../../target/typography.css.map */ \ No newline at end of file diff --git a/spring-petclinic-api-gateway/src/main/resources/static/index.html b/spring-petclinic-api-gateway/src/main/resources/static/index.html index c947c3e3e..f7e49ef29 100644 --- a/spring-petclinic-api-gateway/src/main/resources/static/index.html +++ b/spring-petclinic-api-gateway/src/main/resources/static/index.html @@ -14,8 +14,8 @@ PetClinic :: a Spring Framework demonstration + - @@ -51,7 +51,7 @@ - +
diff --git a/spring-petclinic-api-gateway/src/main/resources/static/scripts/fragments/nav.html b/spring-petclinic-api-gateway/src/main/resources/static/scripts/fragments/nav.html index 6005cfe3f..f1ed2851d 100644 --- a/spring-petclinic-api-gateway/src/main/resources/static/scripts/fragments/nav.html +++ b/spring-petclinic-api-gateway/src/main/resources/static/scripts/fragments/nav.html @@ -1,38 +1,44 @@ -
+ +
+ +
+
+ +
+ +
+
+ + + + + + + + diff --git a/spring-petclinic-api-gateway/src/main/resources/static/scripts/genai/chat.js b/spring-petclinic-api-gateway/src/main/resources/static/scripts/genai/chat.js new file mode 100644 index 000000000..ec7891614 --- /dev/null +++ b/spring-petclinic-api-gateway/src/main/resources/static/scripts/genai/chat.js @@ -0,0 +1,81 @@ +function appendMessage(message, type) { + const chatMessages = document.getElementById('chatbox-messages'); + const messageElement = document.createElement('div'); + messageElement.classList.add('chat-bubble', type); + + // Convert Markdown to HTML + const htmlContent = marked.parse(message); // Use marked.parse() for newer versions + messageElement.innerHTML = htmlContent; + + chatMessages.appendChild(messageElement); + + // Scroll to the bottom of the chatbox to show the latest message + chatMessages.scrollTop = chatMessages.scrollHeight; +} + +function toggleChatbox() { + const chatbox = document.getElementById('chatbox'); + const chatboxContent = document.getElementById('chatbox-content'); + + if (chatbox.classList.contains('minimized')) { + chatbox.classList.remove('minimized'); + chatboxContent.style.height = '400px'; // Set to initial height when expanded + } else { + chatbox.classList.add('minimized'); + chatboxContent.style.height = '40px'; // Set to minimized height + } +} + +function sendMessage() { + const query = document.getElementById('chatbox-input').value; + + // Only send if there's a message + if (!query.trim()) return; + + // Clear the input field after sending the message + document.getElementById('chatbox-input').value = ''; + + // Display user message in the chatbox + appendMessage(query, 'user'); + + // Send the message to the backend + fetch('/api/genai/chatclient', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(query), + }) + .then(response => response.text()) + .then(responseText => { + // Display the response from the server in the chatbox + appendMessage(responseText, 'bot'); + }) + .catch(error => { + console.error('Error:', error); + // Display the fallback message in the chatbox + appendMessage('Chat is currently unavailable', 'bot'); + }); +} + +function handleKeyPress(event) { + if (event.key === "Enter") { + event.preventDefault(); // Prevents adding a newline + sendMessage(); // Send the message when Enter is pressed + } +} + +// Save chat messages to localStorage +function saveChatMessages() { + const messages = document.getElementById('chatbox-messages').innerHTML; + localStorage.setItem('chatMessages', messages); +} + +// Load chat messages from localStorage +function loadChatMessages() { + const messages = localStorage.getItem('chatMessages'); + if (messages) { + document.getElementById('chatbox-messages').innerHTML = messages; + document.getElementById('chatbox-messages').scrollTop = document.getElementById('chatbox-messages').scrollHeight; + } +} diff --git a/spring-petclinic-api-gateway/src/main/resources/static/scss/petclinic.scss b/spring-petclinic-api-gateway/src/main/resources/static/scss/petclinic.scss index 7f3e64ed2..9136fbd6e 100644 --- a/spring-petclinic-api-gateway/src/main/resources/static/scss/petclinic.scss +++ b/spring-petclinic-api-gateway/src/main/resources/static/scss/petclinic.scss @@ -21,6 +21,20 @@ $spring-brown: #34302D; $spring-grey: #838789; $spring-light-grey: #f1f1f1; +$chatbox-bg-color: #f1f1f1; +$chatbox-header-bg-color: #075E54; +$chatbox-header-text-color: white; +$chatbox-height: 400px; +$chatbox-border-radius: 10px; +$chatbox-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); +$chatbox-bubble-user-bg-color: #dcf8c6; +$chatbox-bubble-bot-bg-color: #ffffff; +$chatbox-bubble-border-color: #e1e1e1; +$chatbox-footer-bg-color: #f9f9f9; +$chatbox-input-border-color: #ccc; +$chatbox-button-bg-color: #075E54; +$chatbox-button-hover-bg-color: #128C7E; + $body-bg: $spring-light-grey; $text-color: $spring-brown; $link-color: $spring-dark-green; @@ -209,6 +223,117 @@ hr { border-top: 1px dotted $spring-brown; } +/* Chatbox container */ +.chatbox { + position: fixed; + bottom: 10px; + right: 10px; + width: 300px; + background-color: $chatbox-bg-color; + border-radius: $chatbox-border-radius; + box-shadow: $chatbox-box-shadow; + display: flex; + flex-direction: column; + + &.minimized { + .chatbox-content { + height: 40px; /* Height when minimized (header only) */ + } + .chatbox-messages, + .chatbox-footer { + display: none; + } + } +} + +/* Header styling */ +.chatbox-header { + background-color: $chatbox-header-bg-color; + color: $chatbox-header-text-color; + padding: 10px; + text-align: center; + border-top-left-radius: $chatbox-border-radius; + border-top-right-radius: $chatbox-border-radius; + cursor: pointer; +} + +/* Chatbox content styling */ +.chatbox-content { + display: flex; + flex-direction: column; + height: $chatbox-height; /* Adjust to desired height */ + overflow: hidden; /* Hide overflow to make it scrollable */ +} + +.chatbox-messages { + flex-grow: 1; + overflow-y: auto; /* Allows vertical scrolling */ + padding: 10px; +} + +/* Chat bubbles styling */ +.chat-bubble { + max-width: 80%; + padding: 10px; + border-radius: 20px; + margin-bottom: 10px; + position: relative; + word-wrap: break-word; + font-size: 14px; + + strong { + font-weight: bold; + } + + em { + font-style: italic; + } + + &.user { + background-color: $chatbox-bubble-user-bg-color; /* WhatsApp-style light green */ + margin-left: auto; + text-align: right; + border-bottom-right-radius: 0; + } + + &.bot { + background-color: $chatbox-bubble-bot-bg-color; + margin-right: auto; + text-align: left; + border-bottom-left-radius: 0; + border: 1px solid $chatbox-bubble-border-color; + } +} + +/* Input field and button */ +.chatbox-footer { + padding: 10px; + background-color: $chatbox-footer-bg-color; + display: flex; +} + +.chatbox-footer input { + flex-grow: 1; + padding: 10px; + border-radius: 20px; + border: 1px solid $chatbox-input-border-color; + margin-right: 10px; + outline: none; +} + +.chatbox-footer button { + background-color: $chatbox-button-bg-color; + color: white; + border: none; + padding: 10px; + border-radius: 50%; + cursor: pointer; + + &:hover { + background-color: $chatbox-button-hover-bg-color; + } +} + @import "typography.scss"; @import "header.scss"; @import "responsive.scss"; diff --git a/spring-petclinic-config-server/pom.xml b/spring-petclinic-config-server/pom.xml index 36db9e1c0..5556418a4 100644 --- a/spring-petclinic-config-server/pom.xml +++ b/spring-petclinic-config-server/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.2.7 + 3.3.4 diff --git a/spring-petclinic-customers-service/pom.xml b/spring-petclinic-customers-service/pom.xml index 56cf73dc3..0817f826f 100644 --- a/spring-petclinic-customers-service/pom.xml +++ b/spring-petclinic-customers-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.2.7 + 3.3.4 diff --git a/spring-petclinic-discovery-server/pom.xml b/spring-petclinic-discovery-server/pom.xml index 74e1f8a27..0dfc3a642 100644 --- a/spring-petclinic-discovery-server/pom.xml +++ b/spring-petclinic-discovery-server/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.2.7 + 3.3.4 diff --git a/spring-petclinic-genai-service/.gitignore b/spring-petclinic-genai-service/.gitignore new file mode 100644 index 000000000..c71ea97ab --- /dev/null +++ b/spring-petclinic-genai-service/.gitignore @@ -0,0 +1 @@ +/.apt_generated/ diff --git a/spring-petclinic-genai-service/pom.xml b/spring-petclinic-genai-service/pom.xml new file mode 100644 index 000000000..a664bbaf1 --- /dev/null +++ b/spring-petclinic-genai-service/pom.xml @@ -0,0 +1,181 @@ + + + 4.0.0 + + org.springframework.samples.petclinic.vets + spring-petclinic-genai-service + jar + Spring PetClinic Generative AI Service + + + org.springframework.samples + spring-petclinic-microservices + 3.3.4 + + + + 8081 + ${basedir}/../docker + 1.0.0-M4 + + + + + + org.springframework.ai + spring-ai-openai-spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-cache + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-test + test + + + + + org.springframework.cloud + spring-cloud-starter-circuitbreaker-reactor-resilience4j + + + org.springframework.cloud + spring-cloud-starter-config + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + org.springframework.cloud + spring-cloud-starter-gateway + + + + + javax.cache + cache-api + + + jakarta.xml.bind + jakarta.xml.bind-api + + + com.github.ben-manes.caffeine + caffeine + + + org.jolokia + jolokia-core + + + org.hsqldb + hsqldb + runtime + + + com.mysql + mysql-connector-j + runtime + + + io.micrometer + micrometer-registry-prometheus + + + de.codecentric + chaos-monkey-spring-boot + + + io.opentelemetry + opentelemetry-exporter-zipkin + + + io.micrometer + micrometer-observation + + + io.micrometer + micrometer-tracing-bridge-brave + + + io.zipkin.reporter2 + zipkin-reporter-brave + + + net.ttddyy.observation + datasource-micrometer-spring-boot + 1.0.2 + + + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + + + + + org.springframework.ai + spring-ai-bom + ${spring-ai.version} + pom + import + + + + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + + + + buildDocker + + + + org.codehaus.mojo + exec-maven-plugin + + + + + + diff --git a/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/AIBeanConfiguration.java b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/AIBeanConfiguration.java new file mode 100644 index 000000000..13c954c42 --- /dev/null +++ b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/AIBeanConfiguration.java @@ -0,0 +1,36 @@ +package org.springframework.samples.petclinic.genai; + +import org.springframework.ai.chat.memory.ChatMemory; +import org.springframework.ai.chat.memory.InMemoryChatMemory; +import org.springframework.ai.embedding.EmbeddingModel; +import org.springframework.ai.vectorstore.SimpleVectorStore; +import org.springframework.ai.vectorstore.VectorStore; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.reactive.function.client.WebClient; + +/** + * A Configuration class for beans used by the Chat Client. + * + * @author Oded Shopen + */ +@Configuration +public class AIBeanConfiguration { + + @Bean + public ChatMemory chatMemory() { + return new InMemoryChatMemory(); + } + + @Bean + VectorStore vectorStore(EmbeddingModel embeddingModel) { + return new SimpleVectorStore(embeddingModel); + } + + @Bean + @LoadBalanced + public WebClient.Builder loadBalancedWebClientBuilder() { + return WebClient.builder(); + } +} diff --git a/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/AIDataProvider.java b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/AIDataProvider.java new file mode 100644 index 000000000..04f4e8b0f --- /dev/null +++ b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/AIDataProvider.java @@ -0,0 +1,77 @@ +package org.springframework.samples.petclinic.genai; + +import java.util.List; + +import org.springframework.ai.document.Document; +import org.springframework.ai.vectorstore.SearchRequest; +import org.springframework.ai.vectorstore.VectorStore; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.samples.petclinic.genai.dto.OwnerDetails; +import org.springframework.samples.petclinic.genai.dto.PetDetails; +import org.springframework.stereotype.Service; +import org.springframework.web.reactive.function.client.WebClient; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * Functions that are invoked by the LLM will use this bean to query the system of record + * for information such as listing owners and vets, or adding pets to an owner. + * + * @author Oded Shopen + */ +@Service +public class AIDataProvider { + + private final VectorStore vectorStore; + private final String ownersHostname = "http://customers-service/"; + + private final WebClient webClient; + + + public AIDataProvider(WebClient.Builder webClientBuilder, VectorStore vectorStore) { + this.webClient = webClientBuilder.build(); + this.vectorStore = vectorStore; + } + + public OwnersResponse getAllOwners() { + return new OwnersResponse(webClient + .get() + .uri(ownersHostname + "owners") + .retrieve() + .bodyToMono(new ParameterizedTypeReference>() {}) + .block()); + } + + public VetResponse getVets(VetRequest request) throws JsonProcessingException { + ObjectMapper objectMapper = new ObjectMapper(); + String vetAsJson = objectMapper.writeValueAsString(request.vet()); + + SearchRequest sr = SearchRequest.from(SearchRequest.defaults()).withQuery(vetAsJson).withTopK(20); + if (request.vet() == null) { + // Provide a limit of 50 results when zero parameters are sent + sr = sr.withTopK(50); + } + + List topMatches = this.vectorStore.similaritySearch(sr); + List results = topMatches.stream().map(Document::getContent).toList(); + return new VetResponse(results); + } + + public AddedPetResponse addPetToOwner(AddPetRequest request) { + return new AddedPetResponse(webClient + .post() + .uri(ownersHostname + "owners/"+request.ownerId()+"/pets") + .bodyValue(request.pet()) + .retrieve().bodyToMono(PetDetails.class).block()); + } + + public OwnerResponse addOwnerToPetclinic(OwnerRequest ownerRequest) { + return new OwnerResponse(webClient + .post() + .uri(ownersHostname + "owners") + .bodyValue(ownerRequest) + .retrieve().bodyToMono(OwnerDetails.class).block()); + } + +} diff --git a/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/AIFunctionConfiguration.java b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/AIFunctionConfiguration.java new file mode 100644 index 000000000..25f3ad8a0 --- /dev/null +++ b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/AIFunctionConfiguration.java @@ -0,0 +1,95 @@ +package org.springframework.samples.petclinic.genai; + +import java.util.List; +import java.util.function.Function; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Description; +import org.springframework.samples.petclinic.genai.dto.OwnerDetails; +import org.springframework.samples.petclinic.genai.dto.PetDetails; +import org.springframework.samples.petclinic.genai.dto.PetRequest; +import org.springframework.samples.petclinic.genai.dto.Vet; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import jakarta.validation.constraints.Digits; +import jakarta.validation.constraints.NotBlank; + +/** + * This class defines the @Bean functions that the LLM provider will invoke when it + * requires more Information on a given topic. The currently available functions enable + * the LLM to get the list of owners and their pets, get information about the + * veterinarians, and add a pet to an owner. + * + * @author Oded Shopen + */ +@Configuration +class AIFunctionConfiguration { + + private static final Logger LOG = LoggerFactory.getLogger(AIFunctionConfiguration.class); + + // The @Description annotation helps the model understand when to call the function + @Bean + @Description("List the owners that the pet clinic has") + public Function listOwners(AIDataProvider petclinicAiProvider) { + return request -> petclinicAiProvider.getAllOwners(); + } + + @Bean + @Description("Add a new pet owner to the pet clinic. " + "The Owner must include a first name and a last name " + + "as two separate words, " + "plus an address and a 10-digit phone number") + public Function addOwnerToPetclinic(AIDataProvider petclinicAiDataProvider) { + return petclinicAiDataProvider::addOwnerToPetclinic; + } + + @Bean + @Description("List the veterinarians that the pet clinic has") + public Function listVets(AIDataProvider petclinicAiProvider) { + return request -> { + try { + return petclinicAiProvider.getVets(request); + } + catch (JsonProcessingException e) { + LOG.error("Error processing JSON in the listVets function", e); + return null; + } + }; + } + + @Bean + @Description("Add a pet with the specified petTypeId, " + "to an owner identified by the ownerId. " + + "The allowed Pet types IDs are only: " + "1 - cat" + "2 - dog" + "3 - lizard" + "4 - snake" + "5 - bird" + + "6 - hamster") + public Function addPetToOwner(AIDataProvider petclinicAiProvider) { + return petclinicAiProvider::addPetToOwner; + } + +} + +record AddPetRequest(PetRequest pet, Integer ownerId) { +} + +record OwnersResponse(List owners) { +} + +record OwnerResponse(OwnerDetails owner) { +} + +record AddedPetResponse(PetDetails pet) { +} + +record VetResponse(List vet) { +} + +record VetRequest(Vet vet) { +} + +record OwnerRequest(@NotBlank String firstName, + @NotBlank String lastName, + @NotBlank String address, + @NotBlank String city, + @NotBlank @Digits(fraction = 0, integer = 12) String telephone) { +} diff --git a/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/GenAIServiceApplication.java b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/GenAIServiceApplication.java new file mode 100644 index 000000000..c2c02cf06 --- /dev/null +++ b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/GenAIServiceApplication.java @@ -0,0 +1,32 @@ +/* + * Copyright 2002-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.genai; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +/** + * @author Oded Shopen + */ +@EnableDiscoveryClient +@SpringBootApplication +public class GenAIServiceApplication { + + public static void main(String[] args) { + SpringApplication.run(GenAIServiceApplication.class, args); + } +} diff --git a/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/PetclinicChatClient.java b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/PetclinicChatClient.java new file mode 100644 index 000000000..972704ab6 --- /dev/null +++ b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/PetclinicChatClient.java @@ -0,0 +1,75 @@ +package org.springframework.samples.petclinic.genai; + +import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.DEFAULT_CHAT_MEMORY_CONVERSATION_ID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.ai.chat.client.ChatClient; +import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor; +import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor; +import org.springframework.ai.chat.memory.ChatMemory; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * This REST controller is being invoked by the in order to interact with the LLM + * + * @author Oded Shopen + */ +@RestController +@RequestMapping("/") +public class PetclinicChatClient { + + private static final Logger LOG = LoggerFactory.getLogger(PetclinicChatClient.class); + + // ChatModel is the primary interfaces for interacting with an LLM + // it is a request/response interface that implements the ModelModel + // interface. Make suer to visit the source code of the ChatModel and + // checkout the interfaces in the core Spring AI package. + private final ChatClient chatClient; + + public PetclinicChatClient(ChatClient.Builder builder, ChatMemory chatMemory) { + // @formatter:off + this.chatClient = builder + .defaultSystem(""" + You are a friendly AI assistant designed to help with the management of a veterinarian pet clinic called Spring Petclinic. + Your job is to answer questions about and to perform actions on the user's behalf, mainly around + veterinarians, owners, owners' pets and owners' visits. + You are required to answer an a professional manner. If you don't know the answer, politely tell the user + you don't know the answer, then ask the user a followup question to try and clarify the question they are asking. + If you do know the answer, provide the answer but do not provide any additional followup questions. + When dealing with vets, if the user is unsure about the returned results, explain that there may be additional data that was not returned. + Only if the user is asking about the total number of all vets, answer that there are a lot and ask for some additional criteria. + For owners, pets or visits - provide the correct data. + """) + .defaultAdvisors( + // Chat memory helps us keep context when using the chatbot for up to 10 previous messages. + new MessageChatMemoryAdvisor(chatMemory, DEFAULT_CHAT_MEMORY_CONVERSATION_ID, 10), // CHAT MEMORY + new SimpleLoggerAdvisor() + ) + .defaultFunctions("listOwners", "addOwnerToPetclinic", "addPetToOwner", "listVets") + .build(); + } + + @PostMapping("/chatclient") + public String exchange(@RequestBody String query) { + try { + //All chatbot messages go through this endpoint + //and are passed to the LLM + return + this.chatClient + .prompt() + .user( + u -> + u.text(query) + ) + .call() + .content(); + } catch (Exception exception) { + LOG.error("Error processing chat message", exception); + return "Chat is currently unavailable. Please try again later."; + } + } +} diff --git a/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/VectorStoreController.java b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/VectorStoreController.java new file mode 100644 index 000000000..b2b5482c0 --- /dev/null +++ b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/VectorStoreController.java @@ -0,0 +1,112 @@ +package org.springframework.samples.petclinic.genai; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.ai.document.Document; +import org.springframework.ai.document.DocumentReader; +import org.springframework.ai.reader.JsonReader; +import org.springframework.ai.vectorstore.SimpleVectorStore; +import org.springframework.ai.vectorstore.VectorStore; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.samples.petclinic.genai.dto.Vet; +import org.springframework.stereotype.Component; +import org.springframework.web.reactive.function.client.WebClient; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.attribute.FileAttribute; +import java.nio.file.attribute.PosixFilePermission; +import java.nio.file.attribute.PosixFilePermissions; +import java.util.List; +import java.util.Set; + +/** + * Loads the veterinarians data into a vector store for the purpose of RAG functionality. + * + * @author Oded Shopen + */ +@Component +public class VectorStoreController { + + private final Logger logger = LoggerFactory.getLogger(VectorStoreController.class); + + private final VectorStore vectorStore; + private final WebClient webClient; + + public VectorStoreController(VectorStore vectorStore, WebClient.Builder webClientBuilder) { + this.webClient = webClientBuilder.build(); + this.vectorStore = vectorStore; + } + + @EventListener + public void loadVetDataToVectorStoreOnStartup(ApplicationStartedEvent event) throws IOException { + Resource resource = new ClassPathResource("vectorstore.json"); + + // Check if file exists + if (resource.exists()) { + // In order to save on AI credits, use a pre-embedded database that was saved + // to + // disk based on the current data in the h2 data.sql file + File file = resource.getFile(); + ((SimpleVectorStore) this.vectorStore).load(file); + logger.info("vector store loaded from existing vectorstore.json file in the classpath"); + return; + } + + // If vectorstore.json is deleted, the data will be loaded on startup every time. + // Warning - this can be costly in terms of credits used with the AI provider. + // Fetches all Vet entites and creates a document per vet + String vetsHostname = "http://vets-service/"; + List vets = webClient + .get() + .uri(vetsHostname + "vets") + .retrieve() + .bodyToMono(new ParameterizedTypeReference>() {}) + .block(); + + + Resource vetsAsJson = convertListToJsonResource(vets); + DocumentReader reader = new JsonReader(vetsAsJson); + + List documents = reader.get(); + // add the documents to the vector store + this.vectorStore.add(documents); + + if (vectorStore instanceof SimpleVectorStore) { + // java:S5443 Sonar rule: Using publicly writable directories is security-sensitive + FileAttribute> attr = PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwx------")); + File file = Files.createTempFile("vectorstore", ".json", attr).toFile(); + ((SimpleVectorStore) this.vectorStore).save(file); + logger.info("vector store contents written to {}", file.getAbsolutePath()); + } + + logger.info("vector store loaded with {} documents", documents.size()); + } + + public Resource convertListToJsonResource(List vets) { + ObjectMapper objectMapper = new ObjectMapper(); + try { + // Convert List to JSON string + String json = objectMapper.writeValueAsString(vets); + + // Convert JSON string to byte array + byte[] jsonBytes = json.getBytes(); + + // Create a ByteArrayResource from the byte array + return new ByteArrayResource(jsonBytes); + } + catch (JsonProcessingException e) { + logger.error("Error processing JSON in the convertListToJsonResource function", e); + return null; + } + } + +} diff --git a/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/OwnerDetails.java b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/OwnerDetails.java new file mode 100644 index 000000000..ca940faa4 --- /dev/null +++ b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/OwnerDetails.java @@ -0,0 +1,34 @@ +/* + * Copyright 2002-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.genai.dto; + +import java.util.List; + +/** + * Simple Data Transfer Object representing an owner. + * + * @author Oded Shopen + */ +public record OwnerDetails( + int id, + String firstName, + String lastName, + String address, + String city, + String telephone, + List pets +) { +} diff --git a/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/PetDetails.java b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/PetDetails.java new file mode 100644 index 000000000..53ff420ad --- /dev/null +++ b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/PetDetails.java @@ -0,0 +1,32 @@ +/* + * Copyright 2002-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.genai.dto; + +import java.util.List; + +/** + * Simple Data Transfer Object representing a pet data type. + * + * @author Oded Shopen + */ +public record PetDetails( + int id, + String name, + String birthDate, + PetType type, + List visits +){ +} diff --git a/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/PetRequest.java b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/PetRequest.java new file mode 100644 index 000000000..b16d33db3 --- /dev/null +++ b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/PetRequest.java @@ -0,0 +1,34 @@ +/* + * Copyright 2002-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.genai.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.util.Date; + +/** + * Simple Data Transfer Object representing a Pet request. + * + * @author Oded Shopen + */ +public record PetRequest(int id, + @JsonFormat(pattern = "yyyy-MM-dd") + Date birthDate, + String name, + int typeId +) { + +} diff --git a/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/PetType.java b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/PetType.java new file mode 100644 index 000000000..d635dea10 --- /dev/null +++ b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/PetType.java @@ -0,0 +1,24 @@ +/* + * Copyright 2002-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.genai.dto; + +/** + * Simple Data Transfer Object representing a Pet type. + * + * @author Oded Shopen + */ +public record PetType(String name) { +} diff --git a/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/Specialty.java b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/Specialty.java new file mode 100644 index 000000000..1ffae46eb --- /dev/null +++ b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/Specialty.java @@ -0,0 +1,28 @@ +/* + * Copyright 2002-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.genai.dto; + +/** + * Simple Data Transfer Object representing a vet's specialty. + * + * @author Oded Shopen + */ + +public record Specialty( + Integer id, + String name +) { +} diff --git a/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/Vet.java b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/Vet.java new file mode 100644 index 000000000..6119f2285 --- /dev/null +++ b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/Vet.java @@ -0,0 +1,30 @@ +/* + * Copyright 2002-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.genai.dto; + +import java.util.Set; + +/** + * Simple Data Transfer Object representing a vet. + * + * @author Oded Shopen + */ +public record Vet( + Integer id, + String firstName, + String lastName, + Set specialties) { +} diff --git a/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/VisitDetails.java b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/VisitDetails.java new file mode 100644 index 000000000..623b5d026 --- /dev/null +++ b/spring-petclinic-genai-service/src/main/java/org/springframework/samples/petclinic/genai/dto/VisitDetails.java @@ -0,0 +1,28 @@ +/* + * Copyright 2002-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.samples.petclinic.genai.dto; + +/** + * Simple Data Transfer Object representing a customer visit. + * + * @author Oded Shopen + */ +public record VisitDetails( + Integer id, + Integer petId, + String date, + String description) { +} diff --git a/spring-petclinic-genai-service/src/main/resources/application.yml b/spring-petclinic-genai-service/src/main/resources/application.yml new file mode 100644 index 000000000..5c42ad1ce --- /dev/null +++ b/spring-petclinic-genai-service/src/main/resources/application.yml @@ -0,0 +1,53 @@ +spring: + main: + web-application-type: reactive + application: + name: genai-service + profiles: + active: production + config: + import: optional:configserver:${CONFIG_SERVER_URL:http://localhost:8888/},optional:classpath:/creds.yaml + ai: + chat: + client: + enabled: true + # These apply when using spring-ai-azure-openai-spring-boot-starter + azure: + openai: + api-key: ${AZURE_OPENAI_KEY} + endpoint: ${AZURE_OPENAI_ENDPOINT} + chat: + options: + temperature: 0.7 + deployment-name: gpt-4o + # These apply when using spring-ai-openai-spring-boot-starter + openai: + api-key: ${OPENAI_API_KEY:demo} + chat: + options: + temperature: 0.7 + model: gpt-4o-mini + + +logging: + level: + org: + springframework: + ai: + chat: + client: + advisor: DEBUG +--- +spring: + config: + activate: + on-profile: docker + import: configserver:http://config-server:8888 + zipkin: + baseUrl: http://tracing-server:9411 +server: + port: 8084 +eureka: + client: + serviceUrl: + defaultZone: http://discovery-server:8761/eureka/ diff --git a/spring-petclinic-genai-service/src/main/resources/logback-spring.xml b/spring-petclinic-genai-service/src/main/resources/logback-spring.xml new file mode 100644 index 000000000..5d03f7941 --- /dev/null +++ b/spring-petclinic-genai-service/src/main/resources/logback-spring.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/spring-petclinic-genai-service/src/main/resources/vectorstore.json b/spring-petclinic-genai-service/src/main/resources/vectorstore.json new file mode 100644 index 000000000..eb00c1317 --- /dev/null +++ b/spring-petclinic-genai-service/src/main/resources/vectorstore.json @@ -0,0 +1,44 @@ +{ + "7912125d-e63f-4988-aa4c-2fd508ffb203" : { + "embedding" : [ 0.011865104, 0.026805574, 0.01799506, -0.016540494, -0.016027933, 0.026722457, -0.0056070057, -0.004027763, -0.014490249, -0.02862032, 0.01785653, 0.006306583, -0.0025974393, -0.0076260823, 0.0060087433, 0.009530871, 0.028648024, -0.026902545, 0.013077241, -0.011705793, -0.018036619, 0.022123257, -0.0094339, 0.007020013, -0.009641695, 0.01514134, -0.0017039203, -0.015321429, 0.0068052914, -0.027207311, 0.03848366, -0.029063616, -0.019906776, -0.041115735, -0.02186005, -0.005551594, -0.006116104, -0.0035706135, 0.018549182, 0.01014733, 0.0103966845, 0.006445113, 0.01753791, -0.0113109825, -0.0010441707, 0.014504102, 0.003400914, -0.027387401, -0.018147444, 0.01591711, -0.0013731796, 0.03119698, -0.019352656, 0.0038788428, 0.005825191, -0.0074806255, 0.0058702133, 0.020280806, 0.019186419, -0.018673858, 0.026168337, 0.009517018, -0.018341385, -0.0058736764, -0.018576887, 0.0080139665, 0.014781162, 0.012412298, 0.0014891987, 0.02554495, 0.017233144, 0.0062511708, -0.015113634, -0.024187356, 0.019255685, 1.4643064E-4, -0.021402901, -0.007009623, 0.018119738, -0.007882363, 0.014379425, -0.042722683, -0.017634882, 0.027124194, 0.015182899, 0.012204502, -0.005669344, 0.030559741, -0.021015016, -0.001255429, 0.014040026, 0.014878133, 0.011913589, -0.022857467, 0.0023428902, 0.020266954, -0.020308513, 0.019477332, -0.005104834, -0.024672212, -0.022621965, 0.030753683, -0.011262497, -0.0041074175, -0.014365572, 0.00472734, -7.1862494E-5, 0.009184546, 0.01835524, -0.0013740455, -0.026015954, 0.024672212, 0.0042978963, -3.10394E-4, -0.023785619, -0.0046580746, 0.01591711, 0.0063966275, 0.005513498, -0.032887045, -4.5368608E-4, 0.042667273, 0.013333523, -0.040339965, 0.036156356, 0.018895507, -0.0026892156, -0.022206375, -0.0013281574, -0.013894569, 0.047598943, 0.0225527, -5.272802E-4, 0.013042609, 0.005118687, 0.017967355, -0.011186305, 0.019366508, -0.011657308, -0.024602946, 0.025212478, 0.012412298, -0.021015016, -0.0034753738, -0.0046511483, 0.008062452, 0.011671161, 0.017274704, 0.012377664, -0.0054892553, -0.004852017, -0.0118928095, -0.008117864, -0.008637352, -0.025503391, -0.006829534, -0.0043533086, 0.016097197, 5.705709E-4, -0.016069492, -0.010015726, -0.0013298889, -0.007937775, -0.028564908, -0.003916939, 0.018466063, 0.029146733, 0.010625259, -0.012814035, 0.0119828535, -0.013194992, 0.027525932, -0.019906776, -0.002228603, 0.010327419, 0.016914526, -0.021056576, -0.01431016, -0.030088738, -0.0029212534, -0.017842676, -0.003771482, 0.018853948, 0.040755555, 0.0035255912, 0.011421807, 0.0031809974, -0.009565503, -0.009302297, 0.011497999, -0.0024208135, 0.014227042, 0.009420047, 0.01872927, -0.6405632, -0.023647089, 0.013534391, -0.0308368, 0.045825757, 0.016346551, -5.662418E-4, -0.004730803, -0.004869333, -0.002626877, -0.025835864, 0.04560411, 0.015044369, -0.0027723336, -0.0118304705, -0.015570784, 0.020544015, -0.010410537, 5.848568E-4, 0.0057559256, -0.004990547, 0.012717064, -0.022954438, 0.019574303, 8.5455755E-4, 0.007168933, -0.0028035028, -0.021153547, 0.010382831, 0.010237374, -0.03258228, 0.016942231, 0.0031065375, -0.008360292, 0.039425667, -0.014199335, -0.0043567717, 0.021250518, 0.029617736, 0.0031948504, -0.016401963, 0.010666818, 0.039841257, -0.021195106, -0.018881653, 0.003892696, 0.001218199, 0.0072728302, -0.019588156, -0.010618333, 0.012495415, -0.0115880435, -0.018701565, 0.00629273, 0.012897152, -0.040617026, 0.01375604, -0.014462543, 0.004540324, -0.0013342181, -0.011262497, 0.009198399, -0.02751208, -0.008041672, 0.024104238, 0.0294515, 3.4372782E-4, 0.008803588, -0.006202685, -0.0151274875, 0.01298027, 0.033302635, -0.015861697, 0.0050632753, 0.015515371, 0.011144747, 0.02816317, 0.0035948562, 0.0025056633, 0.005530814, 0.025572658, -0.010202742, -0.017524058, 0.010403611, -0.013430494, 0.017413234, -0.027941521, -0.0038580634, 0.01946348, -0.014324012, 0.021527577, 0.005530814, 0.017011497, 0.0018666931, 0.0012493684, -6.268487E-4, -0.0091429865, 0.021749226, 0.008665058, -0.029479206, -0.031612568, -0.002422545, 0.017593322, -0.007013086, 0.015750872, -3.4026455E-4, -5.2468275E-4, -0.0019982967, 0.016415818, -0.02986709, -0.028675731, 0.011955148, -0.014040026, -0.01113782, -0.016097197, -0.0317511, -0.011788912, 0.00486587, -0.014143923, -0.012107531, 0.010957731, 0.0057212934, 0.028675731, -0.009960314, 0.019297244, -0.0029853238, -0.016928378, -0.010992364, -0.014109291, -0.011858176, 0.032416046, 0.011733499, 0.015196752, -0.01056292, 0.0072035654, -0.037707895, -0.007889289, 0.023536265, 0.022483436, -0.028246287, 0.006597496, -0.016124904, 6.8962015E-4, -0.0014424447, -0.014601073, -0.0030805632, -0.01472575, 0.0027550175, -0.010833054, 0.010569847, -8.900559E-4, -0.020737957, -0.012924858, 0.010230448, 0.046462998, -0.021098135, -0.008955971, -0.022677377, -0.0107014505, -0.017150026, -0.014282454, 0.009551651, -0.019906776, -0.011511851, 0.006742953, -0.01684526, -0.038345132, 0.01185125, -0.007875436, -0.0340507, 6.398359E-4, -0.0075914497, 0.00556891, -0.018853948, -0.004564567, 0.013354301, -0.038649898, 0.021153547, 0.016872967, -0.012356885, -0.044274222, 0.012820961, 0.0038061147, 0.021015016, 0.014601073, 0.015501519, -3.8528684E-4, 0.032831635, -0.012252987, 0.040783264, -0.024783036, 0.021153547, -0.014171629, 0.01928339, 0.006168053, -0.005620859, -0.021749226, 0.021195106, -0.008360292, 0.014490249, -0.009281517, -4.3442173E-4, 0.024866153, 0.008810515, -0.0065247677, -0.012474636, 0.0066667614, 0.0021974337, 0.012086752, -0.007875436, -0.0023238424, -0.022788202, 0.021596843, -8.567221E-4, 0.019892924, 0.014822721, 0.002432935, -2.4675674E-4, -0.012834814, -0.0079516275, 0.01583399, -0.0018666931, 0.00699577, -0.005257217, -0.024409004, 0.0069472846, 0.018881653, 0.008824367, 0.014448689, -0.027996933, -0.0102443015, 0.03133551, 0.0013515343, 0.0039792773, -1.705652E-4, 0.023951855, 0.0035325177, -0.03892696, 0.024228916, -0.022469582, -0.005897919, 0.0285372, 0.03424464, -0.019892924, -0.009385414, -0.00128833, 0.021278223, 0.023023702, 0.0055585206, 0.028426377, -0.0032069718, -0.007418287, 0.0021177789, 0.0021801174, 0.011581116, 0.012945638, -0.0065594004, 0.028246287, 0.014164703, 0.012599313, 0.019075595, 0.008609646, 0.03474335, 0.00457842, 0.015556931, 0.012246061, -0.013451273, -0.014919692, -0.015820138, -0.012433076, 0.01431016, -0.014781162, -0.01028586, 0.009330003, -0.013624435, 0.010666818, -0.007840804, 0.016485082, 0.024325887, 0.023910295, -1.5498055E-4, -0.020336218, 0.008131717, 0.004609589, 0.005551594, -0.031861924, -0.013472052, 0.02917444, -0.014628779, 0.017468646, 0.028897379, 0.008097084, -0.008367218, -0.0032173616, -0.012536975, 0.0018407188, 0.032222103, -0.0096624745, -7.8096346E-4, -0.0064797457, -0.004800068, -0.010618333, -0.012668578, -0.015778579, 0.028190875, 0.013970761, -0.0152798705, -0.034272347, 0.007584523, -0.026722457, -0.0037680187, -0.011608822, -0.016069492, -0.009108354, 0.013430494, -0.018950919, -0.008713543, -0.0073975073, 0.012564681, -0.024949271, 0.0054338435, -0.024173504, -0.008526528, 0.009482386, 0.006898799, 0.033995286, 0.002483152, 0.0041455133, 0.013063389, -0.010410537, -0.012613166, 0.012024413, 0.0056000794, -0.025475686, 0.017496351, 0.004585346, 0.048125356, -0.004166293, 8.961166E-4, 0.0025125898, 0.012814035, -0.0015870355, -0.003094416, -0.025420275, -2.7424633E-4, -0.019158714, 0.017648734, 0.020073012, 0.02043319, -0.0024017657, -0.0036260255, -0.010209668, -0.0096624745, -0.026126778, 0.003729923, 0.009496238, 0.011802765, 0.0065316944, -0.014601073, 0.027996933, 0.021236666, -0.006618276, 0.013922275, -0.012897152, 0.0071204472, 0.02314838, 0.01212831, -0.003257189, 0.0074529196, 0.0024675676, -0.0055931527, -0.007279757, 0.021458313, 0.0010545604, -0.010202742, 7.5282453E-4, -0.0079516275, -0.0050771283, 0.03823431, 0.018022766, 0.0041489764, -0.019505039, -0.03948108, 0.010736083, -0.00457842, -0.022026286, 0.0050805914, -0.007923922, -0.014822721, -0.028980497, -0.03188963, 0.0025091264, -0.039314844, -0.025392568, 0.0065871063, 0.003516933, -0.025752746, 0.02199858, 0.025489539, -0.016665172, 0.007723053, 0.010479802, 0.011186305, 0.024187356, -0.022123257, -0.009239958, 0.003840747, -7.116984E-4, -0.0076260823, -0.022677377, 0.0030563204, -0.02540642, 0.0016268629, 0.04169756, 0.012917932, -0.0137837455, 0.0075914497, -0.015030516, 0.019892924, 0.027678315, 0.021513725, 3.155889E-4, -0.02760905, -0.018701565, 0.010209668, -0.002154143, -0.017842676, 0.011456439, -0.015515371, 0.020987311, 0.011712721, -0.010375905, -0.024907712, -0.0020502454, 0.0062580975, -0.030365799, 0.02747052, -0.012252987, -0.003771482, -0.007459846, -0.019712834, 0.008526528, 0.012523121, -0.02300985, 0.0089005595, 0.006365458, 0.020627132, -0.016900672, -0.009607063, -0.0022043602, -0.01030664, -0.011816618, -0.0037749454, -0.010452096, -0.020169983, 0.010708377, -0.018466063, -0.014947398, -0.018105885, 0.0015575979, -0.016166463, 0.0083810715, 0.0012112726, -0.028648024, 8.961166E-4, -5.255486E-4, 0.005118687, 0.0026840207, -0.0073698014, -0.025918983, -0.014420983, 0.009676328, -0.0058806026, 0.021375194, -0.018701565, 0.03139092, -0.010382831, 0.008221761, -0.0013705821, -0.021610696, -0.018632298, -0.00987027, 0.021111988, 0.033496577, 0.045714933, -0.015930962, 0.013049535, 0.028509496, -0.0050390325, 0.02429818, 0.008692764, -0.019075595, -0.015972521, 0.030947626, 0.030088738, 0.005783632, 0.022192523, -0.015072075, -0.0308368, 0.016942231, -0.013887643, 0.005942941, -0.016138757, -0.04455128, -0.013091095, 0.008291027, -0.0083810715, 0.0059602577, -0.010417463, 0.009620915, 0.01904789, 0.016526641, -0.0108538335, -0.011442587, 0.013922275, -0.00941312, 0.015182899, -0.030642858, 0.007598376, -0.005911772, -0.022303347, 0.00335416, -0.034577113, -0.027262725, -0.0036849007, 0.0038788428, 0.013146507, -0.010632185, -0.010078065, 0.0058806026, -0.012966418, 0.014656485, 0.0022441878, -0.028814262, -0.009066795, -0.0017956964, -0.022247935, 0.0046165157, -0.0015688534, 0.0025212478, -0.031280097, 0.010909245, -0.019034036, -0.030171856, -0.0073420955, -0.022067845, 0.018521475, 0.00701655, 0.019671274, 0.024228916, -0.011179379, -0.023203792, 4.1191062E-4, 0.01026508, -0.005118687, 0.0049559143, 0.020377778, 0.008041672, -0.036655065, 0.027567491, 0.009330003, -0.012890226, -0.043415334, 0.012710137, -0.008263321, 0.028357113, -0.020169983, 0.010874613, -0.046906292, 0.041725267, 0.0031307803, -0.0050702016, -0.0072589773, -0.011456439, -0.036932126, 0.008893632, -0.015030516, 0.069819175, -0.009683254, -1.16993004E-4, 0.0013272916, -0.002167996, -0.0029074005, 0.004308286, 0.001783575, 0.029202146, 0.00644165, 0.014040026, 0.0066806143, 0.035685353, 0.01882624, 0.018410651, 0.011269424, 0.027193459, 0.006853777, -0.007598376, 0.019020183, -4.878857E-4, -0.017828824, 0.017219292, -0.009960314, 0.019131007, -0.0075914497, -0.008277174, 0.026764017, 0.012093678, 0.012107531, 0.002015613, -0.006202685, -0.023813324, -0.0019151786, -0.0031030744, -0.0035567605, -0.0032138983, -0.009994947, -0.0060814717, 0.0024450563, 0.021652255, 0.022677377, -4.4221405E-4, 0.021250518, 0.004699634, -0.023439294, -0.005399211, -0.041808385, -0.0041212705, -0.04216856, 0.007674568, 0.0029853238, -0.010050359, 0.018895507, -0.011151673, -0.029063616, 8.5931955E-5, 0.023993414, -0.016000226, -0.0039411816, -0.004225168, 0.024409004, -0.0072728302, -2.0552239E-4, -0.014988957, -0.015861697, 0.028564908, -0.014199335, -0.009517018, 0.0028485253, -0.021389049, -0.0108538335, -9.3767565E-4, 0.030476622, 0.026680898, -0.022608113, -0.0086234985, 0.015820138, 0.03884384, -0.019712834, 0.010195816, -0.010362051, 0.0029506912, -0.02029466, 0.025060095, 0.012814035, -0.03557453, 0.017565617, 0.0062580975, 0.0018753513, 0.0086858375, -0.01514134, -0.02614063, -0.01099929, 0.0025229794, -0.015903255, -0.01559849, -0.0011731768, 0.033829052, 0.017565617, -0.002386181, -0.021929314, -0.0060156696, -0.015362988, 0.0010588894, -0.011172453, 0.03524206, 0.011214011, 0.014670338, 0.002330769, -0.0075221844, 0.013375081, 0.007279757, -0.028481789, 0.0013420103, 0.0017749169, 0.012904079, 0.020100718, 0.0042875065, -0.048153065, -0.0059948904, 8.7057514E-4, -0.014781162, 0.009066795, 0.012252987, -0.038871545, -0.013839157, 0.0036987537, -0.008387998, -0.0142686, -0.0043256027, 0.020779515, -0.025212478, 0.008235615, 3.3203934E-4, 0.006639055, -0.0019913702, 0.006375848, 0.018147444, -0.005097908, 0.014199335, -0.016775995, -0.0063689216, -0.02296829, -0.022206375, 0.030338092, 0.017150026, 0.0035255912, 0.017482499, 0.0064347233, 0.021139694, 0.0024104237, 0.019795952, 0.014434837, -0.0050494224, 0.0030459305, -0.01042439, 0.00729361, -0.010950805, 0.010902319, -0.015501519, 0.006583643, -0.028481789, -0.0031030744, -0.0072728302, 0.0010917904, -0.0032589207, -0.0460197, -0.011200159, 0.0038857693, 0.0027948448, -0.019061742, -0.025503391, -0.0040935646, -0.014199335, -0.021319782, -0.014227042, -0.010646039, -0.020668691, 0.022497289, 0.0075360374, -0.010389757, 0.019186419, 0.20003746, -0.0035203963, -0.019186419, 0.013562097, -0.016000226, 0.0055481307, 0.01587555, -0.009960314, -0.012814035, 0.0024052288, -0.00472734, 0.020557867, 0.01113782, -0.0045611034, 0.013229624, -0.021929314, -0.035685353, -0.013305817, -0.020142278, -0.021402901, 0.006091861, 0.010431317, 0.013665995, -0.02328691, 0.012059045, -0.008173276, 0.0074806255, 0.0062615606, 0.02903591, 0.022150964, 0.0052745338, -0.021430606, -0.011456439, 0.007286683, -0.012343032, -0.029894795, -0.018161297, 0.008277174, 0.03105845, -0.0018268657, -6.0433755E-4, -0.009281517, 0.02053016, -0.017510206, 0.0065316944, 0.025669629, -0.021319782, -0.011581116, 0.001621668, 0.025267892, -0.039591905, 0.0023792544, 0.046850882, -0.0054580863, 0.01983751, 0.011248644, 0.026168337, -0.0027775285, 1.4134399E-4, 0.035436, -0.0058459705, 0.030753683, 0.005825191, 0.012814035, 0.010112697, 0.01187203, -0.01587555, -0.0017922332, 0.032277513, 4.81825E-4, 0.020807222, -0.012640872, -0.003840747, 0.018978624, -0.03446629, -0.023854883, -0.005139467, 0.0037403128, -0.026126778, 0.014102365, -0.018285973, -0.011394101, 0.012052119, -0.002552417, -0.041669853, -0.045216225, 0.003030346, 0.019546598, -0.008408777, 0.006226928, -0.0034043773, -0.022995997, -0.025434127, 0.009766372, 0.017704148, 0.021984728, -0.0044295, 0.03557453, -0.016526641, -0.0059152353, -0.033524286, 0.05541204, 0.019089447, 0.010050359, -0.030615153, -7.826951E-4, 0.014670338, 0.027027223, 0.027498225, 0.0058806026, -0.009163766, -0.015570784, -0.01258546, -0.018756976, -0.013340449, 0.015072075, -0.002034661, -0.027872257, 0.0044883755, -0.017246997, 0.02447827, -0.003284895, 0.013215772, 7.478461E-5, -0.009198399, -0.010292786, -0.023494706, -0.0039550345, 0.03438317, -0.03856678, 0.0012104068, -0.0123499585, -0.012627019, 0.01399154, 0.002187044, -0.009011383, -0.011955148, -0.020100718, -0.016083345, 0.013742186, 0.036405712, -0.006375848, 0.0036502683, -0.0057282196, -0.009773299, -0.01472575, -4.326901E-4, 0.01240537, -0.0025610754, -0.0024623726, -0.0045611034, -0.027110342, -0.009897976, -0.01371448, 0.0054927184, -0.023771765, 0.0012389786, -0.05075743, 0.00236367, -0.030587446, -0.040921792, -0.009911829, 0.014143923, -0.0033835978, -0.04211315, -0.024492122, -0.17887007, 0.03216669, 0.024741476, -0.028149316, -0.0059152353, -0.0017801118, 0.027124194, -0.009087575, 0.014684191, 0.003187924, 0.01268243, 0.005156783, -0.024561387, -0.0149751045, -0.007681494, 0.011671161, -0.012557753, -0.0028086978, 0.033496577, 0.030781388, 0.025918983, -0.027761433, 0.010368979, -0.014850427, -0.012370738, -0.013472052, 0.022469582, 3.5000496E-4, -3.1169274E-4, 0.002038124, -0.002914327, -0.0030009083, 0.020544015, -0.0029732024, 0.0012675504, -0.011234791, 5.5628497E-4, -0.0108538335, -0.024492122, 0.023383882, 0.016208023, 0.012232208, -0.007473699, 0.019089447, -0.0032935531, 0.0071065943, 0.038372837, -0.010195816, 0.021569137, -0.014919692, 0.03424464, -0.048430122, -0.0060225963, 0.0058494336, 0.0046026628, 0.01987907, 7.510929E-4, -0.0069368947, -0.0039723506, -0.004128197, -0.022303347, -0.040256847, 0.012266841, -0.0046788543, -0.009939535, -0.0033143328, -0.0061645894, 0.0023376956, -0.047571238, -3.3766712E-4, -0.024658358, 0.015626196, 0.001556732, 6.6884066E-4, 0.022247935, 0.022331053, -0.013084169, 0.029645441, 0.013153433, 0.016900672, 0.0025697334, 0.019324949, 0.0016112783, 0.021499872, -0.0049282084, 0.01638811, -0.0049455245, -0.004606126, 0.027719874, -0.02507395, 0.023065262, -0.05646487, -0.0015047833, -7.2106E-6, -0.002367133, 0.004498765, -0.0021853123, 0.010833054, 7.2208815E-4, -0.015446106, 0.017718, -0.013070315, -0.017593322, -0.0014268601, 0.016318846, 0.013222698, 0.016969938, 0.04122656, 0.051062196, 0.0015610611, 0.02798308, 0.027179606, -0.007376728, 0.030753683, -0.0012588924, 0.029368382, -0.026265308, -0.016235728, 0.01615261, -0.017551765, 0.034022994, -0.0016796775, -0.0027896499, -6.922176E-4, 0.014988957, 0.0102443015, -0.076579444, -0.015958669, 0.032970164, 0.009634769, -0.025489539, 0.014850427, -0.021970874, 0.01660976, -0.028260142, 0.023854883, -0.031778805, -0.03723689, 0.005634712, -0.0093577085, 0.023619382, 0.019671274, -0.022137111, -0.0062719504, -0.008221761, 0.033524286, -0.024658358, -0.017246997, 0.010923099, 0.013749112, -0.014753456, 1.767341E-4, -0.012190649, 0.013271184, 0.009343855, -0.004720413, 0.012931785, -0.019795952, 0.03654424, -0.0074667726, -0.017150026, 0.0033697446, -0.016027933, 0.013832231, 0.01983751, -0.005669344, 0.013271184, -0.00336455, 0.013361229, -0.024104238, -0.026334573, 0.011144747, -0.012377664, 0.03571306, 0.011262497, -0.03599012, 0.004415647, -0.0017056519, -0.019255685, -0.006330826, 0.017870383, 0.0067949016, 0.010909245, 0.017690293, -0.008152496, -0.014109291, -0.0053299456, 0.0074529196, 0.0107014505, 0.043526158, 0.01688682, 0.0075914497, -0.016969938, -0.023259204, 0.006732563, -0.0046788543, -0.004564567, 4.281446E-4, -0.011359468, -0.008741249, -0.010943878, 0.00973174, -0.014282454, -0.02503239, 0.0103966845, -0.047515824, 0.0010017458, -0.0040935646, -0.0022615038, -0.013769892, 0.03745854, 0.022344906, 6.826937E-4, -0.005361115, -0.008263321, -0.017343968, 0.008464189, 0.0033697446, 0.0074875522, -0.02517092, -0.014878133, 0.008464189, 0.0031480966, -9.030431E-4, -0.0027688704, 0.0011143015, -0.018230561, -0.005374968, -0.0662728, 0.0271519, -0.0055931527, 0.0022511142, 5.3031056E-4, -0.0014640901, -0.0054476964, 0.0041351235, 0.026957957, -0.0037264598, -0.016304992, 0.008270247, -0.011117041, -0.008588866, -0.012966418, -0.014324012, 0.0068364604, 0.018743122, 0.017274704, 0.00456803, -0.00856116, 0.006361995, 0.017870383, 0.017413234, 0.008478043, -8.813978E-4, -0.010736083, 0.02227564, -0.030171856, -0.006486672, 0.02167996, -0.029146733, 0.0022805517, 0.041365087, -0.0034113037, -0.030559741, -0.004883186, 0.019795952, 0.008387998, 0.010209668, -0.03626718, -0.05563369, 0.003317796, 0.0051879524, -0.0071897125, 0.012848667, -0.020834927, 0.025309449, -0.0060537653, 0.012398444, 0.019989895, 0.001946348, -0.021970874, -0.02733199, -0.044994578, -0.03704295, 0.016401963, 0.018590739, -0.012259915, -0.0154322535, 0.052336674, -0.021693815, 0.015459959, -0.027207311, -0.009787152, -0.0010831322, -9.2382263E-4, 0.015169046, 0.02029466, -0.017039202, -0.0460197, 0.0012363811, 0.0068156812, 0.0066875406, 0.023342323, -0.029423794, -0.008360292, 0.0066702245, 8.104011E-4, 0.017066909, 0.042722683, -0.0073282425, 0.00941312, 0.015252165, 0.014850427, 0.0156539, -0.011878956, 0.003094416, 0.021776931, -0.0030459305, -0.029645441, 0.015030516, -0.012765549, 0.0013013171, -0.010666818, -0.013769892, -0.0070996676, -0.03249916, 0.01872927, 0.0151274875, 0.013146507, 0.0064658923, 0.016665172, 0.0047827517, -0.04191921, -0.005277997, -0.048651773, -0.008845147, 0.016083345, 0.03180651, 0.017939648, 0.0090529425, -0.011989781, 0.012377664, -0.0038615265, -0.013520538, 9.956851E-4, -0.01983751, -0.013638289, -0.0010666818, -0.005662418, 0.008575013, 0.009884123, -0.011207085, -0.009634769, 0.006923042, 0.015169046, -0.03502041, 0.013118801, -0.004730803, 0.021555284, -0.010133477, -0.0050771283, 0.0053576515, -0.023674795, -0.00499401, -0.019338802, 0.0035740766, -0.014296306, 0.06887717, -0.021555284, 0.0015653902, 0.009163766, 0.0041247336, 0.032803927, 0.0014493712, 0.005413064, -0.013444346, -0.036378004, 0.028786555, -0.02172152, 0.015750872, -0.004045079, 0.0030615153, -0.0060953246, -0.02747052, 0.010479802, 0.0060260594, -0.035214353, -0.016512789, 0.032388337, -0.01270321, -0.014081585, 0.0029922503, 0.03139092, 0.016554348, -0.01042439, -0.021028869, -0.03510353, 0.005703977, 0.0061541996, -0.03371823, -0.018008914, 0.01113782, -0.02057172, -0.008076305, 0.004183609, 0.010729156, 0.022829762, -0.0094339, 0.04809765, -0.024866153, -0.015958669, 0.0024692991, -0.0012389786, -0.003508275, -0.016928378, -0.033080988 ], + "content" : "{id=4, firstName=Rafael, lastName=Ortega, specialties=[{id=2, name=surgery}], nrOfSpecialties=1}", + "id" : "7912125d-e63f-4988-aa4c-2fd508ffb203", + "metadata" : { }, + "media" : [ ] + }, + "a9c86fa6-3261-474b-9e4d-7606ce5afb82" : { + "embedding" : [ 0.013371035, 0.030233739, 0.014240529, -0.020169519, -0.028234588, 0.023770731, 0.0016054828, -0.012672702, -0.006141228, -0.040804595, 0.010872097, 0.011638895, -0.0038613745, -5.716751E-4, 0.0037449854, 0.007387275, 0.030233739, -0.027727954, 0.0049910317, -0.025701417, -0.019033015, 0.007257193, -0.013768127, 0.023072395, -0.015253798, 0.00998891, 8.883215E-4, -0.023866579, -0.0043269303, -0.018923473, 0.030973151, -0.0142953005, -0.015034713, -0.05690735, -0.028152432, -0.004641865, -0.0030363821, 0.0077090557, 0.019074094, 0.004932837, 0.003479687, -0.004361162, 0.015541347, -0.020580303, -0.009715053, 0.017225564, -0.0034642827, -0.03231505, -0.005644864, 0.006606784, 0.0016961977, 0.019142559, -0.01023538, 0.005898181, -0.009810903, -0.0020881547, 0.021100631, 0.015527654, 0.007257193, -0.013008176, 0.01149512, 0.0027693722, -0.026166974, -0.0019152828, -0.012535774, -0.008441621, 0.0038305656, 0.0062541943, -0.014651314, 0.008366311, 0.021278637, -0.003604634, -0.011871672, -0.009276884, 0.02079939, -0.009071491, -0.008831867, -5.37871E-4, 0.02075831, -0.017554192, 0.028426288, -0.0488012, -0.024770306, 0.026030045, 0.017622655, 0.014528079, -0.021716807, 0.03499884, -0.010228534, -0.0018194331, 0.022250827, 0.018142981, 0.015911054, -0.024701841, 0.0088044815, 0.018320989, -0.007962373, 0.023880273, 0.003967494, -0.02411305, -0.027303476, 0.023291482, -0.012713781, -7.381284E-4, -0.006767675, -0.0014505828, -0.020059977, 0.015418111, 0.025112625, -0.007900755, -0.023893965, 0.02512632, 0.02133341, 0.005278581, -0.010214841, -0.006517781, 0.00945489, -0.006565706, -8.6221955E-4, -0.015568733, 0.011501966, 0.03086361, -0.009461736, -0.032397203, 0.032725833, 0.023496874, -0.009400119, -0.022976547, 0.01176213, -0.006586245, 0.040421195, 0.0028378363, -6.379997E-4, 0.010433926, -0.0023021048, 0.009482276, -0.0020059976, 0.01803344, -0.008633321, -0.03173995, 0.010844711, 0.013097179, -0.012679548, 0.0027368518, 0.001802317, 0.010564008, 0.008886638, 0.0010851558, -0.00645274, -0.0013384728, -0.010851557, -0.008647013, -0.014254223, -0.009756132, -0.018293602, -0.0042721587, -1.4088624E-4, 0.014733471, -0.0014043695, -0.014541771, -0.010358616, -0.012494695, -0.008530625, -0.03048021, -0.01122811, 0.022154978, 0.026509294, 0.0089071775, -1.6709516E-4, 0.0075652814, -0.016979093, 0.026550371, -0.014692392, -0.006083034, 0.0120086, 0.015691968, -0.018457917, -0.011529352, -0.025454946, -0.02809766, -0.01351481, 0.006473279, 0.006322658, 0.037217077, 0.014062523, 0.022127593, 0.0045220526, -0.029302629, -0.0066923643, 0.015390726, 0.017047556, 0.02464707, -0.0025519987, 0.011084335, -0.63666123, -0.019594422, -0.0017004767, -0.040996294, 0.022812232, 0.008126687, 8.065925E-4, -0.005552437, -0.01862223, 0.0096260505, -0.016896935, 0.035354853, 0.014322686, 0.0020419413, -0.012994483, -0.018225139, 0.0034848219, -0.0023808386, 0.0045323223, -8.421082E-4, -0.0143500725, 0.018498996, -0.022661611, 0.015678275, 0.009762978, 0.022250827, -0.0043714317, -0.01334365, 0.025386482, 0.014925171, -0.03817557, 0.010824172, 2.8712125E-4, -0.017184485, 0.036778904, -0.00494653, -0.013583275, 0.025619261, 0.035464395, 0.008304694, -0.013240954, 0.008078762, 0.04006518, -0.00751051, -0.032643676, 0.0064561632, -0.0032674484, 0.0151716415, -0.007852831, -0.008818174, 0.015979517, -0.012830169, -0.0076200524, 0.0041968483, 0.014267915, -0.042940672, 0.015185334, -0.0143500725, -0.00512796, -0.0030534982, -0.012830169, 0.016349223, -0.018923473, -0.0016568309, 0.012289303, 0.027577333, -0.0054052393, -0.010796786, -0.0028327014, -0.019156251, 0.023784423, 0.04721283, -0.008558011, 0.0054394715, 0.025906809, 0.013850284, 0.028371517, 0.0045049367, 0.0054257787, 0.015157948, 0.02032014, -0.019402722, -0.01387767, 0.012693241, -0.012077064, -0.0060624946, -0.02222344, 0.0020231137, 0.025756188, -0.0057783686, 0.019525956, 0.0027625258, 0.020539226, -0.0023414716, 3.4167856E-4, 0.0067334427, -0.014637621, 0.014254223, -0.0024099357, -0.032917533, -0.026646221, -0.013268339, 0.025591874, -0.0031852915, 0.0016380032, -0.0059700683, -0.0065417434, -0.022880698, 0.014952556, -0.016705237, -0.02522217, 0.0018416839, -0.025167398, -0.0061925766, -0.01818406, -0.028426288, -0.0025519987, -3.5323188E-4, -0.011460887, -0.009393272, 0.02493462, 0.01439115, 0.03362956, -0.011344499, 0.020347526, -0.0054908195, -0.0071476502, -6.40995E-4, -0.013056101, -0.007722749, 0.029768184, 0.023962429, 0.008427929, -0.023127168, 0.006052225, -0.031520866, 8.061646E-4, 7.822022E-4, 0.031685177, -0.03086361, 0.0035361699, -0.014911477, -0.0012203723, -0.008160919, -0.01706125, 0.0010243938, -0.032890145, 0.0031031347, -0.013699663, 0.009899907, 0.0023979545, -0.015609811, -0.013186183, 0.015924746, 0.034451127, -0.013761281, 0.0145554645, -0.02157988, -0.017403571, -0.017403571, -0.009927292, -6.734084E-5, -0.02123756, -0.0025211899, -3.0166988E-4, -0.028001811, -0.032890145, 0.014500693, -0.009584972, -0.04047597, -0.004296121, -0.006942258, -0.00415577, -0.02032014, 0.004912298, 0.00610015, -0.013227261, 0.022332985, 0.0073667355, -0.02079939, -0.048007015, 0.018512689, 0.0028891843, 0.008667553, 0.009311115, 0.012700087, 0.012617931, 0.028179817, -0.023510566, 0.03091838, -0.01404883, 0.032588903, -0.0075858207, 0.008201998, -0.0023055281, -0.009270037, -0.0093727335, 0.008249922, -0.002151484, 0.01353535, -0.009222113, 2.1138287E-4, 0.02556449, 0.012994483, 0.01334365, -0.015390726, 0.0065417434, 4.1955645E-4, -0.0044193566, -0.0032229468, 0.0031373666, -0.016609387, 0.014815628, 0.0062062694, 0.022497298, 0.011837441, 0.0038339887, 7.993182E-4, -0.009434351, -8.4767095E-4, 0.020552918, 2.2237455E-5, 0.016362917, 0.011282881, -0.011734744, -0.006274733, 0.015335955, 0.0060282624, 0.011960676, -0.010406541, -0.0010552027, 0.036477663, 0.005247772, 0.017020172, 0.012357767, 0.020059977, 0.02037491, -0.028261974, 0.015130563, -0.018334681, 0.0034677058, 0.012330381, 0.026221745, -0.015308569, -0.009037259, -0.0043851244, 0.016417688, 0.01910148, -0.006925142, 0.039024528, 2.0721083E-4, -0.012474156, 4.968995E-5, -0.0012263629, 0.011392424, 0.0171571, -0.004344046, 0.023346253, 0.021114323, 0.02207282, 0.027714262, -0.007633745, 0.019334257, 6.2088366E-4, -7.518212E-4, 0.014404844, -0.01069409, -0.00892087, -0.007298271, -0.0030380937, -7.9076015E-4, -0.014021444, -0.01978612, -0.008845559, -0.011974368, -0.0055421675, 0.00628158, 0.019402722, 0.028645372, 0.03743616, -0.01774589, -0.015240105, 0.017759584, 0.021401873, 0.0027676607, -0.03267106, -0.019567035, 0.016705237, 0.0026718108, 0.011625201, 0.03305446, 0.010112145, -0.004039381, -0.0072777322, -0.018252525, 0.012802783, 0.023496874, -0.0070175687, -0.0033051036, 0.007832292, -0.015144255, -0.013405268, -0.021319715, -0.0038990297, 0.029001387, 0.0015258932, -0.018937165, -0.02264792, -9.944409E-4, -0.019156251, -0.0055695535, -0.016061675, -0.005785215, -0.008818174, 0.010728322, -0.01477455, -0.0055421675, 0.0042995443, 0.0028583754, -0.027358249, -0.0085511645, -0.026002659, -0.010707783, 0.033876028, 0.0074557387, 0.029384784, 0.013056101, -0.0020179788, -0.0042310804, -0.009530201, -0.009448044, 0.0028344132, 0.009139955, -0.02464707, 0.026084816, 0.0025571336, 0.034533285, -0.0013513098, -0.0017988938, -0.0018348375, 0.017074943, 0.0020590574, -0.014226837, -0.014815628, 0.00751051, -0.022867003, 0.023962429, 0.011953829, 0.017540498, -8.771961E-4, 0.006938835, -0.026413444, -0.0017903358, -0.024469065, -0.016842164, 0.023401024, 0.009413811, -0.0042481963, -0.0015147679, 0.029330013, 0.027193934, -0.018882394, 0.0072298073, -0.020237984, 0.019923048, 0.028289359, 0.017321413, 0.0071750362, 0.013918748, 0.011974368, 0.008208844, 0.0017697966, 0.022867003, 0.0029918805, 0.0037518318, 0.008160919, -0.007092879, 0.002779642, 0.0335474, 0.003721023, 0.0061480748, -0.024373215, -0.039736554, 0.017389877, -0.0024424563, -0.012385153, 0.01526749, -0.0015524231, -0.01130342, -0.027673183, -0.033848643, 0.007428353, -0.03801126, -0.0037073302, 0.006904603, -0.0067813676, -0.024920927, 0.01856746, 0.036806293, -0.003522477, 0.024605991, 0.010399695, 0.014103602, 0.020183211, -0.019512264, -0.01875916, 0.011125414, -0.0026392904, -0.010564008, -0.00583314, 0.0030620561, -0.020114748, -0.0054771267, 0.018923473, 0.026262823, -0.013384729, 0.0054771267, -0.022962853, 0.00964659, 0.035327468, 0.017964976, 1.0216125E-4, -0.021648344, -0.014254223, 0.010769401, -1.6805793E-4, -0.024414292, 0.011056949, -9.6192036E-4, 0.0022011204, 0.011344499, -0.005021841, -0.016855858, -0.006374006, 0.010050528, -0.028645372, 0.03705276, -0.002723159, -0.006274733, -0.018677002, -0.0055318982, 0.0058297166, 0.0040770364, -0.029658642, 0.015472883, -0.0078049055, 0.017211871, -0.02279854, -0.014596542, -0.003376991, 0.002683792, -0.00996837, -0.0030209776, -0.014062523, -0.0061275354, 0.0146787, -0.02066246, -0.019799814, -0.022374062, -8.164342E-4, -0.017198177, 5.554149E-4, -0.0024150705, -0.026920078, -0.004922568, -0.0020077094, -1.4837451E-4, -7.6166296E-4, -0.00194438, -0.029987268, -0.016705237, -0.005021841, -0.0057886383, 0.031712566, -0.011187031, 0.013309418, -0.017581576, -0.001290548, 0.0112691885, -0.030315896, -0.0026392904, -0.0010928579, 0.024181515, 0.0024629955, 0.044501655, -0.009687668, 0.017773276, 0.021128016, 0.0041694627, 0.032999687, 0.0051416527, -0.016513538, -0.03091838, 0.022196056, 0.023839194, 0.0039298385, 0.025742495, -0.012316689, -0.031055309, 0.023962429, -0.012186607, 0.006825869, -0.014733471, -0.054470025, -0.011262341, 0.008585396, -0.012967098, 0.008181458, -0.011296574, 0.0014428806, 0.0028463942, -0.0032571787, -0.008886638, -0.0076132063, 0.019156251, -0.010091606, 0.0049396837, -0.022538377, 0.01159097, -0.012700087, -0.019662885, 0.0075721275, -0.031849492, -0.027152855, 0.0050355336, 0.0047685234, 0.0091125695, -0.0019392452, -0.0027180242, 0.0011382154, -0.024948312, 0.0061651906, -0.019621806, -0.016486151, 0.0122003, 0.003187003, -0.037107535, 0.0070723398, -0.0033016806, 0.007058647, -0.023921352, 0.014569157, -0.018444225, -0.03724446, 0.00566198, -0.03267106, 0.010564008, 0.006267887, 0.02070354, 0.02066246, -0.012645316, -0.039161455, 0.0012546043, 0.012412539, 6.1146985E-4, 0.016472459, 0.013391575, -0.005158769, -0.02037491, 0.013254647, 0.022538377, -0.013028715, -0.04866427, 0.015130563, -0.011002178, 0.010687243, -0.017786968, 0.0073119644, -0.03957224, 0.03004204, 0.013774973, -9.5421815E-4, -0.008729171, -0.002095001, -0.027276091, 0.015869975, -0.013699663, 0.068573624, -0.012097604, 0.012782245, 0.008619628, -0.004542592, -0.0057064816, 0.016499843, -0.011214417, 0.02834413, -0.003217812, 0.014089908, 0.002925128, 0.03228766, 0.023195632, 0.013138258, 0.009667128, 0.028453674, -0.0035395932, -0.011857979, 0.02245622, 0.007859677, -0.010666705, 0.0055387444, -0.025975274, 0.022579456, -0.0103449235, 0.005347045, 0.031822108, 0.008790788, 0.008558011, -0.012337228, -0.019868277, -0.0087017855, -0.004895182, 0.004525476, -0.006801907, -0.02270269, -0.01477455, -0.007887063, -0.0034437433, 0.012576852, 0.01595213, 0.0045494386, 0.025071548, 0.013501117, -0.02032014, -0.011844287, -0.038339887, -0.00802399, -0.042036947, 4.7325797E-4, 0.010324384, -0.0151716415, 0.010098453, -0.017033864, -0.04121538, -0.014035137, 0.009502815, -0.012631623, 0.0030261124, -8.249922E-4, 0.008414236, 0.0031476363, 0.0077912128, -0.020744618, -0.014089908, 0.032068577, -0.014000906, 8.977353E-4, 0.004922568, -0.015404419, 0.007873369, -0.013056101, 0.015883667, 0.013549042, -0.027371941, -0.0072640395, 0.013617506, 0.033109233, -0.008030837, -0.0031955612, -0.0052922736, -0.008975642, -0.019964127, 0.026700992, 0.004542592, -0.02012844, 0.023496874, 0.011536198, 0.01103641, 0.028042888, -0.017814355, -0.029083543, -0.014829321, 0.0026255976, -0.019512264, -0.006808753, 0.019402722, 0.039462697, 0.017239256, -0.0051382296, -0.0081883045, -0.0066341697, -0.021086939, 0.0034728406, -0.002146349, 0.035190538, 0.0146787, 0.023715958, 0.0037175997, -0.013412114, 0.0067300196, -0.00194438, -0.03209596, 0.008427929, 0.0017295739, 0.010803632, 0.023565337, 0.01111172, -0.039928254, -0.011084335, 0.008359465, 0.005381277, 0.0066410163, 0.015034713, -0.04058551, -0.009810903, -5.391547E-4, -0.020142134, -0.010837864, 0.010303845, 0.018074518, -0.004881489, 0.013850284, 0.0066855177, 4.4073753E-5, -0.0020162673, 0.019265793, 0.01784174, 0.0018930319, 0.02416782, -0.009899907, -7.7920686E-4, -0.015185334, -0.026728379, 0.024126744, 0.012508389, 0.02318194, 0.035080995, -0.005021841, 0.013035562, 0.011091182, 0.005768099, 0.002365434, -0.0016705237, 0.0013179337, -0.0018622231, 0.008722324, -0.015418111, 0.009537047, -0.014158373, -9.841712E-4, -0.025674032, -0.0077022095, -0.015240105, 0.0059940307, -0.02095001, -0.05255303, -0.018635923, -0.0050423797, -0.013008176, -0.0147608565, -0.011276035, -3.3825537E-4, -0.019799814, -0.013617506, -0.0036867908, -0.024071973, -0.027289784, 0.035765637, 0.013959827, -0.007661131, 0.014665007, 0.2075831, -0.007811752, -0.0065485896, 0.013590121, -0.024126744, 0.0043817014, 0.0035567093, -0.011810054, -0.0061549214, 0.011070643, -0.011618355, 0.014014598, 0.001970054, 0.0029045888, 0.019553343, -0.023414716, -0.040695053, -0.0055284747, -0.036285963, -0.02041599, 0.001958073, 0.012843862, 0.004778793, -0.026112203, 0.01315195, -0.0020795965, 0.004895182, 0.011905904, 0.03048021, 0.026481908, -0.006267887, -0.030973151, -0.02075831, -0.009468582, -0.009242651, -0.03732662, -0.008099301, 0.004200272, 0.026947463, -0.006035109, -0.007907602, -0.028891843, 0.0128096305, -0.0062541943, 0.012871248, 0.018649617, -0.009619203, -0.0052066934, 0.010557162, 0.02270269, -0.030781452, -0.0030038618, 0.04417303, -0.0036799444, 0.0139392875, 0.012871248, 0.028508445, -0.006103573, -0.0083936965, 0.0436527, 8.797635E-4, 0.030507596, 0.014747163, 0.018074518, 0.013069794, 0.017362492, -0.021922199, -0.011940137, 0.015623504, 0.008078762, 0.026920078, 0.0045631314, -0.0060282624, 0.014336379, -0.0244006, -0.02318194, 0.0049567996, 0.0046624043, -0.018320989, 0.0032297932, -0.027645797, 0.014130987, 0.0059666447, -0.007291425, -0.026920078, -0.033848643, 4.6298836E-4, 0.01953965, -0.0033222197, 0.011529352, 7.8134635E-4, -0.010892636, -0.011851133, 0.002035095, 0.021662036, 0.017786968, -0.008777096, 0.024783999, -0.018896088, -0.0049978783, -0.032917533, 0.05230656, 0.010207995, 0.0074694315, -0.040804595, -0.002615328, 0.018991938, 0.028398901, 0.03256152, 0.012172914, -0.016664159, -0.030945767, -0.0057235975, -0.009571279, -0.027084392, 0.028563216, -0.0037073302, -0.01700648, 0.014500693, -0.023510566, 0.018115597, -7.7364413E-4, 0.013288879, -7.0389634E-4, -0.017074943, -0.011200724, -0.022086514, -0.0019426683, 0.03343786, -0.035847794, 0.014199451, -0.0111664925, -0.009954678, 0.015418111, 0.00857855, -0.011892212, -0.015212719, -0.011419809, -0.025482332, 0.015869975, 0.04074982, -0.006853255, 0.005932413, 0.0035156307, 5.8194473E-5, -0.0173488, 0.0028190087, 0.0058913343, -0.0027385633, -0.0056277476, -0.004823295, -0.027536254, -0.011262341, -0.008660707, 0.007387275, -0.017732197, -9.670552E-4, -0.058605257, 0.006723173, -0.013131412, -0.045487538, 0.002925128, 0.024058279, -0.008249922, -0.03617642, -0.020361219, -0.17581576, 0.014021444, 0.020922624, -0.037737403, -0.0171571, 0.014733471, 0.01910148, -0.021552494, 0.009242651, 0.005025264, 0.020772003, -0.008222536, -0.031219622, -0.015527654, -0.015157948, 0.0062781563, -0.0068464084, 0.017074943, 0.03582041, 0.018156676, 0.023469487, -0.02674207, 0.009235805, 8.660707E-4, -0.0074488926, 0.0056209015, 0.020484455, 0.0042858515, 0.008667553, 0.0017329971, 0.0065999376, -0.0038853367, 0.02022429, -0.0014617082, 3.2884156E-4, -0.018320989, -0.0045528617, -0.015431805, -0.020114748, 0.03160302, 0.011810054, 0.01988197, 0.008640167, 0.009235805, -0.002976476, 0.008872945, 0.036669362, -0.004302968, 0.028809687, -0.017759584, 0.041461848, -0.049513225, -8.985911E-4, 0.0015104888, 0.010475005, 0.010947407, 0.0023055281, 0.0151168695, 0.0016979093, 0.0027026196, -0.019991513, -0.045460153, 6.8763614E-4, -0.0023842617, -0.0119332895, -0.009769825, -0.0019323988, -0.0042653126, -0.051731464, -0.0077843666, -0.016225988, -0.016294451, -0.005466857, 0.0023534528, 0.023537952, 0.0136311995, -0.011522505, 0.041187994, -0.009181034, 0.011098028, -1.8378328E-4, 0.03231505, 0.009804057, 0.008147226, -0.016595693, -0.003601211, -0.0118853655, -5.8836322E-5, 0.019717656, -0.01526749, 0.028974, -0.06287742, -0.0041694627, -0.0040462273, -0.0055695535, 0.014610236, 0.0053367754, 0.0118853655, 0.019498572, -0.012118143, -7.933276E-4, -0.011796362, -0.021511415, 0.0024938043, 0.026536679, -0.005836563, 0.007934988, 0.039490085, 0.052580416, 0.011412963, 0.02104586, -0.0069182958, 0.011241803, 0.03217812, -0.005946106, 0.01526749, -0.015390726, -0.017170792, 0.0012845574, -0.012405692, 0.021032168, -0.0024338982, -0.010748861, -0.0011578988, 0.010776247, 0.018416839, -0.08385481, -0.026194358, 0.030261125, 0.0097219, -0.022935469, 0.027495176, -0.016883243, 0.0063534672, -0.035026226, 0.025646646, -0.036915835, -0.0266873, -0.0030791722, -0.013001329, 0.020046284, 0.019498572, -0.028125046, -0.00326916, -0.006521204, 0.032725833, -0.017047556, -0.013316264, 0.0046863668, -2.916142E-4, -0.0018279911, -2.5781005E-4, -0.008448468, 0.022949161, 0.014979942, -0.009119416, 0.009119416, -0.023715958, 0.013110872, -0.009776671, -0.007845984, -0.004638442, -0.024291057, 0.013966673, 0.013644892, -0.0066307466, 0.009037259, 0.013617506, 0.013268339, -0.015760433, -0.011433502, 0.012679548, -0.029110929, 0.039791327, 0.028001811, -0.033574786, -0.013829745, -1.3264916E-4, -0.018170368, 0.002077885, 0.017896513, 0.01265901, 0.014952556, 0.0027351403, -0.01793759, -0.0019717657, -0.001311943, 0.007209268, -0.0032948342, 0.043296687, 0.0128096305, 0.009304269, -0.014979942, -0.028481059, 0.009434351, -0.002262738, -0.009434351, 0.0016996209, -0.014884092, 1.4040486E-7, -0.005853679, 0.010605087, -0.027810112, -0.019334257, 0.0026204628, -0.053977083, -0.005463434, -0.006716327, 4.34533E-4, -0.010543469, 0.042036947, 0.02114171, -8.584754E-5, -0.012761706, 0.0048643732, -0.024715533, -3.1557665E-4, 0.010940561, 0.014925171, -0.029521713, -0.011981214, 0.018937165, 0.0097219, -0.008653861, 0.0010115568, 0.0125015415, -0.017636348, 0.0025092086, -0.066273235, 0.034149885, -0.011673126, 0.0025211899, 0.007394121, -0.017786968, 0.0018382607, 0.0052922736, 0.017102329, -0.002322644, -0.0053915465, 0.020210598, -0.012980791, -0.0062062694, -0.0054292018, -0.035546552, -0.0063123885, 0.019909356, 0.016513538, 0.0031390782, -0.008708632, 0.007359889, 0.019115172, 0.02750887, 9.901618E-4, -2.4978694E-5, -5.686798E-4, 0.02032014, -0.020813081, -0.011385577, 0.02659145, -0.029576484, -3.652131E-4, 0.03582041, -0.011009024, -0.03894237, -0.008681246, 0.0153770335, -0.004737715, 0.013672277, -0.023017624, -0.045624465, 0.0041489233, 0.015965825, -0.01881393, 0.023921352, -0.02022429, 0.030069426, -0.0046726735, 0.018937165, 0.039407928, 0.0046076328, -0.022538377, -0.03190426, -0.050772965, -0.028289359, 0.016568309, 0.004111268, -0.010926868, 0.0042310804, 0.04225603, -0.026646221, 0.014363765, -0.018512689, -0.015774125, -0.0073804283, 0.01784174, 0.0057099047, 0.01608906, -0.016636772, -0.039627012, 0.005182731, 0.020333832, 0.014500693, 0.023811808, -0.02493462, -0.020635076, -0.01052293, 5.0492265E-4, 0.014199451, 0.03198642, -0.015185334, 0.0056209015, 0.01159097, 0.023127168, 0.022141285, -0.01866331, 0.017376184, 0.024058279, -8.5237785E-4, -0.014487, 0.02182635, 0.010865251, 2.744982E-4, 0.014500693, -0.004693213, 9.199861E-4, -0.030315896, 0.0065896683, 0.016198602, 0.013891363, 0.0025862309, 0.028508445, -3.9987304E-4, -0.045870937, -0.0106530115, -0.052881658, -0.0043817014, 0.00636716, 0.028152432, 0.02047076, 0.016513538, -0.0038511048, 0.02449645, -0.017074943, -0.005415509, 0.014213144, -0.011905904, -0.015911054, 4.920856E-4, -0.0034694176, 0.008605936, 0.00128199, -0.003916146, 0.010173763, 0.008653861, 0.023195632, -0.029302629, 0.0094206575, -0.0135764275, 0.014226837, -0.004943107, -0.015541347, -9.661994E-4, -0.023469487, -4.6512787E-4, -0.011543045, 0.026961157, -0.032588903, 0.06490395, -0.011926443, -0.012337228, 0.011905904, -0.0023363368, 0.03048021, 0.013316264, 0.013918748, -0.014897785, -0.0295491, 0.025865732, -0.04272159, 0.010057374, 6.059071E-4, 0.003411223, -0.01662308, -0.019279486, 0.0029439556, 0.012207146, -0.038504202, -0.013234108, 0.030452825, -0.005408663, -0.012549466, -0.0036491356, 0.02251099, 0.017294027, -0.011467734, -0.012487849, -0.027043313, 0.023866579, 0.0014052254, -0.029850341, -0.029768184, 0.012515235, -0.020265369, -0.0018536651, -0.0013915325, 0.0044296263, 0.012919173, -0.0011527641, 0.040311653, -0.02075831, -0.02659145, -0.009181034, 0.0069799135, -0.007428353, -0.034615442, -0.033766486 ], + "content" : "{id=2, firstName=Helen, lastName=Leary, specialties=[{id=1, name=radiology}], nrOfSpecialties=1}", + "id" : "a9c86fa6-3261-474b-9e4d-7606ce5afb82", + "metadata" : { }, + "media" : [ ] + }, + "f44808a9-897c-4f17-b6d8-278d15d0f54b" : { + "embedding" : [ 0.007528253, 0.028134786, 0.019823484, -0.020125713, -0.026170295, 0.022007776, -0.004622732, -0.011148133, -0.014713064, -0.02601918, 0.004286159, 0.0087989895, -0.003613012, 0.0011634105, -0.0016785738, 0.012624935, 0.03338258, -0.029618455, 0.0097606275, -0.0292338, -0.016911093, 0.017309487, -0.012961509, 0.016979782, -0.018793156, 0.013826983, -0.003223205, -0.023271643, 0.004004536, -0.022337481, 0.033300154, -0.017913945, -0.01699352, -0.056819078, -0.030772422, 0.005725181, -0.011718248, 0.0078373505, 0.01847719, -0.0021447965, 2.1379277E-4, -0.0017069078, 0.01336677, -0.015509849, -0.0030154225, 0.016773717, 0.002091563, -0.031816486, -0.017955158, -0.006339943, 0.0014553363, 0.029151374, -0.009451529, 0.0063193366, -0.004413232, -5.100117E-4, 0.0078098755, 0.023615085, 7.308879E-5, -0.005532854, 0.017858995, -0.0026153123, -0.026925867, 0.0041213064, -0.013668999, -0.007933515, 0.010076594, 0.0013050804, -0.017652929, 0.017776567, 0.023779938, 0.001562662, -0.022447381, -0.015976932, 0.023848627, -0.0034395736, -0.001880346, -0.0065631806, 0.024398133, -0.022886988, 0.018696994, -0.041790046, -0.024343183, 0.02643131, 0.02263971, 0.012109772, -0.01799637, 0.0347014, -0.0072054174, -1.3227891E-5, 0.0107497405, 0.01758424, 0.005680534, -0.026362622, 0.009939217, 0.013511016, -0.008963841, 0.019438827, 0.0056908373, -0.023862364, -0.026609901, 0.025346033, -0.018312339, 0.0016098853, -0.0014544777, 0.0022117677, -0.012576853, 0.0066799507, 0.011065708, -0.002472784, -0.019273976, 0.022625972, 0.0040114047, -0.008874547, -0.010371954, -0.0065150983, 0.016966045, -0.009101219, 0.0050520347, -0.025923017, 0.006958139, 0.044510107, -0.0015841271, -0.029013997, 0.028711768, 0.012789788, -0.016347848, -0.023340331, 0.014300933, -0.014905391, 0.042559355, 0.0017232213, -0.0013411418, 1.4016735E-4, -0.011793805, 0.012796656, -0.010962675, 0.023244169, -0.01592198, -0.034151893, 0.021884136, 0.013407984, -0.008647875, 0.002922693, 0.007116122, 0.005608411, 0.02156817, 0.0032335082, -0.005601542, -0.0050829444, -0.009101219, -0.009547693, -0.009712545, -0.0059518535, -0.02851944, -0.0044956584, -0.0054572965, 0.0154961115, 0.009808709, -0.008524235, -0.011876231, 6.2377687E-4, -0.015454899, -0.040416278, -0.011484707, 0.015386211, 0.018353552, 0.013167574, -0.0053954767, 0.004622732, -0.013353033, 0.023972265, -0.02417833, 0.003401795, 0.01342859, 0.017858995, -0.020180663, -0.0068894504, -0.019177813, -0.01699352, -0.014108606, 9.693656E-4, 0.0032815903, 0.04379575, 0.011168741, 0.019095385, 0.009987299, -0.023285381, 2.9858007E-4, 0.011855625, 0.025538363, 0.02382115, 0.0056874026, 0.0026410704, -0.6369891, -0.01937014, -0.0027080418, -0.041432865, 0.03409694, 0.019521255, 0.0030635044, 0.004413232, -0.013119492, 0.0087989895, -0.01610057, 0.038877655, 0.018600829, -0.004876879, -0.017240798, -0.02067522, 0.005725181, 4.2458042E-4, -0.005199715, 0.0062334756, 6.473885E-4, 0.021705547, -0.035855364, 0.005313051, 0.013146968, 0.015606013, -0.0044956584, -0.012034215, 0.018573353, 0.008531104, -0.03920736, 0.019589944, 0.0030635044, -0.012968377, 0.039234836, 7.220872E-4, -0.009540824, 0.030552618, 0.03450907, 0.00507951, -0.018367289, 0.0020297433, 0.029563505, -0.017845256, -0.025442198, 0.007528253, -0.0011299248, 0.009891136, -0.005429821, -0.018875584, 0.015303784, -0.013511016, -0.014603162, -4.1170133E-4, 0.008895153, -0.03981182, 0.014754277, -0.015578538, 0.0056599276, -0.004533437, -0.010571151, 0.0123845255, -0.017927682, -0.0063605495, 0.010069725, 0.044180404, 5.0786516E-4, -0.0024126815, -0.0064017624, -0.022255054, 0.017721618, 0.044702437, -0.011285511, 0.010440643, 0.022241317, 0.00968507, 0.02364256, 0.0053680018, 0.016430276, 0.01265241, 0.024796527, -0.01134733, -0.016265422, 0.017007258, -0.017790306, 0.008819596, -0.022625972, -0.007864826, 0.028327113, -0.007713712, 0.015248833, -0.0029106727, 0.024576724, -0.012350181, -0.002076108, 0.012844739, -5.293303E-4, 0.020592794, -0.008963841, -0.027667703, -0.046213582, -6.6327275E-4, 0.0122402795, -0.008778382, -0.002082977, -0.0043926258, -0.0011539658, -0.01645775, 0.015180145, -0.017488077, -0.021458268, 0.0043101995, -0.018642042, -0.01289282, -0.02192535, -0.029013997, -0.0109214615, -0.002261567, -0.016086832, -0.017858995, 0.017611716, 0.016444013, 0.03200881, -0.008517367, 0.018490927, -0.0042380765, -0.00576296, -0.003849987, -0.016347848, -0.004567781, 0.02816226, 0.012089165, 0.018078797, -0.01711716, 0.011127527, -0.036047693, -0.0059484188, 0.0066456064, 0.018765682, -0.032393467, 0.0048459694, -0.008689088, 0.0025294519, -0.0032747213, -0.0123845255, 0.0040629213, -0.024920166, 7.7918445E-4, -0.0071573355, 0.002107018, -0.0013540209, -0.012844739, -0.010461249, 0.018271124, 0.025565837, -0.013325557, 0.008462416, -0.026884655, -0.011196216, -0.012727967, -0.015674701, 0.009417185, -0.024686625, -0.015180145, -0.0016528156, -0.024054691, -0.029068947, 0.012673017, -0.01022084, -0.03214619, -0.0027337999, -0.0038156428, 5.8685686E-4, -0.023848627, 0.005003953, 0.009176776, -0.020180663, 0.022708397, 0.003767561, -0.023491446, -0.04472991, 0.010069725, -0.0022650012, 0.011505313, 0.011436625, 0.022488596, 0.008187662, 0.025181182, -0.025291083, 0.03788854, -0.017227061, 0.028959045, -0.009410316, 0.005151633, 0.0064326725, -0.005780132, -0.0049661743, 0.0135041475, -0.0015377625, 0.010887118, -0.01497408, 0.0061785253, 0.03393209, 0.0146169, 0.010997019, -0.021224728, 0.0050245593, -0.0011179043, -0.0047154613, -0.011745723, 0.0031751231, -0.014589424, 0.017625453, 0.0016476639, 0.027736392, 0.0141772935, 0.0020057024, -0.009492742, -0.008180793, -0.011072576, 0.023546398, -1.7182842E-4, 0.01633411, 0.010818429, -0.019232763, -0.009238595, 0.020537844, 0.0017584241, 0.01615552, -0.011512183, -0.005804173, 0.036349922, 0.002888349, -0.010571151, -0.0044407076, 0.024480559, 0.017515551, -0.03563556, 0.01788647, -0.012934033, -0.008730301, 0.014397097, 0.03137688, -0.026184034, -0.0076381546, -0.0019215591, 0.009726283, 0.024562987, -0.012686755, 0.043630898, 0.0074114827, -0.011457232, 0.0011050253, -0.0024916732, 0.009080612, 0.020235615, -2.8591562E-4, 0.027269311, 0.024782788, 0.024150856, 0.018174961, -0.0064326725, 0.036707103, -2.5972817E-4, 0.009898004, 0.019878434, -0.012082296, -0.019095385, -6.9890486E-4, -0.008867677, -2.4770768E-4, -0.016279161, -0.019136598, -0.0030738076, -0.01894427, -0.002970775, 0.005800739, 0.014713064, 0.028656816, 0.025414722, 0.0024298534, -0.01645775, 0.00932789, 0.022488596, 0.010090332, -0.027612753, -0.020963712, 0.010715396, -0.0114091495, 0.014300933, 0.03173406, 0.010687921, -0.0074458267, -0.0056839683, -0.021348367, 0.019315189, 0.024398133, -0.0069718766, -0.0045471746, 0.0074664336, -0.008750907, -0.014671851, -0.011416019, -0.01057802, 0.0292338, -0.004509396, -0.01686988, -0.022680923, -0.002474501, -0.021238465, -0.009121825, -0.020469155, -0.003832815, -0.0071367286, 0.017419389, -0.022131415, -0.012844739, -0.0013316971, 0.012968377, -0.025689477, -0.010777216, -0.036817003, -0.009973561, 0.015908243, 0.0017112007, 0.026623638, 0.008002203, -9.7451726E-4, -0.0051585017, -0.006291861, -0.015386211, 0.0071504666, 0.014479523, -0.020414203, 0.029481078, 0.0064189346, 0.038135823, -0.0031236068, -0.0015248833, 0.0010483573, 0.016073095, -0.007521384, -0.02121099, -0.023834888, -4.2264856E-4, -0.014987817, 0.025153706, 0.01710342, 0.028546914, -0.0013548795, 8.242613E-4, -0.019507516, -0.0058797305, -0.028794194, -0.022680923, 0.021911612, 0.0039118067, 6.602676E-4, -0.0056874026, 0.026032919, 0.020949975, -0.0049112234, 0.00784422, -0.018916797, 0.020098237, 0.02108735, 0.023999741, 0.0031115862, 0.012782918, 0.0012527055, 0.014204769, -0.0076724985, 0.023093054, 0.007974728, -2.895647E-4, 0.003558061, -0.007047434, -0.0055637634, 0.0402789, 0.009719414, 0.0040732245, -0.018312339, -0.04777968, 0.012645542, -4.4905068E-4, -0.012205936, 0.0065631806, -0.011168741, -0.012171592, -0.029920684, -0.031569205, -0.0065425737, -0.046900466, -0.0021224727, 0.014355884, 1.2677847E-5, -0.04360342, 0.022653447, 0.027750129, -0.011635821, 0.020537844, 0.0063639837, 0.008544842, 0.013050804, -0.020400466, -0.013311819, 0.017872732, -0.0022821734, -0.009575169, -0.015235096, -0.007857958, -0.02222758, -0.009479005, 0.04011405, 0.019782271, -0.008483022, 0.0067864177, -0.030689994, 0.001928428, 0.027296785, 0.01033761, -0.0018872148, -0.031019699, -0.0099323485, 0.01022084, 0.0019593376, -0.012150985, 0.00968507, -0.0041865604, 0.0040251426, 0.008977579, -0.010543675, -0.02882167, -0.009183644, 0.023450233, -0.030167963, 0.03409694, -0.010165889, -0.008125843, -0.010007906, -0.009465267, 0.025057543, 0.0020898457, -0.01717211, 0.01794142, -0.0034962415, 0.019837221, -0.014781753, -0.0058865994, -0.0028952176, -1.7644343E-4, 0.00316482, -0.0067280326, -0.012123509, -0.0051481985, 0.014740539, -0.01443831, -0.021595646, -0.035580613, 0.0054985094, -0.009678201, 0.0027252138, 0.001099015, -0.03593779, -0.009808709, -7.937808E-4, 0.0031957296, 0.016746242, -0.010893987, -0.024961378, -0.01752929, -0.009973561, -0.0024040954, 0.025057543, -0.01265928, 0.011072576, -0.0092729395, 0.0062472136, 0.006339943, -0.037284084, -0.001704332, 0.0066043935, 0.023807414, 0.0075007775, 0.050582167, 0.002840267, 0.009540824, 0.02276335, -0.002132776, 0.032063764, 0.014273457, -0.012412001, -0.021114826, 0.024700362, 0.025194919, 0.0055225505, 0.022722136, -9.863231E-5, -0.029975634, 0.028931571, -3.584678E-4, 0.00490092, -0.0113954125, -0.054978225, -0.01015902, -6.8259134E-4, -0.011512183, 0.013325557, -0.009602644, -0.007789269, 0.017268274, -0.0024264192, -0.013311819, -0.015399948, 0.0154823745, -0.018738206, 0.010365086, -0.026238983, 0.01788647, -0.010365086, -0.008936366, 0.009664464, -0.0274479, -0.019850958, 0.0018202437, 0.012027346, 0.011807542, -0.00507951, -0.002824812, -0.0034292703, -0.028684292, 0.017213322, -0.016004406, -0.01300959, -0.00201944, 0.0045128306, -0.025510887, 0.0029690578, -0.0022100506, 0.0097881025, -0.021678071, 0.0024865216, -0.016801191, -0.0348113, 0.0037572577, -0.029316226, 0.019342665, 0.017597979, 0.032942977, 0.02703577, -0.026953343, -0.050252464, 0.00427929, 0.005443559, 0.0033622992, 0.023216693, 0.020524105, -0.003915241, -0.025194919, 0.01022084, 0.023724986, -0.0057663945, -0.046323482, 0.0131881805, -0.0072809746, 0.008448678, -0.021939088, 0.006731467, -0.029041473, 0.030497666, 0.013181311, -0.0065425737, -0.0015858443, -0.005357698, -0.03593779, 0.015990669, -0.020057024, 0.05940176, -0.013854458, 0.0033125, 0.010942068, -0.005426387, -0.0015695308, 0.013167574, -0.0016553914, 0.03321773, 0.0017755962, 0.01057802, 0.00974689, 0.036047693, 0.011780067, 0.00968507, 0.01069479, 0.028739244, 0.0013600311, -0.00926607, 0.02108735, 0.011443494, -0.011285511, 0.010268922, -0.029206324, 0.021939088, -0.010461249, 0.008022809, 0.029178848, 0.004828797, 0.0024951075, -0.012844739, -0.0065872213, -0.0029038037, 0.001501701, -0.0018082232, -0.010529938, -0.028711768, -0.02110109, -0.010145282, -0.0064189346, 0.01824365, 0.018435977, 0.004825363, 0.029206324, 0.018806895, -0.018051323, 0.006683385, -0.040608604, -0.0011634105, -0.04129549, 0.002172272, 0.0070130895, -0.011175609, 0.010117807, -0.008737169, -0.04074598, -0.009664464, 0.012480689, -0.015248833, 1.516512E-4, -0.0013291213, 0.014026179, -0.006023976, -0.0036817004, -0.019150337, -0.022392431, 0.032283567, -0.015592276, 4.3080532E-4, 0.003558061, -0.022433644, 0.008421203, -0.0026050091, 0.025840592, 0.017900208, -0.018435977, -0.012096034, 0.0050314283, 0.031266976, -0.014685588, 0.004694855, -0.0075900727, -0.01717211, -0.02394479, 0.020331778, 0.011759461, -0.02085381, 0.010447511, 0.00932789, 0.017776567, 0.021856662, -0.017488077, -0.027983671, -0.0120548215, -0.0078098755, -0.024961378, -0.0030738076, 0.015633488, 0.038355626, 0.026129082, -0.0025655131, -0.022777086, -0.0049696085, -0.025194919, -0.0016476639, -0.002994816, 0.039949197, 0.016114308, 0.022433644, 0.0053027477, 5.8943266E-4, 0.0069237947, -0.006738336, -0.021842923, 0.0069718766, -0.0056942715, 0.014630637, 0.024961378, 0.016622603, -0.028382063, -0.0070886468, 0.010371954, -0.0073840073, 0.01033761, 0.018875584, -0.034536548, -0.009176776, 0.008290695, -0.012116641, -0.01022084, 0.0042037326, 0.024425609, -0.017323224, 0.015935717, 0.015935717, -0.0015987235, 0.009664464, 0.015083982, 0.017268274, -0.0011711379, 0.022090202, -0.005007387, 0.004413232, -0.009479005, -0.025030067, 0.023628823, 0.014369622, 0.009005055, 0.023917314, -1.5154386E-4, 0.016141783, 0.014713064, 0.0064738854, 0.007926646, -0.006449844, -0.004591822, -0.0038912, 0.0077617937, -0.014314671, 0.008050285, -0.0072054174, -0.0012484124, -0.026486263, -0.008613531, -0.0077617937, 0.011367937, -0.020922499, -0.04698289, -0.015674701, -0.004093831, -0.0123845255, -0.017776567, -0.015578538, -0.002311366, -0.01752929, -0.015715916, -0.0067658112, -0.02340902, -0.019713582, 0.03137688, 0.012308968, -0.006625, 0.014905391, 0.20068015, -0.010289528, -0.0094446605, 0.0073290565, -0.023958528, 0.011532789, 5.8599823E-4, -0.022392431, -0.007164204, 0.013030197, -6.55116E-4, 0.023367807, 0.007047434, 0.0017652928, 0.01806506, -0.019480042, -0.03950959, -0.00796099, -0.036734577, -0.012947771, 0.007816744, 0.014287195, -0.009005055, -0.023450233, 0.00807776, -0.0022684357, 0.0030909798, 0.016952306, 0.035553135, 0.025634525, -0.0077411872, -0.023244169, -0.0077480557, -2.4556118E-4, -0.008730301, -0.036404874, -0.015358735, 0.012597459, 0.025263608, 0.0037881674, -0.0043101995, -0.027365474, 0.012343313, -0.016595127, 0.0110931825, 0.022323743, -0.0140193105, -0.016512701, -0.0065150983, 0.02994816, -0.038932607, 0.0018545878, 0.037339035, -0.0045643467, 0.017900208, 0.00855858, 0.018999223, -0.0032077502, -0.006020542, 0.028794194, -0.010440643, 0.025400985, 0.008510497, 0.022625972, 0.0061270087, 0.02151322, -0.03107465, -0.014946604, 0.018435977, 0.010674183, 0.015193882, 0.0046055596, -0.0016717049, 0.017804043, -0.024192069, -0.023450233, 0.007363401, 0.01182128, -0.021966564, 0.0045712157, -0.020414203, 0.0022529808, 0.0012389678, -0.0043033306, -0.035855364, -0.03143183, -0.0042106016, 0.024095904, -0.0070096552, 0.0036233151, 0.0028746112, -0.022158891, -0.0018460018, -0.0015205903, 0.024054691, 0.02085381, -0.003523717, 0.024274494, -0.011539658, -0.0055397227, -0.030552618, 0.04462001, 0.010948937, 0.01354536, -0.03629497, -0.002409247, 0.0047395024, 0.028904095, 0.0146169, 0.010818429, -0.011416019, -0.016416537, -0.010028512, -0.010900855, -0.023065578, 0.018738206, -0.0065150983, -0.027846294, 0.011271773, -0.014136081, 0.01847719, -0.009066874, 0.014287195, -0.003582102, -0.0127004925, -0.008009072, -0.017336963, 0.007047434, 0.03398704, -0.032118715, 0.008462416, 0.0036851347, -0.012020477, 0.013119492, 0.01342859, -0.006916926, -0.014548211, -0.013394246, -0.02928875, 0.012590591, 0.041213065, -0.0065425737, 0.0122402795, 0.0043170685, -0.004354847, -0.022323743, 0.006322771, 0.015963193, -0.008015941, 0.0072534992, -0.014328408, -0.027502852, -0.01479549, -0.0068448028, 0.014713064, -0.016073095, 0.0011488141, -0.061270088, 0.0044922237, -0.016718766, -0.038712803, -0.006989049, 0.01740565, -0.002800771, -0.034179367, -0.0154686365, -0.17650181, 0.025991706, 0.026596164, -0.034124415, -0.005419518, 0.008840202, 0.030799896, -0.017378176, 0.0058797305, 0.0026187468, 0.005567198, -0.005182543, -0.039289787, -0.007988466, -0.0031270413, 0.0015987235, -0.01134733, 0.0117251165, 0.038822707, 0.023697512, 0.0238761, -0.02121099, 0.012164722, -0.0022529808, -0.004955871, 0.0026153123, 0.021307154, 0.0043342407, -0.0016837254, -0.0046192976, 0.0031133036, -0.015606013, 0.009101219, -0.00784422, 0.001388365, -0.016677553, -0.00748704, -0.015647227, -0.020180663, 0.028024884, 0.01853214, 0.021403318, 0.0075076465, 0.015702177, 0.0014347298, 0.0053851735, 0.027653966, -0.0057595256, 0.03233852, -0.012336444, 0.03874028, -0.051653706, -0.0058625583, 0.0033657334, 0.010557413, 0.0063639837, -0.0016064509, 0.018518403, 0.011388543, 0.0014201335, -0.0365972, -0.04022395, 0.0048871823, -0.009011923, -0.016059358, -0.010110938, 2.945017E-4, 3.2369426E-4, -0.046268534, -0.015812078, -0.022832038, -0.016004406, 0.0015068527, -0.005388608, 0.008283826, 0.010083463, -0.013346164, 0.0365972, -1.20097444E-4, 0.018326076, 0.0040663555, 0.025634525, 0.009156169, 0.0115671335, -0.017721618, 0.00974689, -0.010255184, -0.010110938, 0.016897356, -0.010365086, 0.020634007, -0.055307932, -0.009904873, 0.0036885692, -0.004444142, 0.0078236135, 0.0061819595, 0.00573205, 0.009204251, -0.006394894, 0.009822447, -0.021183515, -0.017776567, -0.002254698, 0.025002591, 0.0032781558, 0.010997019, 0.037751168, 0.062479004, 0.0070886468, 0.021224728, 0.01289282, -0.008689088, 0.030992223, 0.0013626069, 0.024192069, -0.028272161, -0.01663634, 0.0048562726, -0.018106272, 0.030525142, 0.0032575491, -0.014300933, -0.0028952176, 0.019988336, 0.016485225, -0.08473406, -0.030470192, 0.02632141, 0.013792639, -0.0154961115, 0.0345915, -0.021526957, 0.012755443, -0.026060393, 0.030525142, -0.031321928, -0.020070761, -0.0030995659, -0.008709694, 0.016952306, 0.01622421, -0.025057543, -0.009898004, -0.0046192976, 0.031102125, -0.022543546, -0.016430276, 0.014067393, 0.0067829834, -0.0054538622, 0.0069650076, -0.01110692, 0.019823484, 0.009911742, -0.0130164595, 0.01663634, -0.022255054, 0.015042768, -0.018600829, -0.00986366, 4.9670326E-4, -0.020867547, 0.0037916019, 0.025332296, 4.132039E-5, 0.0078373505, 0.011711379, 0.020153187, -0.015413686, -0.011635821, 0.014300933, -0.028244685, 0.039701916, 0.019947123, -0.039839294, -0.0058969026, 0.0042689866, -0.019919647, -0.010715396, 0.013737688, 0.010660446, 0.01592198, 0.01147097, -0.017034734, -0.001025175, 0.0028024884, -0.0010715397, 0.013875064, 0.04901607, 0.0013480106, 0.0019370139, -0.013435459, -0.020963712, 0.008744039, -0.012453214, 6.765811E-4, -0.009911742, -0.017639192, -4.8167768E-4, -0.016897356, 0.015056506, -0.018312339, -0.019109124, -0.003630184, -0.05429134, -0.0043205027, -0.0046124286, -0.003262701, -0.010330741, 0.038960084, 0.020304302, -0.012947771, 0.0016373607, 0.004873445, -0.016471488, 0.008977579, 0.0018013543, 0.011223691, -0.02507128, -0.020290565, 0.019164074, 0.0068241963, -0.005721747, -0.0017893339, 0.006511664, -0.013153836, 0.0019009525, -0.061764646, 0.030113012, -0.008524235, 2.147587E-4, -0.0076724985, -0.020840073, 0.0040251426, 0.0036507905, 0.019686107, 0.004997084, -0.0053439606, 0.02210394, -0.012837869, -0.0056427554, -0.002505411, -0.029893208, -0.0040800935, 0.018490927, 0.013881934, 0.004509396, -0.0055740667, 0.0049524363, 0.023738725, 0.016073095, 0.008029679, 0.011993001, -0.014754277, 0.0328056, -0.020455418, -0.0042449455, 0.021609383, -0.024508035, -0.0044407076, 0.034536548, 0.0071985484, -0.026774753, -0.016650077, 0.0151526695, -0.009025661, 0.010701659, -0.029645931, -0.049950235, -4.975619E-4, 0.0084692845, -0.013943753, 0.035141006, -0.02222758, 0.029041473, -0.003166537, 0.028134786, 0.031761535, -0.0016854426, -0.02560705, -0.028739244, -0.058247797, -0.03143183, 0.012796656, 0.011594608, -0.004207167, 0.012604329, 0.045004666, -0.028546914, 0.020111974, -0.022090202, -0.004347978, -0.01289282, 0.0070680403, 0.010454381, 0.028739244, -0.007116122, -0.035141006, -0.0041796914, 0.019686107, 0.014355884, 0.022900725, -0.02305184, -0.013215655, -0.007219155, -2.7217122E-6, 0.015386211, 0.040196475, -0.0036954382, 0.005357698, 0.015839554, 0.03148678, 0.018875584, -0.02483774, 0.027104458, 0.02246112, 9.58955E-5, -0.020661483, 0.015097719, -0.0037400855, 0.009657594, 0.0048391004, -0.006999352, -0.0016141783, -0.037201658, -0.0034567458, 0.01586703, 0.0192465, 0.002539755, 0.02667859, 0.009114956, -0.036542248, -0.007596941, -0.04728512, -0.0049799117, -4.0590574E-4, 0.022735873, 0.012123509, 0.006195697, -0.011738854, 0.022722136, -0.033959564, 0.005000518, -5.870715E-5, -0.0025912714, -0.014465786, 0.0043582814, -0.002400661, 0.011656428, 0.005371436, -0.010378824, 0.0062334756, 0.005316485, 0.02138958, -0.029865734, 0.01776283, -0.012645542, 0.013126361, -0.010770347, -0.014094868, 0.0041247406, -0.024480559, 0.004567781, -0.014342146, 0.018326076, -0.021320892, 0.074018665, -0.016567651, -0.007356532, 0.00891576, -0.006054886, 0.03154173, 0.007967859, 0.010584888, -0.011024495, -0.027269311, 0.016622603, -0.026651114, 0.0037881674, 0.0011110355, 0.0061716563, -0.009341627, -0.024796527, 0.005804173, 0.006916926, -0.033025403, -0.012425738, 0.028244685, -0.006023976, -0.018463453, -0.0034739177, 0.02358761, 0.012508165, -0.0082014, -0.008290695, -0.03025039, 0.017597979, 0.0052134525, -0.033684812, -0.025400985, 0.0072466303, -0.012164722, -0.0053027477, -0.0032403772, -0.00295532, 0.013339295, -0.0043994947, 0.04747745, -0.013002722, -0.018202437, -0.01075661, -0.0062987297, -9.899721E-4, -0.02133463, -0.023244169 ], + "content" : "{id=5, firstName=Henry, lastName=Stevens, specialties=[{id=1, name=radiology}], nrOfSpecialties=1}", + "id" : "f44808a9-897c-4f17-b6d8-278d15d0f54b", + "metadata" : { }, + "media" : [ ] + }, + "bbd55214-ec00-4462-b823-12df3cfc7bc2" : { + "embedding" : [ 0.005423399, 0.022028634, 0.010379144, -0.018161757, -0.026230546, 0.026384104, 0.0063691786, -0.0010871228, -0.022238031, -0.03922716, 0.012110164, 0.0096881315, 0.0036923788, 0.0013898769, 0.010058068, 0.0043310416, 0.033615302, -0.034480814, 0.001251151, -0.018552633, -0.019055188, 0.008976179, -0.009457794, 0.021274801, -0.015593146, -0.0071683796, -0.0121380845, -0.017575443, 0.0066483757, -0.01955774, 0.034564573, -0.022559108, -0.013729506, -0.041265298, -0.018985387, -0.0016507516, -7.2067697E-4, -0.007740733, 0.031214211, -0.0029699567, 0.01693329, -0.008299127, 0.007992011, -0.006320319, -0.0052244714, 0.011740229, -0.0041774833, -0.02956695, -0.009262356, 0.0035109008, -0.008655103, 0.032079723, -0.015760664, 0.00984169, 0.0013549774, 0.0028216334, 0.0045753387, 0.013199032, 0.007998991, -0.010281425, 0.030683737, 0.019529821, -0.017715042, -0.013938904, -0.011153915, -0.011265594, -0.015690865, -7.4761505E-5, -0.0069903918, 0.018706191, 0.017324166, 0.0022440448, -0.00808973, -0.027626531, 0.02945527, 0.011607611, -0.0108049195, -0.0091785975, 0.0018514243, -0.005604877, 0.014392599, -0.03138173, -0.05639777, 0.018594513, 0.020786207, 0.02068849, 0.00357372, 0.022866225, -0.0019421633, -0.016319057, 0.0076709343, 0.027151896, 0.02409469, -0.027570691, 0.02142836, 0.0081595285, -0.01890163, 0.035904717, 0.0022091453, -0.0304883, -0.011007337, 0.021693597, -0.024429727, 6.613476E-4, -0.009157658, -0.0021777356, -0.0075662355, 0.0071823397, 0.020283652, 0.0044043306, -0.008271207, 0.018091958, 0.011768148, -0.011077136, -0.0074685165, -0.0017475979, 0.006449448, -0.004037885, 0.006348239, -0.020786207, 0.01597006, 0.045034457, 0.0096392725, -0.027054178, 0.026970418, 0.027933648, -0.017296247, -0.017673163, 0.0053256806, -0.022810385, 0.039618038, 0.013555008, 0.0036504993, 0.01252896, -0.011893787, 0.018077997, -0.018064039, 0.027514853, -0.009394975, -0.03487169, 0.025518594, 0.02766841, -0.003915736, 9.4577944E-4, 0.0017493429, 0.008110669, 0.024290128, 0.016626174, -0.010127867, -0.008864501, 0.003908756, -0.007314958, -0.006704215, -0.010839819, -0.014783475, 0.010476863, 0.00269076, 0.0072940183, -0.0019124986, -0.0049627246, -0.0022702196, 0.0073917373, -0.0027186796, -0.039171323, 5.8238726E-4, 0.023996972, 0.016584294, 0.015062671, -0.011670429, 0.0029664668, -0.013680647, 0.024653085, -0.019055188, -2.3775359E-4, -0.013862125, 0.03129797, -0.02054889, -0.0026366655, -0.009394975, -0.023131462, -0.017603364, 0.01249406, 0.014183201, 0.038864207, 0.005084873, -0.0025459265, 9.047724E-4, -0.02771029, 0.007035761, 0.0031043203, 0.016737852, 0.01511851, -0.0030868705, -1.3755354E-5, -0.6405893, -0.015788583, 0.024960201, -0.02052097, 0.022824345, 0.021693597, 0.0125987595, 6.4520654E-4, -0.014064543, 0.012221843, -0.020144055, 0.028924797, 0.015104551, 0.0042647324, -0.022796424, -0.0177988, 0.016360937, -0.0058526644, -0.0115796905, 0.013254872, -0.002954252, 0.021218963, -0.023298979, 7.957111E-4, 0.0032753283, 0.012026406, -0.01340843, -0.010902638, 0.018050078, 0.0036888886, -0.022196151, 0.014769515, 0.01074908, -0.0179384, 0.043443035, -2.6788177E-5, -0.008215368, 0.021637758, 0.03210764, 0.018399075, -0.02597927, 0.0022981393, 0.022182193, -0.015076632, -0.030264942, 0.003845937, -0.010274445, 0.009073898, -0.0056746765, -0.012054325, 0.014239041, -0.009904509, -0.014162262, -0.006320319, 0.01617946, -0.041321136, -0.004205403, -0.011293514, 0.0039680856, 0.0011970566, -0.0016507516, 0.010965457, -0.016416777, -0.006107432, 0.01696121, 0.029092314, -0.0072660986, -0.011691369, -0.0036190895, -0.013171113, 0.0062575, 0.038752526, -0.003229959, 0.01890163, 7.485966E-4, 0.0120892245, 0.02240555, -0.0078105326, 0.0050325235, 0.006969452, 0.015006832, -0.017170608, -0.0072940183, -0.0015626301, -0.009716052, -0.00715442, -0.01693329, -0.0055769575, 0.0024569326, -0.0020329023, 0.029315673, 0.008871481, 0.025392955, 0.0048545357, -0.015872343, 0.014909113, -0.009185577, 0.008313087, -0.010134847, -0.022168232, -0.013799306, -0.0057723955, 0.021051444, -0.0020032376, -0.00536058, 0.005287291, 0.02149816, -0.008759802, 0.030795416, -0.026328266, -0.008892421, 0.0050429935, -0.0052244714, -0.01160063, -0.02328502, -0.030599978, -0.014434478, 0.0011324923, -0.023564216, -0.017533563, 0.002230085, 0.01884579, 0.026244506, -0.019250624, 0.001384642, 7.0017343E-4, -0.012591779, 0.008836581, -0.019152906, -0.013589908, 0.03738446, 0.021958834, 0.014560117, -0.022880184, 0.017491685, -0.041656174, 0.0025494164, 0.0140296435, 0.014211121, -0.013136213, 0.0075871754, -0.020213854, -0.0037168085, -0.012277682, -0.011300494, 2.644736E-5, -0.023647975, 0.003933186, -0.01345031, 0.008313087, 0.0029647218, -0.012822117, -0.011174855, 0.0013951119, 0.02144232, -0.018287396, 0.0055769575, -0.013443329, 9.87659E-4, -0.007901272, -0.0038354672, 0.006002733, -0.02244743, -0.014420519, 0.016249258, -0.015369788, -0.011153915, 0.005821255, -0.012829096, -0.039087564, 0.004945275, -0.0021742457, 0.010853779, -0.011558751, -0.004397351, 0.0016385367, -0.022684745, 0.02420637, 0.021958834, -0.0046067485, -0.04732387, 0.0020259223, -0.0041460735, 0.0062121307, 0.017631283, 0.0029612319, -0.0038564068, 0.014134342, -0.020814126, 0.03671439, -0.017184569, 0.018510753, -0.016598254, 0.007803553, -0.008515505, 0.00357721, -0.007524356, 0.022531187, -0.005283801, 0.0045648688, -0.0076499945, 0.014183201, 0.039283, 0.015760664, 0.023424618, -0.024178449, 0.007601135, -0.021093324, 0.004805676, -0.00802691, 0.0027186796, -0.005070913, 0.011349353, 0.011872848, 0.021079363, 0.019906737, -0.014615957, -9.274571E-4, -0.02050701, -0.004645138, 0.027263574, 0.0028704929, 0.0027553241, -0.014741595, -0.026286386, -0.009136718, 0.024555365, 0.0033538525, 0.024597244, -0.0076569743, -0.0057514557, 0.035430085, -0.00312177, -0.0035405655, 0.016626174, 0.038780447, 0.042577524, -0.027445054, 0.013862125, -0.013157153, -0.008843561, 0.027989486, 0.03476001, -0.010365184, -0.006428508, -0.010421024, 2.3797172E-4, 0.026007188, -6.467334E-5, 0.0338945, 0.011153915, -0.006002733, 0.001740618, -0.0018304845, 0.018329276, -0.0025511615, -0.0026436455, 0.022949982, 0.017352086, 0.028198885, 0.011181835, 0.0028233784, 0.026439944, -0.007321938, 0.012926815, 0.013038495, -0.018594513, -0.013080373, 0.005116283, -0.024080731, -6.5504933E-6, -0.012968695, -0.018231556, 0.005905014, -0.015816502, 0.0028041836, -0.001980553, 0.0114819715, 0.03827789, 0.012836076, 0.006170251, -0.027347334, 0.011139955, 0.01968338, -0.003395732, -0.020171974, -0.0026628403, 0.013059434, -0.01155177, 0.015760664, 0.028129086, 0.008550405, -5.5883E-4, -0.02222407, -0.0044915797, 0.018831829, 0.036909826, 0.0030851255, -0.01074908, -0.0031776095, -0.0038284871, -0.013212992, -0.01684953, -0.015286029, 0.028841037, -0.006414548, -0.018287396, -0.017952358, 0.0043380214, -0.024248248, 8.563492E-4, -0.015174351, -0.012124124, -0.011886807, 0.018440954, -0.02956695, 0.001954378, 0.011468012, 0.0056642066, -0.010134847, -0.018664312, -0.02962279, -0.015774624, 0.02595135, 0.010239545, 0.016319057, 0.0017065909, 0.014504278, 0.008585304, 0.005734006, -0.013743467, -0.00625401, 0.0053152107, -0.022977903, 0.021107284, -0.0045858086, 0.030348701, -0.0012450436, 0.006878713, -0.013212992, 0.008271207, -0.011872848, -0.014392599, -0.03135381, -0.0018095447, -0.023829453, 0.008724903, 0.011349353, 0.03554176, -0.0042682225, 3.9763743E-4, -0.022377629, -0.015788583, -0.025085839, -0.0032962682, 0.0015521601, 0.018203637, -0.0065052873, -0.021009564, 0.02681686, 0.019292504, 0.007971071, 0.025211478, 0.001879344, 0.011223715, 0.011851908, 0.016542414, -0.010141826, 0.030181183, -0.0064005884, 0.013003594, 0.0033573424, 0.04620708, -0.0114819715, 0.009855649, 0.004299632, 0.0046730577, 0.008103689, 0.040008914, 0.016737852, -0.0013794071, -0.021191044, -0.041516576, 0.00984867, -0.010776999, -0.013659707, 0.0026506253, -0.018371154, -0.021191044, -0.039283, -0.035904717, 0.0032107641, -0.030292861, -0.019501902, 0.0089343, -0.0025214967, -0.02053493, 0.029371511, 0.020018416, 0.0023435089, 0.0139807835, 0.01163553, 0.015635025, 0.024429727, -0.024429727, -0.01705893, 0.016514495, -0.0050429935, -0.0285758, -0.030907094, -0.0015172606, -0.008641143, 4.1835906E-4, 0.030655816, 0.012340502, -0.012766277, 0.011747208, -0.033754904, -6.6178385E-4, 0.0267331, 0.014615957, 0.0097369915, -0.024415767, -0.022056554, 0.015048712, -0.005884074, -0.00807577, 0.0027780088, -1.808236E-4, 0.005276821, 0.0031531798, -0.009234437, -0.023494417, -0.0027588143, 0.011775129, -0.031577166, 0.021191044, -0.024332007, -0.008424765, -0.003943656, -0.0048091663, 0.014420519, -0.010937538, -0.029092314, 0.015760664, -0.011810028, 0.03227516, -0.005475749, -8.519867E-4, -0.0011796068, -0.010811899, -0.0015146431, -0.005095343, 0.0044985595, -0.0148532735, -2.1823162E-4, -0.0020032376, -0.002130621, -0.037496142, 0.007677914, 0.011893787, 0.011963586, 0.0076709343, -0.034313295, -0.015760664, -0.0030170712, 0.01069324, 0.018161757, -0.009143698, -0.027794048, -0.007915231, -0.019571701, -0.009269336, 0.030935014, -0.026049068, 0.011649489, -0.023354819, 0.006096962, 0.0018217596, -0.020967685, -0.010811899, 0.00895524, 0.02314542, 0.01435072, 0.04207497, -0.010553642, 0.01430884, 0.013945884, -0.0031357298, 0.028478082, 0.0020416272, -0.010686261, -0.017198527, 0.024708923, 0.032470595, 0.014462398, 0.039925154, -0.0023836433, -0.018357195, 0.020897886, 7.241669E-4, -0.012382382, -0.010302365, -0.038166214, -0.0062923995, 0.006606496, -0.00989055, 0.021777356, -0.013352591, -1.06770996E-4, 0.011286533, 0.009073898, -0.019446062, -0.004397351, 0.023089582, -0.011091096, 0.0021969303, -0.01159365, -0.004983664, -0.0021149165, -0.009471754, 0.0119426465, -0.016821612, -0.013729506, -0.006714685, 0.006623946, 0.006885693, -0.010616461, -0.0096392725, -0.0038564068, -0.016905371, 0.010323305, -0.0047672866, -0.013659707, 0.009025039, -0.015453547, -0.019809019, 0.012989635, 0.0039820457, 0.008808661, -0.019013308, -6.216493E-4, -0.017352086, -0.03696567, 8.5329544E-4, -0.037244864, 0.036407273, 0.010281425, 0.03294523, 0.025588393, -0.017044969, -0.03489961, 0.012005466, 0.025267318, -0.008347986, 0.021861115, 0.017142689, 0.010770019, -0.03947844, 0.001427394, 0.0064668977, -0.020269694, -0.031912204, -0.004271712, -0.01524415, 0.012200903, -0.026453905, 0.0039750654, -0.03297315, 0.02685874, 0.004676548, -0.014099442, -0.003838957, -0.011265594, -0.030962933, 0.013750446, -0.026384104, 0.06421528, 8.8601385E-4, -0.010867738, -0.005709576, -0.014671796, 0.0043938607, 0.008494565, 0.0038738567, 0.026174707, 0.0088156415, 0.031046692, -0.0064529376, 0.019222705, 0.0074685165, 0.022810385, 2.044899E-4, 0.025141679, -0.004662588, -0.009674172, 0.032721873, 0.009974308, 0.009080878, 0.008864501, -0.0214842, -0.001295648, -0.014811395, -6.8970356E-4, 0.013478229, 0.009353096, 2.2030379E-4, -0.005908504, -0.010539682, -0.0016594764, -0.0025110268, -0.0039122463, -0.0021742457, -0.012717417, -0.021218963, -0.018036118, -0.009269336, 0.0077477135, 0.026160747, -0.0067670345, 0.03210764, 0.019292504, -0.01619342, 0.0020154524, -0.04363847, -0.007231199, -0.025476715, -3.7342584E-4, 0.0038773466, 0.0059329337, 0.022545148, -0.024010932, -0.043443035, -0.023047702, 0.021107284, -0.011314454, -0.0058491747, 0.00537803, 0.028226804, 0.006344749, 0.02413657, -0.010986397, -0.010372164, 0.04313592, -0.015635025, -0.015495427, 8.1228843E-4, -0.013101313, 3.8553164E-5, -2.5498527E-4, 0.0268727, 0.039925154, -0.02328502, -0.0143228, 0.0012249763, 0.04804978, -0.021540038, 0.006079512, -0.018287396, -0.01520227, -0.015746703, 0.020046337, 0.0024516976, -0.020925807, 0.01606778, 0.0012223588, 0.0044182907, 0.02669122, -0.017449806, -0.0091297375, -0.031912204, 0.009094838, -0.012940776, -0.009534573, 0.011474991, 0.03032078, 0.031605087, -0.014085483, -0.017142689, -0.0041705035, -0.022419509, -0.0031741194, -0.012801177, 0.03584888, 0.021009564, 0.01684953, 0.004889435, -4.8990326E-4, 0.016388856, 0.0034725112, -0.0139807835, 0.01248708, -0.006013203, 0.018915588, 0.039729714, 0.017631283, -0.03146549, -0.014420519, 0.0073917373, -0.010553642, 0.00980679, 0.0037447282, -0.034229536, -0.013904004, 0.011258614, -0.012166004, -0.0011708819, 0.0016053821, 0.022503268, -0.018091958, 0.008285168, 0.00714744, 0.0026244507, 0.010839819, 1.808236E-4, 0.011509892, -0.018091958, -0.002849553, -0.018231556, -0.009855649, -0.026509743, -0.019711299, 0.023522336, 0.0031060653, -0.0010330285, 0.009360075, -0.0074266368, 0.012703458, 0.002324314, 0.0061179018, 0.0033015031, -0.009618333, -0.012773257, -0.0019962576, 0.013924944, -0.026635382, 0.0111190155, -0.022545148, 0.0070078415, -0.018426994, 0.0017502154, -0.009520614, 7.4118044E-4, -0.0055595078, -0.050339196, -0.00446017, 0.0050464836, -0.007314958, -0.0032456636, -0.024611205, -0.01878995, -0.008222348, -0.015020792, 3.4179806E-4, -0.025406916, -0.025002081, 0.035095047, 0.013966824, 0.0060306527, 0.017393965, 0.2138648, -0.016374897, -0.016765773, 0.0304883, -0.024722883, 0.013143193, 0.005423399, -0.009597393, -0.0013924944, 0.014685756, -0.0013951119, 0.009939409, 0.002678545, -0.0027116996, 0.010623441, -0.0139807835, -0.037914935, -0.021274801, -0.021958834, -0.018371154, -0.006910123, 8.75544E-4, 0.010309345, -0.02151212, 0.02151212, -0.014839314, -0.00804087, 0.008431746, 0.031660926, 0.025797792, -0.0031985492, -0.011768148, 0.012312583, -0.0055909175, -0.003564995, -0.025574435, -0.015369788, -0.007440597, 0.021595879, -0.014546157, -0.0060376325, -0.037105266, 0.010002228, -0.0134223895, 0.0032875433, 0.036379352, -0.009911489, -0.022503268, -0.0030886154, 0.025141679, -0.033587385, -0.011474991, 0.037328623, -0.006191191, 0.0016472616, 0.008110669, 0.030990854, -0.005004604, -0.009960349, 0.0304883, -0.003660969, 0.04109778, 0.0018566592, 0.014532197, 0.0139807835, 0.016221339, -0.020730369, 0.006372669, 0.032721873, -0.008696983, 0.009164638, -0.013736486, 0.0012912855, 0.020744327, -0.009234437, -0.01872015, -0.0014335015, 0.019809019, -0.008836581, 0.0152162295, -0.021972794, -0.0064215283, 0.010832839, -0.014490318, -0.03646311, -0.049780805, 0.003491706, 0.0050569535, -8.724902E-4, -2.9359298E-4, 0.007580195, -0.021986755, -0.018887669, 0.0018531693, 0.029818226, 0.03213556, -0.0041390937, 0.027794048, -0.01435072, 1.2563859E-4, -0.020032376, 0.03735654, 0.015593146, 0.006906633, -0.035513844, 2.2379374E-4, 0.007831472, 0.017282287, 0.028506001, -0.014978913, -0.012975675, -0.029901985, -0.0046730577, -0.01966942, -0.023606095, 0.016207378, 0.0012302112, -0.015006832, 0.003940166, -0.014127362, 0.014881194, -0.01878995, 0.012319562, -0.004023925, 0.0014265216, -0.0070532113, -0.027933648, -0.006979922, 0.017631283, -0.044392303, 0.00446715, -0.028380362, -0.014378639, 0.006700725, -4.205403E-4, -0.008585304, -0.013631787, -0.013310711, -0.030097423, -0.0038808365, 0.04545325, -0.010476863, -0.0046835276, -0.0051093027, -0.0025860611, -0.017282287, 0.007063681, 0.0114819715, -0.0058421944, 0.0019124986, -0.007964091, -0.014741595, -0.015537307, -0.005734006, 0.021260843, -0.009094838, 0.002052097, -0.056034815, 5.2792475E-6, -0.025281277, -0.046095405, -0.009743971, 0.01890163, 0.001697866, -0.030627897, -0.01072116, -0.18147796, 0.031214211, 0.008599264, -0.023452537, -0.017128728, -7.730264E-4, 0.026160747, -0.011544791, 0.015900262, -0.0023417638, 0.022670787, -0.0018706191, -0.031912204, -0.017715042, 8.6289283E-4, -0.0029647218, -0.026523704, 0.020451171, 0.03406202, 0.029734468, 0.018315315, -0.016360937, 0.008878461, -0.0013130978, 0.011237674, 0.011286533, 0.026146788, -0.0016507516, -0.001742363, -1.4712366E-4, 0.0014910859, -0.022670787, 0.018343234, -0.0010923578, 0.0046974877, -0.0019910228, -0.021889035, -0.019362302, -0.01697517, 0.021861115, 0.014364679, 0.019264584, 0.0037900975, 0.015690865, 0.0063796486, 0.0062993797, 0.031772606, -0.013596888, 0.029901985, -0.0320518, 0.016402816, -0.048021864, 0.011789088, -0.0044392305, 0.0014465888, 0.014022663, 0.013157153, 0.011195795, -0.019208746, -2.6741825E-4, -0.029790306, -0.03328027, 0.01072814, 0.0055350782, -0.012996615, -0.011314454, -0.0034393566, 0.005873604, -0.04115362, -0.00714395, -0.02328502, 0.0063168295, -3.9850993E-4, 0.0016359192, 0.010874718, 0.01345729, -0.0024045832, 0.026188668, 0.00895524, 0.0120892245, -0.008501545, 0.018831829, 0.0017380005, 0.009248396, -0.01798028, 0.01518831, -0.013610847, -0.00537105, 0.029259833, -0.0034323765, 0.004812656, -0.05031128, -0.02052097, 0.0100510875, 0.01166345, 0.011084116, -0.015956102, 3.199858E-4, 0.00888544, 0.004090234, 0.004742857, -0.0018200147, -0.023508377, -0.0016699464, 0.018664312, 0.0015957847, 0.013219972, 0.028729359, 0.04553701, -0.005985283, 0.025295237, 0.006606496, 0.018050078, 0.037216943, 0.003748218, 0.022461388, -0.030683737, -0.013024534, -0.002326059, -0.01972526, 0.036407273, 0.0031985492, -0.0031043203, -0.001519878, 0.013938904, 0.021749437, -0.06549959, -0.026607463, 0.027179817, 0.012745338, -0.03755198, 0.04207497, -0.019348344, 0.009192557, -0.037663657, 0.021721518, -0.035374243, -0.027417133, -0.0114819715, -0.01430884, 0.027137937, 0.017268326, -0.021972794, -0.0019299485, -0.011112035, 0.025965309, -0.012996615, -0.023159381, -0.004561379, 0.0064983075, -0.0054024598, -0.001071418, -1.7657022E-4, 0.023843413, 0.009995248, 2.8639493E-4, -0.0033416376, -0.013589908, 0.023815494, -0.023550257, -0.014078503, 0.001564375, -0.010595522, 6.508777E-4, 0.031577166, -0.0026942499, 0.004303122, 0.0018723641, 0.008508525, -0.040595226, -0.0049382946, 0.0021376011, -0.014183201, 0.037942857, 0.018622432, -0.03032078, -0.008271207, 0.00714395, -0.02410865, 0.0040797642, 0.011461032, 0.018580552, 0.025727993, 0.031605087, -0.025351077, -0.0016629664, -2.1572321E-4, -0.003053716, 0.0069310623, 0.039143402, -0.010309345, 0.019152906, -0.012005466, -0.026551623, 0.009569473, 0.0021149165, -0.014141322, 0.008250268, -0.014406559, 0.0048684957, -0.006641396, -0.002774519, -0.02423429, -0.027919687, 0.0053082304, -0.044950698, -0.016598254, 0.0028879426, -3.4288867E-4, -0.00536058, 0.044029348, 0.010895658, -0.0013514874, 0.0015547776, 0.011328413, -0.026160747, 0.009059939, 0.011879827, 0.014839314, -0.022600988, -0.01876203, 0.015928183, 0.010441964, 0.006362199, 0.0142879, 0.009094838, -0.011670429, -0.0016699464, -0.06683973, 0.016737852, -0.010072027, -0.0062226006, -0.0074056974, -0.007936171, 0.008229328, -0.0055036684, 0.01610966, -2.881399E-4, -0.016835572, 0.008466645, -0.005193062, 0.005727026, -0.0049592345, -0.021986755, 0.021763397, 0.020102175, 0.0027221695, 0.0077128136, -0.007922212, -0.010476863, 0.020409292, 0.012054325, -3.304557E-4, 0.0054059494, -0.018552633, 0.034564573, -0.014155282, -0.008487585, 0.023634017, -0.012975675, 0.012801177, 0.018105917, -0.0023644485, -0.02331294, -0.012640638, 0.016793692, -0.0028146536, 0.011544791, -0.040706906, -0.041851614, 0.0054897084, 0.0073777772, -0.03487169, 0.02413657, -0.016039861, 0.021916956, -0.007761673, 0.016221339, 0.016709933, 0.0092763165, -0.0026558603, -0.020772249, -0.041851614, -0.03738446, 0.017310206, 0.016346978, -0.012103185, -0.03127005, 0.037859097, -0.018552633, 0.02416449, -0.0321914, -0.01249406, -0.0074056974, -0.0027326394, 0.019822977, 0.025588393, -0.0011054451, -0.025602354, -0.0036400293, 0.004732387, 0.023005823, 0.030544138, -0.027570691, -0.0052140015, 0.011956606, 0.0022894144, 0.013561988, 0.03864085, -0.010260485, -0.015481466, 0.0014919583, 0.035904717, 0.0052489014, -0.021665677, 0.011830968, 0.009450815, -0.0045020496, -0.02962279, 0.012689498, -0.01784068, -0.0048754755, 0.0076430147, -0.0053152107, -0.015509387, -0.008299127, 0.0058596446, 0.011049217, 0.023955092, 0.004386881, 0.036239754, 0.017352086, -0.025714032, -0.010037128, -0.04372223, 4.986282E-4, 0.010574582, 0.012982654, 0.01698913, -0.0064948173, -0.017966319, 0.019976536, -0.026453905, 0.012773257, 0.0042682225, -0.006599516, -0.022768505, 0.0076430147, -0.0069973716, -0.0062016607, 0.002591296, -0.009199537, 0.0067216647, 0.012054325, 0.0178686, -0.0357372, 0.009199537, 1.09443E-4, 0.02677498, -0.0027849888, 5.326553E-4, -0.0047254073, -0.012152044, 0.015830463, -0.010414043, 0.02068849, -0.0142460205, 0.07454557, -0.0027256594, 0.012026406, 1.6413722E-4, -0.0025214967, 0.02410865, 0.018957468, -0.0010836329, -0.0060376325, -0.024583286, 0.023578176, -0.025281277, 8.013823E-4, -0.009367055, 0.0066030063, -0.002786734, -0.03369906, 0.012047345, 8.6987275E-4, -0.025420876, -0.020674529, 0.038138293, -0.004732387, -0.03235892, -0.013024534, 0.014448439, 0.0047463467, -0.015760664, -0.017631283, -0.012319562, 0.022084473, 0.0030729107, -0.0214842, -0.011363313, 0.0040588244, -0.010337264, -0.014050582, -0.016249258, 0.0024865973, 0.012968695, -0.023955092, 0.057570398, -0.02765445, -0.016472615, -0.004648628, -0.015425627, 0.005454809, -0.021218963, -0.04106986 ], + "content" : "{id=1, firstName=James, lastName=Carter, specialties=[], nrOfSpecialties=0}", + "id" : "bbd55214-ec00-4462-b823-12df3cfc7bc2", + "metadata" : { }, + "media" : [ ] + }, + "3ec826e4-16a1-4e88-a593-08e4ad27eb44" : { + "embedding" : [ 0.009338349, 0.03250018, 0.017817842, -0.016427314, -0.031000592, 0.031273246, 8.2733E-4, -0.0050645205, -0.003329769, -0.026829008, 0.014423318, 0.0036433195, -0.010769775, -0.012242098, -0.0034933605, 0.008077331, 0.031436834, -0.040679757, 0.0032104836, -0.015282174, -0.031491365, 0.009985899, -0.0029071576, 0.0042295223, -0.015214011, 0.016331887, -0.0046691746, -0.0064039263, -0.014573278, -0.013987075, 0.037871435, -0.01593654, -0.014491482, -0.0378987, -0.02730615, -0.004781644, -0.009733696, 0.0017117467, 0.017845107, -0.004352216, 0.006502763, -0.0132304635, 0.017149843, -0.01375532, -0.0062369267, 0.0231482, 0.0053099077, -0.020898815, -0.0073888833, -0.0022101896, -0.0018966391, 0.04515126, -0.020857919, 1.9927065E-4, 0.010517571, -0.0038035028, 0.025193093, 0.004549889, 0.0061755795, -0.0017279354, 0.02564297, 0.007900107, -0.015541194, -0.00757974, -0.013025975, -9.167941E-4, 0.010122225, 0.01209214, 0.001197967, 0.020462573, 0.016522743, -0.0035138095, 0.0022357507, -0.0037251152, 0.027156191, -0.0094814915, -0.007163945, -0.0047305212, 0.025533909, -0.006393702, 0.011601365, -0.034844995, -0.026106479, 0.02865578, 0.021730406, 0.018540371, -0.0049281945, 0.020748857, -0.015214011, -0.0058143153, 0.0065266197, 0.015841112, 0.007668352, -0.020258082, 0.0027571986, 0.019699145, -0.015459398, 0.021007877, 0.0067004357, -0.025043134, -0.029882716, 0.027169824, -0.0089975335, -0.0024521686, -0.008636269, -0.0072389245, 0.0040386654, 0.0048600314, 0.02061253, 0.0026208723, -0.015309439, 0.021812202, 0.010169939, -0.004965684, -0.01603197, -0.012998709, 0.0012840229, -0.01759972, 0.0037966864, -0.014300625, 0.001089758, 0.052267488, 0.0015498592, -0.03427242, 0.03233659, 0.020476205, -0.0044715013, -0.015541194, -0.0020465981, -0.010197205, 0.0469235, 0.022316609, -0.002222118, 0.005476908, -0.008820309, 0.010715244, -0.010142674, 0.011437774, -0.022234814, -0.018226821, 0.02044894, 0.020408042, -0.016945355, 0.0030758614, 0.012542016, 0.012194384, 0.01894935, 0.004982725, 0.004662358, -0.0072730063, 0.0029020454, -0.009536022, -0.013891647, 1.4218403E-4, -0.026965335, -8.5885543E-4, 0.021662243, 0.012555649, 3.5652512E-5, -0.0052724183, -0.017886005, -0.008520392, -0.008022801, -0.043051835, -9.1935025E-4, 0.02464779, 0.021416856, 0.0023686688, -0.015145848, 0.008609003, -0.019835472, 0.03206394, -0.020585265, 9.0049885E-5, 0.010054062, 0.010067695, -0.0018778943, -0.008581738, -0.01588201, -0.019467391, -0.006117641, 0.0013189566, 0.019003881, 0.039371025, -0.004352216, 0.013455402, -0.0059881313, -0.02138959, 0.0073207202, 0.009904103, 0.004287461, 0.019549185, 0.0036944416, 0.0064516403, -0.64040625, -0.015418501, 0.008070515, -0.027292518, 0.032827362, 0.019903634, 0.004065931, -0.0107765915, -0.00523152, 0.004675991, -0.019617349, 0.039207432, 0.02808321, 6.97394E-4, -0.015650256, -0.019453758, 0.016386418, -0.010067695, -7.293455E-4, 0.003633095, -0.013189566, 0.016699968, -0.017995067, 0.010824305, -1.2940344E-4, 0.0036433195, -0.0081863925, -0.01769515, 0.014573278, -0.0022953935, -0.022643792, 0.012753322, 0.0031678816, -0.011246917, 0.03525397, 0.0055348463, -0.00696968, 0.017899638, 0.021130571, 0.009870022, -0.018513106, 0.0016052418, 0.03939829, -0.005183806, -0.014600542, 0.0069935373, 0.0028986372, 0.018022332, -0.010217654, -0.0061789877, 0.011233284, -0.009876838, -0.007443414, -0.008152311, 0.023625342, -0.04152498, 0.014941358, -0.012644261, 0.014109768, -0.007123047, -0.003527442, 0.010483489, -0.022752853, 0.0012439771, 0.017626986, 0.027592435, -0.0074161487, 0.0037182989, -0.0039330125, -0.017776944, 0.017354334, 0.030973326, -0.0019256085, 0.018499473, 0.01484593, 0.005599601, 0.029310146, 0.011580916, 9.281901E-5, -4.2154637E-4, 0.016577274, -0.01957645, -0.012610179, -0.0029139738, -3.614776E-4, 0.010047246, -0.01806323, -0.006093784, 0.00861582, -0.004832766, 0.021130571, 0.0084181465, 0.020885183, -0.014259727, 0.006864027, 0.013353158, -0.01375532, 0.01227618, 0.0036262786, -0.029010229, -0.023707137, 0.0034677994, 0.01074251, -0.011424141, 0.011103774, 0.0066118236, 0.0049725003, -0.007647903, 0.012944179, -0.024525095, -0.02860125, 0.0069594556, -0.01578658, -0.007866025, -0.033454467, -0.029419208, -0.01209214, -0.006029029, -0.03026443, -0.00549054, 0.011935364, 0.018567637, 0.030237164, -0.02226208, 0.017340701, -0.016781762, -0.0113559775, 0.004502175, -0.015813846, -0.015445766, 0.017722415, 0.020544367, 0.0080500655, -0.015091318, -0.0021164652, -0.036617234, -3.3357332E-4, 0.0067413338, 0.022043956, -0.030482553, 0.014614175, -0.010728877, 0.0016640325, 0.0011817783, -0.019194737, 0.002007404, -0.02606558, 0.0011212835, -0.013244096, 0.0097132465, 7.7833777E-4, -0.02138959, -0.011137855, 0.013605361, 0.030837001, -0.0059029274, 0.003023035, -0.00900435, -0.014505114, -0.01785874, -0.010878836, -8.7930437E-4, -0.026638152, -0.015064052, 0.012317078, -0.020053593, -0.03170949, 0.0062778243, -0.013073688, -0.032800097, 0.0052792346, -0.004791868, 0.007927372, -0.02590199, 0.012630628, 0.0077365153, -0.012317078, 0.023993421, 0.01774968, -0.008704432, -0.038607597, 0.010517571, 0.006530028, 0.021062408, 0.009781409, 0.009951817, 0.0070208027, 0.02050347, -0.018663066, 0.025247624, -0.014805032, 0.033154547, -0.004904337, -0.0036808092, 0.0019869553, -0.009720063, -0.009304267, 0.0089975335, -0.0037182989, 0.013537198, -0.0075865565, 0.0072798226, 0.024579626, 0.014096135, 0.018813023, -0.020176288, -0.0023175464, -0.009249737, 0.0075388425, -0.008983901, -1.4079947E-4, -0.018622167, 0.017517924, -0.00696968, 0.021989426, 0.026379133, -0.0047782357, -0.010708428, -0.021035142, 0.013319076, 0.027905986, 0.009808674, 0.014914094, 0.0041784, -0.022084855, -0.002351628, 0.025765663, -5.2954233E-4, 0.014150666, -0.019072045, -0.00848631, 0.031327777, -0.0037046662, 0.0010999825, 0.0051360917, 0.020080859, 0.014246094, -0.034354217, 0.014505114, -0.024375135, -0.0052621937, 0.02963733, 0.04722342, -0.016645437, -0.010040429, -0.010272183, 0.011833119, 0.020994244, -0.0043658484, 0.03192761, -0.008131862, -0.011335528, 0.003242861, -0.0034575749, 0.008902105, 0.007668352, -0.0027043722, 0.031409573, 0.026692683, 0.015404868, 0.015254909, -0.0039091557, 0.035799276, -0.0051224595, 0.024688685, 0.022193916, -0.028982963, -0.020639796, 0.011001529, -0.016209193, 0.004744154, -0.0062846406, -0.010129041, 3.6169062E-4, -0.018799393, 0.0040625227, -0.008745329, 0.019644614, 0.025302155, 0.025915623, 0.003980727, -0.030400757, 0.0073207202, 0.014368788, -0.0027554946, -0.021948528, -0.010872019, 0.020667061, -0.0021931487, 0.017163476, 0.015909275, 0.021498652, 5.125015E-4, -0.013373607, -0.013823483, 0.020462573, 0.014941358, -0.0057938662, -0.011137855, 0.011635447, -0.007286639, -0.008200024, -0.022534732, -0.007872841, 0.035553887, -0.00436244, -0.011540018, -0.016113764, 0.0093179, -0.022643792, -0.0017108946, -0.0068469867, -0.025261257, -0.0046862154, 0.012112589, -0.016904457, -0.0065436605, 4.639353E-4, 0.0031746977, -0.027756028, -0.0076751686, -0.031409573, -0.0076956176, 0.023448117, 0.015145848, 0.025452113, -0.0061926204, 0.007981903, -0.0011809262, 0.0042090733, 0.0017892822, -0.004416971, 0.002109649, -0.019617349, 0.020489838, 0.0030417799, 0.045969214, 0.0021846283, 0.0074843117, 0.011069693, 0.009972266, -0.0024300157, -0.012964628, -0.024879543, -4.6223123E-4, -0.024838645, 0.040461633, 0.018022332, 0.019112943, 0.0032905752, -0.007927372, -0.021498652, -0.0111242235, -0.023011873, -0.008234106, 0.015582092, 0.016890824, 0.011567283, -0.02372077, 0.031545896, 0.015214011, -0.011642263, 0.021253264, -0.011219651, 0.01432789, 0.029446473, 0.013748503, -6.8716955E-4, 0.01650911, -0.0012746506, 0.014886828, -0.005855213, 0.038171355, 0.0115877325, 0.009665532, -0.0040931962, -0.00335533, -0.004727113, 0.04842309, 0.012705607, 7.40848E-4, -0.0154730305, -0.04553297, 2.4474825E-4, -0.011799038, -0.009781409, 0.0019341288, -0.021689508, -0.010844754, -0.019317431, -0.025574807, 0.01085157, -0.034681402, -0.018554004, -0.004113645, -0.0100813275, -0.025574807, 0.020435307, 0.027060764, -0.011921732, 0.018417679, 0.010715244, 0.027456108, 0.032363854, -0.011512753, -0.02018992, 0.0059336005, 0.0036399113, -0.009883654, -0.015841112, -8.1753155E-4, -0.013721238, 0.007286639, 0.038007762, 0.010974264, -0.0076956176, -0.012548832, -0.025397582, 0.008813493, 0.026120111, 0.032036673, 0.008118229, -0.024893176, -0.01817229, 0.016849926, -0.0076751686, -0.02756517, 0.007463863, -0.009413328, -0.0025424848, 0.008943003, -0.004675991, -0.017245272, -0.002484546, 0.01432789, -0.040816084, 0.030237164, 0.0014893644, -0.009092961, -0.0056439075, -0.015745683, 0.0053610303, 0.0012303445, -0.021048775, 0.019072045, -0.01066753, 0.025411215, -0.014682339, -0.018390413, -0.011144672, -0.008009168, -0.0071503124, 0.0029224942, -0.017790576, -0.009167941, 0.0105243875, -0.010572102, -8.554473E-4, -0.017667884, 0.014886828, -0.01593654, 0.008806677, -0.003997768, -0.04027078, 0.0044715013, 5.0611125E-4, 0.0066868034, -0.0076956176, -4.639353E-4, -0.024225177, -0.017272538, -0.005892703, -0.004219298, 0.030837001, -0.017422497, 0.024743216, -0.025070399, 0.0014135329, 0.0040216246, -0.028328598, -0.008125045, -0.0046248683, 0.007770597, 0.024047952, 0.043160893, -0.027687864, 0.012432955, 0.01967188, -0.0032309324, 0.02423881, -0.0053814794, -0.006308498, -0.024593258, 0.021634977, 0.021880366, 0.0035172175, 0.032881893, 0.0030162185, -0.032936424, 0.035799276, -0.016004704, 0.0078114946, -0.014655073, -0.03841674, -0.014805032, -0.005770009, 8.248804E-5, 0.016018337, -0.008677167, 0.010858387, 0.019780941, 0.014600542, -0.014982256, -0.0134826675, 0.019849103, -0.014723237, 0.020653429, -0.023993421, 0.004935011, -0.0024214953, -0.018935718, 0.007866025, -0.02605195, -0.029310146, -0.009815491, 0.007681985, 0.014423318, -0.0077160667, -0.017054416, 0.0018557413, -0.014273359, -2.7030942E-4, -0.0076274546, -0.030618878, 0.001980139, 8.750442E-4, -0.025738398, -0.0011494008, 3.6977167E-6, 0.0027589027, -0.016836293, 0.015404868, -0.011717242, -0.025683869, -0.010285816, -0.028274067, 0.019290166, 0.0066288644, 0.033972505, 0.024906809, -0.0086908, -0.03072794, 0.010960631, 0.012596547, -0.011383243, 0.011165121, 0.02361171, -0.0011579212, -0.028928433, 0.024375135, 0.015145848, 0.0013232168, -0.047059827, 0.014518747, -0.008772595, 0.011805855, -0.014300625, 0.011219651, -0.03206394, 0.02813774, 0.0033774832, -0.0038000946, -0.0039500534, -0.004481726, -0.02616101, -0.004594195, -0.007831944, 0.054830424, -0.011662711, 0.019740043, 3.9960636E-4, -0.013952993, -0.015595725, 0.0152412765, -0.0017160068, 0.0276197, 0.005705254, 0.014246094, -0.0021437304, 0.035935603, 0.007075333, 0.025152195, 0.005425785, 0.032718305, -0.0014322778, 0.001047156, 0.017054416, -0.0049793166, 0.0031320958, 0.012426139, -0.019249268, 0.028873902, -0.022589263, -1.1515842E-5, 0.021975793, 0.0068197213, 0.015595725, 0.0010352276, -0.013100954, -0.013155485, -0.0027060763, 0.0043010935, 0.0012473853, -0.013305443, -0.012126221, -0.01573205, -0.0069287824, 0.012473853, 0.011233284, 0.0069594556, 0.022125753, 0.008936186, -0.022643792, 0.008056882, -0.04340628, -0.004359032, -0.042452, 6.143202E-4, 0.01310777, -0.0074843117, 0.011519569, -0.014123401, -0.021157837, 7.0591446E-4, 0.026774477, -0.020353511, -0.010497122, -0.013353158, 0.018826656, -0.019958165, 0.016222825, -0.013612177, -0.021307794, 0.034381483, -8.2647795E-4, -0.0045158076, -7.663027E-5, -0.012371608, 0.0041613593, -0.010142674, 0.016004704, 0.018104129, -0.018049598, -0.01126055, 0.0064516403, 0.037489723, -0.0060767434, 0.0056098257, -0.016059233, -0.010388061, -0.01593654, 0.027210722, -0.0045805625, -0.023243628, 0.023707137, 0.015582092, 0.002614056, 0.027524272, -0.013407688, -0.037680577, -0.0225211, -0.0034439422, -0.008677167, -0.0070412513, -1.6071588E-4, 0.022807384, 0.02061253, -0.0054939482, -0.009815491, 0.007668352, -0.018417679, -0.005698438, -0.017013518, 0.025738398, 0.019999063, 0.018826656, 4.180317E-5, -0.0074843117, 0.02133506, 0.0026617702, -0.035853807, -0.011874017, 0.010033613, 4.724557E-4, 0.035308503, 0.018813023, -0.032118466, -3.7724033E-4, -0.0035240338, -0.011342345, 0.017313436, 0.006465273, -0.042533793, -0.019644614, 0.008234106, -0.014900461, -0.008602187, -0.001479992, 0.015186746, -0.02164861, 0.016263723, 0.008711249, 0.010803856, 0.0097132465, 0.01175814, 0.019999063, -0.0028185456, 0.01754519, -0.016522743, -0.005923376, -0.017831475, -0.02242567, 0.018649433, 2.809599E-4, 0.020108124, 0.019699145, 0.0041988487, 0.011540018, 0.0097132465, 0.0065811505, 0.01164908, -0.015650256, 0.005899519, -0.0024231994, 0.010442591, -0.027919618, 1.0959354E-4, -0.017313436, 0.015841112, -0.02606558, 0.0075183935, -0.015268542, 0.0073616183, -0.013053239, -0.046541788, -0.011280999, 0.004393114, -5.904631E-4, -0.016809028, -0.021266896, -0.0019937716, -0.024974972, -0.008977084, 0.0062164776, -0.0086499015, -0.025629338, 0.030700674, 0.007613822, 7.553327E-4, 0.010681163, 0.20165381, -0.012991893, -0.013843932, 0.032663774, -0.014164299, 0.017245272, 0.01053802, -0.0116081815, -0.015827479, 0.007722883, -0.006881068, 0.0025782704, 0.015323072, -0.002719709, 0.034735933, -0.021457754, -0.025452113, -0.009679165, -0.019399228, -0.02710166, 3.6829393E-4, 0.011839936, 0.0042567877, -0.018962983, 0.008125045, -0.016904457, 0.013741687, 0.011376427, 0.01625009, 0.030428022, 0.0133667905, -0.022439303, -0.0058313557, -2.60937E-4, -0.006032437, -0.034326952, -0.008465861, 0.004883888, 0.026597254, -0.0029327187, 0.0097132465, -0.02605195, -0.0058858865, -0.023216363, 0.009086145, 0.024170646, -0.020121757, -0.0067720073, -0.0029787289, 0.046187337, -0.03489952, 0.0048259497, 0.038389474, 0.0024436482, 0.012187568, 0.0025850867, 0.01022447, -0.0058483966, -0.0026702906, 0.038171355, -0.010933367, 0.032091204, 0.015282174, 0.022221182, 0.006485722, 0.005159949, -0.012548832, -0.004065931, 0.01691809, -0.010715244, 0.015541194, -0.010613, 0.0048395824, 0.025942888, -0.030073574, -0.023584444, 0.008465861, 0.0025867908, -0.026133744, 0.013816667, -0.024416033, -0.015500296, 0.013503117, -0.013319076, -0.036317315, -0.04127959, 0.008452228, 0.018867554, -0.006622048, -0.0074365977, -0.003960278, -0.015091318, -0.01188765, -0.0012601659, 0.02558844, 0.0314641, -0.008547656, 0.028165005, 0.0023874138, 0.0024726177, -0.038007762, 0.050222594, 0.018758494, -8.6322216E-5, -0.030591613, -0.0022255261, 0.008629452, 0.018540371, 0.022589263, 5.7342235E-4, -0.008915737, -0.023652606, -0.0085340245, -0.0167136, -0.022480201, 0.023802565, 0.0046316846, -0.021321427, 0.008554473, -0.019590084, 0.019944532, -0.0041647675, 0.02117147, -0.0012576098, -0.015036787, -0.0052349283, -0.031382307, 0.005551887, 0.033345405, -0.0404889, 0.0045601134, -0.019740043, -0.015282174, 0.008472677, -0.008424963, -0.003224116, -0.013428137, -0.024784114, -0.015254909, 0.007198027, 0.042806447, -0.009297451, -0.013455402, -0.011069693, -0.009454226, -0.025165828, -0.0018029148, 0.009426961, 0.0063834772, 0.013346341, -0.010217654, -0.01785874, -0.011321896, -0.0022050773, 0.0045771543, -0.017299803, -0.0024709136, -0.05117688, 0.0067345174, -0.0119558135, -0.043624405, -0.0024555768, 0.015173113, -0.0070889657, -0.031627692, -0.015077685, -0.17471574, 0.030291695, 0.020367144, -0.021048775, -0.00924292, -0.0029003413, 0.02403432, -0.013250913, 0.028982963, 0.004662358, 0.022398405, 0.008745329, -0.034954052, -0.01164908, -0.011948997, 0.01113104, -0.007491128, 0.0059370087, 0.038689394, 0.020108124, 0.022875547, -0.0218531, 0.008595371, -0.008070515, 0.006761783, 0.0065845586, 0.025738398, -9.474675E-4, -0.004764603, 0.0016785171, 0.008029616, -0.005354214, 0.02081702, -0.014491482, -0.00174242, -0.0150095215, -0.0015004409, -0.01728617, -0.019740043, 0.0244024, 0.0036910335, 0.019085677, -5.21874E-4, 0.011478671, 0.012446588, 0.0029259024, 0.02652909, -0.012780587, 0.026638152, -0.013932544, 0.04100694, -0.053494427, 0.0064516403, 0.013441769, -7.1060064E-4, 0.015295806, 7.932484E-4, 0.0146414405, -0.006393702, -0.0068265377, -0.016727233, -0.042860977, 0.0015106654, 0.0055041728, -0.018826656, -0.012753322, -0.0042840526, 0.004614644, -0.06385522, -7.114527E-4, -0.021280529, 0.0063391714, -0.004444236, 0.011424141, 0.008322719, 0.026297336, -0.008002352, 0.033481732, 0.0101767555, 0.006380069, -0.0065981913, 0.02917382, 0.0023840056, 6.509579E-4, -0.015541194, 0.013912095, -0.008540841, -0.0013334412, 0.029419208, -0.01505042, 0.020285347, -0.07279822, 0.0016137621, 0.005224704, -0.0044953586, 0.00665613, -0.014232462, 0.0037080743, 0.0014390941, -0.010803856, 4.528588E-4, -0.02205759, -0.017517924, 0.014096135, 0.008670351, 0.012705607, 0.0042363387, 0.042833712, 0.04163404, -8.8026296E-5, 0.02969186, 0.008275004, 0.0029003413, 0.022970974, -0.0047168885, 0.029964512, -0.019385595, -0.010163123, 0.018104129, -0.009283818, 0.028410394, -0.014246094, -0.015854744, -0.0045567052, 0.023407219, 0.018308617, -0.08424963, -0.018226821, 0.02756517, 0.021757672, -0.026229173, 0.036044665, -0.022793751, 0.0072389245, -0.046514522, 0.033481732, -0.025288522, -0.025997419, 0.0074774954, -0.0057325196, 0.022412037, 0.010381245, -0.03274557, 0.001065049, -0.0034763196, 0.024197912, -0.023543546, -0.012507935, 0.011826303, 0.0068435785, -0.008145494, 0.010974264, -0.01593654, 0.026447294, 0.014355156, 0.0016060938, 0.0027554946, -0.019126575, 0.019003881, -0.009092961, -0.015282174, -0.0054973564, -0.013659892, 0.008581738, 0.03427242, -0.0076751686, 0.009583736, 7.983607E-4, 0.013319076, -0.024770482, -0.012876015, 0.0058483966, -0.019385595, 0.042642854, 0.018444944, -0.033618055, -0.009433777, 0.016154662, -0.024661422, -0.0031167592, 0.016018337, 0.013162301, 0.017068049, 0.01484593, -0.016481845, -0.007313904, -0.008854391, 0.0060562943, -0.00584158, 0.046487257, 0.014464216, 0.014096135, -0.016645437, -0.0146414405, -0.003287167, 3.4443682E-4, -3.7511022E-4, -0.0015081093, -0.013387239, 4.6776948E-4, -0.0059063355, 0.005507581, -0.021307794, -0.031136919, 0.0053951116, -0.04037984, 0.005071337, -0.0045294403, 0.0022255261, -0.009270186, 0.040161718, 0.014109768, -0.0077433316, -0.0045976033, 0.0044749095, -0.023407219, -0.0055348463, 0.005531438, 0.020258082, -0.026774477, -0.0069083334, 0.021512285, 0.005630275, -0.00983594, 0.0015319664, 0.007034435, -0.019903634, 2.6200202E-4, -0.06036527, 0.02813774, -0.008656718, -0.012133038, 0.0052144798, -0.010674346, 0.008145494, 3.0119583E-4, 0.03331814, 0.004113645, -0.026597254, 0.0065232115, -0.019072045, -0.002743566, -0.01817229, -0.036862623, 0.023816198, 0.006400518, 0.012991893, 0.009679165, 0.009215656, 0.0041034203, 0.013475851, 0.016372785, 0.0055689276, -0.0040625227, -0.008213657, 0.015118582, -0.029310146, -0.003070749, 0.022630159, -0.03364532, 0.006591375, 0.034326952, -0.012398873, -0.036808092, -0.005630275, 0.012753322, 0.002700964, 0.011492304, -0.03972547, -0.04935011, -0.009270186, 0.004243155, -0.0059574577, 0.012467037, -0.014777767, 0.024538727, -0.014668706, 0.023243628, 0.027278885, 0.0016282469, -0.0244024, -0.021375958, -0.053030916, -0.04272465, 0.027524272, 0.013046423, -0.0026004235, -0.014450584, 0.04095241, -0.021307794, 0.015663888, -0.023897994, -0.010319898, -0.017177109, 0.0026924438, 0.0032888711, 0.009154309, -0.012930546, -0.0385258, -0.006986721, 6.0366973E-4, 0.0044919504, 0.02911929, -0.021907631, -0.010565286, -0.011110591, -1.1598383E-4, 0.018744862, 0.038389474, -0.0097132465, -0.0033894116, 0.010681163, 0.027019866, 0.008479494, -0.016931722, 0.010674346, 0.02590199, 0.0030520041, -0.017776944, 0.024361502, -0.015922908, -0.0060188044, -0.0016163182, -0.0139461765, -0.0069321906, -0.03560842, 0.011635447, -7.089232E-6, 0.015568459, 0.007532026, 0.021198735, -0.0054360097, -0.04531485, -0.011846752, -0.03928923, -0.019331064, 0.012398873, 0.024511462, 0.015650256, -0.0023379955, -0.0078387605, 0.016372785, -0.015800213, 0.011874017, -0.002085792, -0.021471387, -0.022861915, -0.0041238694, -0.011689977, 0.011219651, 0.012351159, -0.001480844, -4.285757E-4, 0.004001176, 0.015309439, -0.02776966, 0.011526385, -0.005630275, 0.011874017, -0.0037966864, -0.02123963, 0.0013590024, -0.012739689, -0.017422497, -0.010885652, 0.009979082, -0.034790464, 0.076070055, -0.01227618, -0.008152311, 0.019767309, -0.0060597025, 0.02963733, 0.009501941, 0.009515573, -0.013591728, -0.018935718, 0.038389474, -0.03945282, 0.0039261966, -0.015868377, 0.010974264, -0.0052553774, -0.030373491, 0.00900435, 0.013441769, -0.036235522, -0.011853568, 0.030209899, -0.024334239, -0.027169824, 0.008574922, 0.023788933, 0.012528383, -0.010381245, -0.011021978, -0.03446328, 0.01702715, 0.011540018, -0.025520276, -0.01889482, 0.003786462, -0.0070480676, -0.010946999, -0.016222825, -0.004396522, 0.009658716, -0.011458223, 0.052403815, -0.029473739, -0.02667905, -0.009904103, 0.0032633098, -0.0039534615, -0.022207549, -0.039180167 ], + "content" : "{id=3, firstName=Linda, lastName=Douglas, specialties=[{id=3, name=dentistry}, {id=2, name=surgery}], nrOfSpecialties=2}", + "id" : "3ec826e4-16a1-4e88-a593-08e4ad27eb44", + "metadata" : { }, + "media" : [ ] + }, + "694664cd-5f19-4b9e-a0da-7c9b8173b41c" : { + "embedding" : [ 0.0072430703, 0.018030323, 0.003811402, -0.016764542, -0.021279156, 0.027298639, -0.0071903295, -0.013009398, -0.015259672, -0.03223518, 0.013825122, 0.015048709, -0.002169405, -3.131485E-4, 0.0036320833, 0.02085723, 0.032628976, -0.032122664, 0.0059948713, -0.027847143, -0.026707942, 0.018972624, -0.0021887433, 0.0139517, -0.0072782305, 3.7358067E-4, -0.016061332, -0.023613814, -0.009760564, -0.016581709, 0.022713706, -0.007362616, -0.012327284, -0.043233395, -0.029703619, 0.012278059, -0.016384808, -0.005597557, 0.02603286, 0.0036988882, 0.006255059, -0.0028726156, 0.008002537, -0.0054323026, 5.590525E-4, 0.022066751, 0.0029200823, -0.018466312, -0.012397605, 0.0098449495, -0.002232694, 0.030519344, -0.02146199, 0.009690244, 0.0038430465, -0.0079744095, 0.017608397, 0.0107731875, 0.007826735, -0.007221974, 0.023487236, 0.015611278, -0.03023806, -0.007840799, -0.013466485, -0.013501645, -0.010611449, 0.0020920518, -0.014472076, 0.016005075, 0.018086579, 0.009043289, -0.019366423, -0.01905701, 0.024246706, -0.0066734697, -0.011708458, 0.0015444265, 0.005843681, -0.011012279, 0.018381927, -0.03428855, -0.029141052, 0.015414379, 0.019366423, 0.015400314, -0.0031064332, 0.021546375, -0.013578999, -0.0040926863, 0.01074506, 0.025835961, 0.01689112, -0.01418376, 0.014373627, 0.00777751, -0.027340831, 0.02720019, 3.480893E-4, -0.034204166, -0.01368448, 0.021068193, -0.016680157, -0.0041841036, -0.005636234, -0.0031802703, -0.0140853105, 0.0072430703, 0.023388788, 0.008930776, -0.01939455, 0.011251371, 0.017580267, -0.014725232, -0.0024805758, -0.0035670362, 0.002303015, -0.009141739, -0.007890024, -0.028029978, 0.01805845, 0.04992796, 0.0031679643, -0.03206641, 0.026271952, 0.019436743, -0.0057592955, -0.018381927, -0.0014952017, -0.0065363436, 0.03741081, 0.0041383947, 0.011272468, 0.015329993, -0.017524011, 0.0136211915, -0.015864434, 1.1778779E-4, -0.01064661, -0.026046924, 0.023571622, 0.023276273, 6.412403E-4, -0.004296617, -0.0016551822, 0.009514441, 0.010323133, 0.0036496634, -0.008318982, 0.0037235005, -0.006494151, -0.012334316, -0.009015162, -0.01001372, -0.011792843, -4.493956E-4, 0.011174018, 0.016201975, -0.0030536924, 0.002964033, -0.009458184, -0.0026686846, -0.0021817111, -0.03527305, 0.008417432, 0.025020236, 0.0010943717, 0.009802757, -0.008234597, 0.013740737, -0.008227565, 0.025174944, -0.015822241, 0.0076157716, 5.533389E-4, 0.030350573, -0.014106407, -0.011159954, -0.013564934, -0.019464873, -0.014127503, 0.019014817, 0.010077009, 0.032938387, -7.366132E-4, 0.009043289, 0.0096058585, -0.019830542, 0.011279499, 0.017228661, 0.016806735, 0.01608946, -6.9398107E-4, 0.007840799, -0.6368276, -0.022516806, 0.0095425695, -0.018438185, 0.018114708, 0.020618137, -0.003347283, 0.008663556, -0.0062867035, 0.014000925, -0.029141052, 0.039351672, 0.010449711, 0.014556461, -0.018381927, -0.014879938, 0.014240016, -0.0028849219, -0.004391551, 0.010527064, -0.003215431, 0.01788968, -0.02372633, 0.011152921, 0.0044583557, 0.007292295, -0.004479452, -0.019366423, 0.01779123, 0.0044126473, -0.030744372, 0.015273736, 0.004929507, -0.0117647145, 0.043767832, -0.008888584, -0.009971527, 0.01915546, 0.024077933, 0.0208291, -0.028592547, -0.0066734697, 0.024893658, 0.0027056031, -0.022812154, 0.011736587, -0.0040926863, 0.010618482, -0.0031433518, 0.002898986, 0.008382271, -0.011729554, -0.0062761554, -0.001709681, 0.016680157, -0.045455538, 0.008382271, -0.001254352, 0.013635255, 0.011307628, -3.551214E-4, 0.028522225, -0.008529945, -0.005727651, 0.012271027, 0.024837403, -0.016539516, -0.020139955, -0.0055623967, -0.019732092, 0.016328553, 0.0369045, -0.005263532, 0.006114417, 0.007686093, 0.003352557, 0.013361003, -0.005594041, 0.0065433756, 0.010175459, 0.020139955, -0.02766431, -1.5794772E-6, 0.0032769619, -0.015245608, 0.0033859594, -0.016637964, -0.01381809, 0.009753533, -0.015836304, 0.03020993, -0.006367573, 0.015780048, -5.6608464E-4, -0.013361003, 0.022769962, -0.0020604073, 0.011961614, -0.0014371868, -0.028114364, -0.02099787, -0.019436743, 0.014303305, -7.238675E-4, -0.0014213646, -0.006392185, 0.010653642, -0.001845928, 0.02860661, -0.031363197, -0.012200706, 0.01878979, -0.0053022085, -0.0076439003, -0.033754114, -0.02800185, 0.007447001, 0.006947722, -0.008972969, -0.024781145, 0.012770306, 0.02012589, 0.026103182, -0.019661771, 0.0052951765, -0.0010196555, -0.009866046, 0.013874347, 6.7596126E-4, -0.023557559, 0.026257887, 0.019282037, 0.016370745, -0.013058622, 0.017664652, -0.039070386, -0.015358121, 0.013564934, 0.022685576, -0.019535193, 0.014936195, -0.010829445, -0.010639578, -0.010653642, -0.011863165, 1.8283477E-4, -0.022840284, 0.010006689, -0.007369648, 0.004729092, 0.0045638373, -0.006620729, -0.0034808929, 0.02292467, 0.016637964, -0.016159782, 6.5310695E-4, -0.0109489905, -0.018902304, -2.3557559E-4, -0.0030501764, 0.011919421, -0.024007613, -0.01601914, 0.008951873, -0.007826735, -0.017636525, 0.0019971184, -0.011019312, -0.04295211, -0.0049576354, -0.014626782, 0.0018160417, -0.021138513, -0.013143008, -0.017664652, -0.015344057, 0.019563321, 0.024288898, -0.0033244286, -0.035048023, 0.011251371, -0.009219092, 0.016525451, 0.014598654, 0.006328896, 0.0016059574, 0.022812154, -0.018888239, 0.029534848, -0.03561059, 0.0043001333, -0.009106578, 0.0060405796, 0.0010767913, -0.012552311, -0.0064765704, 0.018831983, -0.0012024903, 0.030434959, -0.0026704427, 0.0075876433, 0.02486553, 0.012503087, 0.013368036, -0.023881035, 1.4580635E-4, -0.01611759, 0.0068633365, 0.002037553, -0.0065363436, -0.025990667, 0.010266876, 0.0025157363, 0.014486141, 0.006483603, -0.013726673, 0.0022801608, -0.022980925, -0.014837746, 0.028648803, 0.003285752, 0.011954581, 5.6168955E-4, -0.011138857, -0.005260016, 0.025512485, 0.0069266255, 0.019464873, -0.015414379, -0.0054780114, 0.036257543, -0.0040364293, -0.0032013666, 0.014169696, 0.012861724, 0.027453346, -0.04022365, 0.02406387, -0.017439626, -0.0051861787, 0.023374723, 0.028508162, -0.010970087, -0.003496715, -0.012538247, 0.012369476, 0.02990052, 0.008480721, 0.02800185, 0.012847659, -0.013712608, -9.2911714E-4, 0.005309241, 0.0155409565, -0.0057487474, -0.019239845, 0.023993548, 0.029056666, 0.021785468, 0.014697104, 0.010991183, 0.028395647, 9.1153686E-4, 0.010920862, 0.018635083, -0.020955678, 0.0043950668, 0.020111825, -0.01845225, 0.0015294832, -0.0072079096, -0.012650761, -2.5821017E-4, -0.018775726, -0.013100815, -4.992796E-4, 0.011785811, 0.03125068, 0.012791403, -0.010681771, -0.020379046, 0.0012991817, 0.02109632, 5.6828215E-4, -0.012271027, -0.015723791, 0.019746156, -0.012580439, 0.019844607, 0.020786908, 0.017509947, -0.009099547, -0.010576289, -0.0019496516, 0.019689899, 0.02462644, -0.0034052979, -0.019464873, 0.0018177996, 0.0028655836, -0.012432765, -0.007566547, -0.008318982, 0.014697104, -0.0049646674, -0.024907723, -0.021321349, -0.009071418, -0.02877538, -0.002964033, -0.01104744, -0.0015725549, -0.009113611, 0.018297542, -0.022179265, 5.3619817E-5, 0.007102428, -0.0017668168, -0.004996312, -0.007925184, -0.04042055, -0.025892219, 0.027059548, 0.015765984, 0.034654222, 0.0068633365, 0.01796, 0.0034545225, 5.357586E-4, -0.015751919, -0.003811402, 0.012587472, -0.02109632, 0.009155803, -0.004444292, 0.039464183, -0.007904088, -0.0059772907, -0.013452421, 0.0153159285, -0.0027056031, -0.016300423, -0.027523667, -0.0066805016, -0.039801724, 0.020941615, -1.6228785E-4, 0.019028882, 0.016328553, -0.0013070928, -0.025385907, -0.009472248, -0.013811058, -0.0036461474, 0.007028591, 0.011166986, -0.006771919, -0.0095425695, 0.029703619, 0.019760221, 0.0020815036, 0.01672235, -0.012833595, 0.015695663, 0.02012589, 0.015681598, -0.0033103644, 0.020843165, -0.0050982777, 0.021349477, 0.005643266, 0.021377604, -0.0063253804, 0.011124793, 0.0044337437, 0.007439969, 0.007833767, 0.035216793, 0.0265673, 8.5176394E-4, -0.0079744095, -0.043374036, 0.006219899, -0.01798813, -0.018086579, -0.007193845, -0.023135632, -0.022404293, -0.023543494, -0.017861553, 0.0033578312, -0.025751576, -0.023107503, 0.01221477, -0.0041172984, -0.024584247, 0.021743275, 0.024879595, -0.0027073612, 0.0039098514, 5.854229E-4, 0.02165889, 0.013557903, -0.014570526, -0.022854347, 0.020575944, -0.0019900862, -0.02059001, -0.013522741, -0.0058190683, -0.010555193, -0.0023557558, 0.03268523, 0.02836752, -0.00837524, 0.016103525, -0.016103525, 0.0098941745, 0.023051247, 0.024978044, 0.010513, -0.021869853, -0.0068246596, 0.017298983, -0.01942268, 0.0034756188, 0.015329993, 0.005861261, 0.009753533, -0.008558074, -0.0065433756, -0.027453346, -0.011497495, 0.012699985, -0.030856885, 0.026539171, -0.018114708, -0.005727651, -0.0055623967, -0.018902304, 0.0024032225, 0.0026440723, -0.006037064, 0.007432937, -0.004996312, 0.032263305, 7.062872E-4, 0.0021272122, -0.0018248317, -0.015273736, -0.017974066, -0.012186642, 8.8296895E-4, -0.021082256, 0.007028591, -0.021377604, -0.015484699, -0.022151137, 0.0034263942, -0.011427173, 0.020815037, 0.004806445, -0.036257543, -0.017116148, -0.01502058, 0.0037094364, 0.01755214, -0.0015540957, -0.023852907, -0.023023117, -0.009999656, -0.0011937001, 0.03577936, -0.027242383, 0.015344057, -0.013086751, 0.009683211, 0.006729726, -0.020941615, -0.022784026, 0.0067156623, 0.03434481, 0.018494442, 0.044105373, -0.0073415195, 0.008227565, 0.03201015, -0.0011690878, 0.017931873, -0.0018547182, -0.012362444, -0.019352358, 0.024542054, 0.034063525, 0.014036085, 0.03471048, 0.0110615045, -0.020421239, 0.02179953, -0.0074048084, -0.007890024, -0.011870196, -0.036454443, 0.0046341587, 0.0033367348, -0.022474613, 0.015667534, -0.003755145, 1.4723474E-4, 0.006237479, 0.003215431, -0.0076790606, -0.0060229995, 0.022980925, -0.013614159, 0.012861724, -0.02022434, -0.0053619817, 0.0012209496, -0.022319907, 9.677937E-4, -0.02333253, -0.01672235, -0.001837138, 0.012777339, 0.019408615, -0.012953141, -0.014247049, 0.002034037, -0.017298983, 0.0018722984, -0.010498935, -0.014204856, 0.0057663275, -0.016047267, -0.016961442, 0.011722522, -0.0048486376, 0.014373627, -0.029000409, 0.01341726, -0.012193673, -0.041095633, -0.0029200823, -0.025217136, 0.025582805, 0.012594503, 0.028339392, 0.015639406, -0.0028392132, -0.028339392, 0.0113005955, 0.0042931014, -0.010808349, 0.028100299, 0.02039311, 0.01601914, -0.030153675, 0.012158513, 0.0030466605, -0.018410057, -0.037720222, 0.0041102665, -0.0034316683, 0.011870196, -0.03254459, 0.007432937, -0.039351672, 0.02229178, 0.006265607, -0.007700157, -0.01301643, -0.015864434, -0.023937292, 0.008382271, -0.022052687, 0.05996981, -0.0148518095, -0.014978387, 0.0038289821, -0.011230275, -0.0044478076, 0.0072149416, -7.8056386E-4, 0.023852907, 0.009268317, 0.017397434, 0.008466656, 0.026876712, 2.9073367E-4, 0.017228661, 0.004082138, 0.0254281, 0.002176437, -0.0031380777, 0.026440723, 0.0076157716, 0.0046974476, 0.012819531, -0.015751919, 0.008649492, -0.0075454507, 0.0063464767, 0.02129322, 0.004732608, 0.014415819, -0.0236982, -0.018142836, -0.011265435, -0.0049048946, -0.00890968, -0.001714076, -0.030688114, -0.010182491, -0.015470635, -0.004542741, 0.0020129406, 0.019352358, -0.0012464409, 0.026609493, 0.016103525, -0.014345498, 0.00408917, -0.038029633, -0.014992452, -0.040729962, -0.0054428508, 0.016412938, 0.0014029053, 0.015456571, -0.026271952, -0.033247802, -0.010871638, 0.025835961, -0.0013273102, -0.0118772285, 0.0010882185, 0.020449366, 0.0051685986, 0.010351261, -0.011195114, -0.0037656932, 0.021279156, -0.031335067, -0.012685921, -0.014668975, -0.012320251, 0.0021096321, 0.0012903917, 0.015287801, 0.03707327, -0.021588568, -0.010520032, 0.019619578, 0.028494097, -0.023937292, -0.0053127566, -0.022587128, -0.018916368, -0.015695663, 0.020182148, -0.0014389448, -0.02109632, 0.005734683, 0.01278437, 0.011511559, 0.04343029, -0.008839359, -0.025357777, -0.03794525, -0.0024084966, -0.024274834, -0.008234597, 0.015962882, 0.024007613, 0.029703619, -0.007932217, -0.009197996, -0.014486141, -0.011455302, 0.010372357, -0.014155631, 0.028733188, 0.017200533, 0.024302961, 0.0029886453, -0.010407519, 0.029478593, -0.0010926137, -0.02149012, -0.006638309, 3.3314608E-4, 0.020843165, 0.03490738, 0.0034668287, -0.03510428, 0.0059667425, 0.021672953, -0.0022467582, 0.014683039, -0.0018846047, -0.04115189, -0.021644825, 0.008002537, -0.010878669, -0.006501183, -0.0030853369, 0.035160534, -0.020336853, -0.004015333, 0.0103090685, -0.006757855, 0.001254352, 0.012798435, 0.004725576, -0.0037129524, -0.0087901335, -0.014345498, -0.016061332, -0.019872734, -0.018086579, 0.040673707, 0.016806735, 0.0041172984, 0.018494442, -0.004131363, 0.008431496, 0.0130937835, 0.012587472, 0.0015962883, -0.009022193, -0.0060968366, -0.004535709, 0.011792843, -0.027073612, 5.744352E-4, -0.023543494, 0.004598998, -0.02496398, -0.0052494677, -0.011328724, 0.0105340965, -0.010119202, -0.036623213, -0.0042438763, 0.0036215351, -0.005108826, 0.0064765704, -0.028198749, -0.01932423, -0.0146127185, -0.0046939314, -0.010280941, -0.015456571, -0.020336853, 0.017495882, 0.010182491, 0.002953485, 0.019971184, 0.2240148, -0.013199265, -0.012594503, 0.019000754, -0.01538625, -0.00249464, 0.021068193, -0.013536806, 0.0038852391, 0.020843165, -0.001714076, -0.0010433889, 0.009676179, 0.002222146, 0.024809273, -0.017186468, -0.031588223, -0.014443948, -0.02493585, -0.02306531, 0.0056116213, 0.014654911, -9.92406E-4, -0.019802414, 0.019774284, -0.0042368444, -4.1994863E-4, 0.015161223, 0.030688114, 0.03217892, -0.004859186, -0.013705577, 0.0069793663, -0.004880282, 0.0011620556, -0.03490738, -0.0075946753, 0.0030079838, 0.039239157, -0.011778779, -0.017749038, -0.04618688, -0.0112373065, -0.01355087, 0.009155803, 0.023121567, -0.030969398, -0.014823682, 0.013937636, 0.02532965, -0.04039242, -0.0013668658, 0.042305157, 0.0027231835, 0.018185029, 0.0072711986, 0.01825535, -0.013227393, -0.011392013, 0.01725679, -0.002898986, 0.03544182, -0.0062620915, 0.016216038, 0.012390573, 0.024781145, -0.019999312, -0.007120008, 0.019788349, -4.93566E-4, 0.018213157, 0.003811402, 0.005470979, 0.022390228, -0.024879595, -0.03217892, 0.006894981, 0.014380659, -0.005724135, 0.007292295, -0.018325672, -0.0017694539, 0.003292784, -0.013965764, -0.021251027, -0.054597277, -0.0030589665, -0.0047009634, -0.0010328407, 0.01041455, 0.00485567, -0.01311488, -0.0035775844, -0.016567644, 0.02403574, 0.03395101, 1.8118662E-4, 0.03653883, -0.016862992, -0.0019197651, -0.020533752, 0.046074364, 0.018972624, 0.009584762, -0.03974547, -0.008262726, 0.005861261, 0.004279037, 0.03490738, -0.0034474905, -0.020336853, -0.019718029, -0.007904088, -0.027186126, -0.019732092, 0.019000754, 8.85606E-4, -0.015034645, 0.005579977, -0.023613814, 0.014099374, -0.016173845, 0.017313048, -0.00938083, -0.005337369, 0.0032048828, -0.025484355, -0.0030765468, 0.021588568, -0.03811402, 0.004004785, -0.03004116, -0.02863474, 0.0025227685, -0.006167158, -0.020505624, -0.016272295, -0.013403196, -0.0133821, 0.015358121, 0.04542741, -0.015161223, -0.0021342444, 0.008368207, -0.0153159285, -0.019577386, 0.030547472, 0.006483603, -0.0027214254, -0.005010376, -0.00934567, -0.028058106, -0.0014705893, -0.010878669, 0.025034301, -0.020379046, -0.011835036, -0.06008232, -0.007148137, -0.021040063, -0.05577867, -0.0076579642, 0.021855788, 1.109205E-4, -0.0473964, -0.0091769, -0.18305981, 0.022741834, 0.016764542, -0.024640502, -0.0050771814, 0.0027442798, 0.02406387, -0.008171308, 0.019718029, 0.0049224747, 0.025160879, -5.133438E-4, -0.030913142, -0.013768866, -0.001249957, 0.008888584, -0.010470808, 0.01725679, 0.045343027, 0.022333972, 0.024612375, -0.015583149, 0.015400314, -0.004025881, -5.6696363E-4, 0.015583149, 0.014141567, -0.0010170185, 0.010738027, -0.0027653761, 0.0028849219, -0.009521473, 0.008670588, -0.0030730308, 0.0041770716, -0.013642288, -0.01555502, -0.006641825, -0.020350918, 0.029534848, 0.01562534, 0.0145002045, 0.004518129, 0.009296445, 0.01458459, -0.014429883, 0.026314145, -0.006427346, 0.023768522, -0.024499862, 0.025146814, -0.038732845, 0.009254253, -0.0029517268, 0.0075313863, 0.025245264, 0.0058190683, 0.02316376, -4.526919E-4, 0.011286532, -0.026496978, -0.048605923, 0.0048205093, 0.0045849336, -0.014823682, -0.0017255032, -0.011975678, 0.004465388, -0.047705814, -0.0067156623, -0.015878497, -0.0060194833, 0.008691684, 0.0077142213, 0.008797166, 0.0021992915, -0.009352703, 0.035048023, 0.0055764606, 0.014141567, -0.0018635084, 0.026342273, -0.010105138, 0.0044759363, -0.026553236, 0.022657448, -0.0017650588, -0.013705577, 0.0367076, -0.006371089, 0.007292295, -0.051925078, -0.01635668, 3.6237325E-4, -0.0010697593, 0.010906798, -0.0054112063, 0.0026247338, 0.009338638, -0.003628567, -0.0036250511, 0.0048380895, -0.016005075, 0.009626955, 0.018297542, -0.0052283714, 0.023782585, 0.015794111, 0.06047612, -0.004816993, 0.01698957, 0.003092369, 0.013726673, 0.023009054, -5.977291E-4, 0.030828757, -0.019816477, -0.018930431, 0.016961442, -0.013241458, 0.032854002, 0.0070742997, -0.004933023, -0.006564472, 0.012474958, 0.009444119, -0.06902716, -0.03268523, 0.03006929, -0.0016015624, -0.013698544, 0.03954857, -0.011265435, 0.012320251, -0.04199574, 0.023501301, -0.02005557, -0.02950672, -0.009936367, -0.0050033443, 0.022798091, 0.020786908, -0.026159437, 0.0035811004, -3.0172133E-4, 0.034401067, -0.013937636, -0.008269758, -0.0029780972, -0.006219899, -0.0021500667, -0.0076720286, -0.016005075, 0.02646885, 0.008797166, -0.013346939, 0.00857917, -0.023768522, 0.009704308, -0.02059001, -0.013607127, 3.8874368E-4, -0.034204166, -0.0031679643, 0.042248897, -0.0054217544, 0.0018916368, -0.015667534, 0.022826219, -0.027720565, -0.010836476, 0.012798435, -0.019971184, 0.047368273, 0.029366078, -0.021687018, -0.009584762, 0.016244167, -0.02853629, 0.011244339, 0.027847143, 0.0035248436, 0.019563321, 0.01825535, -0.024120126, -0.0016771575, 0.002245, 0.004732608, 0.0012288607, 0.03186951, 0.0021184222, 0.024274834, -0.025681255, -0.024753017, 0.007636868, -0.0016085944, -0.010674738, 5.6696363E-4, -0.021180706, 0.0017553897, -0.0031679643, -0.004159491, -0.02372633, -0.029253565, -0.0056327176, -0.041095633, -0.0015382734, 0.0028093266, -0.0014231226, -0.013747769, 0.052375134, 0.007854863, 0.0014969597, -0.010295005, 0.004061042, -0.018311607, -0.0033683793, 0.008895615, 0.01852257, -0.013775897, -0.019028882, 0.013424292, 0.0049470873, -0.009676179, 0.0077071893, 7.7968487E-4, -0.01625823, 0.0018248317, -0.07200877, 0.02442954, -0.0043634223, -0.01037939, 0.0012649002, -0.0089659365, -0.0048837983, 0.0012033693, 0.014380659, -0.0047748005, -0.023318466, 0.016145717, -0.019183587, -0.0011734829, -0.014443948, -0.025273392, 0.01121621, -0.0028058107, 0.010084041, 0.0012218286, -0.010161394, -0.009134707, 0.038395304, 0.025723448, 0.00644141, 6.7376374E-4, -0.03307903, 0.022741834, -0.026511043, -0.008621363, 0.023037182, -0.02860661, 0.004011817, 0.024837403, -0.013487581, -0.024077933, 0.002772408, 0.021138513, -0.0052494677, 0.007911121, -0.04742453, -0.053106472, 0.0068000476, 0.001509266, -0.03592, 0.007383712, -0.0104215825, 0.019732092, -0.025653126, 0.0016947378, 0.023571622, 0.006508215, -0.012601536, -0.028325327, -0.034597967, -0.03431668, 0.011567816, 0.008586203, -0.015372186, -0.026553236, 0.034204166, -4.1093875E-4, 0.007176265, -0.019014817, -0.0052318876, -0.01725679, 0.0039133676, 0.017777167, 0.027762758, -0.005379562, -0.027425217, 0.0032171889, 0.014598654, 0.022305842, 0.036060646, -0.02246055, -0.017678717, 0.0031626902, 0.0010451468, 0.023838842, 0.038535945, -0.0028128428, -0.0030607246, 0.002431351, 0.033416573, 0.010463775, -0.010822413, 0.015442506, 0.0149643235, -0.0020850196, -0.033529084, 0.0056186533, -0.007925184, 0.0021272122, 0.010555193, 0.0045708697, -0.009359734, -0.013079719, 0.011757683, -3.2809173E-4, 0.02129322, 0.0033402508, 0.029309822, 0.009556633, -0.035723105, -0.00814318, -0.02639853, 0.0011743619, 0.023276273, 0.016201975, 0.009992624, -0.002640556, -0.0047396403, 0.022221457, -0.026525108, 0.017692782, -0.004672835, -0.008382271, -0.029309822, 0.00592455, 0.0026686846, -0.0036496634, 0.0062093507, -0.01495026, 0.012271027, 0.008825295, 0.024077933, -0.04219264, 0.012045999, 8.7154174E-4, 0.0064132814, -0.016201975, -0.009465216, 0.005344401, -0.03307903, 0.018719468, -0.0073344875, 0.0131570725, -0.011223243, 0.072683856, -0.010569257, -0.0061319973, 0.017847488, 0.009247221, 0.017369304, 0.007369648, 0.012299155, -0.009619922, -0.029984904, 0.020505624, -0.027917465, 0.008600267, -0.003691856, 0.013473517, -0.0077142213, -0.02773463, 0.011392013, 0.013065655, -0.031728867, -0.019830542, 0.025990667, 9.6515665E-4, -0.01798813, -0.00957773, 0.025385907, 0.015681598, -0.012974237, 0.0013484065, -0.029562978, 0.030463086, 0.011462335, -0.023613814, -0.0015857401, 0.0150768375, -0.014697104, -0.01341726, 8.482479E-4, 0.009338638, -7.282626E-4, -0.0045110965, 0.063063934, -0.0263704, -0.021068193, -8.8956155E-4, 0.0018283478, -0.010034816, -0.020083698, -0.02766431 ], + "content" : "{id=6, firstName=Sharon, lastName=Jenkins, specialties=[], nrOfSpecialties=0}", + "id" : "694664cd-5f19-4b9e-a0da-7c9b8173b41c", + "metadata" : { }, + "media" : [ ] + } +} \ No newline at end of file diff --git a/spring-petclinic-vets-service/pom.xml b/spring-petclinic-vets-service/pom.xml index d60b1ae6e..0d7dd9ce7 100644 --- a/spring-petclinic-vets-service/pom.xml +++ b/spring-petclinic-vets-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.2.7 + 3.3.4 diff --git a/spring-petclinic-visits-service/pom.xml b/spring-petclinic-visits-service/pom.xml index 6d3109018..338ff0301 100644 --- a/spring-petclinic-visits-service/pom.xml +++ b/spring-petclinic-visits-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.2.7 + 3.3.4 From 104410a0cdac5ddcc4e43f659db0732cdc972c0d Mon Sep 17 00:00:00 2001 From: Nikola Balic Date: Fri, 27 Dec 2024 16:50:15 +0100 Subject: [PATCH 12/17] Add "Open with Codeanywhere" badge to README.md (#292) --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a8e948fb8..9e4ae08a6 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ and the Eureka Service Discovery from the [Spring Cloud Netflix](https://github. [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/spring-petclinic/spring-petclinic-microservices) +[![Open in Codeanywhere](https://codeanywhere.com/img/open-in-codeanywhere-btn.svg)](https://app.codeanywhere.com/#https://github.com/spring-petclinic/spring-petclinic-microservices) + ## Starting services locally without Docker Every microservice is a Spring Boot application and can be started locally using IDE ([Lombok](https://projectlombok.org/) plugin has to be set up) or `../mvnw spring-boot:run` command. Please note that supporting services (Config and Discovery Server) must be started before any other application (Customers, Vets, Visits and API). From b9c725f67567c5e68654ac8bc896b7c6c031700b Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Fri, 27 Dec 2024 18:32:24 +0100 Subject: [PATCH 13/17] Get rid of Lombok #251 (#300) --- README.md | 3 +- pom.xml | 9 -- spring-petclinic-api-gateway/pom.xml | 5 - .../application/CustomersServiceClient.java | 6 +- .../api/application/VisitsServiceClient.java | 6 +- .../boundary/web/ApiGatewayController.java | 24 +++-- .../petclinic/api/dto/OwnerDetails.java | 81 ++++++++++++---- .../samples/petclinic/api/dto/PetDetails.java | 58 +++++++++-- .../samples/petclinic/api/dto/PetType.java | 7 +- .../petclinic/api/dto/VisitDetails.java | 19 +--- .../samples/petclinic/api/dto/Visits.java | 13 ++- .../VisitsServiceClientIntegrationTest.java | 8 +- .../web/ApiGatewayControllerTest.java | 48 +++++----- spring-petclinic-customers-service/pom.xml | 5 - .../petclinic/customers/model/Owner.java | 76 +++++++++------ .../petclinic/customers/model/Pet.java | 74 ++++++++++++--- .../petclinic/customers/model/PetType.java | 30 +++--- .../customers/web/OwnerResource.java | 13 ++- .../petclinic/customers/web/PetResource.java | 12 ++- spring-petclinic-vets-service/pom.xml | 5 - .../petclinic/vets/model/Specialty.java | 24 ++--- .../samples/petclinic/vets/model/Vet.java | 51 +++++----- .../petclinic/vets/system/VetsProperties.java | 20 ++-- .../petclinic/vets/web/VetResource.java | 7 +- spring-petclinic-visits-service/pom.xml | 5 - .../samples/petclinic/visits/model/Visit.java | 95 +++++++++++++++---- .../petclinic/visits/web/VisitResource.java | 19 ++-- .../visits/web/VisitResourceTest.java | 8 +- 28 files changed, 458 insertions(+), 273 deletions(-) diff --git a/README.md b/README.md index 9e4ae08a6..54318e56c 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,8 @@ and the Eureka Service Discovery from the [Spring Cloud Netflix](https://github. ## Starting services locally without Docker -Every microservice is a Spring Boot application and can be started locally using IDE ([Lombok](https://projectlombok.org/) plugin has to be set up) or `../mvnw spring-boot:run` command. Please note that supporting services (Config and Discovery Server) must be started before any other application (Customers, Vets, Visits and API). +Every microservice is a Spring Boot application and can be started locally using IDE or `../mvnw spring-boot:run` command. +Please note that supporting services (Config and Discovery Server) must be started before any other application (Customers, Vets, Visits and API). Startup of Tracing server, Admin server, Grafana and Prometheus is optional. If everything goes well, you can access the following services at given location: * Discovery Server - http://localhost:8761 diff --git a/pom.xml b/pom.xml index 0ce4bc86c..19d556e08 100644 --- a/pom.xml +++ b/pom.xml @@ -33,10 +33,6 @@ 3.1.0 1.7.1 - - 1.18.30 - springcommunity 9090 ${basedir} @@ -69,11 +65,6 @@ jolokia-core ${jolokia-core.version} - - org.projectlombok - lombok - ${lombok.version} - diff --git a/spring-petclinic-api-gateway/pom.xml b/spring-petclinic-api-gateway/pom.xml index 4db970d78..802f34f30 100644 --- a/spring-petclinic-api-gateway/pom.xml +++ b/spring-petclinic-api-gateway/pom.xml @@ -71,11 +71,6 @@ org.jolokia jolokia-core - - org.projectlombok - lombok - provided - io.micrometer micrometer-registry-prometheus diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/CustomersServiceClient.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/CustomersServiceClient.java index 691254e00..8112b9651 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/CustomersServiceClient.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/CustomersServiceClient.java @@ -15,7 +15,6 @@ */ package org.springframework.samples.petclinic.api.application; -import lombok.RequiredArgsConstructor; import org.springframework.samples.petclinic.api.dto.OwnerDetails; import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.client.WebClient; @@ -25,11 +24,14 @@ * @author Maciej Szarlinski */ @Component -@RequiredArgsConstructor public class CustomersServiceClient { private final WebClient.Builder webClientBuilder; + public CustomersServiceClient(WebClient.Builder webClientBuilder) { + this.webClientBuilder = webClientBuilder; + } + public Mono getOwner(final int ownerId) { return webClientBuilder.build().get() .uri("http://customers-service/owners/{ownerId}", ownerId) diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/VisitsServiceClient.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/VisitsServiceClient.java index d49dbf9b3..dcb222583 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/VisitsServiceClient.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/VisitsServiceClient.java @@ -15,7 +15,6 @@ */ package org.springframework.samples.petclinic.api.application; -import lombok.RequiredArgsConstructor; import org.springframework.samples.petclinic.api.dto.Visits; import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.client.WebClient; @@ -29,7 +28,6 @@ * @author Maciej Szarlinski */ @Component -@RequiredArgsConstructor public class VisitsServiceClient { // Could be changed for testing purpose @@ -37,6 +35,10 @@ public class VisitsServiceClient { private final WebClient.Builder webClientBuilder; + public VisitsServiceClient(WebClient.Builder webClientBuilder) { + this.webClientBuilder = webClientBuilder; + } + public Mono getVisitsForPets(final List petIds) { return webClientBuilder.build() .get() diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayController.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayController.java index 4cacc6106..fba887553 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayController.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayController.java @@ -15,7 +15,6 @@ */ package org.springframework.samples.petclinic.api.boundary.web; -import lombok.RequiredArgsConstructor; import org.springframework.cloud.client.circuitbreaker.ReactiveCircuitBreaker; import org.springframework.cloud.client.circuitbreaker.ReactiveCircuitBreakerFactory; import org.springframework.samples.petclinic.api.application.CustomersServiceClient; @@ -28,14 +27,13 @@ import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono; +import java.util.List; import java.util.function.Function; -import java.util.stream.Collectors; /** * @author Maciej Szarlinski */ @RestController -@RequiredArgsConstructor @RequestMapping("/api/gateway") public class ApiGatewayController { @@ -45,6 +43,14 @@ public class ApiGatewayController { private final ReactiveCircuitBreakerFactory cbFactory; + public ApiGatewayController(CustomersServiceClient customersServiceClient, + VisitsServiceClient visitsServiceClient, + ReactiveCircuitBreakerFactory cbFactory) { + this.customersServiceClient = customersServiceClient; + this.visitsServiceClient = visitsServiceClient; + this.cbFactory = cbFactory; + } + @GetMapping(value = "owners/{ownerId}") public Mono getOwnerDetails(final @PathVariable int ownerId) { return customersServiceClient.getOwner(ownerId) @@ -61,17 +67,17 @@ public Mono getOwnerDetails(final @PathVariable int ownerId) { private Function addVisitsToOwner(OwnerDetails owner) { return visits -> { - owner.getPets() - .forEach(pet -> pet.getVisits() - .addAll(visits.getItems().stream() - .filter(v -> v.getPetId() == pet.getId()) - .collect(Collectors.toList())) + owner.pets() + .forEach(pet -> pet.visits() + .addAll(visits.items().stream() + .filter(v -> v.petId() == pet.id()) + .toList()) ); return owner; }; } private Mono emptyVisitsForPets() { - return Mono.just(new Visits()); + return Mono.just(new Visits(List.of())); } } diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/OwnerDetails.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/OwnerDetails.java index 35391c026..18c58bf90 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/OwnerDetails.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/OwnerDetails.java @@ -16,37 +16,82 @@ package org.springframework.samples.petclinic.api.dto; import com.fasterxml.jackson.annotation.JsonIgnore; -import lombok.Data; -import java.util.ArrayList; import java.util.List; -import static java.util.stream.Collectors.toList; - /** * @author Maciej Szarlinski */ -@Data -public class OwnerDetails { +public record OwnerDetails( + int id, + String firstName, + String lastName, + String address, + String city, + String telephone, + List pets) { - private int id; + @JsonIgnore + public List getPetIds() { + return pets.stream() + .map(PetDetails::id) + .toList(); + } - private String firstName; - private String lastName; + public static final class OwnerDetailsBuilder { + private int id; + private String firstName; + private String lastName; + private String address; + private String city; + private String telephone; + private List pets; - private String address; + private OwnerDetailsBuilder() { + } - private String city; + public static OwnerDetailsBuilder anOwnerDetails() { + return new OwnerDetailsBuilder(); + } - private String telephone; + public OwnerDetailsBuilder id(int id) { + this.id = id; + return this; + } - private final List pets = new ArrayList<>(); + public OwnerDetailsBuilder firstName(String firstName) { + this.firstName = firstName; + return this; + } - @JsonIgnore - public List getPetIds() { - return pets.stream() - .map(PetDetails::getId) - .collect(toList()); + public OwnerDetailsBuilder lastName(String lastName) { + this.lastName = lastName; + return this; + } + + public OwnerDetailsBuilder address(String address) { + this.address = address; + return this; + } + + public OwnerDetailsBuilder city(String city) { + this.city = city; + return this; + } + + public OwnerDetailsBuilder telephone(String telephone) { + this.telephone = telephone; + return this; + } + + public OwnerDetailsBuilder pets(List pets) { + this.pets = pets; + return this; + } + + public OwnerDetails build() { + return new OwnerDetails(id, firstName, lastName, address, city, telephone, pets); + } } } diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/PetDetails.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/PetDetails.java index bf064fe6f..a1bacf164 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/PetDetails.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/PetDetails.java @@ -15,7 +15,6 @@ */ package org.springframework.samples.petclinic.api.dto; -import lombok.Data; import java.util.ArrayList; import java.util.List; @@ -23,17 +22,60 @@ /** * @author Maciej Szarlinski */ -@Data -public class PetDetails { +public record PetDetails( + int id, + String name, + String birthDate, + PetType type, + List visits) { - private int id; + public PetDetails { + if (visits == null) { + visits = new ArrayList<>(); + } + } - private String name; + public static final class PetDetailsBuilder { + private int id; + private String name; + private String birthDate; + private PetType type; + private List visits; - private String birthDate; + private PetDetailsBuilder() { + } - private PetType type; + public static PetDetailsBuilder aPetDetails() { + return new PetDetailsBuilder(); + } - private final List visits = new ArrayList<>(); + public PetDetailsBuilder id(int id) { + this.id = id; + return this; + } + public PetDetailsBuilder name(String name) { + this.name = name; + return this; + } + + public PetDetailsBuilder birthDate(String birthDate) { + this.birthDate = birthDate; + return this; + } + + public PetDetailsBuilder type(PetType type) { + this.type = type; + return this; + } + + public PetDetailsBuilder visits(List visits) { + this.visits = visits; + return this; + } + + public PetDetails build() { + return new PetDetails(id, name, birthDate, type, visits); + } + } } diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/PetType.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/PetType.java index e6b6d9e56..e6977b125 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/PetType.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/PetType.java @@ -15,13 +15,8 @@ */ package org.springframework.samples.petclinic.api.dto; -import lombok.Data; - /** * @author Maciej Szarlinski */ -@Data -public class PetType { - - private String name; +public record PetType(String name) { } diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/VisitDetails.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/VisitDetails.java index e9f353544..da9747f5b 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/VisitDetails.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/VisitDetails.java @@ -15,21 +15,12 @@ */ package org.springframework.samples.petclinic.api.dto; -import lombok.Data; -import lombok.NoArgsConstructor; - /** * @author Maciej Szarlinski */ -@Data -@NoArgsConstructor -public class VisitDetails { - - private Integer id = null; - - private Integer petId = null; - - private String date = null; - - private String description = null; +public record VisitDetails ( + Integer id, + Integer petId, + String date, + String description) { } diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/Visits.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/Visits.java index fb5851f1f..1ef90a0d2 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/Visits.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/dto/Visits.java @@ -18,15 +18,14 @@ import java.util.ArrayList; import java.util.List; -import lombok.NoArgsConstructor; -import lombok.Value; /** * @author Maciej Szarlinski */ -@Value -public class Visits { - - private List items = new ArrayList<>(); - +public record Visits ( + List items +) { + public Visits() { + this(new ArrayList<>()); + } } diff --git a/spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/application/VisitsServiceClientIntegrationTest.java b/spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/application/VisitsServiceClientIntegrationTest.java index 62e74c490..3820ba9a2 100644 --- a/spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/application/VisitsServiceClientIntegrationTest.java +++ b/spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/application/VisitsServiceClientIntegrationTest.java @@ -49,10 +49,10 @@ void getVisitsForPets_withAvailableVisitsService() { private void assertVisitDescriptionEquals(Visits visits, int petId, String description) { - assertEquals(1, visits.getItems().size()); - assertNotNull(visits.getItems().get(0)); - assertEquals(petId, visits.getItems().get(0).getPetId()); - assertEquals(description, visits.getItems().get(0).getDescription()); + assertEquals(1, visits.items().size()); + assertNotNull(visits.items().get(0)); + assertEquals(petId, visits.items().get(0).petId()); + assertEquals(description, visits.items().get(0).description()); } private void prepareResponse(Consumer consumer) { diff --git a/spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayControllerTest.java b/spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayControllerTest.java index f7ca84d4e..566f45638 100644 --- a/spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayControllerTest.java +++ b/spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayControllerTest.java @@ -10,16 +10,15 @@ import org.springframework.context.annotation.Import; import org.springframework.samples.petclinic.api.application.CustomersServiceClient; import org.springframework.samples.petclinic.api.application.VisitsServiceClient; -import org.springframework.samples.petclinic.api.dto.OwnerDetails; -import org.springframework.samples.petclinic.api.dto.PetDetails; -import org.springframework.samples.petclinic.api.dto.VisitDetails; -import org.springframework.samples.petclinic.api.dto.Visits; +import org.springframework.samples.petclinic.api.dto.*; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.reactive.server.WebTestClient; import reactor.core.publisher.Mono; import java.net.ConnectException; +import java.util.ArrayList; import java.util.Collections; +import java.util.List; @ExtendWith(SpringExtension.class) @WebFluxTest(controllers = ApiGatewayController.class) @@ -38,32 +37,28 @@ class ApiGatewayControllerTest { @Test void getOwnerDetails_withAvailableVisitsService() { - OwnerDetails owner = new OwnerDetails(); - PetDetails cat = new PetDetails(); - cat.setId(20); - cat.setName("Garfield"); - owner.getPets().add(cat); + PetDetails cat = PetDetails.PetDetailsBuilder.aPetDetails() + .id(20) + .name("Garfield") + .visits(new ArrayList<>()) + .build(); + OwnerDetails owner = OwnerDetails.OwnerDetailsBuilder.anOwnerDetails() + .pets(List.of(cat)) + .build(); Mockito .when(customersServiceClient.getOwner(1)) .thenReturn(Mono.just(owner)); - Visits visits = new Visits(); - VisitDetails visit = new VisitDetails(); - visit.setId(300); - visit.setDescription("First visit"); - visit.setPetId(cat.getId()); - visits.getItems().add(visit); + VisitDetails visit = new VisitDetails(300, cat.id(), null, "First visit"); + Visits visits = new Visits(List.of(visit)); Mockito - .when(visitsServiceClient.getVisitsForPets(Collections.singletonList(cat.getId()))) + .when(visitsServiceClient.getVisitsForPets(Collections.singletonList(cat.id()))) .thenReturn(Mono.just(visits)); client.get() .uri("/api/gateway/owners/1") .exchange() .expectStatus().isOk() - //.expectBody(String.class) - //.consumeWith(response -> - // Assertions.assertThat(response.getResponseBody()).isEqualTo("Garfield")); .expectBody() .jsonPath("$.pets[0].name").isEqualTo("Garfield") .jsonPath("$.pets[0].visits[0].description").isEqualTo("First visit"); @@ -74,17 +69,20 @@ void getOwnerDetails_withAvailableVisitsService() { */ @Test void getOwnerDetails_withServiceError() { - OwnerDetails owner = new OwnerDetails(); - PetDetails cat = new PetDetails(); - cat.setId(20); - cat.setName("Garfield"); - owner.getPets().add(cat); + PetDetails cat = PetDetails.PetDetailsBuilder.aPetDetails() + .id(20) + .name("Garfield") + .visits(new ArrayList<>()) + .build(); + OwnerDetails owner = OwnerDetails.OwnerDetailsBuilder.anOwnerDetails() + .pets(List.of(cat)) + .build(); Mockito .when(customersServiceClient.getOwner(1)) .thenReturn(Mono.just(owner)); Mockito - .when(visitsServiceClient.getVisitsForPets(Collections.singletonList(cat.getId()))) + .when(visitsServiceClient.getVisitsForPets(Collections.singletonList(cat.id()))) .thenReturn(Mono.error(new ConnectException("Simulate error"))); client.get() diff --git a/spring-petclinic-customers-service/pom.xml b/spring-petclinic-customers-service/pom.xml index 0817f826f..2edf67460 100644 --- a/spring-petclinic-customers-service/pom.xml +++ b/spring-petclinic-customers-service/pom.xml @@ -65,11 +65,6 @@ org.jolokia jolokia-core - - org.projectlombok - lombok - provided - io.micrometer micrometer-registry-prometheus diff --git a/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/Owner.java b/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/Owner.java index f1919ee96..2a7adc7d2 100644 --- a/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/Owner.java +++ b/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/Owner.java @@ -15,30 +15,15 @@ */ package org.springframework.samples.petclinic.customers.model; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; +import jakarta.persistence.*; import jakarta.validation.constraints.Digits; import jakarta.validation.constraints.NotBlank; - -import lombok.Getter; -import lombok.Setter; import org.springframework.beans.support.MutableSortDefinition; import org.springframework.beans.support.PropertyComparator; import org.springframework.core.style.ToStringCreator; +import java.util.*; + /** * Simple JavaBean domain object representing an owner. * @@ -55,35 +40,24 @@ public class Owner { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Getter private Integer id; - @Getter - @Setter @Column(name = "first_name") @NotBlank private String firstName; - @Getter - @Setter @Column(name = "last_name") @NotBlank private String lastName; - @Getter - @Setter @Column(name = "address") @NotBlank private String address; - @Getter - @Setter @Column(name = "city") @NotBlank private String city; - @Getter - @Setter @Column(name = "telephone") @NotBlank @Digits(fraction = 0, integer = 12) @@ -121,4 +95,48 @@ public String toString() { .append("telephone", this.telephone) .toString(); } + + public Integer getId() { + return this.id; + } + + public String getFirstName() { + return this.firstName; + } + + public String getLastName() { + return this.lastName; + } + + public String getAddress() { + return this.address; + } + + public String getCity() { + return this.city; + } + + public String getTelephone() { + return this.telephone; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public void setAddress(String address) { + this.address = address; + } + + public void setCity(String city) { + this.city = city; + } + + public void setTelephone(String telephone) { + this.telephone = telephone; + } } diff --git a/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/Pet.java b/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/Pet.java index 2cb702c88..029b80494 100644 --- a/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/Pet.java +++ b/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/Pet.java @@ -15,23 +15,13 @@ */ package org.springframework.samples.petclinic.customers.model; -import java.util.Date; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; - import com.fasterxml.jackson.annotation.JsonIgnore; -import lombok.Data; +import jakarta.persistence.*; import org.springframework.core.style.ToStringCreator; +import java.util.Date; +import java.util.Objects; + /** * Simple business object representing a pet. * @@ -41,7 +31,6 @@ * @author Maciej Szarlinski * @author Ramazan Sakin */ -@Data @Entity @Table(name = "pets") public class Pet { @@ -77,4 +66,59 @@ public String toString() { .toString(); } + public Integer getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public Date getBirthDate() { + return this.birthDate; + } + + public PetType getType() { + return this.type; + } + + public Owner getOwner() { + return this.owner; + } + + public void setId(Integer id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + public void setBirthDate(Date birthDate) { + this.birthDate = birthDate; + } + + public void setType(PetType type) { + this.type = type; + } + + public void setOwner(Owner owner) { + this.owner = owner; + } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) return false; + Pet pet = (Pet) o; + return Objects.equals(id, pet.id) + && Objects.equals(name, pet.name) + && Objects.equals(birthDate, pet.birthDate) + && Objects.equals(type, pet.type) + && Objects.equals(owner, pet.owner); + } + + @Override + public int hashCode() { + return Objects.hash(id, name, birthDate, type, owner); + } } diff --git a/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/PetType.java b/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/PetType.java index 80a29c134..f390ef8d3 100644 --- a/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/PetType.java +++ b/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/PetType.java @@ -15,15 +15,7 @@ */ package org.springframework.samples.petclinic.customers.model; -import lombok.Getter; -import lombok.Setter; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.Table; +import jakarta.persistence.*; /** * @author Juergen Hoeller @@ -36,12 +28,24 @@ public class PetType { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Getter - @Setter private Integer id; - @Getter - @Setter @Column(name = "name") private String name; + + public Integer getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public void setId(Integer id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } } diff --git a/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/web/OwnerResource.java b/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/web/OwnerResource.java index 1a3a2d70d..5b5a5315d 100644 --- a/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/web/OwnerResource.java +++ b/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/web/OwnerResource.java @@ -18,8 +18,8 @@ import io.micrometer.core.annotation.Timed; import jakarta.validation.Valid; import jakarta.validation.constraints.Min; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.samples.petclinic.customers.web.mapper.OwnerEntityMapper; import org.springframework.samples.petclinic.customers.model.Owner; @@ -39,13 +39,18 @@ @RequestMapping("/owners") @RestController @Timed("petclinic.owner") -@RequiredArgsConstructor -@Slf4j class OwnerResource { + private static final Logger log = LoggerFactory.getLogger(OwnerResource.class); + private final OwnerRepository ownerRepository; private final OwnerEntityMapper ownerEntityMapper; + OwnerResource(OwnerRepository ownerRepository, OwnerEntityMapper ownerEntityMapper) { + this.ownerRepository = ownerRepository; + this.ownerEntityMapper = ownerEntityMapper; + } + /** * Create Owner */ diff --git a/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/web/PetResource.java b/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/web/PetResource.java index 82241b363..204c1a7af 100644 --- a/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/web/PetResource.java +++ b/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/web/PetResource.java @@ -17,8 +17,8 @@ import io.micrometer.core.annotation.Timed; import jakarta.validation.constraints.Min; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.samples.petclinic.customers.model.*; import org.springframework.web.bind.annotation.*; @@ -34,13 +34,17 @@ */ @RestController @Timed("petclinic.pet") -@RequiredArgsConstructor -@Slf4j class PetResource { + private static final Logger log = LoggerFactory.getLogger(PetResource.class); + private final PetRepository petRepository; private final OwnerRepository ownerRepository; + PetResource(PetRepository petRepository, OwnerRepository ownerRepository) { + this.petRepository = petRepository; + this.ownerRepository = ownerRepository; + } @GetMapping("/petTypes") public List getPetTypes() { diff --git a/spring-petclinic-vets-service/pom.xml b/spring-petclinic-vets-service/pom.xml index 0d7dd9ce7..8da89402b 100644 --- a/spring-petclinic-vets-service/pom.xml +++ b/spring-petclinic-vets-service/pom.xml @@ -59,11 +59,6 @@ - - org.projectlombok - lombok - provided - javax.cache cache-api diff --git a/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/model/Specialty.java b/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/model/Specialty.java index 529b5a496..eeeea282e 100644 --- a/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/model/Specialty.java +++ b/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/model/Specialty.java @@ -15,15 +15,7 @@ */ package org.springframework.samples.petclinic.vets.model; -import lombok.Getter; -import lombok.Setter; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.Table; +import jakarta.persistence.*; /** * Models a {@link Vet Vet's} specialty (for example, dentistry). @@ -37,12 +29,20 @@ public class Specialty { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Getter private Integer id; - @Getter - @Setter @Column(name = "name") private String name; + public Integer getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } } diff --git a/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/model/Vet.java b/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/model/Vet.java index 2cec7f89d..150b19abf 100644 --- a/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/model/Vet.java +++ b/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/model/Vet.java @@ -15,30 +15,14 @@ */ package org.springframework.samples.petclinic.vets.model; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.Table; +import jakarta.persistence.*; import jakarta.validation.constraints.NotBlank; import jakarta.xml.bind.annotation.XmlElement; - -import lombok.Getter; -import lombok.Setter; import org.springframework.beans.support.MutableSortDefinition; import org.springframework.beans.support.PropertyComparator; +import java.util.*; + /** * Simple JavaBean domain object representing a veterinarian. * @@ -55,20 +39,14 @@ public class Vet { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Getter - @Setter private Integer id; @Column(name = "first_name") @NotBlank - @Getter - @Setter private String firstName; @Column(name = "last_name") @NotBlank - @Getter - @Setter private String lastName; @ManyToMany(fetch = FetchType.EAGER) @@ -98,4 +76,27 @@ public void addSpecialty(Specialty specialty) { getSpecialtiesInternal().add(specialty); } + public Integer getId() { + return this.id; + } + + public String getFirstName() { + return this.firstName; + } + + public String getLastName() { + return this.lastName; + } + + public void setId(Integer id) { + this.id = id; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } } diff --git a/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/system/VetsProperties.java b/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/system/VetsProperties.java index 017bffe71..f369a6f14 100644 --- a/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/system/VetsProperties.java +++ b/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/system/VetsProperties.java @@ -15,8 +15,6 @@ */ package org.springframework.samples.petclinic.vets.system; -import lombok.Data; - import org.springframework.boot.context.properties.ConfigurationProperties; /** @@ -24,17 +22,13 @@ * * @author Maciej Szarlinski */ -@Data @ConfigurationProperties(prefix = "vets") -public class VetsProperties { - - private Cache cache; - - @Data - public static class Cache { - - private int ttl; - - private int heapSize; +public record VetsProperties( + Cache cache +) { + public record Cache( + int ttl, + int heapSize + ) { } } diff --git a/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/web/VetResource.java b/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/web/VetResource.java index eb5116663..09e4b19f8 100644 --- a/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/web/VetResource.java +++ b/spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/web/VetResource.java @@ -15,8 +15,6 @@ */ package org.springframework.samples.petclinic.vets.web; -import lombok.RequiredArgsConstructor; - import java.util.List; import org.springframework.cache.annotation.Cacheable; @@ -35,11 +33,14 @@ */ @RequestMapping("/vets") @RestController -@RequiredArgsConstructor class VetResource { private final VetRepository vetRepository; + VetResource(VetRepository vetRepository) { + this.vetRepository = vetRepository; + } + @GetMapping @Cacheable("vets") public List showResourcesVetList() { diff --git a/spring-petclinic-visits-service/pom.xml b/spring-petclinic-visits-service/pom.xml index 338ff0301..2b4b3f18e 100644 --- a/spring-petclinic-visits-service/pom.xml +++ b/spring-petclinic-visits-service/pom.xml @@ -50,11 +50,6 @@ - - org.projectlombok - lombok - provided - org.hsqldb hsqldb diff --git a/spring-petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/model/Visit.java b/spring-petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/model/Visit.java index ba24c1ce7..ef0fa1a2c 100644 --- a/spring-petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/model/Visit.java +++ b/spring-petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/model/Visit.java @@ -16,20 +16,9 @@ package org.springframework.samples.petclinic.visits.model; import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; +import jakarta.persistence.*; import jakarta.validation.constraints.Size; + import java.util.Date; /** @@ -41,17 +30,12 @@ */ @Entity @Table(name = "visits") -@Builder(builderMethodName = "visit") -@Data -@NoArgsConstructor -@AllArgsConstructor public class Visit { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; - @Builder.Default @Column(name = "visit_date") @Temporal(TemporalType.TIMESTAMP) @JsonFormat(pattern = "yyyy-MM-dd") @@ -64,4 +48,79 @@ public class Visit { @Column(name = "pet_id") private int petId; + public Integer getId() { + return this.id; + } + + public Date getDate() { + return this.date; + } + + public String getDescription() { + return this.description; + } + + public int getPetId() { + return this.petId; + } + + public void setId(Integer id) { + this.id = id; + } + + public void setDate(Date date) { + this.date = date; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setPetId(int petId) { + this.petId = petId; + } + + + public static final class VisitBuilder { + private Integer id; + private Date date; + private @Size(max = 8192) String description; + private int petId; + + private VisitBuilder() { + } + + public static VisitBuilder aVisit() { + return new VisitBuilder(); + } + + public VisitBuilder id(Integer id) { + this.id = id; + return this; + } + + public VisitBuilder date(Date date) { + this.date = date; + return this; + } + + public VisitBuilder description(String description) { + this.description = description; + return this; + } + + public VisitBuilder petId(int petId) { + this.petId = petId; + return this; + } + + public Visit build() { + Visit visit = new Visit(); + visit.setId(id); + visit.setDate(date); + visit.setDescription(description); + visit.setPetId(petId); + return visit; + } + } } diff --git a/spring-petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/web/VisitResource.java b/spring-petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/web/VisitResource.java index 1115dd7c0..07f42ba4c 100644 --- a/spring-petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/web/VisitResource.java +++ b/spring-petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/web/VisitResource.java @@ -20,9 +20,8 @@ import jakarta.validation.constraints.Min; import io.micrometer.core.annotation.Timed; -import lombok.RequiredArgsConstructor; -import lombok.Value; -import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.samples.petclinic.visits.model.Visit; import org.springframework.samples.petclinic.visits.model.VisitRepository; @@ -43,13 +42,17 @@ * @author Ramazan Sakin */ @RestController -@RequiredArgsConstructor -@Slf4j @Timed("petclinic.visit") class VisitResource { + private static final Logger log = LoggerFactory.getLogger(VisitResource.class); + private final VisitRepository visitRepository; + VisitResource(VisitRepository visitRepository) { + this.visitRepository = visitRepository; + } + @PostMapping("owners/*/pets/{petId}/visits") @ResponseStatus(HttpStatus.CREATED) public Visit create( @@ -72,8 +75,8 @@ public Visits read(@RequestParam("petId") List petIds) { return new Visits(byPetIdIn); } - @Value - static class Visits { - List items; + record Visits( + List items + ) { } } diff --git a/spring-petclinic-visits-service/src/test/java/org/springframework/samples/petclinic/visits/web/VisitResourceTest.java b/spring-petclinic-visits-service/src/test/java/org/springframework/samples/petclinic/visits/web/VisitResourceTest.java index 25d33f24b..82392b59b 100644 --- a/spring-petclinic-visits-service/src/test/java/org/springframework/samples/petclinic/visits/web/VisitResourceTest.java +++ b/spring-petclinic-visits-service/src/test/java/org/springframework/samples/petclinic/visits/web/VisitResourceTest.java @@ -5,6 +5,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.samples.petclinic.visits.model.Visit; import org.springframework.samples.petclinic.visits.model.VisitRepository; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -13,7 +14,6 @@ import static java.util.Arrays.asList; import static org.mockito.BDDMockito.given; -import static org.springframework.samples.petclinic.visits.model.Visit.visit; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -34,15 +34,15 @@ void shouldFetchVisits() throws Exception { given(visitRepository.findByPetIdIn(asList(111, 222))) .willReturn( asList( - visit() + Visit.VisitBuilder.aVisit() .id(1) .petId(111) .build(), - visit() + Visit.VisitBuilder.aVisit() .id(2) .petId(222) .build(), - visit() + Visit.VisitBuilder.aVisit() .id(3) .petId(222) .build() From ce0a734dbff4887edc1033e4d066befabce4ad00 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Sat, 28 Dec 2024 12:46:24 +0100 Subject: [PATCH 14/17] Bump to Spring Cloud 2024 and Spring Boot 3.4.1 (#302) --- pom.xml | 6 +++--- spring-petclinic-admin-server/pom.xml | 12 ++++++++++-- spring-petclinic-api-gateway/pom.xml | 12 +++++++++++- spring-petclinic-config-server/pom.xml | 2 +- spring-petclinic-customers-service/pom.xml | 2 +- spring-petclinic-discovery-server/pom.xml | 2 +- spring-petclinic-genai-service/pom.xml | 2 +- spring-petclinic-vets-service/pom.xml | 2 +- spring-petclinic-visits-service/pom.xml | 2 +- 9 files changed, 30 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index 19d556e08..27b99d2a4 100644 --- a/pom.xml +++ b/pom.xml @@ -6,12 +6,12 @@ org.springframework.boot spring-boot-starter-parent - 3.3.4 + 3.4.1 org.springframework.samples spring-petclinic-microservices - 3.3.4 + 3.4.1 ${project.artifactId} pom @@ -29,7 +29,7 @@ 17 - 2023.0.3 + 2024.0.0 3.1.0 1.7.1 diff --git a/spring-petclinic-admin-server/pom.xml b/spring-petclinic-admin-server/pom.xml index e8faa0f84..5237607e3 100644 --- a/spring-petclinic-admin-server/pom.xml +++ b/spring-petclinic-admin-server/pom.xml @@ -12,11 +12,11 @@ org.springframework.samples spring-petclinic-microservices - 3.3.4 + 3.4.1 - 3.2.0 + 3.4.1 9090 ${basedir}/../docker @@ -35,6 +35,10 @@ org.springframework.cloud spring-cloud-starter-netflix-eureka-client + + org.springframework.boot + spring-boot-starter-cache + @@ -53,6 +57,10 @@ org.jolokia jolokia-core + + com.github.ben-manes.caffeine + caffeine + diff --git a/spring-petclinic-api-gateway/pom.xml b/spring-petclinic-api-gateway/pom.xml index 802f34f30..bcc70c182 100644 --- a/spring-petclinic-api-gateway/pom.xml +++ b/spring-petclinic-api-gateway/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.3.4 + 3.4.1 @@ -20,6 +20,7 @@ 1.8.3 1.0.30 14.1.2 + 4.12.0 0.2.29 8081 @@ -42,6 +43,10 @@ org.springframework.boot spring-boot-starter-actuator + + org.springframework.boot + spring-boot-starter-cache + org.springframework.boot spring-boot-starter-test @@ -95,6 +100,10 @@ io.zipkin.reporter2 zipkin-reporter-brave + + com.github.ben-manes.caffeine + caffeine + @@ -141,6 +150,7 @@ com.squareup.okhttp3 mockwebserver + ${squareup-okhttp3.version} test diff --git a/spring-petclinic-config-server/pom.xml b/spring-petclinic-config-server/pom.xml index 5556418a4..a6cce24c7 100644 --- a/spring-petclinic-config-server/pom.xml +++ b/spring-petclinic-config-server/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.3.4 + 3.4.1 diff --git a/spring-petclinic-customers-service/pom.xml b/spring-petclinic-customers-service/pom.xml index 2edf67460..96a53c758 100644 --- a/spring-petclinic-customers-service/pom.xml +++ b/spring-petclinic-customers-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.3.4 + 3.4.1 diff --git a/spring-petclinic-discovery-server/pom.xml b/spring-petclinic-discovery-server/pom.xml index 0dfc3a642..970f9743b 100644 --- a/spring-petclinic-discovery-server/pom.xml +++ b/spring-petclinic-discovery-server/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.3.4 + 3.4.1 diff --git a/spring-petclinic-genai-service/pom.xml b/spring-petclinic-genai-service/pom.xml index a664bbaf1..093e909cd 100644 --- a/spring-petclinic-genai-service/pom.xml +++ b/spring-petclinic-genai-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.3.4 + 3.4.1 diff --git a/spring-petclinic-vets-service/pom.xml b/spring-petclinic-vets-service/pom.xml index 8da89402b..fc28730a2 100644 --- a/spring-petclinic-vets-service/pom.xml +++ b/spring-petclinic-vets-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.3.4 + 3.4.1 diff --git a/spring-petclinic-visits-service/pom.xml b/spring-petclinic-visits-service/pom.xml index 2b4b3f18e..5ad4c6b5f 100644 --- a/spring-petclinic-visits-service/pom.xml +++ b/spring-petclinic-visits-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 3.3.4 + 3.4.1 From f9fd559361f11b79e622ee0c0c660f42980a36ac Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Sat, 28 Dec 2024 13:06:17 +0100 Subject: [PATCH 15/17] Externalise the genai-service configuration (#301) --- docker-compose.yml | 3 ++- .../src/main/resources/application.yml | 8 -------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index a29ef0ba2..0670aecc8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -121,7 +121,8 @@ services: limits: memory: 512M environment: - - JAVA_OPTS=-XX:+UnlockExperimentalVMOptions -Djava.security.egd=file:/dev/./urandom + # Waiting for https://github.com/openzipkin/zipkin/issues/3786 + - JAVA_OPTS=-XX:UseSVE=0 ports: - 9411:9411 diff --git a/spring-petclinic-genai-service/src/main/resources/application.yml b/spring-petclinic-genai-service/src/main/resources/application.yml index 5c42ad1ce..d6c380add 100644 --- a/spring-petclinic-genai-service/src/main/resources/application.yml +++ b/spring-petclinic-genai-service/src/main/resources/application.yml @@ -43,11 +43,3 @@ spring: activate: on-profile: docker import: configserver:http://config-server:8888 - zipkin: - baseUrl: http://tracing-server:9411 -server: - port: 8084 -eureka: - client: - serviceUrl: - defaultZone: http://discovery-server:8761/eureka/ From bac5c68f12a62d4e6a3002416bf391114d4416fd Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Wed, 8 Jan 2025 22:16:19 +0100 Subject: [PATCH 16/17] JetBrains support for Open-Source Projects (#304) --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 54318e56c..34fe9a69d 100644 --- a/README.md +++ b/README.md @@ -283,3 +283,7 @@ For pull requests, editor preferences are available in the [editor config](.edit [Configuration repository]: https://github.com/spring-petclinic/spring-petclinic-microservices-config [Spring Boot Actuator Production Ready Metrics]: https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-metrics.html + +## Supported by + +[![JetBrains logo](https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.svg)](https://jb.gg/OpenSourceSupport) From 8a508037dbb002c5c26b6aed384d3c3b3b22356f Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Mon, 10 Mar 2025 11:48:43 +0100 Subject: [PATCH 17/17] small fixes --- docker-compose.yml | 2 +- pom.xml | 4 ---- spring-petclinic-soap-client/pom.xml | 8 ++++---- spring-petclinic-soap-service/pom.xml | 8 ++++---- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 4fd54d370..eba0d0861 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -94,7 +94,7 @@ services: discovery-server: condition: service_healthy ports: - - 8084:8084 + - 8084:8084 soap-service: image: inspectit/spring-petclinic-soap-service:${INSPECTIT_PETCLINIC_VERSION} diff --git a/pom.xml b/pom.xml index 8b66649c1..7e0887f63 100644 --- a/pom.xml +++ b/pom.xml @@ -34,10 +34,6 @@ 2024.0.0 3.1.0 1.7.1 - - - 1.18.30 inspectit 9090 diff --git a/spring-petclinic-soap-client/pom.xml b/spring-petclinic-soap-client/pom.xml index 8cfd44799..80a87dc61 100644 --- a/spring-petclinic-soap-client/pom.xml +++ b/spring-petclinic-soap-client/pom.xml @@ -1,12 +1,12 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.springframework.boot - spring-boot-starter-parent - 3.3.0 + org.springframework.samples + spring-petclinic-microservices + 3.4.1 diff --git a/spring-petclinic-soap-service/pom.xml b/spring-petclinic-soap-service/pom.xml index 308e29e21..21b3aff91 100644 --- a/spring-petclinic-soap-service/pom.xml +++ b/spring-petclinic-soap-service/pom.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.samples.soap @@ -9,9 +9,9 @@ jar - org.springframework.boot - spring-boot-starter-parent - 3.3.0 + org.springframework.samples + spring-petclinic-microservices + 3.4.1