diff --git a/R/splnr_get_gfw.R b/R/splnr_get_gfw.R index ef4ead5..6d8c24d 100644 --- a/R/splnr_get_gfw.R +++ b/R/splnr_get_gfw.R @@ -129,7 +129,7 @@ splnr_get_gfw <- function(region, # Determine the region ID based on the region_source and region type. if (region_source == "EEZ" & is.character(region)){ - region_id <- gfwr::get_region_id(region_name = region, region_source = region_source, key = key)$id + region_id <- gfwr::gfw_region_id(region = region, region_source = region_source, key = key)$id } else if (region_source == "EEZ" & is.numeric(region)){ # If region is numeric for EEZ, assume it's already an ID. region_id <- region @@ -149,7 +149,7 @@ splnr_get_gfw <- function(region, get_data_for_range <- function(start_date, end_date, rid) { # Call the gfwr::get_raster function to retrieve GFW raster data. - data <- gfwr::get_raster( + data <- gfwr::gfw_ais_fishing_hours( spatial_resolution = spat_res, temporal_resolution = temp_res, group_by = 'FLAGANDGEARTYPE', # Group by flag and geartype. diff --git a/docs/articles/ClimateSmart.html b/docs/articles/ClimateSmart.html index e41f02f..baf744b 100644 --- a/docs/articles/ClimateSmart.html +++ b/docs/articles/ClimateSmart.html @@ -171,7 +171,7 @@

Convert the probabilities to b dplyr::as_tibble() %>% dplyr::mutate(dplyr::across( -dplyr::any_of(c("geometry")), # Don't apply to geometry - ~ dplyr::case_when( + ~ dplyr::case_when( . >= 0.5 ~ 1, . < 0.5 ~ 0, is.na(.data) ~ 0 @@ -203,7 +203,7 @@

Climate-smart spatial planning= Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

+

In our case, there were few areas with low climate velocity, which are the areas we define as climate refugia in our example. Usually, we would combine several metrics (e.g. exposure, velocity etc.) of multiple @@ -226,7 +226,7 @@

Climate-smart spatial planning= Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

+

We then use the climate priority area approach splnr_climate_priorityAreaApproach() detailed in Buenafe et al (2023) to determine climate refugia. Briefly, this approach selects a percentile @@ -306,7 +306,7 @@

Run the climate-smart spatial pl Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

+

However, we are also interested how climate-smart the selected planning units in the solution actually are. For this, we can use a kernel density plot.

@@ -318,7 +318,7 @@

Run the climate-smart spatial pl legendTitle = "Climate velocity (add unit)", xAxisLab = "Climate velocity" )) -

+

-

+

However, we are also interested how climate-smart the selected planning units in the solution actually are. For this, we can use a kernel density plot

@@ -397,7 +397,7 @@

Percentile Approach= "Climate velocity (add unit)", xAxisLab = "Climate velocity" )) -

+

-

+

However, we are also interested how climate-smart the selected planning units in the solution actually are. For this, we can use a kernel density plot

@@ -466,7 +466,7 @@

Feature Approach legendTitle = "Climate velocity (add unit)", xAxisLab = "Climate velocity" )) -

+

diff --git a/docs/articles/GlobalFishingWatch.html b/docs/articles/GlobalFishingWatch.html index 5c5c19d..78059bf 100644 --- a/docs/articles/GlobalFishingWatch.html +++ b/docs/articles/GlobalFishingWatch.html @@ -76,8 +76,8 @@

Global Fishing Watch R Package (

The gfwr package provides convenient functions to pull GFW data directly into R into usable formats. It contains three main -functions, including : get_vessel_info(), -get_event() and get_raster(). The two first +functions, including : get_vessel_info(), +get_event() and get_raster(). The two first being devoted to retrieving information and features on one ore several specific vessels. The last is of particular interest to us because it allows us to gather information from global fishing watch raster on the @@ -131,7 +131,7 @@

Fishing effort visualization
-region_id <- get_region_id(region = "Australia", 
+region_id <- get_region_id(region = "Australia", 
                                  region_source = "EEZ",
                                  key = gfwr::gfw_auth())$id[2]

The get_raster function gets a raster of fishing effort @@ -147,7 +147,7 @@

Fishing effort visualization
-get_raster(
+get_raster(
   spatial_resolution = "LOW",
   temporal_resolution = "MONTHLY",
   group_by = "FLAGANDGEARTYPE",
@@ -204,12 +204,12 @@ 

Here

Raw Fishing Effort

-

+

By years

-

+

Year-on-year comparison @@ -229,7 +229,7 @@

Year-on-year comparison key = gfwr::gfw_auth()) %>% dplyr::group_by(Year, Month) %>% dplyr::summarize(Total_Fishing_Hours = sum(ApparentFishingHrs))

-

+

Fishing gear type @@ -241,14 +241,14 @@

Fishing gear type= "2019-12-31", end_date = "2021-01-01", temp_res = "MONTHLY")

-

+

Flags

Here we display the Vessel activity in Papua New Guinea according to Vessels flags.

-

+

Supplementary materials. diff --git a/docs/articles/GlobalFishingWatch.md b/docs/articles/GlobalFishingWatch.md index 05e738e..8d01469 100644 --- a/docs/articles/GlobalFishingWatch.md +++ b/docs/articles/GlobalFishingWatch.md @@ -5,10 +5,10 @@ The `gfwr` package provides convenient functions to pull GFW data directly into R into usable formats. It contains three main functions, including : -[`get_vessel_info()`](https://globalfishingwatch.github.io/gfwr/reference/get_vessel_info.html), -[`get_event()`](https://globalfishingwatch.github.io/gfwr/reference/get_event.html) +[`get_vessel_info()`](https://globalfishingwatch.github.io/gfwr/reference/gfw_renamed.html), +[`get_event()`](https://globalfishingwatch.github.io/gfwr/reference/gfw_renamed.html) and -[`get_raster()`](https://globalfishingwatch.github.io/gfwr/reference/get_raster.html). +[`get_raster()`](https://globalfishingwatch.github.io/gfwr/reference/gfw_renamed.html). The two first being devoted to retrieving information and features on one ore several specific vessels. The last is of particular interest to us because it allows us to gather information from global fishing watch @@ -25,14 +25,14 @@ fishing. #### AIS Caveats and limitations -The AIS coverage of vessels has several limitations such as: +The AIS coverage of vessels has several limitations such as:\ 1. The number of vessels that are captured (AIS provides approximately -70’000 of the 2.8 million identified fishing vessels). +70’000 of the 2.8 million identified fishing vessels).\ 2. The size of the vessels (52-85% for vessels larger than 24 meters -against 1% for vessels under 12 meters). +against 1% for vessels under 12 meters).\ *Good to know: IMO mandates AIS for most vessels larger than 36 -meters.* -3. AIS interference with each other in areas of high vessel density. +meters.*\ +3. AIS interference with each other in areas of high vessel density.\ 4. Some terrestrial satellites only receive messages near shore. ### Installation @@ -50,13 +50,13 @@ library(spatialplanr) ### API -To access GFW APIs, you need to : -1. register for a GFW account [here](http://bit.ly/447cRG9). +To access GFW APIs, you need to :\ +1. register for a GFW account [here](http://bit.ly/447cRG9).\ 2. Request API key [here](https://globalfishingwatch.org/our-apis/tokens). Once you have your token, add it to your .Renviron file (by executing -the chunk below), by writing (GFW_TOKEN = “YOUR_TOKEN”) in the file. +the chunk below), by writing (GFW_TOKEN = “YOUR_TOKEN”) in the file.\ *(You could be asked to restart R for changes to take effect.)* ``` r @@ -82,9 +82,9 @@ different resolution), the `Vessel IDs`, `Flag`, `Geartype` and `Apparent fishing Hours` which are basically the amount of fishing hours of each vessel per grid cell (`geometry`). -Data can be provided through : -- `DAILY`, `MONTHLY` and `YEARLY` temporal resolutions. -- `LOW` (0.1 deg) and `HIGH` (0.01 deg) spatial resolutions. +Data can be provided through :\ +- `DAILY`, `MONTHLY` and `YEARLY` temporal resolutions.\ +- `LOW` (0.1 deg) and `HIGH` (0.01 deg) spatial resolutions.\ - `VESSEL_ID`, `FLAG`, `GEARTYPE`, `FLAGANDGEARTYPE`. ``` r @@ -121,9 +121,9 @@ data_sf_combined <- splnr_get_gfw(region = "Australia", ### Visualization -To display the data, we load : +To display the data, we load :\ - The coastline from `rnaturalearth` package and modify it to get an sf -object, and we constrain it to the boundaries of the given data. +object, and we constrain it to the boundaries of the given data.\ - EEZ Polygons from `oceandatr` package ``` r @@ -156,7 +156,7 @@ eezs <- spatialgridr::get_boundary(name = "Australia", type = "eez", country_typ #### Year-on-year comparison We may need to compare different timeframes, such as seasons, to see if -there are any patterns. +there are any patterns.\ **Note :** As more vessels have adopted AIS (mainly in economically developed countries) since the deployment of these technologies, the rise in activities must be seen in the context of this increase and not @@ -209,7 +209,7 @@ details on AIS operation and limitations #### Hierarchy of vessels gear types : ![Fishing Classification -Hierarchy](https://globalfishingwatch.org/wp-content/uploads/figure6_fishing_classification_hierarchy-1.jpg) +Hierarchy](https://globalfishingwatch.org/wp-content/uploads/figure6_fishing_classification_hierarchy-1.jpg)\ *Source : * diff --git a/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-10-1.png b/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-10-1.png index cf88def..b2d50ca 100644 Binary files a/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-10-1.png and b/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-10-1.png differ diff --git a/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-13-1.png b/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-13-1.png index 896aa46..4231a98 100644 Binary files a/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-13-1.png and b/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-13-1.png differ diff --git a/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-15-1.png b/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-15-1.png index 375423f..ff1629c 100644 Binary files a/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-15-1.png and b/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-15-1.png differ diff --git a/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-7-1.png b/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-7-1.png index 67376b6..5013e9b 100644 Binary files a/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-7-1.png and b/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-7-1.png differ diff --git a/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-8-1.png b/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-8-1.png index 0322f1e..6eb3fc1 100644 Binary files a/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-8-1.png and b/docs/articles/GlobalFishingWatch_files/figure-html/unnamed-chunk-8-1.png differ diff --git a/docs/articles/MultipleUse.html b/docs/articles/MultipleUse.html index 8ca5630..ea2563b 100644 --- a/docs/articles/MultipleUse.html +++ b/docs/articles/MultipleUse.html @@ -211,7 +211,7 @@

Spatial planning including zones (ggSoln <- splnr_plot_solution(s1) + splnr_gg_add(PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme))

-

+

We can also have a look at how well the set target was met.

-

+

We can see that we now how planning units that are not selected, and planning units that have either been selected for zone 1 or zone 2.

@@ -425,7 +425,7 @@

Different features= PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

+

-

+

A boundary penalty can also be introduced to only one zone:

-

+

-

+

-

+

-

+

Alternative: linear constraints @@ -712,7 +712,7 @@

Alternative: linear constraints
 (gg_s8 <- splnr_plot_solution(s8) +
    splnr_gg_add(PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme))

-

+

NOTE: We can also use multiple linear constraints in the same plan, however, this might require a normalization of the input data to have the constraints in comparable units, and a careful tuning @@ -826,7 +826,7 @@

Common targets across zones= PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

+

The plot also reflects the observation above that PUs were more frequently selected in zone1. What if we wanted to constrain this, so that zone1 is less often selected and @@ -905,7 +905,7 @@

Targets across zones with PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

+

However, we also expect the cost for the spatial plan to be higher than the previous one.

@@ -919,13 +919,13 @@

Targets across some (but not all)
 targetAcrossSome <- Dict %>%
   dplyr::mutate(
-    target = dplyr::case_when(
+    target = dplyr::case_when(
       category == "Reptiles" ~ 30 / 100,
       category == "Mammals" ~ 10 / 100,
       category == "Sharks and rays" ~ 5 / 100,
       TRUE ~ 0
     ),
-    zone = dplyr::case_when(
+    zone = dplyr::case_when(
       category == "Reptiles" ~ list(c("zone1", "zone2")),
       category == "Mammals" ~ list("zone2"),
       category == "Sharks and rays" ~ list("zone3"),
@@ -1024,7 +1024,7 @@ 

Targets across some (but not all) PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))

-

+

Next steps diff --git a/docs/articles/spatialplanr.html b/docs/articles/spatialplanr.html index 74aa65a..98869b4 100644 --- a/docs/articles/spatialplanr.html +++ b/docs/articles/spatialplanr.html @@ -129,7 +129,7 @@

Create Planning Units
 (ggPU <- splnr_plot(df = PUs) +
    ggplot2::theme_bw()) # Plot Planning Units

-

+

If we want to add additional properties to our map, for example landmass or the boundary, we can use splnr_gg_add().

-

+

We can also use a customised ggplpot theme that can be passed as a list to splnr_gg_add() and that can then be used for all plots. For example:

@@ -160,7 +160,7 @@

Create Planning Units Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

+

Get the features @@ -218,7 +218,7 @@

Convert the probabilities to b cropOverlay = PUs, ggtheme = splnr_theme ) )

-

+

The suitable habitat for Green sea turtles as predicted by Aquamaps is restricted to few cells close to the coast. If we now compare this with the predicted suitable habitat for Humpback whales, we can see that @@ -233,7 +233,7 @@

Convert the probabilities to b PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

+

In our example, this was the only reason why we classified species as either representative if their suitable habitat is wide-ranging within the study region or important if they are restricted to a few number of @@ -251,7 +251,7 @@

Convert the probabilities to b PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

+

-

+

-

+

This plot shows the optimal solution for the planning region that meets the selected targets for the chosen features for the smallest area possible. The categorical map displays, which of the planning units were @@ -392,7 +392,7 @@

Visualization of the solution= PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

+

Note: In our example, cost is equal for all planning units.

@@ -418,7 +418,7 @@

Visualization of targets categoryFeatureCol = "nameCommon", nr = 1, showTarget = TRUE, )) -

+

For a circular bar plot, one additional step of data preparation needs to be done.

-

+

In our example, both scores label similar -coastal- planning units as most important for the spatial plan.

@@ -499,7 +499,7 @@

Comparing Spatial Plans PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

+

We will also include targets based on IUCN categories to prioritise species with an IUCN status of:

    @@ -557,7 +557,7 @@

    Set up second conservation problem PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

    +

    But we locked-in areas that were already existing Marine Protected Areas (MPAs). If we want to show the overlap between the selected Planning Units and the current MPAs, we can add this to the @@ -570,7 +570,7 @@

    Set up second conservation problem colorLockIn = "lightgrey", alphaLockIn = 0.2, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

    +

    If we instead only want to see the contours of the locked-in areas we can set typeLockIn = "Contours" in splnr_gg_add().

    @@ -582,7 +582,7 @@

    Set up second conservation problem colorLockIn = "lightgrey", alphaLockIn = 0.2, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

    +

    -

    +

    This plot shows how the first solution (without current MPAs) differs from the second solution (including current MPAs. The categorical map displays, which of the planning units were selected in solution 2 but @@ -607,7 +607,7 @@

    Visualize comparison(ggCorr <- splnr_plot_corrMat(CorrMat, AxisLabels = c("Solution 1", "Solution 2") )) -

    +

    The correlation matrix shows the similarity as the Cohen’s Kappa correlation between solution 1 and solution 2.

    @@ -637,7 +637,7 @@

    Plotting selection frequency= PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) -

    +

    diff --git a/docs/authors.html b/docs/authors.html index fb86fef..214aac4 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -53,14 +53,14 @@

    Authors

    Citation

    Source: DESCRIPTION

    -

    Everett J, Neubert S (2025). +

    Everett J, Neubert S (2026). spatialplanr: Help files for prioritzr Spatial Planning projects. R package version 0.7.0, https://github.com/SpatialPlanning/spatialplanr.

    @Manual{,
       title = {spatialplanr: Help files for prioritzr Spatial Planning projects},
       author = {Jason D. Everett and Sandra Neubert},
    -  year = {2025},
    +  year = {2026},
       note = {R package version 0.7.0},
       url = {https://github.com/SpatialPlanning/spatialplanr},
     }
    diff --git a/docs/authors.md b/docs/authors.md index 028ac95..8c7a542 100644 --- a/docs/authors.md +++ b/docs/authors.md @@ -12,14 +12,14 @@ Source: [`DESCRIPTION`](https://github.com/SpatialPlanning/spatialplanr/blob/HEAD/DESCRIPTION) -Everett J, Neubert S (2025). *spatialplanr: Help files for prioritzr +Everett J, Neubert S (2026). *spatialplanr: Help files for prioritzr Spatial Planning projects*. R package version 0.7.0, . @Manual{, title = {spatialplanr: Help files for prioritzr Spatial Planning projects}, author = {Jason D. Everett and Sandra Neubert}, - year = {2025}, + year = {2026}, note = {R package version 0.7.0}, url = {https://github.com/SpatialPlanning/spatialplanr}, } diff --git a/docs/deps/bootstrap-5.3.1/bootstrap.min.css b/docs/deps/bootstrap-5.3.1/bootstrap.min.css index b8a510c..bf26103 100644 --- a/docs/deps/bootstrap-5.3.1/bootstrap.min.css +++ b/docs/deps/bootstrap-5.3.1/bootstrap.min.css @@ -2,4 +2,4 @@ * Bootstrap v5.3.1 (https://getbootstrap.com/) * Copyright 2011-2023 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-default: #dee2e6;--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-default-rgb: 222,226,230;--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: RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));--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: .375rem;--bs-border-radius-sm: .25rem;--bs-border-radius-lg: .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: .25rem;--bs-focus-ring-opacity: .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: RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));--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:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-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;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-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:.875em;color:RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));background-color:RGBA(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.04);padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6);border-radius:.375rem}pre code{background-color:transparent;font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);background-color:RGBA(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.04);border-radius:.375rem;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}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:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-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}::-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:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-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;display:-webkit-flex;flex-wrap:wrap;-webkit-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;-webkit-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)}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media (min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media (min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media (min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media (min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media (min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.col{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-12{flex:0 0 auto;-webkit-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: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .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%;-webkit-flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-sm-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-sm-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-sm-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-sm-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-sm-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-sm-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-sm-12{flex:0 0 auto;-webkit-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: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .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%;-webkit-flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-md-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-md-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-md-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-md-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-md-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-md-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-md-12{flex:0 0 auto;-webkit-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: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .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%;-webkit-flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-lg-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-lg-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-lg-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-lg-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-lg-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-lg-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-lg-12{flex:0 0 auto;-webkit-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: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .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%;-webkit-flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xl-12{flex:0 0 auto;-webkit-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: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .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%;-webkit-flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xxl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xxl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xxl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xxl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xxl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xxl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xxl-12{flex:0 0 auto;-webkit-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: .25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: .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-body-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: rgba(0,0,0,0);--bs-table-striped-color: var(--bs-body-color);--bs-table-striped-bg: rgba(0,0,0,0.05);--bs-table-active-color: var(--bs-body-color);--bs-table-active-bg: rgba(0,0,0,0.1);--bs-table-hover-color: var(--bs-body-color);--bs-table-hover-bg: rgba(0,0,0,0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(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: #bacbe6;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #e2e3e5;--bs-table-border-color: #cbccce;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d1e7dd;--bs-table-border-color: #bcd0c7;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #cff4fc;--bs-table-border-color: #badce3;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #fff3cd;--bs-table-border-color: #e6dbb9;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8d7da;--bs-table-border-color: #dfc2c4;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #dfe0e1;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: #373b3e;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-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 .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:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color 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:.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 + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color 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 .25rem rgba(13,110,253,0.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme="dark"] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{--bs-form-check-bg: var(--bs-body-bg);width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-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"],.shiny-input-container .checkbox input[type="checkbox"],.shiny-input-container .checkbox-inline input[type="checkbox"],.shiny-input-container .radio input[type="checkbox"],.shiny-input-container .radio-inline input[type="checkbox"]{border-radius:.25em}.form-check-input[type="radio"],.shiny-input-container .checkbox input[type="radio"],.shiny-input-container .checkbox-inline input[type="radio"],.shiny-input-container .radio input[type="radio"],.shiny-input-container .radio-inline input[type="radio"]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type="checkbox"],.shiny-input-container .checkbox input:checked[type="checkbox"],.shiny-input-container .checkbox-inline input:checked[type="checkbox"],.shiny-input-container .radio input:checked[type="checkbox"],.shiny-input-container .radio-inline input:checked[type="checkbox"]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type="radio"],.shiny-input-container .checkbox input:checked[type="radio"],.shiny-input-container .checkbox-inline input:checked[type="radio"],.shiny-input-container .radio input:checked[type="radio"],.shiny-input-container .radio-inline input:checked[type="radio"]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox-inline input[type="checkbox"]:indeterminate,.shiny-input-container .radio input[type="checkbox"]:indeterminate,.shiny-input-container .radio-inline 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,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.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:.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;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,0.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,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:-.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-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:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-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:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity 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 .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:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.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), .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 .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), .65);transform:scale(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;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-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;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.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:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>: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:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.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 + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow: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 + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .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:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow: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 + .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 .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:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.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 + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow: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 + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .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:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow: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 + .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 .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:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .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: .65;--bs-btn-focus-box-shadow: 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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #000;--bs-btn-bg: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #e3e6ea;--bs-btn-hover-border-color: #e1e5e9;--bs-btn-focus-shadow-rgb: 189,192,196;--bs-btn-active-color: #000;--bs-btn-active-bg: #e5e8eb;--bs-btn-active-border-color: #e1e5e9;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #dee2e6;--bs-btn-disabled-border-color: #dee2e6}.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-default{--bs-btn-color: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #dee2e6;--bs-btn-hover-border-color: #dee2e6;--bs-btn-focus-shadow-rgb: 222,226,230;--bs-btn-active-color: #000;--bs-btn-active-bg: #dee2e6;--bs-btn-active-border-color: #dee2e6;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #dee2e6;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dee2e6;--bs-btn-bg: transparent;--bs-gradient: none}.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-btn-bg: transparent;--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-btn-bg: transparent;--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-btn-bg: transparent;--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-btn-bg: transparent;--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-btn-bg: transparent;--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-btn-bg: transparent;--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-btn-bg: transparent;--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-btn-bg: transparent;--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;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-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: .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: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size:.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:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: .5rem;--bs-dropdown-spacer: .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: .5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--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: .25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: .5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-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:.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;-webkit-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;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-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:.5625rem;padding-left:.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:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-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: .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;display:-webkit-flex;flex-wrap:wrap;-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-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 .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: .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;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-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,:where([data-bs-theme="light"]) .navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: .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: .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: .5rem;--bs-navbar-toggler-padding-y: .25rem;--bs-navbar-toggler-padding-x: .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: .25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out}.navbar{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-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;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-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: .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;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-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;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,:where([data-bs-theme="dark"]) .navbar,.navbar[data-bs-theme="dark"]{--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.55);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.75);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.25);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--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-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 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.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}:where(.navbar[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.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme="dark"] :where(.navbar:not([data-bs-theme="light"]) .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.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar[data-bs-theme="light"]{--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-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15)}.navbar[data-bs-theme="light"] .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%2833,37,41,0.75%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: .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: .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: .75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-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;-webkit-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;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-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='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: #86b7fe;--bs-accordion-btn-focus-box-shadow: 0 0 0 .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;display:-webkit-flex;align-items:center;-webkit-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;-webkit-flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[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: .5rem;--bs-breadcrumb-item-active-color: var(--bs-secondary-color);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-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: .75rem;--bs-pagination-padding-y: .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 .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;display:-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-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: .75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x: .5rem;--bs-pagination-padding-y: .25rem;--bs-pagination-font-size:.875rem;--bs-pagination-border-radius: var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x: .65em;--bs-badge-padding-y: .35em;--bs-badge-font-size:.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-default{--bs-alert-color: var(--bs-default-text-emphasis);--bs-alert-bg: var(--bs-default-bg-subtle);--bs-alert-border-color: var(--bs-default-border-subtle);--bs-alert-link-color: var(--bs-default-text-emphasis)}.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:.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;display:-webkit-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;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-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: .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;display:-webkit-flex;flex-direction:column;-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-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;-webkit-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;-webkit-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;-webkit-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;-webkit-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;-webkit-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;-webkit-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-default{--bs-list-group-color: var(--bs-default-text-emphasis);--bs-list-group-bg: var(--bs-default-bg-subtle);--bs-list-group-border-color: var(--bs-default-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-default-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-default-border-subtle);--bs-list-group-active-color: var(--bs-default-bg-subtle);--bs-list-group-active-bg: var(--bs-default-text-emphasis);--bs-list-group-active-border-color: var(--bs-default-text-emphasis)}.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: .5;--bs-btn-close-hover-opacity: .75;--bs-btn-close-focus-shadow: 0 0 0 .25rem rgba(13,110,253,0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: .25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-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: .75rem;--bs-toast-padding-y: .5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:.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;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-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: .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: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--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: .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;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-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: .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;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .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;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-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: 0 0.5rem 1rem rgba(0,0,0,0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media (min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media (min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: .5rem;--bs-tooltip-padding-y: .25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:.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: .9;--bs-tooltip-arrow-width: .8rem;--bs-tooltip-arrow-height: .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)}.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)}.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)}.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)}.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:.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: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: .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: .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)}.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)}.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)}.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)}.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;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-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;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .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 .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;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.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:.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")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-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;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 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,[data-bs-theme="dark"].carousel .carousel-control-prev-icon,[data-bs-theme="dark"].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme="dark"] .carousel .carousel-indicators [data-bs-target],[data-bs-theme="dark"].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme="dark"] .carousel .carousel-caption,[data-bs-theme="dark"].carousel .carousel-caption{color:#000}.spinner-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: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .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: .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: -.125em;--bs-spinner-animation-speed: .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: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-offcanvas-transition: transform .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;display:-webkit-flex;flex-direction:column;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-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;display:-webkit-flex;flex-direction:column;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-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;display:-webkit-flex;flex-direction:column;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-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;display:-webkit-flex;flex-direction:column;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-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;display:-webkit-flex;flex-direction:column;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-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;display:-webkit-flex;flex-direction:column;-webkit-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:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#000 !important;background-color:RGBA(var(--bs-default-rgb), var(--bs-bg-opacity, 1)) !important}.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-default{color:RGBA(var(--bs-default-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-default-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-default:hover,.link-default:focus{color:RGBA(229,232,235, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(229,232,235, var(--bs-link-underline-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:.375rem;align-items:center;-webkit-align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;-webkit-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;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-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;-webkit-align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{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:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-default{--bs-focus-ring-color: rgba(var(--bs-default-rgb), var(--bs-focus-ring-opacity))}.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-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !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: .1}.border-opacity-25{--bs-border-opacity: .25}.border-opacity-50{--bs-border-opacity: .5}.border-opacity-75{--bs-border-opacity: .75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.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 + .9vw) !important}.fs-3{font-size:calc(1.3rem + .6vw) !important}.fs-4{font-size:calc(1.275rem + .3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,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: .25}.text-opacity-50{--bs-text-opacity: .5}.text-opacity-75{--bs-text-opacity: .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: .1}.link-opacity-10-hover:hover{--bs-link-opacity: .1}.link-opacity-25{--bs-link-opacity: .25}.link-opacity-25-hover:hover{--bs-link-opacity: .25}.link-opacity-50{--bs-link-opacity: .5}.link-opacity-50-hover:hover{--bs-link-opacity: .5}.link-opacity-75{--bs-link-opacity: .75}.link-opacity-75-hover:hover{--bs-link-opacity: .75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-default{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-default-rgb), var(--bs-link-underline-opacity)) !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: .1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: .1}.link-underline-opacity-25{--bs-link-underline-opacity: .25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: .25}.link-underline-opacity-50{--bs-link-underline-opacity: .5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: .5}.link-underline-opacity-75{--bs-link-underline-opacity: .75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: .75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.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:rgba(0,0,0,0) !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: .1}.bg-opacity-25{--bs-bg-opacity: .25}.bg-opacity-50{--bs-bg-opacity: .5}.bg-opacity-75{--bs-bg-opacity: .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:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.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:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.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:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.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:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.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:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.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}}.bg-default{color:#000}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#000}.bg-warning{color:#000}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@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 th[align=left]{text-align:left}.table th[align=right]{text-align:right}.table th[align=center]{text-align:center}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre,.bslib-gap-spacing>.shiny-html-output>.bslib-mb-spacing,.bslib-gap-spacing>.shiny-html-output>.form-group,.bslib-gap-spacing>.shiny-html-output>p,.bslib-gap-spacing>.shiny-html-output>pre,.bslib-gap-spacing>.shiny-panel-conditional>.bslib-mb-spacing,.bslib-gap-spacing>.shiny-panel-conditional>.form-group,.bslib-gap-spacing>.shiny-panel-conditional>p,.bslib-gap-spacing>.shiny-panel-conditional>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.bg-blue{--bslib-color-bg: #0d6efd;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #0d6efd;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #6f42c1;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #6f42c1;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #d63384;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #d63384;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #dc3545;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #dc3545;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #fd7e14;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #fd7e14;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ffc107;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ffc107;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #198754;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #198754;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #0dcaf0;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #dee2e6}.bg-default{--bslib-color-bg: #dee2e6;--bslib-color-fg: #000}.text-primary{--bslib-color-fg: #0d6efd}.bg-primary{--bslib-color-bg: #0d6efd;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #6c757d}.bg-secondary{--bslib-color-bg: #6c757d;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #198754}.bg-success{--bslib-color-bg: #198754;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #0dcaf0}.bg-info{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000}.text-warning{--bslib-color-fg: #ffc107}.bg-warning{--bslib-color-bg: #ffc107;--bslib-color-fg: #000}.text-danger{--bslib-color-fg: #dc3545}.bg-danger{--bslib-color-bg: #dc3545;--bslib-color-fg: #fff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #212529}.bg-dark{--bslib-color-bg: #212529;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #3148f9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3148f9;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: #345ce5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #345ce5;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: #5d56cd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d56cd;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: #6057b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6057b3;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: #6d74a0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6d74a0;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6e8f9b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6e8f9b;color:#000}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: #1278b9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1278b9;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #000;--bslib-color-bg: #1592d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1592d4;color:#000}.bg-gradient-blue-cyan{--bslib-color-fg: #000;--bslib-color-bg: #0d93f8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #0d93f8;color:#000}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4236f6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4236f6;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: #6a24de;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #6a24de;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: #931ec6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #931ec6;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: #951fad;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #951fad;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: #a23c99;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a23c99;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #a35794;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a35794;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: #4740b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4740b3;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #425af1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #425af1;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4854d9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4854d9;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #6b2ed5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #6b2ed5;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: #983ca9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #983ca9;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: #9b3d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #9b3d8f;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: #a85a7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a85a7c;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #000;--bslib-color-bg: #a97577;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a97577;color:#000}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: #4d5e95;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4d5e95;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4f78b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4f78b0;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #000;--bslib-color-bg: #4878d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #4878d4;color:#000}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: #864bb4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #864bb4;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #a925b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #a925b0;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: #ad399c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #ad399c;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: #d8346b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #d8346b;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #000;--bslib-color-bg: #e65157;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e65157;color:#000}.bg-gradient-pink-yellow{--bslib-color-fg: #000;--bslib-color-bg: #e66c52;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #e66c52;color:#000}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: #8a5571;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8a5571;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #000;--bslib-color-bg: #8d6f8c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #8d6f8c;color:#000}.bg-gradient-pink-cyan{--bslib-color-fg: #000;--bslib-color-bg: #866faf;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #866faf;color:#000}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: #894c8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #894c8f;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #ad268a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #ad268a;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b03a77;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #b03a77;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: #da345e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #da345e;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #000;--bslib-color-bg: #e95231;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e95231;color:#000}.bg-gradient-red-yellow{--bslib-color-fg: #000;--bslib-color-bg: #ea6d2c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #ea6d2c;color:#000}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: #8e564b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8e564b;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #000;--bslib-color-bg: #917066;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #917066;color:#000}.bg-gradient-red-cyan{--bslib-color-fg: #000;--bslib-color-bg: #897189;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #897189;color:#000}.bg-gradient-orange-blue{--bslib-color-fg: #000;--bslib-color-bg: #9d7871;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9d7871;color:#000}.bg-gradient-orange-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c1526d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c1526d;color:#000}.bg-gradient-orange-purple{--bslib-color-fg: #000;--bslib-color-bg: #c46659;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c46659;color:#000}.bg-gradient-orange-pink{--bslib-color-fg: #000;--bslib-color-bg: #ed6041;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ed6041;color:#000}.bg-gradient-orange-red{--bslib-color-fg: #000;--bslib-color-bg: #f06128;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f06128;color:#000}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: #fe990f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #fe990f;color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: #a2822e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a2822e;color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: #a59c48;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a59c48;color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9d9c6c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9d9c6c;color:#000}.bg-gradient-yellow-blue{--bslib-color-fg: #000;--bslib-color-bg: #9ea069;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9ea069;color:#000}.bg-gradient-yellow-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c27a65;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c27a65;color:#000}.bg-gradient-yellow-purple{--bslib-color-fg: #000;--bslib-color-bg: #c58e51;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c58e51;color:#000}.bg-gradient-yellow-pink{--bslib-color-fg: #000;--bslib-color-bg: #ef8839;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ef8839;color:#000}.bg-gradient-yellow-red{--bslib-color-fg: #000;--bslib-color-bg: #f18920;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f18920;color:#000}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: #fea60c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #fea60c;color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #000;--bslib-color-bg: #a3aa26;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a3aa26;color:#000}.bg-gradient-yellow-teal{--bslib-color-fg: #000;--bslib-color-bg: #a6c441;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6c441;color:#000}.bg-gradient-yellow-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9ec564;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9ec564;color:#000}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: #147d98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #147d98;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #385793;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #385793;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: #3b6b80;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3b6b80;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: #656567;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #656567;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: #67664e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #67664e;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: #74833a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #74833a;color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #000;--bslib-color-bg: #759e35;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #759e35;color:#000}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: #1ca16f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1ca16f;color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #000;--bslib-color-bg: #14a292;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #14a292;color:#000}.bg-gradient-teal-blue{--bslib-color-fg: #000;--bslib-color-bg: #18a5c0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #18a5c0;color:#000}.bg-gradient-teal-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#000}.bg-gradient-teal-purple{--bslib-color-fg: #000;--bslib-color-bg: #4093a8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #4093a8;color:#000}.bg-gradient-teal-pink{--bslib-color-fg: #000;--bslib-color-bg: #698d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #698d8f;color:#000}.bg-gradient-teal-red{--bslib-color-fg: #000;--bslib-color-bg: #6b8e76;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6b8e76;color:#000}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: #78ab63;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #78ab63;color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #000;--bslib-color-bg: #79c65d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #79c65d;color:#000}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: #1daf7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1daf7c;color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #000;--bslib-color-bg: #18c9bb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #18c9bb;color:#000}.bg-gradient-cyan-blue{--bslib-color-fg: #000;--bslib-color-bg: #0da5f5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #0da5f5;color:#000}.bg-gradient-cyan-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3180f1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3180f1;color:#000}.bg-gradient-cyan-purple{--bslib-color-fg: #000;--bslib-color-bg: #3494dd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3494dd;color:#000}.bg-gradient-cyan-pink{--bslib-color-fg: #000;--bslib-color-bg: #5d8ec5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d8ec5;color:#000}.bg-gradient-cyan-red{--bslib-color-fg: #000;--bslib-color-bg: #608eac;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #608eac;color:#000}.bg-gradient-cyan-orange{--bslib-color-fg: #000;--bslib-color-bg: #6dac98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6dac98;color:#000}.bg-gradient-cyan-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6ec693;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6ec693;color:#000}.bg-gradient-cyan-green{--bslib-color-fg: #000;--bslib-color-bg: #12afb2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #12afb2;color:#000}.bg-gradient-cyan-teal{--bslib-color-fg: #000;--bslib-color-bg: #15cacc;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #15cacc;color:#000}.row>main{max-width:50rem}@media (max-width: 767.98px){.row>main{overflow-wrap:break-word;hyphens:auto}}@media (min-width: 1200px) and (max-width: 1399.98px){.container .row{justify-content:space-evenly}}@media (min-width: 1400px){body{font-size:18px}.col-md-3{margin-left:5rem}}.navbar{background:RGBA(var(--bs-body-color-rgb), 0.1);background:color-mix(in oklab, color-mix(in oklab, var(--bs-body-bg) 95%, var(--bs-primary)) 95%, var(--bs-body-color));line-height:initial}.nav-item .nav-link{border-radius:.375rem}.nav-item.active .nav-link{background:RGBA(var(--bs-body-color-rgb), 0.1)}.nav-item .nav-link:hover{background:RGBA(var(--bs-primary-rgb), 0.1)}.navbar>.container{align-items:baseline;-webkit-align-items:baseline}input[type="search"]{width:12rem}[aria-labelledby=dropdown-lightswitch] span.fa{opacity:0.5}@media (max-width: 991.98px){.algolia-autocomplete,input[type="search"],#navbar .dropdown-menu{width:100%}#navbar .dropdown-item{white-space:normal}input[type="search"]{margin:0.25rem 0}}.dropdown-menu{max-height:280px;overflow-y:auto}.headroom{will-change:transform;transition:transform 400ms ease}.headroom--pinned{transform:translateY(0%)}.headroom--unpinned{transform:translateY(-100%)}.row>main,.row>aside{margin-top:56px}html,body{scroll-padding:56px}@media (min-width: 576px){#toc{position:sticky;top:56px;max-height:calc(100vh - 56px - 1rem);overflow-y:auto}}aside h2,aside .h2{margin-top:1.5rem;font-size:1.25rem}aside .roles{color:RGBA(var(--bs-body-color-rgb), 0.8)}aside .list-unstyled li{margin-bottom:0.5rem}aside .dev-status .list-unstyled li{margin-bottom:0.1rem}@media (max-width: 767.98px){.row>aside{margin:0.5rem;width:calc(100vw - 1rem);background-color:RGBA(var(--bs-body-color-rgb), 0.1);border-color:var(--bs-border-color);border-radius:.375rem}.row>aside h2:first-child,.row>aside .h2:first-child{margin-top:1rem}}body{position:relative}#toc>.nav{margin-bottom:1rem}#toc>.nav a.nav-link{color:inherit;padding:0.25rem 0.5rem;margin-bottom:2px;border-radius:.375rem}#toc>.nav a.nav-link:hover,#toc>.nav a.nav-link:focus{background-color:RGBA(var(--bs-primary-rgb), 0.1)}#toc>.nav a.nav-link.active{background-color:RGBA(var(--bs-body-color-rgb), 0.1)}#toc>.nav .nav a.nav-link{margin-left:0.5rem}#toc>.nav .nav{display:none !important}#toc>.nav a.active+.nav{display:flex !important}footer{margin:1rem 0 1rem 0;padding-top:1rem;font-size:.875em;border-top:1px solid #dee2e6;background:rgba(0,0,0,0);color:RGBA(var(--bs-body-color-rgb), 0.8);display:flex;column-gap:1rem}@media (max-width: 575.98px){footer{flex-direction:column}}@media (min-width: 576px){footer .pkgdown-footer-right{text-align:right}}footer div{flex:1 1 auto}html,body{height:100%}body>.container{min-height:100%;display:flex;flex-direction:column}body>.container .row{flex:1 0 auto}main img{max-width:100%;height:auto}main table{display:block;overflow:auto}body{font-display:fallback}.page-header{border-bottom:1px solid var(--bs-border-color);padding-bottom:0.5rem;margin-bottom:0.5rem;margin-top:1.5rem}dl{margin-bottom:0}dd{padding-left:1.5rem;margin-bottom:0.25rem}h2,.h2{font-size:1.75rem;margin-top:1.5rem}h3,.h3{font-size:1.25rem;margin-top:1rem;font-weight:bold}h4,.h4{font-size:1.1rem;font-weight:bold}h5,.h5{font-size:1rem;font-weight:bold}summary{margin-bottom:0.5rem}details{margin-bottom:1rem}.html-widget{margin-bottom:1rem}a.anchor{display:none;margin-left:2px;vertical-align:top;width:Min(0.9em, 20px);height:Min(0.9em, 20px);background-image:url(../../link.svg);background-repeat:no-repeat;background-size:Min(0.9em, 20px) Min(0.9em, 20px);background-position:center center}h2:hover .anchor,.h2:hover .anchor,h2:target .anchor,.h2:target .anchor,h3:hover .anchor,.h3:hover .anchor,h3:target .anchor,.h3:target .anchor,h4:hover .anchor,.h4:hover .anchor,h4:target .anchor,.h4:target .anchor,h5:hover .anchor,.h5:hover .anchor,h5:target .anchor,.h5:target .anchor,h6:hover .anchor,.h6:hover .anchor,h6:target .anchor,.h6:target .anchor,dt:hover .anchor,dt:target .anchor{display:inline-block}dt:target,dt:target+dd{border-left:0.25rem solid var(--bs-primary);margin-left:-0.75rem}dt:target{padding-left:0.5rem}dt:target+dd{padding-left:2rem}.orcid{color:#A6CE39;margin-right:4px}.ror{height:16px;margin-right:4px}.fab{font-family:"Font Awesome 5 Brands" !important}img.logo{float:right;width:100px;margin-left:30px}.template-home img.logo{width:120px}@media (max-width: 575.98px){img.logo{width:80px}}@media (min-width: 576px){.page-header{min-height:88px}.template-home .page-header{min-height:104px}}.line-block{margin-bottom:1rem}.template-reference-index dt{font-weight:normal}.template-reference-index code{word-wrap:normal}.icon{float:right}.icon img{width:40px}a[href='#main']{position:absolute;margin:4px;padding:0.75rem;background-color:var(--bs-body-bg);text-decoration:none;z-index:2000}.lifecycle{color:var(--bs-secondary-color);background-color:var(--bs-secondary-bg);border-radius:5px}.lifecycle-stable{background-color:#108001;color:var(--bs-white)}.lifecycle-superseded{background-color:#074080;color:var(--bs-white)}.lifecycle-experimental,.lifecycle-deprecated{background-color:#fd8008;color:var(--bs-black)}a.footnote-ref{cursor:pointer}.popover{width:Min(100vw, 32rem);font-size:0.9rem;box-shadow:4px 4px 8px RGBA(var(--bs-body-color-rgb), 0.3)}.popover-body{padding:0.75rem}.popover-body p:last-child{margin-bottom:0}.tab-content{padding:1rem}.tabset-pills .tab-content{border:solid 1px #e5e5e5}.tab-content{display:flex}.tab-content>.tab-pane{display:block;visibility:hidden;margin-right:-100%;width:100%}.tab-content>.active{visibility:visible}div.csl-entry{clear:both}.hanging-indent div.csl-entry{margin-left:2em;text-indent:-2em}div.csl-left-margin{min-width:2em;float:left}div.csl-right-inline{margin-left:2em;padding-left:1em}div.csl-indent{margin-left:2em}pre,pre code{word-wrap:normal}[data-bs-theme="dark"] pre,[data-bs-theme="dark"] code{background-color:RGBA(var(--bs-body-color-rgb), 0.1)}[data-bs-theme="dark"] pre code{background:transparent}code{overflow-wrap:break-word}.hasCopyButton{position:relative}.btn-copy-ex{position:absolute;right:5px;top:5px;visibility:hidden}.hasCopyButton:hover button.btn-copy-ex{visibility:visible}pre{padding:0.75rem}pre div.gt-table{white-space:normal;margin-top:1rem}@media (max-width: 575.98px){div>div>pre{margin-left:calc(var(--bs-gutter-x) * -.5);margin-right:calc(var(--bs-gutter-x) * -.5);border-radius:0;padding-left:1rem;padding-right:1rem}.btn-copy-ex{right:calc(var(--bs-gutter-x) * -.5 + 5px)}}code a:any-link{color:inherit;text-decoration-color:RGBA(var(--bs-body-color-rgb), 0.6)}pre code{padding:0;background:transparent}pre code .error,pre code .warning{font-weight:bolder}pre .img img,pre .r-plt img{margin:5px 0;background-color:#fff}[data-bs-theme="dark"] pre img{opacity:0.66;transition:opacity 250ms ease-in-out}[data-bs-theme="dark"] pre img:hover,[data-bs-theme="dark"] pre img:focus,[data-bs-theme="dark"] pre img:active{opacity:1}@media print{code a:link:after,code a:visited:after{content:""}}a.sourceLine:hover{text-decoration:none}mark,.mark{background:linear-gradient(-100deg, RGBA(var(--bs-info-rgb), 0.2), RGBA(var(--bs-info-rgb), 0.7) 95%, RGBA(var(--bs-info-rgb), 0.1))}.algolia-autocomplete .aa-dropdown-menu{margin-top:0.5rem;padding:0.5rem 0.25rem;width:MAX(100%, 20rem);max-height:50vh;overflow-y:auto;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:.375rem}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;font-size:1rem;padding:0.5rem 0.25rem;line-height:1.3}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:hover{background-color:var(--bs-tertiary-bg);color:var(--bs-body-color)}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-details{text-decoration:underline;display:inline}span.smallcaps{font-variant:small-caps}ul.task-list{list-style:none}ul.task-list li input[type="checkbox"]{width:0.8em;margin:0 0.8em 0.2em -1em;vertical-align:middle}figure.figure{display:block}.quarto-layout-panel{margin-bottom:1em}.quarto-layout-panel>figure{width:100%}.quarto-layout-panel>figure>figcaption,.quarto-layout-panel>.panel-caption{margin-top:10pt}.quarto-layout-panel>.table-caption{margin-top:0px}.table-caption p{margin-bottom:0.5em}.quarto-layout-row{display:flex;flex-direction:row;align-items:flex-start}.quarto-layout-valign-top{align-items:flex-start}.quarto-layout-valign-bottom{align-items:flex-end}.quarto-layout-valign-center{align-items:center}.quarto-layout-cell{position:relative;margin-right:20px}.quarto-layout-cell:last-child{margin-right:0}.quarto-layout-cell figure,.quarto-layout-cell>p{margin:0.2em}.quarto-layout-cell img{max-width:100%}.quarto-layout-cell .html-widget{width:100% !important}.quarto-layout-cell div figure p{margin:0}.quarto-layout-cell figure{display:block;margin-inline-start:0;margin-inline-end:0}.quarto-layout-cell table{display:inline-table}.quarto-layout-cell-subref figcaption,figure .quarto-layout-row figure figcaption{text-align:center;font-style:italic}.quarto-figure{position:relative;margin-bottom:1em}.quarto-figure>figure{width:100%;margin-bottom:0}.quarto-figure-left>figure>p,.quarto-figure-left>figure>div{text-align:left}.quarto-figure-center>figure>p,.quarto-figure-center>figure>div{text-align:center}.quarto-figure-right>figure>p,.quarto-figure-right>figure>div{text-align:right}.quarto-figure>figure>div.cell-annotation,.quarto-figure>figure>div code{text-align:left}figure>p:empty{display:none}figure>p:first-child{margin-top:0;margin-bottom:0}figure>figcaption.quarto-float-caption-bottom{margin-bottom:0.5em}figure>figcaption.quarto-float-caption-top{margin-top:0.5em}:root{--mermaid-bg-color: transparent;--mermaid-edge-color: var(--bs-secondary);--mermaid-fg-color: var(--bs-body-color);--mermaid-fg-color--lighter: RGBA(var(--bs-body-color-rgb), 0.9);--mermaid-fg-color--lightest: RGBA(var(--bs-body-color-rgb), 0.8);--mermaid-font-family: var(--bs-body-font-family);--mermaid-label-bg-color: var(--bs-primary);--mermaid-label-fg-color: var(--bs-body-color);--mermaid-node-bg-color: RGBA(var(--bs-primary-rgb), 0.1);--mermaid-node-fg-color: var(--bs-primary)}[data-bs-theme="dark"] img.r-plt,[data-bs-theme="dark"] pre .r-plt.img img,[data-bs-theme="dark"] .cell-output-display img,[data-bs-theme="dark"] .html-widget{filter:invert(100%) hue-rotate(180deg)}[data-bs-theme="dark"] .no-invert-dark-mode img.r-plt,[data-bs-theme="dark"] .no-invert-dark-mode pre .r-plt.img img,[data-bs-theme="dark"] .no-invert-dark-mode .cell-output-display img,[data-bs-theme="dark"] .no-invert-dark-mode .html-widget{filter:invert(100%) hue-rotate(180deg)}pre{background-color:#f1f3f5}pre code{color:#003B4F}pre code span.al{color:#AD0000}pre code span.an{color:#5E5E5E}pre code span.at{color:#657422}pre code span.bn{color:#AD0000}pre code span.cf{color:#003B4F}pre code span.ch{color:#20794D}pre code span.cn{color:#8f5902}pre code span.co{color:#5E5E5E}pre code span.cv{color:#5E5E5E;font-style:italic}pre code span.do{color:#5E5E5E;font-style:italic}pre code span.dt{color:#AD0000}pre code span.dv{color:#AD0000}pre code span.er{color:#AD0000}pre code span.fl{color:#AD0000}pre code span.fu{color:#4758AB}pre code span.im{color:#00769E}pre code span.in{color:#5E5E5E}pre code span.kw{color:#003B4F}pre code span.op{color:#5E5E5E}pre code span.ot{color:#003B4F}pre code span.pp{color:#AD0000}pre code span.sc{color:#5E5E5E}pre code span.ss{color:#20794D}pre code span.st{color:#20794D}pre code span.va{color:#111111}pre code span.vs{color:#20794D}pre code span.wa{color:#5E5E5E;font-style:italic} + */: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-default: #dee2e6;--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-default-rgb: 222,226,230;--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: RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));--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: .375rem;--bs-border-radius-sm: .25rem;--bs-border-radius-lg: .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: .25rem;--bs-focus-ring-opacity: .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: RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));--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:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-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;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-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:.875em;color:RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));background-color:RGBA(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.04);padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6);border-radius:.375rem}pre code{background-color:transparent;font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);background-color:RGBA(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.04);border-radius:.375rem;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}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:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-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}::-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:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-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;display:-webkit-flex;flex-wrap:wrap;-webkit-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;-webkit-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)}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media (min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media (min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media (min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media (min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media (min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.col{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-12{flex:0 0 auto;-webkit-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: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .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%;-webkit-flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-sm-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-sm-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-sm-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-sm-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-sm-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-sm-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-sm-12{flex:0 0 auto;-webkit-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: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .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%;-webkit-flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-md-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-md-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-md-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-md-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-md-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-md-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-md-12{flex:0 0 auto;-webkit-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: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .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%;-webkit-flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-lg-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-lg-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-lg-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-lg-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-lg-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-lg-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-lg-12{flex:0 0 auto;-webkit-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: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .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%;-webkit-flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xl-12{flex:0 0 auto;-webkit-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: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .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%;-webkit-flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xxl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xxl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xxl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xxl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xxl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xxl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xxl-12{flex:0 0 auto;-webkit-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: .25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: .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-body-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: rgba(0,0,0,0);--bs-table-striped-color: var(--bs-body-color);--bs-table-striped-bg: rgba(0,0,0,0.05);--bs-table-active-color: var(--bs-body-color);--bs-table-active-bg: rgba(0,0,0,0.1);--bs-table-hover-color: var(--bs-body-color);--bs-table-hover-bg: rgba(0,0,0,0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(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: #bacbe6;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #e2e3e5;--bs-table-border-color: #cbccce;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d1e7dd;--bs-table-border-color: #bcd0c7;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #cff4fc;--bs-table-border-color: #badce3;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #fff3cd;--bs-table-border-color: #e6dbb9;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8d7da;--bs-table-border-color: #dfc2c4;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #dfe0e1;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: #373b3e;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-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 .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:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color 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:.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 + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color 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 .25rem rgba(13,110,253,0.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme="dark"] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{--bs-form-check-bg: var(--bs-body-bg);width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-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"],.shiny-input-container .checkbox input[type="checkbox"],.shiny-input-container .checkbox-inline input[type="checkbox"],.shiny-input-container .radio input[type="checkbox"],.shiny-input-container .radio-inline input[type="checkbox"]{border-radius:.25em}.form-check-input[type="radio"],.shiny-input-container .checkbox input[type="radio"],.shiny-input-container .checkbox-inline input[type="radio"],.shiny-input-container .radio input[type="radio"],.shiny-input-container .radio-inline input[type="radio"]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type="checkbox"],.shiny-input-container .checkbox input:checked[type="checkbox"],.shiny-input-container .checkbox-inline input:checked[type="checkbox"],.shiny-input-container .radio input:checked[type="checkbox"],.shiny-input-container .radio-inline input:checked[type="checkbox"]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type="radio"],.shiny-input-container .checkbox input:checked[type="radio"],.shiny-input-container .checkbox-inline input:checked[type="radio"],.shiny-input-container .radio input:checked[type="radio"],.shiny-input-container .radio-inline input:checked[type="radio"]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox-inline input[type="checkbox"]:indeterminate,.shiny-input-container .radio input[type="checkbox"]:indeterminate,.shiny-input-container .radio-inline 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,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.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:.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;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,0.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,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:-.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-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:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-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:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity 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 .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:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.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), .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 .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), .65);transform:scale(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;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-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;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.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:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>: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:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.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 + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow: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 + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .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:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow: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 + .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 .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:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.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 + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow: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 + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .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:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow: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 + .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 .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:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .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: .65;--bs-btn-focus-box-shadow: 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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #000;--bs-btn-bg: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #e3e6ea;--bs-btn-hover-border-color: #e1e5e9;--bs-btn-focus-shadow-rgb: 189,192,196;--bs-btn-active-color: #000;--bs-btn-active-bg: #e5e8eb;--bs-btn-active-border-color: #e1e5e9;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #dee2e6;--bs-btn-disabled-border-color: #dee2e6}.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-default{--bs-btn-color: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #dee2e6;--bs-btn-hover-border-color: #dee2e6;--bs-btn-focus-shadow-rgb: 222,226,230;--bs-btn-active-color: #000;--bs-btn-active-bg: #dee2e6;--bs-btn-active-border-color: #dee2e6;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #dee2e6;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dee2e6;--bs-btn-bg: transparent;--bs-gradient: none}.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-btn-bg: transparent;--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-btn-bg: transparent;--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-btn-bg: transparent;--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-btn-bg: transparent;--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-btn-bg: transparent;--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-btn-bg: transparent;--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-btn-bg: transparent;--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-btn-bg: transparent;--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;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-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: .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: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size:.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:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: .5rem;--bs-dropdown-spacer: .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: .5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--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: .25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: .5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-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:.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;-webkit-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;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-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:.5625rem;padding-left:.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:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-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: .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;display:-webkit-flex;flex-wrap:wrap;-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-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 .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: .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;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-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,:where([data-bs-theme="light"]) .navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: .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: .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: .5rem;--bs-navbar-toggler-padding-y: .25rem;--bs-navbar-toggler-padding-x: .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: .25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out}.navbar{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-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;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-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: .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;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-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;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,:where([data-bs-theme="dark"]) .navbar,.navbar[data-bs-theme="dark"]{--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.55);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.75);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.25);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--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-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 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.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}:where(.navbar[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.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme="dark"] :where(.navbar:not([data-bs-theme="light"]) .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.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar[data-bs-theme="light"]{--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-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15)}.navbar[data-bs-theme="light"] .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%2833,37,41,0.75%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: .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: .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: .75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-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;-webkit-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;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-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='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: #86b7fe;--bs-accordion-btn-focus-box-shadow: 0 0 0 .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;display:-webkit-flex;align-items:center;-webkit-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;-webkit-flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[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: .5rem;--bs-breadcrumb-item-active-color: var(--bs-secondary-color);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-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: .75rem;--bs-pagination-padding-y: .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 .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;display:-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-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: .75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x: .5rem;--bs-pagination-padding-y: .25rem;--bs-pagination-font-size:.875rem;--bs-pagination-border-radius: var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x: .65em;--bs-badge-padding-y: .35em;--bs-badge-font-size:.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-default{--bs-alert-color: var(--bs-default-text-emphasis);--bs-alert-bg: var(--bs-default-bg-subtle);--bs-alert-border-color: var(--bs-default-border-subtle);--bs-alert-link-color: var(--bs-default-text-emphasis)}.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:.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;display:-webkit-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;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-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: .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;display:-webkit-flex;flex-direction:column;-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-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;-webkit-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;-webkit-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;-webkit-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;-webkit-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;-webkit-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;-webkit-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-default{--bs-list-group-color: var(--bs-default-text-emphasis);--bs-list-group-bg: var(--bs-default-bg-subtle);--bs-list-group-border-color: var(--bs-default-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-default-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-default-border-subtle);--bs-list-group-active-color: var(--bs-default-bg-subtle);--bs-list-group-active-bg: var(--bs-default-text-emphasis);--bs-list-group-active-border-color: var(--bs-default-text-emphasis)}.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: .5;--bs-btn-close-hover-opacity: .75;--bs-btn-close-focus-shadow: 0 0 0 .25rem rgba(13,110,253,0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: .25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-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: .75rem;--bs-toast-padding-y: .5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:.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;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-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: .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: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--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: .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;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-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: .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;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .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;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-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: 0 0.5rem 1rem rgba(0,0,0,0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media (min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media (min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: .5rem;--bs-tooltip-padding-y: .25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:.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: .9;--bs-tooltip-arrow-width: .8rem;--bs-tooltip-arrow-height: .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)}.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)}.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)}.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)}.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:.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: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: .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: .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)}.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)}.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)}.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)}.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;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-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;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .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 .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;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.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:.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")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-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;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 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,[data-bs-theme="dark"].carousel .carousel-control-prev-icon,[data-bs-theme="dark"].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme="dark"] .carousel .carousel-indicators [data-bs-target],[data-bs-theme="dark"].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme="dark"] .carousel .carousel-caption,[data-bs-theme="dark"].carousel .carousel-caption{color:#000}.spinner-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: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .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: .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: -.125em;--bs-spinner-animation-speed: .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: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-offcanvas-transition: transform .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;display:-webkit-flex;flex-direction:column;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-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;display:-webkit-flex;flex-direction:column;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-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;display:-webkit-flex;flex-direction:column;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-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;display:-webkit-flex;flex-direction:column;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-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;display:-webkit-flex;flex-direction:column;-webkit-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;display:-webkit-flex;flex-grow:0;-webkit-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;display:-webkit-flex;flex-direction:column;-webkit-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:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#000 !important;background-color:RGBA(var(--bs-default-rgb), var(--bs-bg-opacity, 1)) !important}.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-default{color:RGBA(var(--bs-default-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-default-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-default:hover,.link-default:focus{color:RGBA(229,232,235, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(229,232,235, var(--bs-link-underline-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:.375rem;align-items:center;-webkit-align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;-webkit-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;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-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;-webkit-align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{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:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-default{--bs-focus-ring-color: rgba(var(--bs-default-rgb), var(--bs-focus-ring-opacity))}.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-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !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: .1}.border-opacity-25{--bs-border-opacity: .25}.border-opacity-50{--bs-border-opacity: .5}.border-opacity-75{--bs-border-opacity: .75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.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 + .9vw) !important}.fs-3{font-size:calc(1.3rem + .6vw) !important}.fs-4{font-size:calc(1.275rem + .3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,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: .25}.text-opacity-50{--bs-text-opacity: .5}.text-opacity-75{--bs-text-opacity: .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: .1}.link-opacity-10-hover:hover{--bs-link-opacity: .1}.link-opacity-25{--bs-link-opacity: .25}.link-opacity-25-hover:hover{--bs-link-opacity: .25}.link-opacity-50{--bs-link-opacity: .5}.link-opacity-50-hover:hover{--bs-link-opacity: .5}.link-opacity-75{--bs-link-opacity: .75}.link-opacity-75-hover:hover{--bs-link-opacity: .75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-default{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-default-rgb), var(--bs-link-underline-opacity)) !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: .1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: .1}.link-underline-opacity-25{--bs-link-underline-opacity: .25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: .25}.link-underline-opacity-50{--bs-link-underline-opacity: .5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: .5}.link-underline-opacity-75{--bs-link-underline-opacity: .75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: .75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.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:rgba(0,0,0,0) !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: .1}.bg-opacity-25{--bs-bg-opacity: .25}.bg-opacity-50{--bs-bg-opacity: .5}.bg-opacity-75{--bs-bg-opacity: .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:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.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:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.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:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.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:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.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:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.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}}.bg-default{color:#000}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#000}.bg-warning{color:#000}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@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 th[align=left]{text-align:left}.table th[align=right]{text-align:right}.table th[align=center]{text-align:center}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre,.bslib-gap-spacing>.shiny-html-output>.bslib-mb-spacing,.bslib-gap-spacing>.shiny-html-output>.form-group,.bslib-gap-spacing>.shiny-html-output>p,.bslib-gap-spacing>.shiny-html-output>pre,.bslib-gap-spacing>.shiny-panel-conditional>.bslib-mb-spacing,.bslib-gap-spacing>.shiny-panel-conditional>.form-group,.bslib-gap-spacing>.shiny-panel-conditional>p,.bslib-gap-spacing>.shiny-panel-conditional>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.nav-link[disabled]{display:none !important}.bg-blue{--bslib-color-bg: #0d6efd;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #0d6efd;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #6f42c1;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #6f42c1;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #d63384;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #d63384;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #dc3545;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #dc3545;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #fd7e14;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #fd7e14;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ffc107;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ffc107;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #198754;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #198754;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #0dcaf0;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #dee2e6}.bg-default{--bslib-color-bg: #dee2e6;--bslib-color-fg: #000}.text-primary{--bslib-color-fg: #0d6efd}.bg-primary{--bslib-color-bg: #0d6efd;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #6c757d}.bg-secondary{--bslib-color-bg: #6c757d;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #198754}.bg-success{--bslib-color-bg: #198754;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #0dcaf0}.bg-info{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000}.text-warning{--bslib-color-fg: #ffc107}.bg-warning{--bslib-color-bg: #ffc107;--bslib-color-fg: #000}.text-danger{--bslib-color-fg: #dc3545}.bg-danger{--bslib-color-bg: #dc3545;--bslib-color-fg: #fff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #212529}.bg-dark{--bslib-color-bg: #212529;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #3148f9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3148f9;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: #345ce5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #345ce5;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: #5d56cd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d56cd;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: #6057b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6057b3;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: #6d74a0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6d74a0;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6e8f9b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6e8f9b;color:#000}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: #1278b9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1278b9;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #000;--bslib-color-bg: #1592d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1592d4;color:#000}.bg-gradient-blue-cyan{--bslib-color-fg: #000;--bslib-color-bg: #0d93f8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #0d93f8;color:#000}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4236f6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4236f6;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: #6a24de;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #6a24de;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: #931ec6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #931ec6;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: #951fad;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #951fad;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: #a23c99;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a23c99;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #a35794;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a35794;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: #4740b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4740b3;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #425af1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #425af1;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4854d9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4854d9;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #6b2ed5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #6b2ed5;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: #983ca9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #983ca9;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: #9b3d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #9b3d8f;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: #a85a7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a85a7c;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #000;--bslib-color-bg: #a97577;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a97577;color:#000}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: #4d5e95;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4d5e95;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4f78b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4f78b0;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #000;--bslib-color-bg: #4878d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #4878d4;color:#000}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: #864bb4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #864bb4;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #a925b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #a925b0;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: #ad399c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #ad399c;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: #d8346b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #d8346b;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #000;--bslib-color-bg: #e65157;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e65157;color:#000}.bg-gradient-pink-yellow{--bslib-color-fg: #000;--bslib-color-bg: #e66c52;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #e66c52;color:#000}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: #8a5571;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8a5571;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #000;--bslib-color-bg: #8d6f8c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #8d6f8c;color:#000}.bg-gradient-pink-cyan{--bslib-color-fg: #000;--bslib-color-bg: #866faf;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #866faf;color:#000}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: #894c8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #894c8f;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #ad268a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #ad268a;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b03a77;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #b03a77;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: #da345e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #da345e;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #000;--bslib-color-bg: #e95231;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e95231;color:#000}.bg-gradient-red-yellow{--bslib-color-fg: #000;--bslib-color-bg: #ea6d2c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #ea6d2c;color:#000}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: #8e564b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8e564b;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #000;--bslib-color-bg: #917066;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #917066;color:#000}.bg-gradient-red-cyan{--bslib-color-fg: #000;--bslib-color-bg: #897189;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #897189;color:#000}.bg-gradient-orange-blue{--bslib-color-fg: #000;--bslib-color-bg: #9d7871;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9d7871;color:#000}.bg-gradient-orange-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c1526d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c1526d;color:#000}.bg-gradient-orange-purple{--bslib-color-fg: #000;--bslib-color-bg: #c46659;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c46659;color:#000}.bg-gradient-orange-pink{--bslib-color-fg: #000;--bslib-color-bg: #ed6041;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ed6041;color:#000}.bg-gradient-orange-red{--bslib-color-fg: #000;--bslib-color-bg: #f06128;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f06128;color:#000}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: #fe990f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #fe990f;color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: #a2822e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a2822e;color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: #a59c48;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a59c48;color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9d9c6c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9d9c6c;color:#000}.bg-gradient-yellow-blue{--bslib-color-fg: #000;--bslib-color-bg: #9ea069;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9ea069;color:#000}.bg-gradient-yellow-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c27a65;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c27a65;color:#000}.bg-gradient-yellow-purple{--bslib-color-fg: #000;--bslib-color-bg: #c58e51;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c58e51;color:#000}.bg-gradient-yellow-pink{--bslib-color-fg: #000;--bslib-color-bg: #ef8839;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ef8839;color:#000}.bg-gradient-yellow-red{--bslib-color-fg: #000;--bslib-color-bg: #f18920;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f18920;color:#000}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: #fea60c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #fea60c;color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #000;--bslib-color-bg: #a3aa26;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a3aa26;color:#000}.bg-gradient-yellow-teal{--bslib-color-fg: #000;--bslib-color-bg: #a6c441;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6c441;color:#000}.bg-gradient-yellow-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9ec564;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9ec564;color:#000}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: #147d98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #147d98;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #385793;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #385793;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: #3b6b80;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3b6b80;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: #656567;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #656567;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: #67664e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #67664e;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: #74833a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #74833a;color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #000;--bslib-color-bg: #759e35;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #759e35;color:#000}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: #1ca16f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1ca16f;color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #000;--bslib-color-bg: #14a292;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #14a292;color:#000}.bg-gradient-teal-blue{--bslib-color-fg: #000;--bslib-color-bg: #18a5c0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #18a5c0;color:#000}.bg-gradient-teal-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#000}.bg-gradient-teal-purple{--bslib-color-fg: #000;--bslib-color-bg: #4093a8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #4093a8;color:#000}.bg-gradient-teal-pink{--bslib-color-fg: #000;--bslib-color-bg: #698d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #698d8f;color:#000}.bg-gradient-teal-red{--bslib-color-fg: #000;--bslib-color-bg: #6b8e76;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6b8e76;color:#000}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: #78ab63;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #78ab63;color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #000;--bslib-color-bg: #79c65d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #79c65d;color:#000}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: #1daf7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1daf7c;color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #000;--bslib-color-bg: #18c9bb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #18c9bb;color:#000}.bg-gradient-cyan-blue{--bslib-color-fg: #000;--bslib-color-bg: #0da5f5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #0da5f5;color:#000}.bg-gradient-cyan-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3180f1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3180f1;color:#000}.bg-gradient-cyan-purple{--bslib-color-fg: #000;--bslib-color-bg: #3494dd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3494dd;color:#000}.bg-gradient-cyan-pink{--bslib-color-fg: #000;--bslib-color-bg: #5d8ec5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d8ec5;color:#000}.bg-gradient-cyan-red{--bslib-color-fg: #000;--bslib-color-bg: #608eac;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #608eac;color:#000}.bg-gradient-cyan-orange{--bslib-color-fg: #000;--bslib-color-bg: #6dac98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6dac98;color:#000}.bg-gradient-cyan-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6ec693;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6ec693;color:#000}.bg-gradient-cyan-green{--bslib-color-fg: #000;--bslib-color-bg: #12afb2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #12afb2;color:#000}.bg-gradient-cyan-teal{--bslib-color-fg: #000;--bslib-color-bg: #15cacc;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #15cacc;color:#000}.row>main{max-width:50rem}@media (max-width: 767.98px){.row>main{overflow-wrap:break-word;hyphens:auto}}@media (min-width: 1200px) and (max-width: 1399.98px){.container .row{justify-content:space-evenly}}@media (min-width: 1400px){body{font-size:18px}.col-md-3{margin-left:5rem}}.navbar{background:RGBA(var(--bs-body-color-rgb), 0.1);background:color-mix(in oklab, color-mix(in oklab, var(--bs-body-bg) 95%, var(--bs-primary)) 95%, var(--bs-body-color));line-height:initial}.nav-item .nav-link{border-radius:.375rem}.nav-item.active .nav-link{background:RGBA(var(--bs-body-color-rgb), 0.1)}.nav-item .nav-link:hover{background:RGBA(var(--bs-primary-rgb), 0.1)}.navbar>.container{align-items:baseline;-webkit-align-items:baseline}input[type="search"]{width:12rem}[aria-labelledby=dropdown-lightswitch] span.fa{opacity:0.5}@media (max-width: 991.98px){.algolia-autocomplete,input[type="search"],#navbar .dropdown-menu{width:100%}#navbar .dropdown-item{white-space:normal}input[type="search"]{margin:0.25rem 0}}.dropdown-menu{max-height:280px;overflow-y:auto}.headroom{will-change:transform;transition:transform 400ms ease}.headroom--pinned{transform:translateY(0%)}.headroom--unpinned{transform:translateY(-100%)}.row>main,.row>aside{margin-top:56px}html,body{scroll-padding:56px}@media (min-width: 576px){#toc{position:sticky;top:56px;max-height:calc(100vh - 56px - 1rem);overflow-y:auto}}aside h2,aside .h2{margin-top:1.5rem;font-size:1.25rem}aside .roles{color:RGBA(var(--bs-body-color-rgb), 0.8)}aside .list-unstyled li{margin-bottom:0.5rem}aside .dev-status .list-unstyled li{margin-bottom:0.1rem}@media (max-width: 767.98px){.row>aside{margin:0.5rem;width:calc(100vw - 1rem);background-color:RGBA(var(--bs-body-color-rgb), 0.1);border-color:var(--bs-border-color);border-radius:.375rem}.row>aside h2:first-child,.row>aside .h2:first-child{margin-top:1rem}}body{position:relative}#toc>.nav{margin-bottom:1rem}#toc>.nav a.nav-link{color:inherit;padding:0.25rem 0.5rem;margin-bottom:2px;border-radius:.375rem}#toc>.nav a.nav-link:hover,#toc>.nav a.nav-link:focus{background-color:RGBA(var(--bs-primary-rgb), 0.1)}#toc>.nav a.nav-link.active{background-color:RGBA(var(--bs-body-color-rgb), 0.1)}#toc>.nav .nav a.nav-link{margin-left:0.5rem}#toc>.nav .nav{display:none !important}#toc>.nav a.active+.nav{display:flex !important}footer{margin:1rem 0 1rem 0;padding-top:1rem;font-size:.875em;border-top:1px solid #dee2e6;background:rgba(0,0,0,0);color:RGBA(var(--bs-body-color-rgb), 0.8);display:flex;column-gap:1rem}@media (max-width: 575.98px){footer{flex-direction:column}}@media (min-width: 576px){footer .pkgdown-footer-right{text-align:right}}footer div{flex:1 1 auto}html,body{height:100%}body>.container{min-height:100%;display:flex;flex-direction:column}body>.container .row{flex:1 0 auto}main img{max-width:100%;height:auto}main table{display:block;overflow:auto}body{font-display:fallback}.page-header{border-bottom:1px solid var(--bs-border-color);padding-bottom:0.5rem;margin-bottom:0.5rem;margin-top:1.5rem}dl{margin-bottom:0}dd{padding-left:1.5rem;margin-bottom:0.25rem}h2,.h2{font-size:1.75rem;margin-top:1.5rem}h3,.h3{font-size:1.25rem;margin-top:1rem;font-weight:bold}h4,.h4{font-size:1.1rem;font-weight:bold}h5,.h5{font-size:1rem;font-weight:bold}summary{margin-bottom:0.5rem}details{margin-bottom:1rem}.html-widget{margin-bottom:1rem}a.anchor{display:none;margin-left:2px;vertical-align:top;width:Min(0.9em, 20px);height:Min(0.9em, 20px);background-image:url(../../link.svg);background-repeat:no-repeat;background-size:Min(0.9em, 20px) Min(0.9em, 20px);background-position:center center}h2:hover .anchor,.h2:hover .anchor,h2:target .anchor,.h2:target .anchor,h3:hover .anchor,.h3:hover .anchor,h3:target .anchor,.h3:target .anchor,h4:hover .anchor,.h4:hover .anchor,h4:target .anchor,.h4:target .anchor,h5:hover .anchor,.h5:hover .anchor,h5:target .anchor,.h5:target .anchor,h6:hover .anchor,.h6:hover .anchor,h6:target .anchor,.h6:target .anchor,dt:hover .anchor,dt:target .anchor{display:inline-block}dt:target,dt:target+dd{border-left:0.25rem solid var(--bs-primary);margin-left:-0.75rem}dt:target{padding-left:0.5rem}dt:target+dd{padding-left:2rem}.orcid{color:#A6CE39;margin-right:4px}.ror{height:16px;margin-right:4px}.fab{font-family:"Font Awesome 5 Brands" !important}img.logo{float:right;width:100px;margin-left:30px}.template-home img.logo{width:120px}@media (max-width: 575.98px){img.logo{width:80px}}@media (min-width: 576px){.page-header{min-height:88px}.template-home .page-header{min-height:104px}}.line-block{margin-bottom:1rem}.template-reference-index dt{font-weight:normal}.template-reference-index code{word-wrap:normal}.icon{float:right}.icon img{width:40px}a[href='#main']{position:absolute;margin:4px;padding:0.75rem;background-color:var(--bs-body-bg);text-decoration:none;z-index:2000}.lifecycle{color:var(--bs-secondary-color);background-color:var(--bs-secondary-bg);border-radius:5px}.lifecycle-stable{background-color:#108001;color:var(--bs-white)}.lifecycle-superseded{background-color:#074080;color:var(--bs-white)}.lifecycle-experimental,.lifecycle-deprecated{background-color:#fd8008;color:var(--bs-black)}a.footnote-ref{cursor:pointer}.popover{width:Min(100vw, 32rem);font-size:0.9rem;box-shadow:4px 4px 8px RGBA(var(--bs-body-color-rgb), 0.3)}.popover-body{padding:0.75rem}.popover-body p:last-child{margin-bottom:0}.tab-content{padding:1rem}.tabset-pills .tab-content{border:solid 1px #e5e5e5}.tab-content{display:flex}.tab-content>.tab-pane{display:block;visibility:hidden;margin-right:-100%;width:100%}.tab-content>.active{visibility:visible}div.csl-entry{clear:both}.hanging-indent div.csl-entry{margin-left:2em;text-indent:-2em}div.csl-left-margin{min-width:2em;float:left}div.csl-right-inline{margin-left:2em;padding-left:1em}div.csl-indent{margin-left:2em}pre,pre code{word-wrap:normal}[data-bs-theme="dark"] pre,[data-bs-theme="dark"] code{background-color:RGBA(var(--bs-body-color-rgb), 0.1)}[data-bs-theme="dark"] pre code{background:transparent}code{overflow-wrap:break-word}.hasCopyButton{position:relative}.btn-copy-ex{position:absolute;right:5px;top:5px;visibility:hidden}.hasCopyButton:hover button.btn-copy-ex{visibility:visible}pre{padding:0.75rem}pre div.gt-table{white-space:normal;margin-top:1rem}@media (max-width: 575.98px){div>div>pre{margin-left:calc(var(--bs-gutter-x) * -.5);margin-right:calc(var(--bs-gutter-x) * -.5);border-radius:0;padding-left:1rem;padding-right:1rem}.btn-copy-ex{right:calc(var(--bs-gutter-x) * -.5 + 5px)}}code a:any-link{color:inherit;text-decoration-color:RGBA(var(--bs-body-color-rgb), 0.6)}pre code{padding:0;background:transparent}pre code .error,pre code .warning{font-weight:bolder}pre .img img,pre .r-plt img{margin:5px 0;background-color:#fff}[data-bs-theme="dark"] pre img{opacity:0.66;transition:opacity 250ms ease-in-out}[data-bs-theme="dark"] pre img:hover,[data-bs-theme="dark"] pre img:focus,[data-bs-theme="dark"] pre img:active{opacity:1}@media print{code a:link:after,code a:visited:after{content:""}}a.sourceLine:hover{text-decoration:none}mark,.mark{background:linear-gradient(-100deg, RGBA(var(--bs-info-rgb), 0.2), RGBA(var(--bs-info-rgb), 0.7) 95%, RGBA(var(--bs-info-rgb), 0.1))}.algolia-autocomplete .aa-dropdown-menu{margin-top:0.5rem;padding:0.5rem 0.25rem;width:MAX(100%, 20rem);max-height:50vh;overflow-y:auto;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:.375rem}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;font-size:1rem;padding:0.5rem 0.25rem;line-height:1.3}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:hover{background-color:var(--bs-tertiary-bg);color:var(--bs-body-color)}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-details{text-decoration:underline;display:inline}span.smallcaps{font-variant:small-caps}ul.task-list{list-style:none}ul.task-list li input[type="checkbox"]{width:0.8em;margin:0 0.8em 0.2em -1em;vertical-align:middle}figure.figure{display:block}.quarto-layout-panel{margin-bottom:1em}.quarto-layout-panel>figure{width:100%}.quarto-layout-panel>figure>figcaption,.quarto-layout-panel>.panel-caption{margin-top:10pt}.quarto-layout-panel>.table-caption{margin-top:0px}.table-caption p{margin-bottom:0.5em}.quarto-layout-row{display:flex;flex-direction:row;align-items:flex-start}.quarto-layout-valign-top{align-items:flex-start}.quarto-layout-valign-bottom{align-items:flex-end}.quarto-layout-valign-center{align-items:center}.quarto-layout-cell{position:relative;margin-right:20px}.quarto-layout-cell:last-child{margin-right:0}.quarto-layout-cell figure,.quarto-layout-cell>p{margin:0.2em}.quarto-layout-cell img{max-width:100%}.quarto-layout-cell .html-widget{width:100% !important}.quarto-layout-cell div figure p{margin:0}.quarto-layout-cell figure{display:block;margin-inline-start:0;margin-inline-end:0}.quarto-layout-cell table{display:inline-table}.quarto-layout-cell-subref figcaption,figure .quarto-layout-row figure figcaption{text-align:center;font-style:italic}.quarto-figure{position:relative;margin-bottom:1em}.quarto-figure>figure{width:100%;margin-bottom:0}.quarto-figure-left>figure>p,.quarto-figure-left>figure>div{text-align:left}.quarto-figure-center>figure>p,.quarto-figure-center>figure>div{text-align:center}.quarto-figure-right>figure>p,.quarto-figure-right>figure>div{text-align:right}.quarto-figure>figure>div.cell-annotation,.quarto-figure>figure>div code{text-align:left}figure>p:empty{display:none}figure>p:first-child{margin-top:0;margin-bottom:0}figure>figcaption.quarto-float-caption-bottom{margin-bottom:0.5em}figure>figcaption.quarto-float-caption-top{margin-top:0.5em}:root{--mermaid-bg-color: transparent;--mermaid-edge-color: var(--bs-secondary);--mermaid-fg-color: var(--bs-body-color);--mermaid-fg-color--lighter: RGBA(var(--bs-body-color-rgb), 0.9);--mermaid-fg-color--lightest: RGBA(var(--bs-body-color-rgb), 0.8);--mermaid-font-family: var(--bs-body-font-family);--mermaid-label-bg-color: var(--bs-primary);--mermaid-label-fg-color: var(--bs-body-color);--mermaid-node-bg-color: RGBA(var(--bs-primary-rgb), 0.1);--mermaid-node-fg-color: var(--bs-primary)}[data-bs-theme="dark"] img.r-plt,[data-bs-theme="dark"] pre .r-plt.img img,[data-bs-theme="dark"] .cell-output-display img,[data-bs-theme="dark"] .html-widget{filter:invert(100%) hue-rotate(180deg)}[data-bs-theme="dark"] .no-invert-dark-mode img.r-plt,[data-bs-theme="dark"] .no-invert-dark-mode pre .r-plt.img img,[data-bs-theme="dark"] .no-invert-dark-mode .cell-output-display img,[data-bs-theme="dark"] .no-invert-dark-mode .html-widget{filter:invert(100%) hue-rotate(180deg)}pre{background-color:#f1f3f5}pre code{color:#003B4F}pre code span.al{color:#AD0000}pre code span.an{color:#5E5E5E}pre code span.at{color:#657422}pre code span.bn{color:#AD0000}pre code span.cf{color:#003B4F}pre code span.ch{color:#20794D}pre code span.cn{color:#8f5902}pre code span.co{color:#5E5E5E}pre code span.cv{color:#5E5E5E;font-style:italic}pre code span.do{color:#5E5E5E;font-style:italic}pre code span.dt{color:#AD0000}pre code span.dv{color:#AD0000}pre code span.er{color:#AD0000}pre code span.fl{color:#AD0000}pre code span.fu{color:#4758AB}pre code span.im{color:#00769E}pre code span.in{color:#5E5E5E}pre code span.kw{color:#003B4F}pre code span.op{color:#5E5E5E}pre code span.ot{color:#003B4F}pre code span.pp{color:#AD0000}pre code span.sc{color:#5E5E5E}pre code span.ss{color:#20794D}pre code span.st{color:#20794D}pre code span.va{color:#111111}pre code span.vs{color:#20794D}pre code span.wa{color:#5E5E5E;font-style:italic} diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 9900562..103da3e 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -1,4 +1,4 @@ -pandoc: 3.8.2.1 +pandoc: '3.9' pkgdown: 2.2.0 pkgdown_sha: ~ articles: @@ -6,7 +6,7 @@ articles: GlobalFishingWatch: GlobalFishingWatch.html MultipleUse: MultipleUse.html spatialplanr: spatialplanr.html -last_built: 2025-11-18T01:06Z +last_built: 2026-02-24T02:33Z urls: reference: https://mathmarecol.github.io/spatialplanr/reference article: https://mathmarecol.github.io/spatialplanr/articles diff --git a/docs/reference/splnr_get_boundary.md b/docs/reference/splnr_get_boundary.md index ecd8b13..8b5f28a 100644 --- a/docs/reference/splnr_get_boundary.md +++ b/docs/reference/splnr_get_boundary.md @@ -38,14 +38,14 @@ splnr_get_boundary(Limits, Type = NULL, res = 1, cCRS = "ESRI:54009") - res: - `[numeric(1)]` + `[numeric(1)]`\ The resolution (in decimal degrees) used to construct the polygon vertices when `Limits` is numeric or `"Global"`. Defaults to `1`. Must be a positive number. - cCRS: - `[character(1)]` + `[character(1)]`\ The coordinate reference system (CRS) for the output `sf` object. Can be a PROJ4 string or an EPSG code. Defaults to `"ESRI:54009"` (Mollweide). diff --git a/docs/reference/splnr_get_distCoast.md b/docs/reference/splnr_get_distCoast.md index 21000c2..79aea07 100644 --- a/docs/reference/splnr_get_distCoast.md +++ b/docs/reference/splnr_get_distCoast.md @@ -15,19 +15,19 @@ splnr_get_distCoast(dat_sf, custom_coast = NULL, res = "medium") - dat_sf: - `[sf]` + `[sf]`\ An `sf` object containing polygon or point features representing the Planning Units. Must have a valid CRS. - custom_coast: - `[sf]` + `[sf]`\ An optional `sf` object representing a custom coastline. If `NULL` (the default), the coastline is downloaded from `rnaturalearth`. - res: - `[character(1)]` + `[character(1)]`\ The resolution of the `rnaturalearth` coastline to use. Options are `"small"`, `"medium"` (default), or `"large"`. This parameter is ignored if `custom_coast` is provided. diff --git a/docs/search.json b/docs/search.json index 5ba3312..e8787bc 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -[{"path":"https://mathmarecol.github.io/spatialplanr/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"MIT License","title":"MIT License","text":"Copyright (c) 2023 Jason D. Everett Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"overview","dir":"Articles","previous_headings":"","what":"Overview","title":"Climate-Smart Spatial Planning","text":"code written simplify process running prioritizr analysis given region. still work progress feel free submit pull requests new features code improvements.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"set-user-parameters","dir":"Articles","previous_headings":"Overview","what":"Set user parameters","title":"Climate-Smart Spatial Planning","text":"Set diameter planning units. units CRS (usually metres degrees). can also use customised ggplot theme can passed list splnr_gg_add() can used plots. example:","code":"Region <- \"Coral Sea\" # \"Australia\" Type <- \"Oceans\" # \"EEZ\" cCRS <- \"ESRI:54009\" # Mollweide PU_size <- 107460 # m splnr_theme <- list( ggplot2::theme_bw(), ggplot2::theme( legend.position = \"right\", legend.direction = \"vertical\", text = ggplot2::element_text(size = 9, colour = \"black\"), axis.text = ggplot2::element_text(size = 9, colour = \"black\"), plot.title = ggplot2::element_text(size = 9), axis.title = ggplot2::element_blank() ) )"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"analysis-region","dir":"Articles","previous_headings":"Overview","what":"Analysis Region","title":"Climate-Smart Spatial Planning","text":"Start analysis defining region setting planning units. Get boundary chosen region.","code":"Bndry <- splnr_get_boundary(Limits = Region, Type = Type, cCRS = cCRS) landmass <- rnaturalearth::ne_countries(scale = \"medium\", returnclass = \"sf\") %>% sf::st_transform(cCRS)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"create-planning-units","dir":"Articles","previous_headings":"Overview","what":"Create Planning Units","title":"Climate-Smart Spatial Planning","text":"","code":"PUs <- spatialgridr::get_grid(boundary = Bndry, crs = cCRS, output = \"sf_hex\", resolution = PU_size)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"get-the-features","dir":"Articles","previous_headings":"Overview","what":"Get the features","title":"Climate-Smart Spatial Planning","text":"example, use small subset charismatic megafauna species Coral Sea inform conservation plan. filtered Aquamaps (Aquamaps.org) species distribution models study area following species: species chosen based importance region represent example visualization purposes. Note: structure tribbleabove required downstream plotting. Common denotes common name species, Scientific scientific name format used Aquamaps, Category category species belongs Class represents importance species conservation plan.","code":"Dict <- tibble::tribble( ~nameCommon, ~nameVariable, ~category, \"Green sea turtle\", \"Chelonia_mydas\", \"Reptiles\", \"Loggerhead sea turtle\", \"Caretta_caretta\", \"Reptiles\", \"Hawksbill sea turtle\", \"Eretmochelys_imbricata\", \"Reptiles\", \"Olive ridley sea turtle\", \"Lepidochelys_olivacea\", \"Reptiles\", \"Saltwater crocodile\", \"Crocodylus_porosus\", \"Reptiles\", \"Humpback whale\", \"Megaptera_novaeangliae\", \"Mammals\", \"Common Minke whale\", \"Balaenoptera_acutorostrata\", \"Mammals\", \"Dugong\", \"Dugong_dugon\", \"Mammals\", \"Grey nurse shark\", \"Carcharias_taurus\", \"Sharks and rays\", \"Tiger shark\", \"Galeocerdo_cuvier\", \"Sharks and rays\", \"Great hammerhead shark\", \"Sphyrna_mokarran\", \"Sharks and rays\", \"Giant oceanic manta ray\", \"Mobula_birostris\", \"Sharks and rays\", \"Reef manta ray\", \"Mobula_alfredi\", \"Sharks and rays\", \"Whitetip reef shark\", \"Triaenodon_obesus\", \"Sharks and rays\", \"Red-footed booby\", \"Sula_sula\", \"Birds\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"convert-the-probabilities-to-binary-data","dir":"Articles","previous_headings":"Overview > Get the features","what":"Convert the probabilities to binary data","title":"Climate-Smart Spatial Planning","text":"","code":"datEx_species_bin <- spDataFiltered %>% dplyr::as_tibble() %>% dplyr::mutate(dplyr::across( -dplyr::any_of(c(\"geometry\")), # Don't apply to geometry ~ dplyr::case_when( . >= 0.5 ~ 1, . < 0.5 ~ 0, is.na(.data) ~ 0 ) )) %>% sf::st_as_sf() col_name <- spDataFiltered %>% sf::st_drop_geometry() %>% colnames()"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"climate-smart-spatial-planning","dir":"Articles","previous_headings":"Overview > Get the features","what":"Climate-smart spatial planning","title":"Climate-Smart Spatial Planning","text":"far, steps exactly spatial plan include climate change. make spatial plan climate smart, need climate metrics. use climate velocity data obtained x, y z models using SSP5-8.5. downstream analysis, rename column interest (: velocity data) metric. climate velocity data can visualized using splnr_plot_climData() function. case, areas low climate velocity, areas define climate refugia example. Usually, combine several metrics (e.g. exposure, velocity etc.) multiple SSP scenarios get robust climate refugia. example, randomly set areas high velocity value 0.85-1 visualize output (CHANGE LATER BETTER DATA). use climate priority area approach splnr_climate_priorityAreaApproach() detailed Buenafe et al (2023) determine climate refugia. Briefly, approach selects percentile (case 5%) suitable habitat feature considered climate-smart. also requires direction input indicating side metric range climate-smart areas can found. case, lower climate velocity denotes climate-smart (direction = -1), cases higher value might represent climate-smart planning units (direction = 1). Using approach also requires adaptation targets, since 5% suitable habitat species already protected climate-smart areas. can decide much 5% climate-smart areas supposed included spatial plan (: refugiaTarget = 1 protect 100% 5% climate-smart areas). now add information required perform spatial planning, cost, extract names used features.","code":"metric <- CoralSeaVelocity %>% dplyr::rename(metric = voccMag_transformed) (ggclim <- splnr_plot_climData(metric, \"metric\") + splnr_gg_add( Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) set.seed(5) metric <- CoralSeaVelocity %>% dplyr::rename(metric = voccMag_transformed) %>% dplyr::mutate( metricOG = metric, metric = ifelse(metric > 0.99, runif(., 0.85, 1.0), metric) ) (ggclim <- splnr_plot_climData(metric, \"metric\") + splnr_gg_add( Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) targets <- datEx_species_bin %>% sf::st_drop_geometry() %>% colnames() %>% data.frame() %>% setNames(c(\"feature\")) %>% dplyr::mutate(target = 0.3) CPA_Approach <- splnr_climate_priorityAreaApproach( features = datEx_species_bin, metric = metric, targets = targets, direction = -1, refugiaTarget = 1 ) out_sf <- CPA_Approach$Features %>% sf::st_join( datEx_species_bin %>% dplyr::select( tidyselect::starts_with(\"Cost_\") ), join = sf::st_equals) %>% sf::st_join(metric, join = sf::st_equals) targets <- CPA_Approach$Targets out_sf$Cost_None <- rep(1, 397) usedFeatures <- out_sf %>% sf::st_drop_geometry() %>% dplyr::select( -tidyselect::starts_with(\"Cost_\"), -tidyselect::starts_with(\"metric\") ) %>% names()"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"run-the-climate-smart-spatial-planning","dir":"Articles","previous_headings":"Overview > Get the features","what":"Run the climate-smart spatial planning","title":"Climate-Smart Spatial Planning","text":"prioritizrsteps including climate change running non-climate-smart spatial prioritization. can look resulting plan using splnr_plot_solution(). However, also interested climate-smart selected planning units solution actually . , can use kernel density plot.","code":"p1 <- prioritizr::problem(out_sf, usedFeatures, \"Cost_None\") %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(targets$target) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_solnClim <- prioritizr::solve.ConservationProblem(p1) (ggSoln <- splnr_plot_solution(dat_solnClim) + splnr_gg_add( Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) (ggClimDens <- splnr_plot_climKernelDensity( soln = list(dat_solnClim), # names = c(\"Input 1\"), type = \"Normal\", legendTitle = \"Climate velocity (add unit)\", xAxisLab = \"Climate velocity\" ))"},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"percentile-approach","dir":"Articles","previous_headings":"Overview > Alternative Approaches","what":"Percentile Approach","title":"Climate-Smart Spatial Planning","text":"now add information required perform spatial planning, cost, extract names used features run prioritization. can look resulting plan using splnr_plot_solution(). However, also interested climate-smart selected planning units solution actually . , can use kernel density plot","code":"targets <- datEx_species_bin %>% sf::st_drop_geometry() %>% colnames() %>% data.frame() %>% setNames(c(\"feature\")) %>% dplyr::mutate(target = 30) Percentile_Approach <- splnr_climate_percentileApproach( features = datEx_species_bin, metric = metric, targets = targets, direction = -1, percentile = 35 ) out_sf <- Percentile_Approach$Features %>% sf::st_join( datEx_species_bin %>% dplyr::select( tidyselect::starts_with(\"Cost_\") ), join = sf::st_equals ) %>% sf::st_join(metric, join = sf::st_equals) targets <- Percentile_Approach$Targets out_sf$Cost_None <- rep(1, 397) usedFeatures <- out_sf %>% sf::st_drop_geometry() %>% dplyr::select( -tidyselect::starts_with(\"Cost_\"), -tidyselect::starts_with(\"metric\") ) %>% names() p2 <- prioritizr::problem(out_sf, usedFeatures, \"Cost_None\") %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(targets$target) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_solnClimPercentile <- prioritizr::solve.ConservationProblem(p2, force = TRUE ) (ggSoln <- splnr_plot_solution(dat_solnClimPercentile) + splnr_gg_add( Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) (ggClimDens <- splnr_plot_climKernelDensity( soln = list(dat_solnClimPercentile), # names = c(\"Input 1\"), type = \"Normal\", legendTitle = \"Climate velocity (add unit)\", xAxisLab = \"Climate velocity\" ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"feature-approach","dir":"Articles","previous_headings":"Overview > Alternative Approaches","what":"Feature Approach","title":"Climate-Smart Spatial Planning","text":"now add information required perform spatial planning, cost, extract names used features run prioritization. However, also interested climate-smart selected planning units solution actually . , can use kernel density plot","code":"targets <- datEx_species_bin %>% sf::st_drop_geometry() %>% colnames() %>% data.frame() %>% setNames(c(\"feature\")) %>% dplyr::mutate(target = 0.3) Feature_Approach <- splnr_climate_featureApproach( features = datEx_species_bin, metric = metric, targets = targets, direction = 1 ) out_sf <- Feature_Approach$Features %>% sf::st_join( datEx_species_bin %>% dplyr::select( tidyselect::starts_with(\"Cost_\") ), join = sf::st_equals) %>% sf::st_join(metric, join = sf::st_equals) targets <- Feature_Approach$Targets out_sf$Cost_None <- 1 usedFeatures <- out_sf %>% sf::st_drop_geometry() %>% dplyr::select( -tidyselect::starts_with(\"Cost_\"), -tidyselect::starts_with(\"metric\") ) %>% names() p3 <- prioritizr::problem(out_sf, usedFeatures, \"Cost_None\") %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(targets$target) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_solnClimFeature <- prioritizr::solve.ConservationProblem(p3) (ggSoln <- splnr_plot_solution(dat_solnClimFeature) + splnr_gg_add( Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) (ggClimDens <- splnr_plot_climKernelDensity( soln = list(dat_solnClimFeature), # names = c(\"Input 1\"), type = \"Normal\", legendTitle = \"Climate velocity (add unit)\", xAxisLab = \"Climate velocity\" ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"global-fishing-watch-r-package-gfwr","dir":"Articles","previous_headings":"","what":"Global Fishing Watch R Package (gfwr)","title":"Global Fishing Watch","text":"gfwr package provides convenient functions pull GFW data directly R usable formats. contains three main functions, including : get_vessel_info(), get_event() get_raster(). two first devoted retrieving information features one ore several specific vessels. last particular interest us allows us gather information global fishing watch raster fishing effort (details function appropriate section). mainly use splnr_get_gfw function created enable data retrieved processed variety ways, described . time spent fishing computed using Automatic Identification System (AIS) data, transmitted industrial fishing vessels. AIS data provides information location, speed, direction vessel, can used identify vessel actively fishing.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"ais-caveats-and-limitations","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr)","what":"AIS Caveats and limitations","title":"Global Fishing Watch","text":"AIS coverage vessels several limitations : 1. number vessels captured (AIS provides approximately 70’000 2.8 million identified fishing vessels). 2. size vessels (52-85% vessels larger 24 meters 1% vessels 12 meters).Good know: IMO mandates AIS vessels larger 36 meters. 3. AIS interference areas high vessel density. 4. terrestrial satellites receive messages near shore.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"installation","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr)","what":"Installation","title":"Global Fishing Watch","text":"","code":"remotes::install_github(\"GlobalFishingWatch/gfwr\") library(gfwr) library(spatialplanr)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"api","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr)","what":"API","title":"Global Fishing Watch","text":"access GFW APIs, need : 1. register GFW account . 2. Request API key . token, add .Renviron file (executing chunk ), writing (GFW_TOKEN = “YOUR_TOKEN”) file. (asked restart R changes take effect.)","code":"usethis::edit_r_environ()"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"fishing-effort-visualization","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr)","what":"Fishing effort visualization","title":"Global Fishing Watch","text":"region_id necessary use get_raster function. get_raster function gets raster fishing effort API converts response data frame contains occurrences vessel grid cell (data binned grid cells different resolution), Vessel IDs, Flag, Geartype Apparent fishing Hours basically amount fishing hours vessel per grid cell (geometry). Data can provided : - DAILY, MONTHLY YEARLY temporal resolutions. - LOW (0.1 deg) HIGH (0.01 deg) spatial resolutions. - VESSEL_ID, FLAG, GEARTYPE, FLAGANDGEARTYPE. (can remove option message = FALSE see columns types.)","code":"region_id <- get_region_id(region = \"Australia\", region_source = \"EEZ\", key = gfwr::gfw_auth())$id[2] get_raster( spatial_resolution = \"LOW\", temporal_resolution = \"MONTHLY\", group_by = \"FLAGANDGEARTYPE\", start_date = \"2022-01-01\", end_date = \"2023-01-01\", region = region_id, region_source = \"EEZ\", key = gfwr::gfw_auth() )"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"get_raster-caveats-and-limitations-","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr) > Fishing effort visualization","what":"get_raster caveats and limitations.","title":"Global Fishing Watch","text":"Date range limited 1-year. Nevertheless, modifications, can get round problems splnr_get_gfw.","code":"data_sf_combined <- splnr_get_gfw(region = \"Australia\", start_date = \"2019-01-01\", end_date = \"2023-12-31\", temp_res = \"YEARLY\", spat_res = \"LOW\", compress = FALSE)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"visualization","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr)","what":"Visualization","title":"Global Fishing Watch","text":"display data, load : - coastline rnaturalearth package modify get sf object, constrain boundaries given data. - EEZ Polygons oceandatr package","code":"# Check and modify if necessary the spatial reference of data_sf_combined data_sf_combined <- sf::st_set_crs(data_sf_combined, sf::st_crs(rnaturalearth::ne_coastline(scale = \"large\"))) coast_clipped <- rnaturalearth::ne_coastline(scale = \"large\") %>% sf::st_as_sf() %>% sf::st_intersection(sf::st_as_sfc(sf::st_bbox(data_sf_combined))) # Load EEZ polygons eezs <- spatialgridr::get_boundary(name = \"Australia\", type = \"eez\", country_type = \"country\") %>% sf::st_transform(crs = sf::st_crs(data_sf_combined)) %>% sf::st_make_valid() %>% sf::st_intersection(sf::st_as_sfc(sf::st_bbox(data_sf_combined)))"},{"path":[]},{"path":[]},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"year-on-year-comparison","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr) > Here we display the Fishing Effort in Australia from 2019 to 2023.","what":"Year-on-year comparison","title":"Global Fishing Watch","text":"may need compare different timeframes, seasons, see patterns. Note : vessels adopted AIS (mainly economically developed countries) since deployment technologies, rise activities must seen context increase necessarily intense fishing activity.","code":"# We need to change the temporal range according to our need group by it to display the total fishing hours.
    data_sf_combined <- splnr_get_gfw(region = \"Australia\", start_date = \"2019-01-01\", end_date = \"2023-12-31\", temp_res = \"MONTHLY\", key = gfwr::gfw_auth()) %>% dplyr::group_by(Year, Month) %>% dplyr::summarize(Total_Fishing_Hours = sum(ApparentFishingHrs))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"fishing-gear-type","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr) > Here we display the Fishing Effort in Australia from 2019 to 2023.","what":"Fishing gear type","title":"Global Fishing Watch","text":"display Vessel activity ‘Micronesia’ 2020 according fishing gear type.","code":"data_sf_combined <- splnr_get_gfw(region = \"Micronesia\", start_date = \"2019-12-31\", end_date = \"2021-01-01\", temp_res = \"MONTHLY\")"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"flags","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr) > Here we display the Fishing Effort in Australia from 2019 to 2023.","what":"Flags","title":"Global Fishing Watch","text":"display Vessel activity Papua New Guinea according Vessels flags.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"supplementary-materials-","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr) > Here we display the Fishing Effort in Australia from 2019 to 2023.","what":"Supplementary materials.","title":"Global Fishing Watch","text":"fishing detection model trained AIS data 503 vessels identified fishing activity 90% accuracy, means can identify fishing non-fishing activity high accuracy. details AIS operation limitations .","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"hierarchy-of-vessels-gear-types","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr) > Here we display the Fishing Effort in Australia from 2019 to 2023.","what":"Hierarchy of vessels gear types :","title":"Global Fishing Watch","text":"Source : https://globalfishingwatch.org/datasets--code-vessel-identity/","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"overview","dir":"Articles","previous_headings":"","what":"Overview","title":"Spatial Planning With Zones","text":"code written simplify process running prioritizr analysis given region. still work progress feel free submit pull requests new features code improvements. workflow shown based prioritizr introduction zones.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"set-user-parameters","dir":"Articles","previous_headings":"Overview","what":"Set user parameters","title":"Spatial Planning With Zones","text":"Set diameter planning units. units CRS (usually metres degrees). Choose CRS analysis. use Mollweide","code":"Region <- \"Coral Sea\" # \"Australia\" Type <- \"Oceans\" # \"EEZ\" PU_size <- 107460 # m cCRS <- \"ESRI:54009\""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"analysis-region","dir":"Articles","previous_headings":"Overview","what":"Analysis Region","title":"Spatial Planning With Zones","text":"Start analysis defining region setting planning units. Get boundary chosen region.","code":"Bndry <- splnr_get_boundary(Limits = Region, Type = Type, cCRS = cCRS) landmass <- rnaturalearth::ne_countries( scale = \"medium\", returnclass = \"sf\" ) %>% sf::st_transform(cCRS)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"create-planning-units","dir":"Articles","previous_headings":"Overview","what":"Create Planning Units","title":"Spatial Planning With Zones","text":"can also use customised ggplot theme can passed list splnr_gg_add() can used plots. example:","code":"PUs <- spatialgridr::get_grid(boundary = Bndry, crs = cCRS, output = \"sf_hex\", resolution = PU_size) splnr_theme <- list( ggplot2::theme_bw(), ggplot2::theme( legend.position = \"right\", legend.direction = \"vertical\", text = ggplot2::element_text(size = 9, colour = \"black\"), axis.text = ggplot2::element_text(size = 9, colour = \"black\"), plot.title = ggplot2::element_text(size = 9), axis.title = ggplot2::element_blank() ) )"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"get-the-features","dir":"Articles","previous_headings":"Overview","what":"Get the features","title":"Spatial Planning With Zones","text":"example, use small subset charismatic megafauna species Coral Sea inform conservation plan. filtered Aquamaps (Aquamaps.org) species distribution models study area following species: species chosen based importance region represent example visualization purposes. Note: structure tribbleabove required downstream plotting. Common denotes common name species, Scientific scientific name format used Aquamaps, Category category species belongs Class represents importance species conservation plan.","code":"Dict <- tibble::tribble( ~nameCommon, ~nameVariable, ~category, \"Green sea turtle\", \"Chelonia_mydas\", \"Reptiles\", \"Loggerhead sea turtle\", \"Caretta_caretta\", \"Reptiles\", \"Hawksbill sea turtle\", \"Eretmochelys_imbricata\", \"Reptiles\", \"Olive ridley sea turtle\", \"Lepidochelys_olivacea\", \"Reptiles\", \"Saltwater crocodile\", \"Crocodylus_porosus\", \"Reptiles\", \"Humpback whale\", \"Megaptera_novaeangliae\", \"Mammals\", \"Common Minke whale\", \"Balaenoptera_acutorostrata\", \"Mammals\", \"Dugong\", \"Dugong_dugon\", \"Mammals\", \"Grey nurse shark\", \"Carcharias_taurus\", \"Sharks and rays\", \"Tiger shark\", \"Galeocerdo_cuvier\", \"Sharks and rays\", \"Great hammerhead shark\", \"Sphyrna_mokarran\", \"Sharks and rays\", \"Giant oceanic manta ray\", \"Mobula_birostris\", \"Sharks and rays\", \"Reef manta ray\", \"Mobula_alfredi\", \"Sharks and rays\", \"Whitetip reef shark\", \"Triaenodon_obesus\", \"Sharks and rays\", \"Red-footed booby\", \"Sula_sula\", \"Birds\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"convert-the-probabilities-to-binary-data-and-feature-names","dir":"Articles","previous_headings":"Overview > Get the features","what":"Convert the probabilities to binary data and feature names","title":"Spatial Planning With Zones","text":"","code":"datEx_species_bin <- spDataFiltered %>% splnr_apply_cutoffs(Cutoffs = 0.5) col_name <- spDataFiltered %>% sf::st_drop_geometry() %>% colnames()"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"spatial-planning-including-zones","dir":"Articles","previous_headings":"Overview > Get the features","what":"Spatial planning including zones","title":"Spatial Planning With Zones","text":"far, steps exactly spatial plan include zones. direct comparison, first run spatial plan include zoning. , define targets features (: 30% features) create conservation problem include area-based cost prioritization. solve problem plot solution. can also look well set target met. now look spatial plan needs extended include multiple management zones using zones().","code":"target <- rep(0.3, nrow(Dict)) p1 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate(Cost1 = rep(1, 397)), col_name, \"Cost1\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(target) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s1 <- p1 %>% prioritizr::solve.ConservationProblem() (ggSoln <- splnr_plot_solution(s1) + splnr_gg_add(PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme)) s1T <- s1 %>% dplyr::select(tidyselect::starts_with(c(\"solution\"))) %>% sf::st_drop_geometry() %>% tibble::as_tibble() r1 <- prioritizr::eval_feature_representation_summary(p1, s1T) print(r1) #> # A tibble: 15 × 5 #> summary feature total_amount absolute_held relative_held #> #> 1 overall Chelonia_mydas 22 10 0.455 #> 2 overall Caretta_caretta 22 10 0.455 #> 3 overall Eretmochelys_imbricata 24 10 0.417 #> 4 overall Lepidochelys_olivacea 22 10 0.455 #> 5 overall Crocodylus_porosus 21 9 0.429 #> 6 overall Megaptera_novaeangliae 388 120 0.309 #> 7 overall Balaenoptera_acutorostrata 238 74 0.311 #> 8 overall Dugong_dugon 13 5 0.385 #> 9 overall Carcharias_taurus 22 10 0.455 #> 10 overall Galeocerdo_cuvier 36 14 0.389 #> 11 overall Sphyrna_mokarran 397 123 0.310 #> 12 overall Mobula_birostris 20 8 0.4 #> 13 overall Mobula_alfredi 20 8 0.4 #> 14 overall Triaenodon_obesus 25 10 0.4 #> 15 overall Sula_sula 13 5 0.385"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"different-cost-layers","dir":"Articles","previous_headings":"Overview > Get the features","what":"Different cost layers","title":"Spatial Planning With Zones","text":"first assume zones interest set features, separate cost layers. , need set targets zones, case 20% features first zone 5% features second zone. create zones object specify number zones features zone. , define two zones features. zones need specified cost targets. use one area-based cost one cost layer uses random numbers, pre-defined targets pass zonesobject problem formulation solving conservation problem. solution can plotted using function splnr_plot_solution() argument zones set TRUE. can see now planning units selected, planning units either selected zone 1 zone 2.","code":"target2 <- matrix(NA, ncol = 2, nrow = nrow(Dict)) target2[, 1] <- 0.2 target2[, 2] <- 0.05 z2 <- prioritizr::zones(\"zone 1\" = col_name, \"zone 2\" = col_name) p2 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate( Cost1 = rep(1, 397), # when giving sf input, we need as many cost columns as we have zones Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(target2) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s2 <- p2 %>% prioritizr::solve.ConservationProblem() (gg_s2 <- splnr_plot_solution( s2, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"different-features","dir":"Articles","previous_headings":"Overview > Get the features","what":"Different features","title":"Spatial Planning With Zones","text":"using sf objects zones(), input feature names zones() need length contain features. means zones features, interest specific zone, target set 0. example, want separate example data zone reptiles another zone containing taxa reptiles, can specify following targets: sets target reptiles first zone 30% rest 0%. second zone, targets non-reptiles 10% reptiles 0% interest zone. Target data given matrix working zones, transform data frame matrix end. define conservation problem way solve . can also look well targets met zone (combined). can see 15 features listed (number) overall summary, summary zone 1 summary zone 2. looking relative_held column tibble, observe summary zone 1 (row 16 onwards), features >30% targets met, whereas others (feature 6 7) low percentage suitable habitat within selected planning units. can extract common names two features: marine mammals thus target 0% zone 1 reptile-specific zone. percentage selected suitable habitat 0% despite target 0 proportion suitable habitat mammals selected incidentally selecting planning units zone meeting targets reptiles. applies zone 2. can also plot final solution :","code":"targets2b <- Dict %>% dplyr::mutate( targetZ1 = dplyr::if_else(category == \"Reptiles\", 30 / 100, 0), targetZ2 = dplyr::if_else(category != \"Reptiles\", 10 / 100, 0) ) %>% dplyr::select(\"targetZ1\", \"targetZ2\") %>% as.matrix() # NOTE: when using sf input, we need as many cost columns as we have zones p2b <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate( Cost1 = rep(1, 397), Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(targets2b) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s2b <- p2b %>% prioritizr::solve.ConservationProblem() r2b <- s2b %>% dplyr::select(tidyselect::starts_with(c(\"solution\"))) %>% sf::st_drop_geometry() %>% tibble::as_tibble() %>% prioritizr::eval_feature_representation_summary(p2b, .) print(r2b, n = 45) #> # A tibble: 45 × 5 #> summary feature total_amount absolute_held relative_held #> #> 1 overall 1 44 11 0.25 #> 2 overall 2 44 11 0.25 #> 3 overall 3 48 11 0.229 #> 4 overall 4 44 11 0.25 #> 5 overall 5 42 11 0.262 #> 6 overall 6 776 43 0.0554 #> 7 overall 7 476 26 0.0546 #> 8 overall 8 26 7 0.269 #> 9 overall 9 44 11 0.25 #> 10 overall 10 72 13 0.181 #> 11 overall 11 794 48 0.0605 #> 12 overall 12 40 11 0.275 #> 13 overall 13 40 11 0.275 #> 14 overall 14 50 12 0.24 #> 15 overall 15 26 8 0.308 #> 16 zone 1 1 22 8 0.364 #> 17 zone 1 2 22 8 0.364 #> 18 zone 1 3 24 8 0.333 #> 19 zone 1 4 22 8 0.364 #> 20 zone 1 5 21 8 0.381 #> 21 zone 1 6 388 4 0.0103 #> 22 zone 1 7 238 2 0.00840 #> 23 zone 1 8 13 5 0.385 #> 24 zone 1 9 22 8 0.364 #> 25 zone 1 10 36 8 0.222 #> 26 zone 1 11 397 8 0.0202 #> 27 zone 1 12 20 8 0.4 #> 28 zone 1 13 20 8 0.4 #> 29 zone 1 14 25 8 0.32 #> 30 zone 1 15 13 6 0.462 #> 31 zone 2 1 22 3 0.136 #> 32 zone 2 2 22 3 0.136 #> 33 zone 2 3 24 3 0.125 #> 34 zone 2 4 22 3 0.136 #> 35 zone 2 5 21 3 0.143 #> 36 zone 2 6 388 39 0.101 #> 37 zone 2 7 238 24 0.101 #> 38 zone 2 8 13 2 0.154 #> 39 zone 2 9 22 3 0.136 #> 40 zone 2 10 36 5 0.139 #> 41 zone 2 11 397 40 0.101 #> 42 zone 2 12 20 3 0.15 #> 43 zone 2 13 20 3 0.15 #> 44 zone 2 14 25 4 0.16 #> 45 zone 2 15 13 2 0.154 Dict[[1]][6] #> [1] \"Humpback whale\" Dict[[1]][7] #> [1] \"Common Minke whale\" (gg_s2b <- splnr_plot_solution( s2b, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"boundary-penalty","dir":"Articles","previous_headings":"Overview > Get the features","what":"Boundary penalty","title":"Spatial Planning With Zones","text":"Similar “normal” priritisations, zones also allows including boundary penalty. several options can done within zones zones.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"within-the-same-zone","dir":"Articles","previous_headings":"Overview > Get the features > Boundary penalty","what":"Within the same zone","title":"Spatial Planning With Zones","text":"zeros matrix denote penalty zones, whereas ones introduce boundary penalty define conservation problem. , introduce penalties within zone 1 zone 2 respectively. add_boundary_penalties() set penalty 0.5 zones defined zm1. purpose example, also set 10 second time limit prioritization. results show less fragmentation previous solution without penalties: boundary penalty can also introduced one zone:","code":"zm1 <- diag(2) print(zm1) #> [,1] [,2] #> [1,] 1 0 #> [2,] 0 1 p3 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate( Cost1 = rep(1, 397), # when giving sf input, we need as many cost columns as we have zones Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_boundary_penalties(0.5, zone = zm1) %>% prioritizr::add_relative_targets(target2) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(time_limit = 10, verbose = FALSE) s3 <- p3 %>% prioritizr::solve.ConservationProblem() (gg_s3 <- splnr_plot_solution( s3, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) zm2 <- zm1 zm2[2, 2] <- 0 # NOTE: When using sf input, we need as many cost columns as we have zones p4 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate( Cost1 = rep(1, 397), Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_boundary_penalties(0.5, zone = zm2) %>% prioritizr::add_relative_targets(target2) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(time_limit = 10, verbose = FALSE) s4 <- p4 %>% prioritizr::solve.ConservationProblem() (gg_s4 <- splnr_plot_solution( s4, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"across-zones","dir":"Articles","previous_headings":"Overview > Get the features > Boundary penalty","what":"Across zones","title":"Spatial Planning With Zones","text":"Similarly, penalties can applied zones specified problem.","code":"zm3 <- matrix(1, ncol = 2, nrow = 2) print(zm3) #> [,1] [,2] #> [1,] 1 1 #> [2,] 1 1 p5 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate( Cost1 = rep(1, 397), # when giving sf input, we need as many cost columns as we have zones Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_boundary_penalties(0.5, zone = zm3) %>% prioritizr::add_relative_targets(target2) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(time_limit = 10, verbose = FALSE) s5 <- p5 %>% prioritizr::solve.ConservationProblem() (gg_s5 <- splnr_plot_solution( s5, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"adding-constraints","dir":"Articles","previous_headings":"Overview > Get the features","what":"Adding constraints","title":"Spatial Planning With Zones","text":"Another addition often used conservation planning constraints. often lock lock areas interest various reasons. example, lock already existing MPAs one zones. using zones constraints, use prioritizr function add_manual_locked_constraints() requires input specific format, first prepare MPA data. need specify zone constraint applied , give information Planning Unit identifier, rename column interest “status” filter Planning Units locked-. results can visualized :","code":"mpas <- MPAsCoralSea %>% dplyr::mutate(zone = \"zone 1\") %>% dplyr::rename(status = wdpa) %>% tibble::rowid_to_column(\"pu\") %>% sf::st_drop_geometry() %>% tibble::tibble() %>% dplyr::filter(status == 1) # NOTE: When using sf input, we need as many cost columns as we have zones p6 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate( Cost1 = rep(1, 397), Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_manual_locked_constraints(mpas) %>% prioritizr::add_relative_targets(target2) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(time_limit = 10, verbose = FALSE) s6 <- p6 %>% prioritizr::solve.ConservationProblem() (gg_s6 <- splnr_plot_solution( s6, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, lockIn = MPAsCoralSea, nameLockIn = \"wdpa\", typeLockIn = \"Full\", colorLockIn = \"lightgrey\", alphaLockIn = 0.2, overlay = landmass, labelLockIn = \"Current MPAs\", cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"objective-functions","dir":"Articles","previous_headings":"Overview > Get the features","what":"Objective functions","title":"Spatial Planning With Zones","text":"far used minimum set objective function meet conservation targets whilst minimizing cost. However, objective function available prioritizr. example maximising mangrove ecosystem services, employed minimum shortfall objective function instead (Dabalà et al 2022). objective function, allocate budget exceeded (example area >30%) whilst still trying minimise cost meeting targets - targets might met (shortfall). Zones also works objective functions minimum set objective function. apply add_min_shortfall_objective() provide separate budgets two zones (8 0.3). can visualize output solving conservation problem.","code":"# NOTE: When using sf input, we need as many cost columns as we have zones p7 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate( Cost1 = rep(1, 397), Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_shortfall_objective(c(8, 0.3)) %>% prioritizr::add_relative_targets(target2) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(time_limit = 10, verbose = FALSE) s7 <- p7 %>% prioritizr::solve.ConservationProblem() (gg_s7 <- splnr_plot_solution( s7, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"alternative-linear-constraints","dir":"Articles","previous_headings":"Overview > Get the features","what":"Alternative: linear constraints","title":"Spatial Planning With Zones","text":"Sometimes spatial plan might needed requires minimising several costs , binary output (inside protected area/outside protected area) sufficient. case, using linear constraints instead zones might simpler time-efficient way forward. Linear constraints make sure planning units selected area meet criteria given constraint. example, using area-based cost (lowest number planning units meet target), might also simultaneously want minimise cost fisheries keep certain threshold. Inversely, might want minimise cost fisheries also select 30% area. example, fill first define targets random cost layer values ranging 0 1. define solve conservation problem: Based problem definition, want meet targets biodiversity features whilst selecting lowest number planning units possible. However, solution also depends threshold linear constraint specified add_linear_constraints()problem. Specifically, planning units selected solution can exceed 10% total cost planning units costRandom$CostR. can visualise solution : NOTE: can also use multiple linear constraints plan, however, might require normalization input data constraints comparable units, careful tuning thresholds, prioritizr still able solve problem.","code":"target8 <- rep(0.3, nrow(Dict)) set.seed <- 10 # Add seed so the problem below solves each time costRandom <- datEx_species_bin %>% dplyr::mutate(CostR = runif(n = dim(.)[[1]])) %>% dplyr::select(\"CostR\") p8 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate(Cost1 = rep(1, 397)), col_name, \"Cost1\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(target8) %>% prioritizr::add_linear_constraints(sum(costRandom$CostR) * 0.1, sense = \"<=\", costRandom$CostR ) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s8 <- p8 %>% prioritizr::solve.ConservationProblem() (gg_s8 <- splnr_plot_solution(s8) + splnr_gg_add(PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"common-targets-across-zones","dir":"Articles","previous_headings":"Overview > Get the features","what":"Common targets across zones","title":"Spatial Planning With Zones","text":"Sometimes might required meet (common) conservation target across multiple zones, several zones contribute reaching target. , need define target across zones (: 30% features across zones): need bring data specific format requires us individual column feature specific zone, spp1 two zones (zone1 zone2), two separate columns input data: spp1_zone1 spp1_zone2. species names zone names exactly specified zones() object separated _. also extract new feature names create zones object, joining two newly created data frames file used prioriztisation. can see defined (random) cost layers cost layer zone2 three times costly zone1. setting solving conservation problem, can look resulting solution well targets met. overall summary shows every feature’s suitable habitat represented least 30% combined target set. However, can see features zone1 lot frequently selected zone2 zone2 three times costly. plot also reflects observation PUs frequently selected zone1. wanted constrain , zone1 less often selected zone2 often?","code":"targetAcross <- dplyr::tibble( feature = col_name, zone = list(c(\"zone1\", \"zone2\"))[rep(1, length(col_name))], target = rep(0.3, length(col_name)), type = rep(\"relative\", length(col_name)) ) datSpecZone1 <- datEx_species_bin %>% dplyr::rename_at(dplyr::vars(-geometry), ~ paste0(.x, \"_zone1\")) featuresZone1 <- datSpecZone1 %>% sf::st_drop_geometry() %>% colnames() datSpecZone2 <- datEx_species_bin %>% dplyr::rename_at(dplyr::vars(-geometry), ~ paste0(.x, \"_zone2\")) featuresZone2 <- datSpecZone2 %>% sf::st_drop_geometry() %>% colnames() z10 <- prioritizr::zones( featuresZone1, featuresZone2, zone_names = c(\"zone1\", \"zone2\"), feature_names = col_name ) out_sf <- datSpecZone1 %>% sf::st_join(datSpecZone2, join = sf::st_equals) %>% dplyr::mutate( Cost1 = runif(n = dim(.)[[1]]) * 100, Cost2 = runif(n = dim(.)[[1]]) * 300 ) p10 <- prioritizr::problem(out_sf, z10, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_manual_targets(targetAcross) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s10 <- p10 %>% prioritizr::solve.ConservationProblem() s10F <- s10 %>% dplyr::select(tidyselect::starts_with(c(\"solution\"))) %>% sf::st_drop_geometry() %>% tibble::as_tibble() r10 <- prioritizr::eval_feature_representation_summary(p10, s10F) print(r10) #> # A tibble: 45 × 5 #> summary feature total_amount absolute_held relative_held #> #> 1 overall Chelonia_mydas 44 14 0.318 #> 2 overall Caretta_caretta 44 14 0.318 #> 3 overall Eretmochelys_imbricata 48 15 0.312 #> 4 overall Lepidochelys_olivacea 44 14 0.318 #> 5 overall Crocodylus_porosus 42 14 0.333 #> 6 overall Megaptera_novaeangliae 776 234 0.302 #> 7 overall Balaenoptera_acutorostrata 476 146 0.307 #> 8 overall Dugong_dugon 26 10 0.385 #> 9 overall Carcharias_taurus 44 14 0.318 #> 10 overall Galeocerdo_cuvier 72 25 0.347 #> # ℹ 35 more rows (gg_s10 <- splnr_plot_solution(s10, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"targets-across-zones-with-linear-constraints","dir":"Articles","previous_headings":"Overview > Get the features","what":"Targets across zones with linear constraints","title":"Spatial Planning With Zones","text":"can include linear constraints zone1 , area exceed 30% whole area. need create matrix contains data constraint want include. Although want put linear constraint zone1, prioritizr still requires matrix many columns zones. Thus, set area cost 1 zone1 want constraint 0 zone2 want introduce linear constraint. define conservation problem add linear constraint 30% area. selected planning units now equally distributed across zones, also observable plot: However, also expect cost spatial plan higher previous one.","code":"CostArea <- out_sf %>% dplyr::mutate( areaCostZone1 = rep(1, 397), areaCostZone2 = rep(0, 397) ) %>% sf::st_drop_geometry() %>% dplyr::select(\"areaCostZone1\", \"areaCostZone2\") %>% as.matrix() p11 <- prioritizr::problem(out_sf, z10, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_linear_constraints(sum(CostArea[, 1]) * 0.3, sense = \"<=\", CostArea ) %>% prioritizr::add_manual_targets(targetAcross) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s11 <- p11 %>% prioritizr::solve.ConservationProblem() s11F <- s11 %>% dplyr::select(tidyselect::starts_with(c(\"solution\"))) %>% sf::st_drop_geometry() %>% tibble::as_tibble() r11 <- prioritizr::eval_feature_representation_summary(p11, s11F) print(r11) #> # A tibble: 45 × 5 #> summary feature total_amount absolute_held relative_held #> #> 1 overall Chelonia_mydas 44 14 0.318 #> 2 overall Caretta_caretta 44 14 0.318 #> 3 overall Eretmochelys_imbricata 48 15 0.312 #> 4 overall Lepidochelys_olivacea 44 14 0.318 #> 5 overall Crocodylus_porosus 42 14 0.333 #> 6 overall Megaptera_novaeangliae 776 234 0.302 #> 7 overall Balaenoptera_acutorostrata 476 144 0.303 #> 8 overall Dugong_dugon 26 9 0.346 #> 9 overall Carcharias_taurus 44 14 0.318 #> 10 overall Galeocerdo_cuvier 72 24 0.333 #> # ℹ 35 more rows (gg_s11 <- splnr_plot_solution( s11, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"targets-across-some-but-not-all-zones","dir":"Articles","previous_headings":"Overview > Get the features","what":"Targets across some (but not all) zones","title":"Spatial Planning With Zones","text":"example, want target 30% suitable reptile habitat zone 1 zone 2. Additionally, set target 20% zone 2 marine mammals target 5% sharks rays zone 3. create zones object three different zones: create joint sf object zones respective costs.","code":"targetAcrossSome <- Dict %>% dplyr::mutate( target = dplyr::case_when( category == \"Reptiles\" ~ 30 / 100, category == \"Mammals\" ~ 10 / 100, category == \"Sharks and rays\" ~ 5 / 100, TRUE ~ 0 ), zone = dplyr::case_when( category == \"Reptiles\" ~ list(c(\"zone1\", \"zone2\")), category == \"Mammals\" ~ list(\"zone2\"), category == \"Sharks and rays\" ~ list(\"zone3\"), TRUE ~ list(c(\"zone1\", \"zone2\", \"zone3\")) ), type = rep(\"relative\", length(col_name)) ) %>% dplyr::rename(feature = \"nameVariable\") %>% dplyr::select(-\"category\", -\"nameCommon\") datSpecZone1 <- datEx_species_bin %>% dplyr::rename_at(dplyr::vars(-geometry), ~ paste0(.x, \"_zone1\")) featuresZone1 <- datSpecZone1 %>% sf::st_drop_geometry() %>% colnames() datSpecZone2 <- datEx_species_bin %>% dplyr::rename_at(dplyr::vars(-geometry), ~ paste0(.x, \"_zone2\")) featuresZone2 <- datSpecZone2 %>% sf::st_drop_geometry() %>% colnames() datSpecZone3 <- datEx_species_bin %>% dplyr::rename_at(dplyr::vars(-geometry), ~ paste0(.x, \"_zone3\")) featuresZone3 <- datSpecZone3 %>% sf::st_drop_geometry() %>% colnames() z12 <- prioritizr::zones( featuresZone1, featuresZone2, featuresZone3, zone_names = c(\"zone1\", \"zone2\", \"zone3\"), feature_names = col_name ) # NOTE: When using sf input, we need as many cost columns as we have zones out_sf <- datSpecZone1 %>% sf::st_join(datSpecZone2, join = sf::st_equals) %>% sf::st_join(datSpecZone3, join = sf::st_equals) %>% dplyr::mutate(geometry = datEx_species_bin$geometry) %>% sf::st_as_sf() %>% dplyr::mutate( Cost1 = runif(n = dim(.)[[1]]) * 100, Cost2 = runif(n = dim(.)[[1]]) * 300, Cost3 = runif(n = dim(.)[[1]]) * 200 ) p12 <- prioritizr::problem(out_sf, z12, cost_column = c(\"Cost1\", \"Cost2\", \"Cost3\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_manual_targets(targetAcrossSome) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s12 <- p12 %>% prioritizr::solve.ConservationProblem() s12F <- s12 %>% dplyr::select(tidyselect::starts_with(c(\"solution\"))) %>% sf::st_drop_geometry() %>% tibble::as_tibble() r12 <- prioritizr::eval_feature_representation_summary(p12, s12F) print(r12) #> # A tibble: 60 × 5 #> summary feature total_amount absolute_held relative_held #> #> 1 overall Chelonia_mydas 66 16 0.242 #> 2 overall Caretta_caretta 66 16 0.242 #> 3 overall Eretmochelys_imbricata 72 17 0.236 #> 4 overall Lepidochelys_olivacea 66 16 0.242 #> 5 overall Crocodylus_porosus 63 16 0.254 #> 6 overall Megaptera_novaeangliae 1164 64 0.0550 #> 7 overall Balaenoptera_acutorostrata 714 44 0.0616 #> 8 overall Dugong_dugon 39 8 0.205 #> 9 overall Carcharias_taurus 66 16 0.242 #> 10 overall Galeocerdo_cuvier 108 19 0.176 #> # ℹ 50 more rows (gg_s12 <- splnr_plot_solution( s12, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"navyblue\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\", \"Zone3\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"short-term","dir":"Articles","previous_headings":"Overview > Get the features > Next steps","what":"Short-term","title":"Spatial Planning With Zones","text":"Test run time zones compared normal prioritization Communicate zones outcomes effectively (e.g. targets, cost overlay etc.)","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"longer-term","dir":"Articles","previous_headings":"Overview > Get the features > Next steps","what":"Longer-term","title":"Spatial Planning With Zones","text":"deal overlapping zones (moment prioritizr allocates PU single zone) connect climate-smart workflow zones handle inputs benefit using different objective functions (e.g. ecosystem services vs biodiversity features) Look commonly used data sets multiple use approaches think zone-specific costs, constraints, targets etc. Define (Waitt’s) understanding multiple-use want implement (can differ now future) EU Horizon 2020 MUSES-project: multiple use/multi-use “joint use resources close geographic proximity either single user multiple users. umbrella term covers multitude use combinations marine realm represents radical change concept exclusive resource rights inclusive sharing resources space one users.” Bonnevie et al. 2019: “multi-use specific co-location/coexistence resources shared.” Schupp et al. 2019: distinguishes different types multi-uses (one co-location) Types multiple use MSP according Schupp et al. 2019","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"overview","dir":"Articles","previous_headings":"","what":"Overview","title":"A Basic Spatial Planning Workflow","text":"code written simplify process running prioritizr analysis given region. still work progress feel free submit pull requests new features code improvements.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"set-user-parameters","dir":"Articles","previous_headings":"Overview","what":"Set user parameters","title":"A Basic Spatial Planning Workflow","text":"can set region defined splnr_get_planningUnits. can also define region square boundaries (degrees) need. Choose CRS analysis. case use Mollweide Set diameter planning units. units CRS (usually metres degrees).","code":"Region <- \"Coral Sea\" # \"Australia\" Type <- \"Oceans\" # \"EEZ\" Region <- c(xmin = 150, xmax = 160, ymin = -40, ymax = -30) cCRS <- \"ESRI:54009\" PU_size <- 107460 # m"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"analysis-region","dir":"Articles","previous_headings":"Overview","what":"Analysis Region","title":"A Basic Spatial Planning Workflow","text":"Start analysis defining region setting planning units. Get boundary chosen region. Get land boundaries remove overlap. object “landmass” represents land mass removed (inverse = FALSE)","code":"Bndry <- splnr_get_boundary(Limits = Region, Type = Type, cCRS = cCRS) landmass <- rnaturalearth::ne_countries( scale = \"medium\", returnclass = \"sf\" ) %>% sf::st_transform(cCRS)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"create-planning-units","dir":"Articles","previous_headings":"Overview","what":"Create Planning Units","title":"A Basic Spatial Planning Workflow","text":"can check PUs look like want add additional properties map, example landmass boundary, can use splnr_gg_add(). can also use customised ggplpot theme can passed list splnr_gg_add() can used plots. example:","code":"PUs <- spatialgridr::get_grid(boundary = Bndry, crs = cCRS, output = \"sf_hex\", resolution = PU_size) (ggPU <- splnr_plot(df = PUs) + ggplot2::theme_bw()) # Plot Planning Units (ggPU <- splnr_plot(df = PUs) + splnr_gg_add( Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = \"Default\" )) splnr_theme <- list( ggplot2::theme_bw(), ggplot2::theme( legend.position = \"right\", legend.direction = \"vertical\", text = ggplot2::element_text(size = 9, colour = \"black\"), axis.text = ggplot2::element_text(size = 9, colour = \"black\"), plot.title = ggplot2::element_text(size = 9), axis.title = ggplot2::element_blank() ) ) (ggPU <- splnr_plot(PUs) + splnr_gg_add( Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"get-the-features","dir":"Articles","previous_headings":"Overview","what":"Get the features","title":"A Basic Spatial Planning Workflow","text":"example, use small subset charismatic megafauna species Coral Sea inform conservation plan. filtered Aquamaps (Aquamaps.org) species distribution models study area following species: species chosen based importance region represent example visualization purposes. Note: structure tribbleabove required downstream plotting. Common denotes common name species, nameVariable scientific name format used Aquamaps, TaxGroup taxonomic grouping species belongs Category represents importance species conservation plan.","code":"Dict <- tibble::tribble( ~nameCommon, ~nameVariable, ~category, \"Green sea turtle\", \"Chelonia_mydas\", \"Reptiles\", \"Loggerhead sea turtle\", \"Caretta_caretta\", \"Reptiles\", \"Hawksbill sea turtle\", \"Eretmochelys_imbricata\", \"Reptiles\", \"Olive ridley sea turtle\", \"Lepidochelys_olivacea\", \"Reptiles\", \"Saltwater crocodile\", \"Crocodylus_porosus\", \"Reptiles\", \"Humpback whale\", \"Megaptera_novaeangliae\", \"Mammals\", \"Common Minke whale\", \"Balaenoptera_acutorostrata\", \"Mammals\", \"Dugong\", \"Dugong_dugon\", \"Mammals\", \"Grey nurse shark\", \"Carcharias_taurus\", \"Sharks and rays\", \"Tiger shark\", \"Galeocerdo_cuvier\", \"Sharks and rays\", \"Great hammerhead shark\", \"Sphyrna_mokarran\", \"Sharks and rays\", \"Giant oceanic manta ray\", \"Mobula_birostris\", \"Sharks and rays\", \"Reef manta ray\", \"Mobula_alfredi\", \"Sharks and rays\", \"Whitetip reef shark\", \"Triaenodon_obesus\", \"Sharks and rays\", \"Red-footed booby\", \"Sula_sula\", \"Birds\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"convert-the-probabilities-to-binary-data","dir":"Articles","previous_headings":"Overview > Get the features","what":"Convert the probabilities to binary data","title":"A Basic Spatial Planning Workflow","text":"can now look feature data used spatial plan individually calling splnr_plot_binFeature(), example see binary habitat suitability map Green sea turtles: suitable habitat Green sea turtles predicted Aquamaps restricted cells close coast. now compare predicted suitable habitat Humpback whales, can see fairly ubiquitous across whole Coral Sea. example, reason classified species either representative suitable habitat wide-ranging within study region important restricted number cells. get better idea overall distribution used features, can also plot number features suitable habitat within Planning Unit study region.","code":"datEx_species_bin <- spDataFiltered %>% splnr_apply_cutoffs(Cutoffs = 0.5) (ggFeature1 <- splnr_plot( df = datEx_species_bin, colNames = \"Chelonia_mydas\", plotTitle = \"Chelonia mydas\", legendLabels = c(\"Absence\", \"Presence\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ) ) (ggFeature <- splnr_plot( datEx_species_bin, \"Megaptera_novaeangliae\", plotTitle = \"Megaptera novaeangliae\" ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) (ggFeatNo <- splnr_plot(df = datEx_species_bin, colNames = colnames(datEx_species_bin %>% sf::st_drop_geometry()), plotTitle = \"\", legendTitle = \"Number of features\") + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"prepare-data-for-prioritization","dir":"Articles","previous_headings":"Overview","what":"Prepare Data for prioritization","title":"A Basic Spatial Planning Workflow","text":"spatial prioritization also need extract names features pass prioritizr. also create sf object contains information needed prioritization.","code":"feature_names <- splnr_featureNames(datEx_species_bin) out_sf <- datEx_species_bin"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"add-cost","dir":"Articles","previous_headings":"Overview > Prepare Data for prioritization","what":"Add Cost","title":"A Basic Spatial Planning Workflow","text":"example, use minimum set objective function, aims minimize cost whilst meeting conservation targets. add area-based cost include little area possible spatial plan whilst meeting conservation targets. , planning units assigned equal cost 1.","code":"out_sf$Cost_None <- 1 (ggCost <- splnr_plot(out_sf, colNames = \"Cost_None\", legendTitle = \"Cost\", legendLabels = \"1\") + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"fishing-effort","dir":"Articles","previous_headings":"","what":"A Basic Spatial Planning Workflow","title":"A Basic Spatial Planning Workflow","text":"gfwr package allows us recover data fisheries across world, set parameter compress TRUE recover Apparent fishing hours per coordinates.","code":"gfw_data <- splnr_get_gfw(region = 'Australia', start_date = \"2022-01-01\", end_date = \"2022-12-31\", temp_res = \"yearly\", cCRS = cCRS, compress = TRUE) %>% sf::st_interpolate_aw(PUs, extensive = TRUE) out_sf$Apparent.Fishing.Hours <- 0 # Add column to PUs out_sf$Apparent.Fishing.Hours[as.numeric(rownames(PUs))] <- gfw_data$Apparent.Fishing.Hours # Put corresponding data in PUs (ggCost <- splnr_plot(out_sf, colNames = \"Apparent.Fishing.Hours\") + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"other-features-1","dir":"Articles","previous_headings":"","what":"A Basic Spatial Planning Workflow","title":"A Basic Spatial Planning Workflow","text":"Many features can taken account cost layers prioritization, provide different features oceandatrpackage.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"set-targets","dir":"Articles","previous_headings":"Overview","what":"Set Targets","title":"A Basic Spatial Planning Workflow","text":"shown previously, assigned conservation features class reflecting importance planning region. Conservation targets assigned target based class, case 30% suitable habitat important 10% representative features. Note: assigned classes targets based ecological information chosen visualization purposes.","code":"catTarg <- c(\"Reptiles\" = 0.3, \"Mammals\" = 0.1, \"Sharks and rays\" = 0.1, \"Birds\" = 0.1) target <- Dict %>% splnr_targets_byCategory(catTarg, catName = \"category\")"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"set-up-conservation-problem","dir":"Articles","previous_headings":"Overview","what":"Set up conservation problem","title":"A Basic Spatial Planning Workflow","text":"","code":"datEx_problem <- prioritizr::problem(out_sf, feature_names, \"Cost_None\") %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(target$target) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"solve-the-conservation-problem","dir":"Articles","previous_headings":"Overview","what":"Solve the conservation problem","title":"A Basic Spatial Planning Workflow","text":"","code":"datEx_soln <- datEx_problem %>% prioritizr::solve.ConservationProblem()"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"visualize-output","dir":"Articles","previous_headings":"Overview","what":"Visualize Output","title":"A Basic Spatial Planning Workflow","text":"different ways visualize output prioritization can loosely grouped three categories: + Visualization solution + Visualization targets + Visualization importance scores","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"visualization-of-the-solution","dir":"Articles","previous_headings":"Overview > Visualize Output","what":"Visualization of the solution","title":"A Basic Spatial Planning Workflow","text":"plot shows optimal solution planning region meets selected targets chosen features smallest area possible. categorical map displays, planning units selected important meeting conservation targets (dark blue) selected (light blue). can also done overlay cost show solution avoids highly costly areas: Note: example, cost equal planning units.","code":"(ggSoln <- splnr_plot(datEx_soln, colNames = \"solution_1\", legendTitle = \"Solution\", legendLabels = c(\"0\",\"1\")) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) (ggCostOverlay <- splnr_plot_costOverlay( soln = datEx_soln, cost = NA, costName = \"Cost_None\" ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"visualization-of-targets","dir":"Articles","previous_headings":"Overview > Visualize Output","what":"Visualization of targets","title":"A Basic Spatial Planning Workflow","text":"visualize well targets met, first need extract much suitable habitat feature selected spatial plan. also includes potential incidental coverage feature included spatial plan can still found planning region. circular bar plot, one additional step data preparation needs done.","code":"dfTarget <- splnr_get_featureRep(datEx_soln, datEx_problem, climsmart = FALSE, solnCol = \"solution_1\" ) (ggTarget <- splnr_plot_featureRep(dfTarget, category = Dict, renameFeatures = TRUE, namesToReplace = Dict, categoryFeatureCol = \"nameCommon\", nr = 1, showTarget = TRUE, )) dfTargetCirc <- dfTarget %>% dplyr::select(\"feature\", \"value\", \"group\") %>% na.omit() colors <- c( \"important\" = \"darkgreen\", \"representative\" = \"darkred\" ) legends <- c(\"Important\", \"Representative\") (ggCircTarg <- splnr_plot_circBplot(df = dfTargetCirc, legend_list = legends, legend_color = colors, impTarget = 30, repTarget = 10))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"visualization-of-importance-scores","dir":"Articles","previous_headings":"Overview > Visualize Output","what":"Visualization of importance scores","title":"A Basic Spatial Planning Workflow","text":"Importance scores can help assess relative importance individual selected Planning Unit spatial plan (information, see https://prioritizr.net/reference/importance.html) , use two different importance scores, Ferrier Score Rarity Weighted Richness. example, scores label similar -coastal- planning units important spatial plan.","code":"ggFerrier <- splnr_plot_importanceScore( soln = datEx_soln, pDat = datEx_problem, method = \"Ferrier\", decimals = 4, legendTitle = \"Importance Score \\n(Ferrier Score)\" ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ) #> Calculating Ferrier Score. ggRWR <- splnr_plot_importanceScore( soln = datEx_soln, pDat = datEx_problem, method = \"RWR\", decimals = 2, legendTitle = \"Importance Score \\n(Rarity Weighted Richness)\" ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ) #> Calculating Rarity Weighted Richness. (ggScores <- patchwork::wrap_plots(ggFerrier + ggRWR))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"comparing-spatial-plans","dir":"Articles","previous_headings":"Overview","what":"Comparing Spatial Plans","title":"A Basic Spatial Planning Workflow","text":"Sometimes can useful direct comparison two spatial plans. show achieve package, first need second conservation problem resulting solution. , second spatial plan include already existing marine protected areas area (https://www.protectedplanet.net/en/thematic-areas/wdpa?tab=WDPA) following characteristics: * Status = c(“Designated”, “Established”, “Inscribed”) * Designation Type = c(“National”, “Regional”, “International”, “Applicable”) * IUCN Category = c(“Ia”, “Ib”, “II”, “III”, “IV”) also include targets based IUCN categories prioritise species IUCN status : Vulnerable Endangered Critically Endangered Extinct Wild Extinct assign 30% target species within categories. species fall categories receive inverse area target, species greater area suitable habitat assigned lower target. can also adjust targets based IUCN Category. apply increased target 0.3 species increased thread level IUCN Red List(“EX”, “EW”, “CR”, “EN”, “VU”). Note: Accessing IUCN database requires login token rl_use_iucn() needs added environment using Sys.setenv(IUCN_REDLIST_KEY = \"[Token]\"). can start running rredlist::rl_use_iucn().","code":"# The user can download their own MPAs using this code, # but below we use data already within the package. LockedIn <- splnr_get_MPAs(PUs, \"Australia\") %>% splnr_apply_cutoffs(0.5) %>% dplyr::mutate(wdpa = as.logical(wdpa)) (ggMPA <- splnr_plot(MPAsCoralSea, \"wdpa\") + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) minTarget <- 0.1 maxTarget <- 0.2 # Create inverse area target IA_Targets <- splnr_targets_byInverseArea( datEx_species_bin, minTarget, maxTarget ) IUCN_IA_Targets <- IA_Targets %>% splnr_get_IUCNRedList(species_col = \"Species\") %>% # Add RL data to the df splnr_targets_byIUCN(IUCN_target = 0.3)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"set-up-second-conservation-problem","dir":"Articles","previous_headings":"Overview > Comparing Spatial Plans","what":"Set up second conservation problem","title":"A Basic Spatial Planning Workflow","text":"locked-areas already existing Marine Protected Areas (MPAs). want show overlap selected Planning Units current MPAs, can add splnr_gg_add() function. instead want see contours locked-areas can set typeLockIn = \"Contours\" splnr_gg_add().","code":"datEx_problem2 <- prioritizr::problem(out_sf, feature_names, \"Cost_None\") %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(IA_Targets$target) %>% prioritizr::add_locked_in_constraints(as.logical(MPAsCoralSea$wdpa)) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) # Add a solution object datEx_soln2 <- datEx_problem2 %>% prioritizr::solve.ConservationProblem() (ggSoln2 <- splnr_plot_solution(datEx_soln2) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) (splnr_plot_solution(datEx_soln2) + splnr_gg_add( PUs = PUs, Bndry = Bndry, lockIn = MPAsCoralSea, nameLockIn = \"wdpa\", typeLockIn = \"Full\", colorLockIn = \"lightgrey\", alphaLockIn = 0.2, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) (splnr_plot_solution(datEx_soln2) + splnr_gg_add( lockIn = MPAsCoralSea, nameLockIn = \"wdpa\", typeLockIn = \"Contours\", colorLockIn = \"lightgrey\", alphaLockIn = 0.2, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"visualize-comparison","dir":"Articles","previous_headings":"Overview > Comparing Spatial Plans","what":"Visualize comparison","title":"A Basic Spatial Planning Workflow","text":"plot shows first solution (without current MPAs) differs second solution (including current MPAs. categorical map displays, planning units selected solution 2 solution 1 (red), solution 1 solution 2 (blue), selected solutions (grey). correlation matrix shows similarity Cohen’s Kappa correlation solution 1 solution 2.","code":"(ggComp <- splnr_plot_comparison(datEx_soln, datEx_soln2) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) CorrMat <- splnr_get_kappaCorrData(list(datEx_soln, datEx_soln2), name_sol = c(\"soln1\", \"soln2\") ) (ggCorr <- splnr_plot_corrMat(CorrMat, AxisLabels = c(\"Solution 1\", \"Solution 2\") ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"plotting-selection-frequency","dir":"Articles","previous_headings":"Overview > Comparing Spatial Plans","what":"Plotting selection frequency","title":"A Basic Spatial Planning Workflow","text":"Sometimes multiple spatial plans generated, interested many times Planning Unit selected across array solutions. demonstrate can done using package, first create array (= portfolio) solutions. One example using portfolio","code":"datEx_soln_portfolio <- datEx_problem %>% prioritizr::add_cuts_portfolio(5) %>% # create a portfolio of solutions prioritizr::solve.ConservationProblem() selFreq <- datEx_soln_portfolio %>% # calculate selection frequency sf::st_drop_geometry() %>% dplyr::mutate(selFreq = as.factor(rowSums( dplyr::select(., dplyr::starts_with(\"solution_\")) ))) %>% sf::st_as_sf(geometry = datEx_soln_portfolio$geometry) %>% dplyr::select(selFreq) (ggselFreq <- splnr_plot_selectionFreq(selFreq) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Jason D. Everett. Author, maintainer. Sandra Neubert. Author.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Everett J, Neubert S (2025). spatialplanr: Help files prioritzr Spatial Planning projects. R package version 0.7.0, https://github.com/SpatialPlanning/spatialplanr.","code":"@Manual{, title = {spatialplanr: Help files for prioritzr Spatial Planning projects}, author = {Jason D. Everett and Sandra Neubert}, year = {2025}, note = {R package version 0.7.0}, url = {https://github.com/SpatialPlanning/spatialplanr}, }"},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/index.html","id":"introduction-to-spatialplanr","dir":"","previous_headings":"","what":"Introduction to spatialplanr","title":"Help files for prioritzr Spatial Planning projects","text":"Welcome spatialplanr, R package designed streamline enhance spatial conservation prioritization efforts explicitly integrating climate change considerations. Building upon powerful prioritizr package, spatialplanr provides suite tools conservation planners develop robust protected area networks.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Help files for prioritzr Spatial Planning projects","text":"aware package early stages development. Functions documentation complete installing moment risk. still interested, can install development version GitHub :","code":"# install.packages(\"devtools\") devtools::install_github(\"https://github.com/SpatialPlanning/spatialplanr\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/CoralSeaVelocity.html","id":null,"dir":"Reference","previous_headings":"","what":"Example climate velocity for the example region of the coral sea — CoralSeaVelocity","title":"Example climate velocity for the example region of the coral sea — CoralSeaVelocity","text":"tsf file containing climate velocity (SSP5-8.5) coral sea","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/CoralSeaVelocity.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Example climate velocity for the example region of the coral sea — CoralSeaVelocity","text":"","code":"CoralSeaVelocity"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/CoralSeaVelocity.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Example climate velocity for the example region of the coral sea — CoralSeaVelocity","text":"CoralSeaVelocity data frame 397 rows 3 columns: vocMagg_transformed Climate velocity column geometry Geometry column sf object","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/CoralSeaVelocity.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Example climate velocity for the example region of the coral sea — CoralSeaVelocity","text":"https://www.iucnredlist.org/","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/IUCN_IA_Targets.html","id":null,"dir":"Reference","previous_headings":"","what":"IUCN and Inverse Area based Targets for Aquamaps example species — IUCN_IA_Targets","title":"IUCN and Inverse Area based Targets for Aquamaps example species — IUCN_IA_Targets","text":"tbl_df file containing IUCN IA targets selected species coral sea","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/IUCN_IA_Targets.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"IUCN and Inverse Area based Targets for Aquamaps example species — IUCN_IA_Targets","text":"","code":"IUCN_IA_Targets"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/IUCN_IA_Targets.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"IUCN and Inverse Area based Targets for Aquamaps example species — IUCN_IA_Targets","text":"IUCN_IA_Targets data frame 15 rows 4 columns: Species Species names found IUCN database Area km2 total suitable habitat species Target Individual species-specific target IUCN_Category IUCN category species","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/IUCN_IA_Targets.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"IUCN and Inverse Area based Targets for Aquamaps example species — IUCN_IA_Targets","text":"https://www.iucnredlist.org/","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/MPAsCoralSea.html","id":null,"dir":"Reference","previous_headings":"","what":"Current Marine Protected Areas (MPAs) of the Coral Sea — MPAsCoralSea","title":"Current Marine Protected Areas (MPAs) of the Coral Sea — MPAsCoralSea","text":"sf file containing current Marine Protected Areas (MPAs) coral sea","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/MPAsCoralSea.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Current Marine Protected Areas (MPAs) of the Coral Sea — MPAsCoralSea","text":"","code":"MPAsCoralSea"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/MPAsCoralSea.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Current Marine Protected Areas (MPAs) of the Coral Sea — MPAsCoralSea","text":"MPAsCoralSea data frame 397 rows 17 columns: wdpa binary vector denoting presence absence current MPA","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/MPAsCoralSea.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Current Marine Protected Areas (MPAs) of the Coral Sea — MPAsCoralSea","text":"https://www.protectedplanet.net/en/thematic-areas/wdpa?tab=WDPA","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_PUs.html","id":null,"dir":"Reference","previous_headings":"","what":"Planning Units — dat_PUs","title":"Planning Units — dat_PUs","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_PUs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Planning Units — dat_PUs","text":"","code":"dat_PUs"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_PUs.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Planning Units — dat_PUs","text":"dat_PUs data frame XXXX rows XXX columns: geometry sf geometry column","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_PUs.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Planning Units — dat_PUs","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bathy.html","id":null,"dir":"Reference","previous_headings":"","what":"Bathymetry Data — dat_bathy","title":"Bathymetry Data — dat_bathy","text":"Bathymetry data downloaded via oceandatr package","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bathy.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Bathymetry Data — dat_bathy","text":"","code":"dat_bathy"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bathy.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Bathymetry Data — dat_bathy","text":"dat_bathy data frame bathymetry data bathymetry Bathymetry data geometry sf geometry column","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bathy.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Bathymetry Data — dat_bathy","text":"\"oceandatr package\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bndry.html","id":null,"dir":"Reference","previous_headings":"","what":"Boundary of Planning Units — dat_bndry","title":"Boundary of Planning Units — dat_bndry","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bndry.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Boundary of Planning Units — dat_bndry","text":"","code":"dat_bndry"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bndry.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Boundary of Planning Units — dat_bndry","text":"dat_bndry data frame XXXX rows XXX columns: geometry sf geometry column","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bndry.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Boundary of Planning Units — dat_bndry","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category.html","id":null,"dir":"Reference","previous_headings":"","what":"Category vector — dat_category","title":"Category vector — dat_category","text":"tibble containing specific grouping features","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Category vector — dat_category","text":"","code":"dat_category"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Category vector — dat_category","text":"dat_category data frame XXXX rows XXX columns: feature features available spatial prioritization category categories features","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Category vector — dat_category","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category2.html","id":null,"dir":"Reference","previous_headings":"","what":"Category vector — dat_category2","title":"Category vector — dat_category2","text":"tibble containing specific grouping features","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Category vector — dat_category2","text":"","code":"dat_category2"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category2.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Category vector — dat_category2","text":"dat_category2 data frame XXXX rows XXX columns: feature features available spatial prioritization category categories features","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category2.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Category vector — dat_category2","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_clim.html","id":null,"dir":"Reference","previous_headings":"","what":"Climate metric data — dat_clim","title":"Climate metric data — dat_clim","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_clim.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Climate metric data — dat_clim","text":"","code":"dat_clim"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_clim.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Climate metric data — dat_clim","text":"dat_clim data frame 780 rows 3 columns: geometry sf geometry column metric climate metric information","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_clim.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Climate metric data — dat_clim","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_mpas.html","id":null,"dir":"Reference","previous_headings":"","what":"Marine Protected Areas (MPAs) Data — dat_mpas","title":"Marine Protected Areas (MPAs) Data — dat_mpas","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_mpas.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Marine Protected Areas (MPAs) Data — dat_mpas","text":"","code":"dat_mpas"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_mpas.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Marine Protected Areas (MPAs) Data — dat_mpas","text":"dat_mpas data frame XXXX rows XXX columns: geometry sf geometry column wdpa binary MPA information (1: MPA)","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_mpas.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Marine Protected Areas (MPAs) Data — dat_mpas","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_region.html","id":null,"dir":"Reference","previous_headings":"","what":"Regionalisation — dat_region","title":"Regionalisation — dat_region","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_region.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Regionalisation — dat_region","text":"","code":"dat_region"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_region.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Regionalisation — dat_region","text":"dat_region data frame XXXX rows XXX columns: geometry sf geometry column","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_region.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Regionalisation — dat_region","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin.html","id":null,"dir":"Reference","previous_headings":"","what":"Binary Species Data — dat_species_bin","title":"Binary Species Data — dat_species_bin","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Binary Species Data — dat_species_bin","text":"","code":"dat_species_bin"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Binary Species Data — dat_species_bin","text":"dat_species_bin data frame XXXX rows XXX columns: geometry sf geometry column","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Binary Species Data — dat_species_bin","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin2.html","id":null,"dir":"Reference","previous_headings":"","what":"Binary Species Data 2 — dat_species_bin2","title":"Binary Species Data 2 — dat_species_bin2","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Binary Species Data 2 — dat_species_bin2","text":"","code":"dat_species_bin2"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin2.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Binary Species Data 2 — dat_species_bin2","text":"dat_species_bin2 data frame XXXX rows XXX columns: geometry sf geometry column","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin2.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Binary Species Data 2 — dat_species_bin2","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_prob.html","id":null,"dir":"Reference","previous_headings":"","what":"Probability Species Data — dat_species_prob","title":"Probability Species Data — dat_species_prob","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_prob.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Probability Species Data — dat_species_prob","text":"","code":"dat_species_prob"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_prob.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Probability Species Data — dat_species_prob","text":"dat_species_prob data frame XXXX rows XXX columns: geometry sf geometry column","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_prob.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Probability Species Data — dat_species_prob","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/pipe.html","id":null,"dir":"Reference","previous_headings":"","what":"Pipe operator — %>%","title":"Pipe operator — %>%","text":"See magrittr::%>% details.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/pipe.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Pipe operator — %>%","text":"","code":"lhs %>% rhs"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/spDataFiltered.html","id":null,"dir":"Reference","previous_headings":"","what":"Example data — spDataFiltered","title":"Example data — spDataFiltered","text":"Example data","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/spDataFiltered.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Example data — spDataFiltered","text":"","code":"spDataFiltered"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/spDataFiltered.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Example data — spDataFiltered","text":"spDataFiltered data frame sample species data Species Species names","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/spDataFiltered.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Example data — spDataFiltered","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/spatialplanr-package.html","id":null,"dir":"Reference","previous_headings":"","what":"spatialplanr: Help files for prioritzr Spatial Planning projects — spatialplanr-package","title":"spatialplanr: Help files for prioritzr Spatial Planning projects — spatialplanr-package","text":"package provides range tools setting , running plotting spatial plan using prioritizr. intended use Mathematical Marine Ecology Lab UQ, sets projects using approach data sets.","code":""},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/reference/spatialplanr-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"spatialplanr: Help files for prioritzr Spatial Planning projects — spatialplanr-package","text":"Maintainer: Jason D. Everett JaseEverett@gmail.com (ORCID) Authors: Sandra Neubert sandra.neubert97@gmail.com (ORCID)","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_apply_cutoffs.html","id":null,"dir":"Reference","previous_headings":"","what":"Apply Cutoffs to Feature Data — splnr_apply_cutoffs","title":"Apply Cutoffs to Feature Data — splnr_apply_cutoffs","text":"splnr_apply_cutoffs() transforms numeric feature data sf dataframe binary (0 1) presence/absence values based specified cutoffs. provides flexibility either keep values cutoff 1 (default) invert logic keep values cutoff 1.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_apply_cutoffs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Apply Cutoffs to Feature Data — splnr_apply_cutoffs","text":"","code":"splnr_apply_cutoffs(features, Cutoffs, inverse = FALSE)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_apply_cutoffs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Apply Cutoffs to Feature Data — splnr_apply_cutoffs","text":"features sf dataframe. must contain geometry column least one numeric column cutoffs applied. Cutoffs numeric value named numeric vector cutoffs. single unnamed numeric value, applied numeric columns. named numeric vector, names must correspond numeric column names features. cutoff values must 0 1. inverse logical value (TRUE FALSE). TRUE, values Cutoffs converted 1 (others 0). FALSE (default), values Cutoffs converted 1.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_apply_cutoffs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Apply Cutoffs to Feature Data — splnr_apply_cutoffs","text":"modified sf dataframe structure geometry features, targeted numeric columns transformed binary (0 1) values based specified cutoffs inverse setting.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_apply_cutoffs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Apply Cutoffs to Feature Data — splnr_apply_cutoffs","text":"function crucial standardizing feature data, species probability distributions habitat suitability scores, binary format often required conservation planning spatial analysis (e.g., prioritizr). function operates two primary modes based Cutoffs parameter: Single Cutoff: Cutoffs single numeric value (e.g., 0.5), value applied uniformly numeric columns features dataframe, excluding geometry column. numeric cell: - value >= Cutoffs, becomes 1. - value < Cutoffs, becomes 0. - NA values always converted 0. Named Vector Cutoffs: Cutoffs named numeric vector (e.g., c(\"feature1\" = 0.5, \"feature2\" = 0.3)), specified cutoff applied individually corresponding named column features. allows different thresholds different features. transformation rules apply specified column. inverse parameter provides additional control binarization: inverse = FALSE (default): Values cutoff become 1. inverse = TRUE: Values cutoff become 1. initial binarization (values >= cutoff 1), binary results flipped (0s become 1s, 1s become 0s) achieve inverse effect. NA values numeric columns consistently converted 0 binarization process, regardless inverse setting.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_apply_cutoffs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Apply Cutoffs to Feature Data — splnr_apply_cutoffs","text":"","code":"# Example 1: Single cutoff (0.5) applied to all numeric feature columns # (Spp1_Prob, Spp2_Prob, and Cost will be binarized based on 0.5) df_single_cutoff <- splnr_apply_cutoffs(dat_species_prob, Cutoffs = 0.5) #> Applying single cutoff of 0.5 to all numeric feature columns. print(df_single_cutoff) #> Simple feature collection with 780 features and 5 fields #> Geometry type: POLYGON #> Dimension: XY #> Bounding box: xmin: 100 ymin: -50 xmax: 160 ymax: 2 #> Geodetic CRS: WGS 84 #> # A tibble: 780 × 6 #> geometry Spp1 Spp2 Spp3 Spp4 Spp5 #> #> 1 ((100 -50, 102 -50, 102 -48, 100 -48, 100 -50)) 1 0 0 0 0 #> 2 ((102 -50, 104 -50, 104 -48, 102 -48, 102 -50)) 1 0 1 1 0 #> 3 ((104 -50, 106 -50, 106 -48, 104 -48, 104 -50)) 0 1 0 1 1 #> 4 ((106 -50, 108 -50, 108 -48, 106 -48, 106 -50)) 1 1 1 1 1 #> 5 ((108 -50, 110 -50, 110 -48, 108 -48, 108 -50)) 0 1 0 1 1 #> 6 ((110 -50, 112 -50, 112 -48, 110 -48, 110 -50)) 1 0 1 0 0 #> 7 ((112 -50, 114 -50, 114 -48, 112 -48, 112 -50)) 0 1 0 0 0 #> 8 ((114 -50, 116 -50, 116 -48, 114 -48, 114 -50)) 0 0 0 0 1 #> 9 ((116 -50, 118 -50, 118 -48, 116 -48, 116 -50)) 0 1 1 0 1 #> 10 ((118 -50, 120 -50, 120 -48, 118 -48, 118 -50)) 1 0 1 0 1 #> # ℹ 770 more rows # Example 2: Named cutoffs for specific columns # Spp1_Prob >= 0.6 becomes 1, Spp2_Prob >= 0.4 becomes 1 df_named_cutoffs <- splnr_apply_cutoffs( dat_species_prob, Cutoffs = c(\"Spp1\" = 0.6, \"Spp2\" = 0.4) ) #> Applying named cutoffs to specific feature columns. #> Applying cutoff 0.6 to column 'Spp1'. #> Applying cutoff 0.4 to column 'Spp2'. print(df_named_cutoffs) #> Simple feature collection with 780 features and 5 fields #> Geometry type: POLYGON #> Dimension: XY #> Bounding box: xmin: 100 ymin: -50 xmax: 160 ymax: 2 #> Geodetic CRS: WGS 84 #> # A tibble: 780 × 6 #> geometry Spp1 Spp2 Spp3 Spp4 Spp5 #> #> 1 ((100 -50, 102 -50, 102 -48, 100 -48, 100… 1 0 0.0969 0.435 0.0418 #> 2 ((102 -50, 104 -50, 104 -48, 102 -48, 102… 0 1 0.504 0.503 0.360 #> 3 ((104 -50, 106 -50, 106 -48, 104 -48, 104… 0 1 0.285 0.755 0.653 #> 4 ((106 -50, 108 -50, 108 -48, 106 -48, 106… 0 1 0.564 0.503 0.529 #> 5 ((108 -50, 110 -50, 110 -48, 108 -48, 108… 0 1 0.150 0.863 0.753 #> 6 ((110 -50, 112 -50, 112 -48, 110 -48, 110… 1 1 0.807 0.458 0.374 #> 7 ((112 -50, 114 -50, 114 -48, 112 -48, 112… 0 1 0.00963 0.102 0.114 #> 8 ((114 -50, 116 -50, 116 -48, 114 -48, 114… 0 0 0.481 0.231 0.764 #> 9 ((116 -50, 118 -50, 118 -48, 116 -48, 116… 0 1 0.552 0.00978 0.552 #> 10 ((118 -50, 120 -50, 120 -48, 118 -48, 118… 1 1 0.695 0.00687 0.815 #> # ℹ 770 more rows # Example 3: Single cutoff (0.5) with inverse logic # Values BELOW 0.5 become 1. df_inverse_cutoff <- splnr_apply_cutoffs(dat_species_prob, Cutoffs = 0.5, inverse = TRUE) #> Applying single cutoff of 0.5 to all numeric feature columns. #> Inverse logic applied: values below cutoff will be 1. print(df_inverse_cutoff) #> Simple feature collection with 780 features and 5 fields #> Geometry type: POLYGON #> Dimension: XY #> Bounding box: xmin: 100 ymin: -50 xmax: 160 ymax: 2 #> Geodetic CRS: WGS 84 #> # A tibble: 780 × 6 #> geometry Spp1 Spp2 Spp3 Spp4 Spp5 #> #> 1 ((100 -50, 102 -50, 102 -48, 100 -48, 100 -50)) 0 1 1 1 1 #> 2 ((102 -50, 104 -50, 104 -48, 102 -48, 102 -50)) 0 1 0 0 1 #> 3 ((104 -50, 106 -50, 106 -48, 104 -48, 104 -50)) 1 0 1 0 0 #> 4 ((106 -50, 108 -50, 108 -48, 106 -48, 106 -50)) 0 0 0 0 0 #> 5 ((108 -50, 110 -50, 110 -48, 108 -48, 108 -50)) 1 0 1 0 0 #> 6 ((110 -50, 112 -50, 112 -48, 110 -48, 110 -50)) 0 1 0 1 1 #> 7 ((112 -50, 114 -50, 114 -48, 112 -48, 112 -50)) 1 0 1 1 1 #> 8 ((114 -50, 116 -50, 116 -48, 114 -48, 114 -50)) 1 1 1 1 0 #> 9 ((116 -50, 118 -50, 118 -48, 116 -48, 116 -50)) 1 0 0 1 0 #> 10 ((118 -50, 120 -50, 120 -48, 118 -48, 118 -50)) 0 1 0 1 0 #> # ℹ 770 more rows # Example 4: Named cutoffs with inverse logic df_named_inverse <- splnr_apply_cutoffs( dat_species_prob, Cutoffs = c(\"Spp1\" = 0.7, \"Spp2\" = 0.3), inverse = TRUE ) #> Applying named cutoffs to specific feature columns. #> Applying cutoff 0.7 to column 'Spp1'. #> Inverse logic applied for column 'Spp1': values below cutoff will be 1. #> Applying cutoff 0.3 to column 'Spp2'. #> Inverse logic applied for column 'Spp2': values below cutoff will be 1. print(df_named_inverse) #> Simple feature collection with 780 features and 5 fields #> Geometry type: POLYGON #> Dimension: XY #> Bounding box: xmin: 100 ymin: -50 xmax: 160 ymax: 2 #> Geodetic CRS: WGS 84 #> # A tibble: 780 × 6 #> geometry Spp1 Spp2 Spp3 Spp4 Spp5 #> #> 1 ((100 -50, 102 -50, 102 -48, 100 -48, 100… 1 1 0.0969 0.435 0.0418 #> 2 ((102 -50, 104 -50, 104 -48, 102 -48, 102… 1 0 0.504 0.503 0.360 #> 3 ((104 -50, 106 -50, 106 -48, 104 -48, 104… 1 0 0.285 0.755 0.653 #> 4 ((106 -50, 108 -50, 108 -48, 106 -48, 106… 1 0 0.564 0.503 0.529 #> 5 ((108 -50, 110 -50, 110 -48, 108 -48, 108… 1 0 0.150 0.863 0.753 #> 6 ((110 -50, 112 -50, 112 -48, 110 -48, 110… 0 0 0.807 0.458 0.374 #> 7 ((112 -50, 114 -50, 114 -48, 112 -48, 112… 1 0 0.00963 0.102 0.114 #> 8 ((114 -50, 116 -50, 116 -48, 114 -48, 114… 1 1 0.481 0.231 0.764 #> 9 ((116 -50, 118 -50, 118 -48, 116 -48, 116… 1 0 0.552 0.00978 0.552 #> 10 ((118 -50, 120 -50, 120 -48, 118 -48, 118… 1 0 0.695 0.00687 0.815 #> # ℹ 770 more rows"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_arrangeFeatures.html","id":null,"dir":"Reference","previous_headings":"","what":"Arrange Features by Spatial Coordinates — splnr_arrangeFeatures","title":"Arrange Features by Spatial Coordinates — splnr_arrangeFeatures","text":"splnr_arrangeFeatures() sorts rows sf object based longitude (X) latitude (Y) centroids. ensures consistent ordering planning units, can important reproducibility spatial analyses data processing steps.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_arrangeFeatures.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Arrange Features by Spatial Coordinates — splnr_arrangeFeatures","text":"","code":"splnr_arrangeFeatures(df)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_arrangeFeatures.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Arrange Features by Spatial Coordinates — splnr_arrangeFeatures","text":"df sf object whose rows sorted.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_arrangeFeatures.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Arrange Features by Spatial Coordinates — splnr_arrangeFeatures","text":"sorted sf object, rows ordered primarily longitude (X) secondarily latitude (Y) centroids.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_arrangeFeatures.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Arrange Features by Spatial Coordinates — splnr_arrangeFeatures","text":"function computes centroid polygon (point/multipoint) input sf object. extracts X Y coordinates centroids uses sort entire sf object. primary sort key longitude (X-coordinate), secondary sort key latitude (Y-coordinate). Sorting can beneficial tasks like debugging, comparing data different runs, ensuring deterministic behavior algorithms process spatial units sequentially.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_arrangeFeatures.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Arrange Features by Spatial Coordinates — splnr_arrangeFeatures","text":"","code":"if (FALSE) { # \\dontrun{ print(\"Original order:\") print(dat_species_prob) # Sort the features. df_arranged <- splnr_arrangeFeatures(df = dat_species_prob) print(\"Sorted order:\") print(df_arranged) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_featureApproach.html","id":null,"dir":"Reference","previous_headings":"","what":"Run the Feature Climate-Smart Approach — splnr_climate_featureApproach","title":"Run the Feature Climate-Smart Approach — splnr_climate_featureApproach","text":"splnr_climate_featureApproach() implements Feature Approach climate-smart conservation planning. involves defining global \"climate-smart\" layer adjusting conservation targets ensure specified proportion layer captured solution.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_featureApproach.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Run the Feature Climate-Smart Approach — splnr_climate_featureApproach","text":"","code":"splnr_climate_featureApproach( features, metric, targets, direction, percentile = 35, refugiaTarget = 0.3 )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_featureApproach.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Run the Feature Climate-Smart Approach — splnr_climate_featureApproach","text":"features sf object representing conservation features (e.g., species distribution data). metric sf object containing climate metric information. must column named 'metric' climate metric values per Planning Unit. targets data.frame two columns: feature (character, listing original feature names) target (numeric, initial conservation target feature proportion, e.g., 0.3). direction integer specifying direction climate-smartness: 1: Higher metric values mean climate-smart areas. -1: Lower metric values mean climate-smart areas. percentile numeric value (0-100) representing cutoff threshold determining whether area climate priority area . applied globally metric data. Defaults 35. refugiaTarget numeric value (0-1) representing target proportion assigned overall climate-smart layer. Defaults 0.3 (30%).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_featureApproach.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Run the Feature Climate-Smart Approach — splnr_climate_featureApproach","text":"list two components: Features: sf object containing binary information per Planning Unit original feature, plus new climate_layer feature. ready passed prioritizr. Targets: data.frame adjusted targets features, including climate_layer. also ready prioritizr.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_featureApproach.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Run the Feature Climate-Smart Approach — splnr_climate_featureApproach","text":"function orchestrates steps Feature Approach: Preprocessing: calls splnr_climate_feature_preprocess() identify region-wide climate-smart layer based percentile cutoff climate metric. layer added new binary feature conservation data. Target Assignment: calls splnr_climate_feature_assignTargets() calculate assign new targets. Crucially, specific refugiaTarget set newly created climate_layer feature, ensuring certain proportion climate-resilient areas included final conservation plan. output list containing modified features (now including climate_layer) corresponding adjusted targets, ready used prioritizr conservation problem.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_featureApproach.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Run the Feature Climate-Smart Approach — splnr_climate_featureApproach","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' and 'dat_clim' are existing sf objects # in your package. # Define initial targets for species features. initial_targets <- dat_species_bin %>% sf::st_drop_geometry() %>% colnames() %>% data.frame() %>% setNames(c(\"feature\")) %>% dplyr::mutate(target = 0.3) # Run the Feature Approach where higher climate metric values mean # more climate-smart areas. Feature_Approach_result <- splnr_climate_featureApproach( features = dat_species_bin, metric = dat_clim, targets = initial_targets, direction = 1, # Example: higher metric values are more climate-smart percentile = 35, refugiaTarget = 0.3 ) # Access the processed features and targets: out_sf_feature <- Feature_Approach_result$Features targets_feature <- Feature_Approach_result$Targets print(head(out_sf_feature)) print(head(targets_feature)) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_percentileApproach.html","id":null,"dir":"Reference","previous_headings":"","what":"Run the Percentile Climate-Smart Approach — splnr_climate_percentileApproach","title":"Run the Percentile Climate-Smart Approach — splnr_climate_percentileApproach","text":"splnr_climate_percentileApproach() implements Percentile Approach climate-smart conservation planning. involves filtering features climate-resilient areas adjusting conservation targets account reduced feature distribution.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_percentileApproach.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Run the Percentile Climate-Smart Approach — splnr_climate_percentileApproach","text":"","code":"splnr_climate_percentileApproach( features, metric, targets, direction, percentile = 35 )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_percentileApproach.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Run the Percentile Climate-Smart Approach — splnr_climate_percentileApproach","text":"features sf object representing conservation features (e.g., species distribution data). metric sf object containing climate metric information. must column named 'metric' climate metric values per Planning Unit. targets data.frame two columns: feature (character, listing original feature names) target (numeric, initial conservation target feature proportion, e.g., 0.3). direction integer specifying direction climate-smartness: 1: Higher metric values mean climate-smart areas. -1: Lower metric values mean climate-smart areas. percentile numeric value (0-100) representing cutoff threshold determining whether area climate priority area . applied per feature distribution. Defaults 35.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_percentileApproach.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Run the Percentile Climate-Smart Approach — splnr_climate_percentileApproach","text":"list two components: Features: sf object containing binary information per Planning Unit feature, now filtered include climate-smart occurrences. ready passed prioritizr. Targets: data.frame adjusted targets filtered features. also ready prioritizr.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_percentileApproach.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Run the Percentile Climate-Smart Approach — splnr_climate_percentileApproach","text":"function orchestrates steps Percentile Approach: Preprocessing: calls splnr_climate_percentile_preprocess() identify, feature, occurrences within climate-resilient percentile distribution based climate metric. effectively \"filters\" feature data include climate-smart components. Target Assignment: calls splnr_climate_percentile_assignTargets() calculate assign new targets filtered features. targets scaled ensure original conservation goals still met, specifically selecting areas climate-smart portions features' distributions. output list containing modified features (filtered climate-smart occurrences) corresponding adjusted targets, ready used prioritizr conservation problem.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_percentileApproach.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Run the Percentile Climate-Smart Approach — splnr_climate_percentileApproach","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' and 'dat_clim' are existing sf objects # in your package. # Define initial targets for species features. initial_targets <- dat_species_bin %>% sf::st_drop_geometry() %>% colnames() %>% data.frame() %>% setNames(c(\"feature\")) %>% dplyr::mutate(target = 0.3) # Run the Percentile Approach where higher climate metric values mean # more climate-smart areas. Percentile_Approach_result <- splnr_climate_percentileApproach( features = dat_species_bin, metric = dat_clim, targets = initial_targets, direction = 1, # Example: higher metric values are more climate-smart percentile = 35 ) # Access the processed features and targets: out_sf_percentile <- Percentile_Approach_result$Features targets_percentile <- Percentile_Approach_result$Targets print(head(out_sf_percentile)) print(head(targets_percentile)) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_priorityAreaApproach.html","id":null,"dir":"Reference","previous_headings":"","what":"Run the Climate Priority Area (CPA) Approach — splnr_climate_priorityAreaApproach","title":"Run the Climate Priority Area (CPA) Approach — splnr_climate_priorityAreaApproach","text":"splnr_climate_priorityAreaApproach() implements Climate Priority Area approach splitting conservation features climate-smart (CS) non-climate-smart (NCS) components adjusting targets accordingly. allows conservation planning prioritize areas higher climate resilience.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_priorityAreaApproach.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Run the Climate Priority Area (CPA) Approach — splnr_climate_priorityAreaApproach","text":"","code":"splnr_climate_priorityAreaApproach( features, metric, targets, direction, percentile = 5, refugiaTarget = 1 )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_priorityAreaApproach.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Run the Climate Priority Area (CPA) Approach — splnr_climate_priorityAreaApproach","text":"features sf object representing conservation features (e.g., species distribution data). column (excluding geometry) typically binary representation feature's presence (1) absence (0) Planning Unit. metric sf object containing climate metric information. must column named 'metric' climate metric values per Planning Unit. targets data.frame two columns: feature (character, listing original feature names) target (numeric, initial conservation target feature proportion, e.g., 0.3). direction integer specifying direction climate-smartness: 1: Higher metric values mean climate-smart areas. -1: Lower metric values mean climate-smart areas. percentile numeric value (0-100) representing cutoff threshold determining climate-smart areas. example, percentile = 5 means climate-smart 5% areas (based direction) considered. value represents lower limit threshold. Defaults 5. refugiaTarget numeric value (0-1) representing target proportion assigned specifically climate-smart areas (refugia). Defaults 1 (100%).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_priorityAreaApproach.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Run the Climate Priority Area (CPA) Approach — splnr_climate_priorityAreaApproach","text":"list two components: Features: sf object containing binary information per Planning Unit feature, now split _CS (climate-smart) _NCS (non-climate-smart) components. ready passed prioritizr creating conservation problem. Targets: data.frame adjusted targets climate-split features. also ready prioritizr.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_priorityAreaApproach.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Run the Climate Priority Area (CPA) Approach — splnr_climate_priorityAreaApproach","text":"function orchestrates steps required CPA approach: Preprocessing: calls splnr_climate_priorityArea_preprocess() categorize feature's occurrences CS NCS areas based climate metric specified percentile cutoff. Target Assignment: calls splnr_climate_priorityArea_assignTargets() calculate assign new targets CS NCS feature components. ensures conservation goals reflect desired emphasis climate-smart areas (e.g., aiming 100% representation features highly resilient areas). output function list containing modified features (now split CS/NCS components) corresponding adjusted targets, ready used prioritizr conservation problem.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_priorityAreaApproach.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Run the Climate Priority Area (CPA) Approach — splnr_climate_priorityAreaApproach","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' and 'dat_clim' are existing sf objects # in your package. # Define initial targets for species features. initial_targets <- dat_species_bin %>% sf::st_drop_geometry() %>% colnames() %>% data.frame() %>% setNames(c(\"feature\")) %>% dplyr::mutate(target = 0.3) # Run the Climate Priority Area Approach where lower climate metric # values mean more climate-smart areas. CPA_Approach_result <- splnr_climate_priorityAreaApproach( features = dat_species_bin, metric = dat_clim, targets = initial_targets, direction = -1, # Example: lower metric values are more climate-smart percentile = 5, refugiaTarget = 1 ) # Access the processed features and targets: out_sf_cpa <- CPA_Approach_result$Features targets_cpa <- CPA_Approach_result$Targets print(head(out_sf_cpa)) print(head(targets_cpa)) } # }"},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_regionalisation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to interpolate regionalisation data onto Planning Units — splnr_convert_regionalisation","text":"","code":"splnr_convert_regionalisation(dat, PUs, cat_name = NA, col_name = NA)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_regionalisation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to interpolate regionalisation data onto Planning Units — splnr_convert_regionalisation","text":"dat Dataset raster sf format. PUs sf object Planning Units cat_name character string categories regionalisation col_name name layer","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_regionalisation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to interpolate regionalisation data onto Planning Units — splnr_convert_regionalisation","text":"sf object containing Planning Units feature.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_regionalisation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Function to interpolate regionalisation data onto Planning Units — splnr_convert_regionalisation","text":"wrapper splnr_Convert2PUs() deals need processes layer seperately dataset needs raster vector format. input contains continuous data, output area-averaged mean planning unit. input binary, output proportion planning unit covered.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_regionalisation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to interpolate regionalisation data onto Planning Units — splnr_convert_regionalisation","text":"","code":"if (FALSE) { # \\dontrun{ df <- splnr_convert_regionalisation(dat, PUs) } # }"},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_toPUs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to interpolate data onto Planning Units — splnr_convert_toPUs","text":"","code":"splnr_convert_toPUs(dat, PlanUnits)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_toPUs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to interpolate data onto Planning Units — splnr_convert_toPUs","text":"dat Dataset filename dataset PlanUnits sf object Planning Units","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_toPUs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to interpolate data onto Planning Units — splnr_convert_toPUs","text":"sf object containing Planning Units feature.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_toPUs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Function to interpolate data onto Planning Units — splnr_convert_toPUs","text":"dataset needs raster vector format. input contains continuous data, output area-averaged mean planning unit. input binary, output proportion planning unit covered.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_toPUs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to interpolate data onto Planning Units — splnr_convert_toPUs","text":"","code":"if (FALSE) { # \\dontrun{ df <- splnr_convert_toPUs(dat, PlanUnits) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_create_polygon.html","id":null,"dir":"Reference","previous_headings":"","what":"Create Spatial Polygon from Coordinates — splnr_create_polygon","title":"Create Spatial Polygon from Coordinates — splnr_create_polygon","text":"splnr_create_polygon() constructs sf polygon object series longitude latitude coordinates provided tibble.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_create_polygon.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create Spatial Polygon from Coordinates — splnr_create_polygon","text":"","code":"splnr_create_polygon(x, cCRS = \"EPSG:4326\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_create_polygon.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create Spatial Polygon from Coordinates — splnr_create_polygon","text":"x tibble (tbl_df) object least two columns, typically named x (longitude) y (latitude), representing vertices polygon sequence. first last coordinate pair form closed polygon. cCRS character string specifying target CRS output polygon EPSG code format (e.g., \"EPSG:4326\"). Defaults \"EPSG:4326\" (WGS 84).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_create_polygon.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create Spatial Polygon from Coordinates — splnr_create_polygon","text":"sf object representing created polygon, specified CRS.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_create_polygon.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create Spatial Polygon from Coordinates — splnr_create_polygon","text":"utility function simplifies creation spatial polygons tabular format coordinates. takes tibble columns 'x' 'y' represent longitude latitude, respectively. coordinates converted matrix, sf polygon, finally sf object specified Coordinate Reference System (CRS). function assumes input coordinates (x) initially WGS 84 (EPSG:4326) transforms cCRS different CRS specified.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_create_polygon.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create Spatial Polygon from Coordinates — splnr_create_polygon","text":"","code":"# Example: Create a simple square polygon square_coords <- dplyr::tibble( x = c(-50, 50, 50, -50, -50), y = c(120, 120, 180, 180, 120) ) simple_polygon <- splnr_create_polygon(x = square_coords) print(simple_polygon) #> Simple feature collection with 1 feature and 0 fields #> Geometry type: POLYGON #> Dimension: XY #> Bounding box: xmin: -50 ymin: 120 xmax: 50 ymax: 180 #> Geodetic CRS: WGS 84 #> geometry #> 1 POLYGON ((-50 120, 50 120, ... # Example: Create a polygon and transform to a different CRS (e.g., a UTM zone) if (FALSE) { # \\dontrun{ # Note: EPSG:32611 is UTM Zone 11N. Ensure it's appropriate for your coordinates. transformed_polygon <- splnr_create_polygon(x = square_coords, cCRS = \"EPSG:32611\") print(transformed_polygon) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_featureNames.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract Feature Names from Spatial Data — splnr_featureNames","title":"Extract Feature Names from Spatial Data — splnr_featureNames","text":"splnr_featureNames() extracts names conservation features sf dataframe, excluding geometry specified columns.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_featureNames.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract Feature Names from Spatial Data — splnr_featureNames","text":"","code":"splnr_featureNames(dat, exclude = NA)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_featureNames.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract Feature Names from Spatial Data — splnr_featureNames","text":"dat sf dataframe representing conservation features. non-geometry column assumed feature. exclude character vector column names (prefixes) exclude output. default, excludes columns starting \"Cost_\". provide value, appended default exclusion. Set NULL character(0) want exclusions beyond default.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_featureNames.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract Feature Names from Spatial Data — splnr_featureNames","text":"character vector containing names conservation features.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_featureNames.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Extract Feature Names from Spatial Data — splnr_featureNames","text":"function utility preparing data prioritizr conservation planning packages require vector feature names. typically removes geometry column columns related cost (prefixed \"Cost_\") default, allowing specify additional columns exclude. output simple character vector column names, can directly used feature identifiers conservation problems.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_featureNames.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract Feature Names from Spatial Data — splnr_featureNames","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_prob' is an existing sf object in your package. # It likely has columns like 'Spp1', 'Spp2', 'Cost_SomeMeasure', etc. # Example 1: Get all feature names, excluding default 'Cost_' columns. feature_names_default <- splnr_featureNames(dat = dat_species_prob) print(feature_names_default) # Example 2: Get feature names, excluding 'Cost_' columns and 'Spp5'. feature_names_custom_exclude <- splnr_featureNames( dat = dat_species_prob, exclude = \"Spp5\" ) print(feature_names_custom_exclude) # Example 3: If you only want to exclude a specific column and not 'Cost_' # (you'd need to manually specify exclude = \"geometry\" and then your column) # This case is more complex and usually handled by direct dplyr::select. # This function's primary use is to remove cost columns and potentially others. } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_IUCNRedList.html","id":null,"dir":"Reference","previous_headings":"","what":"Match Species to IUCN RedList Categories — splnr_get_IUCNRedList","title":"Match Species to IUCN RedList Categories — splnr_get_IUCNRedList","text":"splnr_get_IUCNRedList function retrieves IUCN Red List category information given set species appends input dataframe.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_IUCNRedList.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Match Species to IUCN RedList Categories — splnr_get_IUCNRedList","text":"","code":"splnr_get_IUCNRedList(df, species_col = \"Species\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_IUCNRedList.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Match Species to IUCN RedList Categories — splnr_get_IUCNRedList","text":"df input dataframe containing species names matched. species_col character string specifying name column df contains species scientific names (e.g., \"Species\" \"scientific_name\"). Defaults \"Species\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_IUCNRedList.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Match Species to IUCN RedList Categories — splnr_get_IUCNRedList","text":"dataframe identical input df, additional column named IUCN_Category. species found IUCN Red List, IUCN_Category NA.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_IUCNRedList.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Match Species to IUCN RedList Categories — splnr_get_IUCNRedList","text":"use function, must first obtain API key IUCN. alphanumeric string required every request. can visit IUCN website request key using rl_use_iucn(). Please note receiving key might take 1-2 days submitting form. receive API key, crucial set environment variable named IUCN_REDLIST_KEY. can temporarily current R session using Sys.setenv(IUCN_REDLIST_KEY = \"YOUR_API_KEY_HERE\"). set permanently, add IUCN_REDLIST_KEY = \"YOUR_API_KEY_HERE\" .Renviron file. can check key set correctly using Sys.getenv(\"IUCN_REDLIST_KEY\"). IUCN Red List uses various categories assess extinction risk. function queries Red List following categories: DD: Data Deficient LC: Least Concern NT: Near Threatened VU: Vulnerable EN: Endangered CR: Critically Endangered EW: Extinct Wild EX: Extinct LRlc: Lower Risk / least concern (old category) LRnt: Lower Risk / near threatened (old category) LRcd: Lower Risk / conservation dependent (old category) function attempt match species categories present IUCN Red List database.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_IUCNRedList.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Match Species to IUCN RedList Categories — splnr_get_IUCNRedList","text":"","code":"if (FALSE) { # \\dontrun{ # Ensure your IUCN_REDLIST_KEY is set as an environment variable before running. # For example: Sys.setenv(IUCN_REDLIST_KEY = \"YOUR_API_KEY_HERE\") # Example: Create a dataframe with species names and retrieve their IUCN Red List categories. df_species_redlist <- data.frame(Species = c(\"Diomedea exulans\", \"Hippocampus kuda\", \"Squatina squatina\")) %>% splnr_get_IUCNRedList() print(df_species_redlist) # Example with a different column name for species df_alt_col <- data.frame(ScientificName = c(\"Panthera leo\", \"Orcinus orca\")) %>% splnr_get_IUCNRedList(species_col = \"ScientificName\") print(df_alt_col) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_MPAs.html","id":null,"dir":"Reference","previous_headings":"","what":"Get Marine Protected Areas (MPAs) from WDPA — splnr_get_MPAs","title":"Get Marine Protected Areas (MPAs) from WDPA — splnr_get_MPAs","text":"function serves wrapper wdpar package, facilitating retrieval Marine Protected Areas (MPAs) World Database Protected Areas (WDPA) intersecting provided planning units. result sf object indicating area planning units covered selected marine protected areas.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_MPAs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get Marine Protected Areas (MPAs) from WDPA — splnr_get_MPAs","text":"","code":"splnr_get_MPAs( PlanUnits, Countries, Status = c(\"Designated\", \"Established\", \"Inscribed\"), Desig = c(\"National\", \"Regional\", \"International\", \"Not Applicable\"), Category = c(\"Ia\", \"Ib\", \"II\", \"III\", \"IV\"), ... )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_MPAs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get Marine Protected Areas (MPAs) from WDPA — splnr_get_MPAs","text":"PlanUnits sf object representing planning units used intersection. object valid CRS defined. Countries character vector specifying countries extract MPAs. retrieve global MPAs, use value \"global\". Country names match recognized WDPA database. Status character vector specifying desired status protected areas include. Defaults c(\"Designated\", \"Established\", \"Inscribed\"). Desig character vector specifying desired designation types protected areas. Defaults c(\"National\", \"Regional\", \"International\", \"Applicable\"). Category character vector specifying desired IUCN Protected Area Management Categories. Defaults c(\"Ia\", \"Ib\", \"II\", \"III\", \"IV\"). ... arguments passed directly wdpa_fetch() function wdpar package (e.g., verbose = TRUE).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_MPAs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get Marine Protected Areas (MPAs) from WDPA — splnr_get_MPAs","text":"sf object. object contains planning units, additional wdpa column (set 1) areas intersect selected MPAs.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_MPAs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Get Marine Protected Areas (MPAs) from WDPA — splnr_get_MPAs","text":"function leverages robust capabilities wdpar package Jeffrey O. Hanson access process WDPA data. allows filtering MPAs based country, status, designation type, IUCN category, spatially intersects MPAs defined planning units. comprehensive understanding WDPA data fields: Status: Refers establishment, designation, proposal status protected area time data submission. Valid options include \"Designated\", \"Established\", \"Inscribed\", \"Proposed\", \"Adopted\". Desig (Designation Type): Categorizes legal official designation protected area. Valid options include \"National\", \"Regional\", \"International\", \"Applicable\". Category (IUCN Protected Area Management Categories): Represents IUCN management categories protected areas. Valid options include \"Ia\", \"Ib\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"Reported\", \"Applicable\", \"Assigned\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_MPAs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get Marine Protected Areas (MPAs) from WDPA — splnr_get_MPAs","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_PUs' is an existing sf object of planning units in your package. # Example: Get MPAs for Australia and intersect with planning units. dat_mpas <- splnr_get_MPAs(PlanUnits = dat_PUs, Countries = \"Australia\") # Example: Get MPAs for multiple countries with specific status and categories. dat_mpas_specific <- splnr_get_MPAs( PlanUnits = dat_PUs, Countries = c(\"Australia\", \"New Zealand\"), Status = c(\"Designated\", \"Proposed\"), Category = c(\"II\", \"IV\") ) # Example: Visualize the result using ggplot2. # Assuming 'aust' is an sf object representing Australia's coastline, # perhaps loaded from rnaturalearth::ne_countries. aust <- rnaturalearth::ne_countries(country = \"Australia\", returnclass = \"sf\") gg <- ggplot2::ggplot() + ggplot2::geom_sf(data = dat_mpas, ggplot2::aes(fill = wdpa)) + ggplot2::geom_sf(data = aust, fill = \"grey50\") + ggplot2::labs(title = \"Marine Protected Areas in Australia\") + ggplot2::theme_minimal() print(gg) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_boundary.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a Planning Region Boundary — splnr_get_boundary","title":"Create a Planning Region Boundary — splnr_get_boundary","text":"function generates spatial boundary planning region sf polygon object. boundary can defined several ways: simple rectangular bounding box using numeric coordinates. global boundary spanning entire world. complex shape based marine ecoregions rnaturalearth.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_boundary.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a Planning Region Boundary — splnr_get_boundary","text":"","code":"splnr_get_boundary(Limits, Type = NULL, res = 1, cCRS = \"ESRI:54009\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_boundary.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a Planning Region Boundary — splnr_get_boundary","text":"Limits required input defines spatial extent. can : named numeric vector four elements: c(\"xmin\" = ..., \"xmax\" = ..., \"ymin\" = ..., \"ymax\" = ...). string \"Global\" create worldwide boundary. character vector ocean/sea names (e.g., \"North Atlantic Ocean\") used Type = \"Ocean\". Type type Limits provided. required Limits character vector ocean names, case \"Ocean\". longer required removed future version. res [numeric(1)] resolution (decimal degrees) used construct polygon vertices Limits numeric \"Global\". Defaults 1. Must positive number. cCRS [character(1)] coordinate reference system (CRS) output sf object. Can PROJ4 string EPSG code. Defaults \"ESRI:54009\" (Mollweide).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_boundary.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a Planning Region Boundary — splnr_get_boundary","text":"sf object containing single polygon feature representing planning boundary.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_boundary.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a Planning Region Boundary — splnr_get_boundary","text":"planning region boundary foundational first step spatial conservation planning exercises. subsequent analyses data preparation steps within spatialplanr package rely defined boundary. coordinate reference system (CRS) returned object projected default (Mollweide), suitable equal-area calculations.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_boundary.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a Planning Region Boundary — splnr_get_boundary","text":"","code":"if (FALSE) { # \\dontrun{ # Example 1: Create a boundary from an ocean name. # This fetches polygon data for the specified ocean. bndry_ocean <- splnr_get_boundary(Limits = \"North Atlantic Ocean\", Type = \"Ocean\") plot(bndry_ocean) # Example 2: Create a global boundary. bndry_global <- splnr_get_boundary(Limits = \"Global\") plot(bndry_global) # Example 3: Create a boundary from a numeric bounding box. bndry_coords <- splnr_get_boundary( Limits = c(\"xmin\" = 150, \"xmax\" = 170, \"ymin\" = -40, \"ymax\" = -20) ) plot(bndry_coords) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_distCoast.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate Distance to Coastline — splnr_get_distCoast","title":"Calculate Distance to Coastline — splnr_get_distCoast","text":"function calculates shortest distance centroid Planning Unit sf object nearest coastline. can use either default coastline rnaturalearth package custom-provided coastline sf object.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_distCoast.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate Distance to Coastline — splnr_get_distCoast","text":"","code":"splnr_get_distCoast(dat_sf, custom_coast = NULL, res = \"medium\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_distCoast.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate Distance to Coastline — splnr_get_distCoast","text":"dat_sf [sf] sf object containing polygon point features representing Planning Units. Must valid CRS. custom_coast [sf] optional sf object representing custom coastline. NULL (default), coastline downloaded rnaturalearth. res [character(1)] resolution rnaturalearth coastline use. Options \"small\", \"medium\" (default), \"large\". parameter ignored custom_coast provided.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_distCoast.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate Distance to Coastline — splnr_get_distCoast","text":"sf object identical dat_sf added column coastDistance_km representing distance nearest coastline kilometers.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_distCoast.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate Distance to Coastline — splnr_get_distCoast","text":"function adds new column named coastDistance_km input sf object, containing calculated distances kilometers. CRS input data preserved. crucial ensure input sf object suitable projected CRS accurate distance calculations.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_distCoast.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate Distance to Coastline — splnr_get_distCoast","text":"","code":"if (FALSE) { # \\dontrun{ # Example 1: Calculate distance to coast for a simple grid bbox <- sf::st_bbox(c(xmin = 0, ymin = 0, xmax = 3, ymax = 3)) grid <- sf::st_as_sf(sf::st_make_grid(bbox, n = c(3, 3))) grid_with_dist <- splnr_get_distCoast(grid) plot(grid_with_dist[\"coastDistance_km\"]) # Example 2: Using a specific resolution for the coastline # Note: Requires the 'dat_sf' object to be created first, e.g., using # splnr_get_planning_units() if (exists(\"dat_sf\")) { dat_sf_dist <- splnr_get_distCoast(dat_sf, res = \"large\") summary(dat_sf_dist$coastDistance_km) } # Example 3: Using a custom coastline # First, create a custom coastline (e.g., from a country polygon) landmass <- rnaturalearth::ne_countries( scale = \"medium\", returnclass = \"sf\" ) if (exists(\"dat_sf\") && exists(\"landmass\")) { # Transform landmass to the same CRS as the planning units landmass_proj <- sf::st_transform(landmass, sf::st_crs(dat_sf)) dat_sf_custom_coast <- splnr_get_distCoast(dat_sf, custom_coast = landmass_proj) summary(dat_sf_custom_coast$coastDistance_km) } } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_featureRep.html","id":null,"dir":"Reference","previous_headings":"","what":"Prepare Data to Plot How Well Targets Are Met — splnr_get_featureRep","title":"Prepare Data to Plot How Well Targets Are Met — splnr_get_featureRep","text":"splnr_get_featureRep() calculates representation conservation features within prioritizr solution. function determines much feature's total abundance (area) captured selected planning units, compares specified conservation targets. can also account different climate-smart planning approaches.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_featureRep.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prepare Data to Plot How Well Targets Are Met — splnr_get_featureRep","text":"","code":"splnr_get_featureRep( soln, pDat, targets = NA, climsmart = FALSE, climsmartApproach = 0, solnCol = \"solution_1\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_featureRep.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prepare Data to Plot How Well Targets Are Met — splnr_get_featureRep","text":"soln sf object representing prioritizr solution, containing column indicating selected planning units (default: solution_1). pDat prioritizr problem object, defined prioritizr::problem(). object provides original feature data targets. targets data.frame (optional). provided, contain feature column (character) target column (numeric). used override supplement targets pDat, especially climate-smart approaches targets might pre-adjusted. Defaults NA. climsmart logical value (TRUE FALSE). TRUE, special handling climate-smart approaches enabled. Defaults FALSE. climsmartApproach integer (0, 1, 2, 3) indicating type climate-smart approach used: 0: climate-smart approach. 1: Climate Priority Area approach (features split CS/NCS). 2: Feature approach (explicitly handled function's climsmart logic, targets taken pDat default). 3: Percentile approach (features filtered). Defaults 0. solnCol character string specifying name column soln contains binary solution (1 selected, 0 selected). Defaults \"solution_1\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_featureRep.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Prepare Data to Plot How Well Targets Are Met — splnr_get_featureRep","text":"tibble dataframe containing feature names, total_amount (total units available), absolute_held (total units selected), relative_held (proportion held), target (conservation target), incidental (TRUE target 0 NA, feature still present).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_featureRep.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Prepare Data to Plot How Well Targets Are Met — splnr_get_featureRep","text":"function processes output prioritizr conservation problem (soln) corresponding problem definition (pDat) provide summary feature representation. designed work whether explicit targets provided, can adjust calculations based climate-smart approach used. function calculates: total_amount: total available amount/area feature across planning units. absolute_held: total amount/area feature captured selected planning units (solution_1 1). relative_held: proportion absolute_held relative total_amount, indicating percentage representation feature solution. target: conservation target feature (either pDat problem definition targets dataframe). incidental: logical flag indicating feature's representation 'incidental' (.e., target 0 NA, still partially fully captured solution). Climate-Smart Considerations (climsmart = TRUE): climsmart TRUE, function adjusts calculations based climsmartApproach parameter: climsmartApproach = 1 (Climate Priority Area): function sums absolute_held total_amount features split _CS (Climate-Smart) _NCS (Non-Climate-Smart) components. provides single, aggregated representation original feature, allowing comparison original target. climsmartApproach = 3 (Percentile Approach): function directly uses targets provided targets dataframe, expected adjusted percentile approach. climsmartApproach values climsmart FALSE, targets taken directly prioritizr problem's target data. output dataframe designed directly plottable functions like splnr_plot_featureRep().","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_featureRep.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Prepare Data to Plot How Well Targets Are Met — splnr_get_featureRep","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object with binary species data # and 'Cost' column. # Create a dummy prioritizr problem for basic demonstration pDat_basic <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) # Solve the problem soln_basic <- pDat_basic %>% prioritizr::solve.ConservationProblem() # Get feature representation for a basic (non-climate-smart) solution df_basic_rep <- splnr_get_featureRep( soln = soln_basic, pDat = pDat_basic ) print(df_basic_rep) # Example with Climate Priority Area (CPA) approach # Assuming 'dat_clim' is an sf object with a 'metric' column. # These would typically come from splnr_climate_priorityAreaApproach() # For example purposes, we'll create some dummy data and targets. # Simulate CPA processed features and targets cpa_features_sim <- dat_species_bin %>% dplyr::mutate( Spp1_CS = ifelse(Spp1 == 1 & runif(n()) < 0.5, 1, 0), Spp1_NCS = ifelse(Spp1 == 1 & Spp1_CS == 0, 1, 0), Spp2_CS = ifelse(Spp2 == 1 & runif(n()) < 0.6, 1, 0), Spp2_NCS = ifelse(Spp2 == 1 & Spp2_CS == 0, 1, 0), Spp3_CS = ifelse(Spp3 == 1 & runif(n()) < 0.7, 1, 0), Spp3_NCS = ifelse(Spp3 == 1 & Spp3_CS == 0, 1, 0) ) %>% dplyr::select(Spp1_CS, Spp1_NCS, Spp2_CS, Spp2_NCS, Spp3_CS, Spp3_NCS, geometry) cpa_targets_sim <- data.frame( feature = c(\"Spp1_CS\", \"Spp1_NCS\", \"Spp2_CS\", \"Spp2_NCS\", \"Spp3_CS\", \"Spp3_NCS\"), target = c(0.8, 0.2, 0.9, 0.1, 0.7, 0.3) # Example targets for CS/NCS parts ) # Create a problem with the simulated CPA features pDat_cpa_sim <- prioritizr::problem( cpa_features_sim %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1_CS\", \"Spp1_NCS\", \"Spp2_CS\", \"Spp2_NCS\", \"Spp3_CS\", \"Spp3_NCS\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(cpa_targets_sim$target, cpa_targets_sim$feature) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) # Solve the CPA problem soln_cpa_sim <- pDat_cpa_sim %>% prioritizr::solve.ConservationProblem() # Get feature representation for CPA approach df_cpa_rep <- splnr_get_featureRep( soln = soln_cpa_sim, pDat = pDat_cpa_sim, targets = cpa_targets_sim, # Pass the original CPA targets climsmart = TRUE, climsmartApproach = 1 # Indicate CPA approach ) print(df_cpa_rep) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_gfw.html","id":null,"dir":"Reference","previous_headings":"","what":"Retrieve Global Fishing Watch Data — splnr_get_gfw","title":"Retrieve Global Fishing Watch Data — splnr_get_gfw","text":"splnr_get_gfw function retrieves Global Fishing Watch (GFW) data returns sf (simple features) object. function allows flexible data queries based geographical region, time range, desired spatial temporal resolutions.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_gfw.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Retrieve Global Fishing Watch Data — splnr_get_gfw","text":"","code":"splnr_get_gfw( region, start_date, end_date, temp_res, spat_res = \"LOW\", region_source = \"EEZ\", key = gfwr::gfw_auth(), cCRS = \"EPSG:4326\", compress = FALSE )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_gfw.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Retrieve Global Fishing Watch Data — splnr_get_gfw","text":"region character string specifying name region (e.g., EEZ name) numeric ID region, sf object region_source set \"USER_SHAPEFILE\". start_date start date data retrieval, expected \"%Y-%m-%d\" format (e.g., \"2021-01-01\"). end_date end date data retrieval, expected \"%Y-%m-%d\" format (e.g., \"2022-12-31\"). temp_res desired temporal resolution data. Must one : \"DAILY\", \"MONTHLY\", \"YEARLY\". spat_res desired spatial resolution data. Must one : \"LOW\" (0.1 degree) \"HIGH\" (0.01 degree). Defaults \"LOW\". region_source source region definition. Must one : 'EEZ', 'MPA', 'RFMO', 'USER_SHAPEFILE'. Defaults \"EEZ\". key API token GFW API. provided, attempts authenticate using gfwr::gfw_auth(). See GlobalFishingWatch vignette details obtaining key. cCRS Coordinate Reference System (CRS) output sf object transformed. Defaults \"EPSG:4326\". compress logical value. TRUE, data compressed (aggregated) coordinates, summing fishing hours unique location. FALSE, raw data points returned. Defaults FALSE.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_gfw.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Retrieve Global Fishing Watch Data — splnr_get_gfw","text":"sf object containing requested GFW data. structure sf object vary depending compress temp_res parameters.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_gfw.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Retrieve Global Fishing Watch Data — splnr_get_gfw","text":"possibilities offered function extensively explained vignette(\"GlobalFishingWatch\"). function shares many parameters get_raster function gfwr package, addition cCRS specifying Coordinate Reference System output sf object. Fishing activity data can aggregated (group_by) \"FLAGANDGEARTYPE\" default, combining flags gear types. Notes: Currently, function primarily designed data within Exclusive Economic Zones (EEZs), can potentially extended specific Marine Protected Areas (MPAs) RFMOs. Days specified start_date end_date variables inclusive data recovery.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_gfw.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Retrieve Global Fishing Watch Data — splnr_get_gfw","text":"","code":"if (FALSE) { # \\dontrun{ # Example: Retrieve yearly GFW data for Australia, transformed to a # Mollweide projection (ESRI:54009) and compressed (aggregated) by location. gfw_data <- splnr_get_gfw( region = 'Australia', start_date = \"2021-01-01\", end_date = \"2022-12-31\", temp_res = \"YEARLY\", cCRS = \"ESRI:54009\", compress = TRUE ) # Example: Retrieve monthly GFW data for a specific EEZ ID, # keeping individual time ranges and locations. # Note: Replace 1000 with an actual EEZ ID if needed for testing. gfw_data_monthly <- splnr_get_gfw( region = 1000, # Example numeric EEZ ID start_date = \"2022-01-01\", end_date = \"2022-03-31\", temp_res = \"MONTHLY\", region_source = \"EEZ\", compress = FALSE ) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_kappaCorrData.html","id":null,"dir":"Reference","previous_headings":"","what":"Prepare Data to Plot Cohen's Kappa Correlation Matrix — splnr_get_kappaCorrData","title":"Prepare Data to Plot Cohen's Kappa Correlation Matrix — splnr_get_kappaCorrData","text":"splnr_get_kappaCorrData() calculates Cohen's Kappa correlation coefficients list prioritizr conservation solutions. output symmetrical matrix suitable visualizing pairwise agreement using heatmap.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_kappaCorrData.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prepare Data to Plot Cohen's Kappa Correlation Matrix — splnr_get_kappaCorrData","text":"","code":"splnr_get_kappaCorrData(sol, name_sol)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_kappaCorrData.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prepare Data to Plot Cohen's Kappa Correlation Matrix — splnr_get_kappaCorrData","text":"sol list prioritizr solution objects. element list must sf object containing binary column named solution_1. name_sol character vector providing descriptive names solution sol list. length vector must match length sol. names used row column names output correlation matrix.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_kappaCorrData.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Prepare Data to Plot Cohen's Kappa Correlation Matrix — splnr_get_kappaCorrData","text":"numeric matrix (matrixOut) representing Cohen's Kappa correlation matrix pairs solutions. Rows columns named according name_sol.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_kappaCorrData.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Prepare Data to Plot Cohen's Kappa Correlation Matrix — splnr_get_kappaCorrData","text":"function essential assessing similarity divergence among different conservation plans. takes list prioritizr solution objects, expected contain binary column named solution_1 (indicating selected unselected planning units). every unique pair solutions input list, computes Cohen's Kappa using irr::kappa2() function. Cohen's Kappa measures agreement two raters (case, two conservation solutions) categorical items, correcting chance agreement. Kappa value 1 indicates perfect agreement, 0 indicates agreement equivalent chance, negative values indicate agreement worse chance. resulting matrix symmetrical, diagonal elements always equal 1 (solution perfectly agrees ). matrix can passed visualization functions like splnr_plot_corrMat() create correlation heatmap.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_kappaCorrData.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Prepare Data to Plot Cohen's Kappa Correlation Matrix — splnr_get_kappaCorrData","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object in your package. # Create a dummy prioritizr problem and solve it for solution 1 (30% target). dat_problem1 <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln1 <- dat_problem1 %>% prioritizr::solve.ConservationProblem() # Create another dummy prioritizr problem and solve it for solution 2 (50% target). dat_problem2 <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.5) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln2 <- dat_problem2 %>% prioritizr::solve.ConservationProblem() # Calculate the Cohen's Kappa correlation matrix between the two solutions. corrMat <- splnr_get_kappaCorrData( sol = list(dat_soln1, dat_soln2), name_sol = c(\"Solution_A_30pct\", \"Solution_B_50pct\") ) print(corrMat) # This output can then be directly passed to splnr_plot_corrMat(). # splnr_plot_corrMat(corrMat, AxisLabels = c(\"Sol A (30%)\", \"Sol B (50%)\")) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_selFreq.html","id":null,"dir":"Reference","previous_headings":"","what":"Prepare Data to Plot Selection Frequency of Planning Units — splnr_get_selFreq","title":"Prepare Data to Plot Selection Frequency of Planning Units — splnr_get_selFreq","text":"splnr_get_selFreq() calculates many times Planning Unit selected across array prioritizr solutions. \"selection frequency\" can derived either list individual solutions prioritizr portfolio object.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_selFreq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prepare Data to Plot Selection Frequency of Planning Units — splnr_get_selFreq","text":"","code":"splnr_get_selFreq(solnMany, type = \"portfolio\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_selFreq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prepare Data to Plot Selection Frequency of Planning Units — splnr_get_selFreq","text":"solnMany list prioritizr solutions (type = \"list\") single sf object representing prioritizr portfolio solutions (type = \"portfolio\"). individual solution must contain column named solution_1. type character string indicating input type: \"portfolio\" (single sf object multiple solution columns) \"list\" (list single-solution sf objects). Defaults \"portfolio\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_selFreq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Prepare Data to Plot Selection Frequency of Planning Units — splnr_get_selFreq","text":"sf object (selFreq) containing column named selFreq. column factor representing selection frequency (sum selected occurrences across solutions) Planning Unit.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_selFreq.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Prepare Data to Plot Selection Frequency of Planning Units — splnr_get_selFreq","text":"Understanding selection frequency crucial identifying robust conservation areas—consistently chosen across multiple planning scenarios alternative optimal solutions. function supports two types input: \"portfolio\": solnMany single sf object representing portfolio solutions (e.g., generated prioritizr::add_cuts_portfolio()). case, function assumes columns starting \"solution_\" represent individual solutions within portfolio. \"list\": solnMany list element sf object representing single prioritizr solution (\"solution_1\" column). types, function sums binary solution values (0 1) across solutions Planning Unit. result converted factor represent discrete frequency levels. output sf object can passed splnr_plot_selectionFreq() visualization heatmap.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_selFreq.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Prepare Data to Plot Selection Frequency of Planning Units — splnr_get_selFreq","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object in your package. # Create a base prioritizr problem. dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) # --- Example 1: Using a portfolio of solutions --- # Create a conservation problem that contains a portfolio of solutions (e.g., 5 solutions). dat_soln_portfolio <- dat_problem %>% prioritizr::add_cuts_portfolio(number_solutions = 5) %>% prioritizr::solve.ConservationProblem() # Calculate selection frequency from the portfolio. selFreq_portfolio <- splnr_get_selFreq(solnMany = dat_soln_portfolio, type = \"portfolio\") print(head(selFreq_portfolio)) # You can then plot this: splnr_plot_selectionFreq(selFreq_portfolio) # --- Example 2: Using a list of individual solutions --- # Solve the problem multiple times to get different solutions (e.g., by randomizing costs) dat_soln_list <- list( dat_problem %>% prioritizr::solve.ConservationProblem(), dat_problem %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])) %>% # Vary cost for a different solution prioritizr::solve.ConservationProblem(), dat_problem %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])) %>% # Another different solution prioritizr::solve.ConservationProblem() ) # Calculate selection frequency from the list of solutions. selFreq_list <- splnr_get_selFreq(solnMany = dat_soln_list, type = \"list\") print(head(selFreq_list)) # You can then plot this: splnr_plot_selectionFreq(selFreq_list) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_gg_add.html","id":null,"dir":"Reference","previous_headings":"","what":"Add-ons for Plotting spatialplanr Solution Maps — splnr_gg_add","title":"Add-ons for Plotting spatialplanr Solution Maps — splnr_gg_add","text":"function allows users customize existing ggplot2 solution maps produced spatialplanr spatial plotting functions (e.g., splnr_plot_solution()). provides options add various spatial layers apply consistent theming simple reproducible manner.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_gg_add.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add-ons for Plotting spatialplanr Solution Maps — splnr_gg_add","text":"","code":"splnr_gg_add( PUs = NULL, colorPUs = \"grey80\", Bndry = NULL, colorBndry = \"black\", overlay = NULL, colorOverlay = \"grey20\", overlay2 = NULL, colorOverlay2 = \"grey30\", overlay3 = NULL, colorOverlay3 = \"grey40\", contours = NULL, colorConts = \"black\", cropOverlay = NULL, lockIn = NULL, typeLockIn = \"Full\", nameLockIn = NULL, alphaLockIn = 1, colorLockIn = \"black\", legendLockIn = \"\", labelLockIn = \"MPAs\", lockOut = NULL, typeLockOut = \"Full\", nameLockOut = NULL, alphaLockOut = 1, colorLockOut = \"black\", legendLockOut = \"\", labelLockOut = \"\", ggtheme = \"Default\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_gg_add.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add-ons for Plotting spatialplanr Solution Maps — splnr_gg_add","text":"PUs sf object representing Planning Units. provided, outlines drawn. Defaults NULL. colorPUs character string specifying color outlines Planning Units. Defaults \"grey80\". Bndry sf object representing main planning region boundaries. provided, outline drawn. Defaults NULL. colorBndry character string specifying color outline Bndry object. Defaults \"black\". overlay sf object plotted general overlay. Defaults NULL. colorOverlay character string specifying color overlay. Defaults \"grey20\". overlay2 sf object second general overlay. Defaults NULL. colorOverlay2 character string specifying color overlay2. Defaults \"grey30\". overlay3 sf object third general overlay. Defaults NULL. colorOverlay3 character string specifying color overlay3. Defaults \"grey40\". contours sf object containing contour lines (e.g., bathymetry seamount outlines). expected Category column differentiating lines. 6 categories supported. Defaults NULL. colorConts character string specifying color contour lines. Defaults \"black\". cropOverlay sf object. bounding box used set xlim ylim ggplot2::coord_sf() layer, effectively cropping view. Defaults NULL. lockIn sf object representing locked-areas (e.g., existing Marine Protected Areas (MPAs)) fixed conservation prioritization. Defaults NULL. typeLockIn character string specifying lockIn areas plotted. Can \"Full\" (fills areas colorLockIn) \"Contours\" (draws outlines areas). Defaults \"Full\". nameLockIn character string specifying column name lockIn data frame contains binary (0/1 TRUE/FALSE) information indicating locked-status. Required lockIn NULL. alphaLockIn numeric value (0 1) opacity lockIn areas typeLockIn \"Full\". Defaults 1. colorLockIn character string specifying color lockIn areas. Defaults \"black\". legendLockIn character string title lockIn legend. Can empty string \"\" suppress title. Defaults \"\". labelLockIn character string legend label lockIn areas (e.g., \"MPAs\"). Defaults \"MPAs\". lockOut sf object representing locked-areas (e.g., shipping lanes, oil gas leases, excluded zones) must selected conservation prioritization. Defaults NULL. typeLockOut character string specifying lockOut areas plotted. Can \"Full\" (fills areas colorLockOut) \"Contours\" (draws outlines areas). Defaults \"Full\". nameLockOut character string specifying column name lockOut data frame contains binary (0/1 TRUE/FALSE) information indicating locked-status. Required lockOut NULL. alphaLockOut numeric value (0 1) opacity lockOut areas typeLockOut \"Full\". Defaults 1. colorLockOut character string specifying color lockOut areas. Defaults \"black\". legendLockOut character string title lockOut legend. Can empty string \"\" suppress title. Defaults \"\". labelLockOut character string legend label lockOut areas (e.g., \"Shipping Lanes\"). Defaults \"\". ggtheme ggplot2 theme apply. Can : NA FALSE: theme applied, using ggplot2 defaults. \"Default\": Applies spatialplanr default theme (theme_bw() custom text/axis settings). list ggplot2::theme() properties custom styling. Defaults \"Default\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_gg_add.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add-ons for Plotting spatialplanr Solution Maps — splnr_gg_add","text":"list ggplot2 layers theme elements can added existing ggplot object using +.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_gg_add.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Add-ons for Plotting spatialplanr Solution Maps — splnr_gg_add","text":"splnr_gg_add() function enhances ggplot2 objects layering additional spatial data Planning Unit outlines, study area boundaries, general overlays, geographical contours, locked-areas (e.g., existing Marine Protected Areas (MPAs) must included conservation prioritization), locked-areas (e.g., areas must excluded selection shipping lanes oil gas leases). offers fine-grained control colors, opacities, legend appearance added layer. using contours, input sf object expected column named Category defines different contour lines plotted. function currently supports 6 distinct contour categories plotting. ggtheme parameter offers flexibility plot styling. \"Default\" applies standard spatialplanr theme (theme_bw() custom text axis settings). list ggplot2::theme() elements can provided full customization, NA (logical FALSE) apply default theme, allowing user manage theme elements manually.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_gg_add.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add-ons for Plotting spatialplanr Solution Maps — splnr_gg_add","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' and 'dat_PUs' are existing sf objects # in your package, suitable for prioritization problems and plotting. # Create a dummy prioritizr problem and solve it for demonstration. dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() # Basic plot of the solution with default Planning Unit outlines and theme. plot_basic <- splnr_plot_solution(dat_soln) + splnr_gg_add(PUs = dat_PUs, ggtheme = \"Default\") print(plot_basic) # Example with boundary, a custom overlay, and locked-in areas shown as contours. # For this example, let's create dummy `bndry_sf` and `locked_in_sf` based on `dat_PUs`. # In a real scenario, these would be loaded from your package or data. bndry_sf <- sf::st_union(dat_PUs) %>% sf::st_as_sf() locked_in_sf <- dat_PUs[1:100, ] %>% dplyr::mutate(is_mpa = 1) plot_custom <- splnr_plot_solution(dat_soln) + splnr_gg_add( PUs = dat_PUs, Bndry = bndry_sf, colorBndry = \"darkblue\", overlay = bndry_sf, # Using boundary as an example overlay colorOverlay = \"lightblue\", lockIn = locked_in_sf, typeLockIn = \"Contours\", nameLockIn = \"is_mpa\", colorLockIn = \"darkred\", labelLockIn = \"Existing MPAs\", ggtheme = \"Default\" ) print(plot_custom) # Example with custom ggplot2 theme settings (as a list) custom_theme_list <- list( ggplot2::theme_classic(), ggplot2::theme( plot.background = ggplot2::element_rect(fill = \"lightyellow\"), legend.position = \"top\" ) ) plot_with_custom_theme <- splnr_plot_solution(dat_soln) + splnr_gg_add(PUs = dat_PUs, ggtheme = custom_theme_list) print(plot_with_custom_theme) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_match_names.html","id":null,"dir":"Reference","previous_headings":"","what":"Substitute Numbers for Names in Regionalizations — splnr_match_names","title":"Substitute Numbers for Names in Regionalizations — splnr_match_names","text":"splnr_match_names() replaces numeric integer values spatial (sf) dataframe's column corresponding character names, typically used regionalization data.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_match_names.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Substitute Numbers for Names in Regionalizations — splnr_match_names","text":"","code":"splnr_match_names(dat, nam)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_match_names.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Substitute Numbers for Names in Regionalizations — splnr_match_names","text":"dat sf data frame single non-geometry column containing numeric integer values correspond names nam. nam named character vector. names vector numeric/integer values found dat's column, values vector desired character names substitution.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_match_names.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Substitute Numbers for Names in Regionalizations — splnr_match_names","text":"sf dataframe numeric/integer values relevant column substituted corresponding character names nam.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_match_names.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Substitute Numbers for Names in Regionalizations — splnr_match_names","text":"function designed scenarios spatial data contains numeric identifiers regions, mapping (named character vector) convert IDs descriptive names. assumes sf dataframe (dat) one non-geometry column needs recoding. function directly applies mapping nam vector specified column. names nam vector correspond numeric/integer values dat column, values nam new character names.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_match_names.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Substitute Numbers for Names in Regionalizations — splnr_match_names","text":"","code":"# Define the named character vector for mapping. region_names <- c(\"Region1\" = \"SE Aust\", \"Region2\" = \"Tas\", \"Region3\" = \"NE Aust\") # Apply the function to substitute numeric codes with names. df_named_regions <- splnr_match_names(dat = dat_region, nam = region_names) print(df_named_regions) #> Simple feature collection with 780 features and 1 field #> Geometry type: POLYGON #> Dimension: XY #> Bounding box: xmin: 100 ymin: -50 xmax: 160 ymax: 2 #> Geodetic CRS: WGS 84 #> First 10 features: #> geometry Region #> 1 POLYGON ((100 -50, 102 -50,... SE Aust #> 2 POLYGON ((102 -50, 104 -50,... SE Aust #> 3 POLYGON ((104 -50, 106 -50,... SE Aust #> 4 POLYGON ((106 -50, 108 -50,... SE Aust #> 5 POLYGON ((108 -50, 110 -50,... SE Aust #> 6 POLYGON ((110 -50, 112 -50,... SE Aust #> 7 POLYGON ((112 -50, 114 -50,... SE Aust #> 8 POLYGON ((114 -50, 116 -50,... SE Aust #> 9 POLYGON ((116 -50, 118 -50,... SE Aust #> 10 POLYGON ((118 -50, 120 -50,... SE Aust"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Spatial Data — splnr_plot","title":"Plot Spatial Data — splnr_plot","text":"function provides versatile way plot spatial data (sf objects) within spatialplanr package. can visualize various data types, including binary presence/absence, logical values, continuous data, simply planning unit outlines. function provides versatile way plot spatial data (sf objects) within spatialplanr package. can visualize various data types, including binary presence/absence, logical values, continuous data, simply Planning Unit outlines.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Spatial Data — splnr_plot","text":"","code":"splnr_plot( df, colNames = NULL, paletteName = \"YlGnBu\", colourVals = c(\"#c6dbef\", \"#3182bd\"), plotTitle = \"\", legendTitle = NULL, legendLabels = NULL ) splnr_plot( df, colNames = NULL, paletteName = \"YlGnBu\", colourVals = c(\"#c6dbef\", \"#3182bd\"), plotTitle = \"\", legendTitle = NULL, legendLabels = NULL )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Spatial Data — splnr_plot","text":"df input dataframe containing data plotted. must sf object include geometry column. colNames character vector column names df used coloring plot. NULL (default), Planning Unit outlines plotted. single column specified, checks binary, logical, continuous data. multiple columns specified, sums values across columns create \"FeatureSum\" plotting. paletteName character string specifying name RColorBrewer palette use filling continuous data. Defaults \"YlGnBu\". colourVals character vector two color values use binary (0/1) logical (FALSE/TRUE) data. first color '0' 'FALSE' (absence), second '1' 'TRUE' (presence). Defaults c(\"#c6dbef\", \"#3182bd\"). plotTitle character string subtitle plot. Defaults \"\" (subtitle). legendTitle character string title legend. NULL, default title used based data type. legendLabels character vector strings use legend labels, particularly useful binary logical data (e.g., c(\"Absent\", \"Present\")). NULL, default labels used binary/logical plots.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Spatial Data — splnr_plot","text":"ggplot object representing spatial plot. ggplot object representing spatial plot.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot Spatial Data — splnr_plot","text":"splnr_plot function automatically detects type data specified colNames (binary, logical, continuous) adjusts plotting aesthetics accordingly. multiple colNames provided, calculates sum features planning unit plots sum. colNames NULL, simply plot outlines planning units. function designed flexible replacement several plotting functions, splnr_plot_cost(), splnr_plot_binFeature(), splnr_plot_MPAs(), splnr_plot_featureNo(), streamlining plotting workflow within package. Written Kilian Barreiro Jason Everett. Last modified: February 2024. splnr_plot() function automatically detects type data specified colNames (binary, logical, continuous) adjusts plotting aesthetics accordingly. multiple colNames provided, calculates sum features Planning Unit plots sum. colNames NULL, simply plot outlines Planning Units. function designed flexible replacement several plotting functions, splnr_plot_cost(), splnr_plot_binFeature(), splnr_plot_MPAs(), splnr_plot_featureNo(), streamlining plotting workflow within package. Written Kilian Barreiro Jason Everett. Last modified: February 2024.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Spatial Data — splnr_plot","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin', 'dat_bathy', and 'dat_PUs' are existing sf objects # in your package, suitable for plotting. # Binary plot of species distribution for \"Spp1\" plot_spp1_binary <- splnr_plot( df = dat_species_bin, colNames = \"Spp1\", legendTitle = \"Species Presence\", legendLabels = c(\"Absent\", \"Present\") ) print(plot_spp1_binary) # Logical plot of species distribution for \"Spp1\" (converted from binary) plot_spp1_logical <- splnr_plot( df = dat_species_bin %>% dplyr::mutate(dplyr::across( tidyselect::starts_with(\"Spp\"), as.logical )), colNames = \"Spp1\", legendTitle = \"Species Presence\", legendLabels = c(\"Absent\", \"Present\") ) print(plot_spp1_logical) # Continuous plot of bathymetry plot_bathymetry <- splnr_plot( df = dat_bathy, colNames = \"bathymetry\", plotTitle = \"Bathymetry\", legendTitle = \"Bathymetry (m)\" ) print(plot_bathymetry) # Plot Planning Units outlines only plot_planning_units <- splnr_plot(df = dat_PUs) print(plot_planning_units) # Multi-binary features: Plotting the sum of multiple \"Spp\" features plot_multi_spp_sum <- splnr_plot( df = dat_species_bin, colNames = colnames(dat_species_bin %>% sf::st_drop_geometry() %>% dplyr::select(tidyselect::starts_with(\"Spp\"))), legendTitle = \"Number of Features\" ) print(plot_multi_spp_sum) } # } if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin', 'dat_bathy', and 'dat_PUs' are existing sf objects # in your package, suitable for plotting. # Binary plot of species distribution for \"Spp1\" plot_spp1_binary <- splnr_plot( df = dat_species_bin, colNames = \"Spp1\", legendTitle = \"Species Presence\", legendLabels = c(\"Absent\", \"Present\") ) print(plot_spp1_binary) # Logical plot of species distribution for \"Spp1\" (converted from binary) plot_spp1_logical <- splnr_plot( df = dat_species_bin %>% dplyr::mutate(dplyr::across( tidyselect::starts_with(\"Spp\"), as.logical )), colNames = \"Spp1\", legendTitle = \"Species Presence\", legendLabels = c(\"Absent\", \"Present\") ) print(plot_spp1_logical) # Continuous plot of bathymetry plot_bathymetry <- splnr_plot( df = dat_bathy, colNames = \"bathymetry\", plotTitle = \"Bathymetry\", legendTitle = \"Bathymetry (m)\" ) print(plot_bathymetry) # Plot Planning Units outlines only plot_planning_units <- splnr_plot(df = dat_PUs) print(plot_planning_units) # Multi-binary features: Plotting the sum of multiple \"Spp\" features plot_multi_spp_sum <- splnr_plot( df = dat_species_bin, colNames = colnames(dat_species_bin %>% sf::st_drop_geometry() %>% dplyr::select(tidyselect::starts_with(\"Spp\"))), legendTitle = \"Number of Features\" ) print(plot_multi_spp_sum) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_MPAs.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot MPAs — splnr_plot_MPAs","title":"Plot MPAs — splnr_plot_MPAs","text":"splnr_plot_MPAs() allows plot either outline area MPAs existing planning region (example extracted spatialplanrfunction splnr_get_MPAs()) customisable way using ggplot2. function requires sf object containing information whether planning unit planning region lies within MPA column called wdpa outputs ggobject. can combined spatialplanr function splnr_gg_add().","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_MPAs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot MPAs — splnr_plot_MPAs","text":"","code":"splnr_plot_MPAs( df, colorVals = c(`TRUE` = \"blue\", `FALSE` = \"white\"), showLegend = TRUE, plotTitle = \"Locked In Areas\", legendTitle = \"\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_MPAs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot MPAs — splnr_plot_MPAs","text":"df sf object marine protected areas colorVals list object named vectors match color value according name. \"TRUE\" stands selected planning units. showLegend logical command whether show legend solution (Default: TRUE). plotTitle character value title plot. Can empty (\"\"). legendTitle character value title legend. Can empty (\"\").","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_MPAs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot MPAs — splnr_plot_MPAs","text":"ggplot object plot","code":""},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_MPAs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot MPAs — splnr_plot_MPAs","text":"","code":"if (FALSE) { # \\dontrun{ splnr_plot_MPAs(dat_mpas) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_binFeature.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot binary feature — splnr_plot_binFeature","title":"Plot binary feature — splnr_plot_binFeature","text":"splnr_plot_binFeature() allows plot presences absences feature planning region customisable way using ggplot2. function requires sf object binary information feature(0 absences 1 presences, example created continuous data spatialplanr function splnr_apply_cutoffs()). outputs ggobject can combined spatialplanr function splnr_gg_add().","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_binFeature.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot binary feature — splnr_plot_binFeature","text":"","code":"splnr_plot_binFeature( df, colInterest, colorVals = c(Suitable = \"#3182bd\", `Not Suitable` = \"#c6dbef\"), showLegend = TRUE, plotTitle = \" \", legendTitle = \"Habitat\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_binFeature.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot binary feature — splnr_plot_binFeature","text":"df data frame binary feature information colInterest column data frame contains binary information feature plot colorVals list object named vectors match color value according name. \"TRUE\" stands selected planning units. showLegend logical command whether show legend solution (Default: TRUE). plotTitle character value title plot. Can empty (\"\"). legendTitle character value title legend. Can empty (\"\").","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_binFeature.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot binary feature — splnr_plot_binFeature","text":"ggplot object plot","code":""},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_binFeature.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot binary feature — splnr_plot_binFeature","text":"","code":"if (FALSE) { # \\dontrun{ splnr_plot_binFeature(dat_species_bin, dat_species_bin$Spp1) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_circBplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Circular Barplot for Feature Representation — splnr_plot_circBplot","title":"Plot Circular Barplot for Feature Representation — splnr_plot_circBplot","text":"splnr_plot_circBplot() creates circular bar plot visualize feature representation, categorized groups. particularly useful displaying different categories features meet certain targets radial layout.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_circBplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Circular Barplot for Feature Representation — splnr_plot_circBplot","text":"","code":"splnr_plot_circBplot( df, legend_color, legend_list, indicateTargets = TRUE, impTarget = NA, repTarget = NA, colTarget = \"red\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_circBplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Circular Barplot for Feature Representation — splnr_plot_circBplot","text":"df data.frame tibble must contain following columns: feature: character factor unique identifier individual bar (e.g., species names). value: numeric value plotted y-axis (bar height, typically percentage representation). group: character factor grouping factors (e.g., \"important\", \"representative\"). legend_color named vector colors. Names must correspond unique values group column df, values corresponding colors. example: c(\"group_name1\" = \"red\", \"group_name2\" = \"blue\"). legend_list character vector labels legend. match names used legend_color levels group. indicateTargets logical value. TRUE, horizontal lines indicating impTarget repTarget drawn plot. impTarget numeric value representing target percentage 'important' features. Required indicateTargets TRUE. repTarget numeric value representing target percentage 'representative' features. Required indicateTargets TRUE. colTarget character string specifying color target indicator lines.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_circBplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Circular Barplot for Feature Representation — splnr_plot_circBplot","text":"ggplot2::ggplot object circular bar plot.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_circBplot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Circular Barplot for Feature Representation — splnr_plot_circBplot","text":"","code":"# DISCLAIMER: THIS SOLUTION IS NOT ACTUALLY RUN WITH THESE TARGETS YET if (FALSE) { # \\dontrun{ dat_problem <- prioritizr::problem(dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() s1 <- dat_soln %>% tibble::as_tibble() p1 <- dat_problem # Assuming eval_feature_representation_summary is from prioritizr df_rep_imp <- prioritizr::eval_feature_representation_summary( p1, s1[, \"solution_1\"] ) %>% dplyr::select(feature, relative_held) %>% dplyr::mutate(relative_held = relative_held * 100) imp_layers <- c(\"Spp1\", \"Spp3\") target <- data.frame(feature = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\")) %>% dplyr::mutate(class = dplyr::if_else(.data$feature %in% imp_layers, \"important\", \"representative\" )) %>% dplyr::mutate(target = dplyr::if_else(class == \"important\", 50 / 100, 30 / 100 )) df <- merge(df_rep_imp, target) %>% dplyr::select(-target) %>% stats::na.omit() %>% # Use stats::na.omit dplyr::rename(value = relative_held) %>% dplyr::rename(group = class) colors <- c( \"important\" = \"darkgreen\", \"representative\" = \"darkred\" ) legends <- c(\"Important\", \"Representative\") (splnr_plot_circBplot(df, legend_list = legends, legend_color = colors, impTarget = 50, repTarget = 30 )) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climData.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Climate Metric Data — splnr_plot_climData","title":"Plot Climate Metric Data — splnr_plot_climData","text":"splnr_plot_climData() function creates spatial plot climate metric information sf object. provides customizable visualization using ggplot2 viridis color palettes.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climData.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Climate Metric Data — splnr_plot_climData","text":"","code":"splnr_plot_climData( df, colInterest, colorMap = \"C\", plotTitle = \" \", legendTitle = \"Climate metric\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climData.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Climate Metric Data — splnr_plot_climData","text":"df sf object containing climate metric information. must geometry column. colInterest character string specifying name column df contains climate metric data plotted. colorMap character string indicating viridis color map use (e.g., \"\", \"B\", \"C\", \"D\", \"E\"). See https://ggplot2.tidyverse.org/reference/scale_viridis.html options. Defaults \"C\". plotTitle character string subtitle plot. Defaults \" \" (single space, effectively subtitle). legendTitle character string title legend. Defaults \"Climate metric\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climData.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Climate Metric Data — splnr_plot_climData","text":"ggplot object representing spatial plot climate metric.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climData.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot Climate Metric Data — splnr_plot_climData","text":"function designed visualize spatial data contains specific climate metric. expects sf object (df) geometry column climate metric data column specified colInterest. plot uses continuous color scale (viridis) represent metric values across planning units. function can easily integrated larger plotting workflow used independently inspect climate data distributions.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climData.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Climate Metric Data — splnr_plot_climData","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_clim' is an existing sf object in your package # with a column named \"metric\" or another relevant climate metric. # Example: Plot climate data using \"metric\" column plot_climate_metric <- splnr_plot_climData( df = dat_clim, colInterest = \"metric\", plotTitle = \"Annual Climate Warming\", legendTitle = \"Warming (°C/year)\" ) print(plot_climate_metric) # Example with a different color map plot_climate_alt_cmap <- splnr_plot_climData( df = dat_clim, colInterest = \"metric\", colorMap = \"D\", # Using 'D' for a different viridis palette plotTitle = \"Climate Metric (Alternative Colors)\" ) print(plot_climate_alt_cmap) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climKernelDensity.html","id":null,"dir":"Reference","previous_headings":"","what":"Kernel Density Plots for Climate-Smart Spatial Plans — splnr_plot_climKernelDensity","title":"Kernel Density Plots for Climate-Smart Spatial Plans — splnr_plot_climKernelDensity","text":"splnr_plot_climKernelDensity() generates kernel density plots climate-smart spatial plans, offering two distinct plotting styles: \"Normal\" (publication-quality comparison multiple solutions) \"Basic\" (simplified visualization stakeholders).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climKernelDensity.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Kernel Density Plots for Climate-Smart Spatial Plans — splnr_plot_climKernelDensity","text":"","code":"splnr_plot_climKernelDensity( soln, solution_names = \"solution_1\", climate_names = \"metric\", type = \"Normal\", colorMap = \"C\", legendTitle = expression(\" °C y\"^\"-1\" * \"\"), xAxisLab = expression(\"Climate warming ( °C y\"^\"-1\" * \")\") )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climKernelDensity.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Kernel Density Plots for Climate-Smart Spatial Plans — splnr_plot_climKernelDensity","text":"soln type = \"Normal\": list prioritizr solution objects (e.g., list(s1, s2)). solution must contain metric column solution_1 column. type = \"Basic\": single prioritizr solution sf object. solution_names character vector names corresponding solution soln type = \"Normal\". used type = \"Basic\". Defaults NA. climate_names character string name climate type character string specifying plotting style. Must either \"Normal\" \"Basic\". Defaults \"Normal\". colorMap character string indicating viridis color map use (e.g., \"\", \"B\", \"C\", \"D\", \"E\"). See https://ggplot2.tidyverse.org/reference/scale_viridis.html options. Defaults \"C\". legendTitle character string expression title legend. Defaults expression(\" \\u00B0C y\"^\"-1\" * \"\"), representing \"°C year⁻¹\". xAxisLab character string expression x-axis label, depending climate metric input. Defaults expression(\"Climate warming ( \\u00B0C y\"^\"-1\" * \")\").","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climKernelDensity.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Kernel Density Plots for Climate-Smart Spatial Plans — splnr_plot_climKernelDensity","text":"ggplot object representing kernel density plot.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climKernelDensity.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Kernel Density Plots for Climate-Smart Spatial Plans — splnr_plot_climKernelDensity","text":"wrapper function intelligently dispatches either splnr_plot_climKernelDensity_Fancy() (type = \"Normal\") splnr_plot_climKernelDensity_Basic() (type = \"Basic\") based type parameter. \"Normal\" (Fancy) style suitable detailed comparisons, accommodating list solutions custom axis labels, \"Basic\" style streamlined clarity quick interpretation, ideal stakeholder engagement. underlying functions require prioritizr solution containing climate metric column climate metric information prioritizr solution column indicating selected planning units.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climKernelDensity.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Kernel Density Plots for Climate-Smart Spatial Plans — splnr_plot_climKernelDensity","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' and 'dat_clim' are existing sf objects # in your package. # Prepare data for a climate-priority area approach (CPA) target <- dat_species_bin %>% sf::st_drop_geometry() %>% colnames() %>% data.frame() %>% setNames(c(\"feature\")) %>% dplyr::mutate(target = 0.3) CPA <- splnr_climate_priorityAreaApproach( features = dat_species_bin, metric = dat_clim, targets = target, direction = -1, refugiaTarget = 1 ) # Join climate metric to features for the problem out_sf <- CPA$Features %>% dplyr::mutate(Cost_None = rep(1, dim(.)[[1]])) %>% # Ensure enough costs for PUs sf::st_join(dat_clim, join = sf::st_equals) # Define features for the prioritizr problem usedFeatures <- out_sf %>% sf::st_drop_geometry() %>% dplyr::select(-tidyselect::starts_with(\"Cost_\"), -\"metric\") %>% names() # Create and solve a prioritizr problem p1 <- prioritizr::problem(out_sf, usedFeatures, \"Cost_None\") %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(CPA$Targets$target) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_solnClim <- prioritizr::solve.ConservationProblem(p1) # Example 1: Basic kernel density plot plot_basic_kde <- splnr_plot_climKernelDensity(soln = dat_solnClim, type = \"Basic\") print(plot_basic_kde) # Example 2: Normal (Fancy) kernel density plot for a single solution plot_normal_kde_single <- splnr_plot_climKernelDensity( soln = list(dat_solnClim), solution_names = c(\"Solution 1\"), type = \"Normal\" ) print(plot_normal_kde_single) # Example 3: Normal (Fancy) plot comparing two solutions (create a dummy second solution) # For demonstration, let's create another dummy solution dat_solnClim_2 <- dat_solnClim %>% dplyr::mutate(solution_1 = sample(c(0, 1), n(), replace = TRUE)) # Randomize selection plot_normal_kde_multi <- splnr_plot_climKernelDensity( soln = list(dat_solnClim, dat_solnClim_2), solution_names = c(\"Solution A\", \"Solution B\"), climate_names = \"metric\", type = \"Normal\", colorMap = \"plasma\", legendTitle = \"Climate Value\", xAxisLab = \"Climate Metric (units)\" ) print(plot_normal_kde_multi) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_comparison.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Solution Comparison — splnr_plot_comparison","title":"Plot Solution Comparison — splnr_plot_comparison","text":"splnr_plot_comparison() function spatially visualizes differences two prioritizr conservation solutions. helps understanding Planning Units common, added, removed two scenarios.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_comparison.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Solution Comparison — splnr_plot_comparison","text":"","code":"splnr_plot_comparison( soln1, soln2, legendTitle = \"Scenario 2 compared to Scenario 1:\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_comparison.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Solution Comparison — splnr_plot_comparison","text":"soln1 first prioritizr solution, expected sf object solution_1 column. serves baseline comparison. soln2 second prioritizr solution, expected sf object solution_1 column. solution compared soln1. legendTitle character string title legend. Defaults \"Scenario 2 compared Scenario 1:\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_comparison.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Solution Comparison — splnr_plot_comparison","text":"ggplot object representing spatial comparison two solutions.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_comparison.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot Solution Comparison — splnr_plot_comparison","text":"Conservation planning often involves comparing outputs different conservation problems scenarios. function facilitates comparison requiring two sf objects, soln1 soln2, representing prioritizr solution containing solution_1 column (binary, indicating selected vs. selected). function categorizes Planning Units \"\" (selected ), \"Added (+)\" (selected soln2 soln1), \"Removed (-)\" (selected soln1 soln2). plots categories distinct colors clear visualization. output ggplot object can combined splnr_gg_add() customization.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_comparison.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Solution Comparison — splnr_plot_comparison","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object in your package. # Create Problem 1 with 30% target and solve it. dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() # Create Problem 2 with 50% target and solve it. dat_problem2 <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.5) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln2 <- dat_problem2 %>% prioritizr::solve.ConservationProblem() # Plot the comparison between the two solutions. plot_comparison <- splnr_plot_comparison(dat_soln, dat_soln2) print(plot_comparison) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_corrMat.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Correlation Matrices of Conservation Solutions — splnr_plot_corrMat","title":"Plot Correlation Matrices of Conservation Solutions — splnr_plot_corrMat","text":"splnr_plot_corrMat() function visualizes correlation matrix prioritizr conservation solutions, typically computed using Cohen's Kappa. helps understanding agreement disagreement different spatial plans.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_corrMat.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Correlation Matrices of Conservation Solutions — splnr_plot_corrMat","text":"","code":"splnr_plot_corrMat( x, colourGradient = c(\"#BB4444\", \"#FFFFFF\", \"#4477AA\"), legendTitle = \"Correlation \\ncoefficient\", AxisLabels = NULL, plotTitle = \"\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_corrMat.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Correlation Matrices of Conservation Solutions — splnr_plot_corrMat","text":"x numeric correlation matrix prioritizr solutions. colourGradient character vector three color values: colourGradient[1]: Color high positive correlation. colourGradient[2]: Color correlation (midpoint). colourGradient[3]: Color high negative correlation. Defaults c(\"#BB4444\", \"#FFFFFF\", \"#4477AA\"). legendTitle character string title legend. Defaults \"Correlation \\ncoefficient\". AxisLabels character vector labels x y axes correlation matrix, representing names correlated solutions. NULL (default), column names x used. length vector must match number rows/columns x. plotTitle character string title plot. Defaults \"\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_corrMat.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Correlation Matrices of Conservation Solutions — splnr_plot_corrMat","text":"ggplot object representing correlation matrix plot.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_corrMat.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot Correlation Matrices of Conservation Solutions — splnr_plot_corrMat","text":"Conservation planning often involves comparing outputs various conservation problems. One effective method correlating solutions using metrics like Cohen's Kappa. function takes correlation matrix (e.g., produced spatialplanr function splnr_get_kappaCorrData()) generates heatmap visualization using ggcorrplot. plot highlights positive, negative, correlation using color gradient, labels correlation coefficients directly plot. output ggplot object can combined spatialplanr function splnr_gg_add() customization, though primary use standalone correlation visualization.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_corrMat.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Correlation Matrices of Conservation Solutions — splnr_plot_corrMat","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object in your package. # Create Problem 1 (30% target) and solve it. dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() # Create Problem 2 (50% target) and solve it. dat_problem2 <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.5) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln2 <- dat_problem2 %>% prioritizr::solve.ConservationProblem() # Get the Kappa correlation data for the two solutions. CorrMat <- splnr_get_kappaCorrData(list(dat_soln, dat_soln2), name_sol = c(\"soln1\", \"soln2\")) # Plot the correlation matrix with custom axis labels. plot_correlation_matrix <- splnr_plot_corrMat( CorrMat, AxisLabels = c(\"Solution 1\", \"Solution 2\") ) print(plot_correlation_matrix) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_cost.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot cost — splnr_plot_cost","title":"Plot cost — splnr_plot_cost","text":"splnr_plot_cost() allows plot cost within planning units planning region customisable way using ggplot2. function requires sf object cost column outputs ggobject. can combined spatialplanr function splnr_gg_add().","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_cost.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot cost — splnr_plot_cost","text":"","code":"splnr_plot_cost( cost, costName = \"Cost\", legendTitle = \"Cost\", paletteName = \"YlGnBu\", plotTitle = \"\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_cost.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot cost — splnr_plot_cost","text":"cost sf object cost prioritizr costName Name cost column legendTitle character value title legend. Can empty (\"\"). paletteName string (number) color palette use. Available palettes can found https://ggplot2.tidyverse.org/reference/scale_brewer.html. plotTitle character value title plot. Can empty (\"\").","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_cost.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot cost — splnr_plot_cost","text":"ggplot object plot","code":""},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_cost.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot cost — splnr_plot_cost","text":"","code":"if (FALSE) { # \\dontrun{ dat_problem <- prioritizr::problem(dat_species_bin %>% dplyr::mutate(cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() dat_cost <- dat_soln %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])) (splnr_plot_cost(dat_cost)) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_costOverlay.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Cost Overlay on Solution — splnr_plot_costOverlay","title":"Plot Cost Overlay on Solution — splnr_plot_costOverlay","text":"splnr_plot_costOverlay() function visualizes cost Planning Unit overlaid solution prioritizr conservation problem. allows customizable ggplot2 visualization, highlighting costs within selected Planning Units.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_costOverlay.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Cost Overlay on Solution — splnr_plot_costOverlay","text":"","code":"splnr_plot_costOverlay( soln, cost = NA, costName = \"Cost\", legendTitle = \"Cost\", plotTitle = \"Solution overlaid with cost\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_costOverlay.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Cost Overlay on Solution — splnr_plot_costOverlay","text":"soln prioritizr solution object, expected sf object, containing least solution_1 column. cost sf object containing cost data Planning Units. prioritizr solution soln already contains cost column specified costName, parameter can NA (default). Otherwise, provide sf object cost data. costName character string specifying name cost column within soln object Cost object. Defaults \"Cost\". legendTitle character string title cost legend. Defaults \"Cost\". plotTitle character string subtitle plot. Defaults \"Solution overlaid cost\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_costOverlay.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Cost Overlay on Solution — splnr_plot_costOverlay","text":"ggplot object representing solution cost overlay.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_costOverlay.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot Cost Overlay on Solution — splnr_plot_costOverlay","text":"function requires prioritizr solution sf object, must contain solution_1 column indicating selected (1) unselected (0) Planning Units. also requires cost column, either present within soln object provided separately via Cost parameter. function filters solution show selected Planning Units overlays gradient representing cost. output ggplot object can customized using splnr_gg_add().","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_costOverlay.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Cost Overlay on Solution — splnr_plot_costOverlay","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object in your package. # Create a dummy prioritizr problem and solve it for demonstration. dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() # Plot the solution overlaid with cost plot_cost_overlay <- splnr_plot_costOverlay(soln = dat_soln) print(plot_cost_overlay) # Example: If cost is in a separate sf object (e.g., dat_PUs with a cost column) # Create a dummy cost column in dat_PUs for this example # Replace this with your actual cost data if it's external dat_PUs_with_cost <- dat_PUs %>% dplyr::mutate(MyCost = runif(n = dim(.)[[1]])) plot_cost_overlay_external <- splnr_plot_costOverlay( soln = dat_soln, cost = dat_PUs_with_cost, costName = \"MyCost\", legendTitle = \"Custom Cost\", plotTitle = \"Solution with External Cost\" ) print(plot_cost_overlay_external) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureNo.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot number of features — splnr_plot_featureNo","title":"Plot number of features — splnr_plot_featureNo","text":"splnr_plot_featureNo() allows use ggplot2 visually inspect number features per planning unit used inputs conservation problem. features species, map can seen visualisation species richness planning region.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureNo.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot number of features — splnr_plot_featureNo","text":"","code":"splnr_plot_featureNo( df, showLegend = TRUE, paletteName = \"YlGnBu\", plotTitle = \"Number of Features\", legendTitle = \"Features\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureNo.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot number of features — splnr_plot_featureNo","text":"df sf object features showLegend logical command whether show legend solution (Default: TRUE). paletteName string (number) color palette use. Available palettes can found https://ggplot2.tidyverse.org/reference/scale_brewer.html. plotTitle character value title plot. Can empty (\"\"). legendTitle character value title legend. Can empty (\"\").","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureNo.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot number of features — splnr_plot_featureNo","text":"ggplot object plot","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureNo.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot number of features — splnr_plot_featureNo","text":"function requires sf object binary information features want include richness plot (0 absences 1 presences, example created continuous data spatialplanr function splnr_apply_cutoffs()). outputs ggobject can combined spatialplanr function splnr_gg_add().","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureNo.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot number of features — splnr_plot_featureNo","text":"","code":"if (FALSE) { # \\dontrun{ (splnr_plot_featureNo(dat_species_bin)) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureRep.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Feature Representation (Target Achievement) — splnr_plot_featureRep","title":"Plot Feature Representation (Target Achievement) — splnr_plot_featureRep","text":"splnr_plot_featureRep() creates bar plot visualize representation features conservation solution, indicating well targets met. can categorize features, rename clarity, optionally display target levels plot.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureRep.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Feature Representation (Target Achievement) — splnr_plot_featureRep","text":"","code":"splnr_plot_featureRep( df, category = NA, categoryFeatureCol = NA, renameFeatures = FALSE, namesToReplace = NA, nr = 1, showTarget = NA, plotTitle = \"\", sort_by = \"category\", ... )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureRep.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Feature Representation (Target Achievement) — splnr_plot_featureRep","text":"df data.frame tibble containing feature representation information. typically results splnr_get_featureRep() function include least feature relative_held columns, optionally target incidental. category named data.frame tibble provides grouping information features. contain column can matched feature column df (default, column named feature, specified categoryFeatureCol), column named category grouping plot output. NA (default), categorization applied. categoryFeatureCol character string specifying name column category data frame contains feature information matched df$feature. used category data frame column explicitly named 'feature'. renameFeatures logical value. TRUE, feature names plot replaced common names provided namesToReplace. namesToReplace data.frame containing two columns: 'nameVariable' (original feature name) 'nameCommon' (common name replace ). Required renameFeatures TRUE. nr integer specifying number rows legend. showTarget logical value. TRUE, transparent bar representing target level feature shown plot. plotTitle character string title plot. Can empty string \"\" (default). sort_by character string specifying column sort features x-axis. Accepted values include: \"category\", \"feature\", \"target\", \"representation\" (relative_held), \"difference\" (representation target). ... arguments passed ggplot2::theme() customize plot's theme.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureRep.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Feature Representation (Target Achievement) — splnr_plot_featureRep","text":"ggplot2::ggplot object representing feature representation bar plot.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureRep.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Feature Representation (Target Achievement) — splnr_plot_featureRep","text":"","code":"# For a full example, ensure 'dat_species_bin', 'dat_category' are available # (e.g., from the 'prioritizrdata' package or defined in your package's data) pDat <- prioritizr::problem(dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) soln <- pDat %>% prioritizr::solve.ConservationProblem() # including incidental species coverage df <- splnr_get_featureRep( # Assuming splnr_get_featureRep is available soln = soln, pDat = pDat ) #> No non-selected features to process. #> No specific climate-smart approach detected or standard approach used. Using targets from 'pDat'. # Basic plot with categories and targets shown (splnr_plot_featureRep(df, category = dat_category, showTarget = TRUE)) #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA # Plot without categories, sorted by feature name (splnr_plot_featureRep(df, showTarget = TRUE, sort_by = \"feature\")) #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA # Example with feature renaming names_to_replace_df <- tibble::tibble( nameVariable = c(\"Spp1\", \"Spp2\"), nameCommon = c(\"Species One\", \"Species Two\") ) (splnr_plot_featureRep(df, category = dat_category, renameFeatures = TRUE, namesToReplace = names_to_replace_df, showTarget = TRUE )) #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_importanceScore.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Importance Score of Planning Units — splnr_plot_importanceScore","title":"Plot Importance Score of Planning Units — splnr_plot_importanceScore","text":"splnr_plot_importanceScore() function visualizes importance scores (irreplaceability) Planning Units prioritizr conservation problem using ggplot2. supports different methods calculating importance scores.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_importanceScore.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Importance Score of Planning Units — splnr_plot_importanceScore","text":"","code":"splnr_plot_importanceScore( soln, pDat, method = \"Ferrier\", plotTitle = \"\", colorMap = \"A\", decimals = 4, legendTitle = \"Importance Score\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_importanceScore.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Importance Score of Planning Units — splnr_plot_importanceScore","text":"soln prioritizr solution object, expected sf object. contain solution_1 column. pDat prioritizr problem object solved generate soln. method character string specifying method calculating importance scores. Must one \"Ferrier\", \"RWR\", \"RC\". Defaults \"Ferrier\". plotTitle character string title plot. Defaults \"\". colorMap character string indicating viridis color map use (e.g., \"\", \"B\", \"C\", \"D\", \"E\"). See https://ggplot2.tidyverse.org/reference/scale_viridis.html options. Defaults \"\". decimals number decimal places display importance scores legend. Ferrier Score often benefits higher number decimals (>4). Defaults 4. legendTitle character string title legend. Defaults \"Importance Score\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_importanceScore.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Importance Score of Planning Units — splnr_plot_importanceScore","text":"ggplot object representing plot importance scores.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_importanceScore.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot Importance Score of Planning Units — splnr_plot_importanceScore","text":"Importance scores quantify irreplaceability Planning Unit conservation solution. function leverages prioritizr package calculate plot three different types importance scores: \"Ferrier\": Ferrier Score, applicable minimum set objective function. often requires higher number decimals (e.g., >4) accurate representation. \"RWR\": Rarity Weighted Richness Score. \"RC\": Replacement Cost. method generally recommended prioritizr development team robustness, can computationally intensive take longer, especially problems many planning units features. function outputs ggplot object can combined spatialplanr function splnr_gg_add() customization.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_importanceScore.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Importance Score of Planning Units — splnr_plot_importanceScore","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' and 'dat_PUs' are existing sf objects in your package. # Create a dummy prioritizr problem and solve it for demonstration. dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() # Plot importance score using the \"Ferrier\" method. plot_ferrier_importance <- splnr_plot_importanceScore( soln = dat_soln, pDat = dat_problem, method = \"Ferrier\", decimals = 4, plotTitle = \"Ferrier Importance Score\" ) print(plot_ferrier_importance) # Plot importance score using the \"RWR\" (Rarity Weighted Richness) method. plot_rwr_importance <- splnr_plot_importanceScore( soln = dat_soln, pDat = dat_problem, method = \"RWR\", decimals = 2, plotTitle = \"Rarity Weighted Richness\" ) print(plot_rwr_importance) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_selectionFreq.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Planning Unit Selection Frequency — splnr_plot_selectionFreq","title":"Plot Planning Unit Selection Frequency — splnr_plot_selectionFreq","text":"splnr_plot_selectionFreq() function visualizes selection frequency Planning Units across array prioritizr solutions. useful understanding areas consistently selected important conservation.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_selectionFreq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Planning Unit Selection Frequency — splnr_plot_selectionFreq","text":"","code":"splnr_plot_selectionFreq( selFreq, plotTitle = \"\", paletteName = \"Greens\", legendTitle = \"Selection \\nFrequency\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_selectionFreq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Planning Unit Selection Frequency — splnr_plot_selectionFreq","text":"selFreq sf object containing selection frequency data Planning Units. object must include selFreq column (e.g., generated splnr_get_selFreq()). plotTitle character string title plot. Defaults \"\". paletteName character string numeric value specifying name RColorBrewer palette use fill. Available palettes can found https://ggplot2.tidyverse.org/reference/scale_brewer.html. Defaults \"Greens\". legendTitle character string title legend. Defaults \"Selection \\nFrequency\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_selectionFreq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Planning Unit Selection Frequency — splnr_plot_selectionFreq","text":"ggplot object representing plot Planning Unit selection frequency.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_selectionFreq.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot Planning Unit Selection Frequency — splnr_plot_selectionFreq","text":"multiple spatial plans generated (either solutions different conservation problems via prioritizr portfolio approach), valuable assess robustness Planning Unit selection. function takes sf object input, must contain selFreq column representing selection frequency Planning Unit. selFreq column can generated using spatialplanr function splnr_get_selFreq(). function uses ggplot2 create spatial plot frequencies, allowing customization color palette, plot title, legend title. output ggplot object can enhanced combining spatialplanr function splnr_gg_add().","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_selectionFreq.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Planning Unit Selection Frequency — splnr_plot_selectionFreq","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object in your package. # Create a dummy prioritizr problem. dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) # Create a conservation problem that contains a portfolio of solutions (e.g., 5 solutions). dat_soln_portfolio <- dat_problem %>% prioritizr::add_cuts_portfolio(number_solutions = 5) %>% prioritizr::solve.ConservationProblem() # Calculate selection frequency using splnr_get_selFreq(). selFreq_data <- splnr_get_selFreq(solnMany = dat_soln_portfolio, type = \"portfolio\") # Plot the selection frequency. plot_selection_frequency <- splnr_plot_selectionFreq(selFreq_data) print(plot_selection_frequency) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_solution.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot prioritizr Solution — splnr_plot_solution","title":"Plot prioritizr Solution — splnr_plot_solution","text":"splnr_plot_solution() function visualizes solution prioritizr conservation problem using ggplot2. can handle single-zone multi-zone solutions, offering customization colors legend.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot prioritizr Solution — splnr_plot_solution","text":"","code":"splnr_plot_solution( soln, colorVals = c(\"#c6dbef\", \"#3182bd\"), showLegend = TRUE, legendLabels = c(\"Not selected\", \"Selected\"), plotTitle = \"Solution\", legendTitle = \"Planning Units\", zones = FALSE )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot prioritizr Solution — splnr_plot_solution","text":"soln prioritizr solution object, expected sf object. colorVals character vector color values. single-zone problems, typically two colors (\"selected\" \"Selected\"). multi-zone problems, length match number zones plus one (\"selected\"). showLegend logical value indicating whether display legend solution. Defaults TRUE. legendLabels character vector strings label legend values. length must match number levels solution (e.g., \"selected\", \"Selected\" single zone; \"selected\", \"Zone 1\", \"Zone 2\" two zones). plotTitle character string title plot. Can empty (\"\"). Defaults \"Solution\". legendTitle character string title legend. Can empty (\"\"). Defaults \"Planning Units\". zones logical value. Set TRUE prioritizr solution contains multiple zones (.e., multi-zone problem). Defaults FALSE.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot prioritizr Solution — splnr_plot_solution","text":"ggplot object representing plot conservation solution.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_solution.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot prioritizr Solution — splnr_plot_solution","text":"function requires prioritizr solution object, sf object containing least solution_1 column (single-zone problems) solution_1_zone1, solution_1_zone2, etc. (multi-zone problems). outputs ggplot object, can customized combining spatialplanr function splnr_gg_add(). multi-zone problems (zones = TRUE), function sums selected zones Planning Unit plots resulting combined selection. colorVals legendLabels provided match number selection levels (e.g., \"selected\", \"Zone 1\", \"Zone 2\", etc.).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot prioritizr Solution — splnr_plot_solution","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object in your package. # Example 1: Plotting a single-zone prioritizr solution dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() plot_soln_single_zone <- splnr_plot_solution(dat_soln) print(plot_soln_single_zone) # Example 2: Plotting a multi-zone prioritizr solution # Create targets for two zones t2 <- matrix(NA, ncol = 2, nrow = 5) t2[, 1] <- 0.1 t2[, 2] <- 0.05 # Define zones for species z2 <- prioritizr::zones( \"zone 1\" = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), \"zone 2\" = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\") ) # Create a multi-zone problem (requires as many cost columns as zones) p2 <- prioritizr::problem( dat_species_bin %>% dplyr::mutate( Cost1 = runif(n = dim(.)[[1]]), Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(t2) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s2 <- p2 %>% prioritizr::solve.ConservationProblem() plot_soln_multi_zone <- splnr_plot_solution(s2, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), # Colors for Not selected, Zone 1, Zone 2 legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) print(plot_soln_multi_zone) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_replace_NAs.html","id":null,"dir":"Reference","previous_headings":"","what":"Remove NAs from Spatial Data Using Nearest Neighbour — splnr_replace_NAs","title":"Remove NAs from Spatial Data Using Nearest Neighbour — splnr_replace_NAs","text":"splnr_replace_NAs() replaces missing (NA) values specified column sf dataframe value nearest spatial neighbor.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_replace_NAs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Remove NAs from Spatial Data Using Nearest Neighbour — splnr_replace_NAs","text":"","code":"splnr_replace_NAs(df, vari)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_replace_NAs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Remove NAs from Spatial Data Using Nearest Neighbour — splnr_replace_NAs","text":"df sf dataframe. dataframe must contain geometry column vari column potential NA values. vari character string specifying name column df NA values removed replaced. column must exist df.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_replace_NAs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Remove NAs from Spatial Data Using Nearest Neighbour — splnr_replace_NAs","text":"sf object identical input df, NA values vari column replaced values nearest non-NA neighbors. NAs found, original df returned unchanged.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_replace_NAs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Remove NAs from Spatial Data Using Nearest Neighbour — splnr_replace_NAs","text":"function useful imputing missing data spatial contexts. identifies Planning Units NA values vari column. , finds geographically closest Planning Unit NA value vari, copies non-missing value. approach leverages spatial autocorrelation often present environmental species data. st_nearest_feature() function sf package used determining closest neighbor.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_replace_NAs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Remove NAs from Spatial Data Using Nearest Neighbour — splnr_replace_NAs","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_prob' is an existing sf object in your package. # For demonstration, let's artificially introduce some NAs in 'Spp2'. df_with_na <- dat_species_prob %>% dplyr::mutate(Spp2 = ifelse(runif(n()) < 0.2, NA, Spp2)) # Replace NAs in 'Spp2' using nearest neighbor imputation. df_no_na <- splnr_replace_NAs(df = df_with_na, vari = \"Spp2\") print(sum(is.na(df_no_na$Spp2))) # Should be 0 if successful } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_scale_01.html","id":null,"dir":"Reference","previous_headings":"","what":"Scale Spatial Layers to Between 0 and 1 — splnr_scale_01","title":"Scale Spatial Layers to Between 0 and 1 — splnr_scale_01","text":"splnr_scale_01() re-scales numeric values specified column sf dataframe range 0 1. particularly useful normalizing data like probabilities costs.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_scale_01.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Scale Spatial Layers to Between 0 and 1 — splnr_scale_01","text":"","code":"splnr_scale_01(dat, col_name)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_scale_01.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Scale Spatial Layers to Between 0 and 1 — splnr_scale_01","text":"dat sf dataframe containing column scaled. col_name character string specifying name numeric column dat needs scaled.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_scale_01.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Scale Spatial Layers to Between 0 and 1 — splnr_scale_01","text":"sf dataframe identical input dat, values col_name column re-scaled 0 1.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_scale_01.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Scale Spatial Layers to Between 0 and 1 — splnr_scale_01","text":"function inspects maximum value (mx) col_name column. divides values column divi factor bring 0-1 range. divi factor determined heuristically: mx > 100, divi 1000. mx > 10, divi 100. mx > 1, divi 10. mx <= 1, division performed (divi 1), data already within desired range. approach ensures data scaled appropriately without hardcoding fixed division factor.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_scale_01.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Scale Spatial Layers to Between 0 and 1 — splnr_scale_01","text":"","code":"if (FALSE) { # \\dontrun{ # Scale the 'Spp1' column. df_scaled_spp1 <- splnr_scale_01(dat = dat_species_prob, col_name = \"Spp1\") print(df_scaled_spp1) # Example where max is already <= 1 df_already_scaled <- dat_species_prob %>% dplyr::mutate(Spp1 = Spp1 / 100) df_no_change <- splnr_scale_01(dat = df_already_scaled, col_name = \"Spp1\") print(df_no_change) # Spp1 values should remain unchanged } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byCategory.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign Targets by Category — splnr_targets_byCategory","title":"Assign Targets by Category — splnr_targets_byCategory","text":"splnr_targets_byCategory() function assigns conservation targets features (e.g., species) based assigned categories. allows differentiated conservation goals different groups features.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byCategory.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign Targets by Category — splnr_targets_byCategory","text":"","code":"splnr_targets_byCategory(dat, catTarg, catName = \"Category\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byCategory.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign Targets by Category — splnr_targets_byCategory","text":"dat sf object (data frame) containing features associated categories. row represent feature (e.g., species) attributes, including category. catTarg named numeric vector names categories (e.g., \"Group1\", \"Endangered\") values corresponding conservation targets (e.g., 0.5, 0.8). catName character string specifying name column dat contains category information. Defaults \"Category\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byCategory.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign Targets by Category — splnr_targets_byCategory","text":"sf object (data frame) identical input dat, additional column named target containing assigned conservation target feature. Features whose categories found catTarg NA target column unless already 'target' column.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byCategory.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Assign Targets by Category — splnr_targets_byCategory","text":"function useful conservation planning different types features (e.g., endangered species, common species, ecosystem types) require distinct conservation targets. performs left join provided named vector (catTarg) names correspond categories data values desired targets. dat input sf object (data frame) contains column (catName) identifying category feature.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byCategory.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Assign Targets by Category — splnr_targets_byCategory","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_category' is an existing sf object in your package # with a column named \"category\" and other feature data. # Example: Assign targets based on predefined categories targets_by_group <- splnr_targets_byCategory( dat = dat_category, # Assuming dat_category has a 'category' column catTarg = c(\"Group1\" = 0.5, \"Group2\" = 0.2), catName = \"category\" ) print(targets_by_group) # Example: Assign targets with a different category column name dat_alt_cat <- data.frame(Feature = letters[1:5], Type = c(\"A\", \"B\", \"A\", \"C\", \"B\")) targets_by_type <- splnr_targets_byCategory( dat = dat_alt_cat, catTarg = c(\"A\" = 0.7, \"B\" = 0.4), catName = \"Type\" ) print(targets_by_type) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byIUCN.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign Targets by IUCN Red List Categories — splnr_targets_byIUCN","title":"Assign Targets by IUCN Red List Categories — splnr_targets_byIUCN","text":"splnr_targets_byIUCN() function assigns conservation targets species based IUCN Red List categories. allows prioritizing species higher risk extinction stringent conservation goals.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byIUCN.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign Targets by IUCN Red List Categories — splnr_targets_byIUCN","text":"","code":"splnr_targets_byIUCN(dat, IUCN_target, IUCN_col = \"IUCN_Category\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byIUCN.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign Targets by IUCN Red List Categories — splnr_targets_byIUCN","text":"dat dataframe sf object containing species information, including column IUCN categories. IUCN_target Either: single numeric value (e.g., 0.3) apply target threatened IUCN categories (\"EX\", \"EW\", \"CR\", \"EN\", \"VU\"). named numeric vector (e.g., c(\"EX\" = 0.8, \"CR\" = 0.6)) apply specific targets particular IUCN categories. IUCN_col character string specifying name column dat contains IUCN category information. Defaults \"IUCN_Category\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byIUCN.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign Targets by IUCN Red List Categories — splnr_targets_byIUCN","text":"dataframe sf object identical input dat, updated newly added target column reflecting assigned conservation goals.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byIUCN.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Assign Targets by IUCN Red List Categories — splnr_targets_byIUCN","text":"function crucial integrating species' extinction risk conservation planning. allows specify targets either single numeric value (applied 'threatened' IUCN categories) named numeric vector specific categories. Species can extracted based IUCN categories using spatialplanr function splnr_get_IUCNRedList(). Important: access IUCN database (e.g., via splnr_get_IUCNRedList()), need API login token. token, obtained rredlist::rl_use_iucn(), must set environment variable named IUCN_REDLIST_KEY (e.g., Sys.setenv(IUCN_REDLIST_KEY = \"[Token]\")). function checks 'target' column already exists dat. , creates one. exists, new targets coalesced existing ones, allowing sequential application refinement targets. \"threatened\" IUCN categories considered target assignment (single IUCN_target provided) : \"EX\" (Extinct), \"EW\" (Extinct Wild), \"CR\" (Critically Endangered), \"EN\" (Endangered), \"VU\" (Vulnerable).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byIUCN.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Assign Targets by IUCN Red List Categories — splnr_targets_byIUCN","text":"","code":"if (FALSE) { # \\dontrun{ # Example 1: Assigning specific targets to categories # Create a dummy dataframe resembling output from splnr_get_IUCNRedList df_species_iucn <- data.frame( Species = c(\"Diomedea exulans\", \"Hippocampus kuda\", \"Squatina squatina\", \"Common Dolphin\"), IUCN_Category = c(\"VU\", \"EN\", \"CR\", \"LC\") ) iucn_specific_targets <- c(\"EX\" = 0.9, \"EW\" = 0.8, \"CR\" = 0.75, \"EN\" = 0.6, \"VU\" = 0.5) df_with_iucn_targets <- splnr_targets_byIUCN( dat = df_species_iucn, IUCN_target = iucn_specific_targets, IUCN_col = \"IUCN_Category\" ) print(df_with_iucn_targets) # Example 2: Assigning a single target to all threatened categories df_single_target <- splnr_targets_byIUCN( dat = df_species_iucn, IUCN_target = 0.4, # Apply 40% target to all threatened species IUCN_col = \"IUCN_Category\" ) print(df_single_target) # Example 3: When 'dat' already has a 'target' column df_pre_targets <- data.frame( Species = c(\"A\", \"B\", \"C\"), IUCN_Category = c(\"CR\", \"LC\", \"EN\"), target = c(0.1, 0.2, 0.1) # Existing targets ) iucn_update_targets <- c(\"CR\" = 0.7) # Only update CR df_updated_targets <- splnr_targets_byIUCN(df_pre_targets, iucn_update_targets) print(df_updated_targets) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byInverseArea.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign Targets by Inverse Area — splnr_targets_byInverseArea","title":"Assign Targets by Inverse Area — splnr_targets_byInverseArea","text":"function calculates inverse area targets conservation feature within sf dataframe, based areal coverage. target set inversely proportional feature's area, ranging specified minimum (target_min) maximum (target_max).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byInverseArea.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign Targets by Inverse Area — splnr_targets_byInverseArea","text":"","code":"splnr_targets_byInverseArea(df, target_min, target_max)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byInverseArea.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign Targets by Inverse Area — splnr_targets_byInverseArea","text":"df sf dataframe containing features (e.g., species distribution data) calculate inverse area targets. column (excluding geometry) represent feature, row Planning Unit. target_min numeric value 0 1 (inclusive) specifying minimum target percentage. target widespread feature. target_max numeric value 0 1 (inclusive) specifying maximum target percentage. target rarest feature.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byInverseArea.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign Targets by Inverse Area — splnr_targets_byInverseArea","text":"tibble (data frame) two columns: Species (feature name) target (calculated inverse area target feature).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byInverseArea.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Assign Targets by Inverse Area — splnr_targets_byInverseArea","text":"inverse area target approach aims assign higher conservation targets features smaller overall distribution areal coverage within study region. can particularly useful prioritizing rare range-restricted features. calculation proceeds follows: area single Planning Unit determined. total area study region estimated multiplying number Planning Units individual Planning Unit area. feature (species), total area across Planning Units calculated. target feature scaled target_min target_max features smaller areas receive targets closer target_max, features larger areas receive targets closer target_min. input df expected sf object columns (excluding geometry) represent different features (e.g., species presence/absence) rows represent Planning Units.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byInverseArea.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Assign Targets by Inverse Area — splnr_targets_byInverseArea","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_prob' is an existing sf object in your package, # representing species distribution in planning units. # Calculate inverse area targets with a range from 30% to 80%. targets_inverse_area <- dat_species_prob %>% splnr_targets_byInverseArea(target_min = 0.3, target_max = 0.8) print(targets_inverse_area) # Example with a different target range (e.g., 20% to 70%) targets_custom_range <- dat_species_prob %>% splnr_targets_byInverseArea(target_min = 0.2, target_max = 0.7) print(targets_custom_range) } # }"}] +[{"path":"https://mathmarecol.github.io/spatialplanr/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"MIT License","title":"MIT License","text":"Copyright (c) 2023 Jason D. Everett Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"overview","dir":"Articles","previous_headings":"","what":"Overview","title":"Climate-Smart Spatial Planning","text":"code written simplify process running prioritizr analysis given region. still work progress feel free submit pull requests new features code improvements.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"set-user-parameters","dir":"Articles","previous_headings":"Overview","what":"Set user parameters","title":"Climate-Smart Spatial Planning","text":"Set diameter planning units. units CRS (usually metres degrees). can also use customised ggplot theme can passed list splnr_gg_add() can used plots. example:","code":"Region <- \"Coral Sea\" # \"Australia\" Type <- \"Oceans\" # \"EEZ\" cCRS <- \"ESRI:54009\" # Mollweide PU_size <- 107460 # m splnr_theme <- list( ggplot2::theme_bw(), ggplot2::theme( legend.position = \"right\", legend.direction = \"vertical\", text = ggplot2::element_text(size = 9, colour = \"black\"), axis.text = ggplot2::element_text(size = 9, colour = \"black\"), plot.title = ggplot2::element_text(size = 9), axis.title = ggplot2::element_blank() ) )"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"analysis-region","dir":"Articles","previous_headings":"Overview","what":"Analysis Region","title":"Climate-Smart Spatial Planning","text":"Start analysis defining region setting planning units. Get boundary chosen region.","code":"Bndry <- splnr_get_boundary(Limits = Region, Type = Type, cCRS = cCRS) landmass <- rnaturalearth::ne_countries(scale = \"medium\", returnclass = \"sf\") %>% sf::st_transform(cCRS)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"create-planning-units","dir":"Articles","previous_headings":"Overview","what":"Create Planning Units","title":"Climate-Smart Spatial Planning","text":"","code":"PUs <- spatialgridr::get_grid(boundary = Bndry, crs = cCRS, output = \"sf_hex\", resolution = PU_size)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"get-the-features","dir":"Articles","previous_headings":"Overview","what":"Get the features","title":"Climate-Smart Spatial Planning","text":"example, use small subset charismatic megafauna species Coral Sea inform conservation plan. filtered Aquamaps (Aquamaps.org) species distribution models study area following species: species chosen based importance region represent example visualization purposes. Note: structure tribbleabove required downstream plotting. Common denotes common name species, Scientific scientific name format used Aquamaps, Category category species belongs Class represents importance species conservation plan.","code":"Dict <- tibble::tribble( ~nameCommon, ~nameVariable, ~category, \"Green sea turtle\", \"Chelonia_mydas\", \"Reptiles\", \"Loggerhead sea turtle\", \"Caretta_caretta\", \"Reptiles\", \"Hawksbill sea turtle\", \"Eretmochelys_imbricata\", \"Reptiles\", \"Olive ridley sea turtle\", \"Lepidochelys_olivacea\", \"Reptiles\", \"Saltwater crocodile\", \"Crocodylus_porosus\", \"Reptiles\", \"Humpback whale\", \"Megaptera_novaeangliae\", \"Mammals\", \"Common Minke whale\", \"Balaenoptera_acutorostrata\", \"Mammals\", \"Dugong\", \"Dugong_dugon\", \"Mammals\", \"Grey nurse shark\", \"Carcharias_taurus\", \"Sharks and rays\", \"Tiger shark\", \"Galeocerdo_cuvier\", \"Sharks and rays\", \"Great hammerhead shark\", \"Sphyrna_mokarran\", \"Sharks and rays\", \"Giant oceanic manta ray\", \"Mobula_birostris\", \"Sharks and rays\", \"Reef manta ray\", \"Mobula_alfredi\", \"Sharks and rays\", \"Whitetip reef shark\", \"Triaenodon_obesus\", \"Sharks and rays\", \"Red-footed booby\", \"Sula_sula\", \"Birds\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"convert-the-probabilities-to-binary-data","dir":"Articles","previous_headings":"Overview > Get the features","what":"Convert the probabilities to binary data","title":"Climate-Smart Spatial Planning","text":"","code":"datEx_species_bin <- spDataFiltered %>% dplyr::as_tibble() %>% dplyr::mutate(dplyr::across( -dplyr::any_of(c(\"geometry\")), # Don't apply to geometry ~ dplyr::case_when( . >= 0.5 ~ 1, . < 0.5 ~ 0, is.na(.data) ~ 0 ) )) %>% sf::st_as_sf() col_name <- spDataFiltered %>% sf::st_drop_geometry() %>% colnames()"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"climate-smart-spatial-planning","dir":"Articles","previous_headings":"Overview > Get the features","what":"Climate-smart spatial planning","title":"Climate-Smart Spatial Planning","text":"far, steps exactly spatial plan include climate change. make spatial plan climate smart, need climate metrics. use climate velocity data obtained x, y z models using SSP5-8.5. downstream analysis, rename column interest (: velocity data) metric. climate velocity data can visualized using splnr_plot_climData() function. case, areas low climate velocity, areas define climate refugia example. Usually, combine several metrics (e.g. exposure, velocity etc.) multiple SSP scenarios get robust climate refugia. example, randomly set areas high velocity value 0.85-1 visualize output (CHANGE LATER BETTER DATA). use climate priority area approach splnr_climate_priorityAreaApproach() detailed Buenafe et al (2023) determine climate refugia. Briefly, approach selects percentile (case 5%) suitable habitat feature considered climate-smart. also requires direction input indicating side metric range climate-smart areas can found. case, lower climate velocity denotes climate-smart (direction = -1), cases higher value might represent climate-smart planning units (direction = 1). Using approach also requires adaptation targets, since 5% suitable habitat species already protected climate-smart areas. can decide much 5% climate-smart areas supposed included spatial plan (: refugiaTarget = 1 protect 100% 5% climate-smart areas). now add information required perform spatial planning, cost, extract names used features.","code":"metric <- CoralSeaVelocity %>% dplyr::rename(metric = voccMag_transformed) (ggclim <- splnr_plot_climData(metric, \"metric\") + splnr_gg_add( Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) set.seed(5) metric <- CoralSeaVelocity %>% dplyr::rename(metric = voccMag_transformed) %>% dplyr::mutate( metricOG = metric, metric = ifelse(metric > 0.99, runif(., 0.85, 1.0), metric) ) (ggclim <- splnr_plot_climData(metric, \"metric\") + splnr_gg_add( Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) targets <- datEx_species_bin %>% sf::st_drop_geometry() %>% colnames() %>% data.frame() %>% setNames(c(\"feature\")) %>% dplyr::mutate(target = 0.3) CPA_Approach <- splnr_climate_priorityAreaApproach( features = datEx_species_bin, metric = metric, targets = targets, direction = -1, refugiaTarget = 1 ) out_sf <- CPA_Approach$Features %>% sf::st_join( datEx_species_bin %>% dplyr::select( tidyselect::starts_with(\"Cost_\") ), join = sf::st_equals) %>% sf::st_join(metric, join = sf::st_equals) targets <- CPA_Approach$Targets out_sf$Cost_None <- rep(1, 397) usedFeatures <- out_sf %>% sf::st_drop_geometry() %>% dplyr::select( -tidyselect::starts_with(\"Cost_\"), -tidyselect::starts_with(\"metric\") ) %>% names()"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"run-the-climate-smart-spatial-planning","dir":"Articles","previous_headings":"Overview > Get the features","what":"Run the climate-smart spatial planning","title":"Climate-Smart Spatial Planning","text":"prioritizrsteps including climate change running non-climate-smart spatial prioritization. can look resulting plan using splnr_plot_solution(). However, also interested climate-smart selected planning units solution actually . , can use kernel density plot.","code":"p1 <- prioritizr::problem(out_sf, usedFeatures, \"Cost_None\") %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(targets$target) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_solnClim <- prioritizr::solve.ConservationProblem(p1) (ggSoln <- splnr_plot_solution(dat_solnClim) + splnr_gg_add( Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) (ggClimDens <- splnr_plot_climKernelDensity( soln = list(dat_solnClim), # names = c(\"Input 1\"), type = \"Normal\", legendTitle = \"Climate velocity (add unit)\", xAxisLab = \"Climate velocity\" ))"},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"percentile-approach","dir":"Articles","previous_headings":"Overview > Alternative Approaches","what":"Percentile Approach","title":"Climate-Smart Spatial Planning","text":"now add information required perform spatial planning, cost, extract names used features run prioritization. can look resulting plan using splnr_plot_solution(). However, also interested climate-smart selected planning units solution actually . , can use kernel density plot","code":"targets <- datEx_species_bin %>% sf::st_drop_geometry() %>% colnames() %>% data.frame() %>% setNames(c(\"feature\")) %>% dplyr::mutate(target = 30) Percentile_Approach <- splnr_climate_percentileApproach( features = datEx_species_bin, metric = metric, targets = targets, direction = -1, percentile = 35 ) out_sf <- Percentile_Approach$Features %>% sf::st_join( datEx_species_bin %>% dplyr::select( tidyselect::starts_with(\"Cost_\") ), join = sf::st_equals ) %>% sf::st_join(metric, join = sf::st_equals) targets <- Percentile_Approach$Targets out_sf$Cost_None <- rep(1, 397) usedFeatures <- out_sf %>% sf::st_drop_geometry() %>% dplyr::select( -tidyselect::starts_with(\"Cost_\"), -tidyselect::starts_with(\"metric\") ) %>% names() p2 <- prioritizr::problem(out_sf, usedFeatures, \"Cost_None\") %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(targets$target) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_solnClimPercentile <- prioritizr::solve.ConservationProblem(p2, force = TRUE ) (ggSoln <- splnr_plot_solution(dat_solnClimPercentile) + splnr_gg_add( Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) (ggClimDens <- splnr_plot_climKernelDensity( soln = list(dat_solnClimPercentile), # names = c(\"Input 1\"), type = \"Normal\", legendTitle = \"Climate velocity (add unit)\", xAxisLab = \"Climate velocity\" ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/ClimateSmart.html","id":"feature-approach","dir":"Articles","previous_headings":"Overview > Alternative Approaches","what":"Feature Approach","title":"Climate-Smart Spatial Planning","text":"now add information required perform spatial planning, cost, extract names used features run prioritization. However, also interested climate-smart selected planning units solution actually . , can use kernel density plot","code":"targets <- datEx_species_bin %>% sf::st_drop_geometry() %>% colnames() %>% data.frame() %>% setNames(c(\"feature\")) %>% dplyr::mutate(target = 0.3) Feature_Approach <- splnr_climate_featureApproach( features = datEx_species_bin, metric = metric, targets = targets, direction = 1 ) out_sf <- Feature_Approach$Features %>% sf::st_join( datEx_species_bin %>% dplyr::select( tidyselect::starts_with(\"Cost_\") ), join = sf::st_equals) %>% sf::st_join(metric, join = sf::st_equals) targets <- Feature_Approach$Targets out_sf$Cost_None <- 1 usedFeatures <- out_sf %>% sf::st_drop_geometry() %>% dplyr::select( -tidyselect::starts_with(\"Cost_\"), -tidyselect::starts_with(\"metric\") ) %>% names() p3 <- prioritizr::problem(out_sf, usedFeatures, \"Cost_None\") %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(targets$target) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_solnClimFeature <- prioritizr::solve.ConservationProblem(p3) (ggSoln <- splnr_plot_solution(dat_solnClimFeature) + splnr_gg_add( Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) (ggClimDens <- splnr_plot_climKernelDensity( soln = list(dat_solnClimFeature), # names = c(\"Input 1\"), type = \"Normal\", legendTitle = \"Climate velocity (add unit)\", xAxisLab = \"Climate velocity\" ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"global-fishing-watch-r-package-gfwr","dir":"Articles","previous_headings":"","what":"Global Fishing Watch R Package (gfwr)","title":"Global Fishing Watch","text":"gfwr package provides convenient functions pull GFW data directly R usable formats. contains three main functions, including : get_vessel_info(), get_event() get_raster(). two first devoted retrieving information features one ore several specific vessels. last particular interest us allows us gather information global fishing watch raster fishing effort (details function appropriate section). mainly use splnr_get_gfw function created enable data retrieved processed variety ways, described . time spent fishing computed using Automatic Identification System (AIS) data, transmitted industrial fishing vessels. AIS data provides information location, speed, direction vessel, can used identify vessel actively fishing.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"ais-caveats-and-limitations","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr)","what":"AIS Caveats and limitations","title":"Global Fishing Watch","text":"AIS coverage vessels several limitations : 1. number vessels captured (AIS provides approximately 70’000 2.8 million identified fishing vessels). 2. size vessels (52-85% vessels larger 24 meters 1% vessels 12 meters).Good know: IMO mandates AIS vessels larger 36 meters. 3. AIS interference areas high vessel density. 4. terrestrial satellites receive messages near shore.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"installation","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr)","what":"Installation","title":"Global Fishing Watch","text":"","code":"remotes::install_github(\"GlobalFishingWatch/gfwr\") library(gfwr) library(spatialplanr)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"api","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr)","what":"API","title":"Global Fishing Watch","text":"access GFW APIs, need : 1. register GFW account . 2. Request API key . token, add .Renviron file (executing chunk ), writing (GFW_TOKEN = “YOUR_TOKEN”) file. (asked restart R changes take effect.)","code":"usethis::edit_r_environ()"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"fishing-effort-visualization","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr)","what":"Fishing effort visualization","title":"Global Fishing Watch","text":"region_id necessary use get_raster function. get_raster function gets raster fishing effort API converts response data frame contains occurrences vessel grid cell (data binned grid cells different resolution), Vessel IDs, Flag, Geartype Apparent fishing Hours basically amount fishing hours vessel per grid cell (geometry). Data can provided : - DAILY, MONTHLY YEARLY temporal resolutions. - LOW (0.1 deg) HIGH (0.01 deg) spatial resolutions. - VESSEL_ID, FLAG, GEARTYPE, FLAGANDGEARTYPE. (can remove option message = FALSE see columns types.)","code":"region_id <- get_region_id(region = \"Australia\", region_source = \"EEZ\", key = gfwr::gfw_auth())$id[2] get_raster( spatial_resolution = \"LOW\", temporal_resolution = \"MONTHLY\", group_by = \"FLAGANDGEARTYPE\", start_date = \"2022-01-01\", end_date = \"2023-01-01\", region = region_id, region_source = \"EEZ\", key = gfwr::gfw_auth() )"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"get_raster-caveats-and-limitations-","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr) > Fishing effort visualization","what":"get_raster caveats and limitations.","title":"Global Fishing Watch","text":"Date range limited 1-year. Nevertheless, modifications, can get round problems splnr_get_gfw.","code":"data_sf_combined <- splnr_get_gfw(region = \"Australia\", start_date = \"2019-01-01\", end_date = \"2023-12-31\", temp_res = \"YEARLY\", spat_res = \"LOW\", compress = FALSE)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"visualization","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr)","what":"Visualization","title":"Global Fishing Watch","text":"display data, load : - coastline rnaturalearth package modify get sf object, constrain boundaries given data. - EEZ Polygons oceandatr package","code":"# Check and modify if necessary the spatial reference of data_sf_combined data_sf_combined <- sf::st_set_crs(data_sf_combined, sf::st_crs(rnaturalearth::ne_coastline(scale = \"large\"))) coast_clipped <- rnaturalearth::ne_coastline(scale = \"large\") %>% sf::st_as_sf() %>% sf::st_intersection(sf::st_as_sfc(sf::st_bbox(data_sf_combined))) # Load EEZ polygons eezs <- spatialgridr::get_boundary(name = \"Australia\", type = \"eez\", country_type = \"country\") %>% sf::st_transform(crs = sf::st_crs(data_sf_combined)) %>% sf::st_make_valid() %>% sf::st_intersection(sf::st_as_sfc(sf::st_bbox(data_sf_combined)))"},{"path":[]},{"path":[]},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"year-on-year-comparison","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr) > Here we display the Fishing Effort in Australia from 2019 to 2023.","what":"Year-on-year comparison","title":"Global Fishing Watch","text":"may need compare different timeframes, seasons, see patterns. Note : vessels adopted AIS (mainly economically developed countries) since deployment technologies, rise activities must seen context increase necessarily intense fishing activity.","code":"# We need to change the temporal range according to our need group by it to display the total fishing hours.
    data_sf_combined <- splnr_get_gfw(region = \"Australia\", start_date = \"2019-01-01\", end_date = \"2023-12-31\", temp_res = \"MONTHLY\", key = gfwr::gfw_auth()) %>% dplyr::group_by(Year, Month) %>% dplyr::summarize(Total_Fishing_Hours = sum(ApparentFishingHrs))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"fishing-gear-type","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr) > Here we display the Fishing Effort in Australia from 2019 to 2023.","what":"Fishing gear type","title":"Global Fishing Watch","text":"display Vessel activity ‘Micronesia’ 2020 according fishing gear type.","code":"data_sf_combined <- splnr_get_gfw(region = \"Micronesia\", start_date = \"2019-12-31\", end_date = \"2021-01-01\", temp_res = \"MONTHLY\")"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"flags","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr) > Here we display the Fishing Effort in Australia from 2019 to 2023.","what":"Flags","title":"Global Fishing Watch","text":"display Vessel activity Papua New Guinea according Vessels flags.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"supplementary-materials-","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr) > Here we display the Fishing Effort in Australia from 2019 to 2023.","what":"Supplementary materials.","title":"Global Fishing Watch","text":"fishing detection model trained AIS data 503 vessels identified fishing activity 90% accuracy, means can identify fishing non-fishing activity high accuracy. details AIS operation limitations .","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/GlobalFishingWatch.html","id":"hierarchy-of-vessels-gear-types","dir":"Articles","previous_headings":"Global Fishing Watch R Package (gfwr) > Here we display the Fishing Effort in Australia from 2019 to 2023.","what":"Hierarchy of vessels gear types :","title":"Global Fishing Watch","text":"Source : https://globalfishingwatch.org/datasets--code-vessel-identity/","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"overview","dir":"Articles","previous_headings":"","what":"Overview","title":"Spatial Planning With Zones","text":"code written simplify process running prioritizr analysis given region. still work progress feel free submit pull requests new features code improvements. workflow shown based prioritizr introduction zones.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"set-user-parameters","dir":"Articles","previous_headings":"Overview","what":"Set user parameters","title":"Spatial Planning With Zones","text":"Set diameter planning units. units CRS (usually metres degrees). Choose CRS analysis. use Mollweide","code":"Region <- \"Coral Sea\" # \"Australia\" Type <- \"Oceans\" # \"EEZ\" PU_size <- 107460 # m cCRS <- \"ESRI:54009\""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"analysis-region","dir":"Articles","previous_headings":"Overview","what":"Analysis Region","title":"Spatial Planning With Zones","text":"Start analysis defining region setting planning units. Get boundary chosen region.","code":"Bndry <- splnr_get_boundary(Limits = Region, Type = Type, cCRS = cCRS) landmass <- rnaturalearth::ne_countries( scale = \"medium\", returnclass = \"sf\" ) %>% sf::st_transform(cCRS)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"create-planning-units","dir":"Articles","previous_headings":"Overview","what":"Create Planning Units","title":"Spatial Planning With Zones","text":"can also use customised ggplot theme can passed list splnr_gg_add() can used plots. example:","code":"PUs <- spatialgridr::get_grid(boundary = Bndry, crs = cCRS, output = \"sf_hex\", resolution = PU_size) splnr_theme <- list( ggplot2::theme_bw(), ggplot2::theme( legend.position = \"right\", legend.direction = \"vertical\", text = ggplot2::element_text(size = 9, colour = \"black\"), axis.text = ggplot2::element_text(size = 9, colour = \"black\"), plot.title = ggplot2::element_text(size = 9), axis.title = ggplot2::element_blank() ) )"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"get-the-features","dir":"Articles","previous_headings":"Overview","what":"Get the features","title":"Spatial Planning With Zones","text":"example, use small subset charismatic megafauna species Coral Sea inform conservation plan. filtered Aquamaps (Aquamaps.org) species distribution models study area following species: species chosen based importance region represent example visualization purposes. Note: structure tribbleabove required downstream plotting. Common denotes common name species, Scientific scientific name format used Aquamaps, Category category species belongs Class represents importance species conservation plan.","code":"Dict <- tibble::tribble( ~nameCommon, ~nameVariable, ~category, \"Green sea turtle\", \"Chelonia_mydas\", \"Reptiles\", \"Loggerhead sea turtle\", \"Caretta_caretta\", \"Reptiles\", \"Hawksbill sea turtle\", \"Eretmochelys_imbricata\", \"Reptiles\", \"Olive ridley sea turtle\", \"Lepidochelys_olivacea\", \"Reptiles\", \"Saltwater crocodile\", \"Crocodylus_porosus\", \"Reptiles\", \"Humpback whale\", \"Megaptera_novaeangliae\", \"Mammals\", \"Common Minke whale\", \"Balaenoptera_acutorostrata\", \"Mammals\", \"Dugong\", \"Dugong_dugon\", \"Mammals\", \"Grey nurse shark\", \"Carcharias_taurus\", \"Sharks and rays\", \"Tiger shark\", \"Galeocerdo_cuvier\", \"Sharks and rays\", \"Great hammerhead shark\", \"Sphyrna_mokarran\", \"Sharks and rays\", \"Giant oceanic manta ray\", \"Mobula_birostris\", \"Sharks and rays\", \"Reef manta ray\", \"Mobula_alfredi\", \"Sharks and rays\", \"Whitetip reef shark\", \"Triaenodon_obesus\", \"Sharks and rays\", \"Red-footed booby\", \"Sula_sula\", \"Birds\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"convert-the-probabilities-to-binary-data-and-feature-names","dir":"Articles","previous_headings":"Overview > Get the features","what":"Convert the probabilities to binary data and feature names","title":"Spatial Planning With Zones","text":"","code":"datEx_species_bin <- spDataFiltered %>% splnr_apply_cutoffs(Cutoffs = 0.5) col_name <- spDataFiltered %>% sf::st_drop_geometry() %>% colnames()"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"spatial-planning-including-zones","dir":"Articles","previous_headings":"Overview > Get the features","what":"Spatial planning including zones","title":"Spatial Planning With Zones","text":"far, steps exactly spatial plan include zones. direct comparison, first run spatial plan include zoning. , define targets features (: 30% features) create conservation problem include area-based cost prioritization. solve problem plot solution. can also look well set target met. now look spatial plan needs extended include multiple management zones using zones().","code":"target <- rep(0.3, nrow(Dict)) p1 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate(Cost1 = rep(1, 397)), col_name, \"Cost1\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(target) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s1 <- p1 %>% prioritizr::solve.ConservationProblem() (ggSoln <- splnr_plot_solution(s1) + splnr_gg_add(PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme)) s1T <- s1 %>% dplyr::select(tidyselect::starts_with(c(\"solution\"))) %>% sf::st_drop_geometry() %>% tibble::as_tibble() r1 <- prioritizr::eval_feature_representation_summary(p1, s1T) print(r1) #> # A tibble: 15 × 5 #> summary feature total_amount absolute_held relative_held #> #> 1 overall Chelonia_mydas 22 10 0.455 #> 2 overall Caretta_caretta 22 10 0.455 #> 3 overall Eretmochelys_imbricata 24 10 0.417 #> 4 overall Lepidochelys_olivacea 22 10 0.455 #> 5 overall Crocodylus_porosus 21 9 0.429 #> 6 overall Megaptera_novaeangliae 388 120 0.309 #> 7 overall Balaenoptera_acutorostrata 238 74 0.311 #> 8 overall Dugong_dugon 13 5 0.385 #> 9 overall Carcharias_taurus 22 10 0.455 #> 10 overall Galeocerdo_cuvier 36 14 0.389 #> 11 overall Sphyrna_mokarran 397 123 0.310 #> 12 overall Mobula_birostris 20 8 0.4 #> 13 overall Mobula_alfredi 20 8 0.4 #> 14 overall Triaenodon_obesus 25 10 0.4 #> 15 overall Sula_sula 13 5 0.385"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"different-cost-layers","dir":"Articles","previous_headings":"Overview > Get the features","what":"Different cost layers","title":"Spatial Planning With Zones","text":"first assume zones interest set features, separate cost layers. , need set targets zones, case 20% features first zone 5% features second zone. create zones object specify number zones features zone. , define two zones features. zones need specified cost targets. use one area-based cost one cost layer uses random numbers, pre-defined targets pass zonesobject problem formulation solving conservation problem. solution can plotted using function splnr_plot_solution() argument zones set TRUE. can see now planning units selected, planning units either selected zone 1 zone 2.","code":"target2 <- matrix(NA, ncol = 2, nrow = nrow(Dict)) target2[, 1] <- 0.2 target2[, 2] <- 0.05 z2 <- prioritizr::zones(\"zone 1\" = col_name, \"zone 2\" = col_name) p2 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate( Cost1 = rep(1, 397), # when giving sf input, we need as many cost columns as we have zones Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(target2) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s2 <- p2 %>% prioritizr::solve.ConservationProblem() (gg_s2 <- splnr_plot_solution( s2, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"different-features","dir":"Articles","previous_headings":"Overview > Get the features","what":"Different features","title":"Spatial Planning With Zones","text":"using sf objects zones(), input feature names zones() need length contain features. means zones features, interest specific zone, target set 0. example, want separate example data zone reptiles another zone containing taxa reptiles, can specify following targets: sets target reptiles first zone 30% rest 0%. second zone, targets non-reptiles 10% reptiles 0% interest zone. Target data given matrix working zones, transform data frame matrix end. define conservation problem way solve . can also look well targets met zone (combined). can see 15 features listed (number) overall summary, summary zone 1 summary zone 2. looking relative_held column tibble, observe summary zone 1 (row 16 onwards), features >30% targets met, whereas others (feature 6 7) low percentage suitable habitat within selected planning units. can extract common names two features: marine mammals thus target 0% zone 1 reptile-specific zone. percentage selected suitable habitat 0% despite target 0 proportion suitable habitat mammals selected incidentally selecting planning units zone meeting targets reptiles. applies zone 2. can also plot final solution :","code":"targets2b <- Dict %>% dplyr::mutate( targetZ1 = dplyr::if_else(category == \"Reptiles\", 30 / 100, 0), targetZ2 = dplyr::if_else(category != \"Reptiles\", 10 / 100, 0) ) %>% dplyr::select(\"targetZ1\", \"targetZ2\") %>% as.matrix() # NOTE: when using sf input, we need as many cost columns as we have zones p2b <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate( Cost1 = rep(1, 397), Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(targets2b) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s2b <- p2b %>% prioritizr::solve.ConservationProblem() r2b <- s2b %>% dplyr::select(tidyselect::starts_with(c(\"solution\"))) %>% sf::st_drop_geometry() %>% tibble::as_tibble() %>% prioritizr::eval_feature_representation_summary(p2b, .) print(r2b, n = 45) #> # A tibble: 45 × 5 #> summary feature total_amount absolute_held relative_held #> #> 1 overall 1 44 11 0.25 #> 2 overall 2 44 11 0.25 #> 3 overall 3 48 11 0.229 #> 4 overall 4 44 11 0.25 #> 5 overall 5 42 11 0.262 #> 6 overall 6 776 43 0.0554 #> 7 overall 7 476 26 0.0546 #> 8 overall 8 26 7 0.269 #> 9 overall 9 44 11 0.25 #> 10 overall 10 72 13 0.181 #> 11 overall 11 794 48 0.0605 #> 12 overall 12 40 11 0.275 #> 13 overall 13 40 11 0.275 #> 14 overall 14 50 12 0.24 #> 15 overall 15 26 8 0.308 #> 16 zone 1 1 22 8 0.364 #> 17 zone 1 2 22 8 0.364 #> 18 zone 1 3 24 8 0.333 #> 19 zone 1 4 22 8 0.364 #> 20 zone 1 5 21 8 0.381 #> 21 zone 1 6 388 4 0.0103 #> 22 zone 1 7 238 2 0.00840 #> 23 zone 1 8 13 5 0.385 #> 24 zone 1 9 22 8 0.364 #> 25 zone 1 10 36 8 0.222 #> 26 zone 1 11 397 8 0.0202 #> 27 zone 1 12 20 8 0.4 #> 28 zone 1 13 20 8 0.4 #> 29 zone 1 14 25 8 0.32 #> 30 zone 1 15 13 6 0.462 #> 31 zone 2 1 22 3 0.136 #> 32 zone 2 2 22 3 0.136 #> 33 zone 2 3 24 3 0.125 #> 34 zone 2 4 22 3 0.136 #> 35 zone 2 5 21 3 0.143 #> 36 zone 2 6 388 39 0.101 #> 37 zone 2 7 238 24 0.101 #> 38 zone 2 8 13 2 0.154 #> 39 zone 2 9 22 3 0.136 #> 40 zone 2 10 36 5 0.139 #> 41 zone 2 11 397 40 0.101 #> 42 zone 2 12 20 3 0.15 #> 43 zone 2 13 20 3 0.15 #> 44 zone 2 14 25 4 0.16 #> 45 zone 2 15 13 2 0.154 Dict[[1]][6] #> [1] \"Humpback whale\" Dict[[1]][7] #> [1] \"Common Minke whale\" (gg_s2b <- splnr_plot_solution( s2b, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"boundary-penalty","dir":"Articles","previous_headings":"Overview > Get the features","what":"Boundary penalty","title":"Spatial Planning With Zones","text":"Similar “normal” priritisations, zones also allows including boundary penalty. several options can done within zones zones.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"within-the-same-zone","dir":"Articles","previous_headings":"Overview > Get the features > Boundary penalty","what":"Within the same zone","title":"Spatial Planning With Zones","text":"zeros matrix denote penalty zones, whereas ones introduce boundary penalty define conservation problem. , introduce penalties within zone 1 zone 2 respectively. add_boundary_penalties() set penalty 0.5 zones defined zm1. purpose example, also set 10 second time limit prioritization. results show less fragmentation previous solution without penalties: boundary penalty can also introduced one zone:","code":"zm1 <- diag(2) print(zm1) #> [,1] [,2] #> [1,] 1 0 #> [2,] 0 1 p3 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate( Cost1 = rep(1, 397), # when giving sf input, we need as many cost columns as we have zones Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_boundary_penalties(0.5, zone = zm1) %>% prioritizr::add_relative_targets(target2) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(time_limit = 10, verbose = FALSE) s3 <- p3 %>% prioritizr::solve.ConservationProblem() (gg_s3 <- splnr_plot_solution( s3, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) zm2 <- zm1 zm2[2, 2] <- 0 # NOTE: When using sf input, we need as many cost columns as we have zones p4 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate( Cost1 = rep(1, 397), Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_boundary_penalties(0.5, zone = zm2) %>% prioritizr::add_relative_targets(target2) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(time_limit = 10, verbose = FALSE) s4 <- p4 %>% prioritizr::solve.ConservationProblem() (gg_s4 <- splnr_plot_solution( s4, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"across-zones","dir":"Articles","previous_headings":"Overview > Get the features > Boundary penalty","what":"Across zones","title":"Spatial Planning With Zones","text":"Similarly, penalties can applied zones specified problem.","code":"zm3 <- matrix(1, ncol = 2, nrow = 2) print(zm3) #> [,1] [,2] #> [1,] 1 1 #> [2,] 1 1 p5 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate( Cost1 = rep(1, 397), # when giving sf input, we need as many cost columns as we have zones Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_boundary_penalties(0.5, zone = zm3) %>% prioritizr::add_relative_targets(target2) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(time_limit = 10, verbose = FALSE) s5 <- p5 %>% prioritizr::solve.ConservationProblem() (gg_s5 <- splnr_plot_solution( s5, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"adding-constraints","dir":"Articles","previous_headings":"Overview > Get the features","what":"Adding constraints","title":"Spatial Planning With Zones","text":"Another addition often used conservation planning constraints. often lock lock areas interest various reasons. example, lock already existing MPAs one zones. using zones constraints, use prioritizr function add_manual_locked_constraints() requires input specific format, first prepare MPA data. need specify zone constraint applied , give information Planning Unit identifier, rename column interest “status” filter Planning Units locked-. results can visualized :","code":"mpas <- MPAsCoralSea %>% dplyr::mutate(zone = \"zone 1\") %>% dplyr::rename(status = wdpa) %>% tibble::rowid_to_column(\"pu\") %>% sf::st_drop_geometry() %>% tibble::tibble() %>% dplyr::filter(status == 1) # NOTE: When using sf input, we need as many cost columns as we have zones p6 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate( Cost1 = rep(1, 397), Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_manual_locked_constraints(mpas) %>% prioritizr::add_relative_targets(target2) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(time_limit = 10, verbose = FALSE) s6 <- p6 %>% prioritizr::solve.ConservationProblem() (gg_s6 <- splnr_plot_solution( s6, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, lockIn = MPAsCoralSea, nameLockIn = \"wdpa\", typeLockIn = \"Full\", colorLockIn = \"lightgrey\", alphaLockIn = 0.2, overlay = landmass, labelLockIn = \"Current MPAs\", cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"objective-functions","dir":"Articles","previous_headings":"Overview > Get the features","what":"Objective functions","title":"Spatial Planning With Zones","text":"far used minimum set objective function meet conservation targets whilst minimizing cost. However, objective function available prioritizr. example maximising mangrove ecosystem services, employed minimum shortfall objective function instead (Dabalà et al 2022). objective function, allocate budget exceeded (example area >30%) whilst still trying minimise cost meeting targets - targets might met (shortfall). Zones also works objective functions minimum set objective function. apply add_min_shortfall_objective() provide separate budgets two zones (8 0.3). can visualize output solving conservation problem.","code":"# NOTE: When using sf input, we need as many cost columns as we have zones p7 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate( Cost1 = rep(1, 397), Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_shortfall_objective(c(8, 0.3)) %>% prioritizr::add_relative_targets(target2) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(time_limit = 10, verbose = FALSE) s7 <- p7 %>% prioritizr::solve.ConservationProblem() (gg_s7 <- splnr_plot_solution( s7, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"alternative-linear-constraints","dir":"Articles","previous_headings":"Overview > Get the features","what":"Alternative: linear constraints","title":"Spatial Planning With Zones","text":"Sometimes spatial plan might needed requires minimising several costs , binary output (inside protected area/outside protected area) sufficient. case, using linear constraints instead zones might simpler time-efficient way forward. Linear constraints make sure planning units selected area meet criteria given constraint. example, using area-based cost (lowest number planning units meet target), might also simultaneously want minimise cost fisheries keep certain threshold. Inversely, might want minimise cost fisheries also select 30% area. example, fill first define targets random cost layer values ranging 0 1. define solve conservation problem: Based problem definition, want meet targets biodiversity features whilst selecting lowest number planning units possible. However, solution also depends threshold linear constraint specified add_linear_constraints()problem. Specifically, planning units selected solution can exceed 10% total cost planning units costRandom$CostR. can visualise solution : NOTE: can also use multiple linear constraints plan, however, might require normalization input data constraints comparable units, careful tuning thresholds, prioritizr still able solve problem.","code":"target8 <- rep(0.3, nrow(Dict)) set.seed <- 10 # Add seed so the problem below solves each time costRandom <- datEx_species_bin %>% dplyr::mutate(CostR = runif(n = dim(.)[[1]])) %>% dplyr::select(\"CostR\") p8 <- prioritizr::problem( datEx_species_bin %>% dplyr::mutate(Cost1 = rep(1, 397)), col_name, \"Cost1\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(target8) %>% prioritizr::add_linear_constraints(sum(costRandom$CostR) * 0.1, sense = \"<=\", costRandom$CostR ) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s8 <- p8 %>% prioritizr::solve.ConservationProblem() (gg_s8 <- splnr_plot_solution(s8) + splnr_gg_add(PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"common-targets-across-zones","dir":"Articles","previous_headings":"Overview > Get the features","what":"Common targets across zones","title":"Spatial Planning With Zones","text":"Sometimes might required meet (common) conservation target across multiple zones, several zones contribute reaching target. , need define target across zones (: 30% features across zones): need bring data specific format requires us individual column feature specific zone, spp1 two zones (zone1 zone2), two separate columns input data: spp1_zone1 spp1_zone2. species names zone names exactly specified zones() object separated _. also extract new feature names create zones object, joining two newly created data frames file used prioriztisation. can see defined (random) cost layers cost layer zone2 three times costly zone1. setting solving conservation problem, can look resulting solution well targets met. overall summary shows every feature’s suitable habitat represented least 30% combined target set. However, can see features zone1 lot frequently selected zone2 zone2 three times costly. plot also reflects observation PUs frequently selected zone1. wanted constrain , zone1 less often selected zone2 often?","code":"targetAcross <- dplyr::tibble( feature = col_name, zone = list(c(\"zone1\", \"zone2\"))[rep(1, length(col_name))], target = rep(0.3, length(col_name)), type = rep(\"relative\", length(col_name)) ) datSpecZone1 <- datEx_species_bin %>% dplyr::rename_at(dplyr::vars(-geometry), ~ paste0(.x, \"_zone1\")) featuresZone1 <- datSpecZone1 %>% sf::st_drop_geometry() %>% colnames() datSpecZone2 <- datEx_species_bin %>% dplyr::rename_at(dplyr::vars(-geometry), ~ paste0(.x, \"_zone2\")) featuresZone2 <- datSpecZone2 %>% sf::st_drop_geometry() %>% colnames() z10 <- prioritizr::zones( featuresZone1, featuresZone2, zone_names = c(\"zone1\", \"zone2\"), feature_names = col_name ) out_sf <- datSpecZone1 %>% sf::st_join(datSpecZone2, join = sf::st_equals) %>% dplyr::mutate( Cost1 = runif(n = dim(.)[[1]]) * 100, Cost2 = runif(n = dim(.)[[1]]) * 300 ) p10 <- prioritizr::problem(out_sf, z10, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_manual_targets(targetAcross) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s10 <- p10 %>% prioritizr::solve.ConservationProblem() s10F <- s10 %>% dplyr::select(tidyselect::starts_with(c(\"solution\"))) %>% sf::st_drop_geometry() %>% tibble::as_tibble() r10 <- prioritizr::eval_feature_representation_summary(p10, s10F) print(r10) #> # A tibble: 45 × 5 #> summary feature total_amount absolute_held relative_held #> #> 1 overall Chelonia_mydas 44 14 0.318 #> 2 overall Caretta_caretta 44 14 0.318 #> 3 overall Eretmochelys_imbricata 48 15 0.312 #> 4 overall Lepidochelys_olivacea 44 14 0.318 #> 5 overall Crocodylus_porosus 42 14 0.333 #> 6 overall Megaptera_novaeangliae 776 234 0.302 #> 7 overall Balaenoptera_acutorostrata 476 146 0.307 #> 8 overall Dugong_dugon 26 10 0.385 #> 9 overall Carcharias_taurus 44 14 0.318 #> 10 overall Galeocerdo_cuvier 72 25 0.347 #> # ℹ 35 more rows (gg_s10 <- splnr_plot_solution(s10, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"targets-across-zones-with-linear-constraints","dir":"Articles","previous_headings":"Overview > Get the features","what":"Targets across zones with linear constraints","title":"Spatial Planning With Zones","text":"can include linear constraints zone1 , area exceed 30% whole area. need create matrix contains data constraint want include. Although want put linear constraint zone1, prioritizr still requires matrix many columns zones. Thus, set area cost 1 zone1 want constraint 0 zone2 want introduce linear constraint. define conservation problem add linear constraint 30% area. selected planning units now equally distributed across zones, also observable plot: However, also expect cost spatial plan higher previous one.","code":"CostArea <- out_sf %>% dplyr::mutate( areaCostZone1 = rep(1, 397), areaCostZone2 = rep(0, 397) ) %>% sf::st_drop_geometry() %>% dplyr::select(\"areaCostZone1\", \"areaCostZone2\") %>% as.matrix() p11 <- prioritizr::problem(out_sf, z10, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_linear_constraints(sum(CostArea[, 1]) * 0.3, sense = \"<=\", CostArea ) %>% prioritizr::add_manual_targets(targetAcross) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s11 <- p11 %>% prioritizr::solve.ConservationProblem() s11F <- s11 %>% dplyr::select(tidyselect::starts_with(c(\"solution\"))) %>% sf::st_drop_geometry() %>% tibble::as_tibble() r11 <- prioritizr::eval_feature_representation_summary(p11, s11F) print(r11) #> # A tibble: 45 × 5 #> summary feature total_amount absolute_held relative_held #> #> 1 overall Chelonia_mydas 44 14 0.318 #> 2 overall Caretta_caretta 44 14 0.318 #> 3 overall Eretmochelys_imbricata 48 15 0.312 #> 4 overall Lepidochelys_olivacea 44 14 0.318 #> 5 overall Crocodylus_porosus 42 14 0.333 #> 6 overall Megaptera_novaeangliae 776 234 0.302 #> 7 overall Balaenoptera_acutorostrata 476 144 0.303 #> 8 overall Dugong_dugon 26 9 0.346 #> 9 overall Carcharias_taurus 44 14 0.318 #> 10 overall Galeocerdo_cuvier 72 24 0.333 #> # ℹ 35 more rows (gg_s11 <- splnr_plot_solution( s11, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"targets-across-some-but-not-all-zones","dir":"Articles","previous_headings":"Overview > Get the features","what":"Targets across some (but not all) zones","title":"Spatial Planning With Zones","text":"example, want target 30% suitable reptile habitat zone 1 zone 2. Additionally, set target 20% zone 2 marine mammals target 5% sharks rays zone 3. create zones object three different zones: create joint sf object zones respective costs.","code":"targetAcrossSome <- Dict %>% dplyr::mutate( target = dplyr::case_when( category == \"Reptiles\" ~ 30 / 100, category == \"Mammals\" ~ 10 / 100, category == \"Sharks and rays\" ~ 5 / 100, TRUE ~ 0 ), zone = dplyr::case_when( category == \"Reptiles\" ~ list(c(\"zone1\", \"zone2\")), category == \"Mammals\" ~ list(\"zone2\"), category == \"Sharks and rays\" ~ list(\"zone3\"), TRUE ~ list(c(\"zone1\", \"zone2\", \"zone3\")) ), type = rep(\"relative\", length(col_name)) ) %>% dplyr::rename(feature = \"nameVariable\") %>% dplyr::select(-\"category\", -\"nameCommon\") datSpecZone1 <- datEx_species_bin %>% dplyr::rename_at(dplyr::vars(-geometry), ~ paste0(.x, \"_zone1\")) featuresZone1 <- datSpecZone1 %>% sf::st_drop_geometry() %>% colnames() datSpecZone2 <- datEx_species_bin %>% dplyr::rename_at(dplyr::vars(-geometry), ~ paste0(.x, \"_zone2\")) featuresZone2 <- datSpecZone2 %>% sf::st_drop_geometry() %>% colnames() datSpecZone3 <- datEx_species_bin %>% dplyr::rename_at(dplyr::vars(-geometry), ~ paste0(.x, \"_zone3\")) featuresZone3 <- datSpecZone3 %>% sf::st_drop_geometry() %>% colnames() z12 <- prioritizr::zones( featuresZone1, featuresZone2, featuresZone3, zone_names = c(\"zone1\", \"zone2\", \"zone3\"), feature_names = col_name ) # NOTE: When using sf input, we need as many cost columns as we have zones out_sf <- datSpecZone1 %>% sf::st_join(datSpecZone2, join = sf::st_equals) %>% sf::st_join(datSpecZone3, join = sf::st_equals) %>% dplyr::mutate(geometry = datEx_species_bin$geometry) %>% sf::st_as_sf() %>% dplyr::mutate( Cost1 = runif(n = dim(.)[[1]]) * 100, Cost2 = runif(n = dim(.)[[1]]) * 300, Cost3 = runif(n = dim(.)[[1]]) * 200 ) p12 <- prioritizr::problem(out_sf, z12, cost_column = c(\"Cost1\", \"Cost2\", \"Cost3\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_manual_targets(targetAcrossSome) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s12 <- p12 %>% prioritizr::solve.ConservationProblem() s12F <- s12 %>% dplyr::select(tidyselect::starts_with(c(\"solution\"))) %>% sf::st_drop_geometry() %>% tibble::as_tibble() r12 <- prioritizr::eval_feature_representation_summary(p12, s12F) print(r12) #> # A tibble: 60 × 5 #> summary feature total_amount absolute_held relative_held #> #> 1 overall Chelonia_mydas 66 16 0.242 #> 2 overall Caretta_caretta 66 16 0.242 #> 3 overall Eretmochelys_imbricata 72 17 0.236 #> 4 overall Lepidochelys_olivacea 66 16 0.242 #> 5 overall Crocodylus_porosus 63 16 0.254 #> 6 overall Megaptera_novaeangliae 1164 64 0.0550 #> 7 overall Balaenoptera_acutorostrata 714 44 0.0616 #> 8 overall Dugong_dugon 39 8 0.205 #> 9 overall Carcharias_taurus 66 16 0.242 #> 10 overall Galeocerdo_cuvier 108 19 0.176 #> # ℹ 50 more rows (gg_s12 <- splnr_plot_solution( s12, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"navyblue\", \"black\"), legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\", \"Zone3\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"short-term","dir":"Articles","previous_headings":"Overview > Get the features > Next steps","what":"Short-term","title":"Spatial Planning With Zones","text":"Test run time zones compared normal prioritization Communicate zones outcomes effectively (e.g. targets, cost overlay etc.)","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/MultipleUse.html","id":"longer-term","dir":"Articles","previous_headings":"Overview > Get the features > Next steps","what":"Longer-term","title":"Spatial Planning With Zones","text":"deal overlapping zones (moment prioritizr allocates PU single zone) connect climate-smart workflow zones handle inputs benefit using different objective functions (e.g. ecosystem services vs biodiversity features) Look commonly used data sets multiple use approaches think zone-specific costs, constraints, targets etc. Define (Waitt’s) understanding multiple-use want implement (can differ now future) EU Horizon 2020 MUSES-project: multiple use/multi-use “joint use resources close geographic proximity either single user multiple users. umbrella term covers multitude use combinations marine realm represents radical change concept exclusive resource rights inclusive sharing resources space one users.” Bonnevie et al. 2019: “multi-use specific co-location/coexistence resources shared.” Schupp et al. 2019: distinguishes different types multi-uses (one co-location) Types multiple use MSP according Schupp et al. 2019","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"overview","dir":"Articles","previous_headings":"","what":"Overview","title":"A Basic Spatial Planning Workflow","text":"code written simplify process running prioritizr analysis given region. still work progress feel free submit pull requests new features code improvements.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"set-user-parameters","dir":"Articles","previous_headings":"Overview","what":"Set user parameters","title":"A Basic Spatial Planning Workflow","text":"can set region defined splnr_get_planningUnits. can also define region square boundaries (degrees) need. Choose CRS analysis. case use Mollweide Set diameter planning units. units CRS (usually metres degrees).","code":"Region <- \"Coral Sea\" # \"Australia\" Type <- \"Oceans\" # \"EEZ\" Region <- c(xmin = 150, xmax = 160, ymin = -40, ymax = -30) cCRS <- \"ESRI:54009\" PU_size <- 107460 # m"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"analysis-region","dir":"Articles","previous_headings":"Overview","what":"Analysis Region","title":"A Basic Spatial Planning Workflow","text":"Start analysis defining region setting planning units. Get boundary chosen region. Get land boundaries remove overlap. object “landmass” represents land mass removed (inverse = FALSE)","code":"Bndry <- splnr_get_boundary(Limits = Region, Type = Type, cCRS = cCRS) landmass <- rnaturalearth::ne_countries( scale = \"medium\", returnclass = \"sf\" ) %>% sf::st_transform(cCRS)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"create-planning-units","dir":"Articles","previous_headings":"Overview","what":"Create Planning Units","title":"A Basic Spatial Planning Workflow","text":"can check PUs look like want add additional properties map, example landmass boundary, can use splnr_gg_add(). can also use customised ggplpot theme can passed list splnr_gg_add() can used plots. example:","code":"PUs <- spatialgridr::get_grid(boundary = Bndry, crs = cCRS, output = \"sf_hex\", resolution = PU_size) (ggPU <- splnr_plot(df = PUs) + ggplot2::theme_bw()) # Plot Planning Units (ggPU <- splnr_plot(df = PUs) + splnr_gg_add( Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = \"Default\" )) splnr_theme <- list( ggplot2::theme_bw(), ggplot2::theme( legend.position = \"right\", legend.direction = \"vertical\", text = ggplot2::element_text(size = 9, colour = \"black\"), axis.text = ggplot2::element_text(size = 9, colour = \"black\"), plot.title = ggplot2::element_text(size = 9), axis.title = ggplot2::element_blank() ) ) (ggPU <- splnr_plot(PUs) + splnr_gg_add( Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"get-the-features","dir":"Articles","previous_headings":"Overview","what":"Get the features","title":"A Basic Spatial Planning Workflow","text":"example, use small subset charismatic megafauna species Coral Sea inform conservation plan. filtered Aquamaps (Aquamaps.org) species distribution models study area following species: species chosen based importance region represent example visualization purposes. Note: structure tribbleabove required downstream plotting. Common denotes common name species, nameVariable scientific name format used Aquamaps, TaxGroup taxonomic grouping species belongs Category represents importance species conservation plan.","code":"Dict <- tibble::tribble( ~nameCommon, ~nameVariable, ~category, \"Green sea turtle\", \"Chelonia_mydas\", \"Reptiles\", \"Loggerhead sea turtle\", \"Caretta_caretta\", \"Reptiles\", \"Hawksbill sea turtle\", \"Eretmochelys_imbricata\", \"Reptiles\", \"Olive ridley sea turtle\", \"Lepidochelys_olivacea\", \"Reptiles\", \"Saltwater crocodile\", \"Crocodylus_porosus\", \"Reptiles\", \"Humpback whale\", \"Megaptera_novaeangliae\", \"Mammals\", \"Common Minke whale\", \"Balaenoptera_acutorostrata\", \"Mammals\", \"Dugong\", \"Dugong_dugon\", \"Mammals\", \"Grey nurse shark\", \"Carcharias_taurus\", \"Sharks and rays\", \"Tiger shark\", \"Galeocerdo_cuvier\", \"Sharks and rays\", \"Great hammerhead shark\", \"Sphyrna_mokarran\", \"Sharks and rays\", \"Giant oceanic manta ray\", \"Mobula_birostris\", \"Sharks and rays\", \"Reef manta ray\", \"Mobula_alfredi\", \"Sharks and rays\", \"Whitetip reef shark\", \"Triaenodon_obesus\", \"Sharks and rays\", \"Red-footed booby\", \"Sula_sula\", \"Birds\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"convert-the-probabilities-to-binary-data","dir":"Articles","previous_headings":"Overview > Get the features","what":"Convert the probabilities to binary data","title":"A Basic Spatial Planning Workflow","text":"can now look feature data used spatial plan individually calling splnr_plot_binFeature(), example see binary habitat suitability map Green sea turtles: suitable habitat Green sea turtles predicted Aquamaps restricted cells close coast. now compare predicted suitable habitat Humpback whales, can see fairly ubiquitous across whole Coral Sea. example, reason classified species either representative suitable habitat wide-ranging within study region important restricted number cells. get better idea overall distribution used features, can also plot number features suitable habitat within Planning Unit study region.","code":"datEx_species_bin <- spDataFiltered %>% splnr_apply_cutoffs(Cutoffs = 0.5) (ggFeature1 <- splnr_plot( df = datEx_species_bin, colNames = \"Chelonia_mydas\", plotTitle = \"Chelonia mydas\", legendLabels = c(\"Absence\", \"Presence\") ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ) ) (ggFeature <- splnr_plot( datEx_species_bin, \"Megaptera_novaeangliae\", plotTitle = \"Megaptera novaeangliae\" ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) (ggFeatNo <- splnr_plot(df = datEx_species_bin, colNames = colnames(datEx_species_bin %>% sf::st_drop_geometry()), plotTitle = \"\", legendTitle = \"Number of features\") + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"prepare-data-for-prioritization","dir":"Articles","previous_headings":"Overview","what":"Prepare Data for prioritization","title":"A Basic Spatial Planning Workflow","text":"spatial prioritization also need extract names features pass prioritizr. also create sf object contains information needed prioritization.","code":"feature_names <- splnr_featureNames(datEx_species_bin) out_sf <- datEx_species_bin"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"add-cost","dir":"Articles","previous_headings":"Overview > Prepare Data for prioritization","what":"Add Cost","title":"A Basic Spatial Planning Workflow","text":"example, use minimum set objective function, aims minimize cost whilst meeting conservation targets. add area-based cost include little area possible spatial plan whilst meeting conservation targets. , planning units assigned equal cost 1.","code":"out_sf$Cost_None <- 1 (ggCost <- splnr_plot(out_sf, colNames = \"Cost_None\", legendTitle = \"Cost\", legendLabels = \"1\") + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"fishing-effort","dir":"Articles","previous_headings":"","what":"A Basic Spatial Planning Workflow","title":"A Basic Spatial Planning Workflow","text":"gfwr package allows us recover data fisheries across world, set parameter compress TRUE recover Apparent fishing hours per coordinates.","code":"gfw_data <- splnr_get_gfw(region = 'Australia', start_date = \"2022-01-01\", end_date = \"2022-12-31\", temp_res = \"yearly\", cCRS = cCRS, compress = TRUE) %>% sf::st_interpolate_aw(PUs, extensive = TRUE) out_sf$Apparent.Fishing.Hours <- 0 # Add column to PUs out_sf$Apparent.Fishing.Hours[as.numeric(rownames(PUs))] <- gfw_data$Apparent.Fishing.Hours # Put corresponding data in PUs (ggCost <- splnr_plot(out_sf, colNames = \"Apparent.Fishing.Hours\") + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"other-features-1","dir":"Articles","previous_headings":"","what":"A Basic Spatial Planning Workflow","title":"A Basic Spatial Planning Workflow","text":"Many features can taken account cost layers prioritization, provide different features oceandatrpackage.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"set-targets","dir":"Articles","previous_headings":"Overview","what":"Set Targets","title":"A Basic Spatial Planning Workflow","text":"shown previously, assigned conservation features class reflecting importance planning region. Conservation targets assigned target based class, case 30% suitable habitat important 10% representative features. Note: assigned classes targets based ecological information chosen visualization purposes.","code":"catTarg <- c(\"Reptiles\" = 0.3, \"Mammals\" = 0.1, \"Sharks and rays\" = 0.1, \"Birds\" = 0.1) target <- Dict %>% splnr_targets_byCategory(catTarg, catName = \"category\")"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"set-up-conservation-problem","dir":"Articles","previous_headings":"Overview","what":"Set up conservation problem","title":"A Basic Spatial Planning Workflow","text":"","code":"datEx_problem <- prioritizr::problem(out_sf, feature_names, \"Cost_None\") %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(target$target) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"solve-the-conservation-problem","dir":"Articles","previous_headings":"Overview","what":"Solve the conservation problem","title":"A Basic Spatial Planning Workflow","text":"","code":"datEx_soln <- datEx_problem %>% prioritizr::solve.ConservationProblem()"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"visualize-output","dir":"Articles","previous_headings":"Overview","what":"Visualize Output","title":"A Basic Spatial Planning Workflow","text":"different ways visualize output prioritization can loosely grouped three categories: + Visualization solution + Visualization targets + Visualization importance scores","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"visualization-of-the-solution","dir":"Articles","previous_headings":"Overview > Visualize Output","what":"Visualization of the solution","title":"A Basic Spatial Planning Workflow","text":"plot shows optimal solution planning region meets selected targets chosen features smallest area possible. categorical map displays, planning units selected important meeting conservation targets (dark blue) selected (light blue). can also done overlay cost show solution avoids highly costly areas: Note: example, cost equal planning units.","code":"(ggSoln <- splnr_plot(datEx_soln, colNames = \"solution_1\", legendTitle = \"Solution\", legendLabels = c(\"0\",\"1\")) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) (ggCostOverlay <- splnr_plot_costOverlay( soln = datEx_soln, cost = NA, costName = \"Cost_None\" ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"visualization-of-targets","dir":"Articles","previous_headings":"Overview > Visualize Output","what":"Visualization of targets","title":"A Basic Spatial Planning Workflow","text":"visualize well targets met, first need extract much suitable habitat feature selected spatial plan. also includes potential incidental coverage feature included spatial plan can still found planning region. circular bar plot, one additional step data preparation needs done.","code":"dfTarget <- splnr_get_featureRep(datEx_soln, datEx_problem, climsmart = FALSE, solnCol = \"solution_1\" ) (ggTarget <- splnr_plot_featureRep(dfTarget, category = Dict, renameFeatures = TRUE, namesToReplace = Dict, categoryFeatureCol = \"nameCommon\", nr = 1, showTarget = TRUE, )) dfTargetCirc <- dfTarget %>% dplyr::select(\"feature\", \"value\", \"group\") %>% na.omit() colors <- c( \"important\" = \"darkgreen\", \"representative\" = \"darkred\" ) legends <- c(\"Important\", \"Representative\") (ggCircTarg <- splnr_plot_circBplot(df = dfTargetCirc, legend_list = legends, legend_color = colors, impTarget = 30, repTarget = 10))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"visualization-of-importance-scores","dir":"Articles","previous_headings":"Overview > Visualize Output","what":"Visualization of importance scores","title":"A Basic Spatial Planning Workflow","text":"Importance scores can help assess relative importance individual selected Planning Unit spatial plan (information, see https://prioritizr.net/reference/importance.html) , use two different importance scores, Ferrier Score Rarity Weighted Richness. example, scores label similar -coastal- planning units important spatial plan.","code":"ggFerrier <- splnr_plot_importanceScore( soln = datEx_soln, pDat = datEx_problem, method = \"Ferrier\", decimals = 4, legendTitle = \"Importance Score \\n(Ferrier Score)\" ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ) #> Calculating Ferrier Score. ggRWR <- splnr_plot_importanceScore( soln = datEx_soln, pDat = datEx_problem, method = \"RWR\", decimals = 2, legendTitle = \"Importance Score \\n(Rarity Weighted Richness)\" ) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ) #> Calculating Rarity Weighted Richness. (ggScores <- patchwork::wrap_plots(ggFerrier + ggRWR))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"comparing-spatial-plans","dir":"Articles","previous_headings":"Overview","what":"Comparing Spatial Plans","title":"A Basic Spatial Planning Workflow","text":"Sometimes can useful direct comparison two spatial plans. show achieve package, first need second conservation problem resulting solution. , second spatial plan include already existing marine protected areas area (https://www.protectedplanet.net/en/thematic-areas/wdpa?tab=WDPA) following characteristics: * Status = c(“Designated”, “Established”, “Inscribed”) * Designation Type = c(“National”, “Regional”, “International”, “Applicable”) * IUCN Category = c(“Ia”, “Ib”, “II”, “III”, “IV”) also include targets based IUCN categories prioritise species IUCN status : Vulnerable Endangered Critically Endangered Extinct Wild Extinct assign 30% target species within categories. species fall categories receive inverse area target, species greater area suitable habitat assigned lower target. can also adjust targets based IUCN Category. apply increased target 0.3 species increased thread level IUCN Red List(“EX”, “EW”, “CR”, “EN”, “VU”). Note: Accessing IUCN database requires login token rl_use_iucn() needs added environment using Sys.setenv(IUCN_REDLIST_KEY = \"[Token]\"). can start running rredlist::rl_use_iucn().","code":"# The user can download their own MPAs using this code, # but below we use data already within the package. LockedIn <- splnr_get_MPAs(PUs, \"Australia\") %>% splnr_apply_cutoffs(0.5) %>% dplyr::mutate(wdpa = as.logical(wdpa)) (ggMPA <- splnr_plot(MPAsCoralSea, \"wdpa\") + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) minTarget <- 0.1 maxTarget <- 0.2 # Create inverse area target IA_Targets <- splnr_targets_byInverseArea( datEx_species_bin, minTarget, maxTarget ) IUCN_IA_Targets <- IA_Targets %>% splnr_get_IUCNRedList(species_col = \"Species\") %>% # Add RL data to the df splnr_targets_byIUCN(IUCN_target = 0.3)"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"set-up-second-conservation-problem","dir":"Articles","previous_headings":"Overview > Comparing Spatial Plans","what":"Set up second conservation problem","title":"A Basic Spatial Planning Workflow","text":"locked-areas already existing Marine Protected Areas (MPAs). want show overlap selected Planning Units current MPAs, can add splnr_gg_add() function. instead want see contours locked-areas can set typeLockIn = \"Contours\" splnr_gg_add().","code":"datEx_problem2 <- prioritizr::problem(out_sf, feature_names, \"Cost_None\") %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(IA_Targets$target) %>% prioritizr::add_locked_in_constraints(as.logical(MPAsCoralSea$wdpa)) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) # Add a solution object datEx_soln2 <- datEx_problem2 %>% prioritizr::solve.ConservationProblem() (ggSoln2 <- splnr_plot_solution(datEx_soln2) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) (splnr_plot_solution(datEx_soln2) + splnr_gg_add( PUs = PUs, Bndry = Bndry, lockIn = MPAsCoralSea, nameLockIn = \"wdpa\", typeLockIn = \"Full\", colorLockIn = \"lightgrey\", alphaLockIn = 0.2, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) (splnr_plot_solution(datEx_soln2) + splnr_gg_add( lockIn = MPAsCoralSea, nameLockIn = \"wdpa\", typeLockIn = \"Contours\", colorLockIn = \"lightgrey\", alphaLockIn = 0.2, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"visualize-comparison","dir":"Articles","previous_headings":"Overview > Comparing Spatial Plans","what":"Visualize comparison","title":"A Basic Spatial Planning Workflow","text":"plot shows first solution (without current MPAs) differs second solution (including current MPAs. categorical map displays, planning units selected solution 2 solution 1 (red), solution 1 solution 2 (blue), selected solutions (grey). correlation matrix shows similarity Cohen’s Kappa correlation solution 1 solution 2.","code":"(ggComp <- splnr_plot_comparison(datEx_soln, datEx_soln2) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme )) CorrMat <- splnr_get_kappaCorrData(list(datEx_soln, datEx_soln2), name_sol = c(\"soln1\", \"soln2\") ) (ggCorr <- splnr_plot_corrMat(CorrMat, AxisLabels = c(\"Solution 1\", \"Solution 2\") ))"},{"path":"https://mathmarecol.github.io/spatialplanr/articles/spatialplanr.html","id":"plotting-selection-frequency","dir":"Articles","previous_headings":"Overview > Comparing Spatial Plans","what":"Plotting selection frequency","title":"A Basic Spatial Planning Workflow","text":"Sometimes multiple spatial plans generated, interested many times Planning Unit selected across array solutions. demonstrate can done using package, first create array (= portfolio) solutions. One example using portfolio","code":"datEx_soln_portfolio <- datEx_problem %>% prioritizr::add_cuts_portfolio(5) %>% # create a portfolio of solutions prioritizr::solve.ConservationProblem() selFreq <- datEx_soln_portfolio %>% # calculate selection frequency sf::st_drop_geometry() %>% dplyr::mutate(selFreq = as.factor(rowSums( dplyr::select(., dplyr::starts_with(\"solution_\")) ))) %>% sf::st_as_sf(geometry = datEx_soln_portfolio$geometry) %>% dplyr::select(selFreq) (ggselFreq <- splnr_plot_selectionFreq(selFreq) + splnr_gg_add( PUs = PUs, Bndry = Bndry, overlay = landmass, cropOverlay = PUs, ggtheme = splnr_theme ))"},{"path":"https://mathmarecol.github.io/spatialplanr/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Jason D. Everett. Author, maintainer. Sandra Neubert. Author.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Everett J, Neubert S (2026). spatialplanr: Help files prioritzr Spatial Planning projects. R package version 0.7.0, https://github.com/SpatialPlanning/spatialplanr.","code":"@Manual{, title = {spatialplanr: Help files for prioritzr Spatial Planning projects}, author = {Jason D. Everett and Sandra Neubert}, year = {2026}, note = {R package version 0.7.0}, url = {https://github.com/SpatialPlanning/spatialplanr}, }"},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/index.html","id":"introduction-to-spatialplanr","dir":"","previous_headings":"","what":"Introduction to spatialplanr","title":"Help files for prioritzr Spatial Planning projects","text":"Welcome spatialplanr, R package designed streamline enhance spatial conservation prioritization efforts explicitly integrating climate change considerations. Building upon powerful prioritizr package, spatialplanr provides suite tools conservation planners develop robust protected area networks.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Help files for prioritzr Spatial Planning projects","text":"aware package early stages development. Functions documentation complete installing moment risk. still interested, can install development version GitHub :","code":"# install.packages(\"devtools\") devtools::install_github(\"https://github.com/SpatialPlanning/spatialplanr\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/CoralSeaVelocity.html","id":null,"dir":"Reference","previous_headings":"","what":"Example climate velocity for the example region of the coral sea — CoralSeaVelocity","title":"Example climate velocity for the example region of the coral sea — CoralSeaVelocity","text":"tsf file containing climate velocity (SSP5-8.5) coral sea","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/CoralSeaVelocity.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Example climate velocity for the example region of the coral sea — CoralSeaVelocity","text":"","code":"CoralSeaVelocity"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/CoralSeaVelocity.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Example climate velocity for the example region of the coral sea — CoralSeaVelocity","text":"CoralSeaVelocity data frame 397 rows 3 columns: vocMagg_transformed Climate velocity column geometry Geometry column sf object","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/CoralSeaVelocity.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Example climate velocity for the example region of the coral sea — CoralSeaVelocity","text":"https://www.iucnredlist.org/","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/IUCN_IA_Targets.html","id":null,"dir":"Reference","previous_headings":"","what":"IUCN and Inverse Area based Targets for Aquamaps example species — IUCN_IA_Targets","title":"IUCN and Inverse Area based Targets for Aquamaps example species — IUCN_IA_Targets","text":"tbl_df file containing IUCN IA targets selected species coral sea","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/IUCN_IA_Targets.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"IUCN and Inverse Area based Targets for Aquamaps example species — IUCN_IA_Targets","text":"","code":"IUCN_IA_Targets"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/IUCN_IA_Targets.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"IUCN and Inverse Area based Targets for Aquamaps example species — IUCN_IA_Targets","text":"IUCN_IA_Targets data frame 15 rows 4 columns: Species Species names found IUCN database Area km2 total suitable habitat species Target Individual species-specific target IUCN_Category IUCN category species","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/IUCN_IA_Targets.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"IUCN and Inverse Area based Targets for Aquamaps example species — IUCN_IA_Targets","text":"https://www.iucnredlist.org/","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/MPAsCoralSea.html","id":null,"dir":"Reference","previous_headings":"","what":"Current Marine Protected Areas (MPAs) of the Coral Sea — MPAsCoralSea","title":"Current Marine Protected Areas (MPAs) of the Coral Sea — MPAsCoralSea","text":"sf file containing current Marine Protected Areas (MPAs) coral sea","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/MPAsCoralSea.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Current Marine Protected Areas (MPAs) of the Coral Sea — MPAsCoralSea","text":"","code":"MPAsCoralSea"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/MPAsCoralSea.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Current Marine Protected Areas (MPAs) of the Coral Sea — MPAsCoralSea","text":"MPAsCoralSea data frame 397 rows 17 columns: wdpa binary vector denoting presence absence current MPA","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/MPAsCoralSea.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Current Marine Protected Areas (MPAs) of the Coral Sea — MPAsCoralSea","text":"https://www.protectedplanet.net/en/thematic-areas/wdpa?tab=WDPA","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_PUs.html","id":null,"dir":"Reference","previous_headings":"","what":"Planning Units — dat_PUs","title":"Planning Units — dat_PUs","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_PUs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Planning Units — dat_PUs","text":"","code":"dat_PUs"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_PUs.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Planning Units — dat_PUs","text":"dat_PUs data frame XXXX rows XXX columns: geometry sf geometry column","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_PUs.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Planning Units — dat_PUs","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bathy.html","id":null,"dir":"Reference","previous_headings":"","what":"Bathymetry Data — dat_bathy","title":"Bathymetry Data — dat_bathy","text":"Bathymetry data downloaded via oceandatr package","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bathy.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Bathymetry Data — dat_bathy","text":"","code":"dat_bathy"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bathy.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Bathymetry Data — dat_bathy","text":"dat_bathy data frame bathymetry data bathymetry Bathymetry data geometry sf geometry column","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bathy.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Bathymetry Data — dat_bathy","text":"\"oceandatr package\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bndry.html","id":null,"dir":"Reference","previous_headings":"","what":"Boundary of Planning Units — dat_bndry","title":"Boundary of Planning Units — dat_bndry","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bndry.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Boundary of Planning Units — dat_bndry","text":"","code":"dat_bndry"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bndry.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Boundary of Planning Units — dat_bndry","text":"dat_bndry data frame XXXX rows XXX columns: geometry sf geometry column","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_bndry.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Boundary of Planning Units — dat_bndry","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category.html","id":null,"dir":"Reference","previous_headings":"","what":"Category vector — dat_category","title":"Category vector — dat_category","text":"tibble containing specific grouping features","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Category vector — dat_category","text":"","code":"dat_category"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Category vector — dat_category","text":"dat_category data frame XXXX rows XXX columns: feature features available spatial prioritization category categories features","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Category vector — dat_category","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category2.html","id":null,"dir":"Reference","previous_headings":"","what":"Category vector — dat_category2","title":"Category vector — dat_category2","text":"tibble containing specific grouping features","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Category vector — dat_category2","text":"","code":"dat_category2"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category2.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Category vector — dat_category2","text":"dat_category2 data frame XXXX rows XXX columns: feature features available spatial prioritization category categories features","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_category2.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Category vector — dat_category2","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_clim.html","id":null,"dir":"Reference","previous_headings":"","what":"Climate metric data — dat_clim","title":"Climate metric data — dat_clim","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_clim.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Climate metric data — dat_clim","text":"","code":"dat_clim"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_clim.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Climate metric data — dat_clim","text":"dat_clim data frame 780 rows 3 columns: geometry sf geometry column metric climate metric information","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_clim.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Climate metric data — dat_clim","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_mpas.html","id":null,"dir":"Reference","previous_headings":"","what":"Marine Protected Areas (MPAs) Data — dat_mpas","title":"Marine Protected Areas (MPAs) Data — dat_mpas","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_mpas.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Marine Protected Areas (MPAs) Data — dat_mpas","text":"","code":"dat_mpas"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_mpas.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Marine Protected Areas (MPAs) Data — dat_mpas","text":"dat_mpas data frame XXXX rows XXX columns: geometry sf geometry column wdpa binary MPA information (1: MPA)","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_mpas.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Marine Protected Areas (MPAs) Data — dat_mpas","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_region.html","id":null,"dir":"Reference","previous_headings":"","what":"Regionalisation — dat_region","title":"Regionalisation — dat_region","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_region.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Regionalisation — dat_region","text":"","code":"dat_region"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_region.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Regionalisation — dat_region","text":"dat_region data frame XXXX rows XXX columns: geometry sf geometry column","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_region.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Regionalisation — dat_region","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin.html","id":null,"dir":"Reference","previous_headings":"","what":"Binary Species Data — dat_species_bin","title":"Binary Species Data — dat_species_bin","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Binary Species Data — dat_species_bin","text":"","code":"dat_species_bin"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Binary Species Data — dat_species_bin","text":"dat_species_bin data frame XXXX rows XXX columns: geometry sf geometry column","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Binary Species Data — dat_species_bin","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin2.html","id":null,"dir":"Reference","previous_headings":"","what":"Binary Species Data 2 — dat_species_bin2","title":"Binary Species Data 2 — dat_species_bin2","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Binary Species Data 2 — dat_species_bin2","text":"","code":"dat_species_bin2"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin2.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Binary Species Data 2 — dat_species_bin2","text":"dat_species_bin2 data frame XXXX rows XXX columns: geometry sf geometry column","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_bin2.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Binary Species Data 2 — dat_species_bin2","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_prob.html","id":null,"dir":"Reference","previous_headings":"","what":"Probability Species Data — dat_species_prob","title":"Probability Species Data — dat_species_prob","text":"sf dataframe Planning Units spatial prioritization","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_prob.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Probability Species Data — dat_species_prob","text":"","code":"dat_species_prob"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_prob.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Probability Species Data — dat_species_prob","text":"dat_species_prob data frame XXXX rows XXX columns: geometry sf geometry column","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/dat_species_prob.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Probability Species Data — dat_species_prob","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/pipe.html","id":null,"dir":"Reference","previous_headings":"","what":"Pipe operator — %>%","title":"Pipe operator — %>%","text":"See magrittr::%>% details.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/pipe.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Pipe operator — %>%","text":"","code":"lhs %>% rhs"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/spDataFiltered.html","id":null,"dir":"Reference","previous_headings":"","what":"Example data — spDataFiltered","title":"Example data — spDataFiltered","text":"Example data","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/spDataFiltered.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Example data — spDataFiltered","text":"","code":"spDataFiltered"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/spDataFiltered.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Example data — spDataFiltered","text":"spDataFiltered data frame sample species data Species Species names","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/spDataFiltered.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Example data — spDataFiltered","text":"\"Made data\"","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/spatialplanr-package.html","id":null,"dir":"Reference","previous_headings":"","what":"spatialplanr: Help files for prioritzr Spatial Planning projects — spatialplanr-package","title":"spatialplanr: Help files for prioritzr Spatial Planning projects — spatialplanr-package","text":"package provides range tools setting , running plotting spatial plan using prioritizr. intended use Mathematical Marine Ecology Lab UQ, sets projects using approach data sets.","code":""},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/reference/spatialplanr-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"spatialplanr: Help files for prioritzr Spatial Planning projects — spatialplanr-package","text":"Maintainer: Jason D. Everett JaseEverett@gmail.com (ORCID) Authors: Sandra Neubert sandra.neubert97@gmail.com (ORCID)","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_apply_cutoffs.html","id":null,"dir":"Reference","previous_headings":"","what":"Apply Cutoffs to Feature Data — splnr_apply_cutoffs","title":"Apply Cutoffs to Feature Data — splnr_apply_cutoffs","text":"splnr_apply_cutoffs() transforms numeric feature data sf dataframe binary (0 1) presence/absence values based specified cutoffs. provides flexibility either keep values cutoff 1 (default) invert logic keep values cutoff 1.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_apply_cutoffs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Apply Cutoffs to Feature Data — splnr_apply_cutoffs","text":"","code":"splnr_apply_cutoffs(features, Cutoffs, inverse = FALSE)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_apply_cutoffs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Apply Cutoffs to Feature Data — splnr_apply_cutoffs","text":"features sf dataframe. must contain geometry column least one numeric column cutoffs applied. Cutoffs numeric value named numeric vector cutoffs. single unnamed numeric value, applied numeric columns. named numeric vector, names must correspond numeric column names features. cutoff values must 0 1. inverse logical value (TRUE FALSE). TRUE, values Cutoffs converted 1 (others 0). FALSE (default), values Cutoffs converted 1.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_apply_cutoffs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Apply Cutoffs to Feature Data — splnr_apply_cutoffs","text":"modified sf dataframe structure geometry features, targeted numeric columns transformed binary (0 1) values based specified cutoffs inverse setting.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_apply_cutoffs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Apply Cutoffs to Feature Data — splnr_apply_cutoffs","text":"function crucial standardizing feature data, species probability distributions habitat suitability scores, binary format often required conservation planning spatial analysis (e.g., prioritizr). function operates two primary modes based Cutoffs parameter: Single Cutoff: Cutoffs single numeric value (e.g., 0.5), value applied uniformly numeric columns features dataframe, excluding geometry column. numeric cell: - value >= Cutoffs, becomes 1. - value < Cutoffs, becomes 0. - NA values always converted 0. Named Vector Cutoffs: Cutoffs named numeric vector (e.g., c(\"feature1\" = 0.5, \"feature2\" = 0.3)), specified cutoff applied individually corresponding named column features. allows different thresholds different features. transformation rules apply specified column. inverse parameter provides additional control binarization: inverse = FALSE (default): Values cutoff become 1. inverse = TRUE: Values cutoff become 1. initial binarization (values >= cutoff 1), binary results flipped (0s become 1s, 1s become 0s) achieve inverse effect. NA values numeric columns consistently converted 0 binarization process, regardless inverse setting.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_apply_cutoffs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Apply Cutoffs to Feature Data — splnr_apply_cutoffs","text":"","code":"# Example 1: Single cutoff (0.5) applied to all numeric feature columns # (Spp1_Prob, Spp2_Prob, and Cost will be binarized based on 0.5) df_single_cutoff <- splnr_apply_cutoffs(dat_species_prob, Cutoffs = 0.5) #> Applying single cutoff of 0.5 to all numeric feature columns. print(df_single_cutoff) #> Simple feature collection with 780 features and 5 fields #> Geometry type: POLYGON #> Dimension: XY #> Bounding box: xmin: 100 ymin: -50 xmax: 160 ymax: 2 #> Geodetic CRS: WGS 84 #> # A tibble: 780 × 6 #> geometry Spp1 Spp2 Spp3 Spp4 Spp5 #> #> 1 ((100 -50, 102 -50, 102 -48, 100 -48, 100 -50)) 1 0 0 0 0 #> 2 ((102 -50, 104 -50, 104 -48, 102 -48, 102 -50)) 1 0 1 1 0 #> 3 ((104 -50, 106 -50, 106 -48, 104 -48, 104 -50)) 0 1 0 1 1 #> 4 ((106 -50, 108 -50, 108 -48, 106 -48, 106 -50)) 1 1 1 1 1 #> 5 ((108 -50, 110 -50, 110 -48, 108 -48, 108 -50)) 0 1 0 1 1 #> 6 ((110 -50, 112 -50, 112 -48, 110 -48, 110 -50)) 1 0 1 0 0 #> 7 ((112 -50, 114 -50, 114 -48, 112 -48, 112 -50)) 0 1 0 0 0 #> 8 ((114 -50, 116 -50, 116 -48, 114 -48, 114 -50)) 0 0 0 0 1 #> 9 ((116 -50, 118 -50, 118 -48, 116 -48, 116 -50)) 0 1 1 0 1 #> 10 ((118 -50, 120 -50, 120 -48, 118 -48, 118 -50)) 1 0 1 0 1 #> # ℹ 770 more rows # Example 2: Named cutoffs for specific columns # Spp1_Prob >= 0.6 becomes 1, Spp2_Prob >= 0.4 becomes 1 df_named_cutoffs <- splnr_apply_cutoffs( dat_species_prob, Cutoffs = c(\"Spp1\" = 0.6, \"Spp2\" = 0.4) ) #> Applying named cutoffs to specific feature columns. #> Applying cutoff 0.6 to column 'Spp1'. #> Applying cutoff 0.4 to column 'Spp2'. print(df_named_cutoffs) #> Simple feature collection with 780 features and 5 fields #> Geometry type: POLYGON #> Dimension: XY #> Bounding box: xmin: 100 ymin: -50 xmax: 160 ymax: 2 #> Geodetic CRS: WGS 84 #> # A tibble: 780 × 6 #> geometry Spp1 Spp2 Spp3 Spp4 Spp5 #> #> 1 ((100 -50, 102 -50, 102 -48, 100 -48, 100… 1 0 0.0969 0.435 0.0418 #> 2 ((102 -50, 104 -50, 104 -48, 102 -48, 102… 0 1 0.504 0.503 0.360 #> 3 ((104 -50, 106 -50, 106 -48, 104 -48, 104… 0 1 0.285 0.755 0.653 #> 4 ((106 -50, 108 -50, 108 -48, 106 -48, 106… 0 1 0.564 0.503 0.529 #> 5 ((108 -50, 110 -50, 110 -48, 108 -48, 108… 0 1 0.150 0.863 0.753 #> 6 ((110 -50, 112 -50, 112 -48, 110 -48, 110… 1 1 0.807 0.458 0.374 #> 7 ((112 -50, 114 -50, 114 -48, 112 -48, 112… 0 1 0.00963 0.102 0.114 #> 8 ((114 -50, 116 -50, 116 -48, 114 -48, 114… 0 0 0.481 0.231 0.764 #> 9 ((116 -50, 118 -50, 118 -48, 116 -48, 116… 0 1 0.552 0.00978 0.552 #> 10 ((118 -50, 120 -50, 120 -48, 118 -48, 118… 1 1 0.695 0.00687 0.815 #> # ℹ 770 more rows # Example 3: Single cutoff (0.5) with inverse logic # Values BELOW 0.5 become 1. df_inverse_cutoff <- splnr_apply_cutoffs(dat_species_prob, Cutoffs = 0.5, inverse = TRUE) #> Applying single cutoff of 0.5 to all numeric feature columns. #> Inverse logic applied: values below cutoff will be 1. print(df_inverse_cutoff) #> Simple feature collection with 780 features and 5 fields #> Geometry type: POLYGON #> Dimension: XY #> Bounding box: xmin: 100 ymin: -50 xmax: 160 ymax: 2 #> Geodetic CRS: WGS 84 #> # A tibble: 780 × 6 #> geometry Spp1 Spp2 Spp3 Spp4 Spp5 #> #> 1 ((100 -50, 102 -50, 102 -48, 100 -48, 100 -50)) 0 1 1 1 1 #> 2 ((102 -50, 104 -50, 104 -48, 102 -48, 102 -50)) 0 1 0 0 1 #> 3 ((104 -50, 106 -50, 106 -48, 104 -48, 104 -50)) 1 0 1 0 0 #> 4 ((106 -50, 108 -50, 108 -48, 106 -48, 106 -50)) 0 0 0 0 0 #> 5 ((108 -50, 110 -50, 110 -48, 108 -48, 108 -50)) 1 0 1 0 0 #> 6 ((110 -50, 112 -50, 112 -48, 110 -48, 110 -50)) 0 1 0 1 1 #> 7 ((112 -50, 114 -50, 114 -48, 112 -48, 112 -50)) 1 0 1 1 1 #> 8 ((114 -50, 116 -50, 116 -48, 114 -48, 114 -50)) 1 1 1 1 0 #> 9 ((116 -50, 118 -50, 118 -48, 116 -48, 116 -50)) 1 0 0 1 0 #> 10 ((118 -50, 120 -50, 120 -48, 118 -48, 118 -50)) 0 1 0 1 0 #> # ℹ 770 more rows # Example 4: Named cutoffs with inverse logic df_named_inverse <- splnr_apply_cutoffs( dat_species_prob, Cutoffs = c(\"Spp1\" = 0.7, \"Spp2\" = 0.3), inverse = TRUE ) #> Applying named cutoffs to specific feature columns. #> Applying cutoff 0.7 to column 'Spp1'. #> Inverse logic applied for column 'Spp1': values below cutoff will be 1. #> Applying cutoff 0.3 to column 'Spp2'. #> Inverse logic applied for column 'Spp2': values below cutoff will be 1. print(df_named_inverse) #> Simple feature collection with 780 features and 5 fields #> Geometry type: POLYGON #> Dimension: XY #> Bounding box: xmin: 100 ymin: -50 xmax: 160 ymax: 2 #> Geodetic CRS: WGS 84 #> # A tibble: 780 × 6 #> geometry Spp1 Spp2 Spp3 Spp4 Spp5 #> #> 1 ((100 -50, 102 -50, 102 -48, 100 -48, 100… 1 1 0.0969 0.435 0.0418 #> 2 ((102 -50, 104 -50, 104 -48, 102 -48, 102… 1 0 0.504 0.503 0.360 #> 3 ((104 -50, 106 -50, 106 -48, 104 -48, 104… 1 0 0.285 0.755 0.653 #> 4 ((106 -50, 108 -50, 108 -48, 106 -48, 106… 1 0 0.564 0.503 0.529 #> 5 ((108 -50, 110 -50, 110 -48, 108 -48, 108… 1 0 0.150 0.863 0.753 #> 6 ((110 -50, 112 -50, 112 -48, 110 -48, 110… 0 0 0.807 0.458 0.374 #> 7 ((112 -50, 114 -50, 114 -48, 112 -48, 112… 1 0 0.00963 0.102 0.114 #> 8 ((114 -50, 116 -50, 116 -48, 114 -48, 114… 1 1 0.481 0.231 0.764 #> 9 ((116 -50, 118 -50, 118 -48, 116 -48, 116… 1 0 0.552 0.00978 0.552 #> 10 ((118 -50, 120 -50, 120 -48, 118 -48, 118… 1 0 0.695 0.00687 0.815 #> # ℹ 770 more rows"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_arrangeFeatures.html","id":null,"dir":"Reference","previous_headings":"","what":"Arrange Features by Spatial Coordinates — splnr_arrangeFeatures","title":"Arrange Features by Spatial Coordinates — splnr_arrangeFeatures","text":"splnr_arrangeFeatures() sorts rows sf object based longitude (X) latitude (Y) centroids. ensures consistent ordering planning units, can important reproducibility spatial analyses data processing steps.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_arrangeFeatures.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Arrange Features by Spatial Coordinates — splnr_arrangeFeatures","text":"","code":"splnr_arrangeFeatures(df)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_arrangeFeatures.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Arrange Features by Spatial Coordinates — splnr_arrangeFeatures","text":"df sf object whose rows sorted.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_arrangeFeatures.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Arrange Features by Spatial Coordinates — splnr_arrangeFeatures","text":"sorted sf object, rows ordered primarily longitude (X) secondarily latitude (Y) centroids.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_arrangeFeatures.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Arrange Features by Spatial Coordinates — splnr_arrangeFeatures","text":"function computes centroid polygon (point/multipoint) input sf object. extracts X Y coordinates centroids uses sort entire sf object. primary sort key longitude (X-coordinate), secondary sort key latitude (Y-coordinate). Sorting can beneficial tasks like debugging, comparing data different runs, ensuring deterministic behavior algorithms process spatial units sequentially.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_arrangeFeatures.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Arrange Features by Spatial Coordinates — splnr_arrangeFeatures","text":"","code":"if (FALSE) { # \\dontrun{ print(\"Original order:\") print(dat_species_prob) # Sort the features. df_arranged <- splnr_arrangeFeatures(df = dat_species_prob) print(\"Sorted order:\") print(df_arranged) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_featureApproach.html","id":null,"dir":"Reference","previous_headings":"","what":"Run the Feature Climate-Smart Approach — splnr_climate_featureApproach","title":"Run the Feature Climate-Smart Approach — splnr_climate_featureApproach","text":"splnr_climate_featureApproach() implements Feature Approach climate-smart conservation planning. involves defining global \"climate-smart\" layer adjusting conservation targets ensure specified proportion layer captured solution.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_featureApproach.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Run the Feature Climate-Smart Approach — splnr_climate_featureApproach","text":"","code":"splnr_climate_featureApproach( features, metric, targets, direction, percentile = 35, refugiaTarget = 0.3 )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_featureApproach.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Run the Feature Climate-Smart Approach — splnr_climate_featureApproach","text":"features sf object representing conservation features (e.g., species distribution data). metric sf object containing climate metric information. must column named 'metric' climate metric values per Planning Unit. targets data.frame two columns: feature (character, listing original feature names) target (numeric, initial conservation target feature proportion, e.g., 0.3). direction integer specifying direction climate-smartness: 1: Higher metric values mean climate-smart areas. -1: Lower metric values mean climate-smart areas. percentile numeric value (0-100) representing cutoff threshold determining whether area climate priority area . applied globally metric data. Defaults 35. refugiaTarget numeric value (0-1) representing target proportion assigned overall climate-smart layer. Defaults 0.3 (30%).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_featureApproach.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Run the Feature Climate-Smart Approach — splnr_climate_featureApproach","text":"list two components: Features: sf object containing binary information per Planning Unit original feature, plus new climate_layer feature. ready passed prioritizr. Targets: data.frame adjusted targets features, including climate_layer. also ready prioritizr.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_featureApproach.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Run the Feature Climate-Smart Approach — splnr_climate_featureApproach","text":"function orchestrates steps Feature Approach: Preprocessing: calls splnr_climate_feature_preprocess() identify region-wide climate-smart layer based percentile cutoff climate metric. layer added new binary feature conservation data. Target Assignment: calls splnr_climate_feature_assignTargets() calculate assign new targets. Crucially, specific refugiaTarget set newly created climate_layer feature, ensuring certain proportion climate-resilient areas included final conservation plan. output list containing modified features (now including climate_layer) corresponding adjusted targets, ready used prioritizr conservation problem.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_featureApproach.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Run the Feature Climate-Smart Approach — splnr_climate_featureApproach","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' and 'dat_clim' are existing sf objects # in your package. # Define initial targets for species features. initial_targets <- dat_species_bin %>% sf::st_drop_geometry() %>% colnames() %>% data.frame() %>% setNames(c(\"feature\")) %>% dplyr::mutate(target = 0.3) # Run the Feature Approach where higher climate metric values mean # more climate-smart areas. Feature_Approach_result <- splnr_climate_featureApproach( features = dat_species_bin, metric = dat_clim, targets = initial_targets, direction = 1, # Example: higher metric values are more climate-smart percentile = 35, refugiaTarget = 0.3 ) # Access the processed features and targets: out_sf_feature <- Feature_Approach_result$Features targets_feature <- Feature_Approach_result$Targets print(head(out_sf_feature)) print(head(targets_feature)) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_percentileApproach.html","id":null,"dir":"Reference","previous_headings":"","what":"Run the Percentile Climate-Smart Approach — splnr_climate_percentileApproach","title":"Run the Percentile Climate-Smart Approach — splnr_climate_percentileApproach","text":"splnr_climate_percentileApproach() implements Percentile Approach climate-smart conservation planning. involves filtering features climate-resilient areas adjusting conservation targets account reduced feature distribution.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_percentileApproach.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Run the Percentile Climate-Smart Approach — splnr_climate_percentileApproach","text":"","code":"splnr_climate_percentileApproach( features, metric, targets, direction, percentile = 35 )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_percentileApproach.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Run the Percentile Climate-Smart Approach — splnr_climate_percentileApproach","text":"features sf object representing conservation features (e.g., species distribution data). metric sf object containing climate metric information. must column named 'metric' climate metric values per Planning Unit. targets data.frame two columns: feature (character, listing original feature names) target (numeric, initial conservation target feature proportion, e.g., 0.3). direction integer specifying direction climate-smartness: 1: Higher metric values mean climate-smart areas. -1: Lower metric values mean climate-smart areas. percentile numeric value (0-100) representing cutoff threshold determining whether area climate priority area . applied per feature distribution. Defaults 35.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_percentileApproach.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Run the Percentile Climate-Smart Approach — splnr_climate_percentileApproach","text":"list two components: Features: sf object containing binary information per Planning Unit feature, now filtered include climate-smart occurrences. ready passed prioritizr. Targets: data.frame adjusted targets filtered features. also ready prioritizr.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_percentileApproach.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Run the Percentile Climate-Smart Approach — splnr_climate_percentileApproach","text":"function orchestrates steps Percentile Approach: Preprocessing: calls splnr_climate_percentile_preprocess() identify, feature, occurrences within climate-resilient percentile distribution based climate metric. effectively \"filters\" feature data include climate-smart components. Target Assignment: calls splnr_climate_percentile_assignTargets() calculate assign new targets filtered features. targets scaled ensure original conservation goals still met, specifically selecting areas climate-smart portions features' distributions. output list containing modified features (filtered climate-smart occurrences) corresponding adjusted targets, ready used prioritizr conservation problem.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_percentileApproach.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Run the Percentile Climate-Smart Approach — splnr_climate_percentileApproach","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' and 'dat_clim' are existing sf objects # in your package. # Define initial targets for species features. initial_targets <- dat_species_bin %>% sf::st_drop_geometry() %>% colnames() %>% data.frame() %>% setNames(c(\"feature\")) %>% dplyr::mutate(target = 0.3) # Run the Percentile Approach where higher climate metric values mean # more climate-smart areas. Percentile_Approach_result <- splnr_climate_percentileApproach( features = dat_species_bin, metric = dat_clim, targets = initial_targets, direction = 1, # Example: higher metric values are more climate-smart percentile = 35 ) # Access the processed features and targets: out_sf_percentile <- Percentile_Approach_result$Features targets_percentile <- Percentile_Approach_result$Targets print(head(out_sf_percentile)) print(head(targets_percentile)) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_priorityAreaApproach.html","id":null,"dir":"Reference","previous_headings":"","what":"Run the Climate Priority Area (CPA) Approach — splnr_climate_priorityAreaApproach","title":"Run the Climate Priority Area (CPA) Approach — splnr_climate_priorityAreaApproach","text":"splnr_climate_priorityAreaApproach() implements Climate Priority Area approach splitting conservation features climate-smart (CS) non-climate-smart (NCS) components adjusting targets accordingly. allows conservation planning prioritize areas higher climate resilience.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_priorityAreaApproach.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Run the Climate Priority Area (CPA) Approach — splnr_climate_priorityAreaApproach","text":"","code":"splnr_climate_priorityAreaApproach( features, metric, targets, direction, percentile = 5, refugiaTarget = 1 )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_priorityAreaApproach.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Run the Climate Priority Area (CPA) Approach — splnr_climate_priorityAreaApproach","text":"features sf object representing conservation features (e.g., species distribution data). column (excluding geometry) typically binary representation feature's presence (1) absence (0) Planning Unit. metric sf object containing climate metric information. must column named 'metric' climate metric values per Planning Unit. targets data.frame two columns: feature (character, listing original feature names) target (numeric, initial conservation target feature proportion, e.g., 0.3). direction integer specifying direction climate-smartness: 1: Higher metric values mean climate-smart areas. -1: Lower metric values mean climate-smart areas. percentile numeric value (0-100) representing cutoff threshold determining climate-smart areas. example, percentile = 5 means climate-smart 5% areas (based direction) considered. value represents lower limit threshold. Defaults 5. refugiaTarget numeric value (0-1) representing target proportion assigned specifically climate-smart areas (refugia). Defaults 1 (100%).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_priorityAreaApproach.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Run the Climate Priority Area (CPA) Approach — splnr_climate_priorityAreaApproach","text":"list two components: Features: sf object containing binary information per Planning Unit feature, now split _CS (climate-smart) _NCS (non-climate-smart) components. ready passed prioritizr creating conservation problem. Targets: data.frame adjusted targets climate-split features. also ready prioritizr.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_priorityAreaApproach.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Run the Climate Priority Area (CPA) Approach — splnr_climate_priorityAreaApproach","text":"function orchestrates steps required CPA approach: Preprocessing: calls splnr_climate_priorityArea_preprocess() categorize feature's occurrences CS NCS areas based climate metric specified percentile cutoff. Target Assignment: calls splnr_climate_priorityArea_assignTargets() calculate assign new targets CS NCS feature components. ensures conservation goals reflect desired emphasis climate-smart areas (e.g., aiming 100% representation features highly resilient areas). output function list containing modified features (now split CS/NCS components) corresponding adjusted targets, ready used prioritizr conservation problem.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_climate_priorityAreaApproach.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Run the Climate Priority Area (CPA) Approach — splnr_climate_priorityAreaApproach","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' and 'dat_clim' are existing sf objects # in your package. # Define initial targets for species features. initial_targets <- dat_species_bin %>% sf::st_drop_geometry() %>% colnames() %>% data.frame() %>% setNames(c(\"feature\")) %>% dplyr::mutate(target = 0.3) # Run the Climate Priority Area Approach where lower climate metric # values mean more climate-smart areas. CPA_Approach_result <- splnr_climate_priorityAreaApproach( features = dat_species_bin, metric = dat_clim, targets = initial_targets, direction = -1, # Example: lower metric values are more climate-smart percentile = 5, refugiaTarget = 1 ) # Access the processed features and targets: out_sf_cpa <- CPA_Approach_result$Features targets_cpa <- CPA_Approach_result$Targets print(head(out_sf_cpa)) print(head(targets_cpa)) } # }"},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_regionalisation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to interpolate regionalisation data onto Planning Units — splnr_convert_regionalisation","text":"","code":"splnr_convert_regionalisation(dat, PUs, cat_name = NA, col_name = NA)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_regionalisation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to interpolate regionalisation data onto Planning Units — splnr_convert_regionalisation","text":"dat Dataset raster sf format. PUs sf object Planning Units cat_name character string categories regionalisation col_name name layer","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_regionalisation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to interpolate regionalisation data onto Planning Units — splnr_convert_regionalisation","text":"sf object containing Planning Units feature.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_regionalisation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Function to interpolate regionalisation data onto Planning Units — splnr_convert_regionalisation","text":"wrapper splnr_Convert2PUs() deals need processes layer seperately dataset needs raster vector format. input contains continuous data, output area-averaged mean planning unit. input binary, output proportion planning unit covered.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_regionalisation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to interpolate regionalisation data onto Planning Units — splnr_convert_regionalisation","text":"","code":"if (FALSE) { # \\dontrun{ df <- splnr_convert_regionalisation(dat, PUs) } # }"},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_toPUs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to interpolate data onto Planning Units — splnr_convert_toPUs","text":"","code":"splnr_convert_toPUs(dat, PlanUnits)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_toPUs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to interpolate data onto Planning Units — splnr_convert_toPUs","text":"dat Dataset filename dataset PlanUnits sf object Planning Units","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_toPUs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to interpolate data onto Planning Units — splnr_convert_toPUs","text":"sf object containing Planning Units feature.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_toPUs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Function to interpolate data onto Planning Units — splnr_convert_toPUs","text":"dataset needs raster vector format. input contains continuous data, output area-averaged mean planning unit. input binary, output proportion planning unit covered.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_convert_toPUs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to interpolate data onto Planning Units — splnr_convert_toPUs","text":"","code":"if (FALSE) { # \\dontrun{ df <- splnr_convert_toPUs(dat, PlanUnits) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_create_polygon.html","id":null,"dir":"Reference","previous_headings":"","what":"Create Spatial Polygon from Coordinates — splnr_create_polygon","title":"Create Spatial Polygon from Coordinates — splnr_create_polygon","text":"splnr_create_polygon() constructs sf polygon object series longitude latitude coordinates provided tibble.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_create_polygon.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create Spatial Polygon from Coordinates — splnr_create_polygon","text":"","code":"splnr_create_polygon(x, cCRS = \"EPSG:4326\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_create_polygon.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create Spatial Polygon from Coordinates — splnr_create_polygon","text":"x tibble (tbl_df) object least two columns, typically named x (longitude) y (latitude), representing vertices polygon sequence. first last coordinate pair form closed polygon. cCRS character string specifying target CRS output polygon EPSG code format (e.g., \"EPSG:4326\"). Defaults \"EPSG:4326\" (WGS 84).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_create_polygon.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create Spatial Polygon from Coordinates — splnr_create_polygon","text":"sf object representing created polygon, specified CRS.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_create_polygon.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create Spatial Polygon from Coordinates — splnr_create_polygon","text":"utility function simplifies creation spatial polygons tabular format coordinates. takes tibble columns 'x' 'y' represent longitude latitude, respectively. coordinates converted matrix, sf polygon, finally sf object specified Coordinate Reference System (CRS). function assumes input coordinates (x) initially WGS 84 (EPSG:4326) transforms cCRS different CRS specified.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_create_polygon.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create Spatial Polygon from Coordinates — splnr_create_polygon","text":"","code":"# Example: Create a simple square polygon square_coords <- dplyr::tibble( x = c(-50, 50, 50, -50, -50), y = c(120, 120, 180, 180, 120) ) simple_polygon <- splnr_create_polygon(x = square_coords) print(simple_polygon) #> Simple feature collection with 1 feature and 0 fields #> Geometry type: POLYGON #> Dimension: XY #> Bounding box: xmin: -50 ymin: 120 xmax: 50 ymax: 180 #> Geodetic CRS: WGS 84 #> geometry #> 1 POLYGON ((-50 120, 50 120, ... # Example: Create a polygon and transform to a different CRS (e.g., a UTM zone) if (FALSE) { # \\dontrun{ # Note: EPSG:32611 is UTM Zone 11N. Ensure it's appropriate for your coordinates. transformed_polygon <- splnr_create_polygon(x = square_coords, cCRS = \"EPSG:32611\") print(transformed_polygon) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_featureNames.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract Feature Names from Spatial Data — splnr_featureNames","title":"Extract Feature Names from Spatial Data — splnr_featureNames","text":"splnr_featureNames() extracts names conservation features sf dataframe, excluding geometry specified columns.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_featureNames.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract Feature Names from Spatial Data — splnr_featureNames","text":"","code":"splnr_featureNames(dat, exclude = NA)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_featureNames.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract Feature Names from Spatial Data — splnr_featureNames","text":"dat sf dataframe representing conservation features. non-geometry column assumed feature. exclude character vector column names (prefixes) exclude output. default, excludes columns starting \"Cost_\". provide value, appended default exclusion. Set NULL character(0) want exclusions beyond default.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_featureNames.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract Feature Names from Spatial Data — splnr_featureNames","text":"character vector containing names conservation features.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_featureNames.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Extract Feature Names from Spatial Data — splnr_featureNames","text":"function utility preparing data prioritizr conservation planning packages require vector feature names. typically removes geometry column columns related cost (prefixed \"Cost_\") default, allowing specify additional columns exclude. output simple character vector column names, can directly used feature identifiers conservation problems.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_featureNames.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract Feature Names from Spatial Data — splnr_featureNames","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_prob' is an existing sf object in your package. # It likely has columns like 'Spp1', 'Spp2', 'Cost_SomeMeasure', etc. # Example 1: Get all feature names, excluding default 'Cost_' columns. feature_names_default <- splnr_featureNames(dat = dat_species_prob) print(feature_names_default) # Example 2: Get feature names, excluding 'Cost_' columns and 'Spp5'. feature_names_custom_exclude <- splnr_featureNames( dat = dat_species_prob, exclude = \"Spp5\" ) print(feature_names_custom_exclude) # Example 3: If you only want to exclude a specific column and not 'Cost_' # (you'd need to manually specify exclude = \"geometry\" and then your column) # This case is more complex and usually handled by direct dplyr::select. # This function's primary use is to remove cost columns and potentially others. } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_IUCNRedList.html","id":null,"dir":"Reference","previous_headings":"","what":"Match Species to IUCN RedList Categories — splnr_get_IUCNRedList","title":"Match Species to IUCN RedList Categories — splnr_get_IUCNRedList","text":"splnr_get_IUCNRedList function retrieves IUCN Red List category information given set species appends input dataframe.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_IUCNRedList.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Match Species to IUCN RedList Categories — splnr_get_IUCNRedList","text":"","code":"splnr_get_IUCNRedList(df, species_col = \"Species\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_IUCNRedList.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Match Species to IUCN RedList Categories — splnr_get_IUCNRedList","text":"df input dataframe containing species names matched. species_col character string specifying name column df contains species scientific names (e.g., \"Species\" \"scientific_name\"). Defaults \"Species\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_IUCNRedList.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Match Species to IUCN RedList Categories — splnr_get_IUCNRedList","text":"dataframe identical input df, additional column named IUCN_Category. species found IUCN Red List, IUCN_Category NA.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_IUCNRedList.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Match Species to IUCN RedList Categories — splnr_get_IUCNRedList","text":"use function, must first obtain API key IUCN. alphanumeric string required every request. can visit IUCN website request key using rl_use_iucn(). Please note receiving key might take 1-2 days submitting form. receive API key, crucial set environment variable named IUCN_REDLIST_KEY. can temporarily current R session using Sys.setenv(IUCN_REDLIST_KEY = \"YOUR_API_KEY_HERE\"). set permanently, add IUCN_REDLIST_KEY = \"YOUR_API_KEY_HERE\" .Renviron file. can check key set correctly using Sys.getenv(\"IUCN_REDLIST_KEY\"). IUCN Red List uses various categories assess extinction risk. function queries Red List following categories: DD: Data Deficient LC: Least Concern NT: Near Threatened VU: Vulnerable EN: Endangered CR: Critically Endangered EW: Extinct Wild EX: Extinct LRlc: Lower Risk / least concern (old category) LRnt: Lower Risk / near threatened (old category) LRcd: Lower Risk / conservation dependent (old category) function attempt match species categories present IUCN Red List database.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_IUCNRedList.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Match Species to IUCN RedList Categories — splnr_get_IUCNRedList","text":"","code":"if (FALSE) { # \\dontrun{ # Ensure your IUCN_REDLIST_KEY is set as an environment variable before running. # For example: Sys.setenv(IUCN_REDLIST_KEY = \"YOUR_API_KEY_HERE\") # Example: Create a dataframe with species names and retrieve their IUCN Red List categories. df_species_redlist <- data.frame(Species = c(\"Diomedea exulans\", \"Hippocampus kuda\", \"Squatina squatina\")) %>% splnr_get_IUCNRedList() print(df_species_redlist) # Example with a different column name for species df_alt_col <- data.frame(ScientificName = c(\"Panthera leo\", \"Orcinus orca\")) %>% splnr_get_IUCNRedList(species_col = \"ScientificName\") print(df_alt_col) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_MPAs.html","id":null,"dir":"Reference","previous_headings":"","what":"Get Marine Protected Areas (MPAs) from WDPA — splnr_get_MPAs","title":"Get Marine Protected Areas (MPAs) from WDPA — splnr_get_MPAs","text":"function serves wrapper wdpar package, facilitating retrieval Marine Protected Areas (MPAs) World Database Protected Areas (WDPA) intersecting provided planning units. result sf object indicating area planning units covered selected marine protected areas.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_MPAs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get Marine Protected Areas (MPAs) from WDPA — splnr_get_MPAs","text":"","code":"splnr_get_MPAs( PlanUnits, Countries, Status = c(\"Designated\", \"Established\", \"Inscribed\"), Desig = c(\"National\", \"Regional\", \"International\", \"Not Applicable\"), Category = c(\"Ia\", \"Ib\", \"II\", \"III\", \"IV\"), ... )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_MPAs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get Marine Protected Areas (MPAs) from WDPA — splnr_get_MPAs","text":"PlanUnits sf object representing planning units used intersection. object valid CRS defined. Countries character vector specifying countries extract MPAs. retrieve global MPAs, use value \"global\". Country names match recognized WDPA database. Status character vector specifying desired status protected areas include. Defaults c(\"Designated\", \"Established\", \"Inscribed\"). Desig character vector specifying desired designation types protected areas. Defaults c(\"National\", \"Regional\", \"International\", \"Applicable\"). Category character vector specifying desired IUCN Protected Area Management Categories. Defaults c(\"Ia\", \"Ib\", \"II\", \"III\", \"IV\"). ... arguments passed directly wdpa_fetch() function wdpar package (e.g., verbose = TRUE).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_MPAs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get Marine Protected Areas (MPAs) from WDPA — splnr_get_MPAs","text":"sf object. object contains planning units, additional wdpa column (set 1) areas intersect selected MPAs.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_MPAs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Get Marine Protected Areas (MPAs) from WDPA — splnr_get_MPAs","text":"function leverages robust capabilities wdpar package Jeffrey O. Hanson access process WDPA data. allows filtering MPAs based country, status, designation type, IUCN category, spatially intersects MPAs defined planning units. comprehensive understanding WDPA data fields: Status: Refers establishment, designation, proposal status protected area time data submission. Valid options include \"Designated\", \"Established\", \"Inscribed\", \"Proposed\", \"Adopted\". Desig (Designation Type): Categorizes legal official designation protected area. Valid options include \"National\", \"Regional\", \"International\", \"Applicable\". Category (IUCN Protected Area Management Categories): Represents IUCN management categories protected areas. Valid options include \"Ia\", \"Ib\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"Reported\", \"Applicable\", \"Assigned\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_MPAs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get Marine Protected Areas (MPAs) from WDPA — splnr_get_MPAs","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_PUs' is an existing sf object of planning units in your package. # Example: Get MPAs for Australia and intersect with planning units. dat_mpas <- splnr_get_MPAs(PlanUnits = dat_PUs, Countries = \"Australia\") # Example: Get MPAs for multiple countries with specific status and categories. dat_mpas_specific <- splnr_get_MPAs( PlanUnits = dat_PUs, Countries = c(\"Australia\", \"New Zealand\"), Status = c(\"Designated\", \"Proposed\"), Category = c(\"II\", \"IV\") ) # Example: Visualize the result using ggplot2. # Assuming 'aust' is an sf object representing Australia's coastline, # perhaps loaded from rnaturalearth::ne_countries. aust <- rnaturalearth::ne_countries(country = \"Australia\", returnclass = \"sf\") gg <- ggplot2::ggplot() + ggplot2::geom_sf(data = dat_mpas, ggplot2::aes(fill = wdpa)) + ggplot2::geom_sf(data = aust, fill = \"grey50\") + ggplot2::labs(title = \"Marine Protected Areas in Australia\") + ggplot2::theme_minimal() print(gg) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_boundary.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a Planning Region Boundary — splnr_get_boundary","title":"Create a Planning Region Boundary — splnr_get_boundary","text":"function generates spatial boundary planning region sf polygon object. boundary can defined several ways: simple rectangular bounding box using numeric coordinates. global boundary spanning entire world. complex shape based marine ecoregions rnaturalearth.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_boundary.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a Planning Region Boundary — splnr_get_boundary","text":"","code":"splnr_get_boundary(Limits, Type = NULL, res = 1, cCRS = \"ESRI:54009\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_boundary.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a Planning Region Boundary — splnr_get_boundary","text":"Limits required input defines spatial extent. can : named numeric vector four elements: c(\"xmin\" = ..., \"xmax\" = ..., \"ymin\" = ..., \"ymax\" = ...). string \"Global\" create worldwide boundary. character vector ocean/sea names (e.g., \"North Atlantic Ocean\") used Type = \"Ocean\". Type type Limits provided. required Limits character vector ocean names, case \"Ocean\". longer required removed future version. res [numeric(1)] resolution (decimal degrees) used construct polygon vertices Limits numeric \"Global\". Defaults 1. Must positive number. cCRS [character(1)] coordinate reference system (CRS) output sf object. Can PROJ4 string EPSG code. Defaults \"ESRI:54009\" (Mollweide).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_boundary.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a Planning Region Boundary — splnr_get_boundary","text":"sf object containing single polygon feature representing planning boundary.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_boundary.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a Planning Region Boundary — splnr_get_boundary","text":"planning region boundary foundational first step spatial conservation planning exercises. subsequent analyses data preparation steps within spatialplanr package rely defined boundary. coordinate reference system (CRS) returned object projected default (Mollweide), suitable equal-area calculations.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_boundary.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a Planning Region Boundary — splnr_get_boundary","text":"","code":"if (FALSE) { # \\dontrun{ # Example 1: Create a boundary from an ocean name. # This fetches polygon data for the specified ocean. bndry_ocean <- splnr_get_boundary(Limits = \"North Atlantic Ocean\", Type = \"Ocean\") plot(bndry_ocean) # Example 2: Create a global boundary. bndry_global <- splnr_get_boundary(Limits = \"Global\") plot(bndry_global) # Example 3: Create a boundary from a numeric bounding box. bndry_coords <- splnr_get_boundary( Limits = c(\"xmin\" = 150, \"xmax\" = 170, \"ymin\" = -40, \"ymax\" = -20) ) plot(bndry_coords) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_distCoast.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate Distance to Coastline — splnr_get_distCoast","title":"Calculate Distance to Coastline — splnr_get_distCoast","text":"function calculates shortest distance centroid Planning Unit sf object nearest coastline. can use either default coastline rnaturalearth package custom-provided coastline sf object.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_distCoast.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate Distance to Coastline — splnr_get_distCoast","text":"","code":"splnr_get_distCoast(dat_sf, custom_coast = NULL, res = \"medium\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_distCoast.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate Distance to Coastline — splnr_get_distCoast","text":"dat_sf [sf] sf object containing polygon point features representing Planning Units. Must valid CRS. custom_coast [sf] optional sf object representing custom coastline. NULL (default), coastline downloaded rnaturalearth. res [character(1)] resolution rnaturalearth coastline use. Options \"small\", \"medium\" (default), \"large\". parameter ignored custom_coast provided.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_distCoast.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate Distance to Coastline — splnr_get_distCoast","text":"sf object identical dat_sf added column coastDistance_km representing distance nearest coastline kilometers.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_distCoast.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate Distance to Coastline — splnr_get_distCoast","text":"function adds new column named coastDistance_km input sf object, containing calculated distances kilometers. CRS input data preserved. crucial ensure input sf object suitable projected CRS accurate distance calculations.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_distCoast.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate Distance to Coastline — splnr_get_distCoast","text":"","code":"if (FALSE) { # \\dontrun{ # Example 1: Calculate distance to coast for a simple grid bbox <- sf::st_bbox(c(xmin = 0, ymin = 0, xmax = 3, ymax = 3)) grid <- sf::st_as_sf(sf::st_make_grid(bbox, n = c(3, 3))) grid_with_dist <- splnr_get_distCoast(grid) plot(grid_with_dist[\"coastDistance_km\"]) # Example 2: Using a specific resolution for the coastline # Note: Requires the 'dat_sf' object to be created first, e.g., using # splnr_get_planning_units() if (exists(\"dat_sf\")) { dat_sf_dist <- splnr_get_distCoast(dat_sf, res = \"large\") summary(dat_sf_dist$coastDistance_km) } # Example 3: Using a custom coastline # First, create a custom coastline (e.g., from a country polygon) landmass <- rnaturalearth::ne_countries( scale = \"medium\", returnclass = \"sf\" ) if (exists(\"dat_sf\") && exists(\"landmass\")) { # Transform landmass to the same CRS as the planning units landmass_proj <- sf::st_transform(landmass, sf::st_crs(dat_sf)) dat_sf_custom_coast <- splnr_get_distCoast(dat_sf, custom_coast = landmass_proj) summary(dat_sf_custom_coast$coastDistance_km) } } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_featureRep.html","id":null,"dir":"Reference","previous_headings":"","what":"Prepare Data to Plot How Well Targets Are Met — splnr_get_featureRep","title":"Prepare Data to Plot How Well Targets Are Met — splnr_get_featureRep","text":"splnr_get_featureRep() calculates representation conservation features within prioritizr solution. function determines much feature's total abundance (area) captured selected planning units, compares specified conservation targets. can also account different climate-smart planning approaches.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_featureRep.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prepare Data to Plot How Well Targets Are Met — splnr_get_featureRep","text":"","code":"splnr_get_featureRep( soln, pDat, targets = NA, climsmart = FALSE, climsmartApproach = 0, solnCol = \"solution_1\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_featureRep.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prepare Data to Plot How Well Targets Are Met — splnr_get_featureRep","text":"soln sf object representing prioritizr solution, containing column indicating selected planning units (default: solution_1). pDat prioritizr problem object, defined prioritizr::problem(). object provides original feature data targets. targets data.frame (optional). provided, contain feature column (character) target column (numeric). used override supplement targets pDat, especially climate-smart approaches targets might pre-adjusted. Defaults NA. climsmart logical value (TRUE FALSE). TRUE, special handling climate-smart approaches enabled. Defaults FALSE. climsmartApproach integer (0, 1, 2, 3) indicating type climate-smart approach used: 0: climate-smart approach. 1: Climate Priority Area approach (features split CS/NCS). 2: Feature approach (explicitly handled function's climsmart logic, targets taken pDat default). 3: Percentile approach (features filtered). Defaults 0. solnCol character string specifying name column soln contains binary solution (1 selected, 0 selected). Defaults \"solution_1\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_featureRep.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Prepare Data to Plot How Well Targets Are Met — splnr_get_featureRep","text":"tibble dataframe containing feature names, total_amount (total units available), absolute_held (total units selected), relative_held (proportion held), target (conservation target), incidental (TRUE target 0 NA, feature still present).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_featureRep.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Prepare Data to Plot How Well Targets Are Met — splnr_get_featureRep","text":"function processes output prioritizr conservation problem (soln) corresponding problem definition (pDat) provide summary feature representation. designed work whether explicit targets provided, can adjust calculations based climate-smart approach used. function calculates: total_amount: total available amount/area feature across planning units. absolute_held: total amount/area feature captured selected planning units (solution_1 1). relative_held: proportion absolute_held relative total_amount, indicating percentage representation feature solution. target: conservation target feature (either pDat problem definition targets dataframe). incidental: logical flag indicating feature's representation 'incidental' (.e., target 0 NA, still partially fully captured solution). Climate-Smart Considerations (climsmart = TRUE): climsmart TRUE, function adjusts calculations based climsmartApproach parameter: climsmartApproach = 1 (Climate Priority Area): function sums absolute_held total_amount features split _CS (Climate-Smart) _NCS (Non-Climate-Smart) components. provides single, aggregated representation original feature, allowing comparison original target. climsmartApproach = 3 (Percentile Approach): function directly uses targets provided targets dataframe, expected adjusted percentile approach. climsmartApproach values climsmart FALSE, targets taken directly prioritizr problem's target data. output dataframe designed directly plottable functions like splnr_plot_featureRep().","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_featureRep.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Prepare Data to Plot How Well Targets Are Met — splnr_get_featureRep","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object with binary species data # and 'Cost' column. # Create a dummy prioritizr problem for basic demonstration pDat_basic <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) # Solve the problem soln_basic <- pDat_basic %>% prioritizr::solve.ConservationProblem() # Get feature representation for a basic (non-climate-smart) solution df_basic_rep <- splnr_get_featureRep( soln = soln_basic, pDat = pDat_basic ) print(df_basic_rep) # Example with Climate Priority Area (CPA) approach # Assuming 'dat_clim' is an sf object with a 'metric' column. # These would typically come from splnr_climate_priorityAreaApproach() # For example purposes, we'll create some dummy data and targets. # Simulate CPA processed features and targets cpa_features_sim <- dat_species_bin %>% dplyr::mutate( Spp1_CS = ifelse(Spp1 == 1 & runif(n()) < 0.5, 1, 0), Spp1_NCS = ifelse(Spp1 == 1 & Spp1_CS == 0, 1, 0), Spp2_CS = ifelse(Spp2 == 1 & runif(n()) < 0.6, 1, 0), Spp2_NCS = ifelse(Spp2 == 1 & Spp2_CS == 0, 1, 0), Spp3_CS = ifelse(Spp3 == 1 & runif(n()) < 0.7, 1, 0), Spp3_NCS = ifelse(Spp3 == 1 & Spp3_CS == 0, 1, 0) ) %>% dplyr::select(Spp1_CS, Spp1_NCS, Spp2_CS, Spp2_NCS, Spp3_CS, Spp3_NCS, geometry) cpa_targets_sim <- data.frame( feature = c(\"Spp1_CS\", \"Spp1_NCS\", \"Spp2_CS\", \"Spp2_NCS\", \"Spp3_CS\", \"Spp3_NCS\"), target = c(0.8, 0.2, 0.9, 0.1, 0.7, 0.3) # Example targets for CS/NCS parts ) # Create a problem with the simulated CPA features pDat_cpa_sim <- prioritizr::problem( cpa_features_sim %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1_CS\", \"Spp1_NCS\", \"Spp2_CS\", \"Spp2_NCS\", \"Spp3_CS\", \"Spp3_NCS\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(cpa_targets_sim$target, cpa_targets_sim$feature) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) # Solve the CPA problem soln_cpa_sim <- pDat_cpa_sim %>% prioritizr::solve.ConservationProblem() # Get feature representation for CPA approach df_cpa_rep <- splnr_get_featureRep( soln = soln_cpa_sim, pDat = pDat_cpa_sim, targets = cpa_targets_sim, # Pass the original CPA targets climsmart = TRUE, climsmartApproach = 1 # Indicate CPA approach ) print(df_cpa_rep) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_gfw.html","id":null,"dir":"Reference","previous_headings":"","what":"Retrieve Global Fishing Watch Data — splnr_get_gfw","title":"Retrieve Global Fishing Watch Data — splnr_get_gfw","text":"splnr_get_gfw function retrieves Global Fishing Watch (GFW) data returns sf (simple features) object. function allows flexible data queries based geographical region, time range, desired spatial temporal resolutions.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_gfw.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Retrieve Global Fishing Watch Data — splnr_get_gfw","text":"","code":"splnr_get_gfw( region, start_date, end_date, temp_res, spat_res = \"LOW\", region_source = \"EEZ\", key = gfwr::gfw_auth(), cCRS = \"EPSG:4326\", compress = FALSE )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_gfw.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Retrieve Global Fishing Watch Data — splnr_get_gfw","text":"region character string specifying name region (e.g., EEZ name) numeric ID region, sf object region_source set \"USER_SHAPEFILE\". start_date start date data retrieval, expected \"%Y-%m-%d\" format (e.g., \"2021-01-01\"). end_date end date data retrieval, expected \"%Y-%m-%d\" format (e.g., \"2022-12-31\"). temp_res desired temporal resolution data. Must one : \"DAILY\", \"MONTHLY\", \"YEARLY\". spat_res desired spatial resolution data. Must one : \"LOW\" (0.1 degree) \"HIGH\" (0.01 degree). Defaults \"LOW\". region_source source region definition. Must one : 'EEZ', 'MPA', 'RFMO', 'USER_SHAPEFILE'. Defaults \"EEZ\". key API token GFW API. provided, attempts authenticate using gfwr::gfw_auth(). See GlobalFishingWatch vignette details obtaining key. cCRS Coordinate Reference System (CRS) output sf object transformed. Defaults \"EPSG:4326\". compress logical value. TRUE, data compressed (aggregated) coordinates, summing fishing hours unique location. FALSE, raw data points returned. Defaults FALSE.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_gfw.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Retrieve Global Fishing Watch Data — splnr_get_gfw","text":"sf object containing requested GFW data. structure sf object vary depending compress temp_res parameters.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_gfw.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Retrieve Global Fishing Watch Data — splnr_get_gfw","text":"possibilities offered function extensively explained vignette(\"GlobalFishingWatch\"). function shares many parameters get_raster function gfwr package, addition cCRS specifying Coordinate Reference System output sf object. Fishing activity data can aggregated (group_by) \"FLAGANDGEARTYPE\" default, combining flags gear types. Notes: Currently, function primarily designed data within Exclusive Economic Zones (EEZs), can potentially extended specific Marine Protected Areas (MPAs) RFMOs. Days specified start_date end_date variables inclusive data recovery.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_gfw.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Retrieve Global Fishing Watch Data — splnr_get_gfw","text":"","code":"if (FALSE) { # \\dontrun{ # Example: Retrieve yearly GFW data for Australia, transformed to a # Mollweide projection (ESRI:54009) and compressed (aggregated) by location. gfw_data <- splnr_get_gfw( region = 'Australia', start_date = \"2021-01-01\", end_date = \"2022-12-31\", temp_res = \"YEARLY\", cCRS = \"ESRI:54009\", compress = TRUE ) # Example: Retrieve monthly GFW data for a specific EEZ ID, # keeping individual time ranges and locations. # Note: Replace 1000 with an actual EEZ ID if needed for testing. gfw_data_monthly <- splnr_get_gfw( region = 1000, # Example numeric EEZ ID start_date = \"2022-01-01\", end_date = \"2022-03-31\", temp_res = \"MONTHLY\", region_source = \"EEZ\", compress = FALSE ) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_kappaCorrData.html","id":null,"dir":"Reference","previous_headings":"","what":"Prepare Data to Plot Cohen's Kappa Correlation Matrix — splnr_get_kappaCorrData","title":"Prepare Data to Plot Cohen's Kappa Correlation Matrix — splnr_get_kappaCorrData","text":"splnr_get_kappaCorrData() calculates Cohen's Kappa correlation coefficients list prioritizr conservation solutions. output symmetrical matrix suitable visualizing pairwise agreement using heatmap.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_kappaCorrData.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prepare Data to Plot Cohen's Kappa Correlation Matrix — splnr_get_kappaCorrData","text":"","code":"splnr_get_kappaCorrData(sol, name_sol)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_kappaCorrData.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prepare Data to Plot Cohen's Kappa Correlation Matrix — splnr_get_kappaCorrData","text":"sol list prioritizr solution objects. element list must sf object containing binary column named solution_1. name_sol character vector providing descriptive names solution sol list. length vector must match length sol. names used row column names output correlation matrix.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_kappaCorrData.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Prepare Data to Plot Cohen's Kappa Correlation Matrix — splnr_get_kappaCorrData","text":"numeric matrix (matrixOut) representing Cohen's Kappa correlation matrix pairs solutions. Rows columns named according name_sol.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_kappaCorrData.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Prepare Data to Plot Cohen's Kappa Correlation Matrix — splnr_get_kappaCorrData","text":"function essential assessing similarity divergence among different conservation plans. takes list prioritizr solution objects, expected contain binary column named solution_1 (indicating selected unselected planning units). every unique pair solutions input list, computes Cohen's Kappa using irr::kappa2() function. Cohen's Kappa measures agreement two raters (case, two conservation solutions) categorical items, correcting chance agreement. Kappa value 1 indicates perfect agreement, 0 indicates agreement equivalent chance, negative values indicate agreement worse chance. resulting matrix symmetrical, diagonal elements always equal 1 (solution perfectly agrees ). matrix can passed visualization functions like splnr_plot_corrMat() create correlation heatmap.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_kappaCorrData.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Prepare Data to Plot Cohen's Kappa Correlation Matrix — splnr_get_kappaCorrData","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object in your package. # Create a dummy prioritizr problem and solve it for solution 1 (30% target). dat_problem1 <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln1 <- dat_problem1 %>% prioritizr::solve.ConservationProblem() # Create another dummy prioritizr problem and solve it for solution 2 (50% target). dat_problem2 <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.5) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln2 <- dat_problem2 %>% prioritizr::solve.ConservationProblem() # Calculate the Cohen's Kappa correlation matrix between the two solutions. corrMat <- splnr_get_kappaCorrData( sol = list(dat_soln1, dat_soln2), name_sol = c(\"Solution_A_30pct\", \"Solution_B_50pct\") ) print(corrMat) # This output can then be directly passed to splnr_plot_corrMat(). # splnr_plot_corrMat(corrMat, AxisLabels = c(\"Sol A (30%)\", \"Sol B (50%)\")) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_selFreq.html","id":null,"dir":"Reference","previous_headings":"","what":"Prepare Data to Plot Selection Frequency of Planning Units — splnr_get_selFreq","title":"Prepare Data to Plot Selection Frequency of Planning Units — splnr_get_selFreq","text":"splnr_get_selFreq() calculates many times Planning Unit selected across array prioritizr solutions. \"selection frequency\" can derived either list individual solutions prioritizr portfolio object.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_selFreq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prepare Data to Plot Selection Frequency of Planning Units — splnr_get_selFreq","text":"","code":"splnr_get_selFreq(solnMany, type = \"portfolio\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_selFreq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prepare Data to Plot Selection Frequency of Planning Units — splnr_get_selFreq","text":"solnMany list prioritizr solutions (type = \"list\") single sf object representing prioritizr portfolio solutions (type = \"portfolio\"). individual solution must contain column named solution_1. type character string indicating input type: \"portfolio\" (single sf object multiple solution columns) \"list\" (list single-solution sf objects). Defaults \"portfolio\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_selFreq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Prepare Data to Plot Selection Frequency of Planning Units — splnr_get_selFreq","text":"sf object (selFreq) containing column named selFreq. column factor representing selection frequency (sum selected occurrences across solutions) Planning Unit.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_selFreq.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Prepare Data to Plot Selection Frequency of Planning Units — splnr_get_selFreq","text":"Understanding selection frequency crucial identifying robust conservation areas—consistently chosen across multiple planning scenarios alternative optimal solutions. function supports two types input: \"portfolio\": solnMany single sf object representing portfolio solutions (e.g., generated prioritizr::add_cuts_portfolio()). case, function assumes columns starting \"solution_\" represent individual solutions within portfolio. \"list\": solnMany list element sf object representing single prioritizr solution (\"solution_1\" column). types, function sums binary solution values (0 1) across solutions Planning Unit. result converted factor represent discrete frequency levels. output sf object can passed splnr_plot_selectionFreq() visualization heatmap.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_get_selFreq.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Prepare Data to Plot Selection Frequency of Planning Units — splnr_get_selFreq","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object in your package. # Create a base prioritizr problem. dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) # --- Example 1: Using a portfolio of solutions --- # Create a conservation problem that contains a portfolio of solutions (e.g., 5 solutions). dat_soln_portfolio <- dat_problem %>% prioritizr::add_cuts_portfolio(number_solutions = 5) %>% prioritizr::solve.ConservationProblem() # Calculate selection frequency from the portfolio. selFreq_portfolio <- splnr_get_selFreq(solnMany = dat_soln_portfolio, type = \"portfolio\") print(head(selFreq_portfolio)) # You can then plot this: splnr_plot_selectionFreq(selFreq_portfolio) # --- Example 2: Using a list of individual solutions --- # Solve the problem multiple times to get different solutions (e.g., by randomizing costs) dat_soln_list <- list( dat_problem %>% prioritizr::solve.ConservationProblem(), dat_problem %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])) %>% # Vary cost for a different solution prioritizr::solve.ConservationProblem(), dat_problem %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])) %>% # Another different solution prioritizr::solve.ConservationProblem() ) # Calculate selection frequency from the list of solutions. selFreq_list <- splnr_get_selFreq(solnMany = dat_soln_list, type = \"list\") print(head(selFreq_list)) # You can then plot this: splnr_plot_selectionFreq(selFreq_list) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_gg_add.html","id":null,"dir":"Reference","previous_headings":"","what":"Add-ons for Plotting spatialplanr Solution Maps — splnr_gg_add","title":"Add-ons for Plotting spatialplanr Solution Maps — splnr_gg_add","text":"function allows users customize existing ggplot2 solution maps produced spatialplanr spatial plotting functions (e.g., splnr_plot_solution()). provides options add various spatial layers apply consistent theming simple reproducible manner.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_gg_add.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add-ons for Plotting spatialplanr Solution Maps — splnr_gg_add","text":"","code":"splnr_gg_add( PUs = NULL, colorPUs = \"grey80\", Bndry = NULL, colorBndry = \"black\", overlay = NULL, colorOverlay = \"grey20\", overlay2 = NULL, colorOverlay2 = \"grey30\", overlay3 = NULL, colorOverlay3 = \"grey40\", contours = NULL, colorConts = \"black\", cropOverlay = NULL, lockIn = NULL, typeLockIn = \"Full\", nameLockIn = NULL, alphaLockIn = 1, colorLockIn = \"black\", legendLockIn = \"\", labelLockIn = \"MPAs\", lockOut = NULL, typeLockOut = \"Full\", nameLockOut = NULL, alphaLockOut = 1, colorLockOut = \"black\", legendLockOut = \"\", labelLockOut = \"\", ggtheme = \"Default\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_gg_add.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add-ons for Plotting spatialplanr Solution Maps — splnr_gg_add","text":"PUs sf object representing Planning Units. provided, outlines drawn. Defaults NULL. colorPUs character string specifying color outlines Planning Units. Defaults \"grey80\". Bndry sf object representing main planning region boundaries. provided, outline drawn. Defaults NULL. colorBndry character string specifying color outline Bndry object. Defaults \"black\". overlay sf object plotted general overlay. Defaults NULL. colorOverlay character string specifying color overlay. Defaults \"grey20\". overlay2 sf object second general overlay. Defaults NULL. colorOverlay2 character string specifying color overlay2. Defaults \"grey30\". overlay3 sf object third general overlay. Defaults NULL. colorOverlay3 character string specifying color overlay3. Defaults \"grey40\". contours sf object containing contour lines (e.g., bathymetry seamount outlines). expected Category column differentiating lines. 6 categories supported. Defaults NULL. colorConts character string specifying color contour lines. Defaults \"black\". cropOverlay sf object. bounding box used set xlim ylim ggplot2::coord_sf() layer, effectively cropping view. Defaults NULL. lockIn sf object representing locked-areas (e.g., existing Marine Protected Areas (MPAs)) fixed conservation prioritization. Defaults NULL. typeLockIn character string specifying lockIn areas plotted. Can \"Full\" (fills areas colorLockIn) \"Contours\" (draws outlines areas). Defaults \"Full\". nameLockIn character string specifying column name lockIn data frame contains binary (0/1 TRUE/FALSE) information indicating locked-status. Required lockIn NULL. alphaLockIn numeric value (0 1) opacity lockIn areas typeLockIn \"Full\". Defaults 1. colorLockIn character string specifying color lockIn areas. Defaults \"black\". legendLockIn character string title lockIn legend. Can empty string \"\" suppress title. Defaults \"\". labelLockIn character string legend label lockIn areas (e.g., \"MPAs\"). Defaults \"MPAs\". lockOut sf object representing locked-areas (e.g., shipping lanes, oil gas leases, excluded zones) must selected conservation prioritization. Defaults NULL. typeLockOut character string specifying lockOut areas plotted. Can \"Full\" (fills areas colorLockOut) \"Contours\" (draws outlines areas). Defaults \"Full\". nameLockOut character string specifying column name lockOut data frame contains binary (0/1 TRUE/FALSE) information indicating locked-status. Required lockOut NULL. alphaLockOut numeric value (0 1) opacity lockOut areas typeLockOut \"Full\". Defaults 1. colorLockOut character string specifying color lockOut areas. Defaults \"black\". legendLockOut character string title lockOut legend. Can empty string \"\" suppress title. Defaults \"\". labelLockOut character string legend label lockOut areas (e.g., \"Shipping Lanes\"). Defaults \"\". ggtheme ggplot2 theme apply. Can : NA FALSE: theme applied, using ggplot2 defaults. \"Default\": Applies spatialplanr default theme (theme_bw() custom text/axis settings). list ggplot2::theme() properties custom styling. Defaults \"Default\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_gg_add.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add-ons for Plotting spatialplanr Solution Maps — splnr_gg_add","text":"list ggplot2 layers theme elements can added existing ggplot object using +.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_gg_add.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Add-ons for Plotting spatialplanr Solution Maps — splnr_gg_add","text":"splnr_gg_add() function enhances ggplot2 objects layering additional spatial data Planning Unit outlines, study area boundaries, general overlays, geographical contours, locked-areas (e.g., existing Marine Protected Areas (MPAs) must included conservation prioritization), locked-areas (e.g., areas must excluded selection shipping lanes oil gas leases). offers fine-grained control colors, opacities, legend appearance added layer. using contours, input sf object expected column named Category defines different contour lines plotted. function currently supports 6 distinct contour categories plotting. ggtheme parameter offers flexibility plot styling. \"Default\" applies standard spatialplanr theme (theme_bw() custom text axis settings). list ggplot2::theme() elements can provided full customization, NA (logical FALSE) apply default theme, allowing user manage theme elements manually.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_gg_add.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add-ons for Plotting spatialplanr Solution Maps — splnr_gg_add","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' and 'dat_PUs' are existing sf objects # in your package, suitable for prioritization problems and plotting. # Create a dummy prioritizr problem and solve it for demonstration. dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() # Basic plot of the solution with default Planning Unit outlines and theme. plot_basic <- splnr_plot_solution(dat_soln) + splnr_gg_add(PUs = dat_PUs, ggtheme = \"Default\") print(plot_basic) # Example with boundary, a custom overlay, and locked-in areas shown as contours. # For this example, let's create dummy `bndry_sf` and `locked_in_sf` based on `dat_PUs`. # In a real scenario, these would be loaded from your package or data. bndry_sf <- sf::st_union(dat_PUs) %>% sf::st_as_sf() locked_in_sf <- dat_PUs[1:100, ] %>% dplyr::mutate(is_mpa = 1) plot_custom <- splnr_plot_solution(dat_soln) + splnr_gg_add( PUs = dat_PUs, Bndry = bndry_sf, colorBndry = \"darkblue\", overlay = bndry_sf, # Using boundary as an example overlay colorOverlay = \"lightblue\", lockIn = locked_in_sf, typeLockIn = \"Contours\", nameLockIn = \"is_mpa\", colorLockIn = \"darkred\", labelLockIn = \"Existing MPAs\", ggtheme = \"Default\" ) print(plot_custom) # Example with custom ggplot2 theme settings (as a list) custom_theme_list <- list( ggplot2::theme_classic(), ggplot2::theme( plot.background = ggplot2::element_rect(fill = \"lightyellow\"), legend.position = \"top\" ) ) plot_with_custom_theme <- splnr_plot_solution(dat_soln) + splnr_gg_add(PUs = dat_PUs, ggtheme = custom_theme_list) print(plot_with_custom_theme) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_match_names.html","id":null,"dir":"Reference","previous_headings":"","what":"Substitute Numbers for Names in Regionalizations — splnr_match_names","title":"Substitute Numbers for Names in Regionalizations — splnr_match_names","text":"splnr_match_names() replaces numeric integer values spatial (sf) dataframe's column corresponding character names, typically used regionalization data.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_match_names.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Substitute Numbers for Names in Regionalizations — splnr_match_names","text":"","code":"splnr_match_names(dat, nam)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_match_names.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Substitute Numbers for Names in Regionalizations — splnr_match_names","text":"dat sf data frame single non-geometry column containing numeric integer values correspond names nam. nam named character vector. names vector numeric/integer values found dat's column, values vector desired character names substitution.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_match_names.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Substitute Numbers for Names in Regionalizations — splnr_match_names","text":"sf dataframe numeric/integer values relevant column substituted corresponding character names nam.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_match_names.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Substitute Numbers for Names in Regionalizations — splnr_match_names","text":"function designed scenarios spatial data contains numeric identifiers regions, mapping (named character vector) convert IDs descriptive names. assumes sf dataframe (dat) one non-geometry column needs recoding. function directly applies mapping nam vector specified column. names nam vector correspond numeric/integer values dat column, values nam new character names.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_match_names.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Substitute Numbers for Names in Regionalizations — splnr_match_names","text":"","code":"# Define the named character vector for mapping. region_names <- c(\"Region1\" = \"SE Aust\", \"Region2\" = \"Tas\", \"Region3\" = \"NE Aust\") # Apply the function to substitute numeric codes with names. df_named_regions <- splnr_match_names(dat = dat_region, nam = region_names) print(df_named_regions) #> Simple feature collection with 780 features and 1 field #> Geometry type: POLYGON #> Dimension: XY #> Bounding box: xmin: 100 ymin: -50 xmax: 160 ymax: 2 #> Geodetic CRS: WGS 84 #> First 10 features: #> geometry Region #> 1 POLYGON ((100 -50, 102 -50,... SE Aust #> 2 POLYGON ((102 -50, 104 -50,... SE Aust #> 3 POLYGON ((104 -50, 106 -50,... SE Aust #> 4 POLYGON ((106 -50, 108 -50,... SE Aust #> 5 POLYGON ((108 -50, 110 -50,... SE Aust #> 6 POLYGON ((110 -50, 112 -50,... SE Aust #> 7 POLYGON ((112 -50, 114 -50,... SE Aust #> 8 POLYGON ((114 -50, 116 -50,... SE Aust #> 9 POLYGON ((116 -50, 118 -50,... SE Aust #> 10 POLYGON ((118 -50, 120 -50,... SE Aust"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Spatial Data — splnr_plot","title":"Plot Spatial Data — splnr_plot","text":"function provides versatile way plot spatial data (sf objects) within spatialplanr package. can visualize various data types, including binary presence/absence, logical values, continuous data, simply planning unit outlines. function provides versatile way plot spatial data (sf objects) within spatialplanr package. can visualize various data types, including binary presence/absence, logical values, continuous data, simply Planning Unit outlines.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Spatial Data — splnr_plot","text":"","code":"splnr_plot( df, colNames = NULL, paletteName = \"YlGnBu\", colourVals = c(\"#c6dbef\", \"#3182bd\"), plotTitle = \"\", legendTitle = NULL, legendLabels = NULL ) splnr_plot( df, colNames = NULL, paletteName = \"YlGnBu\", colourVals = c(\"#c6dbef\", \"#3182bd\"), plotTitle = \"\", legendTitle = NULL, legendLabels = NULL )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Spatial Data — splnr_plot","text":"df input dataframe containing data plotted. must sf object include geometry column. colNames character vector column names df used coloring plot. NULL (default), Planning Unit outlines plotted. single column specified, checks binary, logical, continuous data. multiple columns specified, sums values across columns create \"FeatureSum\" plotting. paletteName character string specifying name RColorBrewer palette use filling continuous data. Defaults \"YlGnBu\". colourVals character vector two color values use binary (0/1) logical (FALSE/TRUE) data. first color '0' 'FALSE' (absence), second '1' 'TRUE' (presence). Defaults c(\"#c6dbef\", \"#3182bd\"). plotTitle character string subtitle plot. Defaults \"\" (subtitle). legendTitle character string title legend. NULL, default title used based data type. legendLabels character vector strings use legend labels, particularly useful binary logical data (e.g., c(\"Absent\", \"Present\")). NULL, default labels used binary/logical plots.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Spatial Data — splnr_plot","text":"ggplot object representing spatial plot. ggplot object representing spatial plot.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot Spatial Data — splnr_plot","text":"splnr_plot function automatically detects type data specified colNames (binary, logical, continuous) adjusts plotting aesthetics accordingly. multiple colNames provided, calculates sum features planning unit plots sum. colNames NULL, simply plot outlines planning units. function designed flexible replacement several plotting functions, splnr_plot_cost(), splnr_plot_binFeature(), splnr_plot_MPAs(), splnr_plot_featureNo(), streamlining plotting workflow within package. Written Kilian Barreiro Jason Everett. Last modified: February 2024. splnr_plot() function automatically detects type data specified colNames (binary, logical, continuous) adjusts plotting aesthetics accordingly. multiple colNames provided, calculates sum features Planning Unit plots sum. colNames NULL, simply plot outlines Planning Units. function designed flexible replacement several plotting functions, splnr_plot_cost(), splnr_plot_binFeature(), splnr_plot_MPAs(), splnr_plot_featureNo(), streamlining plotting workflow within package. Written Kilian Barreiro Jason Everett. Last modified: February 2024.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Spatial Data — splnr_plot","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin', 'dat_bathy', and 'dat_PUs' are existing sf objects # in your package, suitable for plotting. # Binary plot of species distribution for \"Spp1\" plot_spp1_binary <- splnr_plot( df = dat_species_bin, colNames = \"Spp1\", legendTitle = \"Species Presence\", legendLabels = c(\"Absent\", \"Present\") ) print(plot_spp1_binary) # Logical plot of species distribution for \"Spp1\" (converted from binary) plot_spp1_logical <- splnr_plot( df = dat_species_bin %>% dplyr::mutate(dplyr::across( tidyselect::starts_with(\"Spp\"), as.logical )), colNames = \"Spp1\", legendTitle = \"Species Presence\", legendLabels = c(\"Absent\", \"Present\") ) print(plot_spp1_logical) # Continuous plot of bathymetry plot_bathymetry <- splnr_plot( df = dat_bathy, colNames = \"bathymetry\", plotTitle = \"Bathymetry\", legendTitle = \"Bathymetry (m)\" ) print(plot_bathymetry) # Plot Planning Units outlines only plot_planning_units <- splnr_plot(df = dat_PUs) print(plot_planning_units) # Multi-binary features: Plotting the sum of multiple \"Spp\" features plot_multi_spp_sum <- splnr_plot( df = dat_species_bin, colNames = colnames(dat_species_bin %>% sf::st_drop_geometry() %>% dplyr::select(tidyselect::starts_with(\"Spp\"))), legendTitle = \"Number of Features\" ) print(plot_multi_spp_sum) } # } if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin', 'dat_bathy', and 'dat_PUs' are existing sf objects # in your package, suitable for plotting. # Binary plot of species distribution for \"Spp1\" plot_spp1_binary <- splnr_plot( df = dat_species_bin, colNames = \"Spp1\", legendTitle = \"Species Presence\", legendLabels = c(\"Absent\", \"Present\") ) print(plot_spp1_binary) # Logical plot of species distribution for \"Spp1\" (converted from binary) plot_spp1_logical <- splnr_plot( df = dat_species_bin %>% dplyr::mutate(dplyr::across( tidyselect::starts_with(\"Spp\"), as.logical )), colNames = \"Spp1\", legendTitle = \"Species Presence\", legendLabels = c(\"Absent\", \"Present\") ) print(plot_spp1_logical) # Continuous plot of bathymetry plot_bathymetry <- splnr_plot( df = dat_bathy, colNames = \"bathymetry\", plotTitle = \"Bathymetry\", legendTitle = \"Bathymetry (m)\" ) print(plot_bathymetry) # Plot Planning Units outlines only plot_planning_units <- splnr_plot(df = dat_PUs) print(plot_planning_units) # Multi-binary features: Plotting the sum of multiple \"Spp\" features plot_multi_spp_sum <- splnr_plot( df = dat_species_bin, colNames = colnames(dat_species_bin %>% sf::st_drop_geometry() %>% dplyr::select(tidyselect::starts_with(\"Spp\"))), legendTitle = \"Number of Features\" ) print(plot_multi_spp_sum) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_MPAs.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot MPAs — splnr_plot_MPAs","title":"Plot MPAs — splnr_plot_MPAs","text":"splnr_plot_MPAs() allows plot either outline area MPAs existing planning region (example extracted spatialplanrfunction splnr_get_MPAs()) customisable way using ggplot2. function requires sf object containing information whether planning unit planning region lies within MPA column called wdpa outputs ggobject. can combined spatialplanr function splnr_gg_add().","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_MPAs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot MPAs — splnr_plot_MPAs","text":"","code":"splnr_plot_MPAs( df, colorVals = c(`TRUE` = \"blue\", `FALSE` = \"white\"), showLegend = TRUE, plotTitle = \"Locked In Areas\", legendTitle = \"\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_MPAs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot MPAs — splnr_plot_MPAs","text":"df sf object marine protected areas colorVals list object named vectors match color value according name. \"TRUE\" stands selected planning units. showLegend logical command whether show legend solution (Default: TRUE). plotTitle character value title plot. Can empty (\"\"). legendTitle character value title legend. Can empty (\"\").","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_MPAs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot MPAs — splnr_plot_MPAs","text":"ggplot object plot","code":""},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_MPAs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot MPAs — splnr_plot_MPAs","text":"","code":"if (FALSE) { # \\dontrun{ splnr_plot_MPAs(dat_mpas) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_binFeature.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot binary feature — splnr_plot_binFeature","title":"Plot binary feature — splnr_plot_binFeature","text":"splnr_plot_binFeature() allows plot presences absences feature planning region customisable way using ggplot2. function requires sf object binary information feature(0 absences 1 presences, example created continuous data spatialplanr function splnr_apply_cutoffs()). outputs ggobject can combined spatialplanr function splnr_gg_add().","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_binFeature.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot binary feature — splnr_plot_binFeature","text":"","code":"splnr_plot_binFeature( df, colInterest, colorVals = c(Suitable = \"#3182bd\", `Not Suitable` = \"#c6dbef\"), showLegend = TRUE, plotTitle = \" \", legendTitle = \"Habitat\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_binFeature.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot binary feature — splnr_plot_binFeature","text":"df data frame binary feature information colInterest column data frame contains binary information feature plot colorVals list object named vectors match color value according name. \"TRUE\" stands selected planning units. showLegend logical command whether show legend solution (Default: TRUE). plotTitle character value title plot. Can empty (\"\"). legendTitle character value title legend. Can empty (\"\").","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_binFeature.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot binary feature — splnr_plot_binFeature","text":"ggplot object plot","code":""},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_binFeature.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot binary feature — splnr_plot_binFeature","text":"","code":"if (FALSE) { # \\dontrun{ splnr_plot_binFeature(dat_species_bin, dat_species_bin$Spp1) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_circBplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Circular Barplot for Feature Representation — splnr_plot_circBplot","title":"Plot Circular Barplot for Feature Representation — splnr_plot_circBplot","text":"splnr_plot_circBplot() creates circular bar plot visualize feature representation, categorized groups. particularly useful displaying different categories features meet certain targets radial layout.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_circBplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Circular Barplot for Feature Representation — splnr_plot_circBplot","text":"","code":"splnr_plot_circBplot( df, legend_color, legend_list, indicateTargets = TRUE, impTarget = NA, repTarget = NA, colTarget = \"red\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_circBplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Circular Barplot for Feature Representation — splnr_plot_circBplot","text":"df data.frame tibble must contain following columns: feature: character factor unique identifier individual bar (e.g., species names). value: numeric value plotted y-axis (bar height, typically percentage representation). group: character factor grouping factors (e.g., \"important\", \"representative\"). legend_color named vector colors. Names must correspond unique values group column df, values corresponding colors. example: c(\"group_name1\" = \"red\", \"group_name2\" = \"blue\"). legend_list character vector labels legend. match names used legend_color levels group. indicateTargets logical value. TRUE, horizontal lines indicating impTarget repTarget drawn plot. impTarget numeric value representing target percentage 'important' features. Required indicateTargets TRUE. repTarget numeric value representing target percentage 'representative' features. Required indicateTargets TRUE. colTarget character string specifying color target indicator lines.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_circBplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Circular Barplot for Feature Representation — splnr_plot_circBplot","text":"ggplot2::ggplot object circular bar plot.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_circBplot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Circular Barplot for Feature Representation — splnr_plot_circBplot","text":"","code":"# DISCLAIMER: THIS SOLUTION IS NOT ACTUALLY RUN WITH THESE TARGETS YET if (FALSE) { # \\dontrun{ dat_problem <- prioritizr::problem(dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() s1 <- dat_soln %>% tibble::as_tibble() p1 <- dat_problem # Assuming eval_feature_representation_summary is from prioritizr df_rep_imp <- prioritizr::eval_feature_representation_summary( p1, s1[, \"solution_1\"] ) %>% dplyr::select(feature, relative_held) %>% dplyr::mutate(relative_held = relative_held * 100) imp_layers <- c(\"Spp1\", \"Spp3\") target <- data.frame(feature = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\")) %>% dplyr::mutate(class = dplyr::if_else(.data$feature %in% imp_layers, \"important\", \"representative\" )) %>% dplyr::mutate(target = dplyr::if_else(class == \"important\", 50 / 100, 30 / 100 )) df <- merge(df_rep_imp, target) %>% dplyr::select(-target) %>% stats::na.omit() %>% # Use stats::na.omit dplyr::rename(value = relative_held) %>% dplyr::rename(group = class) colors <- c( \"important\" = \"darkgreen\", \"representative\" = \"darkred\" ) legends <- c(\"Important\", \"Representative\") (splnr_plot_circBplot(df, legend_list = legends, legend_color = colors, impTarget = 50, repTarget = 30 )) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climData.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Climate Metric Data — splnr_plot_climData","title":"Plot Climate Metric Data — splnr_plot_climData","text":"splnr_plot_climData() function creates spatial plot climate metric information sf object. provides customizable visualization using ggplot2 viridis color palettes.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climData.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Climate Metric Data — splnr_plot_climData","text":"","code":"splnr_plot_climData( df, colInterest, colorMap = \"C\", plotTitle = \" \", legendTitle = \"Climate metric\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climData.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Climate Metric Data — splnr_plot_climData","text":"df sf object containing climate metric information. must geometry column. colInterest character string specifying name column df contains climate metric data plotted. colorMap character string indicating viridis color map use (e.g., \"\", \"B\", \"C\", \"D\", \"E\"). See https://ggplot2.tidyverse.org/reference/scale_viridis.html options. Defaults \"C\". plotTitle character string subtitle plot. Defaults \" \" (single space, effectively subtitle). legendTitle character string title legend. Defaults \"Climate metric\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climData.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Climate Metric Data — splnr_plot_climData","text":"ggplot object representing spatial plot climate metric.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climData.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot Climate Metric Data — splnr_plot_climData","text":"function designed visualize spatial data contains specific climate metric. expects sf object (df) geometry column climate metric data column specified colInterest. plot uses continuous color scale (viridis) represent metric values across planning units. function can easily integrated larger plotting workflow used independently inspect climate data distributions.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climData.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Climate Metric Data — splnr_plot_climData","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_clim' is an existing sf object in your package # with a column named \"metric\" or another relevant climate metric. # Example: Plot climate data using \"metric\" column plot_climate_metric <- splnr_plot_climData( df = dat_clim, colInterest = \"metric\", plotTitle = \"Annual Climate Warming\", legendTitle = \"Warming (°C/year)\" ) print(plot_climate_metric) # Example with a different color map plot_climate_alt_cmap <- splnr_plot_climData( df = dat_clim, colInterest = \"metric\", colorMap = \"D\", # Using 'D' for a different viridis palette plotTitle = \"Climate Metric (Alternative Colors)\" ) print(plot_climate_alt_cmap) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climKernelDensity.html","id":null,"dir":"Reference","previous_headings":"","what":"Kernel Density Plots for Climate-Smart Spatial Plans — splnr_plot_climKernelDensity","title":"Kernel Density Plots for Climate-Smart Spatial Plans — splnr_plot_climKernelDensity","text":"splnr_plot_climKernelDensity() generates kernel density plots climate-smart spatial plans, offering two distinct plotting styles: \"Normal\" (publication-quality comparison multiple solutions) \"Basic\" (simplified visualization stakeholders).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climKernelDensity.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Kernel Density Plots for Climate-Smart Spatial Plans — splnr_plot_climKernelDensity","text":"","code":"splnr_plot_climKernelDensity( soln, solution_names = \"solution_1\", climate_names = \"metric\", type = \"Normal\", colorMap = \"C\", legendTitle = expression(\" °C y\"^\"-1\" * \"\"), xAxisLab = expression(\"Climate warming ( °C y\"^\"-1\" * \")\") )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climKernelDensity.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Kernel Density Plots for Climate-Smart Spatial Plans — splnr_plot_climKernelDensity","text":"soln type = \"Normal\": list prioritizr solution objects (e.g., list(s1, s2)). solution must contain metric column solution_1 column. type = \"Basic\": single prioritizr solution sf object. solution_names character vector names corresponding solution soln type = \"Normal\". used type = \"Basic\". Defaults NA. climate_names character string name climate type character string specifying plotting style. Must either \"Normal\" \"Basic\". Defaults \"Normal\". colorMap character string indicating viridis color map use (e.g., \"\", \"B\", \"C\", \"D\", \"E\"). See https://ggplot2.tidyverse.org/reference/scale_viridis.html options. Defaults \"C\". legendTitle character string expression title legend. Defaults expression(\" \\u00B0C y\"^\"-1\" * \"\"), representing \"°C year⁻¹\". xAxisLab character string expression x-axis label, depending climate metric input. Defaults expression(\"Climate warming ( \\u00B0C y\"^\"-1\" * \")\").","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climKernelDensity.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Kernel Density Plots for Climate-Smart Spatial Plans — splnr_plot_climKernelDensity","text":"ggplot object representing kernel density plot.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climKernelDensity.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Kernel Density Plots for Climate-Smart Spatial Plans — splnr_plot_climKernelDensity","text":"wrapper function intelligently dispatches either splnr_plot_climKernelDensity_Fancy() (type = \"Normal\") splnr_plot_climKernelDensity_Basic() (type = \"Basic\") based type parameter. \"Normal\" (Fancy) style suitable detailed comparisons, accommodating list solutions custom axis labels, \"Basic\" style streamlined clarity quick interpretation, ideal stakeholder engagement. underlying functions require prioritizr solution containing climate metric column climate metric information prioritizr solution column indicating selected planning units.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_climKernelDensity.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Kernel Density Plots for Climate-Smart Spatial Plans — splnr_plot_climKernelDensity","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' and 'dat_clim' are existing sf objects # in your package. # Prepare data for a climate-priority area approach (CPA) target <- dat_species_bin %>% sf::st_drop_geometry() %>% colnames() %>% data.frame() %>% setNames(c(\"feature\")) %>% dplyr::mutate(target = 0.3) CPA <- splnr_climate_priorityAreaApproach( features = dat_species_bin, metric = dat_clim, targets = target, direction = -1, refugiaTarget = 1 ) # Join climate metric to features for the problem out_sf <- CPA$Features %>% dplyr::mutate(Cost_None = rep(1, dim(.)[[1]])) %>% # Ensure enough costs for PUs sf::st_join(dat_clim, join = sf::st_equals) # Define features for the prioritizr problem usedFeatures <- out_sf %>% sf::st_drop_geometry() %>% dplyr::select(-tidyselect::starts_with(\"Cost_\"), -\"metric\") %>% names() # Create and solve a prioritizr problem p1 <- prioritizr::problem(out_sf, usedFeatures, \"Cost_None\") %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(CPA$Targets$target) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_solnClim <- prioritizr::solve.ConservationProblem(p1) # Example 1: Basic kernel density plot plot_basic_kde <- splnr_plot_climKernelDensity(soln = dat_solnClim, type = \"Basic\") print(plot_basic_kde) # Example 2: Normal (Fancy) kernel density plot for a single solution plot_normal_kde_single <- splnr_plot_climKernelDensity( soln = list(dat_solnClim), solution_names = c(\"Solution 1\"), type = \"Normal\" ) print(plot_normal_kde_single) # Example 3: Normal (Fancy) plot comparing two solutions (create a dummy second solution) # For demonstration, let's create another dummy solution dat_solnClim_2 <- dat_solnClim %>% dplyr::mutate(solution_1 = sample(c(0, 1), n(), replace = TRUE)) # Randomize selection plot_normal_kde_multi <- splnr_plot_climKernelDensity( soln = list(dat_solnClim, dat_solnClim_2), solution_names = c(\"Solution A\", \"Solution B\"), climate_names = \"metric\", type = \"Normal\", colorMap = \"plasma\", legendTitle = \"Climate Value\", xAxisLab = \"Climate Metric (units)\" ) print(plot_normal_kde_multi) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_comparison.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Solution Comparison — splnr_plot_comparison","title":"Plot Solution Comparison — splnr_plot_comparison","text":"splnr_plot_comparison() function spatially visualizes differences two prioritizr conservation solutions. helps understanding Planning Units common, added, removed two scenarios.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_comparison.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Solution Comparison — splnr_plot_comparison","text":"","code":"splnr_plot_comparison( soln1, soln2, legendTitle = \"Scenario 2 compared to Scenario 1:\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_comparison.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Solution Comparison — splnr_plot_comparison","text":"soln1 first prioritizr solution, expected sf object solution_1 column. serves baseline comparison. soln2 second prioritizr solution, expected sf object solution_1 column. solution compared soln1. legendTitle character string title legend. Defaults \"Scenario 2 compared Scenario 1:\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_comparison.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Solution Comparison — splnr_plot_comparison","text":"ggplot object representing spatial comparison two solutions.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_comparison.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot Solution Comparison — splnr_plot_comparison","text":"Conservation planning often involves comparing outputs different conservation problems scenarios. function facilitates comparison requiring two sf objects, soln1 soln2, representing prioritizr solution containing solution_1 column (binary, indicating selected vs. selected). function categorizes Planning Units \"\" (selected ), \"Added (+)\" (selected soln2 soln1), \"Removed (-)\" (selected soln1 soln2). plots categories distinct colors clear visualization. output ggplot object can combined splnr_gg_add() customization.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_comparison.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Solution Comparison — splnr_plot_comparison","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object in your package. # Create Problem 1 with 30% target and solve it. dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() # Create Problem 2 with 50% target and solve it. dat_problem2 <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.5) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln2 <- dat_problem2 %>% prioritizr::solve.ConservationProblem() # Plot the comparison between the two solutions. plot_comparison <- splnr_plot_comparison(dat_soln, dat_soln2) print(plot_comparison) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_corrMat.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Correlation Matrices of Conservation Solutions — splnr_plot_corrMat","title":"Plot Correlation Matrices of Conservation Solutions — splnr_plot_corrMat","text":"splnr_plot_corrMat() function visualizes correlation matrix prioritizr conservation solutions, typically computed using Cohen's Kappa. helps understanding agreement disagreement different spatial plans.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_corrMat.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Correlation Matrices of Conservation Solutions — splnr_plot_corrMat","text":"","code":"splnr_plot_corrMat( x, colourGradient = c(\"#BB4444\", \"#FFFFFF\", \"#4477AA\"), legendTitle = \"Correlation \\ncoefficient\", AxisLabels = NULL, plotTitle = \"\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_corrMat.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Correlation Matrices of Conservation Solutions — splnr_plot_corrMat","text":"x numeric correlation matrix prioritizr solutions. colourGradient character vector three color values: colourGradient[1]: Color high positive correlation. colourGradient[2]: Color correlation (midpoint). colourGradient[3]: Color high negative correlation. Defaults c(\"#BB4444\", \"#FFFFFF\", \"#4477AA\"). legendTitle character string title legend. Defaults \"Correlation \\ncoefficient\". AxisLabels character vector labels x y axes correlation matrix, representing names correlated solutions. NULL (default), column names x used. length vector must match number rows/columns x. plotTitle character string title plot. Defaults \"\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_corrMat.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Correlation Matrices of Conservation Solutions — splnr_plot_corrMat","text":"ggplot object representing correlation matrix plot.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_corrMat.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot Correlation Matrices of Conservation Solutions — splnr_plot_corrMat","text":"Conservation planning often involves comparing outputs various conservation problems. One effective method correlating solutions using metrics like Cohen's Kappa. function takes correlation matrix (e.g., produced spatialplanr function splnr_get_kappaCorrData()) generates heatmap visualization using ggcorrplot. plot highlights positive, negative, correlation using color gradient, labels correlation coefficients directly plot. output ggplot object can combined spatialplanr function splnr_gg_add() customization, though primary use standalone correlation visualization.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_corrMat.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Correlation Matrices of Conservation Solutions — splnr_plot_corrMat","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object in your package. # Create Problem 1 (30% target) and solve it. dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() # Create Problem 2 (50% target) and solve it. dat_problem2 <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.5) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln2 <- dat_problem2 %>% prioritizr::solve.ConservationProblem() # Get the Kappa correlation data for the two solutions. CorrMat <- splnr_get_kappaCorrData(list(dat_soln, dat_soln2), name_sol = c(\"soln1\", \"soln2\")) # Plot the correlation matrix with custom axis labels. plot_correlation_matrix <- splnr_plot_corrMat( CorrMat, AxisLabels = c(\"Solution 1\", \"Solution 2\") ) print(plot_correlation_matrix) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_cost.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot cost — splnr_plot_cost","title":"Plot cost — splnr_plot_cost","text":"splnr_plot_cost() allows plot cost within planning units planning region customisable way using ggplot2. function requires sf object cost column outputs ggobject. can combined spatialplanr function splnr_gg_add().","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_cost.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot cost — splnr_plot_cost","text":"","code":"splnr_plot_cost( cost, costName = \"Cost\", legendTitle = \"Cost\", paletteName = \"YlGnBu\", plotTitle = \"\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_cost.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot cost — splnr_plot_cost","text":"cost sf object cost prioritizr costName Name cost column legendTitle character value title legend. Can empty (\"\"). paletteName string (number) color palette use. Available palettes can found https://ggplot2.tidyverse.org/reference/scale_brewer.html. plotTitle character value title plot. Can empty (\"\").","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_cost.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot cost — splnr_plot_cost","text":"ggplot object plot","code":""},{"path":[]},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_cost.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot cost — splnr_plot_cost","text":"","code":"if (FALSE) { # \\dontrun{ dat_problem <- prioritizr::problem(dat_species_bin %>% dplyr::mutate(cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() dat_cost <- dat_soln %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])) (splnr_plot_cost(dat_cost)) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_costOverlay.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Cost Overlay on Solution — splnr_plot_costOverlay","title":"Plot Cost Overlay on Solution — splnr_plot_costOverlay","text":"splnr_plot_costOverlay() function visualizes cost Planning Unit overlaid solution prioritizr conservation problem. allows customizable ggplot2 visualization, highlighting costs within selected Planning Units.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_costOverlay.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Cost Overlay on Solution — splnr_plot_costOverlay","text":"","code":"splnr_plot_costOverlay( soln, cost = NA, costName = \"Cost\", legendTitle = \"Cost\", plotTitle = \"Solution overlaid with cost\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_costOverlay.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Cost Overlay on Solution — splnr_plot_costOverlay","text":"soln prioritizr solution object, expected sf object, containing least solution_1 column. cost sf object containing cost data Planning Units. prioritizr solution soln already contains cost column specified costName, parameter can NA (default). Otherwise, provide sf object cost data. costName character string specifying name cost column within soln object Cost object. Defaults \"Cost\". legendTitle character string title cost legend. Defaults \"Cost\". plotTitle character string subtitle plot. Defaults \"Solution overlaid cost\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_costOverlay.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Cost Overlay on Solution — splnr_plot_costOverlay","text":"ggplot object representing solution cost overlay.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_costOverlay.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot Cost Overlay on Solution — splnr_plot_costOverlay","text":"function requires prioritizr solution sf object, must contain solution_1 column indicating selected (1) unselected (0) Planning Units. also requires cost column, either present within soln object provided separately via Cost parameter. function filters solution show selected Planning Units overlays gradient representing cost. output ggplot object can customized using splnr_gg_add().","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_costOverlay.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Cost Overlay on Solution — splnr_plot_costOverlay","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object in your package. # Create a dummy prioritizr problem and solve it for demonstration. dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() # Plot the solution overlaid with cost plot_cost_overlay <- splnr_plot_costOverlay(soln = dat_soln) print(plot_cost_overlay) # Example: If cost is in a separate sf object (e.g., dat_PUs with a cost column) # Create a dummy cost column in dat_PUs for this example # Replace this with your actual cost data if it's external dat_PUs_with_cost <- dat_PUs %>% dplyr::mutate(MyCost = runif(n = dim(.)[[1]])) plot_cost_overlay_external <- splnr_plot_costOverlay( soln = dat_soln, cost = dat_PUs_with_cost, costName = \"MyCost\", legendTitle = \"Custom Cost\", plotTitle = \"Solution with External Cost\" ) print(plot_cost_overlay_external) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureNo.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot number of features — splnr_plot_featureNo","title":"Plot number of features — splnr_plot_featureNo","text":"splnr_plot_featureNo() allows use ggplot2 visually inspect number features per planning unit used inputs conservation problem. features species, map can seen visualisation species richness planning region.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureNo.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot number of features — splnr_plot_featureNo","text":"","code":"splnr_plot_featureNo( df, showLegend = TRUE, paletteName = \"YlGnBu\", plotTitle = \"Number of Features\", legendTitle = \"Features\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureNo.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot number of features — splnr_plot_featureNo","text":"df sf object features showLegend logical command whether show legend solution (Default: TRUE). paletteName string (number) color palette use. Available palettes can found https://ggplot2.tidyverse.org/reference/scale_brewer.html. plotTitle character value title plot. Can empty (\"\"). legendTitle character value title legend. Can empty (\"\").","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureNo.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot number of features — splnr_plot_featureNo","text":"ggplot object plot","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureNo.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot number of features — splnr_plot_featureNo","text":"function requires sf object binary information features want include richness plot (0 absences 1 presences, example created continuous data spatialplanr function splnr_apply_cutoffs()). outputs ggobject can combined spatialplanr function splnr_gg_add().","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureNo.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot number of features — splnr_plot_featureNo","text":"","code":"if (FALSE) { # \\dontrun{ (splnr_plot_featureNo(dat_species_bin)) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureRep.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Feature Representation (Target Achievement) — splnr_plot_featureRep","title":"Plot Feature Representation (Target Achievement) — splnr_plot_featureRep","text":"splnr_plot_featureRep() creates bar plot visualize representation features conservation solution, indicating well targets met. can categorize features, rename clarity, optionally display target levels plot.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureRep.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Feature Representation (Target Achievement) — splnr_plot_featureRep","text":"","code":"splnr_plot_featureRep( df, category = NA, categoryFeatureCol = NA, renameFeatures = FALSE, namesToReplace = NA, nr = 1, showTarget = NA, plotTitle = \"\", sort_by = \"category\", ... )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureRep.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Feature Representation (Target Achievement) — splnr_plot_featureRep","text":"df data.frame tibble containing feature representation information. typically results splnr_get_featureRep() function include least feature relative_held columns, optionally target incidental. category named data.frame tibble provides grouping information features. contain column can matched feature column df (default, column named feature, specified categoryFeatureCol), column named category grouping plot output. NA (default), categorization applied. categoryFeatureCol character string specifying name column category data frame contains feature information matched df$feature. used category data frame column explicitly named 'feature'. renameFeatures logical value. TRUE, feature names plot replaced common names provided namesToReplace. namesToReplace data.frame containing two columns: 'nameVariable' (original feature name) 'nameCommon' (common name replace ). Required renameFeatures TRUE. nr integer specifying number rows legend. showTarget logical value. TRUE, transparent bar representing target level feature shown plot. plotTitle character string title plot. Can empty string \"\" (default). sort_by character string specifying column sort features x-axis. Accepted values include: \"category\", \"feature\", \"target\", \"representation\" (relative_held), \"difference\" (representation target). ... arguments passed ggplot2::theme() customize plot's theme.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureRep.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Feature Representation (Target Achievement) — splnr_plot_featureRep","text":"ggplot2::ggplot object representing feature representation bar plot.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_featureRep.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Feature Representation (Target Achievement) — splnr_plot_featureRep","text":"","code":"# For a full example, ensure 'dat_species_bin', 'dat_category' are available # (e.g., from the 'prioritizrdata' package or defined in your package's data) pDat <- prioritizr::problem(dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) soln <- pDat %>% prioritizr::solve.ConservationProblem() # including incidental species coverage df <- splnr_get_featureRep( # Assuming splnr_get_featureRep is available soln = soln, pDat = pDat ) #> No non-selected features to process. #> No specific climate-smart approach detected or standard approach used. Using targets from 'pDat'. # Basic plot with categories and targets shown (splnr_plot_featureRep(df, category = dat_category, showTarget = TRUE)) #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA # Plot without categories, sorted by feature name (splnr_plot_featureRep(df, showTarget = TRUE, sort_by = \"feature\")) #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA # Example with feature renaming names_to_replace_df <- tibble::tibble( nameVariable = c(\"Spp1\", \"Spp2\"), nameCommon = c(\"Species One\", \"Species Two\") ) (splnr_plot_featureRep(df, category = dat_category, renameFeatures = TRUE, namesToReplace = names_to_replace_df, showTarget = TRUE )) #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA #> Warning: argument is not numeric or logical: returning NA"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_importanceScore.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Importance Score of Planning Units — splnr_plot_importanceScore","title":"Plot Importance Score of Planning Units — splnr_plot_importanceScore","text":"splnr_plot_importanceScore() function visualizes importance scores (irreplaceability) Planning Units prioritizr conservation problem using ggplot2. supports different methods calculating importance scores.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_importanceScore.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Importance Score of Planning Units — splnr_plot_importanceScore","text":"","code":"splnr_plot_importanceScore( soln, pDat, method = \"Ferrier\", plotTitle = \"\", colorMap = \"A\", decimals = 4, legendTitle = \"Importance Score\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_importanceScore.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Importance Score of Planning Units — splnr_plot_importanceScore","text":"soln prioritizr solution object, expected sf object. contain solution_1 column. pDat prioritizr problem object solved generate soln. method character string specifying method calculating importance scores. Must one \"Ferrier\", \"RWR\", \"RC\". Defaults \"Ferrier\". plotTitle character string title plot. Defaults \"\". colorMap character string indicating viridis color map use (e.g., \"\", \"B\", \"C\", \"D\", \"E\"). See https://ggplot2.tidyverse.org/reference/scale_viridis.html options. Defaults \"\". decimals number decimal places display importance scores legend. Ferrier Score often benefits higher number decimals (>4). Defaults 4. legendTitle character string title legend. Defaults \"Importance Score\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_importanceScore.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Importance Score of Planning Units — splnr_plot_importanceScore","text":"ggplot object representing plot importance scores.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_importanceScore.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot Importance Score of Planning Units — splnr_plot_importanceScore","text":"Importance scores quantify irreplaceability Planning Unit conservation solution. function leverages prioritizr package calculate plot three different types importance scores: \"Ferrier\": Ferrier Score, applicable minimum set objective function. often requires higher number decimals (e.g., >4) accurate representation. \"RWR\": Rarity Weighted Richness Score. \"RC\": Replacement Cost. method generally recommended prioritizr development team robustness, can computationally intensive take longer, especially problems many planning units features. function outputs ggplot object can combined spatialplanr function splnr_gg_add() customization.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_importanceScore.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Importance Score of Planning Units — splnr_plot_importanceScore","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' and 'dat_PUs' are existing sf objects in your package. # Create a dummy prioritizr problem and solve it for demonstration. dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() # Plot importance score using the \"Ferrier\" method. plot_ferrier_importance <- splnr_plot_importanceScore( soln = dat_soln, pDat = dat_problem, method = \"Ferrier\", decimals = 4, plotTitle = \"Ferrier Importance Score\" ) print(plot_ferrier_importance) # Plot importance score using the \"RWR\" (Rarity Weighted Richness) method. plot_rwr_importance <- splnr_plot_importanceScore( soln = dat_soln, pDat = dat_problem, method = \"RWR\", decimals = 2, plotTitle = \"Rarity Weighted Richness\" ) print(plot_rwr_importance) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_selectionFreq.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Planning Unit Selection Frequency — splnr_plot_selectionFreq","title":"Plot Planning Unit Selection Frequency — splnr_plot_selectionFreq","text":"splnr_plot_selectionFreq() function visualizes selection frequency Planning Units across array prioritizr solutions. useful understanding areas consistently selected important conservation.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_selectionFreq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Planning Unit Selection Frequency — splnr_plot_selectionFreq","text":"","code":"splnr_plot_selectionFreq( selFreq, plotTitle = \"\", paletteName = \"Greens\", legendTitle = \"Selection \\nFrequency\" )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_selectionFreq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Planning Unit Selection Frequency — splnr_plot_selectionFreq","text":"selFreq sf object containing selection frequency data Planning Units. object must include selFreq column (e.g., generated splnr_get_selFreq()). plotTitle character string title plot. Defaults \"\". paletteName character string numeric value specifying name RColorBrewer palette use fill. Available palettes can found https://ggplot2.tidyverse.org/reference/scale_brewer.html. Defaults \"Greens\". legendTitle character string title legend. Defaults \"Selection \\nFrequency\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_selectionFreq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Planning Unit Selection Frequency — splnr_plot_selectionFreq","text":"ggplot object representing plot Planning Unit selection frequency.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_selectionFreq.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot Planning Unit Selection Frequency — splnr_plot_selectionFreq","text":"multiple spatial plans generated (either solutions different conservation problems via prioritizr portfolio approach), valuable assess robustness Planning Unit selection. function takes sf object input, must contain selFreq column representing selection frequency Planning Unit. selFreq column can generated using spatialplanr function splnr_get_selFreq(). function uses ggplot2 create spatial plot frequencies, allowing customization color palette, plot title, legend title. output ggplot object can enhanced combining spatialplanr function splnr_gg_add().","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_selectionFreq.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Planning Unit Selection Frequency — splnr_plot_selectionFreq","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object in your package. # Create a dummy prioritizr problem. dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) # Create a conservation problem that contains a portfolio of solutions (e.g., 5 solutions). dat_soln_portfolio <- dat_problem %>% prioritizr::add_cuts_portfolio(number_solutions = 5) %>% prioritizr::solve.ConservationProblem() # Calculate selection frequency using splnr_get_selFreq(). selFreq_data <- splnr_get_selFreq(solnMany = dat_soln_portfolio, type = \"portfolio\") # Plot the selection frequency. plot_selection_frequency <- splnr_plot_selectionFreq(selFreq_data) print(plot_selection_frequency) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_solution.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot prioritizr Solution — splnr_plot_solution","title":"Plot prioritizr Solution — splnr_plot_solution","text":"splnr_plot_solution() function visualizes solution prioritizr conservation problem using ggplot2. can handle single-zone multi-zone solutions, offering customization colors legend.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot prioritizr Solution — splnr_plot_solution","text":"","code":"splnr_plot_solution( soln, colorVals = c(\"#c6dbef\", \"#3182bd\"), showLegend = TRUE, legendLabels = c(\"Not selected\", \"Selected\"), plotTitle = \"Solution\", legendTitle = \"Planning Units\", zones = FALSE )"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot prioritizr Solution — splnr_plot_solution","text":"soln prioritizr solution object, expected sf object. colorVals character vector color values. single-zone problems, typically two colors (\"selected\" \"Selected\"). multi-zone problems, length match number zones plus one (\"selected\"). showLegend logical value indicating whether display legend solution. Defaults TRUE. legendLabels character vector strings label legend values. length must match number levels solution (e.g., \"selected\", \"Selected\" single zone; \"selected\", \"Zone 1\", \"Zone 2\" two zones). plotTitle character string title plot. Can empty (\"\"). Defaults \"Solution\". legendTitle character string title legend. Can empty (\"\"). Defaults \"Planning Units\". zones logical value. Set TRUE prioritizr solution contains multiple zones (.e., multi-zone problem). Defaults FALSE.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot prioritizr Solution — splnr_plot_solution","text":"ggplot object representing plot conservation solution.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_solution.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot prioritizr Solution — splnr_plot_solution","text":"function requires prioritizr solution object, sf object containing least solution_1 column (single-zone problems) solution_1_zone1, solution_1_zone2, etc. (multi-zone problems). outputs ggplot object, can customized combining spatialplanr function splnr_gg_add(). multi-zone problems (zones = TRUE), function sums selected zones Planning Unit plots resulting combined selection. colorVals legendLabels provided match number selection levels (e.g., \"selected\", \"Zone 1\", \"Zone 2\", etc.).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_plot_solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot prioritizr Solution — splnr_plot_solution","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_bin' is an existing sf object in your package. # Example 1: Plotting a single-zone prioritizr solution dat_problem <- prioritizr::problem( dat_species_bin %>% dplyr::mutate(Cost = runif(n = dim(.)[[1]])), features = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), cost_column = \"Cost\" ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(0.3) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) dat_soln <- dat_problem %>% prioritizr::solve.ConservationProblem() plot_soln_single_zone <- splnr_plot_solution(dat_soln) print(plot_soln_single_zone) # Example 2: Plotting a multi-zone prioritizr solution # Create targets for two zones t2 <- matrix(NA, ncol = 2, nrow = 5) t2[, 1] <- 0.1 t2[, 2] <- 0.05 # Define zones for species z2 <- prioritizr::zones( \"zone 1\" = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\"), \"zone 2\" = c(\"Spp1\", \"Spp2\", \"Spp3\", \"Spp4\", \"Spp5\") ) # Create a multi-zone problem (requires as many cost columns as zones) p2 <- prioritizr::problem( dat_species_bin %>% dplyr::mutate( Cost1 = runif(n = dim(.)[[1]]), Cost2 = runif(n = dim(.)[[1]]) ), z2, cost_column = c(\"Cost1\", \"Cost2\") ) %>% prioritizr::add_min_set_objective() %>% prioritizr::add_relative_targets(t2) %>% prioritizr::add_binary_decisions() %>% prioritizr::add_default_solver(verbose = FALSE) s2 <- p2 %>% prioritizr::solve.ConservationProblem() plot_soln_multi_zone <- splnr_plot_solution(s2, zones = TRUE, colorVals = c(\"#c6dbef\", \"#3182bd\", \"black\"), # Colors for Not selected, Zone 1, Zone 2 legendLabels = c(\"Not selected\", \"Zone 1\", \"Zone 2\") ) print(plot_soln_multi_zone) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_replace_NAs.html","id":null,"dir":"Reference","previous_headings":"","what":"Remove NAs from Spatial Data Using Nearest Neighbour — splnr_replace_NAs","title":"Remove NAs from Spatial Data Using Nearest Neighbour — splnr_replace_NAs","text":"splnr_replace_NAs() replaces missing (NA) values specified column sf dataframe value nearest spatial neighbor.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_replace_NAs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Remove NAs from Spatial Data Using Nearest Neighbour — splnr_replace_NAs","text":"","code":"splnr_replace_NAs(df, vari)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_replace_NAs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Remove NAs from Spatial Data Using Nearest Neighbour — splnr_replace_NAs","text":"df sf dataframe. dataframe must contain geometry column vari column potential NA values. vari character string specifying name column df NA values removed replaced. column must exist df.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_replace_NAs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Remove NAs from Spatial Data Using Nearest Neighbour — splnr_replace_NAs","text":"sf object identical input df, NA values vari column replaced values nearest non-NA neighbors. NAs found, original df returned unchanged.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_replace_NAs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Remove NAs from Spatial Data Using Nearest Neighbour — splnr_replace_NAs","text":"function useful imputing missing data spatial contexts. identifies Planning Units NA values vari column. , finds geographically closest Planning Unit NA value vari, copies non-missing value. approach leverages spatial autocorrelation often present environmental species data. st_nearest_feature() function sf package used determining closest neighbor.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_replace_NAs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Remove NAs from Spatial Data Using Nearest Neighbour — splnr_replace_NAs","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_prob' is an existing sf object in your package. # For demonstration, let's artificially introduce some NAs in 'Spp2'. df_with_na <- dat_species_prob %>% dplyr::mutate(Spp2 = ifelse(runif(n()) < 0.2, NA, Spp2)) # Replace NAs in 'Spp2' using nearest neighbor imputation. df_no_na <- splnr_replace_NAs(df = df_with_na, vari = \"Spp2\") print(sum(is.na(df_no_na$Spp2))) # Should be 0 if successful } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_scale_01.html","id":null,"dir":"Reference","previous_headings":"","what":"Scale Spatial Layers to Between 0 and 1 — splnr_scale_01","title":"Scale Spatial Layers to Between 0 and 1 — splnr_scale_01","text":"splnr_scale_01() re-scales numeric values specified column sf dataframe range 0 1. particularly useful normalizing data like probabilities costs.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_scale_01.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Scale Spatial Layers to Between 0 and 1 — splnr_scale_01","text":"","code":"splnr_scale_01(dat, col_name)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_scale_01.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Scale Spatial Layers to Between 0 and 1 — splnr_scale_01","text":"dat sf dataframe containing column scaled. col_name character string specifying name numeric column dat needs scaled.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_scale_01.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Scale Spatial Layers to Between 0 and 1 — splnr_scale_01","text":"sf dataframe identical input dat, values col_name column re-scaled 0 1.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_scale_01.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Scale Spatial Layers to Between 0 and 1 — splnr_scale_01","text":"function inspects maximum value (mx) col_name column. divides values column divi factor bring 0-1 range. divi factor determined heuristically: mx > 100, divi 1000. mx > 10, divi 100. mx > 1, divi 10. mx <= 1, division performed (divi 1), data already within desired range. approach ensures data scaled appropriately without hardcoding fixed division factor.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_scale_01.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Scale Spatial Layers to Between 0 and 1 — splnr_scale_01","text":"","code":"if (FALSE) { # \\dontrun{ # Scale the 'Spp1' column. df_scaled_spp1 <- splnr_scale_01(dat = dat_species_prob, col_name = \"Spp1\") print(df_scaled_spp1) # Example where max is already <= 1 df_already_scaled <- dat_species_prob %>% dplyr::mutate(Spp1 = Spp1 / 100) df_no_change <- splnr_scale_01(dat = df_already_scaled, col_name = \"Spp1\") print(df_no_change) # Spp1 values should remain unchanged } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byCategory.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign Targets by Category — splnr_targets_byCategory","title":"Assign Targets by Category — splnr_targets_byCategory","text":"splnr_targets_byCategory() function assigns conservation targets features (e.g., species) based assigned categories. allows differentiated conservation goals different groups features.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byCategory.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign Targets by Category — splnr_targets_byCategory","text":"","code":"splnr_targets_byCategory(dat, catTarg, catName = \"Category\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byCategory.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign Targets by Category — splnr_targets_byCategory","text":"dat sf object (data frame) containing features associated categories. row represent feature (e.g., species) attributes, including category. catTarg named numeric vector names categories (e.g., \"Group1\", \"Endangered\") values corresponding conservation targets (e.g., 0.5, 0.8). catName character string specifying name column dat contains category information. Defaults \"Category\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byCategory.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign Targets by Category — splnr_targets_byCategory","text":"sf object (data frame) identical input dat, additional column named target containing assigned conservation target feature. Features whose categories found catTarg NA target column unless already 'target' column.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byCategory.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Assign Targets by Category — splnr_targets_byCategory","text":"function useful conservation planning different types features (e.g., endangered species, common species, ecosystem types) require distinct conservation targets. performs left join provided named vector (catTarg) names correspond categories data values desired targets. dat input sf object (data frame) contains column (catName) identifying category feature.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byCategory.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Assign Targets by Category — splnr_targets_byCategory","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_category' is an existing sf object in your package # with a column named \"category\" and other feature data. # Example: Assign targets based on predefined categories targets_by_group <- splnr_targets_byCategory( dat = dat_category, # Assuming dat_category has a 'category' column catTarg = c(\"Group1\" = 0.5, \"Group2\" = 0.2), catName = \"category\" ) print(targets_by_group) # Example: Assign targets with a different category column name dat_alt_cat <- data.frame(Feature = letters[1:5], Type = c(\"A\", \"B\", \"A\", \"C\", \"B\")) targets_by_type <- splnr_targets_byCategory( dat = dat_alt_cat, catTarg = c(\"A\" = 0.7, \"B\" = 0.4), catName = \"Type\" ) print(targets_by_type) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byIUCN.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign Targets by IUCN Red List Categories — splnr_targets_byIUCN","title":"Assign Targets by IUCN Red List Categories — splnr_targets_byIUCN","text":"splnr_targets_byIUCN() function assigns conservation targets species based IUCN Red List categories. allows prioritizing species higher risk extinction stringent conservation goals.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byIUCN.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign Targets by IUCN Red List Categories — splnr_targets_byIUCN","text":"","code":"splnr_targets_byIUCN(dat, IUCN_target, IUCN_col = \"IUCN_Category\")"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byIUCN.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign Targets by IUCN Red List Categories — splnr_targets_byIUCN","text":"dat dataframe sf object containing species information, including column IUCN categories. IUCN_target Either: single numeric value (e.g., 0.3) apply target threatened IUCN categories (\"EX\", \"EW\", \"CR\", \"EN\", \"VU\"). named numeric vector (e.g., c(\"EX\" = 0.8, \"CR\" = 0.6)) apply specific targets particular IUCN categories. IUCN_col character string specifying name column dat contains IUCN category information. Defaults \"IUCN_Category\".","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byIUCN.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign Targets by IUCN Red List Categories — splnr_targets_byIUCN","text":"dataframe sf object identical input dat, updated newly added target column reflecting assigned conservation goals.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byIUCN.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Assign Targets by IUCN Red List Categories — splnr_targets_byIUCN","text":"function crucial integrating species' extinction risk conservation planning. allows specify targets either single numeric value (applied 'threatened' IUCN categories) named numeric vector specific categories. Species can extracted based IUCN categories using spatialplanr function splnr_get_IUCNRedList(). Important: access IUCN database (e.g., via splnr_get_IUCNRedList()), need API login token. token, obtained rredlist::rl_use_iucn(), must set environment variable named IUCN_REDLIST_KEY (e.g., Sys.setenv(IUCN_REDLIST_KEY = \"[Token]\")). function checks 'target' column already exists dat. , creates one. exists, new targets coalesced existing ones, allowing sequential application refinement targets. \"threatened\" IUCN categories considered target assignment (single IUCN_target provided) : \"EX\" (Extinct), \"EW\" (Extinct Wild), \"CR\" (Critically Endangered), \"EN\" (Endangered), \"VU\" (Vulnerable).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byIUCN.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Assign Targets by IUCN Red List Categories — splnr_targets_byIUCN","text":"","code":"if (FALSE) { # \\dontrun{ # Example 1: Assigning specific targets to categories # Create a dummy dataframe resembling output from splnr_get_IUCNRedList df_species_iucn <- data.frame( Species = c(\"Diomedea exulans\", \"Hippocampus kuda\", \"Squatina squatina\", \"Common Dolphin\"), IUCN_Category = c(\"VU\", \"EN\", \"CR\", \"LC\") ) iucn_specific_targets <- c(\"EX\" = 0.9, \"EW\" = 0.8, \"CR\" = 0.75, \"EN\" = 0.6, \"VU\" = 0.5) df_with_iucn_targets <- splnr_targets_byIUCN( dat = df_species_iucn, IUCN_target = iucn_specific_targets, IUCN_col = \"IUCN_Category\" ) print(df_with_iucn_targets) # Example 2: Assigning a single target to all threatened categories df_single_target <- splnr_targets_byIUCN( dat = df_species_iucn, IUCN_target = 0.4, # Apply 40% target to all threatened species IUCN_col = \"IUCN_Category\" ) print(df_single_target) # Example 3: When 'dat' already has a 'target' column df_pre_targets <- data.frame( Species = c(\"A\", \"B\", \"C\"), IUCN_Category = c(\"CR\", \"LC\", \"EN\"), target = c(0.1, 0.2, 0.1) # Existing targets ) iucn_update_targets <- c(\"CR\" = 0.7) # Only update CR df_updated_targets <- splnr_targets_byIUCN(df_pre_targets, iucn_update_targets) print(df_updated_targets) } # }"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byInverseArea.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign Targets by Inverse Area — splnr_targets_byInverseArea","title":"Assign Targets by Inverse Area — splnr_targets_byInverseArea","text":"function calculates inverse area targets conservation feature within sf dataframe, based areal coverage. target set inversely proportional feature's area, ranging specified minimum (target_min) maximum (target_max).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byInverseArea.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign Targets by Inverse Area — splnr_targets_byInverseArea","text":"","code":"splnr_targets_byInverseArea(df, target_min, target_max)"},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byInverseArea.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign Targets by Inverse Area — splnr_targets_byInverseArea","text":"df sf dataframe containing features (e.g., species distribution data) calculate inverse area targets. column (excluding geometry) represent feature, row Planning Unit. target_min numeric value 0 1 (inclusive) specifying minimum target percentage. target widespread feature. target_max numeric value 0 1 (inclusive) specifying maximum target percentage. target rarest feature.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byInverseArea.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign Targets by Inverse Area — splnr_targets_byInverseArea","text":"tibble (data frame) two columns: Species (feature name) target (calculated inverse area target feature).","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byInverseArea.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Assign Targets by Inverse Area — splnr_targets_byInverseArea","text":"inverse area target approach aims assign higher conservation targets features smaller overall distribution areal coverage within study region. can particularly useful prioritizing rare range-restricted features. calculation proceeds follows: area single Planning Unit determined. total area study region estimated multiplying number Planning Units individual Planning Unit area. feature (species), total area across Planning Units calculated. target feature scaled target_min target_max features smaller areas receive targets closer target_max, features larger areas receive targets closer target_min. input df expected sf object columns (excluding geometry) represent different features (e.g., species presence/absence) rows represent Planning Units.","code":""},{"path":"https://mathmarecol.github.io/spatialplanr/reference/splnr_targets_byInverseArea.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Assign Targets by Inverse Area — splnr_targets_byInverseArea","text":"","code":"if (FALSE) { # \\dontrun{ # Assuming 'dat_species_prob' is an existing sf object in your package, # representing species distribution in planning units. # Calculate inverse area targets with a range from 30% to 80%. targets_inverse_area <- dat_species_prob %>% splnr_targets_byInverseArea(target_min = 0.3, target_max = 0.8) print(targets_inverse_area) # Example with a different target range (e.g., 20% to 70%) targets_custom_range <- dat_species_prob %>% splnr_targets_byInverseArea(target_min = 0.2, target_max = 0.7) print(targets_custom_range) } # }"}]