From cffa0ced0f987aa6b33f3b98c0c711ba8abc9a5c Mon Sep 17 00:00:00 2001 From: wilsonfreitas Date: Sun, 22 Mar 2026 21:14:50 +0000 Subject: [PATCH] deploy: 5a6f90cc8565b0ae61bdf393fdf1f44d8c4dbe16 --- CODE_OF_CONDUCT.html | 639 - about.html | 554 - generate.py | 417 + index.html | 14095 ++++++++++++++-- projects.csv | 496 + projects.html | 575 - search.json | 205 - ...p-dea667461a5c81afc9ba75ce94cd63f3.min.css | 12 - site_libs/bootstrap/bootstrap-icons.css | 2106 --- site_libs/bootstrap/bootstrap-icons.woff | Bin 180288 -> 0 bytes site_libs/bootstrap/bootstrap.min.js | 7 - site_libs/clipboard/clipboard.min.js | 7 - .../crosstalk-1.2.2/css/crosstalk.min.css | 1 - site_libs/crosstalk-1.2.2/js/crosstalk.js | 1474 -- site_libs/crosstalk-1.2.2/js/crosstalk.js.map | 37 - site_libs/crosstalk-1.2.2/js/crosstalk.min.js | 2 - .../crosstalk-1.2.2/js/crosstalk.min.js.map | 1 - site_libs/crosstalk-1.2.2/scss/crosstalk.scss | 75 - .../datatables-binding-0.34.0/datatables.js | 1539 -- .../datatables-crosstalk.css | 32 - .../css/jquery.dataTables.extra.css | 28 - .../css/jquery.dataTables.min.css | 1 - .../js/jquery.dataTables.min.js | 4 - site_libs/htmltools-fill-0.5.9/fill.css | 21 - site_libs/htmlwidgets-1.6.4/htmlwidgets.js | 901 - site_libs/jquery-3.6.0/jquery-3.6.0.js | 10881 ------------ site_libs/jquery-3.6.0/jquery-3.6.0.min.js | 2 - site_libs/jquery-3.6.0/jquery-3.6.0.min.map | 1 - site_libs/quarto-html/anchor.min.js | 9 - site_libs/quarto-html/popper.min.js | 6 - ...hting-845c23b38eaddc0f92fda52bfe77a8c8.css | 236 - site_libs/quarto-html/quarto.js | 845 - site_libs/quarto-html/tabsets/tabsets.js | 95 - site_libs/quarto-html/tippy.css | 1 - site_libs/quarto-html/tippy.umd.min.js | 2 - site_libs/quarto-nav/headroom.min.js | 7 - site_libs/quarto-nav/quarto-nav.js | 325 - site_libs/quarto-search/autocomplete.umd.js | 3 - site_libs/quarto-search/fuse.min.js | 9 - site_libs/quarto-search/quarto-search.js | 1457 -- static/main.js | 318 + static/style.css | 860 + 42 files changed, 14855 insertions(+), 23431 deletions(-) delete mode 100644 CODE_OF_CONDUCT.html delete mode 100644 about.html create mode 100644 generate.py create mode 100644 projects.csv delete mode 100644 projects.html delete mode 100644 search.json delete mode 100644 site_libs/bootstrap/bootstrap-dea667461a5c81afc9ba75ce94cd63f3.min.css delete mode 100644 site_libs/bootstrap/bootstrap-icons.css delete mode 100644 site_libs/bootstrap/bootstrap-icons.woff delete mode 100644 site_libs/bootstrap/bootstrap.min.js delete mode 100644 site_libs/clipboard/clipboard.min.js delete mode 100644 site_libs/crosstalk-1.2.2/css/crosstalk.min.css delete mode 100644 site_libs/crosstalk-1.2.2/js/crosstalk.js delete mode 100644 site_libs/crosstalk-1.2.2/js/crosstalk.js.map delete mode 100644 site_libs/crosstalk-1.2.2/js/crosstalk.min.js delete mode 100644 site_libs/crosstalk-1.2.2/js/crosstalk.min.js.map delete mode 100644 site_libs/crosstalk-1.2.2/scss/crosstalk.scss delete mode 100644 site_libs/datatables-binding-0.34.0/datatables.js delete mode 100644 site_libs/datatables-css-0.0.0/datatables-crosstalk.css delete mode 100644 site_libs/dt-core-1.13.6/css/jquery.dataTables.extra.css delete mode 100644 site_libs/dt-core-1.13.6/css/jquery.dataTables.min.css delete mode 100644 site_libs/dt-core-1.13.6/js/jquery.dataTables.min.js delete mode 100644 site_libs/htmltools-fill-0.5.9/fill.css delete mode 100644 site_libs/htmlwidgets-1.6.4/htmlwidgets.js delete mode 100644 site_libs/jquery-3.6.0/jquery-3.6.0.js delete mode 100644 site_libs/jquery-3.6.0/jquery-3.6.0.min.js delete mode 100644 site_libs/jquery-3.6.0/jquery-3.6.0.min.map delete mode 100644 site_libs/quarto-html/anchor.min.js delete mode 100644 site_libs/quarto-html/popper.min.js delete mode 100644 site_libs/quarto-html/quarto-syntax-highlighting-845c23b38eaddc0f92fda52bfe77a8c8.css delete mode 100644 site_libs/quarto-html/quarto.js delete mode 100644 site_libs/quarto-html/tabsets/tabsets.js delete mode 100644 site_libs/quarto-html/tippy.css delete mode 100644 site_libs/quarto-html/tippy.umd.min.js delete mode 100644 site_libs/quarto-nav/headroom.min.js delete mode 100644 site_libs/quarto-nav/quarto-nav.js delete mode 100644 site_libs/quarto-search/autocomplete.umd.js delete mode 100644 site_libs/quarto-search/fuse.min.js delete mode 100644 site_libs/quarto-search/quarto-search.js create mode 100644 static/main.js create mode 100644 static/style.css diff --git a/CODE_OF_CONDUCT.html b/CODE_OF_CONDUCT.html deleted file mode 100644 index cf9d8ed..0000000 --- a/CODE_OF_CONDUCT.html +++ /dev/null @@ -1,639 +0,0 @@ - - - - - - - - - -Contributor Covenant Code of Conduct – Awesome Quant - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - - - -
- -
-
-

Contributor Covenant Code of Conduct

-
- - - -
- - - - -
- - - -
- - -
-

Our Pledge

-

We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.

-

We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

-
-
-

Our Standards

-

Examples of behavior that contributes to a positive environment for our community include:

-
    -
  • Demonstrating empathy and kindness toward other people
  • -
  • Being respectful of differing opinions, viewpoints, and experiences
  • -
  • Giving and gracefully accepting constructive feedback
  • -
  • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
  • -
  • Focusing on what is best not just for us as individuals, but for the overall community
  • -
-

Examples of unacceptable behavior include:

-
    -
  • The use of sexualized language or imagery, and sexual attention or advances of any kind
  • -
  • Trolling, insulting or derogatory comments, and personal or political attacks
  • -
  • Public or private harassment
  • -
  • Publishing others’ private information, such as a physical or email address, without their explicit permission
  • -
  • Other conduct which could reasonably be considered inappropriate in a professional setting
  • -
-
-
-

Enforcement Responsibilities

-

Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

-

Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

-
-
-

Scope

-

This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

-
-
-

Enforcement

-

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at awesom3quant@gmail.com. All complaints will be reviewed and investigated promptly and fairly.

-

All community leaders are obligated to respect the privacy and security of the reporter of any incident.

-
-
-

Enforcement Guidelines

-

Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

-
-

1. Correction

-

Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

-

Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

-
-
-

2. Warning

-

Community Impact: A violation through a single incident or series of actions.

-

Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

-
-
-

3. Temporary Ban

-

Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

-

Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

-
-
-

4. Permanent Ban

-

Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

-

Consequence: A permanent ban from any sort of public interaction within the community.

-
-
-
-

Attribution

-

This Code of Conduct is adapted from the Contributor Covenant, version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

-

Community Impact Guidelines were inspired by Mozilla’s code of conduct enforcement ladder.

-

For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

- - -
- -
- -
- - - - - \ No newline at end of file diff --git a/about.html b/about.html deleted file mode 100644 index 959c280..0000000 --- a/about.html +++ /dev/null @@ -1,554 +0,0 @@ - - - - - - - - - -About – Awesome Quant - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - - - -
- -
-
-

About

-
- - - -
- - - - -
- - - -
- - -

About this site

- - - -
- -
- - - - - \ No newline at end of file diff --git a/generate.py b/generate.py new file mode 100644 index 0000000..36c0468 --- /dev/null +++ b/generate.py @@ -0,0 +1,417 @@ +#!/usr/bin/env python3 +"""Parse README.md and generate a static HTML site for awesome-quant. + +Can run in two modes: +1. With projects.csv (produced by parse.py) — includes stars, last commit, etc. +2. Without CSV — parses README.md directly for a quick local preview. +""" + +import csv +import html +import re +import sys +from pathlib import Path + + +def slugify(text: str) -> str: + """Convert text to lowercase hyphen-separated slug.""" + text = text.lower().strip() + text = re.sub(r"[&/]+", "-", text) + text = re.sub(r"[^\w\s-]", "", text) + text = re.sub(r"[\s_]+", "-", text) + text = re.sub(r"-+", "-", text) + return text.strip("-") + + +def parse_readme(path: str) -> list[dict]: + """Parse README.md and return a list of project entries (no API data).""" + entries = [] + current_language = "" + current_category = "" + + re_h2 = re.compile(r"^## (.+)$") + re_h3 = re.compile(r"^### (.+)$") + re_entry = re.compile(r"^\s*- \[(.+?)\]\((.+?)\) - (.+)$") + re_github = re.compile(r"\[GitHub\]\((https://github\.com/[\w-]+/[-\w\.]+)\)") + + skip_sections = {"Languages"} + + # Strip markdown badge images before parsing + re_badge = re.compile(r"\s*!\[[^\]]*\]\([^)]*\)\s*") + + with open(path, "r", encoding="utf-8") as f: + for line in f: + line = re_badge.sub(" ", line).rstrip("\n") + + m = re_h2.match(line) + if m: + current_language = m.group(1).strip() + current_category = "" + continue + + m = re_h3.match(line) + if m: + current_category = m.group(1).strip() + continue + + if current_language in skip_sections: + continue + + m = re_entry.match(line) + if m: + name = m.group(1).strip() + url = m.group(2).strip() + desc = m.group(3).strip() + + github_url = "" + gh_match = re_github.search(desc) + if gh_match: + github_url = gh_match.group(1) + desc = re_github.sub("", desc).rstrip(". ").rstrip() + "." + elif "github.com" in url: + github_url = url + + repo = "" + if github_url: + repo_match = re.match( + r"https://github\.com/([\w-]+/[-\w\.]+)", github_url + ) + if repo_match: + repo = repo_match.group(1) + + is_cran = "cran.r-project.org" in url + is_pypi = "pypi.org" in url or "pypi.python.org" in url + is_commercial = current_language == "Commercial & Proprietary Services" + category = current_category or current_language + section_slug = slugify(category) + + entries.append( + { + "project": name, + "language": current_language, + "category": category, + "section_slug": section_slug, + "url": url, + "description": desc, + "github": bool(github_url), + "cran": is_cran, + "pypi": is_pypi, + "commercial": is_commercial, + "github_url": github_url, + "repo": repo, + "stars": 0, + "last_commit": "", + } + ) + + return entries + + +def load_csv(path: str) -> list[dict]: + """Load projects from CSV produced by parse.py.""" + entries = [] + with open(path, "r", encoding="utf-8") as f: + reader = csv.DictReader(f) + for row in reader: + # Normalize booleans + for key in ("github", "cran", "pypi", "commercial"): + row[key] = row.get(key, "").lower() in ("true", "1", "yes") + # Normalize numbers + row["stars"] = int(float(row.get("stars", 0) or 0)) + # Extract github_url and repo from CSV data + repo = row.get("repo", "") + row["github_url"] = f"https://github.com/{repo}" if repo else "" + # Clean description: strip [GitHub](url) if present + desc = row.get("description", "") + desc = re.sub( + r"\s*\[GitHub\]\(https://github\.com/[\w-]+/[-\w\.]+\)\s*", + "", + desc, + ) + desc = desc.rstrip(". ").rstrip() + if desc and not desc.endswith("."): + desc += "." + row["description"] = desc + entries.append(row) + return entries + + +def format_stars(n: int) -> str: + """Format star count for display.""" + if n >= 1000: + return f"{n / 1000:.1f}k".replace(".0k", "k") + return str(n) if n > 0 else "" + + +def build_tags_html(e: dict) -> str: + """Build tag pills for an entry.""" + esc = html.escape + tags = [] + + # Language tag + lang = e.get("language", "") + if lang and lang != "Commercial & Proprietary Services" and lang != "Related Lists": + lang_slug = slugify(lang) + tags.append( + f'' + ) + + # Section tag + section_slug = e.get("section_slug", "") + category = e.get("category", "") + if section_slug and section_slug != slugify(lang): + tags.append( + f'' + ) + + # Source tags + if e.get("github"): + tags.append( + '' + ) + if e.get("cran"): + tags.append( + '' + ) + if e.get("pypi"): + tags.append( + '' + ) + if e.get("commercial"): + tags.append( + '' + ) + + return "\n ".join(tags) + + +def generate_html(entries: list[dict]) -> str: + """Generate the full HTML page from project entries.""" + languages = sorted( + set( + e["language"] + for e in entries + if e.get("language") and e["language"] != "Languages" + ) + ) + + # Build table rows + rows = [] + for i, e in enumerate(entries, 1): + esc = html.escape + name = esc(e["project"]) + url = esc(e["url"]) + desc = esc(e["description"]) + language = esc(e.get("language", "")) + category = esc(e.get("category", "")) + github_url = esc(e.get("github_url", "")) + repo = esc(e.get("repo", "")) + stars = int(e.get("stars", 0) or 0) + last_commit = e.get("last_commit", "") or "" + is_github = e.get("github", False) + is_cran = e.get("cran", False) + is_pypi = e.get("pypi", False) + is_commercial = e.get("commercial", False) + + # Stars display + stars_html = ( + f'' + f'' + f" {format_stars(stars)}" + if stars > 0 + else "" + ) + + # Last update display + last_update_html = ( + f'{esc(last_commit)}' + if last_commit and last_commit != "error" + else "" + ) + + # Source flags for data attributes + sources = [] + if is_github: + sources.append("github") + if is_cran: + sources.append("cran") + if is_pypi: + sources.append("pypi") + if is_commercial: + sources.append("commercial") + sources_attr = esc(" ".join(sources)) + + tags_html = build_tags_html(e) + + rows.append( + f""" + {i} + + {name} + {category} + + {stars_html} + {last_update_html} + + {tags_html} + + + + + +
+

{desc}

+ +
+ + """ + ) + + total = len(entries) + total_stars = sum(int(e.get("stars", 0) or 0) for e in entries) + + return f""" + + + + + Awesome Quant + + + + + + + + Skip to content + +
+
+ +
+

Awesome Quant

+

A curated list of insanely awesome libraries, packages and resources for Quants.

+

Maintained by Wilson Freitas

+
+ {total} projects + + {len(languages)} languages + + {format_stars(total_stars)} total stars +
+ Browse the List +
+
+
+ +
+
+
+
+
+ + + / +
+
+ + + +
+ + + + + + + + + + + + +{chr(10).join(rows)} + +
#Project Stars Last Update Tags
+
+ + + +
+
+
+ +
+
+

Know a great project?

+

Contribute to the list by opening a pull request on GitHub.

+ Contribute on GitHub +
+
+
+ + + + + +""" + + +def main(): + root = Path(__file__).resolve().parent.parent + readme = root / "README.md" + csv_path = root / "site" / "projects.csv" + output = root / "site" / "index.html" + + # Prefer CSV if it exists (has stars, last commit from API) + if csv_path.exists(): + print(f"Loading from {csv_path}") + entries = load_csv(str(csv_path)) + elif readme.exists(): + print(f"Parsing {readme} (no CSV — stars/dates will be empty)") + entries = parse_readme(str(readme)) + else: + print(f"ERROR: neither {csv_path} nor {readme} found", file=sys.stderr) + sys.exit(1) + + print(f"Loaded {len(entries)} projects") + html_content = generate_html(entries) + output.write_text(html_content, encoding="utf-8") + print(f"Generated {output}") + + +if __name__ == "__main__": + main() diff --git a/index.html b/index.html index c678edb..7932eaa 100644 --- a/index.html +++ b/index.html @@ -1,1342 +1,12775 @@ - - - - - - - - - -Awesome Quant - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Awesome Quant + + + + + + + Skip to content - - -
-
- -
- -
- - - - -
- + -
-
-
Keywords
-

r packages, python packages, julia packages, software development, software engineering, financial computing, r, python, julia, rust, java

-
-
- - - - -

A curated list of insanely awesome libraries, packages and resources for Quants (Quantitative Finance).

-

-
-

Python

-
-

Numerical Libraries & Data Structures

-
    -
  • numpy - NumPy is the fundamental package for scientific computing with Python. GitHub
  • -
  • scipy - SciPy (pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software for mathematics, science, and engineering. GitHub
  • -
  • pandas - pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language. GitHub
  • -
  • polars - Polars is a blazingly fast DataFrame library for manipulating structured data. GitHub
  • -
  • quantdsl - Domain specific language for quantitative analytics in finance and trading.
  • -
  • statistics - Builtin Python library for all basic statistical calculations.
  • -
  • sympy - SymPy is a Python library for symbolic mathematics. GitHub
  • -
  • pymc3 - Probabilistic Programming in Python: Bayesian Modeling and Probabilistic Machine Learning with Theano. GitHub
  • -
  • modelx - Python reimagination of spreadsheets as formula-centric objects that are interoperable with pandas. GitHub
  • -
  • ArcticDB - High performance datastore for time series and tick data.
  • -
  • pmxt - The CCXT for prediction markets. A unified API for trading on Polymarket, Kalshi, and more.
  • -
-
-
-

Financial Instruments and Pricing

-
    -
  • OpenBB Terminal - Terminal for investment research for everyone.
  • -
  • Fincept Terminal - Advance Data Based A.I Terminal for all Types of Financial Asset Research.
  • -
  • PyQL - QuantLib’s Python port.
  • -
  • pyfin - Basic options pricing in Python. ARCHIVED
  • -
  • vollib - vollib is a python library for calculating option prices, implied volatility and greeks.
  • -
  • QuantPy - A framework for quantitative finance In python.
  • -
  • Finance-Python - Python tools for Finance.
  • -
  • ffn - A financial function library for Python.
  • -
  • pynance - Lightweight Python library for assembling and analyzing financial data.
  • -
  • tia - Toolkit for integration and analysis.
  • -
  • pysabr - SABR model Python implementation.
  • -
  • FinancePy - A Python Finance Library that focuses on the pricing and risk-management of Financial Derivatives, including fixed-income, equity, FX and credit derivatives.
  • -
  • gs-quant - Python toolkit for quantitative finance
  • -
  • willowtree - Robust and flexible Python implementation of the willow tree lattice for derivatives pricing.
  • -
  • financial-engineering - Applications of Monte Carlo methods to financial engineering projects, in Python.
  • -
  • optlib - A library for financial options pricing written in Python.
  • -
  • tf-quant-finance - High-performance TensorFlow library for quantitative finance.
  • -
  • Q-Fin - A Python library for mathematical finance.
  • -
  • Quantsbin - Tools for pricing and plotting of vanilla option prices, greeks and various other analysis around them.
  • -
  • finoptions - Complete python implementation of R package fOptions with partial implementation of fExoticOptions for pricing various options.
  • -
  • pypme - PME (Public Market Equivalent) calculation.
  • -
  • AbsBox - A Python based library to model cashflow for structured product like Asset-backed securities (ABS) and Mortgage-backed securities (MBS).
  • -
  • Intrinsic-Value-Calculator - A Python tool for quick calculations of a stock’s fair value using Discounted Cash Flow analysis.
  • -
  • Kelly-Criterion - Kelly Criterion implemented in Python to size portfolios based on J. L. Kelly Jr’s formula.
  • -
  • rateslib - A fixed income library for pricing bonds and bond futures, and derivatives such as IRS, cross-currency and FX swaps.
  • -
  • fypy - Vanilla and exotic option pricing library to support quantitative R&D. Focus on pricing interesting/useful models and contracts (including and beyond Black-Scholes), as well as calibration of financial models to market data.
  • -
  • quantra High-performance pricing engine built on QuantLib. It exposes QuantLib’s functionality through gRPC and REST APIs, enabling distributed computations with FlatBuffers serialization.
  • -
  • optionlab - A Python library for evaluating option trading strategies.
  • -
-
-
-

Indicators

- -
-
-

Trading & Backtesting

-
    -
  • the0 - Self-hosted execution engine for algorithmic trading bots. Write strategies in Python, TypeScript, Rust, C++, C#, Scala, or Haskell and deploy with one command. Each bot runs in an isolated container with scheduled or streaming execution.
  • -
  • skfolio - Python library for portfolio optimization built on top of scikit-learn. It provides a unified interface and sklearn compatible tools to build, tune and cross-validate portfolio models.
  • -
  • Investing algorithm framework - Framework for developing, backtesting, and deploying automated trading algorithms.
  • -
  • QSTrader - QSTrader backtesting simulation engine.
  • -
  • Blankly - Fully integrated backtesting, paper trading, and live deployment.
  • -
  • TA-Lib - Python wrapper for TA-Lib (http://ta-lib.org/).
  • -
  • zipline - Pythonic algorithmic trading library.
  • -
  • zipline-reloaded - Zipline, a Pythonic Algorithmic Trading Library.
  • -
  • QuantSoftware Toolkit - Python-based open source software framework designed to support portfolio construction and management.
  • -
  • quantitative - Quantitative finance, and backtesting library.
  • -
  • analyzer - Python framework for real-time financial and backtesting trading strategies.
  • -
  • bt - Flexible Backtesting for Python.
  • -
  • backtrader - Python Backtesting library for trading strategies.
  • -
  • pythalesians - Python library to backtest trading strategies, plot charts, seamlessly download market data, analyze market patterns etc.
  • -
  • pybacktest - Vectorized backtesting framework in Python / pandas, designed to make your backtesting easier.
  • -
  • pyalgotrade - Python Algorithmic Trading Library.
  • -
  • basana - A Python async and event driven framework for algorithmic trading, with a focus on crypto currencies.
  • -
  • ta - Technical Analysis Library using Pandas (Python)
  • -
  • algobroker - This is an execution engine for algo trading.
  • -
  • finmarketpy - Python library for backtesting trading strategies and analyzing financial markets.
  • -
  • binary-martingale - Computer program to automatically trade binary options martingale style.
  • -
  • fooltrader - the project using big-data technology to provide an uniform way to analyze the whole market.
  • -
  • zvt - the project using sql, pandas to provide an uniform and extendable way to record data, computing factors, select securities, backtesting, realtime trading and it could show all of them in clearly charts in realtime.
  • -
  • pylivetrader - zipline-compatible live trading library.
  • -
  • pipeline-live - zipline’s pipeline capability with IEX for live trading.
  • -
  • zipline-extensions - Zipline extensions and adapters for QuantRocket.
  • -
  • moonshot - Vectorized backtester and trading engine for QuantRocket based on Pandas.
  • -
  • PyPortfolioOpt - Financial portfolio optimization in python, including classical efficient frontier and advanced methods.
  • -
  • Eiten - Eiten is an open source toolkit by Tradytics that implements various statistical and algorithmic investing strategies such as Eigen Portfolios, Minimum Variance Portfolios, Maximum Sharpe Ratio Portfolios, and Genetic Algorithms based Portfolios.
  • -
  • riskparity.py - fast and scalable design of risk parity portfolios with TensorFlow 2.0
  • -
  • mlfinlab - Implementations regarding “Advances in Financial Machine Learning” by Marcos Lopez de Prado. (Feature Engineering, Financial Data Structures, Meta-Labeling)
  • -
  • pyqstrat - A fast, extensible, transparent python library for backtesting quantitative strategies.
  • -
  • NowTrade - Python library for backtesting technical/mechanical strategies in the stock and currency markets.
  • -
  • pinkfish - A backtester and spreadsheet library for security analysis.
  • -
  • PRISM-INSIGHT - AI-powered stock analysis system with 13 specialized agents, automated trading via KIS API, supporting Korean & US markets.
  • -
  • FinClaw - AI-powered financial intelligence engine with 8 master strategies across US, CN, and HK markets. Multi-agent architecture with +29.1% annual alpha. 227 tests.
  • -
  • aat - Async Algorithmic Trading Engine
  • -
  • Backtesting.py - Backtest trading strategies in Python
  • -
  • catalyst - An Algorithmic Trading Library for Crypto-Assets in Python
  • -
  • quantstats - Portfolio analytics for quants, written in Python
  • -
  • qtpylib - QTPyLib, Pythonic Algorithmic Trading http://qtpylib.io
  • -
  • Quantdom - Python-based framework for backtesting trading strategies & analyzing financial markets [GUI :neckbeard:]
  • -
  • freqtrade - Free, open source crypto trading bot
  • -
  • algorithmic-trading-with-python - Free pandas and scikit-learn resources for trading simulation, backtesting, and machine learning on financial data.
  • -
  • DeepDow - Portfolio optimization with deep learning
  • -
  • Qlib - An AI-oriented Quantitative Investment Platform by Microsoft. Full ML pipeline of data processing, model training, back-testing; and covers the entire chain of quantitative investment: alpha seeking, risk modeling, portfolio optimization, and order execution.
  • -
  • machine-learning-for-trading - Code and resources for Machine Learning for Algorithmic Trading
  • -
  • AlphaPy - Automated Machine Learning [AutoML] with Python, scikit-learn, Keras, XGBoost, LightGBM, and CatBoost
  • -
  • jesse - An advanced crypto trading bot written in Python
  • -
  • rqalpha - A extendable, replaceable Python algorithmic backtest && trading framework supporting multiple securities.
  • -
  • FinRL-Library - A Deep Reinforcement Learning Library for Automated Trading in Quantitative Finance. NeurIPS 2020.
  • -
  • bulbea - Deep Learning based Python Library for Stock Market Prediction and Modelling.
  • -
  • ib_nope - Automated trading system for NOPE strategy over IBKR TWS.
  • -
  • OctoBot - Open source cryptocurrency trading bot for high frequency, arbitrage, TA and social trading with an advanced web interface.
  • -
  • OpenFinClaw - AI-native hedge fund platform: natural language strategy generation, Rust backtesting engine, multi-market execution, and self-evolving strategy pipeline with community leaderboard.
  • -
  • bta-lib - Technical Analysis library in pandas for backtesting algotrading and quantitative analysis.
  • -
  • Stock-Prediction-Models - Gathers machine learning and deep learning models for Stock forecasting including trading bots and simulations.
  • -
  • TuneTA - TuneTA optimizes technical indicators using a distance correlation measure to a user defined target feature such as next day return.
  • -
  • AutoTrader - A Python-based development platform for automated trading systems - from backtesting to optimization to livetrading.
  • -
  • fast-trade - A library built with backtest portability and performance in mind for backtest trading strategies.
  • -
  • qf-lib - QF-Lib is a Python library that provides high quality tools for quantitative finance.
  • -
  • tda-api - Gather data and trade equities, options, and ETFs via TDAmeritrade.
  • -
  • vectorbt - Find your trading edge, using a powerful toolkit for backtesting, algorithmic trading, and research.
  • -
  • Lean - Lean Algorithmic Trading Engine by QuantConnect (Python, C#).
  • -
  • fast-trade - Low code backtesting library utilizing pandas and technical analysis indicators.
  • -
  • pysystemtrade - pysystemtrade is the open source version of Robert Carver’s backtesting and trading engine that implements systems according to the framework outlined in his book “Systematic Trading”, which is further developed on his blog.
  • -
  • pytrendseries - Detect trend in time series, drawdown, drawdown within a constant look-back window , maximum drawdown, time underwater.
  • -
  • PyLOB - Fully functioning fast Limit Order Book written in Python.
  • -
  • PyBroker - Algorithmic Trading with Machine Learning.
  • -
  • OctoBot Script - A quant framework to create cryptocurrencies strategies - from backtesting to optimization to livetrading.
  • -
  • hftbacktest - A high-frequency trading and market-making backtesting tool accounts for limit orders, queue positions, and latencies, utilizing full tick data for trades and order books.
  • -
  • vnpy - VeighNa is a Python-based open source quantitative trading system development framework.
  • -
  • Intelligent Trading Bot - Automatically generating signals and trading based on machine learning and feature engineering
  • -
  • fastquant - fastquant allows you to easily backtest investment strategies with as few as 3 lines of python code.
  • -
  • nautilus_trader - A high-performance algorithmic trading platform and event-driven backtester.
  • -
  • YABTE - Yet Another (Python) BackTesting Engine.
  • -
  • Trading Strategy - TradingStrategy.ai is a market data, backtesting, live trading and investor management framework for decentralised finance
  • -
  • Hikyuu - A base on Python/C++ open source high-performance quant framework for faster analysis and backtesting, contains the complete trading system components for reuse and combination.
  • -
  • rust_bt - A high performance, low-latency backtesting engine for testing quantitative trading strategies on historical and live data in Rust.
  • -
  • Gunbot Quant - Toolkit for quantitative trading analysis. It integrates an advanced market screener, a multi-strategy, multi-asset backtesting engine. Use with built-in GUI or through CLI.
  • -
  • StrateQueue - An open‑source, broker‑agnostic Python library that lets you seamlessly deploy strategies from any major backtesting engine to live (or paper) trading with zero code changes and built‑in safety controls.
  • -
  • PythonTradingFramework Github last commit (branch) - Python algorithmic trading bot framework for Kubernetes: backtesting, hyperparameter optimization, 150+ technical analysis indicators (RSI, MACD, Bollinger Bands, ADX), portfolio management, PostgreSQL integration, Helm deployment, CronJob scheduling. Minimal overhead, production-ready, Yahoo Finance data.
  • -
  • QTradeX-AI-Agents - Example strategies for the QTradeX platfrom.
  • -
  • QTradeX-Algo-Trading-SDK - AI-powered SDK featuring algorithmic trading, backtesting, deployment on 100+ exchanges, and multiple optimization engines.
  • -
  • antback - A lightweight, event-loop-style backtest engine that allows a function-driven imperative style using efficient stateful helper functions and data containers.
  • -
  • VARRD - AI-powered trading edge discovery platform that validates trading ideas with event studies, statistical tests, and real market data. Web app, MCP server, CLI (pip install varrd), and Python SDK.
  • -
  • polymarket-whales - Real-time whale trade tracker for Polymarket — terminal alerts + Telegram notifications when large orders hit the book.
  • -
-
-
-

Risk Analysis

-
    -
  • QuantLibRisks - Fast risks with QuantLib
  • -
  • XAD - Automatic Differentation (AAD) Library
  • -
  • pyfolio - Portfolio and risk analytics in Python.
  • -
  • empyrical - Common financial risk and performance metrics.
  • -
  • fecon235 - Computational tools for financial economics include: Gaussian Mixture model of leptokurtotic risk, adaptive Boltzmann portfolios.
  • -
  • finance - Financial Risk Calculations. Optimized for ease of use through class construction and operator overload.
  • -
  • qfrm - Quantitative Financial Risk Management: awesome OOP tools for measuring, managing and visualizing risk of financial instruments and portfolios. (Last updated: 2015-12-12)
  • -
  • visualize-wealth - Portfolio construction and quantitative analysis.
  • -
  • VisualPortfolio - This tool is used to visualize the performance of a portfolio.
  • -
  • universal-portfolios - Collection of algorithms for online portfolio selection.
  • -
  • FinQuant - A program for financial portfolio management, analysis and optimization.
  • -
  • Empyrial - Portfolio’s risk and performance analytics and returns predictions.
  • -
  • risktools - Risk tools for use within the crude and crude products trading space with partial implementation of R’s PerformanceAnalytics.
  • -
  • Riskfolio-Lib - Portfolio Optimization and Quantitative Strategic Asset Allocation in Python.
  • -
  • empyrical-reloaded - Common financial risk and performance metrics. empyrical fork.
  • -
  • pyfolio-reloaded - Portfolio and risk analytics in Python. pyfolio fork.
  • -
  • fortitudo.tech - Conditional Value-at-Risk (CVaR) portfolio optimization and Entropy Pooling views / stress-testing in Python.
  • -
  • Quant Lab Alpha — Portfolio risk decomposition and Monte Carlo simulation toolkit with factor-based modeling.
  • -
  • quantitative-finance-tools - Library for portfolio optimization (MVO) and rigorous risk metrics (VaR/CVaR).
  • -
  • curistat - Futures volatility forecasting platform for ES/NQ. Proprietary CVN rating (1-10), regime detection (CRC composite), 8 directional signals, economic event impact analytics. Includes MCP server for AI agent integration.
  • -
  • Prop Trader Compass - Interactive risk and payout calculator for Futures and CFD traders; features one-time fee firm comparisons.
  • -
-
-
-

Factor Analysis

-
    -
  • alphalens - Performance analysis of predictive alpha factors.
  • -
  • alphalens-reloaded - Performance analysis of predictive (alpha) stock factors.
  • -
  • Spectre - GPU-accelerated Factors analysis library and Backtester
  • -
  • quant-lab-alpha - Open-source investment analytics platform bridging academic research and retail finance.
  • -
-
-
-

Sentiment Analysis

-
    -
  • Asset News Sentiment Analyzer - Sentiment analysis and report generation package for financial assets and securities utilizing GPT models.
  • -
  • Social Stock Sentiment API - REST API analyzing Reddit and X/Twitter for stock mentions and sentiment, providing buzz scores, trending stocks, and AI-generated trend explanations.
  • -
-
-
-

Quant Research Environment

-
    -
  • Jupyter Quant - A dockerized Jupyter quant research environment with preloaded tools for quant analysis, statsmodels, pymc, arch, py_vollib, zipline-reloaded, PyPortfolioOpt, etc.
  • -
-
-
-

Time Series

-
    -
  • ARCH - ARCH models in Python.
  • -
  • statsmodels - Python module that allows users to explore data, estimate statistical models, and perform statistical tests. GitHub
  • -
  • dynts - Python package for timeseries analysis and manipulation.
  • -
  • PyFlux - Python library for timeseries modelling and inference (frequentist and Bayesian) on models.
  • -
  • tsfresh - Automatic extraction of relevant features from time series.
  • -
  • Facebook Prophet - Tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth.
  • -
  • tsmoothie - A python library for time-series smoothing and outlier detection in a vectorized way.
  • -
  • pmdarima - A statistical library designed to fill the void in Python’s time series analysis capabilities, including the equivalent of R’s auto.arima function.
  • -
  • gluon-ts - vProbabilistic time series modeling in Python.
  • -
  • functime - Time-series machine learning at scale. Built with Polars for embarrassingly parallel feature extraction and forecasts on panel data.
  • -
-
-
-

Calendars

- -
-
-

Data Sources

-
    -
  • StockAPI – Free real-time Chinese stock data (REST & WebSocket).
  • -
  • Polymarket Scanner API - Real-time arbitrage detection API for Polymarket prediction markets, scanning 12,000+ markets for mispricings.
  • -
  • yfinance - Yahoo! Finance market data downloader (+faster Pandas Datareader)
  • -
  • defeatbeta-api - An open-source alternative to Yahoo Finance’s market data APIs with higher reliability.
  • -
  • findatapy - Python library to download market data via Bloomberg, Quandl, Yahoo etc.
  • -
  • googlefinance - Python module to get real-time stock data from Google Finance API.
  • -
  • yahoo-finance - Python module to get stock data from Yahoo! Finance.
  • -
  • pandas-datareader - Python module to get data from various sources (Google Finance, Yahoo Finance, FRED, OECD, Fama/French, World Bank, Eurostat…) into Pandas datastructures such as DataFrame, Panel with a caching mechanism.
  • -
  • pandas-finance - High level API for access to and analysis of financial data.
  • -
  • pyhoofinance - Rapidly queries Yahoo Finance for multiple tickers and returns typed data for analysis.
  • -
  • yfinanceapi - Finance API for Python.
  • -
  • yql-finance - yql-finance is simple and fast. API returns stock closing prices for current period of time and current stock ticker (i.e. APPL, GOOGL).
  • -
  • ystockquote - Retrieve stock quote data from Yahoo Finance.
  • -
  • wallstreet - Real time stock and option data.
  • -
  • stock_extractor - General Purpose Stock Extractors from Online Resources.
  • -
  • Stockex - Python wrapper for Yahoo! Finance API.
  • -
  • SwapAPI - Free DEX aggregator API returning executable swap calldata across 46 EVM chains. No API key required. GitHub
  • -
  • finsymbols - Obtains stock symbols and relating information for SP500, AMEX, NYSE, and NASDAQ.
  • -
  • FRB - Python Client for FRED® API.
  • -
  • inquisitor - Python Interface to Econdb.com API.
  • -
  • yfi - Yahoo! YQL library.
  • -
  • chinesestockapi - Python API to get Chinese stock price. (Last updated: 2015-03-21)
  • -
  • exchange - Get current exchange rate.
  • -
  • ticks - Simple command line tool to get stock ticker data.
  • -
  • pybbg - Python interface to Bloomberg COM APIs.
  • -
  • ccy - Python module for currencies.
  • -
  • tushare - A utility for crawling historical and Real-time Quotes data of China stocks. (Last updated: 2024-08-27)
  • -
  • edinet-mcp - Parse Japanese XBRL financial statements from EDINET with 161 normalized labels, 26 financial metrics, and multi-company screening.
  • -
  • estat-mcp - Access Japanese government statistics (e-Stat) covering population, GDP, CPI, labor, and trade data with MCP integration and Polars export.
  • -
  • tdnet-disclosure-mcp - Access Japanese timely disclosures (TDNet) via MCP. Retrieve earnings, dividends, forecasts, buybacks, and other filings for 4,000+ listed companies. No API key required.
  • -
  • cn_stock_src - Utility for retrieving basic China stock data from different sources.
  • -
  • coinmarketcap - Python API for coinmarketcap.
  • -
  • coinpulse - Python SDK for cryptocurrency portfolio tracking with real-time prices, P/L calculations, and price alerts. Free tier available.
  • -
  • after-hours - Obtain pre market and after hours stock prices for a given symbol.
  • -
  • bronto-python - Bronto API Integration for Python. GitHub
  • -
  • pytdx - Python Interface for retrieving chinese stock realtime quote data from TongDaXin Nodes.
  • -
  • pdblp - A simple interface to integrate pandas and the Bloomberg Open API.
  • -
  • tiingo - Python interface for daily composite prices/OHLC/Volume + Real-time News Feeds, powered by the Tiingo Data Platform.
  • -
  • iexfinance - Python Interface for retrieving real-time and historical prices and equities data from The Investor’s Exchange.
  • -
  • pyEX - Python interface to IEX with emphasis on pandas, support for streaming data, premium data, points data (economic, rates, commodities), and technical indicators.
  • -
  • alpaca-trade-api - Python interface for retrieving real-time and historical prices from Alpaca API as well as trade execution.
  • -
  • metatrader5 - API Connector to MetaTrader 5 Terminal. (Last updated: 2026-02-20)
  • -
  • akshare - AkShare is an elegant and simple financial data interface library for Python, built for human beings! https://akshare.readthedocs.io
  • -
  • yahooquery - Python interface for retrieving data through unofficial Yahoo Finance API.
  • -
  • investpy - Financial Data Extraction from Investing.com with Python! https://investpy.readthedocs.io/
  • -
  • yliveticker - Live stream of market data from Yahoo Finance websocket.
  • -
  • bbgbridge - Easy to use Bloomberg Desktop API wrapper for Python.
  • -
  • polygon.io - A python library for Polygon.io financial data APIs.
  • -
  • alpha_vantage - A python wrapper for Alpha Vantage API for financial data.
  • -
  • oilpriceapi - Python SDK for real-time oil and commodity prices (WTI, Brent, Urals, natural gas, coal) with OpenBB integration.
  • -
  • FinanceDataReader - Open Source Financial data reader for U.S, Korean, Japanese, Chinese, Vietnamese Stocks
  • -
  • pystlouisfed - Python client for Federal Reserve Bank of St. Louis API - FRED, ALFRED, GeoFRED and FRASER.
  • -
  • python-bcb - Python interface to Brazilian Central Bank web services.
  • -
  • swiss-finance-data - Python package for Swiss financial data (SNB Policy Rate, SARON, CHF FX rates, CPI, SMI equities, Confederation bond yields) from official SNB sources.
  • -
  • market-prices - Create meaningful OHLCV datasets from knowledge of exchange-calendars (works out-the-box with data from Yahoo Finance).
  • -
  • tardis-python - Python interface for Tardis.dev high frequency crypto market data
  • -
  • lake-api - Python interface for Crypto Lake high frequency crypto market data
  • -
  • tessa - simple, hassle-free access to price information of financial assets (currently based on yfinance and pycoingecko), including search and a symbol class.
  • -
  • pandaSDMX - Python package that implements SDMX 2.1 (ISO 17369:2013), a format for exchange of statistical data and metadata used by national statistical agencies, central banks, and international organisations.
  • -
  • cif - Python package that include few composite indicators, which summarize multidimensional relationships between individual economic indicators.
  • -
  • finagg - finagg is a Python package that provides implementations of popular and free financial APIs, tools for aggregating historical data from those APIs into SQL databases, and tools for transforming aggregated data into features useful for analysis and AI/ML.
  • -
  • FinanceDatabase - This is a database of 300.000+ symbols containing Equities, ETFs, Funds, Indices, Currencies, Cryptocurrencies and Money Markets.
  • -
  • Trading Strategy - download price data for decentralised exchanges and lending protocols (DeFi)
  • -
  • datamule-python - A package to work with SEC data. Incorporates datamule endpoints.
  • -
  • fsynth - Python library for high-fidelity unlimited synthetic financial data generation using Heston Stochastic Volatility and Merton Jump Diffusion.
  • -
  • fedfred - FRED & GeoFRED Economic data API with preprocessed dataframe output in pandas/geopandas, polars/polars_st, and dask dataframes/geodataframes.
  • -
  • edgar-sec - EDGAR Financial data API with preprocessed dataclass outputs.
  • -
  • edgartools - AI-native SEC EDGAR library with XBRL financials, clean text extraction, 17+ typed forms, and pandas DataFrames.
  • -
  • FXMacroData - Real-time forex macroeconomic API for all major currency pairs sourced from central bank announcements. GitHub
  • -
  • wallstreet - Real time stock and option data.
  • -
-
-
-

Excel Integration

-
    -
  • xlwings - Make Excel fly with Python. GitHub
  • -
  • openpyxl - Read/Write Excel 2007 xlsx/xlsm files.
  • -
  • xlrd - Library for developers to extract data from Microsoft Excel spreadsheet files.
  • -
  • xlsxwriter - Write files in the Excel 2007+ XLSX file format. GitHub
  • -
  • xlwt - Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 XLS files, on any platform.
  • -
  • xlloop - XLLoop is an open source framework for implementing Excel user-defined functions (UDFs) on a centralised server (a function server). GitHub
  • -
  • expy - The ExPy add-in allows easy use of Python directly from within an Microsoft Excel spreadsheet, both to execute arbitrary code and to define new Excel functions.
  • -
  • pyxll - PyXLL is an Excel add-in that enables you to extend Excel using nothing but Python code.
  • -
-
-
-

Visualization

-
    -
  • D-Tale - Visualizer for pandas dataframes and xarray datasets.
  • -
  • mplfinance - matplotlib utilities for the visualization, and visual analysis, of financial data.
  • -
  • finplot - Performant and effortless finance plotting for Python.
  • -
  • finvizfinance - Finviz analysis python library.
  • -
  • market-analy - Analysis and interactive charting using market-prices and bqplot.
  • -
  • QuantInvestStrats - Quantitative Investment Strategies (QIS) package implements Python analytics for visualisation of financial data, performance reporting, analysis of quantitative strategies.
  • -
-
-
-
-

R

-
-

Numerical Libraries & Data Structures

-
    -
  • xts - eXtensible Time Series: Provide for uniform handling of R’s different time-based data classes by extending zoo, maximizing native format information preservation and allowing for user level customization and extension, while simplifying cross-class interoperability.
  • -
  • data.table - Extension of data.frame: Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of columns by group using no copies at all, list columns and a fast file reader (fread). Offers a natural and flexible syntax, for faster development.
  • -
  • sparseEigen - Sparse principal component analysis.
  • -
  • TSdbi - Provides a common interface to time series databases.
  • -
  • tseries - Time Series Analysis and Computational Finance.
  • -
  • zoo - S3 Infrastructure for Regular and Irregular Time Series (Z’s Ordered Observations).
  • -
  • tis - Functions and S3 classes for time indexes and time indexed series, which are compatible with FAME frequencies.
  • -
  • tfplot - Utilities for simple manipulation and quick plotting of time series data.
  • -
  • tframe - A kernel of functions for programming time series methods in a way that is relatively independently of the representation of time.
  • -
-
-
-

Data Sources

-
    -
  • IBrokers - Provides native R access to Interactive Brokers Trader Workstation API.
  • -
  • Rblpapi - An R Interface to ‘Bloomberg’ is provided via the ‘Blp API’.
  • -
  • Rbitcoin - Unified markets API interface (bitstamp, kraken, btce, bitmarket).
  • -
  • GetTDData - Downloads and aggregates data for Brazilian government issued bonds directly from the website of Tesouro Direto.
  • -
  • GetHFData - Downloads and aggregates high frequency trading data for Brazilian instruments directly from Bovespa ftp site.
  • -
  • td - Interfaces the ‘twelvedata’ API for stocks and (digital and standard) currencies.
  • -
  • rbcb - R interface to Brazilian Central Bank web services.
  • -
  • rb3 - A bunch of downloaders and parsers for data delivered from B3.
  • -
  • simfinapi - Makes ‘SimFin’ data (https://simfin.com/) easily accessible in R.
  • -
  • tidyfinance - Tidy Finance helper functions to download financial data and process the raw data into a structured Format (tidy data), including date conversion, scaling factor values, and filtering by the specified date.
  • -
-
-
-

Financial Instruments and Pricing

-
    -
  • RQuantLib - RQuantLib connects GNU R with QuantLib.
  • -
  • quantmod - Quantitative Financial Modelling Framework. GitHub
  • -
  • Rmetrics - The premier open source software solution for teaching and training quantitative finance. -
      -
    • fAsianOptions - EBM and Asian Option Valuation.
    • -
    • fAssets - Analysing and Modelling Financial Assets.
    • -
    • fBasics - Markets and Basic Statistics.
    • -
    • fBonds - Bonds and Interest Rate Models.
    • -
    • fExoticOptions - Exotic Option Valuation.
    • -
    • fOptions - Pricing and Evaluating Basic Options.
    • -
    • fPortfolio - Portfolio Selection and Optimization.
    • -
  • -
  • portfolio - Analysing equity portfolios.
  • -
  • sparseIndexTracking - Portfolio design to track an index.
  • -
  • covFactorModel - Covariance matrix estimation via factor models.
  • -
  • riskParityPortfolio - Blazingly fast design of risk parity portfolios.
  • -
  • sde - Simulation and Inference for Stochastic Differential Equations.
  • -
  • YieldCurve - Modelling and estimation of the yield curve.
  • -
  • SmithWilsonYieldCurve - Constructs a yield curve by the Smith-Wilson method from a table of LIBOR and SWAP rates.
  • -
  • ycinterextra - Yield curve or zero-coupon prices interpolation and extrapolation.
  • -
  • AmericanCallOpt - This package includes pricing function for selected American call options with underlying assets that generate payouts.
  • -
  • VarSwapPrice - Pricing a variance swap on an equity index.
  • -
  • RND - Risk Neutral Density Extraction Package.
  • -
  • LSMonteCarlo - American options pricing with Least Squares Monte Carlo method.
  • -
  • OptHedging - Estimation of value and hedging strategy of call and put options.
  • -
  • tvm - Time Value of Money Functions.
  • -
  • OptionPricing - Option Pricing with Efficient Simulation Algorithms.
  • -
  • credule - Credit Default Swap Functions.
  • -
  • derivmkts - Functions and R Code to Accompany Derivatives Markets. GitHub
  • -
  • FinCal - Package for time value of money calculation, time series analysis and computational finance.
  • -
  • r-quant - R code for quantitative analysis in finance.
  • -
  • options.studies - options trading studies functions for use with options.data package and shiny.
  • -
  • PortfolioAnalytics - Portfolio Analysis, Including Numerical Methods for Optimizationof Portfolios.
  • -
  • fmbasics - Financial Market Building Blocks.
  • -
  • R-fixedincome - Fixed income tools for R.
  • -
-
-
-

Trading

-
    -
  • backtest - Exploring Portfolio-Based Conjectures About Financial Instruments.
  • -
  • pa - Performance Attribution for Equity Portfolios.
  • -
  • TTR - Technical Trading Rules.
  • -
  • QuantTools - Enhanced Quantitative Trading Modelling.
  • -
  • blotter - Transaction infrastructure for defining instruments, transactions, portfolios and accounts for trading systems and simulation. Provides portfolio support for multi-asset class and multi-currency portfolios. Actively maintained and developed.
  • -
-
-
-

Backtesting

-
    -
  • quantstrat - Transaction-oriented infrastructure for constructing trading systems and simulation. Provides support for multi-asset class and multi-currency portfolios for backtesting and other financial research.
  • -
-
-
-

Risk Analysis

- -
-
-

Factor Analysis

-
    -
  • FactorAnalytics - The FactorAnalytics package contains fitting and analysis methods for the three main types of factor models used in conjunction with portfolio construction, optimization and risk management, namely fundamental factor models, time series factor models and statistical factor models.
  • -
  • Expected Returns - Solutions for enhancing portfolio diversification and replications of seminal papers with R, most of which are discussed in one of the best investment references of the recent decade, Expected Returns: An Investors Guide to Harvesting Market Rewards by Antti Ilmanen.
  • -
-
-
-

Time Series

-
    -
  • tseries - Time Series Analysis and Computational Finance.
  • -
  • fGarch - Rmetrics - Autoregressive Conditional Heteroskedastic Modelling.
  • -
  • timeSeries - Rmetrics - Financial Time Series Objects.
  • -
  • rugarch - Univariate GARCH Models.
  • -
  • rmgarch - Multivariate GARCH Models.
  • -
  • tidypredict - Run predictions inside the database https://tidypredict.netlify.com/.
  • -
  • tidyquant - Bringing financial analysis to the tidyverse.
  • -
  • timetk - A toolkit for working with time series in R.
  • -
  • tibbletime - Built on top of the tidyverse, tibbletime is an extension that allows for the creation of time aware tibbles through the setting of a time index.
  • -
  • matrixprofile - Time series data mining library built on top of the novel Matrix Profile data structure and algorithms.
  • -
  • garchmodels - A parsnip backend for GARCH models.
  • -
-
-
-

Calendars

-
    -
  • timeDate - Chronological and Calendar Objects
  • -
  • bizdays - Business days calculations and utilities
  • -
-
-
-
-

Matlab

-
-

Alternatives

-
    -
  • RunMat - High performance, Open Source, MATLAB syntax runtime. GitHub
  • -
-
-
-

FrameWorks

-
    -
  • QUANTAXIS - Integrated Quantitative Toolbox with Matlab.
  • -
  • PROJ_Option_Pricing_Matlab - Quant Option Pricing - Exotic/Vanilla: Barrier, Asian, European, American, Parisian, Lookback, Cliquet, Variance Swap, Swing, Forward Starting, Step, Fader
  • -
-
-
-
-

Julia

- -
-
-

Java

- -
-
-

JavaScript

- -
-

Data Visualization

- -
-
-
-

Haskell

- -
-
-

Scala

- -
-
-

Ruby

- -
-
-

Elixir/Erlang

- -
-
-

Golang

- -
-
-

CPP

- -
-
-

Frameworks

- -
-
-

CSharp

- -
-
-

Rust

- -
-
-

Reproducing Works, Training & Books

- -
-
-

Commercial & Proprietary Services

- -
- - - - - - - - - - \ No newline at end of file + + + \ No newline at end of file diff --git a/projects.csv b/projects.csv new file mode 100644 index 0000000..13c97a4 --- /dev/null +++ b/projects.csv @@ -0,0 +1,496 @@ +project,language,category,section,section_slug,last_commit,stars,url,description,github,cran,pypi,commercial,repo +numpy,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-22,31639,https://www.numpy.org,NumPy is the fundamental package for scientific computing with Python. [GitHub](https://github.com/numpy/numpy),True,False,False,False,numpy/numpy +scipy,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-21,14552,https://www.scipy.org,"SciPy (pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software for mathematics, science, and engineering. [GitHub](https://github.com/scipy/scipy)",True,False,False,False,scipy/scipy +pandas,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-22,48216,https://pandas.pydata.org,"pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language. [GitHub](https://github.com/pandas-dev/pandas)",True,False,False,False,pandas-dev/pandas +polars,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-20,37826,https://docs.pola.rs/,Polars is a blazingly fast DataFrame library for manipulating structured data. [GitHub](https://github.com/pola-rs/polars),True,False,False,False,pola-rs/polars +quantdsl,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2017-10-26,377,https://github.com/johnbywater/quantdsl,Domain specific language for quantitative analytics in finance and trading.,True,False,False,False,johnbywater/quantdsl +statistics,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,,0,https://docs.python.org/3/library/statistics.html,Builtin Python library for all basic statistical calculations.,False,False,False,False, +sympy,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-22,14501,https://www.sympy.org/,SymPy is a Python library for symbolic mathematics. [GitHub](https://github.com/sympy/sympy),True,False,False,False,sympy/sympy +pymc3,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-04,9542,https://docs.pymc.io/,Probabilistic Programming in Python: Bayesian Modeling and Probabilistic Machine Learning with Theano. [GitHub](https://github.com/pymc-devs/pymc),True,False,False,False,pymc-devs/pymc +modelx,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-02-16,122,https://docs.modelx.io/,Python reimagination of spreadsheets as formula-centric objects that are interoperable with pandas. [GitHub](https://github.com/fumitoh/modelx),True,False,False,False,fumitoh/modelx +ArcticDB,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-20,2224,https://github.com/man-group/ArcticDB,High performance datastore for time series and tick data.,True,False,False,False,man-group/ArcticDB +pmxt,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-22,1140,https://github.com/pmxt-dev/pmxt,"The CCXT for prediction markets. A unified API for trading on Polymarket, Kalshi, and more.",True,False,False,False,pmxt-dev/pmxt +OpenBB Terminal,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-22,63429,https://github.com/OpenBB-finance/OpenBBTerminal,Terminal for investment research for everyone.,True,False,False,False,OpenBB-finance/OpenBBTerminal +Fincept Terminal,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-21,2858,https://github.com/Fincept-Corporation/FinceptTerminal,Advance Data Based A.I Terminal for all Types of Financial Asset Research.,True,False,False,False,Fincept-Corporation/FinceptTerminal +PyQL,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-08-20,1261,https://github.com/enthought/pyql,QuantLib's Python port.,True,False,False,False,enthought/pyql +pyfin,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2014-12-03,316,https://github.com/opendoor-labs/pyfin,Basic options pricing in Python. *ARCHIVED*,True,False,False,False,opendoor-labs/pyfin +vollib,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2023-04-01,929,https://github.com/vollib/vollib,"vollib is a python library for calculating option prices, implied volatility and greeks.",True,False,False,False,vollib/vollib +QuantPy,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2017-11-28,973,https://github.com/jsmidt/QuantPy,A framework for quantitative finance In python.,True,False,False,False,jsmidt/QuantPy +Finance-Python,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2024-01-01,873,https://github.com/alpha-miner/Finance-Python,Python tools for Finance.,True,False,False,False,alpha-miner/Finance-Python +ffn,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-21,2519,https://github.com/pmorissette/ffn,A financial function library for Python.,True,False,False,False,pmorissette/ffn +pynance,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2021-02-03,440,https://github.com/GriffinAustin/pynance,Lightweight Python library for assembling and analyzing financial data.,True,False,False,False,GriffinAustin/pynance +tia,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2017-06-05,430,https://github.com/bpsmith/tia,Toolkit for integration and analysis.,True,False,False,False,bpsmith/tia +pysabr,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2022-04-21,592,https://github.com/ynouri/pysabr,SABR model Python implementation.,True,False,False,False,ynouri/pysabr +FinancePy,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-11,2837,https://github.com/domokane/FinancePy,"A Python Finance Library that focuses on the pricing and risk-management of Financial Derivatives, including fixed-income, equity, FX and credit derivatives.",True,False,False,False,domokane/FinancePy +gs-quant,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-19,10000,https://github.com/goldmansachs/gs-quant,Python toolkit for quantitative finance,True,False,False,False,goldmansachs/gs-quant +willowtree,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2018-07-14,344,https://github.com/federicomariamassari/willowtree,Robust and flexible Python implementation of the willow tree lattice for derivatives pricing.,True,False,False,False,federicomariamassari/willowtree +financial-engineering,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2017-11-20,500,https://github.com/federicomariamassari/financial-engineering,"Applications of Monte Carlo methods to financial engineering projects, in Python.",True,False,False,False,federicomariamassari/financial-engineering +optlib,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2022-11-18,1347,https://github.com/dbrojas/optlib,A library for financial options pricing written in Python.,True,False,False,False,dbrojas/optlib +tf-quant-finance,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-02-12,5266,https://github.com/google/tf-quant-finance,High-performance TensorFlow library for quantitative finance.,True,False,False,False,google/tf-quant-finance +Q-Fin,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2023-04-07,582,https://github.com/RomanMichaelPaolucci/Q-Fin,A Python library for mathematical finance.,True,False,False,False,RomanMichaelPaolucci/Q-Fin +Quantsbin,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2021-05-23,612,https://github.com/quantsbin/Quantsbin,"Tools for pricing and plotting of vanilla option prices, greeks and various other analysis around them.",True,False,False,False,quantsbin/Quantsbin +finoptions,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2024-02-01,295,https://github.com/bbcho/finoptions-dev,Complete python implementation of R package fOptions with partial implementation of fExoticOptions for pricing various options.,True,False,False,False,bbcho/finoptions-dev +pypme,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-01-16,13,https://github.com/ymyke/pypme,PME (Public Market Equivalent) calculation.,True,False,False,False,ymyke/pypme +AbsBox,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-17,64,https://github.com/yellowbean/AbsBox,A Python based library to model cashflow for structured product like Asset-backed securities (ABS) and Mortgage-backed securities (MBS).,True,False,False,False,yellowbean/AbsBox +Intrinsic-Value-Calculator,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-07-02,83,https://github.com/akashaero/Intrinsic-Value-Calculator,A Python tool for quick calculations of a stock's fair value using Discounted Cash Flow analysis.,True,False,False,False,akashaero/Intrinsic-Value-Calculator +Kelly-Criterion,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2019-02-16,110,https://github.com/deltaray-io/kelly-criterion,Kelly Criterion implemented in Python to size portfolios based on J. L. Kelly Jr's formula.,True,False,False,False,deltaray-io/kelly-criterion +rateslib,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-02-15,327,https://github.com/attack68/rateslib,"A fixed income library for pricing bonds and bond futures, and derivatives such as IRS, cross-currency and FX swaps.",True,False,False,False,attack68/rateslib +fypy,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-02-27,139,https://github.com/jkirkby3/fypy,"Vanilla and exotic option pricing library to support quantitative R&D. Focus on pricing interesting/useful models and contracts (including and beyond Black-Scholes), as well as calibration of financial models to market data.",True,False,False,False,jkirkby3/fypy +optionlab,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-12-25,487,https://github.com/rgaveiga/optionlab,A Python library for evaluating option trading strategies.,True,False,False,False,rgaveiga/optionlab +pandas_talib,Python,Indicators,Indicators,indicators,2018-05-30,781,https://github.com/femtotrader/pandas_talib,A Python Pandas implementation of technical analysis indicators.,True,False,False,False,femtotrader/pandas_talib +finta,Python,Indicators,Indicators,indicators,2022-07-24,2246,https://github.com/peerchemist/finta,Common financial technical analysis indicators implemented in Pandas.,True,False,False,False,peerchemist/finta +Tulipy,Python,Indicators,Indicators,indicators,2019-04-11,92,https://github.com/cirla/tulipy,Financial Technical Analysis Indicator Library (Python bindings for [tulipindicators](https://github.com/TulipCharts/tulipindicators)),True,False,False,False,cirla/tulipy +lppls,Python,Indicators,Indicators,indicators,2026-02-15,450,https://github.com/Boulder-Investment-Technologies/lppls,A Python module for fitting the [Log-Periodic Power Law Singularity (LPPLS)](https://en.wikipedia.org/wiki/Didier_Sornette#The_JLS_and_LPPLS_models) model.,True,False,False,False,Boulder-Investment-Technologies/lppls +talipp,Python,Indicators,Indicators,indicators,2025-09-09,526,https://github.com/nardew/talipp,Incremental technical analysis library for Python.,True,False,False,False,nardew/talipp +streaming_indicators,Python,Indicators,Indicators,indicators,2025-04-27,146,https://github.com/mr-easy/streaming_indicators,A python library for computing technical analysis indicators on streaming data.,True,False,False,False,mr-easy/streaming_indicators +the0,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-22,209,https://github.com/alexanderwanyoike/the0,"Self-hosted execution engine for algorithmic trading bots. Write strategies in Python, TypeScript, Rust, C++, C#, Scala, or Haskell and deploy with one command. Each bot runs in an isolated container with scheduled or streaming execution.",True,False,False,False,alexanderwanyoike/the0 +skfolio,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-14,1906,https://github.com/skfolio/skfolio,"Python library for portfolio optimization built on top of scikit-learn. It provides a unified interface and sklearn compatible tools to build, tune and cross-validate portfolio models.",True,False,False,False,skfolio/skfolio +Investing algorithm framework,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-20,702,https://github.com/coding-kitties/investing-algorithm-framework,"Framework for developing, backtesting, and deploying automated trading algorithms.",True,False,False,False,coding-kitties/investing-algorithm-framework +QSTrader,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2024-06-24,3328,https://github.com/mhallsmoore/qstrader,QSTrader backtesting simulation engine.,True,False,False,False,mhallsmoore/qstrader +Blankly,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2024-12-30,2417,https://github.com/Blankly-Finance/Blankly,"Fully integrated backtesting, paper trading, and live deployment.",True,False,False,False,Blankly-Finance/Blankly +TA-Lib,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-16,11803,https://github.com/mrjbq7/ta-lib,Python wrapper for TA-Lib ().,True,False,False,False,mrjbq7/ta-lib +zipline,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2020-10-14,19533,https://github.com/quantopian/zipline,Pythonic algorithmic trading library.,True,False,False,False,quantopian/zipline +zipline-reloaded,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-11-13,1687,https://github.com/stefan-jansen/zipline-reloaded,"Zipline, a Pythonic Algorithmic Trading Library.",True,False,False,False,stefan-jansen/zipline-reloaded +QuantSoftware Toolkit,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2016-10-07,476,https://github.com/QuantSoftware/QuantSoftwareToolkit,Python-based open source software framework designed to support portfolio construction and management.,True,False,False,False,QuantSoftware/QuantSoftwareToolkit +quantitative,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2019-03-03,66,https://github.com/jeffrey-liang/quantitative,"Quantitative finance, and backtesting library.",True,False,False,False,jeffrey-liang/quantitative +analyzer,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2015-12-22,214,https://github.com/llazzaro/analyzer,Python framework for real-time financial and backtesting trading strategies.,True,False,False,False,llazzaro/analyzer +bt,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-21,2830,https://github.com/pmorissette/bt,Flexible Backtesting for Python.,True,False,False,False,pmorissette/bt +backtrader,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2023-04-19,20874,https://github.com/backtrader/backtrader,Python Backtesting library for trading strategies.,True,False,False,False,backtrader/backtrader +pythalesians,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2016-09-23,63,https://github.com/thalesians/pythalesians,"Python library to backtest trading strategies, plot charts, seamlessly download market data, analyze market patterns etc.",True,False,False,False,thalesians/pythalesians +pybacktest,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2019-09-09,817,https://github.com/ematvey/pybacktest,"Vectorized backtesting framework in Python / pandas, designed to make your backtesting easier.",True,False,False,False,ematvey/pybacktest +pyalgotrade,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2023-03-05,4643,https://github.com/gbeced/pyalgotrade,Python Algorithmic Trading Library.,True,False,False,False,gbeced/pyalgotrade +basana,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-12-29,820,https://github.com/gbeced/basana,"A Python async and event driven framework for algorithmic trading, with a focus on crypto currencies.",True,False,False,False,gbeced/basana +ta,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-18,4915,https://github.com/bukosabino/ta,Technical Analysis Library using Pandas (Python),True,False,False,False,bukosabino/ta +algobroker,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2016-03-31,97,https://github.com/joequant/algobroker,This is an execution engine for algo trading.,True,False,False,False,joequant/algobroker +finmarketpy,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-03-10,3727,https://github.com/cuemacro/finmarketpy,Python library for backtesting trading strategies and analyzing financial markets.,True,False,False,False,cuemacro/finmarketpy +binary-martingale,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2017-10-16,48,https://github.com/metaperl/binary-martingale,Computer program to automatically trade binary options martingale style.,True,False,False,False,metaperl/binary-martingale +fooltrader,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2020-07-19,1182,https://github.com/foolcage/fooltrader,the project using big-data technology to provide an uniform way to analyze the whole market.,True,False,False,False,foolcage/fooltrader +zvt,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-01,4033,https://github.com/zvtvz/zvt,"the project using sql, pandas to provide an uniform and extendable way to record data, computing factors, select securities, backtesting, realtime trading and it could show all of them in clearly charts in realtime.",True,False,False,False,zvtvz/zvt +pylivetrader,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2022-04-11,681,https://github.com/alpacahq/pylivetrader,zipline-compatible live trading library.,True,False,False,False,alpacahq/pylivetrader +pipeline-live,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2022-04-11,206,https://github.com/alpacahq/pipeline-live,zipline's pipeline capability with IEX for live trading.,True,False,False,False,alpacahq/pipeline-live +zipline-extensions,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2018-09-17,18,https://github.com/quantrocket-llc/zipline-extensions,Zipline extensions and adapters for QuantRocket.,True,False,False,False,quantrocket-llc/zipline-extensions +moonshot,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2024-08-14,256,https://github.com/quantrocket-llc/moonshot,Vectorized backtester and trading engine for QuantRocket based on Pandas.,True,False,False,False,quantrocket-llc/moonshot +PyPortfolioOpt,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-10,5570,https://github.com/robertmartin8/PyPortfolioOpt,"Financial portfolio optimization in python, including classical efficient frontier and advanced methods.",True,False,False,False,robertmartin8/PyPortfolioOpt +Eiten,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2020-09-21,3165,https://github.com/tradytics/eiten,"Eiten is an open source toolkit by Tradytics that implements various statistical and algorithmic investing strategies such as Eigen Portfolios, Minimum Variance Portfolios, Maximum Sharpe Ratio Portfolios, and Genetic Algorithms based Portfolios.",True,False,False,False,tradytics/eiten +riskparity.py,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2024-05-27,318,https://github.com/dppalomar/riskparity.py,fast and scalable design of risk parity portfolios with TensorFlow 2.0,True,False,False,False,dppalomar/riskparity.py +mlfinlab,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2021-12-01,4619,https://github.com/hudson-and-thames/mlfinlab,"Implementations regarding ""Advances in Financial Machine Learning"" by Marcos Lopez de Prado. (Feature Engineering, Financial Data Structures, Meta-Labeling)",True,False,False,False,hudson-and-thames/mlfinlab +pyqstrat,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2023-11-05,371,https://github.com/abbass2/pyqstrat,"A fast, extensible, transparent python library for backtesting quantitative strategies.",True,False,False,False,abbass2/pyqstrat +NowTrade,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2017-02-07,101,https://github.com/edouardpoitras/NowTrade,Python library for backtesting technical/mechanical strategies in the stock and currency markets.,True,False,False,False,edouardpoitras/NowTrade +pinkfish,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-05-12,293,https://github.com/fja05680/pinkfish,A backtester and spreadsheet library for security analysis.,True,False,False,False,fja05680/pinkfish +PRISM-INSIGHT,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-20,505,https://github.com/dragon1086/prism-insight,"AI-powered stock analysis system with 13 specialized agents, automated trading via KIS API, supporting Korean & US markets.",True,False,False,False,dragon1086/prism-insight +FinClaw,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-22,15,https://github.com/NeuZhou/finclaw,"AI-powered financial intelligence engine with 8 master strategies across US, CN, and HK markets. Multi-agent architecture with +29.1% annual alpha. 227 tests.",True,False,False,False,NeuZhou/finclaw +aat,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-02,780,https://github.com/timkpaine/aat,Async Algorithmic Trading Engine,True,False,False,False,timkpaine/aat +Backtesting.py,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,,0,https://kernc.github.io/backtesting.py/,Backtest trading strategies in Python,False,False,False,False, +catalyst,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2021-09-22,2556,https://github.com/enigmampc/catalyst,An Algorithmic Trading Library for Crypto-Assets in Python,True,False,False,False,enigmampc/catalyst +quantstats,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-01-13,6871,https://github.com/ranaroussi/quantstats,"Portfolio analytics for quants, written in Python",True,False,False,False,ranaroussi/quantstats +qtpylib,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2021-03-24,2256,https://github.com/ranaroussi/qtpylib,"QTPyLib, Pythonic Algorithmic Trading ",True,False,False,False,ranaroussi/qtpylib +Quantdom,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2019-03-12,761,https://github.com/constverum/Quantdom,Python-based framework for backtesting trading strategies & analyzing financial markets [GUI :neckbeard:],True,False,False,False,constverum/Quantdom +freqtrade,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-22,47917,https://github.com/freqtrade/freqtrade,"Free, open source crypto trading bot",True,False,False,False,freqtrade/freqtrade +algorithmic-trading-with-python,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2021-06-01,3265,https://github.com/chrisconlan/algorithmic-trading-with-python,"Free `pandas` and `scikit-learn` resources for trading simulation, backtesting, and machine learning on financial data.",True,False,False,False,chrisconlan/algorithmic-trading-with-python +DeepDow,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2024-01-24,1117,https://github.com/jankrepl/deepdow,Portfolio optimization with deep learning,True,False,False,False,jankrepl/deepdow +Qlib,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-10,39187,https://github.com/microsoft/qlib,"An AI-oriented Quantitative Investment Platform by Microsoft. Full ML pipeline of data processing, model training, back-testing; and covers the entire chain of quantitative investment: alpha seeking, risk modeling, portfolio optimization, and order execution.",True,False,False,False,microsoft/qlib +machine-learning-for-trading,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2023-03-05,16805,https://github.com/stefan-jansen/machine-learning-for-trading,Code and resources for Machine Learning for Algorithmic Trading,True,False,False,False,stefan-jansen/machine-learning-for-trading +AlphaPy,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-08-24,1703,https://github.com/ScottfreeLLC/AlphaPy,"Automated Machine Learning [AutoML] with Python, scikit-learn, Keras, XGBoost, LightGBM, and CatBoost",True,False,False,False,ScottfreeLLC/AlphaPy +jesse,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-21,7570,https://github.com/jesse-ai/jesse,An advanced crypto trading bot written in Python,True,False,False,False,jesse-ai/jesse +rqalpha,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-11,6245,https://github.com/ricequant/rqalpha,"A extendable, replaceable Python algorithmic backtest && trading framework supporting multiple securities.",True,False,False,False,ricequant/rqalpha +FinRL-Library,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-21,14253,https://github.com/AI4Finance-LLC/FinRL-Library,A Deep Reinforcement Learning Library for Automated Trading in Quantitative Finance. NeurIPS 2020.,True,False,False,False,AI4Finance-LLC/FinRL-Library +bulbea,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2017-03-19,2264,https://github.com/achillesrasquinha/bulbea,Deep Learning based Python Library for Stock Market Prediction and Modelling.,True,False,False,False,achillesrasquinha/bulbea +ib_nope,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2021-04-22,33,https://github.com/ajhpark/ib_nope,Automated trading system for NOPE strategy over IBKR TWS.,True,False,False,False,ajhpark/ib_nope +OctoBot,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-17,5499,https://github.com/Drakkar-Software/OctoBot,"Open source cryptocurrency trading bot for high frequency, arbitrage, TA and social trading with an advanced web interface.",True,False,False,False,Drakkar-Software/OctoBot +OpenFinClaw,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-22,120,https://github.com/cryptoSUN2049/openFinclaw,"AI-native hedge fund platform: natural language strategy generation, Rust backtesting engine, multi-market execution, and self-evolving strategy pipeline with community leaderboard.",True,False,False,False,cryptoSUN2049/openFinclaw +bta-lib,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2020-03-11,492,https://github.com/mementum/bta-lib,Technical Analysis library in pandas for backtesting algotrading and quantitative analysis.,True,False,False,False,mementum/bta-lib +Stock-Prediction-Models,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2021-01-05,9264,https://github.com/huseinzol05/Stock-Prediction-Models,Gathers machine learning and deep learning models for Stock forecasting including trading bots and simulations.,True,False,False,False,huseinzol05/Stock-Prediction-Models +TuneTA,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2023-10-13,457,https://github.com/jmrichardson/tuneta,TuneTA optimizes technical indicators using a distance correlation measure to a user defined target feature such as next day return.,True,False,False,False,jmrichardson/tuneta +AutoTrader,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-05-04,1236,https://github.com/kieran-mackle/AutoTrader,A Python-based development platform for automated trading systems - from backtesting to optimization to livetrading.,True,False,False,False,kieran-mackle/AutoTrader +fast-trade,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-11,532,https://github.com/jrmeier/fast-trade,A library built with backtest portability and performance in mind for backtest trading strategies.,True,False,False,False,jrmeier/fast-trade +qf-lib,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-05,902,https://github.com/quarkfin/qf-lib,QF-Lib is a Python library that provides high quality tools for quantitative finance.,True,False,False,False,quarkfin/qf-lib +tda-api,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2024-06-16,1313,https://github.com/alexgolec/tda-api,"Gather data and trade equities, options, and ETFs via TDAmeritrade.",True,False,False,False,alexgolec/tda-api +vectorbt,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-19,6949,https://github.com/polakowo/vectorbt,"Find your trading edge, using a powerful toolkit for backtesting, algorithmic trading, and research.",True,False,False,False,polakowo/vectorbt +Lean,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-14,18007,https://github.com/QuantConnect/Lean,"Lean Algorithmic Trading Engine by QuantConnect (Python, C#).",True,False,False,False,QuantConnect/Lean +fast-trade,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-11,532,https://github.com/jrmeier/fast-trade,Low code backtesting library utilizing pandas and technical analysis indicators.,True,False,False,False,jrmeier/fast-trade +pysystemtrade,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-19,3233,https://github.com/robcarver17/pysystemtrade,"pysystemtrade is the open source version of Robert Carver's backtesting and trading engine that implements systems according to the framework outlined in his book ""Systematic Trading"", which is further developed on his [blog](https://qoppac.blogspot.com/).",True,False,False,False,robcarver17/pysystemtrade +pytrendseries,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-21,163,https://github.com/rafa-rod/pytrendseries,"Detect trend in time series, drawdown, drawdown within a constant look-back window , maximum drawdown, time underwater.",True,False,False,False,rafa-rod/pytrendseries +PyLOB,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2023-01-01,199,https://github.com/DrAshBooth/PyLOB,Fully functioning fast Limit Order Book written in Python.,True,False,False,False,DrAshBooth/PyLOB +PyBroker,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-05,3240,https://github.com/edtechre/pybroker,Algorithmic Trading with Machine Learning.,True,False,False,False,edtechre/pybroker +OctoBot Script,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-04,39,https://github.com/Drakkar-Software/OctoBot-Script,A quant framework to create cryptocurrencies strategies - from backtesting to optimization to livetrading.,True,False,False,False,Drakkar-Software/OctoBot-Script +hftbacktest,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-12-23,3838,https://github.com/nkaz001/hftbacktest,"A high-frequency trading and market-making backtesting tool accounts for limit orders, queue positions, and latencies, utilizing full tick data for trades and order books.",True,False,False,False,nkaz001/hftbacktest +vnpy,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-01-14,38185,https://github.com/vnpy/vnpy,VeighNa is a Python-based open source quantitative trading system development framework.,True,False,False,False,vnpy/vnpy +Intelligent Trading Bot,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-02-28,1642,https://github.com/asavinov/intelligent-trading-bot,Automatically generating signals and trading based on machine learning and feature engineering,True,False,False,False,asavinov/intelligent-trading-bot +fastquant,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2023-09-15,1746,https://github.com/enzoampil/fastquant,fastquant allows you to easily backtest investment strategies with as few as 3 lines of python code.,True,False,False,False,enzoampil/fastquant +nautilus_trader,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-22,21357,https://github.com/nautechsystems/nautilus_trader,A high-performance algorithmic trading platform and event-driven backtester.,True,False,False,False,nautechsystems/nautilus_trader +YABTE,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2024-05-11,6,https://github.com/bsdz/yabte,Yet Another (Python) BackTesting Engine.,True,False,False,False,bsdz/yabte +Trading Strategy,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-21,207,https://github.com/tradingstrategy-ai/getting-started,"TradingStrategy.ai is a market data, backtesting, live trading and investor management framework for decentralised finance",True,False,False,False,tradingstrategy-ai/getting-started +Hikyuu,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-22,3053,https://github.com/fasiondog/hikyuu,"A base on Python/C++ open source high-performance quant framework for faster analysis and backtesting, contains the complete trading system components for reuse and combination.",True,False,False,False,fasiondog/hikyuu +rust_bt,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-01-05,58,https://github.com/jensnesten/rust_bt,"A high performance, low-latency backtesting engine for testing quantitative trading strategies on historical and live data in Rust.",True,False,False,False,jensnesten/rust_bt +Gunbot Quant,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-08-19,42,https://github.com/GuntharDeNiro/gunbot-quant,"Toolkit for quantitative trading analysis. It integrates an advanced market screener, a multi-strategy, multi-asset backtesting engine. Use with built-in GUI or through CLI.",True,False,False,False,GuntharDeNiro/gunbot-quant +StrateQueue,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-12-30,170,https://github.com/StrateQueue/StrateQueue,"An open‑source, broker‑agnostic Python library that lets you seamlessly deploy strategies from any major backtesting engine to live (or paper) trading with zero code changes and built‑in safety controls.",True,False,False,False,StrateQueue/StrateQueue +PythonTradingFramework,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-22,27,https://github.com/JustinGuese/python_tradingbot_framework,"Python algorithmic trading bot framework for Kubernetes: backtesting, hyperparameter optimization, 150+ technical analysis indicators (RSI, MACD, Bollinger Bands, ADX), portfolio management, PostgreSQL integration, Helm deployment, CronJob scheduling. Minimal overhead, production-ready, Yahoo Finance data.",True,False,False,False,JustinGuese/python_tradingbot_framework +QTradeX-AI-Agents,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-05-25,16,https://github.com/squidKid-deluxe/QTradeX-AI-Agents,Example strategies for the QTradeX platfrom.,True,False,False,False,squidKid-deluxe/QTradeX-AI-Agents +QTradeX-Algo-Trading-SDK,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-01-13,60,https://github.com/squidKid-deluxe/QTradeX-Algo-Trading-SDK,"AI-powered SDK featuring algorithmic trading, backtesting, deployment on 100+ exchanges, and multiple optimization engines.",True,False,False,False,squidKid-deluxe/QTradeX-Algo-Trading-SDK +antback,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-11-12,15,https://github.com/ts-kontakt/antback,"A lightweight, event-loop-style backtest engine that allows a function-driven imperative style using efficient stateful helper functions and data containers.",True,False,False,False,ts-kontakt/antback +VARRD,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-09,10,https://github.com/augiemazza/varrd,"AI-powered trading edge discovery platform that validates trading ideas with event studies, statistical tests, and real market data. Web app, MCP server, CLI (`pip install varrd`), and Python SDK.",True,False,False,False,augiemazza/varrd +polymarket-whales,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-20,28,https://github.com/al1enjesus/polymarket-whales,Real-time whale trade tracker for Polymarket — terminal alerts + Telegram notifications when large orders hit the book.,True,False,False,False,al1enjesus/polymarket-whales +QuantLibRisks,Python,Risk Analysis,Risk Analysis,risk-analysis,2024-04-04,19,https://github.com/auto-differentiation/QuantLib-Risks-Py,Fast risks with QuantLib,True,False,False,False,auto-differentiation/QuantLib-Risks-Py +XAD,Python,Risk Analysis,Risk Analysis,risk-analysis,2024-05-21,19,https://github.com/auto-differentiation/xad-py,Automatic Differentation (AAD) Library,True,False,False,False,auto-differentiation/xad-py +pyfolio,Python,Risk Analysis,Risk Analysis,risk-analysis,2020-02-28,6265,https://github.com/quantopian/pyfolio,Portfolio and risk analytics in Python.,True,False,False,False,quantopian/pyfolio +empyrical,Python,Risk Analysis,Risk Analysis,risk-analysis,2020-10-14,1474,https://github.com/quantopian/empyrical,Common financial risk and performance metrics.,True,False,False,False,quantopian/empyrical +fecon235,Python,Risk Analysis,Risk Analysis,risk-analysis,2018-12-03,1255,https://github.com/rsvp/fecon235,"Computational tools for financial economics include: Gaussian Mixture model of leptokurtotic risk, adaptive Boltzmann portfolios.",True,False,False,False,rsvp/fecon235 +finance,Python,Risk Analysis,Risk Analysis,risk-analysis,2014-03-24,0,https://pypi.org/project/finance/,Financial Risk Calculations. Optimized for ease of use through class construction and operator overload.,False,False,True,False, +qfrm,Python,Risk Analysis,Risk Analysis,risk-analysis,2015-12-12,0,https://pypi.org/project/qfrm/,"Quantitative Financial Risk Management: awesome OOP tools for measuring, managing and visualizing risk of financial instruments and portfolios. (Last updated: 2015-12-12)",False,False,True,False, +visualize-wealth,Python,Risk Analysis,Risk Analysis,risk-analysis,2015-06-10,146,https://github.com/benjaminmgross/visualize-wealth,Portfolio construction and quantitative analysis.,True,False,False,False,benjaminmgross/visualize-wealth +VisualPortfolio,Python,Risk Analysis,Risk Analysis,risk-analysis,2017-02-28,107,https://github.com/wegamekinglc/VisualPortfolio,This tool is used to visualize the performance of a portfolio.,True,False,False,False,wegamekinglc/VisualPortfolio +universal-portfolios,Python,Risk Analysis,Risk Analysis,risk-analysis,2025-09-11,852,https://github.com/Marigold/universal-portfolios,Collection of algorithms for online portfolio selection.,True,False,False,False,Marigold/universal-portfolios +FinQuant,Python,Risk Analysis,Risk Analysis,risk-analysis,2023-09-03,1731,https://github.com/fmilthaler/FinQuant,"A program for financial portfolio management, analysis and optimization.",True,False,False,False,fmilthaler/FinQuant +Empyrial,Python,Risk Analysis,Risk Analysis,risk-analysis,2025-09-14,1053,https://github.com/ssantoshp/Empyrial,Portfolio's risk and performance analytics and returns predictions.,True,False,False,False,ssantoshp/Empyrial +risktools,Python,Risk Analysis,Risk Analysis,risk-analysis,2024-12-07,38,https://github.com/bbcho/risktools-dev,Risk tools for use within the crude and crude products trading space with partial implementation of R's PerformanceAnalytics.,True,False,False,False,bbcho/risktools-dev +Riskfolio-Lib,Python,Risk Analysis,Risk Analysis,risk-analysis,2026-03-08,3825,https://github.com/dcajasn/Riskfolio-Lib,Portfolio Optimization and Quantitative Strategic Asset Allocation in Python.,True,False,False,False,dcajasn/Riskfolio-Lib +empyrical-reloaded,Python,Risk Analysis,Risk Analysis,risk-analysis,2025-07-29,101,https://github.com/stefan-jansen/empyrical-reloaded,Common financial risk and performance metrics. [empyrical](https://github.com/quantopian/empyrical) fork.,True,False,False,False,stefan-jansen/empyrical-reloaded +pyfolio-reloaded,Python,Risk Analysis,Risk Analysis,risk-analysis,2025-06-02,579,https://github.com/stefan-jansen/pyfolio-reloaded,Portfolio and risk analytics in Python. [pyfolio](https://github.com/quantopian/pyfolio) fork.,True,False,False,False,stefan-jansen/pyfolio-reloaded +fortitudo.tech,Python,Risk Analysis,Risk Analysis,risk-analysis,2026-02-19,289,https://github.com/fortitudo-tech/fortitudo.tech,Conditional Value-at-Risk (CVaR) portfolio optimization and Entropy Pooling views / stress-testing in Python.,True,False,False,False,fortitudo-tech/fortitudo.tech +quantitative-finance-tools,Python,Risk Analysis,Risk Analysis,risk-analysis,2025-12-13,4,https://github.com/omichauhan-lgtm/quantitative-finance-tools,Library for portfolio optimization (MVO) and rigorous risk metrics (VaR/CVaR).,True,False,False,False,omichauhan-lgtm/quantitative-finance-tools +curistat,Python,Risk Analysis,Risk Analysis,risk-analysis,,0,https://github.com/moxiespirit/MyClone/tree/main/volatility_platform,"Futures volatility forecasting platform for ES/NQ. Proprietary CVN rating (1-10), regime detection (CRC composite), 8 directional signals, economic event impact analytics. Includes MCP server for AI agent integration.",True,False,False,False, +Prop Trader Compass,Python,Risk Analysis,Risk Analysis,risk-analysis,,0,https://otto-ships.github.io/prop-trader-compass/,Interactive risk and payout calculator for Futures and CFD traders; features one-time fee firm comparisons.,False,False,False,False, +alphalens,Python,Factor Analysis,Factor Analysis,factor-analysis,2020-04-27,4188,https://github.com/quantopian/alphalens,Performance analysis of predictive alpha factors.,True,False,False,False,quantopian/alphalens +alphalens-reloaded,Python,Factor Analysis,Factor Analysis,factor-analysis,2025-06-02,557,https://github.com/stefan-jansen/alphalens-reloaded,Performance analysis of predictive (alpha) stock factors.,True,False,False,False,stefan-jansen/alphalens-reloaded +Spectre,Python,Factor Analysis,Factor Analysis,factor-analysis,2025-04-15,784,https://github.com/Heerozh/spectre,GPU-accelerated Factors analysis library and Backtester,True,False,False,False,Heerozh/spectre +quant-lab-alpha,Python,Factor Analysis,Factor Analysis,factor-analysis,2026-03-15,27,https://github.com/husainm97/quant-lab-alpha,Open-source investment analytics platform bridging academic research and retail finance.,True,False,False,False,husainm97/quant-lab-alpha +Asset News Sentiment Analyzer,Python,Sentiment Analysis,Sentiment Analysis,sentiment-analysis,2024-07-27,193,https://github.com/KVignesh122/AssetNewsSentimentAnalyzer,Sentiment analysis and report generation package for financial assets and securities utilizing GPT models.,True,False,False,False,KVignesh122/AssetNewsSentimentAnalyzer +Social Stock Sentiment API,Python,Sentiment Analysis,Sentiment Analysis,sentiment-analysis,,0,https://api.adanos.org/docs,"REST API analyzing Reddit and X/Twitter for stock mentions and sentiment, providing buzz scores, trending stocks, and AI-generated trend explanations.",False,False,False,False, +Jupyter Quant,Python,Quant Research Environment,Quant Research Environment,quant-research-environment,2024-06-14,19,https://github.com/gnzsnz/jupyter-quant,"A dockerized Jupyter quant research environment with preloaded tools for quant analysis, statsmodels, pymc, arch, py_vollib, zipline-reloaded, PyPortfolioOpt, etc.",True,False,False,False,gnzsnz/jupyter-quant +ARCH,Python,Time Series,Time Series,time-series,2026-03-09,1496,https://github.com/bashtage/arch,ARCH models in Python.,True,False,False,False,bashtage/arch +statsmodels,Python,Time Series,Time Series,time-series,2026-03-19,11311,http://statsmodels.sourceforge.net,"Python module that allows users to explore data, estimate statistical models, and perform statistical tests. [GitHub](https://github.com/statsmodels/statsmodels)",True,False,False,False,statsmodels/statsmodels +dynts,Python,Time Series,Time Series,time-series,2016-11-02,87,https://github.com/quantmind/dynts,Python package for timeseries analysis and manipulation.,True,False,False,False,quantmind/dynts +PyFlux,Python,Time Series,Time Series,time-series,2018-12-16,2141,https://github.com/RJT1990/pyflux,Python library for timeseries modelling and inference (frequentist and Bayesian) on models.,True,False,False,False,RJT1990/pyflux +tsfresh,Python,Time Series,Time Series,time-series,2025-11-15,9154,https://github.com/blue-yonder/tsfresh,Automatic extraction of relevant features from time series.,True,False,False,False,blue-yonder/tsfresh +Facebook Prophet,Python,Time Series,Time Series,time-series,2026-02-02,20088,https://github.com/facebook/prophet,Tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth.,True,False,False,False,facebook/prophet +tsmoothie,Python,Time Series,Time Series,time-series,2023-11-23,769,https://github.com/cerlymarco/tsmoothie,A python library for time-series smoothing and outlier detection in a vectorized way.,True,False,False,False,cerlymarco/tsmoothie +pmdarima,Python,Time Series,Time Series,time-series,2025-11-17,1717,https://github.com/alkaline-ml/pmdarima,"A statistical library designed to fill the void in Python's time series analysis capabilities, including the equivalent of R's auto.arima function.",True,False,False,False,alkaline-ml/pmdarima +gluon-ts,Python,Time Series,Time Series,time-series,2026-03-17,5146,https://github.com/awslabs/gluon-ts,vProbabilistic time series modeling in Python.,True,False,False,False,awslabs/gluon-ts +functime,Python,Time Series,Time Series,time-series,2024-06-15,1168,https://github.com/functime-org/functime,Time-series machine learning at scale. Built with Polars for embarrassingly parallel feature extraction and forecasts on panel data.,True,False,False,False,functime-org/functime +exchange_calendars,Python,Calendars,Calendars,calendars,2026-01-19,607,https://github.com/gerrymanoim/exchange_calendars,Stock Exchange Trading Calendars.,True,False,False,False,gerrymanoim/exchange_calendars +bizdays,Python,Calendars,Calendars,calendars,2026-03-08,89,https://github.com/wilsonfreitas/python-bizdays,Business days calculations and utilities.,True,False,False,False,wilsonfreitas/python-bizdays +pandas_market_calendars,Python,Calendars,Calendars,calendars,2026-03-12,958,https://github.com/rsheftel/pandas_market_calendars,Exchange calendars to use with pandas for trading applications.,True,False,False,False,rsheftel/pandas_market_calendars +Polymarket Scanner API,Python,Data Sources,Data Sources,data-sources,2026-03-14,1,https://github.com/vesper-astrena/polymarket-scanner-api,"Real-time arbitrage detection API for Polymarket prediction markets, scanning 12,000+ markets for mispricings.",True,False,False,False,vesper-astrena/polymarket-scanner-api +yfinance,Python,Data Sources,Data Sources,data-sources,2026-03-19,22269,https://github.com/ranaroussi/yfinance,Yahoo! Finance market data downloader (+faster Pandas Datareader),True,False,False,False,ranaroussi/yfinance +defeatbeta-api,Python,Data Sources,Data Sources,data-sources,2026-03-19,520,https://github.com/defeat-beta/defeatbeta-api,An open-source alternative to Yahoo Finance's market data APIs with higher reliability.,True,False,False,False,defeat-beta/defeatbeta-api +findatapy,Python,Data Sources,Data Sources,data-sources,2026-03-20,2008,https://github.com/cuemacro/findatapy,"Python library to download market data via Bloomberg, Quandl, Yahoo etc.",True,False,False,False,cuemacro/findatapy +googlefinance,Python,Data Sources,Data Sources,data-sources,2018-09-23,818,https://github.com/hongtaocai/googlefinance,Python module to get real-time stock data from Google Finance API.,True,False,False,False,hongtaocai/googlefinance +yahoo-finance,Python,Data Sources,Data Sources,data-sources,2021-12-15,1430,https://github.com/lukaszbanasiak/yahoo-finance,Python module to get stock data from Yahoo! Finance.,True,False,False,False,lukaszbanasiak/yahoo-finance +pandas-datareader,Python,Data Sources,Data Sources,data-sources,2025-04-03,3169,https://github.com/pydata/pandas-datareader,"Python module to get data from various sources (Google Finance, Yahoo Finance, FRED, OECD, Fama/French, World Bank, Eurostat...) into Pandas datastructures such as DataFrame, Panel with a caching mechanism.",True,False,False,False,pydata/pandas-datareader +pandas-finance,Python,Data Sources,Data Sources,data-sources,2025-03-07,160,https://github.com/davidastephens/pandas-finance,High level API for access to and analysis of financial data.,True,False,False,False,davidastephens/pandas-finance +pyhoofinance,Python,Data Sources,Data Sources,data-sources,2016-10-07,9,https://github.com/innes213/pyhoofinance,Rapidly queries Yahoo Finance for multiple tickers and returns typed data for analysis.,True,False,False,False,innes213/pyhoofinance +yfinanceapi,Python,Data Sources,Data Sources,data-sources,2020-05-26,9,https://github.com/Karthik005/yfinanceapi,Finance API for Python.,True,False,False,False,Karthik005/yfinanceapi +yql-finance,Python,Data Sources,Data Sources,data-sources,2015-08-29,16,https://github.com/slawek87/yql-finance,"yql-finance is simple and fast. API returns stock closing prices for current period of time and current stock ticker (i.e. APPL, GOOGL).",True,False,False,False,slawek87/yql-finance +ystockquote,Python,Data Sources,Data Sources,data-sources,2017-03-10,537,https://github.com/cgoldberg/ystockquote,Retrieve stock quote data from Yahoo Finance.,True,False,False,False,cgoldberg/ystockquote +wallstreet,Python,Data Sources,Data Sources,data-sources,2024-03-09,1625,https://github.com/mcdallas/wallstreet,Real time stock and option data.,True,False,False,False,mcdallas/wallstreet +stock_extractor,Python,Data Sources,Data Sources,data-sources,2016-09-10,51,https://github.com/ZachLiuGIS/stock_extractor,General Purpose Stock Extractors from Online Resources.,True,False,False,False,ZachLiuGIS/stock_extractor +Stockex,Python,Data Sources,Data Sources,data-sources,2021-09-15,33,https://github.com/cttn/Stockex,Python wrapper for Yahoo! Finance API.,True,False,False,False,cttn/Stockex +SwapAPI,Python,Data Sources,Data Sources,data-sources,2026-03-17,0,https://swapapi.dev,Free DEX aggregator API returning executable swap calldata across 46 EVM chains. No API key required. [GitHub](https://github.com/swap-api/swap-api),True,False,False,False,swap-api/swap-api +finsymbols,Python,Data Sources,Data Sources,data-sources,2017-07-23,123,https://github.com/skillachie/finsymbols,"Obtains stock symbols and relating information for SP500, AMEX, NYSE, and NASDAQ.",True,False,False,False,skillachie/finsymbols +FRB,Python,Data Sources,Data Sources,data-sources,2018-12-22,180,https://github.com/avelkoski/FRB,Python Client for FRED® API.,True,False,False,False,avelkoski/FRB +inquisitor,Python,Data Sources,Data Sources,data-sources,2019-10-10,56,https://github.com/econdb/inquisitor,Python Interface to Econdb.com API.,True,False,False,False,econdb/inquisitor +yfi,Python,Data Sources,Data Sources,data-sources,2016-02-12,2,https://github.com/nickelkr/yfi,Yahoo! YQL library.,True,False,False,False,nickelkr/yfi +chinesestockapi,Python,Data Sources,Data Sources,data-sources,2015-03-21,0,https://pypi.org/project/chinesestockapi/,Python API to get Chinese stock price. (Last updated: 2015-03-21),False,False,True,False, +exchange,Python,Data Sources,Data Sources,data-sources,2015-07-07,18,https://github.com/akarat/exchange,Get current exchange rate.,True,False,False,False,akarat/exchange +ticks,Python,Data Sources,Data Sources,data-sources,2016-01-08,16,https://github.com/jamescnowell/ticks,Simple command line tool to get stock ticker data.,True,False,False,False,jamescnowell/ticks +pybbg,Python,Data Sources,Data Sources,data-sources,2015-01-20,53,https://github.com/bpsmith/pybbg,Python interface to Bloomberg COM APIs.,True,False,False,False,bpsmith/pybbg +ccy,Python,Data Sources,Data Sources,data-sources,2025-12-28,95,https://github.com/lsbardel/ccy,Python module for currencies.,True,False,False,False,lsbardel/ccy +tushare,Python,Data Sources,Data Sources,data-sources,2024-08-27,0,https://pypi.org/project/tushare/,A utility for crawling historical and Real-time Quotes data of China stocks. (Last updated: 2024-08-27),False,False,True,False, +edinet-mcp,Python,Data Sources,Data Sources,data-sources,2026-03-02,4,https://github.com/ajtgjmdjp/edinet-mcp,"Parse Japanese XBRL financial statements from EDINET with 161 normalized labels, 26 financial metrics, and multi-company screening.",True,False,False,False,ajtgjmdjp/edinet-mcp +estat-mcp,Python,Data Sources,Data Sources,data-sources,2026-03-02,0,https://github.com/ajtgjmdjp/estat-mcp,"Access Japanese government statistics (e-Stat) covering population, GDP, CPI, labor, and trade data with MCP integration and Polars export.",True,False,False,False,ajtgjmdjp/estat-mcp +tdnet-disclosure-mcp,Python,Data Sources,Data Sources,data-sources,2026-03-02,1,https://github.com/ajtgjmdjp/tdnet-disclosure-mcp,"Access Japanese timely disclosures (TDNet) via MCP. Retrieve earnings, dividends, forecasts, buybacks, and other filings for 4,000+ listed companies. No API key required.",True,False,False,False,ajtgjmdjp/tdnet-disclosure-mcp +cn_stock_src,Python,Data Sources,Data Sources,data-sources,2016-02-29,34,https://github.com/jealous/cn_stock_src,Utility for retrieving basic China stock data from different sources.,True,False,False,False,jealous/cn_stock_src +coinmarketcap,Python,Data Sources,Data Sources,data-sources,2023-05-23,435,https://github.com/barnumbirr/coinmarketcap,Python API for coinmarketcap.,True,False,False,False,barnumbirr/coinmarketcap +coinpulse,Python,Data Sources,Data Sources,data-sources,2026-01-09,1,https://github.com/soutone/coinpulse-python,"Python SDK for cryptocurrency portfolio tracking with real-time prices, P/L calculations, and price alerts. Free tier available.",True,False,False,False,soutone/coinpulse-python +after-hours,Python,Data Sources,Data Sources,data-sources,2020-06-22,38,https://github.com/datawrestler/after-hours,Obtain pre market and after hours stock prices for a given symbol.,True,False,False,False,datawrestler/after-hours +bronto-python,Python,Data Sources,Data Sources,data-sources,2015-02-27,0,https://pypi.org/project/bronto-python/,Bronto API Integration for Python. [GitHub](https://github.com/Scotts-Marketplace/bronto-python),True,False,True,False,Scotts-Marketplace/bronto-python +pytdx,Python,Data Sources,Data Sources,data-sources,2020-04-15,1506,https://github.com/rainx/pytdx,Python Interface for retrieving chinese stock realtime quote data from TongDaXin Nodes.,True,False,False,False,rainx/pytdx +pdblp,Python,Data Sources,Data Sources,data-sources,2024-12-14,255,https://github.com/matthewgilbert/pdblp,A simple interface to integrate pandas and the Bloomberg Open API.,True,False,False,False,matthewgilbert/pdblp +tiingo,Python,Data Sources,Data Sources,data-sources,2025-06-22,303,https://github.com/hydrosquall/tiingo-python,"Python interface for daily composite prices/OHLC/Volume + Real-time News Feeds, powered by the Tiingo Data Platform.",True,False,False,False,hydrosquall/tiingo-python +iexfinance,Python,Data Sources,Data Sources,data-sources,2021-01-02,650,https://github.com/addisonlynch/iexfinance,Python Interface for retrieving real-time and historical prices and equities data from The Investor's Exchange.,True,False,False,False,addisonlynch/iexfinance +pyEX,Python,Data Sources,Data Sources,data-sources,2024-02-05,409,https://github.com/timkpaine/pyEX,"Python interface to IEX with emphasis on pandas, support for streaming data, premium data, points data (economic, rates, commodities), and technical indicators.",True,False,False,False,timkpaine/pyEX +alpaca-trade-api,Python,Data Sources,Data Sources,data-sources,2024-01-12,1861,https://github.com/alpacahq/alpaca-trade-api-python,Python interface for retrieving real-time and historical prices from Alpaca API as well as trade execution.,True,False,False,False,alpacahq/alpaca-trade-api-python +metatrader5,Python,Data Sources,Data Sources,data-sources,2026-02-20,0,https://pypi.org/project/MetaTrader5/,API Connector to MetaTrader 5 Terminal. (Last updated: 2026-02-20),False,False,True,False, +akshare,Python,Data Sources,Data Sources,data-sources,2026-03-22,17581,https://github.com/jindaxiang/akshare,"AkShare is an elegant and simple financial data interface library for Python, built for human beings! ",True,False,False,False,jindaxiang/akshare +yahooquery,Python,Data Sources,Data Sources,data-sources,2025-05-15,900,https://github.com/dpguthrie/yahooquery,Python interface for retrieving data through unofficial Yahoo Finance API.,True,False,False,False,dpguthrie/yahooquery +investpy,Python,Data Sources,Data Sources,data-sources,2022-10-02,1811,https://github.com/alvarobartt/investpy,Financial Data Extraction from Investing.com with Python! ,True,False,False,False,alvarobartt/investpy +yliveticker,Python,Data Sources,Data Sources,data-sources,2021-04-29,163,https://github.com/yahoofinancelive/yliveticker,Live stream of market data from Yahoo Finance websocket.,True,False,False,False,yahoofinancelive/yliveticker +bbgbridge,Python,Data Sources,Data Sources,data-sources,2020-01-07,2,https://github.com/ran404/bbgbridge,Easy to use Bloomberg Desktop API wrapper for Python.,True,False,False,False,ran404/bbgbridge +polygon.io,Python,Data Sources,Data Sources,data-sources,2026-03-05,1361,https://github.com/polygon-io/client-python,A python library for Polygon.io financial data APIs.,True,False,False,False,polygon-io/client-python +alpha_vantage,Python,Data Sources,Data Sources,data-sources,2026-03-03,4743,https://github.com/RomelTorres/alpha_vantage,A python wrapper for Alpha Vantage API for financial data.,True,False,False,False,RomelTorres/alpha_vantage +oilpriceapi,Python,Data Sources,Data Sources,data-sources,2026-03-18,0,https://github.com/OilpriceAPI/python-sdk,"Python SDK for real-time oil and commodity prices (WTI, Brent, Urals, natural gas, coal) with OpenBB integration.",True,False,False,False,OilpriceAPI/python-sdk +FinanceDataReader,Python,Data Sources,Data Sources,data-sources,2026-03-11,1442,https://github.com/FinanceData/FinanceDataReader,"Open Source Financial data reader for U.S, Korean, Japanese, Chinese, Vietnamese Stocks",True,False,False,False,FinanceData/FinanceDataReader +pystlouisfed,Python,Data Sources,Data Sources,data-sources,2024-01-09,21,https://github.com/TomasKoutek/pystlouisfed,"Python client for Federal Reserve Bank of St. Louis API - FRED, ALFRED, GeoFRED and FRASER.",True,False,False,False,TomasKoutek/pystlouisfed +python-bcb,Python,Data Sources,Data Sources,data-sources,2026-02-27,109,https://github.com/wilsonfreitas/python-bcb,Python interface to Brazilian Central Bank web services.,True,False,False,False,wilsonfreitas/python-bcb +swiss-finance-data,Python,Data Sources,Data Sources,data-sources,2026-03-11,0,https://github.com/EMen11/swiss-finance-data,"Python package for Swiss financial data (SNB Policy Rate, SARON, CHF FX rates, CPI, SMI equities, Confederation bond yields) from official SNB sources.",True,False,False,False,EMen11/swiss-finance-data +market-prices,Python,Data Sources,Data Sources,data-sources,2026-02-05,95,https://github.com/maread99/market_prices,Create meaningful OHLCV datasets from knowledge of [exchange-calendars](https://github.com/gerrymanoim/exchange_calendars) (works out-the-box with data from Yahoo Finance).,True,False,False,False,maread99/market_prices +tardis-python,Python,Data Sources,Data Sources,data-sources,2026-02-26,140,https://github.com/tardis-dev/tardis-python,Python interface for Tardis.dev high frequency crypto market data,True,False,False,False,tardis-dev/tardis-python +lake-api,Python,Data Sources,Data Sources,data-sources,2025-11-02,63,https://github.com/crypto-lake/lake-api,Python interface for Crypto Lake high frequency crypto market data,True,False,False,False,crypto-lake/lake-api +tessa,Python,Data Sources,Data Sources,data-sources,2026-01-16,53,https://github.com/ymyke/tessa,"simple, hassle-free access to price information of financial assets (currently based on yfinance and pycoingecko), including search and a symbol class.",True,False,False,False,ymyke/tessa +pandaSDMX,Python,Data Sources,Data Sources,data-sources,2023-02-25,133,https://github.com/dr-leo/pandaSDMX,"Python package that implements SDMX 2.1 (ISO 17369:2013), a format for exchange of statistical data and metadata used by national statistical agencies, central banks, and international organisations.",True,False,False,False,dr-leo/pandaSDMX +cif,Python,Data Sources,Data Sources,data-sources,2022-06-18,64,https://github.com/LenkaV/CIF,"Python package that include few composite indicators, which summarize multidimensional relationships between individual economic indicators.",True,False,False,False,LenkaV/CIF +finagg,Python,Data Sources,Data Sources,data-sources,2026-03-22,525,https://github.com/theOGognf/finagg,"finagg is a Python package that provides implementations of popular and free financial APIs, tools for aggregating historical data from those APIs into SQL databases, and tools for transforming aggregated data into features useful for analysis and AI/ML.",True,False,False,False,theOGognf/finagg +FinanceDatabase,Python,Data Sources,Data Sources,data-sources,2026-03-22,7249,https://github.com/JerBouma/FinanceDatabase,"This is a database of 300.000+ symbols containing Equities, ETFs, Funds, Indices, Currencies, Cryptocurrencies and Money Markets.",True,False,False,False,JerBouma/FinanceDatabase +Trading Strategy,Python,Data Sources,Data Sources,data-sources,,0,https://github.com/tradingstrategy-ai/trading-strategy/,download price data for decentralised exchanges and lending protocols (DeFi),True,False,False,False, +datamule-python,Python,Data Sources,Data Sources,data-sources,2026-03-19,519,https://github.com/john-friedman/datamule-python,A package to work with SEC data. Incorporates datamule endpoints.,True,False,False,False,john-friedman/datamule-python +fsynth,Python,Data Sources,Data Sources,data-sources,2025-12-27,4,https://github.com/welcra/fsynth,Python library for high-fidelity unlimited synthetic financial data generation using Heston Stochastic Volatility and Merton Jump Diffusion.,True,False,False,False,welcra/fsynth +fedfred,Python,Data Sources,Data Sources,data-sources,,0,https://nikhilxsunder.github.io/fedfred/,"FRED & GeoFRED Economic data API with preprocessed dataframe output in pandas/geopandas, polars/polars_st, and dask dataframes/geodataframes.",False,False,False,False, +edgar-sec,Python,Data Sources,Data Sources,data-sources,,0,https://nikhilxsunder.github.io/edgar-sec/,EDGAR Financial data API with preprocessed dataclass outputs.,False,False,False,False, +edgartools,Python,Data Sources,Data Sources,data-sources,2026-03-20,1879,https://github.com/dgunning/edgartools,"AI-native SEC EDGAR library with XBRL financials, clean text extraction, 17+ typed forms, and pandas DataFrames.",True,False,False,False,dgunning/edgartools +FXMacroData,Python,Data Sources,Data Sources,data-sources,2026-01-17,3,https://fxmacrodata.com/,Real-time forex macroeconomic API for all major currency pairs sourced from central bank announcements. [GitHub](https://github.com/fxmacrodata/fxmacrodata),True,False,False,False,fxmacrodata/fxmacrodata +wallstreet,Python,Data Sources,Data Sources,data-sources,2024-03-09,1625,https://github.com/mcdallas/wallstreet,Real time stock and option data.,True,False,False,False,mcdallas/wallstreet +xlwings,Python,Excel Integration,Excel Integration,excel-integration,2026-03-22,3325,https://www.xlwings.org/,Make Excel fly with Python. [GitHub](https://github.com/xlwings/xlwings),True,False,False,False,xlwings/xlwings +openpyxl,Python,Excel Integration,Excel Integration,excel-integration,,0,https://openpyxl.readthedocs.io/en/latest/,Read/Write Excel 2007 xlsx/xlsm files.,False,False,False,False, +xlrd,Python,Excel Integration,Excel Integration,excel-integration,2025-06-14,2203,https://github.com/python-excel/xlrd,Library for developers to extract data from Microsoft Excel spreadsheet files.,True,False,False,False,python-excel/xlrd +xlsxwriter,Python,Excel Integration,Excel Integration,excel-integration,2026-03-22,3923,https://xlsxwriter.readthedocs.io/,Write files in the Excel 2007+ XLSX file format. [GitHub](https://github.com/jmcnamara/XlsxWriter),True,False,False,False,jmcnamara/XlsxWriter +xlwt,Python,Excel Integration,Excel Integration,excel-integration,2018-09-16,1046,https://github.com/python-excel/xlwt,"Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 XLS files, on any platform.",True,False,False,False,python-excel/xlwt +xlloop,Python,Excel Integration,Excel Integration,excel-integration,2018-03-10,110,http://xlloop.sourceforge.net,XLLoop is an open source framework for implementing Excel user-defined functions (UDFs) on a centralised server (a function server). [GitHub](https://github.com/poidasmith/xlloop),True,False,False,False,poidasmith/xlloop +expy,Python,Excel Integration,Excel Integration,excel-integration,,0,http://www.bnikolic.co.uk/expy/expy.html,"The ExPy add-in allows easy use of Python directly from within an Microsoft Excel spreadsheet, both to execute arbitrary code and to define new Excel functions.",False,False,False,False, +pyxll,Python,Excel Integration,Excel Integration,excel-integration,,0,https://www.pyxll.com,PyXLL is an Excel add-in that enables you to extend Excel using nothing but Python code.,False,False,False,False, +D-Tale,Python,Visualization,Visualization,visualization,2026-03-03,5078,https://github.com/man-group/dtale,Visualizer for pandas dataframes and xarray datasets.,True,False,False,False,man-group/dtale +mplfinance,Python,Visualization,Visualization,visualization,2024-04-02,4323,https://github.com/matplotlib/mplfinance,"matplotlib utilities for the visualization, and visual analysis, of financial data.",True,False,False,False,matplotlib/mplfinance +finplot,Python,Visualization,Visualization,visualization,2026-02-27,1128,https://github.com/highfestiva/finplot,Performant and effortless finance plotting for Python.,True,False,False,False,highfestiva/finplot +finvizfinance,Python,Visualization,Visualization,visualization,2026-01-03,1273,https://github.com/lit26/finvizfinance,Finviz analysis python library.,True,False,False,False,lit26/finvizfinance +market-analy,Python,Visualization,Visualization,visualization,2026-03-05,75,https://github.com/maread99/market_analy,Analysis and interactive charting using [market-prices](https://github.com/maread99/market_prices) and bqplot.,True,False,False,False,maread99/market_analy +QuantInvestStrats,Python,Visualization,Visualization,visualization,2026-03-22,521,https://github.com/ArturSepp/QuantInvestStrats,"Quantitative Investment Strategies (QIS) package implements Python analytics for visualisation of financial data, performance reporting, analysis of quantitative strategies.",True,False,False,False,ArturSepp/QuantInvestStrats +xts,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-02-27,222,https://github.com/joshuaulrich/xts,"eXtensible Time Series: Provide for uniform handling of R's different time-based data classes by extending zoo, maximizing native format information preservation and allowing for user level customization and extension, while simplifying cross-class interoperability.",True,False,False,False,joshuaulrich/xts +data.table,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-15,3870,https://github.com/Rdatatable/data.table,"Extension of data.frame: Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of columns by group using no copies at all, list columns and a fast file reader (fread). Offers a natural and flexible syntax, for faster development.",True,False,False,False,Rdatatable/data.table +sparseEigen,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2018-12-22,12,https://github.com/dppalomar/sparseEigen,Sparse principal component analysis.,True,False,False,False,dppalomar/sparseEigen +TSdbi,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,,0,http://tsdbi.r-forge.r-project.org/,Provides a common interface to time series databases.,False,False,False,False, +tseries,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-02-18,0,https://cran.r-project.org/web/packages/tseries/index.html,Time Series Analysis and Computational Finance.,False,True,False,False, +zoo,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2025-12-15,0,https://cran.r-project.org/web/packages/zoo/index.html,S3 Infrastructure for Regular and Irregular Time Series (Z's Ordered Observations).,False,True,False,False, +tis,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2021-09-28,0,https://cran.r-project.org/web/packages/tis/index.html,"Functions and S3 classes for time indexes and time indexed series, which are compatible with FAME frequencies.",False,True,False,False, +tfplot,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,,0,https://cran.r-project.org/web/packages/tfplot/index.html,Utilities for simple manipulation and quick plotting of time series data.,False,True,False,False, +tframe,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2019-05-30,0,https://cran.r-project.org/web/packages/tframe/index.html,A kernel of functions for programming time series methods in a way that is relatively independently of the representation of time.,False,True,False,False, +IBrokers,R,Data Sources,Data Sources,data-sources,2022-11-16,0,https://cran.r-project.org/web/packages/IBrokers/index.html,Provides native R access to Interactive Brokers Trader Workstation API.,False,True,False,False, +Rblpapi,R,Data Sources,Data Sources,data-sources,2026-01-10,175,https://github.com/Rblp/Rblpapi,An R Interface to 'Bloomberg' is provided via the 'Blp API'.,True,False,False,False,Rblp/Rblpapi +Rbitcoin,R,Data Sources,Data Sources,data-sources,2016-10-25,57,https://github.com/jangorecki/Rbitcoin,"Unified markets API interface (bitstamp, kraken, btce, bitmarket).",True,False,False,False,jangorecki/Rbitcoin +GetTDData,R,Data Sources,Data Sources,data-sources,2025-05-19,26,https://github.com/msperlin/GetTDData,Downloads and aggregates data for Brazilian government issued bonds directly from the website of Tesouro Direto.,True,False,False,False,msperlin/GetTDData +GetHFData,R,Data Sources,Data Sources,data-sources,2020-06-30,41,https://github.com/msperlin/GetHFData,Downloads and aggregates high frequency trading data for Brazilian instruments directly from Bovespa ftp site.,True,False,False,False,msperlin/GetHFData +td,R,Data Sources,Data Sources,data-sources,2026-02-12,18,https://github.com/eddelbuettel/td,Interfaces the 'twelvedata' API for stocks and (digital and standard) currencies.,True,False,False,False,eddelbuettel/td +rbcb,R,Data Sources,Data Sources,data-sources,2024-01-23,99,https://github.com/wilsonfreitas/rbcb,R interface to Brazilian Central Bank web services.,True,False,False,False,wilsonfreitas/rbcb +rb3,R,Data Sources,Data Sources,data-sources,2025-11-01,91,https://github.com/ropensci/rb3,A bunch of downloaders and parsers for data delivered from B3.,True,False,False,False,ropensci/rb3 +simfinapi,R,Data Sources,Data Sources,data-sources,2025-08-13,21,https://github.com/matthiasgomolka/simfinapi,Makes 'SimFin' data () easily accessible in R.,True,False,False,False,matthiasgomolka/simfinapi +tidyfinance,R,Data Sources,Data Sources,data-sources,2026-03-16,20,https://github.com/tidy-finance/r-tidyfinance,"Tidy Finance helper functions to download financial data and process the raw data into a structured Format (tidy data), including",True,False,False,False,tidy-finance/r-tidyfinance +RQuantLib,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-09,131,https://github.com/eddelbuettel/rquantlib,RQuantLib connects GNU R with QuantLib.,True,False,False,False,eddelbuettel/rquantlib +quantmod,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-08-07,884,https://cran.r-project.org/web/packages/quantmod/index.html,Quantitative Financial Modelling Framework. [GitHub](https://github.com/joshuaulrich/quantmod),True,True,False,False,joshuaulrich/quantmod +Rmetrics,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,,0,https://www.rmetrics.org,The premier open source software solution for teaching and training quantitative finance.,False,False,False,False, +fAsianOptions,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,,0,https://cran.r-project.org/web/packages/fAsianOptions/index.html,EBM and Asian Option Valuation.,False,True,False,False, +fAssets,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2023-04-24,0,https://cran.r-project.org/web/packages/fAssets/index.html,Analysing and Modelling Financial Assets.,False,True,False,False, +fBasics,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-12-07,0,https://cran.r-project.org/web/packages/fBasics/index.html,Markets and Basic Statistics.,False,True,False,False, +fBonds,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2017-11-15,0,https://cran.r-project.org/web/packages/fBonds/index.html,Bonds and Interest Rate Models.,False,True,False,False, +fExoticOptions,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,,0,https://cran.r-project.org/web/packages/fExoticOptions/index.html,Exotic Option Valuation.,False,True,False,False, +fOptions,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,,0,https://cran.r-project.org/web/packages/fOptions/index.html,Pricing and Evaluating Basic Options.,False,True,False,False, +fPortfolio,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2023-04-25,0,https://cran.r-project.org/web/packages/fPortfolio/index.html,Portfolio Selection and Optimization.,False,True,False,False, +portfolio,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2024-08-19,17,https://github.com/dgerlanc/portfolio,Analysing equity portfolios.,True,False,False,False,dgerlanc/portfolio +sparseIndexTracking,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2023-05-28,59,https://github.com/dppalomar/sparseIndexTracking,Portfolio design to track an index.,True,False,False,False,dppalomar/sparseIndexTracking +covFactorModel,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2019-03-25,38,https://github.com/dppalomar/covFactorModel,Covariance matrix estimation via factor models.,True,False,False,False,dppalomar/covFactorModel +riskParityPortfolio,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2022-11-15,121,https://github.com/dppalomar/riskParityPortfolio,Blazingly fast design of risk parity portfolios.,True,False,False,False,dppalomar/riskParityPortfolio +sde,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-12-22,0,https://cran.r-project.org/web/packages/sde/index.html,Simulation and Inference for Stochastic Differential Equations.,False,True,False,False, +YieldCurve,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2022-10-02,0,https://cran.r-project.org/web/packages/YieldCurve/index.html,Modelling and estimation of the yield curve.,False,True,False,False, +SmithWilsonYieldCurve,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2024-07-12,0,https://cran.r-project.org/web/packages/SmithWilsonYieldCurve/index.html,Constructs a yield curve by the Smith-Wilson method from a table of LIBOR and SWAP rates.,False,True,False,False, +ycinterextra,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,,0,https://cran.r-project.org/web/packages/ycinterextra/index.html,Yield curve or zero-coupon prices interpolation and extrapolation.,False,True,False,False, +AmericanCallOpt,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,,0,https://cran.r-project.org/web/packages/AmericanCallOpt/index.html,This package includes pricing function for selected American call options with underlying assets that generate payouts.,False,True,False,False, +VarSwapPrice,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,,0,https://cran.r-project.org/web/packages/VarSwapPrice/index.html,Pricing a variance swap on an equity index.,False,True,False,False, +RND,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2017-01-11,0,https://cran.r-project.org/web/packages/RND/index.html,Risk Neutral Density Extraction Package.,False,True,False,False, +LSMonteCarlo,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2013-09-23,0,https://cran.r-project.org/web/packages/LSMonteCarlo/index.html,American options pricing with Least Squares Monte Carlo method.,False,True,False,False, +OptHedging,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2013-10-11,0,https://cran.r-project.org/web/packages/OptHedging/index.html,Estimation of value and hedging strategy of call and put options.,False,True,False,False, +tvm,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2023-08-30,0,https://cran.r-project.org/web/packages/tvm/index.html,Time Value of Money Functions.,False,True,False,False, +OptionPricing,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2023-09-16,0,https://cran.r-project.org/web/packages/OptionPricing/index.html,Option Pricing with Efficient Simulation Algorithms.,False,True,False,False, +credule,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2015-08-05,7,https://github.com/blenezet/credule,Credit Default Swap Functions.,True,False,False,False,blenezet/credule +derivmkts,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-02-12,35,https://cran.r-project.org/web/packages/derivmkts/index.html,Functions and R Code to Accompany Derivatives Markets. [GitHub](https://github.com/rmcd1024/derivmkts),True,True,False,False,rmcd1024/derivmkts +FinCal,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-10-30,24,https://github.com/felixfan/FinCal,"Package for time value of money calculation, time series analysis and computational finance.",True,False,False,False,felixfan/FinCal +r-quant,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2014-02-19,34,https://github.com/artyyouth/r-quant,R code for quantitative analysis in finance.,True,False,False,False,artyyouth/r-quant +options.studies,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2015-12-17,6,https://github.com/taylorizing/options.studies,options trading studies functions for use with options.data package and shiny.,True,False,False,False,taylorizing/options.studies +PortfolioAnalytics,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-19,98,https://github.com/braverock/PortfolioAnalytics,"Portfolio Analysis, Including Numerical Methods for Optimizationof Portfolios.",True,False,False,False,braverock/PortfolioAnalytics +fmbasics,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2019-12-03,12,https://github.com/imanuelcostigan/fmbasics,Financial Market Building Blocks.,True,False,False,False,imanuelcostigan/fmbasics +R-fixedincome,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-05-10,64,https://github.com/wilsonfreitas/R-fixedincome,Fixed income tools for R.,True,False,False,False,wilsonfreitas/R-fixedincome +backtest,R,Trading,Trading,trading,2015-09-17,0,https://cran.r-project.org/web/packages/backtest/index.html,Exploring Portfolio-Based Conjectures About Financial Instruments.,False,True,False,False, +pa,R,Trading,Trading,trading,2023-08-21,0,https://cran.r-project.org/web/packages/pa/index.html,Performance Attribution for Equity Portfolios.,False,True,False,False, +TTR,R,Trading,Trading,trading,2026-02-28,342,https://github.com/joshuaulrich/TTR,Technical Trading Rules.,True,False,False,False,joshuaulrich/TTR +QuantTools,R,Trading,Trading,trading,,0,https://quanttools.bitbucket.io/_site/index.html,Enhanced Quantitative Trading Modelling.,False,False,False,False, +blotter,R,Trading,Trading,trading,2024-12-13,118,https://github.com/braverock/blotter,"Transaction infrastructure for defining instruments, transactions, portfolios and accounts for trading systems and simulation. Provides portfolio support for multi-asset class and multi-currency portfolios. Actively maintained and developed.",True,False,False,False,braverock/blotter +quantstrat,R,Backtesting,Backtesting,backtesting,2023-09-14,301,https://github.com/braverock/quantstrat,Transaction-oriented infrastructure for constructing trading systems and simulation. Provides support for multi-asset class and multi-currency portfolios for backtesting and other financial research.,True,False,False,False,braverock/quantstrat +PerformanceAnalytics,R,Risk Analysis,Risk Analysis,risk-analysis,2026-03-05,235,https://github.com/braverock/PerformanceAnalytics,Econometric tools for performance and risk analysis.,True,False,False,False,braverock/PerformanceAnalytics +FactorAnalytics,R,Factor Analysis,Factor Analysis,factor-analysis,2024-12-12,85,https://github.com/braverock/FactorAnalytics,"The FactorAnalytics package contains fitting and analysis methods for the three main types of factor models used in conjunction with portfolio construction, optimization and risk management, namely fundamental factor models, time series factor models and statistical factor models.",True,False,False,False,braverock/FactorAnalytics +Expected Returns,R,Factor Analysis,Factor Analysis,factor-analysis,2025-08-12,56,https://github.com/JustinMShea/ExpectedReturns,"Solutions for enhancing portfolio diversification and replications of seminal papers with R, most of which are discussed in one of the best investment references of the recent decade, Expected Returns: An Investors Guide to Harvesting Market Rewards by Antti Ilmanen.",True,False,False,False,JustinMShea/ExpectedReturns +tseries,R,Time Series,Time Series,time-series,2026-02-18,0,https://cran.r-project.org/web/packages/tseries/index.html,Time Series Analysis and Computational Finance.,False,True,False,False, +fGarch,R,Time Series,Time Series,time-series,2025-12-12,0,https://cran.r-project.org/web/packages/fGarch/index.html,Rmetrics - Autoregressive Conditional Heteroskedastic Modelling.,False,True,False,False, +timeSeries,R,Time Series,Time Series,time-series,2025-12-12,0,https://cran.r-project.org/web/packages/timeSeries/index.html,Rmetrics - Financial Time Series Objects.,False,True,False,False, +rugarch,R,Time Series,Time Series,time-series,2026-03-13,31,https://github.com/alexiosg/rugarch,Univariate GARCH Models.,True,False,False,False,alexiosg/rugarch +rmgarch,R,Time Series,Time Series,time-series,2025-08-31,17,https://github.com/alexiosg/rmgarch,Multivariate GARCH Models.,True,False,False,False,alexiosg/rmgarch +tidypredict,R,Time Series,Time Series,time-series,2021-09-28,3,https://github.com/edgararuiz/tidypredict,Run predictions inside the database .,True,False,False,False,edgararuiz/tidypredict +tidyquant,R,Time Series,Time Series,time-series,2026-03-16,900,https://github.com/business-science/tidyquant,Bringing financial analysis to the tidyverse.,True,False,False,False,business-science/tidyquant +timetk,R,Time Series,Time Series,time-series,2025-08-29,639,https://github.com/business-science/timetk,A toolkit for working with time series in R.,True,False,False,False,business-science/timetk +tibbletime,R,Time Series,Time Series,time-series,2024-12-03,177,https://github.com/business-science/tibbletime,"Built on top of the tidyverse, tibbletime is an extension that allows for the creation of time aware tibbles through the setting of a time index.",True,False,False,False,business-science/tibbletime +matrixprofile,R,Time Series,Time Series,time-series,2022-11-25,387,https://github.com/matrix-profile-foundation/matrixprofile,Time series data mining library built on top of the novel Matrix Profile data structure and algorithms.,True,False,False,False,matrix-profile-foundation/matrixprofile +garchmodels,R,Time Series,Time Series,time-series,2022-08-11,35,https://github.com/AlbertoAlmuinha/garchmodels,A parsnip backend for GARCH models.,True,False,False,False,AlbertoAlmuinha/garchmodels +timeDate,R,Calendars,Calendars,calendars,2026-01-28,0,https://cran.r-project.org/web/packages/timeDate/index.html,Chronological and Calendar Objects,False,True,False,False, +bizdays,R,Calendars,Calendars,calendars,2025-01-08,57,https://github.com/wilsonfreitas/R-bizdays,Business days calculations and utilities,True,False,False,False,wilsonfreitas/R-bizdays +RunMat,Matlab,Alternatives,Alternatives,alternatives,2026-03-20,194,https://runmat.org,"High performance, Open Source, MATLAB syntax runtime. [GitHub](https://github.com/runmat-org/runmat)",True,False,False,False,runmat-org/runmat +QUANTAXIS,Matlab,FrameWorks,FrameWorks,frameworks,2026-02-28,10134,https://github.com/yutiansut/quantaxis,Integrated Quantitative Toolbox with Matlab.,True,False,False,False,yutiansut/quantaxis +PROJ_Option_Pricing_Matlab,Matlab,FrameWorks,FrameWorks,frameworks,2024-11-19,208,https://github.com/jkirkby3/PROJ_Option_Pricing_Matlab,"Quant Option Pricing - Exotic/Vanilla: Barrier, Asian, European, American, Parisian, Lookback, Cliquet, Variance Swap, Swing, Forward Starting, Step, Fader",True,False,False,False,jkirkby3/PROJ_Option_Pricing_Matlab +CcyConv.jl,Julia,,,julia,2025-10-14,25,https://github.com/bhftbootcamp/CcyConv.jl,Currency conversion library for Julia,True,False,False,False,bhftbootcamp/CcyConv.jl +CryptoExchangeAPIs.jl,Julia,,,julia,2025-11-27,30,https://github.com/bhftbootcamp/CryptoExchangeAPIs.jl,A Julia library for cryptocurrency exchange APIs,True,False,False,False,bhftbootcamp/CryptoExchangeAPIs.jl +Fastback.jl,Julia,,,julia,2026-03-01,19,https://github.com/rbeeli/Fastback.jl,Blazing fast Julia backtester.,True,False,False,False,rbeeli/Fastback.jl +Lucky.jl,Julia,,,julia,2026-03-09,26,https://github.com/oliviermilla/Lucky.jl,"Modular, asynchronous trading engine in pure Julia.",True,False,False,False,oliviermilla/Lucky.jl +QuantLib.jl,Julia,,,julia,2020-02-18,143,https://github.com/pazzo83/QuantLib.jl,Quantlib implementation in pure Julia.,True,False,False,False,pazzo83/QuantLib.jl +Ito.jl,Julia,,,julia,2017-03-21,39,https://github.com/aviks/Ito.jl,A Julia package for quantitative finance.,True,False,False,False,aviks/Ito.jl +LightweightCharts.jl,Julia,,,julia,2026-01-20,48,https://github.com/bhftbootcamp/LightweightCharts.jl,Julia wrapper for Lightweight Charts™ by TradingView.,True,False,False,False,bhftbootcamp/LightweightCharts.jl +TALib.jl,Julia,,,julia,2017-08-22,52,https://github.com/femtotrader/TALib.jl,A Julia wrapper for TA-Lib.,True,False,False,False,femtotrader/TALib.jl +Miletus.jl,Julia,,,julia,2023-12-07,90,https://github.com/JuliaComputing/Miletus.jl,"A financial contract definition, modeling language, and valuation framework.",True,False,False,False,JuliaComputing/Miletus.jl +Temporal.jl,Julia,,,julia,2021-12-28,101,https://github.com/dysonance/Temporal.jl,Flexible and efficient time series class & methods.,True,False,False,False,dysonance/Temporal.jl +Indicators.jl,Julia,,,julia,2022-12-06,227,https://github.com/dysonance/Indicators.jl,Financial market technical analysis & indicators on top of Temporal.,True,False,False,False,dysonance/Indicators.jl +Strategems.jl,Julia,,,julia,2021-04-06,167,https://github.com/dysonance/Strategems.jl,Quantitative systematic trading strategy development and backtesting.,True,False,False,False,dysonance/Strategems.jl +TimeSeries.jl,Julia,,,julia,2026-01-26,368,https://github.com/JuliaStats/TimeSeries.jl,Time series toolkit for Julia.,True,False,False,False,JuliaStats/TimeSeries.jl +TechnicalIndicatorCharts.jl,Julia,,,julia,2026-03-09,6,https://github.com/g-gundam/TechnicalIndicatorCharts.jl,Visualize OnlineTechnicalIndicators.jl using LightweightCharts.jl.,True,False,False,False,g-gundam/TechnicalIndicatorCharts.jl +MarketTechnicals.jl,Julia,,,julia,2021-07-12,130,https://github.com/JuliaQuant/MarketTechnicals.jl,Technical analysis of financial time series on top of TimeSeries.,True,False,False,False,JuliaQuant/MarketTechnicals.jl +MarketData.jl,Julia,,,julia,2025-11-10,163,https://github.com/JuliaQuant/MarketData.jl,Time series market data.,True,False,False,False,JuliaQuant/MarketData.jl +OnlineTechnicalIndicators.jl,Julia,,,julia,2026-01-06,33,https://github.com/femtotrader/OnlineTechnicalIndicators.jl,Julia Technical Analysis Indicators via online algorithms.,True,False,False,False,femtotrader/OnlineTechnicalIndicators.jl +OnlinePortfolioAnalytics.jl,Julia,,,julia,2026-01-06,13,https://github.com/femtotrader/OnlinePortfolioAnalytics.jl,A Julia quantitative portfolio analytics (risk / performance) via online algorithms.,True,False,False,False,femtotrader/OnlinePortfolioAnalytics.jl +OnlineResamplers.jl,Julia,,,julia,2026-01-06,2,https://github.com/femtotrader/OnlineResamplers.jl,High-performance Julia package for real-time resampling of financial market data.,True,False,False,False,femtotrader/OnlineResamplers.jl +RiskPerf.jl,Julia,,,julia,2026-02-02,15,https://github.com/rbeeli/RiskPerf.jl,Quantitative risk and performance analysis package for financial time series powered by the Julia language.,True,False,False,False,rbeeli/RiskPerf.jl +TimeFrames.jl,Julia,,,julia,2026-03-09,4,https://github.com/femtotrader/TimeFrames.jl,A Julia library that defines TimeFrame (essentially for resampling TimeSeries).,True,False,False,False,femtotrader/TimeFrames.jl +DataFrames.jl,Julia,,,julia,2026-03-17,1819,https://github.com/JuliaData/DataFrames.jl,In-memory tabular data in Julia,True,False,False,False,JuliaData/DataFrames.jl +TSFrames.jl,Julia,,,julia,2024-06-18,100,https://github.com/xKDR/TSFrames.jl,Handle timeseries data on top of the powerful and mature DataFrames.jl,True,False,False,False,xKDR/TSFrames.jl +TimeArrays.jl,Julia,,,julia,2025-10-15,38,https://github.com/bhftbootcamp/TimeArrays.jl,Time series handling for Julia,True,False,False,False,bhftbootcamp/TimeArrays.jl +Strata,Java,,,java,2026-03-11,929,http://strata.opengamma.io/,Modern open-source analytics and market risk library designed and written in Java. [GitHub](https://github.com/OpenGamma/Strata),True,False,False,False,OpenGamma/Strata +JQuantLib,Java,,,java,2016-02-26,152,https://github.com/frgomes/jquantlib,"JQuantLib is a free, open-source, comprehensive framework for quantitative finance, written in 100% Java.",True,False,False,False,frgomes/jquantlib +finmath.net,Java,,,java,2026-02-20,558,http://finmath.net,Java library with algorithms and methodologies related to mathematical finance. [GitHub](https://github.com/finmath/finmath-lib),True,False,False,False,finmath/finmath-lib +quantcomponents,Java,,,java,2015-10-07,169,https://github.com/lsgro/quantcomponents,Free Java components for Quantitative Finance and Algorithmic Trading.,True,False,False,False,lsgro/quantcomponents +DRIP,Java,,,java,,0,https://lakshmidrip.github.io/DRIP,"Fixed Income, Asset Allocation, Transaction Cost Analysis, XVA Metrics Libraries.",False,False,False,False, +ta4j,Java,,,java,2026-03-15,2395,https://github.com/ta4j/ta4j,A Java library for technical analysis.,True,False,False,False,ta4j/ta4j +finance.js,JavaScript,,,javascript,2018-10-11,1266,https://github.com/ebradyjobory/finance.js,A JavaScript library for common financial calculations.,True,False,False,False,ebradyjobory/finance.js +portfolio-allocation,JavaScript,,,javascript,2022-08-11,187,https://github.com/lequant40/portfolio_allocation_js,"PortfolioAllocation is a JavaScript library designed to help constructing financial portfolios made of several assets: bonds, commodities, cryptocurrencies, currencies, exchange traded funds (ETFs), mutual funds, stocks...",True,False,False,False,lequant40/portfolio_allocation_js +Ghostfolio,JavaScript,,,javascript,2026-03-22,7980,https://github.com/ghostfolio/ghostfolio,"Wealth management software to keep track of financial assets like stocks, ETFs or cryptocurrencies and make solid, data-driven investment decisions.",True,False,False,False,ghostfolio/ghostfolio +IndicatorTS,JavaScript,,,javascript,2025-02-26,429,https://github.com/cinar/indicatorts,"Indicator is a TypeScript module providing various stock technical analysis indicators, strategies, and a backtest framework for trading.",True,False,False,False,cinar/indicatorts +chart-patterns,JavaScript,,,javascript,error,0,https://github.com/focus1691/chart-patterns,"Technical analysis library for Market Profile, Volume Profile, Stacked Imbalances and High Volume Node indicators.",True,False,False,False,focus1691/chart-patterns +orderflow,JavaScript,,,javascript,2025-03-31,65,https://github.com/focus1691/orderflow,Orderflow trade aggregator for building Footprint Candles from exchange websocket data.,True,False,False,False,focus1691/orderflow +ccxt,JavaScript,,,javascript,2026-03-22,41466,https://github.com/ccxt/ccxt,A JavaScript / Python / PHP cryptocurrency trading API with support for more than 100 bitcoin/altcoin exchanges.,True,False,False,False,ccxt/ccxt +SimpleFunctions,JavaScript,,,javascript,2026-03-21,1,https://github.com/spfunctions/simplefunctions-cli,"Prediction market intelligence CLI for Kalshi and Polymarket. Causal thesis models, edge detection, 24/7 orderbook monitoring, what-if scenarios, and trade execution. MCP server for AI agent integration.",True,False,False,False,spfunctions/simplefunctions-cli +PENDAX,JavaScript,,,javascript,2024-05-09,48,https://github.com/CompendiumFi/PENDAX-SDK,"Javascript SDK for Trading/Data API and Websockets for FTX, FTXUS, OKX, Bybit, & More.",True,False,False,False,CompendiumFi/PENDAX-SDK +PreReason,JavaScript,,,javascript,2026-03-22,0,https://github.com/PreReason/mcp,"Pre-analyzed Bitcoin and macro market briefings for AI agents. 17 contexts with trend signals, confidence scores, and regime classification via REST API and MCP.",True,False,False,False,PreReason/mcp +pmxt,JavaScript,,,javascript,2026-03-22,1140,https://github.com/pmxt-dev/pmxt,"The CCXT for prediction markets. A unified API for trading on Polymarket, Kalshi, and more.",True,False,False,False,pmxt-dev/pmxt +pmxt,JavaScript,,,javascript,2026-03-22,1140,https://github.com/qoery-com/pmxt,A unified API for accessing prediction market data across multiple exchanges. CCXT for prediction markets.,True,False,False,False,qoery-com/pmxt +rebalance,JavaScript,,,javascript,2026-03-01,2,https://github.com/cjroth/rebalance,"Interactive portfolio rebalancing tool that imports brokerage CSV data, sets target allocations, and generates trade instructions.",True,False,False,False,cjroth/rebalance +QUANTAXIS_Webkit,JavaScript,Data Visualization,Data Visualization,data-visualization,2017-07-30,37,https://github.com/yutiansut/QUANTAXIS_Webkit,An awesome visualization center based on quantaxis.,True,False,False,False,yutiansut/QUANTAXIS_Webkit +quantfin,Haskell,,,haskell,2019-04-06,139,https://github.com/boundedvariation/quantfin,quant finance in pure haskell.,True,False,False,False,boundedvariation/quantfin +Haxcel,Haskell,,,haskell,2022-09-13,37,https://github.com/MarcusRainbow/Haxcel,Excel Addin for Haskell.,True,False,False,False,MarcusRainbow/Haxcel +Ffinar,Haskell,,,haskell,2021-11-26,5,https://github.com/MarcusRainbow/Ffinar,A financial maths library in Haskell.,True,False,False,False,MarcusRainbow/Ffinar +QuantScale,Scala,,,scala,2014-01-14,50,https://github.com/choucrifahed/quantscale,Scala Quantitative Finance Library.,True,False,False,False,choucrifahed/quantscale +Scala Quant,Scala,,,scala,2017-05-06,10,https://github.com/frankcash/Scala-Quant,Scala library for working with stock data from IFTTT recipes or Google Finance.,True,False,False,False,frankcash/Scala-Quant +Jiji,Ruby,,,ruby,2019-01-22,249,https://github.com/unageanu/jiji2,Open Source Forex algorithmic trading framework using OANDA REST API.,True,False,False,False,unageanu/jiji2 +Tai,Elixir/Erlang,,,elixir-erlang,2024-12-06,493,https://github.com/fremantle-capital/tai,"Open Source composable, real time, market data and trade execution toolkit.",True,False,False,False,fremantle-capital/tai +Workbench,Elixir/Erlang,,,elixir-erlang,2022-06-06,121,https://github.com/fremantle-industries/workbench,From Idea to Execution - Manage your trading operation across a globally distributed cluster,True,False,False,False,fremantle-industries/workbench +Prop,Elixir/Erlang,,,elixir-erlang,2022-06-06,55,https://github.com/fremantle-industries/prop,"An open and opinionated trading platform using productive & familiar open source libraries and tools for strategy research, execution and operation.",True,False,False,False,fremantle-industries/prop +Kelp,Golang,,,golang,2021-11-26,1122,https://github.com/stellar/kelp,Kelp is an open-source Golang algorithmic cryptocurrency trading bot that runs on centralized exchanges and Stellar DEX (command-line usage and desktop GUI).,True,False,False,False,stellar/kelp +marketstore,Golang,,,golang,error,0,https://github.com/alpacahq/marketstore,DataFrame Server for Financial Timeseries Data.,True,False,False,False,alpacahq/marketstore +IndicatorGo,Golang,,,golang,2026-03-02,828,https://github.com/cinar/indicator,"IndicatorGo is a Golang module providing various stock technical analysis indicators, strategies, and a backtest framework for trading.",True,False,False,False,cinar/indicator +QuantLib,CPP,,,cpp,2026-03-17,6890,https://github.com/lballabio/QuantLib,The QuantLib project is aimed at providing a comprehensive software framework for quantitative finance.,True,False,False,False,lballabio/QuantLib +QuantLibRisks,CPP,,,cpp,2026-02-06,38,https://github.com/auto-differentiation/QuantLib-Risks-Cpp,Fast risks with QuantLib in C++,True,False,False,False,auto-differentiation/QuantLib-Risks-Cpp +XAD,CPP,,,cpp,2026-02-06,411,https://github.com/auto-differentiation/xad,Automatic Differentation (AAD) Library,True,False,False,False,auto-differentiation/xad +TradeFrame,CPP,,,cpp,2026-03-05,651,https://github.com/rburkholder/trade-frame,C++ 17 based framework/library (with sample applications) for testing options based automated trading ideas using DTN IQ real time data feed and Interactive Brokers (TWS API) for trade execution. Comes with built-in [Option Greeks/IV](https://github.com/rburkholder/trade-frame/tree/master/lib/TFOptions) calculation library.,True,False,False,False,rburkholder/trade-frame +Hikyuu,CPP,,,cpp,2026-03-22,3053,https://github.com/fasiondog/hikyuu,"A base on Python/C++ open source high-performance quant framework for faster analysis and backtesting, contains the complete trading system components for reuse and combination. You can use python or c++ freely.",True,False,False,False,fasiondog/hikyuu +OrderMatchingEngine,CPP,,,cpp,2026-01-11,128,https://github.com/PIYUSH-KUMAR1809/order-matching-engine,"A production-grade, lock-free, high-frequency trading matching engine achieving 150M+ orders/sec.",True,False,False,False,PIYUSH-KUMAR1809/order-matching-engine +PandoraTrader,CPP,,,cpp,2025-07-29,1363,https://github.com/pegasusTrader/PandoraTrader,"A C++ CTP trading framework, with very clear logic",True,False,False,False,pegasusTrader/PandoraTrader +NexusFix,CPP,,,cpp,2026-03-22,11,https://github.com/SilverstreamsAI/NexusFix,"C++23 FIX protocol engine with zero-copy parsing and SIMD acceleration, 3x faster than QuickFIX.",True,False,False,False,SilverstreamsAI/NexusFix +QuantLib,Frameworks,,,frameworks,2026-03-17,6890,https://github.com/lballabio/QuantLib,The QuantLib project is aimed at providing a comprehensive software framework for quantitative finance.,True,False,False,False,lballabio/QuantLib +JQuantLib,Frameworks,,,frameworks,2016-02-26,152,https://github.com/frgomes/jquantlib,Java port.,True,False,False,False,frgomes/jquantlib +RQuantLib,Frameworks,,,frameworks,2026-03-09,131,https://github.com/eddelbuettel/rquantlib,R port.,True,False,False,False,eddelbuettel/rquantlib +QuantLibAddin,Frameworks,,,frameworks,,0,https://www.quantlib.org/quantlibaddin/,Excel support.,False,False,False,False, +QuantLibXL,Frameworks,,,frameworks,,0,https://www.quantlib.org/quantlibxl/,Excel support.,False,False,False,False, +QLNet,Frameworks,,,frameworks,2026-03-10,422,https://github.com/amaggiulli/qlnet,.Net port.,True,False,False,False,amaggiulli/qlnet +PyQL,Frameworks,,,frameworks,2025-08-20,1261,https://github.com/enthought/pyql,Python port.,True,False,False,False,enthought/pyql +QuantLib.jl,Frameworks,,,frameworks,2020-02-18,143,https://github.com/pazzo83/QuantLib.jl,Julia port.,True,False,False,False,pazzo83/QuantLib.jl +QuantLib-Python Documentation,Frameworks,,,frameworks,,0,https://quantlib-python-docs.readthedocs.io/,Documentation for the Python bindings for the QuantLib library,False,False,False,False, +TA-Lib,Frameworks,,,frameworks,2025-10-19,1505,https://ta-lib.org,perform technical analysis of financial market data. [GitHub](https://github.com/TA-Lib/ta-lib),True,False,False,False,TA-Lib/ta-lib +QuantConnect,CSharp,,,csharp,2026-03-14,18007,https://github.com/QuantConnect/Lean,Lean Engine is an open-source fully managed C# algorithmic trading engine built for desktop and cloud usage.,True,False,False,False,QuantConnect/Lean +StockSharp,CSharp,,,csharp,2026-03-21,9302,https://github.com/StockSharp/StockSharp,"Algorithmic trading and quantitative trading open source platform to develop trading robots (stock markets, forex, crypto, bitcoins, and options).",True,False,False,False,StockSharp/StockSharp +TDAmeritrade.DotNetCore,CSharp,,,csharp,2023-03-10,56,https://github.com/NVentimiglia/TDAmeritrade.DotNetCore,"Free, open-source .NET Client for the TD Ameritrade Trading Platform. Helps developers integrate TD Ameritrade API into custom trading solutions.",True,False,False,False,NVentimiglia/TDAmeritrade.DotNetCore +QuantMath,Rust,,,rust,2020-05-28,402,https://github.com/MarcusRainbow/QuantMath,Financial maths library for risk-neutral pricing and risk,True,False,False,False,MarcusRainbow/QuantMath +Barter,Rust,,,rust,2026-03-05,2022,https://github.com/barter-rs/barter-rs,Open-source Rust framework for building event-driven live-trading & backtesting systems,True,False,False,False,barter-rs/barter-rs +LFEST,Rust,,,rust,2026-02-05,77,https://github.com/MathisWellmann/lfest-rs,Simulated perpetual futures exchange to trade your strategy against.,True,False,False,False,MathisWellmann/lfest-rs +TradeAggregation,Rust,,,rust,2026-02-05,115,https://github.com/MathisWellmann/trade_aggregation-rs,Aggregate trades into user-defined candles using information driven rules.,True,False,False,False,MathisWellmann/trade_aggregation-rs +OpenFinClaw,Rust,,,rust,2026-03-22,120,https://github.com/cryptoSUN2049/openFinclaw,"AI-native one-person hedge fund platform with Rust trading engine. Natural language → strategy → backtest → execution in 60s. Multi-market (US/HK/CN/Crypto), self-evolving strategy pipeline. Built on OpenClaw (68K+ stars).",True,False,False,False,cryptoSUN2049/openFinclaw +SlidingFeatures,Rust,,,rust,2026-02-18,72,https://github.com/MathisWellmann/sliding_features-rs,Chainable tree-like sliding windows for signal processing and technical analysis.,True,False,False,False,MathisWellmann/sliding_features-rs +RustQuant,Rust,,,rust,2026-01-14,1683,https://github.com/avhz/RustQuant,Quantitative finance library written in Rust.,True,False,False,False,avhz/RustQuant +fin-primitives,Rust,,,rust,2026-03-21,4,https://github.com/Mattbusel/fin-primitives,"Financial market primitives in Rust: Price/Quantity/Symbol newtypes, BTreeMap order book, OHLCV aggregation, SMA/EMA/RSI indicators, position ledger with PnL, and composable risk monitor.",True,False,False,False,Mattbusel/fin-primitives +fin-stream,Rust,,,rust,2026-03-21,2,https://github.com/Mattbusel/fin-stream,"Real-time market data streaming in Rust: lock-free SPSC ring buffer, 100K+ ticks/second ingestion, multi-timeframe OHLCV construction, and Lorentz transforms on financial time series.",True,False,False,False,Mattbusel/fin-stream +Special-Relativity-in-Financial-Modeling,Rust,,,rust,2026-03-19,4,https://github.com/Mattbusel/Special-Relativity-in-Financial-Modeling,"C++20 implementation of special-relativistic geometry applied to OHLCV data: Lorentz factors, spacetime intervals, Christoffel symbols, and geodesic deviation signals from live market data. DOI: 10.5281/zenodo.18639919",True,False,False,False,Mattbusel/Special-Relativity-in-Financial-Modeling +finalytics,Rust,,,rust,2026-02-17,67,https://github.com/Nnamdi-sys/finalytics,A rust library for financial data analysis.,True,False,False,False,Nnamdi-sys/finalytics +RunMat,Rust,,,rust,2026-03-20,194,https://github.com/runmat-org/runmat,Rust runtime for MATLAB-syntax array math with automatic CPU/GPU execution and fused kernels for quant simulations.,True,False,False,False,runmat-org/runmat +Auto-Differentiation Website,"Reproducing Works, Training & Books",,,reproducing-works-training-books,,0,https://auto-differentiation.github.io/,Background and resources on Automatic Differentiation (AD) / Adjoint Algorithmic Differentitation (AAD).,False,False,False,False, +Derman Papers,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2017-10-21,507,https://github.com/MarcosCarreira/DermanPapers,Notebooks that replicate original quantitative finance papers from Emanuel Derman.,True,False,False,False,MarcosCarreira/DermanPapers +volatility-trading,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-10-21,1881,https://github.com/jasonstrimpel/volatility-trading,A complete set of volatility estimators based on Euan Sinclair's Volatility Trading.,True,False,False,False,jasonstrimpel/volatility-trading +quant,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2015-07-14,407,https://github.com/paulperry/quant,"Quantitative Finance and Algorithmic Trading exhaust; mostly ipython notebooks based on Quantopian, Zipline, or Pandas.",True,False,False,False,paulperry/quant +fecon235,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2018-12-03,1255,https://github.com/rsvp/fecon235,Open source project for software tools in financial economics. Many jupyter notebook to verify theoretical ideas and practical methods interactively.,True,False,False,False,rsvp/fecon235 +Quantitative-Notebooks,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2020-07-02,1315,https://github.com/LongOnly/Quantitative-Notebooks,"Educational notebooks on quantitative finance, algorithmic trading, financial modelling and investment strategy",True,False,False,False,LongOnly/Quantitative-Notebooks +QuantEcon,"Reproducing Works, Training & Books",,,reproducing-works-training-books,,0,https://quantecon.org/,"Lecture series on economics, finance, econometrics and data science; QuantEcon.py, QuantEcon.jl, notebooks",False,False,False,False, +FinanceHub,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2021-05-25,782,https://github.com/Finance-Hub/FinanceHub,Resources for Quantitative Finance,True,False,False,False,Finance-Hub/FinanceHub +Python_Option_Pricing,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-05-13,828,https://github.com/dedwards25/Python_Option_Pricing,"An library to price financial options written in Python. Includes: Black Scholes, Black 76, Implied Volatility, American, European, Asian, Spread Options.",True,False,False,False,dedwards25/Python_Option_Pricing +python-training,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2023-11-27,12862,https://github.com/jpmorganchase/python-training,J.P. Morgan's Python training for business analysts and traders.,True,False,False,False,jpmorganchase/python-training +Stock_Analysis_For_Quant,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-05-04,1985,https://github.com/LastAncientOne/Stock_Analysis_For_Quant,"Different Types of Stock Analysis in Excel, Matlab, Power BI, Python, R, and Tableau.",True,False,False,False,LastAncientOne/Stock_Analysis_For_Quant +algorithmic-trading-with-python,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2021-06-01,3265,https://github.com/chrisconlan/algorithmic-trading-with-python,Source code for Algorithmic Trading with Python (2020) by Chris Conlan.,True,False,False,False,chrisconlan/algorithmic-trading-with-python +MEDIUM_NoteBook,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-09-22,2138,https://github.com/cerlymarco/MEDIUM_NoteBook,Repository containing notebooks of [cerlymarco](https://github.com/cerlymarco)'s posts on Medium.,True,False,False,False,cerlymarco/MEDIUM_NoteBook +QuantFinance,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-09-02,605,https://github.com/PythonCharmers/QuantFinance,Training materials in quantitative finance.,True,False,False,False,PythonCharmers/QuantFinance +IPythonScripts,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2026-02-28,175,https://github.com/mgroncki/IPythonScripts,"Tutorials about Quantitative Finance in Python and QuantLib: Pricing, xVAs, Hedging, Portfolio Optimisation, Machine Learning and Deep Learning.",True,False,False,False,mgroncki/IPythonScripts +Computational-Finance-Course,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-03-01,491,https://github.com/LechGrzelak/Computational-Finance-Course,Materials for the course of Computational Finance.,True,False,False,False,LechGrzelak/Computational-Finance-Course +Machine-Learning-for-Asset-Managers,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-01-29,615,https://github.com/emoen/Machine-Learning-for-Asset-Managers,"Implementation of code snippets, exercises and application to live data from Machine Learning for Asset Managers (Elements in Quantitative Finance) written by Prof. Marcos López de Prado.",True,False,False,False,emoen/Machine-Learning-for-Asset-Managers +Python-for-Finance-Cookbook,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2026-03-02,785,https://github.com/PacktPublishing/Python-for-Finance-Cookbook,"Python for Finance Cookbook, published by Packt.",True,False,False,False,PacktPublishing/Python-for-Finance-Cookbook +modelos_vol_derivativos,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2023-08-19,59,https://github.com/ysaporito/modelos_vol_derivativos,"""Modelos de Volatilidade para Derivativos"" book's Jupyter notebooks",True,False,False,False,ysaporito/modelos_vol_derivativos +NMOF,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-10-27,38,https://github.com/enricoschumann/NMOF,"Functions, examples and data from the first and the second edition of ""Numerical Methods and Optimization in Finance"" by M. Gilli, D. Maringer and E. Schumann (2019, ISBN:978-0128150658).",True,False,False,False,enricoschumann/NMOF +py4fi2nd,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-06-06,2148,https://github.com/yhilpisch/py4fi2nd,"Jupyter Notebooks and code for Python for Finance (2nd ed., O'Reilly) by Yves Hilpisch.",True,False,False,False,yhilpisch/py4fi2nd +aiif,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2023-10-09,385,https://github.com/yhilpisch/aiif,Jupyter Notebooks and code for the book Artificial Intelligence in Finance (O'Reilly) by Yves Hilpisch.,True,False,False,False,yhilpisch/aiif +py4at,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2023-10-09,826,https://github.com/yhilpisch/py4at,Jupyter Notebooks and code for the book Python for Algorithmic Trading (O'Reilly) by Yves Hilpisch.,True,False,False,False,yhilpisch/py4at +dawp,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2021-02-22,633,https://github.com/yhilpisch/dawp,Jupyter Notebooks and code for Derivatives Analytics with Python (Wiley Finance) by Yves Hilpisch.,True,False,False,False,yhilpisch/dawp +dx,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-04-05,767,https://github.com/yhilpisch/dx,DX Analytics | Financial and Derivatives Analytics with Python.,True,False,False,False,yhilpisch/dx +QuantFinanceBook,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-04-14,858,https://github.com/LechGrzelak/QuantFinanceBook,Quantitative Finance book.,True,False,False,False,LechGrzelak/QuantFinanceBook +rough_bergomi,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2018-09-17,141,https://github.com/ryanmccrickerd/rough_bergomi,A Python implementation of the rough Bergomi model.,True,False,False,False,ryanmccrickerd/rough_bergomi +frh-fx,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2018-05-24,13,https://github.com/ryanmccrickerd/frh-fx,A python implementation of the fast-reversion Heston model of Mechkov for FX purposes.,True,False,False,False,ryanmccrickerd/frh-fx +Value Investing Studies,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2021-10-26,92,https://github.com/euclidjda/value-investing-studies,A collection of data analysis studies that examine the performance and characteristics of value investing over long periods of time.,True,False,False,False,euclidjda/value-investing-studies +Machine Learning Asset Management,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2021-12-17,1734,https://github.com/firmai/machine-learning-asset-management,Machine Learning in Asset Management (by @firmai).,True,False,False,False,firmai/machine-learning-asset-management +Deep Learning Machine Learning Stock,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-03-01,1723,https://github.com/LastAncientOne/Deep-Learning-Machine-Learning-Stock,Deep Learning and Machine Learning stocks represent a promising long-term or short-term opportunity for investors and traders.,True,False,False,False,LastAncientOne/Deep-Learning-Machine-Learning-Stock +Technical Analysis and Feature Engineering,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-02-16,198,https://github.com/jo-cho/Technical_Analysis_and_Feature_Engineering,Feature Engineering and Feature Importance of Machine Learning in Financial Market.,True,False,False,False,jo-cho/Technical_Analysis_and_Feature_Engineering +Differential Machine Learning and Axes that matter by Brian Huge and Antoine Savine,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2022-10-05,148,https://github.com/differential-machine-learning/notebooks,"Implement, demonstrate, reproduce and extend the results of the Risk articles 'Differential Machine Learning' (2020) and 'PCA with a Difference' (2021) by Huge and Savine, and cover implementation details left out from the papers.",True,False,False,False,differential-machine-learning/notebooks +systematictradingexamples,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2020-07-22,461,https://github.com/robcarver17/systematictradingexamples,Examples of code related to book [Systematic Trading](www.systematictrading.org) and [blog](http://qoppac.blogspot.com),True,False,False,False,robcarver17/systematictradingexamples +pysystemtrade_examples,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2018-02-21,259,https://github.com/robcarver17/pysystemtrade_examples,Examples using pysystemtrade for Robert Carver's [blog](http://qoppac.blogspot.com).,True,False,False,False,robcarver17/pysystemtrade_examples +ML_Finance_Codes,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2020-06-13,2526,https://github.com/mfrdixon/ML_Finance_Codes,Machine Learning in Finance: From Theory to Practice Book,True,False,False,False,mfrdixon/ML_Finance_Codes +Hands-On Machine Learning for Algorithmic Trading,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2023-01-18,1815,https://github.com/packtpublishing/hands-on-machine-learning-for-algorithmic-trading,"Hands-On Machine Learning for Algorithmic Trading, published by Packt",True,False,False,False,packtpublishing/hands-on-machine-learning-for-algorithmic-trading +financialnoob-misc,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-08-26,28,https://github.com/financialnoob/misc,Codes from @financialnoob's posts,True,False,False,False,financialnoob/misc +MesoSim Options Trading Strategy Library,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-04-06,20,https://github.com/deltaray-io/strategy-library,Free and public Options Trading strategy library for MesoSim. ,True,False,False,False,deltaray-io/strategy-library +Quant-Finance-With-Python-Code,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2026-01-15,168,https://github.com/lingyixu/Quant-Finance-With-Python-Code,Repo for code examples in Quantitative Finance with Python by Chris Kelliher,True,False,False,False,lingyixu/Quant-Finance-With-Python-Code +QuantFinanceTraining,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-02-20,40,https://github.com/JoaoJungblut/QuantFinanceTraining,"This repository contains codes that were executed during my training in the CQF (Certificate in Quantitative Finance). The codes are organized by class, facilitating navigation and reference.",True,False,False,False,JoaoJungblut/QuantFinanceTraining +Statistical-Learning-based-Portfolio-Optimization,"Reproducing Works, Training & Books",,,reproducing-works-training-books,error,0,https://github.com/YannickKae/Statistical-Learning-based-Portfolio-Optimization,"This R Shiny App utilizes the Hierarchical Equal Risk Contribution (HERC) approach, a modern portfolio optimization method developed by Raffinot (2018).",True,False,False,False,YannickKae/Statistical-Learning-based-Portfolio-Optimization +book_irds3,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2022-10-29,114,https://github.com/attack68/book_irds3,Code repository for Pricing and Trading Interest Rate Derivatives.,True,False,False,False,attack68/book_irds3 +Autoencoder-Asset-Pricing-Models,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-08-17,140,https://github.com/RichardS0268/Autoencoder-Asset-Pricing-Models,"Reimplementation of Autoencoder Asset Pricing Models ([GKX, 2019](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3335536)).",True,False,False,False,RichardS0268/Autoencoder-Asset-Pricing-Models +Finance,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-05-12,3709,https://github.com/shashankvemuri/Finance,"150+ quantitative finance Python programs to help you gather, manipulate, and analyze stock market data.",True,False,False,False,shashankvemuri/Finance +101_formulaic_alphas,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2022-07-11,45,https://github.com/ram-ki/101_formulaic_alphas,Implementation of [101 formulaic alphas](https://arxiv.org/ftp/arxiv/papers/1601/1601.00991.pdf) using qstrader.,True,False,False,False,ram-ki/101_formulaic_alphas +Tidy Finance,"Reproducing Works, Training & Books",,,reproducing-works-training-books,,0,https://www.tidy-finance.org/,"An opinionated approach to empirical research in financial economics - a fully transparent, open-source code base in multiple programming languages (Python and R) to enable the reproducible implementation of financial research projects for students and practitioners.",False,False,False,False, +RoughVolatilityWorkshop,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-09-06,71,https://github.com/jgatheral/RoughVolatilityWorkshop,2024 QuantMind's Rough Volatility Workshop lectures.,True,False,False,False,jgatheral/RoughVolatilityWorkshop +AFML,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-09-05,810,https://github.com/boyboi86/AFML,All the answers for exercises from Advances in Financial Machine Learning by Dr Marco Lopez de Parodo.,True,False,False,False,boyboi86/AFML +AlgoTradingLib,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2026-02-10,28,https://github.com/usdaud/algotradinglib.github.io,"A catalog of algorithmic trading libraries, frameworks, strategies, and educational materials.",True,False,False,False,usdaud/algotradinglib.github.io +Portfolio Optimization Book,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-02-17,25,https://portfoliooptimizationbook.com/,Prof. Daniel Palomar's Portfolio Optimization Book. [GitHub](https://github.com/dppalomar/pob),True,False,False,False,dppalomar/pob +Chartscout,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://chartscout.io,Real-time cryptocurrency chart pattern detection with automated alerts across multiple exchanges.,False,False,False,True, +DayTradingBench,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://daytradingbench.com,Live autonomous benchmark that evaluates LLM trading performance on DAX and Nasdaq indices using identical strategies and real-time market data. API access available.,False,False,False,True, +CoinTester,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://cointester.io,"No-code crypto backtesting platform with 100+ indicators, AI sentiment signals, and 5+ years of historical data across 1,000+ trading pairs.",False,False,False,True, +goMacro.ai,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://gomacro.ai,"AI-powered economic calendar with institutional-grade insights, bull/bear/base case scenario planning for NFP, CPI, PPI and other macro data releases.",False,False,False,True, +StockAInsights,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://stockainsights.com,"AI-extracted financial statements API covering SEC filings including foreign filers (20-F, 6-K, 40-F), normalized quarterly and annual data from 2014+.",False,False,False,True, +brapi.dev,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://brapi.dev/,"Brazilian stock market data API for B3/Bovespa quotes, historical OHLCV, dividends, and fundamentals.",False,False,False,True, +13F Insight,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://13finsight.com/,"Track institutional investor 13F holdings with AI-powered analysis, position change alerts, and filing summaries.",False,False,False,True, +Earnings Feed,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://earningsfeed.com/api,"Real-time SEC filings, insider trades, and institutional holdings API.",False,False,False,True, +Financial Data,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://financialdata.net/,Stock Market and Financial Data API.,False,False,False,True, +Frostbyte,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://agent-gateway-kappa.vercel.app,"Real-time crypto prices for 500+ tokens via REST API with free tier, DeFi swap routing and portfolio tracking.",False,False,False,True, +SaxoOpenAPI,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://www.developer.saxo/,Saxo Bank financial data API.,False,False,False,True, +RTPR,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://rtpr.io,"Real-time press release API delivering news from Business Wire, PR Newswire, and GlobeNewswire with sub-500ms latency. REST and WebSocket APIs for financial applications. Python and Node.js SDKs available.",False,False,False,True, +Nasdaq Data Link,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://data.nasdaq.com/tools/full-list,"Financial data API with support for R, Python, Excel, Ruby, and many other languages (formerly Quandl).",False,False,False,True, +Parsec,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://parsecfinance.com,Prediction market API with Python SDK for normalized data and execution across 5 prediction market exchanges. Free tier: 10K requests/month.,False,False,False,True, +Portfolio Optimizer,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://portfoliooptimizer.io/,Portfolio Optimizer is a Web API for portfolio analysis and optimization.,False,False,False,True, +Reddit WallstreetBets API,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://dashboard.nbshare.io/apps/reddit/api/,Provides daily top 50 stocks from reddit (subreddit) Wallstreetbets and their sentiments via the API.,False,False,False,True, +System R,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://agents.systemr.ai,"AI-native risk intelligence API for trading agents. Position sizing, risk validation, and system health in one call.",False,False,False,True, +Telonex,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://telonex.io,"Tick-level prediction market data (trades, quotes, orderbooks, on-chain fills) via REST API and Python SDK.",False,False,False,True, +ValueRay,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://www.valueray.com/api,"Technical, quantitative and sentiment data for stocks and ETFs with risk metrics, peer percentiles and market regime signals. Optimized for AI/LLM agents.",False,False,False,True, +VertData,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://vertdata.com,"Institutional-grade financial intelligence platform. Track 43K+ congressional trades (STOCK Act), SEC insider Form 4 filings, 25 superinvestor 13F portfolios, CFTC futures positioning, ARK ETF holdings, and short interest — all scored by AI for signal strength.",False,False,False,True, +KeepRule,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://keeprule.com/,"Curated library of decision-making principles and investment wisdom from masters like Buffett and Munger, featuring mental models for better investment thinking.",False,False,False,True, +ML-Quant,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://www.ml-quant.com/,"Top Quant resources like ArXiv (sanity), SSRN, RePec, Journals, Podcasts, Videos, and Blogs.",False,False,False,True, +awesome-sec-filings,Related Lists,,,related-lists,2026-02-14,9,https://github.com/vibeyclaw/awesome-sec-filings,"A curated list of tools, data sources, libraries, and resources for working with SEC filings (13F, 10-K, 10-Q, 8-K).",True,False,False,False,vibeyclaw/awesome-sec-filings +CONVEXFI,Related Lists,,,related-lists,,0,https://github.com/convexfi,Official GitHub organization for the convex research group at the Hong Kong University of Science and Technology (HKUST).,True,False,False,False, diff --git a/projects.html b/projects.html deleted file mode 100644 index 8e870c0..0000000 --- a/projects.html +++ /dev/null @@ -1,575 +0,0 @@ - - - - - - - - - -Projects – Awesome Quant - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - - - -
- -
-
-

Projects

-
- - - -
- - - - -
- - - -
- - -

Compilation of projects providing access to the date of last commit or publication date.

-
-
-
-Table 1: Projects -
-
-
- -
-
-
- - - -
- -
- - - - - \ No newline at end of file diff --git a/search.json b/search.json deleted file mode 100644 index 606834e..0000000 --- a/search.json +++ /dev/null @@ -1,205 +0,0 @@ -[ - { - "objectID": "projects.html", - "href": "projects.html", - "title": "Projects", - "section": "", - "text": "Compilation of projects providing access to the date of last commit or publication date.\n\n\n\nTable 1: Projects" - }, - { - "objectID": "about.html", - "href": "about.html", - "title": "About", - "section": "", - "text": "About this site" - }, - { - "objectID": "CODE_OF_CONDUCT.html", - "href": "CODE_OF_CONDUCT.html", - "title": "Contributor Covenant Code of Conduct", - "section": "", - "text": "We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.\nWe pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community." - }, - { - "objectID": "CODE_OF_CONDUCT.html#our-pledge", - "href": "CODE_OF_CONDUCT.html#our-pledge", - "title": "Contributor Covenant Code of Conduct", - "section": "", - "text": "We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.\nWe pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community." - }, - { - "objectID": "CODE_OF_CONDUCT.html#our-standards", - "href": "CODE_OF_CONDUCT.html#our-standards", - "title": "Contributor Covenant Code of Conduct", - "section": "Our Standards", - "text": "Our Standards\nExamples of behavior that contributes to a positive environment for our community include:\n\nDemonstrating empathy and kindness toward other people\nBeing respectful of differing opinions, viewpoints, and experiences\nGiving and gracefully accepting constructive feedback\nAccepting responsibility and apologizing to those affected by our mistakes, and learning from the experience\nFocusing on what is best not just for us as individuals, but for the overall community\n\nExamples of unacceptable behavior include:\n\nThe use of sexualized language or imagery, and sexual attention or advances of any kind\nTrolling, insulting or derogatory comments, and personal or political attacks\nPublic or private harassment\nPublishing others’ private information, such as a physical or email address, without their explicit permission\nOther conduct which could reasonably be considered inappropriate in a professional setting" - }, - { - "objectID": "CODE_OF_CONDUCT.html#enforcement-responsibilities", - "href": "CODE_OF_CONDUCT.html#enforcement-responsibilities", - "title": "Contributor Covenant Code of Conduct", - "section": "Enforcement Responsibilities", - "text": "Enforcement Responsibilities\nCommunity leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.\nCommunity leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate." - }, - { - "objectID": "CODE_OF_CONDUCT.html#scope", - "href": "CODE_OF_CONDUCT.html#scope", - "title": "Contributor Covenant Code of Conduct", - "section": "Scope", - "text": "Scope\nThis Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event." - }, - { - "objectID": "CODE_OF_CONDUCT.html#enforcement", - "href": "CODE_OF_CONDUCT.html#enforcement", - "title": "Contributor Covenant Code of Conduct", - "section": "Enforcement", - "text": "Enforcement\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at awesom3quant@gmail.com. All complaints will be reviewed and investigated promptly and fairly.\nAll community leaders are obligated to respect the privacy and security of the reporter of any incident." - }, - { - "objectID": "CODE_OF_CONDUCT.html#enforcement-guidelines", - "href": "CODE_OF_CONDUCT.html#enforcement-guidelines", - "title": "Contributor Covenant Code of Conduct", - "section": "Enforcement Guidelines", - "text": "Enforcement Guidelines\nCommunity leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:\n\n1. Correction\nCommunity Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.\nConsequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.\n\n\n2. Warning\nCommunity Impact: A violation through a single incident or series of actions.\nConsequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.\n\n\n3. Temporary Ban\nCommunity Impact: A serious violation of community standards, including sustained inappropriate behavior.\nConsequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.\n\n\n4. Permanent Ban\nCommunity Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.\nConsequence: A permanent ban from any sort of public interaction within the community." - }, - { - "objectID": "CODE_OF_CONDUCT.html#attribution", - "href": "CODE_OF_CONDUCT.html#attribution", - "title": "Contributor Covenant Code of Conduct", - "section": "Attribution", - "text": "Attribution\nThis Code of Conduct is adapted from the Contributor Covenant, version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.\nCommunity Impact Guidelines were inspired by Mozilla’s code of conduct enforcement ladder.\nFor answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations." - }, - { - "objectID": "index.html", - "href": "index.html", - "title": "Awesome Quant", - "section": "", - "text": "A curated list of insanely awesome libraries, packages and resources for Quants (Quantitative Finance)." - }, - { - "objectID": "index.html#python", - "href": "index.html#python", - "title": "Awesome Quant", - "section": "Python", - "text": "Python\n\nNumerical Libraries & Data Structures\n\nnumpy - NumPy is the fundamental package for scientific computing with Python. GitHub\nscipy - SciPy (pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software for mathematics, science, and engineering. GitHub\npandas - pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language. GitHub\npolars - Polars is a blazingly fast DataFrame library for manipulating structured data. GitHub\nquantdsl - Domain specific language for quantitative analytics in finance and trading.\nstatistics - Builtin Python library for all basic statistical calculations.\nsympy - SymPy is a Python library for symbolic mathematics. GitHub\npymc3 - Probabilistic Programming in Python: Bayesian Modeling and Probabilistic Machine Learning with Theano. GitHub\nmodelx - Python reimagination of spreadsheets as formula-centric objects that are interoperable with pandas. GitHub\nArcticDB - High performance datastore for time series and tick data.\npmxt - The CCXT for prediction markets. A unified API for trading on Polymarket, Kalshi, and more.\n\n\n\nFinancial Instruments and Pricing\n\nOpenBB Terminal - Terminal for investment research for everyone.\nFincept Terminal - Advance Data Based A.I Terminal for all Types of Financial Asset Research.\nPyQL - QuantLib’s Python port.\npyfin - Basic options pricing in Python. ARCHIVED\nvollib - vollib is a python library for calculating option prices, implied volatility and greeks.\nQuantPy - A framework for quantitative finance In python.\nFinance-Python - Python tools for Finance.\nffn - A financial function library for Python.\npynance - Lightweight Python library for assembling and analyzing financial data.\ntia - Toolkit for integration and analysis.\npysabr - SABR model Python implementation.\nFinancePy - A Python Finance Library that focuses on the pricing and risk-management of Financial Derivatives, including fixed-income, equity, FX and credit derivatives.\ngs-quant - Python toolkit for quantitative finance\nwillowtree - Robust and flexible Python implementation of the willow tree lattice for derivatives pricing.\nfinancial-engineering - Applications of Monte Carlo methods to financial engineering projects, in Python.\noptlib - A library for financial options pricing written in Python.\ntf-quant-finance - High-performance TensorFlow library for quantitative finance.\nQ-Fin - A Python library for mathematical finance.\nQuantsbin - Tools for pricing and plotting of vanilla option prices, greeks and various other analysis around them.\nfinoptions - Complete python implementation of R package fOptions with partial implementation of fExoticOptions for pricing various options.\npypme - PME (Public Market Equivalent) calculation.\nAbsBox - A Python based library to model cashflow for structured product like Asset-backed securities (ABS) and Mortgage-backed securities (MBS).\nIntrinsic-Value-Calculator - A Python tool for quick calculations of a stock’s fair value using Discounted Cash Flow analysis.\nKelly-Criterion - Kelly Criterion implemented in Python to size portfolios based on J. L. Kelly Jr’s formula.\nrateslib - A fixed income library for pricing bonds and bond futures, and derivatives such as IRS, cross-currency and FX swaps.\nfypy - Vanilla and exotic option pricing library to support quantitative R&D. Focus on pricing interesting/useful models and contracts (including and beyond Black-Scholes), as well as calibration of financial models to market data.\nquantra High-performance pricing engine built on QuantLib. It exposes QuantLib’s functionality through gRPC and REST APIs, enabling distributed computations with FlatBuffers serialization.\noptionlab - A Python library for evaluating option trading strategies.\n\n\n\nIndicators\n\npandas_talib - A Python Pandas implementation of technical analysis indicators.\nfinta - Common financial technical analysis indicators implemented in Pandas.\nTulipy - Financial Technical Analysis Indicator Library (Python bindings for tulipindicators)\nlppls - A Python module for fitting the Log-Periodic Power Law Singularity (LPPLS) model.\ntalipp - Incremental technical analysis library for Python.\nstreaming_indicators - A python library for computing technical analysis indicators on streaming data.\n\n\n\nTrading & Backtesting\n\nthe0 - Self-hosted execution engine for algorithmic trading bots. Write strategies in Python, TypeScript, Rust, C++, C#, Scala, or Haskell and deploy with one command. Each bot runs in an isolated container with scheduled or streaming execution.\nskfolio - Python library for portfolio optimization built on top of scikit-learn. It provides a unified interface and sklearn compatible tools to build, tune and cross-validate portfolio models.\nInvesting algorithm framework - Framework for developing, backtesting, and deploying automated trading algorithms.\nQSTrader - QSTrader backtesting simulation engine.\nBlankly - Fully integrated backtesting, paper trading, and live deployment.\nTA-Lib - Python wrapper for TA-Lib (http://ta-lib.org/).\nzipline - Pythonic algorithmic trading library.\nzipline-reloaded - Zipline, a Pythonic Algorithmic Trading Library.\nQuantSoftware Toolkit - Python-based open source software framework designed to support portfolio construction and management.\nquantitative - Quantitative finance, and backtesting library.\nanalyzer - Python framework for real-time financial and backtesting trading strategies.\nbt - Flexible Backtesting for Python.\nbacktrader - Python Backtesting library for trading strategies.\npythalesians - Python library to backtest trading strategies, plot charts, seamlessly download market data, analyze market patterns etc.\npybacktest - Vectorized backtesting framework in Python / pandas, designed to make your backtesting easier.\npyalgotrade - Python Algorithmic Trading Library.\nbasana - A Python async and event driven framework for algorithmic trading, with a focus on crypto currencies.\nta - Technical Analysis Library using Pandas (Python)\nalgobroker - This is an execution engine for algo trading.\nfinmarketpy - Python library for backtesting trading strategies and analyzing financial markets.\nbinary-martingale - Computer program to automatically trade binary options martingale style.\nfooltrader - the project using big-data technology to provide an uniform way to analyze the whole market.\nzvt - the project using sql, pandas to provide an uniform and extendable way to record data, computing factors, select securities, backtesting, realtime trading and it could show all of them in clearly charts in realtime.\npylivetrader - zipline-compatible live trading library.\npipeline-live - zipline’s pipeline capability with IEX for live trading.\nzipline-extensions - Zipline extensions and adapters for QuantRocket.\nmoonshot - Vectorized backtester and trading engine for QuantRocket based on Pandas.\nPyPortfolioOpt - Financial portfolio optimization in python, including classical efficient frontier and advanced methods.\nEiten - Eiten is an open source toolkit by Tradytics that implements various statistical and algorithmic investing strategies such as Eigen Portfolios, Minimum Variance Portfolios, Maximum Sharpe Ratio Portfolios, and Genetic Algorithms based Portfolios.\nriskparity.py - fast and scalable design of risk parity portfolios with TensorFlow 2.0\nmlfinlab - Implementations regarding “Advances in Financial Machine Learning” by Marcos Lopez de Prado. (Feature Engineering, Financial Data Structures, Meta-Labeling)\npyqstrat - A fast, extensible, transparent python library for backtesting quantitative strategies.\nNowTrade - Python library for backtesting technical/mechanical strategies in the stock and currency markets.\npinkfish - A backtester and spreadsheet library for security analysis.\nPRISM-INSIGHT - AI-powered stock analysis system with 13 specialized agents, automated trading via KIS API, supporting Korean & US markets.\nFinClaw - AI-powered financial intelligence engine with 8 master strategies across US, CN, and HK markets. Multi-agent architecture with +29.1% annual alpha. 227 tests.\naat - Async Algorithmic Trading Engine\nBacktesting.py - Backtest trading strategies in Python\ncatalyst - An Algorithmic Trading Library for Crypto-Assets in Python\nquantstats - Portfolio analytics for quants, written in Python\nqtpylib - QTPyLib, Pythonic Algorithmic Trading http://qtpylib.io\nQuantdom - Python-based framework for backtesting trading strategies & analyzing financial markets [GUI :neckbeard:]\nfreqtrade - Free, open source crypto trading bot\nalgorithmic-trading-with-python - Free pandas and scikit-learn resources for trading simulation, backtesting, and machine learning on financial data.\nDeepDow - Portfolio optimization with deep learning\nQlib - An AI-oriented Quantitative Investment Platform by Microsoft. Full ML pipeline of data processing, model training, back-testing; and covers the entire chain of quantitative investment: alpha seeking, risk modeling, portfolio optimization, and order execution.\nmachine-learning-for-trading - Code and resources for Machine Learning for Algorithmic Trading\nAlphaPy - Automated Machine Learning [AutoML] with Python, scikit-learn, Keras, XGBoost, LightGBM, and CatBoost\njesse - An advanced crypto trading bot written in Python\nrqalpha - A extendable, replaceable Python algorithmic backtest && trading framework supporting multiple securities.\nFinRL-Library - A Deep Reinforcement Learning Library for Automated Trading in Quantitative Finance. NeurIPS 2020.\nbulbea - Deep Learning based Python Library for Stock Market Prediction and Modelling.\nib_nope - Automated trading system for NOPE strategy over IBKR TWS.\nOctoBot - Open source cryptocurrency trading bot for high frequency, arbitrage, TA and social trading with an advanced web interface.\nOpenFinClaw - AI-native hedge fund platform: natural language strategy generation, Rust backtesting engine, multi-market execution, and self-evolving strategy pipeline with community leaderboard.\nbta-lib - Technical Analysis library in pandas for backtesting algotrading and quantitative analysis.\nStock-Prediction-Models - Gathers machine learning and deep learning models for Stock forecasting including trading bots and simulations.\nTuneTA - TuneTA optimizes technical indicators using a distance correlation measure to a user defined target feature such as next day return.\nAutoTrader - A Python-based development platform for automated trading systems - from backtesting to optimization to livetrading.\nfast-trade - A library built with backtest portability and performance in mind for backtest trading strategies.\nqf-lib - QF-Lib is a Python library that provides high quality tools for quantitative finance.\ntda-api - Gather data and trade equities, options, and ETFs via TDAmeritrade.\nvectorbt - Find your trading edge, using a powerful toolkit for backtesting, algorithmic trading, and research.\nLean - Lean Algorithmic Trading Engine by QuantConnect (Python, C#).\nfast-trade - Low code backtesting library utilizing pandas and technical analysis indicators.\npysystemtrade - pysystemtrade is the open source version of Robert Carver’s backtesting and trading engine that implements systems according to the framework outlined in his book “Systematic Trading”, which is further developed on his blog.\npytrendseries - Detect trend in time series, drawdown, drawdown within a constant look-back window , maximum drawdown, time underwater.\nPyLOB - Fully functioning fast Limit Order Book written in Python.\nPyBroker - Algorithmic Trading with Machine Learning.\nOctoBot Script - A quant framework to create cryptocurrencies strategies - from backtesting to optimization to livetrading.\nhftbacktest - A high-frequency trading and market-making backtesting tool accounts for limit orders, queue positions, and latencies, utilizing full tick data for trades and order books.\nvnpy - VeighNa is a Python-based open source quantitative trading system development framework.\nIntelligent Trading Bot - Automatically generating signals and trading based on machine learning and feature engineering\nfastquant - fastquant allows you to easily backtest investment strategies with as few as 3 lines of python code.\nnautilus_trader - A high-performance algorithmic trading platform and event-driven backtester.\nYABTE - Yet Another (Python) BackTesting Engine.\nTrading Strategy - TradingStrategy.ai is a market data, backtesting, live trading and investor management framework for decentralised finance\nHikyuu - A base on Python/C++ open source high-performance quant framework for faster analysis and backtesting, contains the complete trading system components for reuse and combination.\nrust_bt - A high performance, low-latency backtesting engine for testing quantitative trading strategies on historical and live data in Rust.\nGunbot Quant - Toolkit for quantitative trading analysis. It integrates an advanced market screener, a multi-strategy, multi-asset backtesting engine. Use with built-in GUI or through CLI.\nStrateQueue - An open‑source, broker‑agnostic Python library that lets you seamlessly deploy strategies from any major backtesting engine to live (or paper) trading with zero code changes and built‑in safety controls.\nPythonTradingFramework - Python algorithmic trading bot framework for Kubernetes: backtesting, hyperparameter optimization, 150+ technical analysis indicators (RSI, MACD, Bollinger Bands, ADX), portfolio management, PostgreSQL integration, Helm deployment, CronJob scheduling. Minimal overhead, production-ready, Yahoo Finance data.\nQTradeX-AI-Agents - Example strategies for the QTradeX platfrom.\nQTradeX-Algo-Trading-SDK - AI-powered SDK featuring algorithmic trading, backtesting, deployment on 100+ exchanges, and multiple optimization engines.\nantback - A lightweight, event-loop-style backtest engine that allows a function-driven imperative style using efficient stateful helper functions and data containers.\nVARRD - AI-powered trading edge discovery platform that validates trading ideas with event studies, statistical tests, and real market data. Web app, MCP server, CLI (pip install varrd), and Python SDK.\npolymarket-whales - Real-time whale trade tracker for Polymarket — terminal alerts + Telegram notifications when large orders hit the book.\n\n\n\nRisk Analysis\n\nQuantLibRisks - Fast risks with QuantLib\nXAD - Automatic Differentation (AAD) Library\npyfolio - Portfolio and risk analytics in Python.\nempyrical - Common financial risk and performance metrics.\nfecon235 - Computational tools for financial economics include: Gaussian Mixture model of leptokurtotic risk, adaptive Boltzmann portfolios.\nfinance - Financial Risk Calculations. Optimized for ease of use through class construction and operator overload.\nqfrm - Quantitative Financial Risk Management: awesome OOP tools for measuring, managing and visualizing risk of financial instruments and portfolios. (Last updated: 2015-12-12)\nvisualize-wealth - Portfolio construction and quantitative analysis.\nVisualPortfolio - This tool is used to visualize the performance of a portfolio.\nuniversal-portfolios - Collection of algorithms for online portfolio selection.\nFinQuant - A program for financial portfolio management, analysis and optimization.\nEmpyrial - Portfolio’s risk and performance analytics and returns predictions.\nrisktools - Risk tools for use within the crude and crude products trading space with partial implementation of R’s PerformanceAnalytics.\nRiskfolio-Lib - Portfolio Optimization and Quantitative Strategic Asset Allocation in Python.\nempyrical-reloaded - Common financial risk and performance metrics. empyrical fork.\npyfolio-reloaded - Portfolio and risk analytics in Python. pyfolio fork.\nfortitudo.tech - Conditional Value-at-Risk (CVaR) portfolio optimization and Entropy Pooling views / stress-testing in Python.\nQuant Lab Alpha — Portfolio risk decomposition and Monte Carlo simulation toolkit with factor-based modeling.\nquantitative-finance-tools - Library for portfolio optimization (MVO) and rigorous risk metrics (VaR/CVaR).\ncuristat - Futures volatility forecasting platform for ES/NQ. Proprietary CVN rating (1-10), regime detection (CRC composite), 8 directional signals, economic event impact analytics. Includes MCP server for AI agent integration.\nProp Trader Compass - Interactive risk and payout calculator for Futures and CFD traders; features one-time fee firm comparisons.\n\n\n\nFactor Analysis\n\nalphalens - Performance analysis of predictive alpha factors.\nalphalens-reloaded - Performance analysis of predictive (alpha) stock factors.\nSpectre - GPU-accelerated Factors analysis library and Backtester\nquant-lab-alpha - Open-source investment analytics platform bridging academic research and retail finance.\n\n\n\nSentiment Analysis\n\nAsset News Sentiment Analyzer - Sentiment analysis and report generation package for financial assets and securities utilizing GPT models.\nSocial Stock Sentiment API - REST API analyzing Reddit and X/Twitter for stock mentions and sentiment, providing buzz scores, trending stocks, and AI-generated trend explanations.\n\n\n\nQuant Research Environment\n\nJupyter Quant - A dockerized Jupyter quant research environment with preloaded tools for quant analysis, statsmodels, pymc, arch, py_vollib, zipline-reloaded, PyPortfolioOpt, etc.\n\n\n\nTime Series\n\nARCH - ARCH models in Python.\nstatsmodels - Python module that allows users to explore data, estimate statistical models, and perform statistical tests. GitHub\ndynts - Python package for timeseries analysis and manipulation.\nPyFlux - Python library for timeseries modelling and inference (frequentist and Bayesian) on models.\ntsfresh - Automatic extraction of relevant features from time series.\nFacebook Prophet - Tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth.\ntsmoothie - A python library for time-series smoothing and outlier detection in a vectorized way.\npmdarima - A statistical library designed to fill the void in Python’s time series analysis capabilities, including the equivalent of R’s auto.arima function.\ngluon-ts - vProbabilistic time series modeling in Python.\nfunctime - Time-series machine learning at scale. Built with Polars for embarrassingly parallel feature extraction and forecasts on panel data.\n\n\n\nCalendars\n\nexchange_calendars - Stock Exchange Trading Calendars.\nbizdays - Business days calculations and utilities.\npandas_market_calendars - Exchange calendars to use with pandas for trading applications.\n\n\n\nData Sources\n\nStockAPI – Free real-time Chinese stock data (REST & WebSocket).\nPolymarket Scanner API - Real-time arbitrage detection API for Polymarket prediction markets, scanning 12,000+ markets for mispricings.\nyfinance - Yahoo! Finance market data downloader (+faster Pandas Datareader)\ndefeatbeta-api - An open-source alternative to Yahoo Finance’s market data APIs with higher reliability.\nfindatapy - Python library to download market data via Bloomberg, Quandl, Yahoo etc.\ngooglefinance - Python module to get real-time stock data from Google Finance API.\nyahoo-finance - Python module to get stock data from Yahoo! Finance.\npandas-datareader - Python module to get data from various sources (Google Finance, Yahoo Finance, FRED, OECD, Fama/French, World Bank, Eurostat…) into Pandas datastructures such as DataFrame, Panel with a caching mechanism.\npandas-finance - High level API for access to and analysis of financial data.\npyhoofinance - Rapidly queries Yahoo Finance for multiple tickers and returns typed data for analysis.\nyfinanceapi - Finance API for Python.\nyql-finance - yql-finance is simple and fast. API returns stock closing prices for current period of time and current stock ticker (i.e. APPL, GOOGL).\nystockquote - Retrieve stock quote data from Yahoo Finance.\nwallstreet - Real time stock and option data.\nstock_extractor - General Purpose Stock Extractors from Online Resources.\nStockex - Python wrapper for Yahoo! Finance API.\nSwapAPI - Free DEX aggregator API returning executable swap calldata across 46 EVM chains. No API key required. GitHub\nfinsymbols - Obtains stock symbols and relating information for SP500, AMEX, NYSE, and NASDAQ.\nFRB - Python Client for FRED® API.\ninquisitor - Python Interface to Econdb.com API.\nyfi - Yahoo! YQL library.\nchinesestockapi - Python API to get Chinese stock price. (Last updated: 2015-03-21)\nexchange - Get current exchange rate.\nticks - Simple command line tool to get stock ticker data.\npybbg - Python interface to Bloomberg COM APIs.\nccy - Python module for currencies.\ntushare - A utility for crawling historical and Real-time Quotes data of China stocks. (Last updated: 2024-08-27)\nedinet-mcp - Parse Japanese XBRL financial statements from EDINET with 161 normalized labels, 26 financial metrics, and multi-company screening.\nestat-mcp - Access Japanese government statistics (e-Stat) covering population, GDP, CPI, labor, and trade data with MCP integration and Polars export.\ntdnet-disclosure-mcp - Access Japanese timely disclosures (TDNet) via MCP. Retrieve earnings, dividends, forecasts, buybacks, and other filings for 4,000+ listed companies. No API key required.\ncn_stock_src - Utility for retrieving basic China stock data from different sources.\ncoinmarketcap - Python API for coinmarketcap.\ncoinpulse - Python SDK for cryptocurrency portfolio tracking with real-time prices, P/L calculations, and price alerts. Free tier available.\nafter-hours - Obtain pre market and after hours stock prices for a given symbol.\nbronto-python - Bronto API Integration for Python. GitHub\npytdx - Python Interface for retrieving chinese stock realtime quote data from TongDaXin Nodes.\npdblp - A simple interface to integrate pandas and the Bloomberg Open API.\ntiingo - Python interface for daily composite prices/OHLC/Volume + Real-time News Feeds, powered by the Tiingo Data Platform.\niexfinance - Python Interface for retrieving real-time and historical prices and equities data from The Investor’s Exchange.\npyEX - Python interface to IEX with emphasis on pandas, support for streaming data, premium data, points data (economic, rates, commodities), and technical indicators.\nalpaca-trade-api - Python interface for retrieving real-time and historical prices from Alpaca API as well as trade execution.\nmetatrader5 - API Connector to MetaTrader 5 Terminal. (Last updated: 2026-02-20)\nakshare - AkShare is an elegant and simple financial data interface library for Python, built for human beings! https://akshare.readthedocs.io\nyahooquery - Python interface for retrieving data through unofficial Yahoo Finance API.\ninvestpy - Financial Data Extraction from Investing.com with Python! https://investpy.readthedocs.io/\nyliveticker - Live stream of market data from Yahoo Finance websocket.\nbbgbridge - Easy to use Bloomberg Desktop API wrapper for Python.\npolygon.io - A python library for Polygon.io financial data APIs.\nalpha_vantage - A python wrapper for Alpha Vantage API for financial data.\noilpriceapi - Python SDK for real-time oil and commodity prices (WTI, Brent, Urals, natural gas, coal) with OpenBB integration.\nFinanceDataReader - Open Source Financial data reader for U.S, Korean, Japanese, Chinese, Vietnamese Stocks\npystlouisfed - Python client for Federal Reserve Bank of St. Louis API - FRED, ALFRED, GeoFRED and FRASER.\npython-bcb - Python interface to Brazilian Central Bank web services.\nswiss-finance-data - Python package for Swiss financial data (SNB Policy Rate, SARON, CHF FX rates, CPI, SMI equities, Confederation bond yields) from official SNB sources.\nmarket-prices - Create meaningful OHLCV datasets from knowledge of exchange-calendars (works out-the-box with data from Yahoo Finance).\ntardis-python - Python interface for Tardis.dev high frequency crypto market data\nlake-api - Python interface for Crypto Lake high frequency crypto market data\ntessa - simple, hassle-free access to price information of financial assets (currently based on yfinance and pycoingecko), including search and a symbol class.\npandaSDMX - Python package that implements SDMX 2.1 (ISO 17369:2013), a format for exchange of statistical data and metadata used by national statistical agencies, central banks, and international organisations.\ncif - Python package that include few composite indicators, which summarize multidimensional relationships between individual economic indicators.\nfinagg - finagg is a Python package that provides implementations of popular and free financial APIs, tools for aggregating historical data from those APIs into SQL databases, and tools for transforming aggregated data into features useful for analysis and AI/ML.\nFinanceDatabase - This is a database of 300.000+ symbols containing Equities, ETFs, Funds, Indices, Currencies, Cryptocurrencies and Money Markets.\nTrading Strategy - download price data for decentralised exchanges and lending protocols (DeFi)\ndatamule-python - A package to work with SEC data. Incorporates datamule endpoints.\nfsynth - Python library for high-fidelity unlimited synthetic financial data generation using Heston Stochastic Volatility and Merton Jump Diffusion.\nfedfred - FRED & GeoFRED Economic data API with preprocessed dataframe output in pandas/geopandas, polars/polars_st, and dask dataframes/geodataframes.\nedgar-sec - EDGAR Financial data API with preprocessed dataclass outputs.\nedgartools - AI-native SEC EDGAR library with XBRL financials, clean text extraction, 17+ typed forms, and pandas DataFrames.\nFXMacroData - Real-time forex macroeconomic API for all major currency pairs sourced from central bank announcements. GitHub\nwallstreet - Real time stock and option data.\n\n\n\nExcel Integration\n\nxlwings - Make Excel fly with Python. GitHub\nopenpyxl - Read/Write Excel 2007 xlsx/xlsm files.\nxlrd - Library for developers to extract data from Microsoft Excel spreadsheet files.\nxlsxwriter - Write files in the Excel 2007+ XLSX file format. GitHub\nxlwt - Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 XLS files, on any platform.\nxlloop - XLLoop is an open source framework for implementing Excel user-defined functions (UDFs) on a centralised server (a function server). GitHub\nexpy - The ExPy add-in allows easy use of Python directly from within an Microsoft Excel spreadsheet, both to execute arbitrary code and to define new Excel functions.\npyxll - PyXLL is an Excel add-in that enables you to extend Excel using nothing but Python code.\n\n\n\nVisualization\n\nD-Tale - Visualizer for pandas dataframes and xarray datasets.\nmplfinance - matplotlib utilities for the visualization, and visual analysis, of financial data.\nfinplot - Performant and effortless finance plotting for Python.\nfinvizfinance - Finviz analysis python library.\nmarket-analy - Analysis and interactive charting using market-prices and bqplot.\nQuantInvestStrats - Quantitative Investment Strategies (QIS) package implements Python analytics for visualisation of financial data, performance reporting, analysis of quantitative strategies." - }, - { - "objectID": "index.html#r", - "href": "index.html#r", - "title": "Awesome Quant", - "section": "R", - "text": "R\n\nNumerical Libraries & Data Structures\n\nxts - eXtensible Time Series: Provide for uniform handling of R’s different time-based data classes by extending zoo, maximizing native format information preservation and allowing for user level customization and extension, while simplifying cross-class interoperability.\ndata.table - Extension of data.frame: Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of columns by group using no copies at all, list columns and a fast file reader (fread). Offers a natural and flexible syntax, for faster development.\nsparseEigen - Sparse principal component analysis.\nTSdbi - Provides a common interface to time series databases.\ntseries - Time Series Analysis and Computational Finance.\nzoo - S3 Infrastructure for Regular and Irregular Time Series (Z’s Ordered Observations).\ntis - Functions and S3 classes for time indexes and time indexed series, which are compatible with FAME frequencies.\ntfplot - Utilities for simple manipulation and quick plotting of time series data.\ntframe - A kernel of functions for programming time series methods in a way that is relatively independently of the representation of time.\n\n\n\nData Sources\n\nIBrokers - Provides native R access to Interactive Brokers Trader Workstation API.\nRblpapi - An R Interface to ‘Bloomberg’ is provided via the ‘Blp API’.\nRbitcoin - Unified markets API interface (bitstamp, kraken, btce, bitmarket).\nGetTDData - Downloads and aggregates data for Brazilian government issued bonds directly from the website of Tesouro Direto.\nGetHFData - Downloads and aggregates high frequency trading data for Brazilian instruments directly from Bovespa ftp site.\ntd - Interfaces the ‘twelvedata’ API for stocks and (digital and standard) currencies.\nrbcb - R interface to Brazilian Central Bank web services.\nrb3 - A bunch of downloaders and parsers for data delivered from B3.\nsimfinapi - Makes ‘SimFin’ data (https://simfin.com/) easily accessible in R.\ntidyfinance - Tidy Finance helper functions to download financial data and process the raw data into a structured Format (tidy data), including date conversion, scaling factor values, and filtering by the specified date.\n\n\n\nFinancial Instruments and Pricing\n\nRQuantLib - RQuantLib connects GNU R with QuantLib.\nquantmod - Quantitative Financial Modelling Framework. GitHub\nRmetrics - The premier open source software solution for teaching and training quantitative finance.\n\nfAsianOptions - EBM and Asian Option Valuation.\nfAssets - Analysing and Modelling Financial Assets.\nfBasics - Markets and Basic Statistics.\nfBonds - Bonds and Interest Rate Models.\nfExoticOptions - Exotic Option Valuation.\nfOptions - Pricing and Evaluating Basic Options.\nfPortfolio - Portfolio Selection and Optimization.\n\nportfolio - Analysing equity portfolios.\nsparseIndexTracking - Portfolio design to track an index.\ncovFactorModel - Covariance matrix estimation via factor models.\nriskParityPortfolio - Blazingly fast design of risk parity portfolios.\nsde - Simulation and Inference for Stochastic Differential Equations.\nYieldCurve - Modelling and estimation of the yield curve.\nSmithWilsonYieldCurve - Constructs a yield curve by the Smith-Wilson method from a table of LIBOR and SWAP rates.\nycinterextra - Yield curve or zero-coupon prices interpolation and extrapolation.\nAmericanCallOpt - This package includes pricing function for selected American call options with underlying assets that generate payouts.\nVarSwapPrice - Pricing a variance swap on an equity index.\nRND - Risk Neutral Density Extraction Package.\nLSMonteCarlo - American options pricing with Least Squares Monte Carlo method.\nOptHedging - Estimation of value and hedging strategy of call and put options.\ntvm - Time Value of Money Functions.\nOptionPricing - Option Pricing with Efficient Simulation Algorithms.\ncredule - Credit Default Swap Functions.\nderivmkts - Functions and R Code to Accompany Derivatives Markets. GitHub\nFinCal - Package for time value of money calculation, time series analysis and computational finance.\nr-quant - R code for quantitative analysis in finance.\noptions.studies - options trading studies functions for use with options.data package and shiny.\nPortfolioAnalytics - Portfolio Analysis, Including Numerical Methods for Optimizationof Portfolios.\nfmbasics - Financial Market Building Blocks.\nR-fixedincome - Fixed income tools for R.\n\n\n\nTrading\n\nbacktest - Exploring Portfolio-Based Conjectures About Financial Instruments.\npa - Performance Attribution for Equity Portfolios.\nTTR - Technical Trading Rules.\nQuantTools - Enhanced Quantitative Trading Modelling.\nblotter - Transaction infrastructure for defining instruments, transactions, portfolios and accounts for trading systems and simulation. Provides portfolio support for multi-asset class and multi-currency portfolios. Actively maintained and developed.\n\n\n\nBacktesting\n\nquantstrat - Transaction-oriented infrastructure for constructing trading systems and simulation. Provides support for multi-asset class and multi-currency portfolios for backtesting and other financial research.\n\n\n\nRisk Analysis\n\nPerformanceAnalytics - Econometric tools for performance and risk analysis.\n\n\n\nFactor Analysis\n\nFactorAnalytics - The FactorAnalytics package contains fitting and analysis methods for the three main types of factor models used in conjunction with portfolio construction, optimization and risk management, namely fundamental factor models, time series factor models and statistical factor models.\nExpected Returns - Solutions for enhancing portfolio diversification and replications of seminal papers with R, most of which are discussed in one of the best investment references of the recent decade, Expected Returns: An Investors Guide to Harvesting Market Rewards by Antti Ilmanen.\n\n\n\nTime Series\n\ntseries - Time Series Analysis and Computational Finance.\nfGarch - Rmetrics - Autoregressive Conditional Heteroskedastic Modelling.\ntimeSeries - Rmetrics - Financial Time Series Objects.\nrugarch - Univariate GARCH Models.\nrmgarch - Multivariate GARCH Models.\ntidypredict - Run predictions inside the database https://tidypredict.netlify.com/.\ntidyquant - Bringing financial analysis to the tidyverse.\ntimetk - A toolkit for working with time series in R.\ntibbletime - Built on top of the tidyverse, tibbletime is an extension that allows for the creation of time aware tibbles through the setting of a time index.\nmatrixprofile - Time series data mining library built on top of the novel Matrix Profile data structure and algorithms.\ngarchmodels - A parsnip backend for GARCH models.\n\n\n\nCalendars\n\ntimeDate - Chronological and Calendar Objects\nbizdays - Business days calculations and utilities" - }, - { - "objectID": "index.html#matlab", - "href": "index.html#matlab", - "title": "Awesome Quant", - "section": "Matlab", - "text": "Matlab\n\nAlternatives\n\nRunMat - High performance, Open Source, MATLAB syntax runtime. GitHub\n\n\n\nFrameWorks\n\nQUANTAXIS - Integrated Quantitative Toolbox with Matlab.\nPROJ_Option_Pricing_Matlab - Quant Option Pricing - Exotic/Vanilla: Barrier, Asian, European, American, Parisian, Lookback, Cliquet, Variance Swap, Swing, Forward Starting, Step, Fader" - }, - { - "objectID": "index.html#julia", - "href": "index.html#julia", - "title": "Awesome Quant", - "section": "Julia", - "text": "Julia\n\nCcyConv.jl - Currency conversion library for Julia\nCryptoExchangeAPIs.jl - A Julia library for cryptocurrency exchange APIs\nFastback.jl - Blazing fast Julia backtester.\nLucky.jl - Modular, asynchronous trading engine in pure Julia.\nQuantLib.jl - Quantlib implementation in pure Julia.\nIto.jl - A Julia package for quantitative finance.\nLightweightCharts.jl - Julia wrapper for Lightweight Charts™ by TradingView.\nTALib.jl - A Julia wrapper for TA-Lib.\nMiletus.jl - A financial contract definition, modeling language, and valuation framework.\nTemporal.jl - Flexible and efficient time series class & methods.\nIndicators.jl - Financial market technical analysis & indicators on top of Temporal.\nStrategems.jl - Quantitative systematic trading strategy development and backtesting.\nTimeSeries.jl - Time series toolkit for Julia.\nTechnicalIndicatorCharts.jl - Visualize OnlineTechnicalIndicators.jl using LightweightCharts.jl.\nMarketTechnicals.jl - Technical analysis of financial time series on top of TimeSeries.\nMarketData.jl - Time series market data.\nOnlineTechnicalIndicators.jl - Julia Technical Analysis Indicators via online algorithms.\nOnlinePortfolioAnalytics.jl - A Julia quantitative portfolio analytics (risk / performance) via online algorithms.\nOnlineResamplers.jl - High-performance Julia package for real-time resampling of financial market data.\nRiskPerf.jl - Quantitative risk and performance analysis package for financial time series powered by the Julia language.\nTimeFrames.jl - A Julia library that defines TimeFrame (essentially for resampling TimeSeries).\nDataFrames.jl - In-memory tabular data in Julia\nTSFrames.jl - Handle timeseries data on top of the powerful and mature DataFrames.jl\nTimeArrays.jl - Time series handling for Julia" - }, - { - "objectID": "index.html#java", - "href": "index.html#java", - "title": "Awesome Quant", - "section": "Java", - "text": "Java\n\nStrata - Modern open-source analytics and market risk library designed and written in Java. GitHub\nJQuantLib - JQuantLib is a free, open-source, comprehensive framework for quantitative finance, written in 100% Java.\nfinmath.net - Java library with algorithms and methodologies related to mathematical finance. GitHub\nquantcomponents - Free Java components for Quantitative Finance and Algorithmic Trading.\nDRIP - Fixed Income, Asset Allocation, Transaction Cost Analysis, XVA Metrics Libraries.\nta4j - A Java library for technical analysis." - }, - { - "objectID": "index.html#javascript", - "href": "index.html#javascript", - "title": "Awesome Quant", - "section": "JavaScript", - "text": "JavaScript\n\nfinance.js - A JavaScript library for common financial calculations.\nportfolio-allocation - PortfolioAllocation is a JavaScript library designed to help constructing financial portfolios made of several assets: bonds, commodities, cryptocurrencies, currencies, exchange traded funds (ETFs), mutual funds, stocks…\nGhostfolio - Wealth management software to keep track of financial assets like stocks, ETFs or cryptocurrencies and make solid, data-driven investment decisions.\nIndicatorTS - Indicator is a TypeScript module providing various stock technical analysis indicators, strategies, and a backtest framework for trading.\nchart-patterns - Technical analysis library for Market Profile, Volume Profile, Stacked Imbalances and High Volume Node indicators.\norderflow - Orderflow trade aggregator for building Footprint Candles from exchange websocket data.\nccxt - A JavaScript / Python / PHP cryptocurrency trading API with support for more than 100 bitcoin/altcoin exchanges.\nSimpleFunctions - Prediction market intelligence CLI for Kalshi and Polymarket. Causal thesis models, edge detection, 24/7 orderbook monitoring, what-if scenarios, and trade execution. MCP server for AI agent integration.\nPENDAX - Javascript SDK for Trading/Data API and Websockets for FTX, FTXUS, OKX, Bybit, & More.\nPreReason - Pre-analyzed Bitcoin and macro market briefings for AI agents. 17 contexts with trend signals, confidence scores, and regime classification via REST API and MCP.\npmxt - The CCXT for prediction markets. A unified API for trading on Polymarket, Kalshi, and more.\npmxt - A unified API for accessing prediction market data across multiple exchanges. CCXT for prediction markets.\nrebalance - Interactive portfolio rebalancing tool that imports brokerage CSV data, sets target allocations, and generates trade instructions.\n\n\nData Visualization\n\nQUANTAXIS_Webkit - An awesome visualization center based on quantaxis." - }, - { - "objectID": "index.html#haskell", - "href": "index.html#haskell", - "title": "Awesome Quant", - "section": "Haskell", - "text": "Haskell\n\nquantfin - quant finance in pure haskell.\nHaxcel - Excel Addin for Haskell.\nFfinar - A financial maths library in Haskell." - }, - { - "objectID": "index.html#scala", - "href": "index.html#scala", - "title": "Awesome Quant", - "section": "Scala", - "text": "Scala\n\nQuantScale - Scala Quantitative Finance Library.\nScala Quant - Scala library for working with stock data from IFTTT recipes or Google Finance." - }, - { - "objectID": "index.html#ruby", - "href": "index.html#ruby", - "title": "Awesome Quant", - "section": "Ruby", - "text": "Ruby\n\nJiji - Open Source Forex algorithmic trading framework using OANDA REST API." - }, - { - "objectID": "index.html#elixirerlang", - "href": "index.html#elixirerlang", - "title": "Awesome Quant", - "section": "Elixir/Erlang", - "text": "Elixir/Erlang\n\nTai - Open Source composable, real time, market data and trade execution toolkit.\nWorkbench - From Idea to Execution - Manage your trading operation across a globally distributed cluster\nProp - An open and opinionated trading platform using productive & familiar open source libraries and tools for strategy research, execution and operation." - }, - { - "objectID": "index.html#golang", - "href": "index.html#golang", - "title": "Awesome Quant", - "section": "Golang", - "text": "Golang\n\nKelp - Kelp is an open-source Golang algorithmic cryptocurrency trading bot that runs on centralized exchanges and Stellar DEX (command-line usage and desktop GUI).\nmarketstore - DataFrame Server for Financial Timeseries Data.\nIndicatorGo - IndicatorGo is a Golang module providing various stock technical analysis indicators, strategies, and a backtest framework for trading." - }, - { - "objectID": "index.html#cpp", - "href": "index.html#cpp", - "title": "Awesome Quant", - "section": "CPP", - "text": "CPP\n\nQuantLib - The QuantLib project is aimed at providing a comprehensive software framework for quantitative finance.\nQuantLibRisks - Fast risks with QuantLib in C++\nXAD - Automatic Differentation (AAD) Library\nTradeFrame - C++ 17 based framework/library (with sample applications) for testing options based automated trading ideas using DTN IQ real time data feed and Interactive Brokers (TWS API) for trade execution. Comes with built-in Option Greeks/IV calculation library.\nHikyuu - A base on Python/C++ open source high-performance quant framework for faster analysis and backtesting, contains the complete trading system components for reuse and combination. You can use python or c++ freely.\nOrderMatchingEngine - A production-grade, lock-free, high-frequency trading matching engine achieving 150M+ orders/sec.\nPandoraTrader - A C++ CTP trading framework, with very clear logic\nNexusFix - C++23 FIX protocol engine with zero-copy parsing and SIMD acceleration, 3x faster than QuickFIX." - }, - { - "objectID": "index.html#frameworks-1", - "href": "index.html#frameworks-1", - "title": "Awesome Quant", - "section": "Frameworks", - "text": "Frameworks\n\nQuantLib - The QuantLib project is aimed at providing a comprehensive software framework for quantitative finance.\n\nQuantLibRisks - Fast risks with QuantLib in Python and C++\nXAD - Automatic Differentiation (AAD) Library in Python and C++\nJQuantLib - Java port.\nRQuantLib - R port.\nQuantLibAddin - Excel support.\nQuantLibXL - Excel support.\nQLNet - .Net port.\nPyQL - Python port.\nQuantLib.jl - Julia port.\nQuantLib-Python Documentation - Documentation for the Python bindings for the QuantLib library\n\nTA-Lib - perform technical analysis of financial market data. GitHub\n\nta-lib-python\nta-lib\n\nXAD: Automatic Differentation (AAD) Library for Python and C++" - }, - { - "objectID": "index.html#csharp", - "href": "index.html#csharp", - "title": "Awesome Quant", - "section": "CSharp", - "text": "CSharp\n\nQuantConnect - Lean Engine is an open-source fully managed C# algorithmic trading engine built for desktop and cloud usage.\nStockSharp - Algorithmic trading and quantitative trading open source platform to develop trading robots (stock markets, forex, crypto, bitcoins, and options).\nTDAmeritrade.DotNetCore - Free, open-source .NET Client for the TD Ameritrade Trading Platform. Helps developers integrate TD Ameritrade API into custom trading solutions." - }, - { - "objectID": "index.html#rust", - "href": "index.html#rust", - "title": "Awesome Quant", - "section": "Rust", - "text": "Rust\n\nQuantMath - Financial maths library for risk-neutral pricing and risk\nBarter - Open-source Rust framework for building event-driven live-trading & backtesting systems\nLFEST - Simulated perpetual futures exchange to trade your strategy against.\nTradeAggregation - Aggregate trades into user-defined candles using information driven rules.\nOpenFinClaw - AI-native one-person hedge fund platform with Rust trading engine. Natural language → strategy → backtest → execution in 60s. Multi-market (US/HK/CN/Crypto), self-evolving strategy pipeline. Built on OpenClaw (68K+ stars).\nSlidingFeatures - Chainable tree-like sliding windows for signal processing and technical analysis.\nRustQuant - Quantitative finance library written in Rust.\nfin-primitives - Financial market primitives in Rust: Price/Quantity/Symbol newtypes, BTreeMap order book, OHLCV aggregation, SMA/EMA/RSI indicators, position ledger with PnL, and composable risk monitor.\nfin-stream - Real-time market data streaming in Rust: lock-free SPSC ring buffer, 100K+ ticks/second ingestion, multi-timeframe OHLCV construction, and Lorentz transforms on financial time series.\nSpecial-Relativity-in-Financial-Modeling - C++20 implementation of special-relativistic geometry applied to OHLCV data: Lorentz factors, spacetime intervals, Christoffel symbols, and geodesic deviation signals from live market data. DOI: 10.5281/zenodo.18639919\nfinalytics - A rust library for financial data analysis.\nRunMat - Rust runtime for MATLAB-syntax array math with automatic CPU/GPU execution and fused kernels for quant simulations." - }, - { - "objectID": "index.html#reproducing-works-training-books", - "href": "index.html#reproducing-works-training-books", - "title": "Awesome Quant", - "section": "Reproducing Works, Training & Books", - "text": "Reproducing Works, Training & Books\n\nAuto-Differentiation Website - Background and resources on Automatic Differentiation (AD) / Adjoint Algorithmic Differentitation (AAD).\nDerman Papers - Notebooks that replicate original quantitative finance papers from Emanuel Derman.\nvolatility-trading - A complete set of volatility estimators based on Euan Sinclair’s Volatility Trading.\nquant - Quantitative Finance and Algorithmic Trading exhaust; mostly ipython notebooks based on Quantopian, Zipline, or Pandas.\nfecon235 - Open source project for software tools in financial economics. Many jupyter notebook to verify theoretical ideas and practical methods interactively.\nQuantitative-Notebooks - Educational notebooks on quantitative finance, algorithmic trading, financial modelling and investment strategy\nQuantEcon - Lecture series on economics, finance, econometrics and data science; QuantEcon.py, QuantEcon.jl, notebooks\nFinanceHub - Resources for Quantitative Finance\nPython_Option_Pricing - An library to price financial options written in Python. Includes: Black Scholes, Black 76, Implied Volatility, American, European, Asian, Spread Options.\npython-training - J.P. Morgan’s Python training for business analysts and traders.\nStock_Analysis_For_Quant - Different Types of Stock Analysis in Excel, Matlab, Power BI, Python, R, and Tableau.\nalgorithmic-trading-with-python - Source code for Algorithmic Trading with Python (2020) by Chris Conlan.\nMEDIUM_NoteBook - Repository containing notebooks of cerlymarco’s posts on Medium.\nQuantFinance - Training materials in quantitative finance.\nIPythonScripts - Tutorials about Quantitative Finance in Python and QuantLib: Pricing, xVAs, Hedging, Portfolio Optimisation, Machine Learning and Deep Learning.\nComputational-Finance-Course - Materials for the course of Computational Finance.\nMachine-Learning-for-Asset-Managers - Implementation of code snippets, exercises and application to live data from Machine Learning for Asset Managers (Elements in Quantitative Finance) written by Prof. Marcos López de Prado.\nPython-for-Finance-Cookbook - Python for Finance Cookbook, published by Packt.\nmodelos_vol_derivativos - “Modelos de Volatilidade para Derivativos” book’s Jupyter notebooks\nNMOF - Functions, examples and data from the first and the second edition of “Numerical Methods and Optimization in Finance” by M. Gilli, D. Maringer and E. Schumann (2019, ISBN:978-0128150658).\npy4fi2nd - Jupyter Notebooks and code for Python for Finance (2nd ed., O’Reilly) by Yves Hilpisch.\naiif - Jupyter Notebooks and code for the book Artificial Intelligence in Finance (O’Reilly) by Yves Hilpisch.\npy4at - Jupyter Notebooks and code for the book Python for Algorithmic Trading (O’Reilly) by Yves Hilpisch.\ndawp - Jupyter Notebooks and code for Derivatives Analytics with Python (Wiley Finance) by Yves Hilpisch.\ndx - DX Analytics | Financial and Derivatives Analytics with Python.\nQuantFinanceBook - Quantitative Finance book.\nrough_bergomi - A Python implementation of the rough Bergomi model.\nfrh-fx - A python implementation of the fast-reversion Heston model of Mechkov for FX purposes.\nValue Investing Studies - A collection of data analysis studies that examine the performance and characteristics of value investing over long periods of time.\nMachine Learning Asset Management - Machine Learning in Asset Management (by @firmai).\nDeep Learning Machine Learning Stock - Deep Learning and Machine Learning stocks represent a promising long-term or short-term opportunity for investors and traders.\nTechnical Analysis and Feature Engineering - Feature Engineering and Feature Importance of Machine Learning in Financial Market.\nDifferential Machine Learning and Axes that matter by Brian Huge and Antoine Savine - Implement, demonstrate, reproduce and extend the results of the Risk articles ‘Differential Machine Learning’ (2020) and ‘PCA with a Difference’ (2021) by Huge and Savine, and cover implementation details left out from the papers.\nsystematictradingexamples - Examples of code related to book Systematic Trading and blog\npysystemtrade_examples - Examples using pysystemtrade for Robert Carver’s blog.\nML_Finance_Codes - Machine Learning in Finance: From Theory to Practice Book\nHands-On Machine Learning for Algorithmic Trading - Hands-On Machine Learning for Algorithmic Trading, published by Packt\nfinancialnoob-misc - Codes from @financialnoob’s posts\nMesoSim Options Trading Strategy Library - Free and public Options Trading strategy library for MesoSim.\nQuant-Finance-With-Python-Code - Repo for code examples in Quantitative Finance with Python by Chris Kelliher\nQuantFinanceTraining - This repository contains codes that were executed during my training in the CQF (Certificate in Quantitative Finance). The codes are organized by class, facilitating navigation and reference.\nStatistical-Learning-based-Portfolio-Optimization - This R Shiny App utilizes the Hierarchical Equal Risk Contribution (HERC) approach, a modern portfolio optimization method developed by Raffinot (2018).\nbook_irds3 - Code repository for Pricing and Trading Interest Rate Derivatives.\nAutoencoder-Asset-Pricing-Models - Reimplementation of Autoencoder Asset Pricing Models (GKX, 2019).\nFinance - 150+ quantitative finance Python programs to help you gather, manipulate, and analyze stock market data.\n101_formulaic_alphas - Implementation of 101 formulaic alphas using qstrader.\nTidy Finance - An opinionated approach to empirical research in financial economics - a fully transparent, open-source code base in multiple programming languages (Python and R) to enable the reproducible implementation of financial research projects for students and practitioners.\nRoughVolatilityWorkshop - 2024 QuantMind’s Rough Volatility Workshop lectures.\nAFML - All the answers for exercises from Advances in Financial Machine Learning by Dr Marco Lopez de Parodo.\nAlgoTradingLib - A catalog of algorithmic trading libraries, frameworks, strategies, and educational materials.\nPortfolio Optimization Book - Prof. Daniel Palomar’s Portfolio Optimization Book. GitHub" - }, - { - "objectID": "index.html#commercial-proprietary-services", - "href": "index.html#commercial-proprietary-services", - "title": "Awesome Quant", - "section": "Commercial & Proprietary Services", - "text": "Commercial & Proprietary Services\n\nChartscout - Real-time cryptocurrency chart pattern detection with automated alerts across multiple exchanges.\nDayTradingBench - Live autonomous benchmark that evaluates LLM trading performance on DAX and Nasdaq indices using identical strategies and real-time market data. API access available.\nCoinTester - No-code crypto backtesting platform with 100+ indicators, AI sentiment signals, and 5+ years of historical data across 1,000+ trading pairs.\ngoMacro.ai - AI-powered economic calendar with institutional-grade insights, bull/bear/base case scenario planning for NFP, CPI, PPI and other macro data releases.\nStockAInsights - AI-extracted financial statements API covering SEC filings including foreign filers (20-F, 6-K, 40-F), normalized quarterly and annual data from 2014+.\nbrapi.dev - Brazilian stock market data API for B3/Bovespa quotes, historical OHLCV, dividends, and fundamentals.\n13F Insight - Track institutional investor 13F holdings with AI-powered analysis, position change alerts, and filing summaries.\nEarnings Feed - Real-time SEC filings, insider trades, and institutional holdings API.\nFinancial Data - Stock Market and Financial Data API.\nFrostbyte - Real-time crypto prices for 500+ tokens via REST API with free tier, DeFi swap routing and portfolio tracking.\nSaxoOpenAPI - Saxo Bank financial data API.\nRTPR - Real-time press release API delivering news from Business Wire, PR Newswire, and GlobeNewswire with sub-500ms latency. REST and WebSocket APIs for financial applications. Python and Node.js SDKs available.\nNasdaq Data Link - Financial data API with support for R, Python, Excel, Ruby, and many other languages (formerly Quandl).\nParsec - Prediction market API with Python SDK for normalized data and execution across 5 prediction market exchanges. Free tier: 10K requests/month.\nPortfolio Optimizer - Portfolio Optimizer is a Web API for portfolio analysis and optimization.\nReddit WallstreetBets API - Provides daily top 50 stocks from reddit (subreddit) Wallstreetbets and their sentiments via the API.\nSystem R - AI-native risk intelligence API for trading agents. Position sizing, risk validation, and system health in one call.\nTelonex - Tick-level prediction market data (trades, quotes, orderbooks, on-chain fills) via REST API and Python SDK.\nValueRay - Technical, quantitative and sentiment data for stocks and ETFs with risk metrics, peer percentiles and market regime signals. Optimized for AI/LLM agents.\nVertData - Institutional-grade financial intelligence platform. Track 43K+ congressional trades (STOCK Act), SEC insider Form 4 filings, 25 superinvestor 13F portfolios, CFTC futures positioning, ARK ETF holdings, and short interest — all scored by AI for signal strength.\nKeepRule - Curated library of decision-making principles and investment wisdom from masters like Buffett and Munger, featuring mental models for better investment thinking.\nML-Quant - Top Quant resources like ArXiv (sanity), SSRN, RePec, Journals, Podcasts, Videos, and Blogs." - }, - { - "objectID": "index.html#related-lists", - "href": "index.html#related-lists", - "title": "Awesome Quant", - "section": "Related Lists", - "text": "Related Lists\n\nawesome-sec-filings - A curated list of tools, data sources, libraries, and resources for working with SEC filings (13F, 10-K, 10-Q, 8-K).\nCONVEXFI - Official GitHub organization for the convex research group at the Hong Kong University of Science and Technology (HKUST)." - } -] \ No newline at end of file diff --git a/site_libs/bootstrap/bootstrap-dea667461a5c81afc9ba75ce94cd63f3.min.css b/site_libs/bootstrap/bootstrap-dea667461a5c81afc9ba75ce94cd63f3.min.css deleted file mode 100644 index a1b42ef..0000000 --- a/site_libs/bootstrap/bootstrap-dea667461a5c81afc9ba75ce94cd63f3.min.css +++ /dev/null @@ -1,12 +0,0 @@ -/*! - * Bootstrap v5.3.1 (https://getbootstrap.com/) - * Copyright 2011-2023 The Bootstrap Authors - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */@import"https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;700&display=swap";:root,[data-bs-theme=light]{--bs-blue: #2780e3;--bs-indigo: #6610f2;--bs-purple: #613d7c;--bs-pink: #e83e8c;--bs-red: #ff0039;--bs-orange: #f0ad4e;--bs-yellow: #ff7518;--bs-green: #3fb618;--bs-teal: #20c997;--bs-cyan: #9954bb;--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: #343a40;--bs-primary: #2780e3;--bs-secondary: #343a40;--bs-success: #3fb618;--bs-info: #9954bb;--bs-warning: #ff7518;--bs-danger: #ff0039;--bs-light: #f8f9fa;--bs-dark: #343a40;--bs-default-rgb: 52, 58, 64;--bs-primary-rgb: 39, 128, 227;--bs-secondary-rgb: 52, 58, 64;--bs-success-rgb: 63, 182, 24;--bs-info-rgb: 153, 84, 187;--bs-warning-rgb: 255, 117, 24;--bs-danger-rgb: 255, 0, 57;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 52, 58, 64;--bs-primary-text-emphasis: rgb(15.6, 51.2, 90.8);--bs-secondary-text-emphasis: rgb(20.8, 23.2, 25.6);--bs-success-text-emphasis: rgb(25.2, 72.8, 9.6);--bs-info-text-emphasis: rgb(61.2, 33.6, 74.8);--bs-warning-text-emphasis: rgb(102, 46.8, 9.6);--bs-danger-text-emphasis: rgb(102, 0, 22.8);--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: rgb(211.8, 229.6, 249.4);--bs-secondary-bg-subtle: rgb(214.4, 215.6, 216.8);--bs-success-bg-subtle: rgb(216.6, 240.4, 208.8);--bs-info-bg-subtle: rgb(234.6, 220.8, 241.4);--bs-warning-bg-subtle: rgb(255, 227.4, 208.8);--bs-danger-bg-subtle: rgb(255, 204, 215.4);--bs-light-bg-subtle: rgb(251.5, 252, 252.5);--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: rgb(168.6, 204.2, 243.8);--bs-secondary-border-subtle: rgb(173.8, 176.2, 178.6);--bs-success-border-subtle: rgb(178.2, 225.8, 162.6);--bs-info-border-subtle: rgb(214.2, 186.6, 227.8);--bs-warning-border-subtle: rgb(255, 199.8, 162.6);--bs-danger-border-subtle: rgb(255, 153, 175.8);--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: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--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-root-font-size: 17px;--bs-body-font-family: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #343a40;--bs-body-color-rgb: 52, 58, 64;--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(52, 58, 64, 0.75);--bs-secondary-color-rgb: 52, 58, 64;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(52, 58, 64, 0.5);--bs-tertiary-color-rgb: 52, 58, 64;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #2761e3;--bs-link-color-rgb: 39, 97, 227;--bs-link-decoration: underline;--bs-link-hover-color: rgb(31.2, 77.6, 181.6);--bs-link-hover-color-rgb: 31, 78, 182;--bs-code-color: #7d12ba;--bs-highlight-bg: rgb(255, 227.4, 208.8);--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.25rem;--bs-border-radius-sm: 0.2em;--bs-border-radius-lg: 0.5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(39, 128, 227, 0.25);--bs-form-valid-color: #3fb618;--bs-form-valid-border-color: #3fb618;--bs-form-invalid-color: #ff0039;--bs-form-invalid-border-color: #ff0039}[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: rgb(42.5, 47.5, 52.5);--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: rgb(125.4, 178.8, 238.2);--bs-secondary-text-emphasis: rgb(133.2, 136.8, 140.4);--bs-success-text-emphasis: rgb(139.8, 211.2, 116.4);--bs-info-text-emphasis: rgb(193.8, 152.4, 214.2);--bs-warning-text-emphasis: rgb(255, 172.2, 116.4);--bs-danger-text-emphasis: rgb(255, 102, 136.2);--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: rgb(7.8, 25.6, 45.4);--bs-secondary-bg-subtle: rgb(10.4, 11.6, 12.8);--bs-success-bg-subtle: rgb(12.6, 36.4, 4.8);--bs-info-bg-subtle: rgb(30.6, 16.8, 37.4);--bs-warning-bg-subtle: rgb(51, 23.4, 4.8);--bs-danger-bg-subtle: rgb(51, 0, 11.4);--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: rgb(23.4, 76.8, 136.2);--bs-secondary-border-subtle: rgb(31.2, 34.8, 38.4);--bs-success-border-subtle: rgb(37.8, 109.2, 14.4);--bs-info-border-subtle: rgb(91.8, 50.4, 112.2);--bs-warning-border-subtle: rgb(153, 70.2, 14.4);--bs-danger-border-subtle: rgb(153, 0, 34.2);--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: rgb(125.4, 178.8, 238.2);--bs-link-hover-color: rgb(151.32, 194.04, 241.56);--bs-link-color-rgb: 125, 179, 238;--bs-link-hover-color-rgb: 151, 194, 242;--bs-code-color: white;--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: rgb(139.8, 211.2, 116.4);--bs-form-valid-border-color: rgb(139.8, 211.2, 116.4);--bs-form-invalid-color: rgb(255, 102, 136.2);--bs-form-invalid-border-color: rgb(255, 102, 136.2)}*,*::before,*::after{box-sizing:border-box}:root{font-size:var(--bs-root-font-size)}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h1,.h1{font-size:2rem}}h2,.h2{font-size:calc(1.29rem + 0.48vw)}@media(min-width: 1200px){h2,.h2{font-size:1.65rem}}h3,.h3{font-size:calc(1.27rem + 0.24vw)}@media(min-width: 1200px){h3,.h3{font-size:1.45rem}}h4,.h4{font-size:1.25rem}h5,.h5{font-size:1.1rem}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:0.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color: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:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em;color:#000;background-color:#f8f9fa;line-height:1.5;padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6)}pre code{background-color:rgba(0,0,0,0);font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);background-color:#f8f9fa;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.4rem .4rem;font-size:0.875em;color:#fff;background-color:#343a40}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:rgba(52,58,64,.75);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 + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-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:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:rgba(52,58,64,.75)}.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}.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}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: #343a40;--bs-table-bg: #fff;--bs-table-border-color: #dee2e6;--bs-table-accent-bg: transparent;--bs-table-striped-color: #343a40;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #343a40;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #343a40;--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:1px;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(1px*2) solid rgb(153.5,156.5,159.5)}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-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: rgb(211.8, 229.6, 249.4);--bs-table-border-color: rgb(190.62, 206.64, 224.46);--bs-table-striped-bg: rgb(201.21, 218.12, 236.93);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(190.62, 206.64, 224.46);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(195.915, 212.38, 230.695);--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: rgb(214.4, 215.6, 216.8);--bs-table-border-color: rgb(192.96, 194.04, 195.12);--bs-table-striped-bg: rgb(203.68, 204.82, 205.96);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(192.96, 194.04, 195.12);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(198.32, 199.43, 200.54);--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: rgb(216.6, 240.4, 208.8);--bs-table-border-color: rgb(194.94, 216.36, 187.92);--bs-table-striped-bg: rgb(205.77, 228.38, 198.36);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(194.94, 216.36, 187.92);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(200.355, 222.37, 193.14);--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: rgb(234.6, 220.8, 241.4);--bs-table-border-color: rgb(211.14, 198.72, 217.26);--bs-table-striped-bg: rgb(222.87, 209.76, 229.33);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(211.14, 198.72, 217.26);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(217.005, 204.24, 223.295);--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: rgb(255, 227.4, 208.8);--bs-table-border-color: rgb(229.5, 204.66, 187.92);--bs-table-striped-bg: rgb(242.25, 216.03, 198.36);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(229.5, 204.66, 187.92);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(235.875, 210.345, 193.14);--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: rgb(255, 204, 215.4);--bs-table-border-color: rgb(229.5, 183.6, 193.86);--bs-table-striped-bg: rgb(242.25, 193.8, 204.63);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(229.5, 183.6, 193.86);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(235.875, 188.7, 199.245);--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: rgb(223.2, 224.1, 225);--bs-table-striped-bg: rgb(235.6, 236.55, 237.5);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(223.2, 224.1, 225);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(229.4, 230.325, 231.25);--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: #343a40;--bs-table-border-color: rgb(72.3, 77.7, 83.1);--bs-table-striped-bg: rgb(62.15, 67.85, 73.55);--bs-table-striped-color: #fff;--bs-table-active-bg: rgb(72.3, 77.7, 83.1);--bs-table-active-color: #fff;--bs-table-hover-bg: rgb(67.225, 72.775, 78.325);--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(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:rgba(52,58,64,.75)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-clip:padding-box;border:1px solid #dee2e6;border-radius:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#343a40;background-color:#fff;border-color:rgb(147,191.5,241);outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.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:rgba(52,58,64,.75);opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:#343a40;background-color:#f8f9fa;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#e9ecef}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#343a40;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2));padding:.25rem .5rem;font-size:0.875rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2));padding:.5rem 1rem;font-size:1.25rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(1px * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(1px * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important}.form-control-color::-webkit-color-swatch{border:0 !important}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(1px * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(1px * 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:#343a40;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;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:1px solid #dee2e6;border-radius:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:rgb(147,191.5,241);outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #343a40}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}[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: #fff;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:1px solid #dee2e6;print-color-adjust:exact}.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:rgb(147,191.5,241);outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.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:#2780e3;border-color:#2780e3}.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:#2780e3;border-color:#2780e3;--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;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgb%28147, 191.5, 241%29'/%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:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(39,128,227,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(39,128,227,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2780e3;border:0;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:rgb(190.2,216.9,246.6)}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0)}.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:#2780e3;border:0;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:rgb(190.2,216.9,246.6)}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0)}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:rgba(52,58,64,.75)}.form-range:disabled::-moz-range-thumb{background-color:rgba(52,58,64,.75)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(1px * 2));min-height:calc(3.5rem + calc(1px * 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:1px solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.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), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:#fff}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:1px 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:#e9ecef}.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:#343a40;text-align:center;white-space:nowrap;background-color:#f8f9fa;border:1px solid #dee2e6}.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}.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:0.875rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(1px*-1)}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#3fb618}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#3fb618}.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:#3fb618;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233fb618' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#3fb618;box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#3fb618}.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='%233fb618' 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(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#3fb618;box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#3fb618}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#3fb618}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#3fb618}.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:0.875em;color:#ff0039}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#ff0039}.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:#ff0039;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff0039'%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='%23ff0039' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#ff0039;box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#ff0039}.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='%23ff0039'%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='%23ff0039' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#ff0039;box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#ff0039}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#ff0039}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#ff0039}.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: 0.75rem;--bs-btn-padding-y: 0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: #343a40;--bs-btn-bg: transparent;--bs-btn-border-width: 1px;--bs-btn-border-color: transparent;--bs-btn-border-radius: 0.25rem;--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity: 0.65;--bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;-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);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,: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: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(44.2, 49.3, 54.4);--bs-btn-hover-border-color: rgb(41.6, 46.4, 51.2);--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(41.6, 46.4, 51.2);--bs-btn-active-border-color: rgb(39, 43.5, 48);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #2780e3;--bs-btn-border-color: #2780e3;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(33.15, 108.8, 192.95);--bs-btn-hover-border-color: rgb(31.2, 102.4, 181.6);--bs-btn-focus-shadow-rgb: 71, 147, 231;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(31.2, 102.4, 181.6);--bs-btn-active-border-color: rgb(29.25, 96, 170.25);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #2780e3;--bs-btn-disabled-border-color: #2780e3}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(44.2, 49.3, 54.4);--bs-btn-hover-border-color: rgb(41.6, 46.4, 51.2);--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(41.6, 46.4, 51.2);--bs-btn-active-border-color: rgb(39, 43.5, 48);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #3fb618;--bs-btn-border-color: #3fb618;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(53.55, 154.7, 20.4);--bs-btn-hover-border-color: rgb(50.4, 145.6, 19.2);--bs-btn-focus-shadow-rgb: 92, 193, 59;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(50.4, 145.6, 19.2);--bs-btn-active-border-color: rgb(47.25, 136.5, 18);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #3fb618;--bs-btn-disabled-border-color: #3fb618}.btn-info{--bs-btn-color: #fff;--bs-btn-bg: #9954bb;--bs-btn-border-color: #9954bb;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(130.05, 71.4, 158.95);--bs-btn-hover-border-color: rgb(122.4, 67.2, 149.6);--bs-btn-focus-shadow-rgb: 168, 110, 197;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(122.4, 67.2, 149.6);--bs-btn-active-border-color: rgb(114.75, 63, 140.25);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #9954bb;--bs-btn-disabled-border-color: #9954bb}.btn-warning{--bs-btn-color: #fff;--bs-btn-bg: #ff7518;--bs-btn-border-color: #ff7518;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(216.75, 99.45, 20.4);--bs-btn-hover-border-color: rgb(204, 93.6, 19.2);--bs-btn-focus-shadow-rgb: 255, 138, 59;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(204, 93.6, 19.2);--bs-btn-active-border-color: rgb(191.25, 87.75, 18);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #ff7518;--bs-btn-disabled-border-color: #ff7518}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #ff0039;--bs-btn-border-color: #ff0039;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(216.75, 0, 48.45);--bs-btn-hover-border-color: rgb(204, 0, 45.6);--bs-btn-focus-shadow-rgb: 255, 38, 87;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(204, 0, 45.6);--bs-btn-active-border-color: rgb(191.25, 0, 42.75);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #ff0039;--bs-btn-disabled-border-color: #ff0039}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: rgb(210.8, 211.65, 212.5);--bs-btn-hover-border-color: rgb(198.4, 199.2, 200);--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: rgb(198.4, 199.2, 200);--bs-btn-active-border-color: rgb(186, 186.75, 187.5);--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: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(82.45, 87.55, 92.65);--bs-btn-hover-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(92.6, 97.4, 102.2);--bs-btn-active-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-outline-default{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #2780e3;--bs-btn-border-color: #2780e3;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2780e3;--bs-btn-hover-border-color: #2780e3;--bs-btn-focus-shadow-rgb: 39, 128, 227;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2780e3;--bs-btn-active-border-color: #2780e3;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #2780e3;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #2780e3;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #3fb618;--bs-btn-border-color: #3fb618;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #3fb618;--bs-btn-hover-border-color: #3fb618;--bs-btn-focus-shadow-rgb: 63, 182, 24;--bs-btn-active-color: #fff;--bs-btn-active-bg: #3fb618;--bs-btn-active-border-color: #3fb618;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #3fb618;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #3fb618;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #9954bb;--bs-btn-border-color: #9954bb;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #9954bb;--bs-btn-hover-border-color: #9954bb;--bs-btn-focus-shadow-rgb: 153, 84, 187;--bs-btn-active-color: #fff;--bs-btn-active-bg: #9954bb;--bs-btn-active-border-color: #9954bb;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #9954bb;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #9954bb;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ff7518;--bs-btn-border-color: #ff7518;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #ff7518;--bs-btn-hover-border-color: #ff7518;--bs-btn-focus-shadow-rgb: 255, 117, 24;--bs-btn-active-color: #fff;--bs-btn-active-bg: #ff7518;--bs-btn-active-border-color: #ff7518;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ff7518;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ff7518;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #ff0039;--bs-btn-border-color: #ff0039;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #ff0039;--bs-btn-hover-border-color: #ff0039;--bs-btn-focus-shadow-rgb: 255, 0, 57;--bs-btn-active-color: #fff;--bs-btn-active-bg: #ff0039;--bs-btn-active-border-color: #ff0039;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ff0039;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ff0039;--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: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: #2761e3;--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: rgb(31.2, 77.6, 181.6);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: rgb(31.2, 77.6, 181.6);--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: 71, 121, 231;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: 0.5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: 0.5rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: 0.25rem;--bs-btn-padding-x: 0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius: 0.2em}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .2s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.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 rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: 0.5rem;--bs-dropdown-spacer: 0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: #343a40;--bs-dropdown-bg: #fff;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-border-radius: 0.25rem;--bs-dropdown-border-width: 1px;--bs-dropdown-inner-border-radius: calc(0.25rem - 1px);--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-divider-margin-y: 0.5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-dropdown-link-color: #343a40;--bs-dropdown-link-hover-color: #343a40;--bs-dropdown-link-hover-bg: #f8f9fa;--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2780e3;--bs-dropdown-link-disabled-color: rgba(52, 58, 64, 0.5);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: 0.25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color)}.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 rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.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 rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);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 rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.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:rgba(0,0,0,0);border:0}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2780e3;--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>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(1px*-1)}.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(1px*-1)}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: #2761e3;--bs-nav-link-hover-color: rgb(31.2, 77.6, 181.6);--bs-nav-link-disabled-color: rgba(52, 58, 64, 0.75);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 .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.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: 1px;--bs-nav-tabs-border-color: #dee2e6;--bs-nav-tabs-border-radius: 0.25rem;--bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--bs-nav-tabs-link-active-color: #000;--bs-nav-tabs-link-active-bg: #fff;--bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid rgba(0,0,0,0)}.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))}.nav-pills{--bs-nav-pills-border-radius: 0.25rem;--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #2780e3}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: 0.125rem;--bs-nav-underline-link-active-color: #000;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 rgba(0,0,0,0)}.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{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 0.5rem;--bs-navbar-color: rgb(84.32, 84.66, 85);--bs-navbar-hover-color: rgba(31.2, 77.6, 181.6, 0.8);--bs-navbar-disabled-color: rgba(84.32, 84.66, 85, 0.75);--bs-navbar-active-color: rgb(31.2, 77.6, 181.6);--bs-navbar-brand-padding-y: 0.3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgb(84.32, 84.66, 85);--bs-navbar-brand-hover-color: rgb(31.2, 77.6, 181.6);--bs-navbar-nav-link-padding-x: 0.5rem;--bs-navbar-toggler-padding-y: 0.25;--bs-navbar-toggler-padding-x: 0;--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='rgb%2884.32, 84.66, 85%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(84.32, 84.66, 85, 0);--bs-navbar-toggler-border-radius: 0.25rem;--bs-navbar-toggler-focus-width: 0.25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;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: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;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:rgba(0,0,0,0);border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);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:rgba(0,0,0,0) !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:rgba(0,0,0,0) !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:rgba(0,0,0,0) !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:rgba(0,0,0,0) !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:rgba(0,0,0,0) !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:rgba(0,0,0,0) !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,.navbar[data-bs-theme=dark]{--bs-navbar-color: rgb(84.32, 84.66, 85);--bs-navbar-hover-color: rgba(31.2, 77.6, 181.6, 0.8);--bs-navbar-disabled-color: rgba(84.32, 84.66, 85, 0.75);--bs-navbar-active-color: rgb(31.2, 77.6, 181.6);--bs-navbar-brand-color: rgb(84.32, 84.66, 85);--bs-navbar-brand-hover-color: rgb(31.2, 77.6, 181.6);--bs-navbar-toggler-border-color: rgba(84.32, 84.66, 85, 0);--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='rgb%2884.32, 84.66, 85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgb%2884.32, 84.66, 85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: 0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: 1px;--bs-card-border-color: rgba(0, 0, 0, 0.175);--bs-card-border-radius: 0.25rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(0.25rem - 1px);--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(52, 58, 64, 0.25);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: #fff;--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;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)}.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}.card>.list-group:last-child{border-bottom-width:0}.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(-0.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-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-header-tabs{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-bottom:calc(-1*var(--bs-card-cap-padding-y));margin-left:calc(-0.5*var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-left:calc(-0.5*var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding)}.card-img,.card-img-top,.card-img-bottom{width:100%}.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}}.accordion{--bs-accordion-color: #343a40;--bs-accordion-bg: #fff;--bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;--bs-accordion-border-color: #dee2e6;--bs-accordion-border-width: 1px;--bs-accordion-border-radius: 0.25rem;--bs-accordion-inner-border-radius: calc(0.25rem - 1px);--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: #343a40;--bs-accordion-btn-bg: #fff;--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23343a40'%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='rgb%2815.6, 51.2, 90.8%29'%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: rgb(147, 191.5, 241);--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: rgb(15.6, 51.2, 90.8);--bs-accordion-active-bg: rgb(211.8, 229.6, 249.4)}.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;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:not(:first-of-type){border-top:0}.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}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom: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='rgb%28125.4, 178.8, 238.2%29'%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='rgb%28125.4, 178.8, 238.2%29'%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: rgba(52, 58, 64, 0.75);--bs-breadcrumb-item-padding-x: 0.5rem;--bs-breadcrumb-item-active-color: rgba(52, 58, 64, 0.75);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)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, ">") /* rtl: var(--bs-breadcrumb-divider, ">") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: 0.75rem;--bs-pagination-padding-y: 0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: #2761e3;--bs-pagination-bg: #fff;--bs-pagination-border-width: 1px;--bs-pagination-border-color: #dee2e6;--bs-pagination-border-radius: 0.25rem;--bs-pagination-hover-color: rgb(31.2, 77.6, 181.6);--bs-pagination-hover-bg: #f8f9fa;--bs-pagination-hover-border-color: #dee2e6;--bs-pagination-focus-color: rgb(31.2, 77.6, 181.6);--bs-pagination-focus-bg: #e9ecef;--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #2780e3;--bs-pagination-active-border-color: #2780e3;--bs-pagination-disabled-color: rgba(52, 58, 64, 0.75);--bs-pagination-disabled-bg: #e9ecef;--bs-pagination-disabled-border-color: #dee2e6;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 .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.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(1px*-1)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: 0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: 0.5rem}.pagination-sm{--bs-pagination-padding-x: 0.5rem;--bs-pagination-padding-y: 0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius: 0.2em}.badge{--bs-badge-padding-x: 0.65em;--bs-badge-padding-y: 0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: 0.25rem;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}.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: 0 solid var(--bs-alert-border-color);--bs-alert-border-radius: 0.25rem;--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)}.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:.5rem}}.progress,.progress-stacked{--bs-progress-height: 0.5rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: #e9ecef;--bs-progress-border-radius: 0.25rem;--bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #2780e3;--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)}.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: #343a40;--bs-list-group-bg: #fff;--bs-list-group-border-color: #dee2e6;--bs-list-group-border-width: 1px;--bs-list-group-border-radius: 0.25rem;--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: 0.5rem;--bs-list-group-action-color: rgba(52, 58, 64, 0.75);--bs-list-group-action-hover-color: #000;--bs-list-group-action-hover-bg: #f8f9fa;--bs-list-group-action-active-color: #343a40;--bs-list-group-action-active-bg: #e9ecef;--bs-list-group-disabled-color: rgba(52, 58, 64, 0.75);--bs-list-group-disabled-bg: #fff;--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #2780e3;--bs-list-group-active-border-color: #2780e3;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0}.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.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.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.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.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.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.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.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>.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: 0.5;--bs-btn-close-hover-opacity: 0.75;--bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: 0.25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:rgba(0,0,0,0) var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;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: 0.75rem;--bs-toast-padding-y: 0.5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(255, 255, 255, 0.85);--bs-toast-border-width: 1px;--bs-toast-border-color: rgba(0, 0, 0, 0.175);--bs-toast-border-radius: 0.25rem;--bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-toast-header-color: rgba(52, 58, 64, 0.75);--bs-toast-header-bg: rgba(255, 255, 255, 0.85);--bs-toast-header-border-color: rgba(0, 0, 0, 0.175);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)}.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)}.toast-header .btn-close{margin-right:calc(-0.5*var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: 0.5rem;--bs-modal-color: ;--bs-modal-bg: #fff;--bs-modal-border-color: rgba(0, 0, 0, 0.175);--bs-modal-border-width: 1px;--bs-modal-border-radius: 0.5rem;--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-modal-inner-border-radius: calc(0.5rem - 1px);--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: #dee2e6;--bs-modal-header-border-width: 1px;--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: 0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: #dee2e6;--bs-modal-footer-border-width: 1px;position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .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);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: 0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;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)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5);margin:calc(-0.5*var(--bs-modal-header-padding-y)) calc(-0.5*var(--bs-modal-header-padding-x)) calc(-0.5*var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;-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)}.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}.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}.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}.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}.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}.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}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: 0.5rem;--bs-tooltip-padding-y: 0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color: #fff;--bs-tooltip-bg: #000;--bs-tooltip-border-radius: 0.25rem;--bs-tooltip-opacity: 0.9;--bs-tooltip-arrow-width: 0.8rem;--bs-tooltip-arrow-height: 0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";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:rgba(0,0,0,0);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)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:0.875rem;--bs-popover-bg: #fff;--bs-popover-border-width: 1px;--bs-popover-border-color: rgba(0, 0, 0, 0.175);--bs-popover-border-radius: 0.5rem;--bs-popover-inner-border-radius: calc(0.5rem - 1px);--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: 0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: #e9ecef;--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: #343a40;--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: 0.5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";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)}.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:rgba(0,0,0,0);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(-0.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)}.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 .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 rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-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: -0.125em;--bs-spinner-border-width: 0.25em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:rgba(0,0,0,0)}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: 0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: #343a40;--bs-offcanvas-bg: #fff;--bs-offcanvas-border-width: 1px;--bs-offcanvas-border-color: rgba(0, 0, 0, 0.175);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-offcanvas-transition: transform 0.3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media(max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;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:rgba(0,0,0,0) !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:rgba(0,0,0,0) !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:rgba(0,0,0,0) !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:rgba(0,0,0,0) !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:rgba(0,0,0,0) !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:rgba(0,0,0,0) !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:rgba(0,0,0,0) !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:rgba(0,0,0,0) !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:rgba(0,0,0,0) !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:rgba(0,0,0,0) !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(-0.5*var(--bs-offcanvas-padding-y));margin-right:calc(-0.5*var(--bs-offcanvas-padding-x));margin-bottom:calc(-0.5*var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height: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:#fff !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:#fff !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#fff !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(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, 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(31, 102, 182, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(31, 102, 182, 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(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, 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(50, 146, 19, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(50, 146, 19, 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(122, 67, 150, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(122, 67, 150, 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(204, 94, 19, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(204, 94, 19, 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(204, 0, 46, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(204, 0, 46, 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(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, 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:.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: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;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:1px;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 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(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: 0.1}.border-opacity-25{--bs-border-opacity: 0.25}.border-opacity-50{--bs-border-opacity: 0.5}.border-opacity-75{--bs-border-opacity: 0.75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{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.325rem + 0.9vw) !important}.fs-2{font-size:calc(1.29rem + 0.48vw) !important}.fs-3{font-size:calc(1.27rem + 0.24vw) !important}.fs-4{font-size:1.25rem !important}.fs-5{font-size:1.1rem !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,.5) !important}.text-white-50{--bs-text-opacity: 1;color:hsla(0,0%,100%,.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: 0.1}.link-opacity-10-hover:hover{--bs-link-opacity: 0.1}.link-opacity-25{--bs-link-opacity: 0.25}.link-opacity-25-hover:hover{--bs-link-opacity: 0.25}.link-opacity-50{--bs-link-opacity: 0.5}.link-opacity-50-hover:hover{--bs-link-opacity: 0.5}.link-opacity-75{--bs-link-opacity: 0.75}.link-opacity-75-hover:hover{--bs-link-opacity: 0.75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.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: 0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: 0.1}.link-underline-opacity-25{--bs-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: 0.25}.link-underline-opacity-50{--bs-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: 0.5}.link-underline-opacity-75{--bs-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: 0.75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-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: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.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:#fff}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#fff}.bg-warning{color:#fff}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@media(min-width: 1200px){.fs-1{font-size:2rem !important}.fs-2{font-size:1.65rem !important}.fs-3{font-size:1.45rem !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}}.bg-blue{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #2780e3;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: #613d7c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #613d7c;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #e83e8c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #e83e8c;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #ff0039;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #f0ad4e;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #f0ad4e;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ff7518;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #3fb618;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: #9954bb;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #9954bb;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #343a40}.bg-default{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-primary{--bslib-color-fg: #2780e3}.bg-primary{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #343a40}.bg-secondary{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #3fb618}.bg-success{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #9954bb}.bg-info{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff}.text-warning{--bslib-color-fg: #ff7518}.bg-warning{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff}.text-danger{--bslib-color-fg: #ff0039}.bg-danger{--bslib-color-bg: #ff0039;--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: #343a40}.bg-dark{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(64.2, 83.2, 233);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(64.2,83.2,233);color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(62.2, 101.2, 185.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(62.2,101.2,185.8);color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(116.2, 101.6, 192.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(116.2,101.6,192.2);color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 76.8, 159);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(125.4,76.8,159);color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 146, 167.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(119.4,146,167.4);color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 123.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(125.4,123.6,145.8);color:#fff}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(48.6, 149.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(48.6,149.6,145.8);color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(36.2, 157.2, 196.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(36.2,157.2,196.6);color:#fff}.bg-gradient-blue-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(84.6, 110.4, 211);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(84.6,110.4,211);color:#fff}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.8, 60.8, 236);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(76.8,60.8,236);color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(100, 34, 194.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(100,34,194.8);color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154, 34.4, 201.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(154,34.4,201.2);color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 9.6, 168);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(163.2,9.6,168);color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(157.2, 78.8, 176.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(157.2,78.8,176.4);color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 56.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(163.2,56.4,154.8);color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(86.4, 82.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(86.4,82.4,154.8);color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(74, 90, 205.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(74,90,205.6);color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(122.4, 43.2, 220);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(122.4,43.2,220);color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(73.8, 87.8, 165.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(73.8,87.8,165.2);color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 43, 171.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(99,43,171.2);color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(151, 61.4, 130.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(151,61.4,130.4);color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 36.6, 97.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(160.2,36.6,97.2);color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.2, 105.8, 105.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(154.2,105.8,105.6);color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 83.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(160.2,83.4,84);color:#fff}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(83.4, 109.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(83.4,109.4,84);color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(71, 117, 134.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(71,117,134.8);color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 70.2, 149.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(119.4,70.2,149.2);color:#fff}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.8, 88.4, 174.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(154.8,88.4,174.8);color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(180, 43.6, 180.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(180,43.6,180.8);color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178, 61.6, 133.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(178,61.6,133.6);color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 37.2, 106.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(241.2,37.2,106.8);color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(235.2, 106.4, 115.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(235.2,106.4,115.2);color:#fff}.bg-gradient-pink-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 84, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(241.2,84,93.6);color:#fff}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(164.4, 110, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(164.4,110,93.6);color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(152, 117.6, 144.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(152,117.6,144.4);color:#fff}.bg-gradient-pink-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(200.4, 70.8, 158.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(200.4,70.8,158.8);color:#fff}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 51.2, 125);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,51.2,125);color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 6.4, 131);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,6.4,131);color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 24.4, 83.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,24.4,83.8);color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 24.8, 90.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,24.8,90.2);color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(249, 69.2, 65.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,69.2,65.4);color:#fff}.bg-gradient-red-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 46.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(255,46.8,43.8);color:#fff}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 72.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,72.8,43.8);color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 80.4, 94.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,80.4,94.6);color:#fff}.bg-gradient-red-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 33.6, 109);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,33.6,109);color:#fff}.bg-gradient-orange-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(159.6, 155, 137.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(159.6,155,137.6);color:#fff}.bg-gradient-orange-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.8, 110.2, 143.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(184.8,110.2,143.6);color:#fff}.bg-gradient-orange-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(182.8, 128.2, 96.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(182.8,128.2,96.4);color:#fff}.bg-gradient-orange-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(236.8, 128.6, 102.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(236.8,128.6,102.8);color:#fff}.bg-gradient-orange-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(246, 103.8, 69.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(246,103.8,69.6);color:#fff}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: rgb(246, 150.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(246,150.6,56.4);color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(169.2, 176.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(169.2,176.6,56.4);color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(156.8, 184.2, 107.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(156.8,184.2,107.2);color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(205.2, 137.4, 121.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(205.2,137.4,121.6);color:#fff}.bg-gradient-yellow-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 121.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,121.4,105.2);color:#fff}.bg-gradient-yellow-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 76.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,76.6,111.2);color:#fff}.bg-gradient-yellow-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 94.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,94.6,64);color:#fff}.bg-gradient-yellow-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 95, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,95,70.4);color:#fff}.bg-gradient-yellow-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 70.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(255,70.2,37.2);color:#fff}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(249, 139.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,139.4,45.6);color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 143, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,143,24);color:#fff}.bg-gradient-yellow-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 150.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,150.6,74.8);color:#fff}.bg-gradient-yellow-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 103.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,103.8,89.2);color:#fff}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(53.4, 160.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(53.4,160.4,105.2);color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(78.6, 115.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(78.6,115.6,111.2);color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.6, 133.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(76.6,133.6,64);color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 134, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(130.6,134,70.4);color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 109.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(139.8,109.2,37.2);color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(133.8, 178.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(133.8,178.4,45.6);color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 156, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(139.8,156,24);color:#fff}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(50.6, 189.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(50.6,189.6,74.8);color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 142.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(99,142.8,89.2);color:#fff}.bg-gradient-teal-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(34.8, 171.8, 181.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(34.8,171.8,181.4);color:#fff}.bg-gradient-teal-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(60, 127, 187.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(60,127,187.4);color:#fff}.bg-gradient-teal-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(58, 145, 140.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(58,145,140.2);color:#fff}.bg-gradient-teal-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(112, 145.4, 146.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(112,145.4,146.6);color:#fff}.bg-gradient-teal-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 120.6, 113.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(121.2,120.6,113.4);color:#fff}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(115.2, 189.8, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(115.2,189.8,121.8);color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 167.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(121.2,167.4,100.2);color:#fff}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(44.4, 193.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(44.4,193.4,100.2);color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(80.4, 154.2, 165.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(80.4,154.2,165.4);color:#fff}.bg-gradient-cyan-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(107.4, 101.6, 203);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(107.4,101.6,203);color:#fff}.bg-gradient-cyan-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(132.6, 56.8, 209);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(132.6,56.8,209);color:#fff}.bg-gradient-cyan-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 74.8, 161.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(130.6,74.8,161.8);color:#fff}.bg-gradient-cyan-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.6, 75.2, 168.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(184.6,75.2,168.2);color:#fff}.bg-gradient-cyan-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 50.4, 135);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(193.8,50.4,135);color:#fff}.bg-gradient-cyan-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(187.8, 119.6, 143.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(187.8,119.6,143.4);color:#fff}.bg-gradient-cyan-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 97.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(193.8,97.2,121.8);color:#fff}.bg-gradient-cyan-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(117, 123.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(117,123.2,121.8);color:#fff}.bg-gradient-cyan-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(104.6, 130.8, 172.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(104.6,130.8,172.6);color:#fff}: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{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: #2780e3;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #2780e3;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: #613d7c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #613d7c;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #e83e8c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #e83e8c;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #ff0039;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #f0ad4e;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #f0ad4e;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ff7518;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #3fb618;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: #9954bb;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #9954bb;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #343a40}.bg-default{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-primary{--bslib-color-fg: #2780e3}.bg-primary{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #343a40}.bg-secondary{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #3fb618}.bg-success{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #9954bb}.bg-info{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff}.text-warning{--bslib-color-fg: #ff7518}.bg-warning{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff}.text-danger{--bslib-color-fg: #ff0039}.bg-danger{--bslib-color-bg: #ff0039;--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: #343a40}.bg-dark{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(64.2, 83.2, 233);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(64.2,83.2,233);color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(62.2, 101.2, 185.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(62.2,101.2,185.8);color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(116.2, 101.6, 192.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(116.2,101.6,192.2);color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 76.8, 159);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(125.4,76.8,159);color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 146, 167.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(119.4,146,167.4);color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 123.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(125.4,123.6,145.8);color:#fff}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(48.6, 149.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(48.6,149.6,145.8);color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(36.2, 157.2, 196.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(36.2,157.2,196.6);color:#fff}.bg-gradient-blue-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(84.6, 110.4, 211);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(84.6,110.4,211);color:#fff}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.8, 60.8, 236);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(76.8,60.8,236);color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(100, 34, 194.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(100,34,194.8);color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154, 34.4, 201.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(154,34.4,201.2);color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 9.6, 168);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(163.2,9.6,168);color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(157.2, 78.8, 176.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(157.2,78.8,176.4);color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 56.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(163.2,56.4,154.8);color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(86.4, 82.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(86.4,82.4,154.8);color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(74, 90, 205.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(74,90,205.6);color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(122.4, 43.2, 220);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(122.4,43.2,220);color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(73.8, 87.8, 165.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(73.8,87.8,165.2);color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 43, 171.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(99,43,171.2);color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(151, 61.4, 130.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(151,61.4,130.4);color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 36.6, 97.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(160.2,36.6,97.2);color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.2, 105.8, 105.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(154.2,105.8,105.6);color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 83.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(160.2,83.4,84);color:#fff}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(83.4, 109.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(83.4,109.4,84);color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(71, 117, 134.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(71,117,134.8);color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 70.2, 149.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(119.4,70.2,149.2);color:#fff}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.8, 88.4, 174.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(154.8,88.4,174.8);color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(180, 43.6, 180.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(180,43.6,180.8);color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178, 61.6, 133.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(178,61.6,133.6);color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 37.2, 106.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(241.2,37.2,106.8);color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(235.2, 106.4, 115.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(235.2,106.4,115.2);color:#fff}.bg-gradient-pink-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 84, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(241.2,84,93.6);color:#fff}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(164.4, 110, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(164.4,110,93.6);color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(152, 117.6, 144.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(152,117.6,144.4);color:#fff}.bg-gradient-pink-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(200.4, 70.8, 158.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(200.4,70.8,158.8);color:#fff}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 51.2, 125);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,51.2,125);color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 6.4, 131);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,6.4,131);color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 24.4, 83.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,24.4,83.8);color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 24.8, 90.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,24.8,90.2);color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(249, 69.2, 65.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,69.2,65.4);color:#fff}.bg-gradient-red-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 46.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(255,46.8,43.8);color:#fff}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 72.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,72.8,43.8);color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 80.4, 94.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,80.4,94.6);color:#fff}.bg-gradient-red-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 33.6, 109);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,33.6,109);color:#fff}.bg-gradient-orange-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(159.6, 155, 137.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(159.6,155,137.6);color:#fff}.bg-gradient-orange-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.8, 110.2, 143.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(184.8,110.2,143.6);color:#fff}.bg-gradient-orange-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(182.8, 128.2, 96.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(182.8,128.2,96.4);color:#fff}.bg-gradient-orange-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(236.8, 128.6, 102.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(236.8,128.6,102.8);color:#fff}.bg-gradient-orange-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(246, 103.8, 69.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(246,103.8,69.6);color:#fff}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: rgb(246, 150.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(246,150.6,56.4);color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(169.2, 176.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(169.2,176.6,56.4);color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(156.8, 184.2, 107.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(156.8,184.2,107.2);color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(205.2, 137.4, 121.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(205.2,137.4,121.6);color:#fff}.bg-gradient-yellow-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 121.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,121.4,105.2);color:#fff}.bg-gradient-yellow-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 76.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,76.6,111.2);color:#fff}.bg-gradient-yellow-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 94.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,94.6,64);color:#fff}.bg-gradient-yellow-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 95, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,95,70.4);color:#fff}.bg-gradient-yellow-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 70.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(255,70.2,37.2);color:#fff}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(249, 139.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,139.4,45.6);color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 143, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,143,24);color:#fff}.bg-gradient-yellow-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 150.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,150.6,74.8);color:#fff}.bg-gradient-yellow-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 103.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,103.8,89.2);color:#fff}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(53.4, 160.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(53.4,160.4,105.2);color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(78.6, 115.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(78.6,115.6,111.2);color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.6, 133.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(76.6,133.6,64);color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 134, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(130.6,134,70.4);color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 109.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(139.8,109.2,37.2);color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(133.8, 178.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(133.8,178.4,45.6);color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 156, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(139.8,156,24);color:#fff}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(50.6, 189.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(50.6,189.6,74.8);color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 142.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(99,142.8,89.2);color:#fff}.bg-gradient-teal-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(34.8, 171.8, 181.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(34.8,171.8,181.4);color:#fff}.bg-gradient-teal-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(60, 127, 187.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(60,127,187.4);color:#fff}.bg-gradient-teal-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(58, 145, 140.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(58,145,140.2);color:#fff}.bg-gradient-teal-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(112, 145.4, 146.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(112,145.4,146.6);color:#fff}.bg-gradient-teal-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 120.6, 113.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(121.2,120.6,113.4);color:#fff}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(115.2, 189.8, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(115.2,189.8,121.8);color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 167.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(121.2,167.4,100.2);color:#fff}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(44.4, 193.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(44.4,193.4,100.2);color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(80.4, 154.2, 165.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(80.4,154.2,165.4);color:#fff}.bg-gradient-cyan-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(107.4, 101.6, 203);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(107.4,101.6,203);color:#fff}.bg-gradient-cyan-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(132.6, 56.8, 209);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(132.6,56.8,209);color:#fff}.bg-gradient-cyan-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 74.8, 161.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(130.6,74.8,161.8);color:#fff}.bg-gradient-cyan-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.6, 75.2, 168.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(184.6,75.2,168.2);color:#fff}.bg-gradient-cyan-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 50.4, 135);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(193.8,50.4,135);color:#fff}.bg-gradient-cyan-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(187.8, 119.6, 143.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(187.8,119.6,143.4);color:#fff}.bg-gradient-cyan-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 97.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(193.8,97.2,121.8);color:#fff}.bg-gradient-cyan-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(117, 123.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(117,123.2,121.8);color:#fff}.bg-gradient-cyan-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(104.6, 130.8, 172.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(104.6,130.8,172.6);color:#fff}: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{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}.bslib-card{overflow:auto}.bslib-card .card-body+.card-body{padding-top:0}.bslib-card .card-body{overflow:auto}.bslib-card .card-body p{margin-top:0}.bslib-card .card-body p:last-child{margin-bottom:0}.bslib-card .card-body{max-height:var(--bslib-card-body-max-height, none)}.bslib-card[data-full-screen=true]>.card-body{max-height:var(--bslib-card-body-max-height-full-screen, none)}.bslib-card .card-header .form-group{margin-bottom:0}.bslib-card .card-header .selectize-control{margin-bottom:0}.bslib-card .card-header .selectize-control .item{margin-right:1.15rem}.bslib-card .card-footer{margin-top:auto}.bslib-card .bslib-navs-card-title{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.bslib-card .bslib-navs-card-title .nav{margin-left:auto}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border=true]){border:none}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border-radius=true]){border-top-left-radius:0;border-top-right-radius:0}[data-full-screen=true]{position:fixed;inset:3.5rem 1rem 1rem;height:auto !important;max-height:none !important;width:auto !important;z-index:1070}.bslib-full-screen-enter{display:none;position:absolute;bottom:var(--bslib-full-screen-enter-bottom, 0.2rem);right:var(--bslib-full-screen-enter-right, 0);top:var(--bslib-full-screen-enter-top);left:var(--bslib-full-screen-enter-left);color:var(--bslib-color-fg, var(--bs-card-color));background-color:var(--bslib-color-bg, var(--bs-card-bg, var(--bs-body-bg)));border:var(--bs-card-border-width) solid var(--bslib-color-fg, var(--bs-card-border-color));box-shadow:0 2px 4px rgba(0,0,0,.15);margin:.2rem .4rem;padding:.55rem !important;font-size:.8rem;cursor:pointer;opacity:.7;z-index:1070}.bslib-full-screen-enter:hover{opacity:1}.card[data-full-screen=false]:hover>*>.bslib-full-screen-enter{display:block}.bslib-has-full-screen .card:hover>*>.bslib-full-screen-enter{display:none}@media(max-width: 575.98px){.bslib-full-screen-enter{display:none !important}}.bslib-full-screen-exit{position:relative;top:1.35rem;font-size:.9rem;cursor:pointer;text-decoration:none;display:flex;float:right;margin-right:2.15rem;align-items:center;color:rgba(var(--bs-body-bg-rgb), 0.8)}.bslib-full-screen-exit:hover{color:rgba(var(--bs-body-bg-rgb), 1)}.bslib-full-screen-exit svg{margin-left:.5rem;font-size:1.5rem}#bslib-full-screen-overlay{position:fixed;inset:0;background-color:rgba(var(--bs-body-color-rgb), 0.6);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:1069;animation:bslib-full-screen-overlay-enter 400ms cubic-bezier(0.6, 0.02, 0.65, 1) forwards}@keyframes bslib-full-screen-overlay-enter{0%{opacity:0}100%{opacity:1}}.navbar+.container-fluid:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-sm:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-md:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-lg:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xl:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xxl:has(>.tab-content>.tab-pane.active.html-fill-container){padding-left:0;padding-right:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container{padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child){padding:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]){border-left:none;border-right:none;border-bottom:none}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]){border-radius:0}.navbar+div>.bslib-sidebar-layout{border-top:var(--bslib-sidebar-border)}:root{--bslib-page-sidebar-title-bg: #f8f9fa;--bslib-page-sidebar-title-color: #000}.bslib-page-title{background-color:var(--bslib-page-sidebar-title-bg);color:var(--bslib-page-sidebar-title-color);font-size:1.25rem;font-weight:300;padding:var(--bslib-spacer, 1rem);padding-left:1.5rem;margin-bottom:0;border-bottom:1px solid #dee2e6}.accordion .accordion-header{font-size:calc(1.29rem + 0.48vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:var(--bs-heading-color);margin-bottom:0}@media(min-width: 1200px){.accordion .accordion-header{font-size:1.65rem}}.accordion .accordion-icon:not(:empty){margin-right:.75rem;display:flex}.accordion .accordion-button:not(.collapsed){box-shadow:none}.accordion .accordion-button:not(.collapsed):focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow)}html{height:100%}.bslib-page-fill{width:100%;height:100%;margin:0;padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}@media(max-width: 575.98px){.bslib-page-fill{height:var(--bslib-page-fill-mobile-height, auto)}}:root{--bslib-value-box-shadow: none;--bslib-value-box-border-width-auto-yes: var(--bslib-value-box-border-width-baseline);--bslib-value-box-border-width-auto-no: 0;--bslib-value-box-border-width-baseline: 1px}.bslib-value-box{border-width:var(--bslib-value-box-border-width-auto-no, var(--bslib-value-box-border-width-baseline));container-name:bslib-value-box;container-type:inline-size}.bslib-value-box.card{box-shadow:var(--bslib-value-box-shadow)}.bslib-value-box.border-auto{border-width:var(--bslib-value-box-border-width-auto-yes, var(--bslib-value-box-border-width-baseline))}.bslib-value-box.default{--bslib-value-box-bg-default: var(--bs-card-bg, #fff);--bslib-value-box-border-color-default: var(--bs-card-border-color, rgba(0, 0, 0, 0.175));color:var(--bslib-value-box-color);background-color:var(--bslib-value-box-bg, var(--bslib-value-box-bg-default));border-color:var(--bslib-value-box-border-color, var(--bslib-value-box-border-color-default))}.bslib-value-box .value-box-grid{display:grid;grid-template-areas:"left right";align-items:center;overflow:hidden}.bslib-value-box .value-box-showcase{height:100%;max-height:var(---bslib-value-box-showcase-max-h, 100%)}.bslib-value-box .value-box-showcase,.bslib-value-box .value-box-showcase>.html-fill-item{width:100%}.bslib-value-box[data-full-screen=true] .value-box-showcase{max-height:var(---bslib-value-box-showcase-max-h-fs, 100%)}@media screen and (min-width: 575.98px){@container bslib-value-box (max-width: 300px){.bslib-value-box:not(.showcase-bottom) .value-box-grid{grid-template-columns:1fr !important;grid-template-rows:auto auto;grid-template-areas:"top" "bottom"}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-showcase{grid-area:top !important}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-area{grid-area:bottom !important;justify-content:end}}}.bslib-value-box .value-box-area{justify-content:center;padding:1.5rem 1rem;font-size:.9rem;font-weight:500}.bslib-value-box .value-box-area *{margin-bottom:0;margin-top:0}.bslib-value-box .value-box-title{font-size:1rem;margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}.bslib-value-box .value-box-title:empty::after{content:" "}.bslib-value-box .value-box-value{font-size:calc(1.29rem + 0.48vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}@media(min-width: 1200px){.bslib-value-box .value-box-value{font-size:1.65rem}}.bslib-value-box .value-box-value:empty::after{content:" "}.bslib-value-box .value-box-showcase{align-items:center;justify-content:center;margin-top:auto;margin-bottom:auto;padding:1rem}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{opacity:.85;min-width:50px;max-width:125%}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{font-size:4rem}.bslib-value-box.showcase-top-right .value-box-grid{grid-template-columns:1fr var(---bslib-value-box-showcase-w, 50%)}.bslib-value-box.showcase-top-right .value-box-grid .value-box-showcase{grid-area:right;margin-left:auto;align-self:start;align-items:end;padding-left:0;padding-bottom:0}.bslib-value-box.showcase-top-right .value-box-grid .value-box-area{grid-area:left;align-self:end}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid{grid-template-columns:auto var(---bslib-value-box-showcase-w-fs, 1fr)}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid>div{align-self:center}.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-showcase{margin-top:0}@container bslib-value-box (max-width: 300px){.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-grid .value-box-showcase{padding-left:1rem}}.bslib-value-box.showcase-left-center .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w, 30%) auto}.bslib-value-box.showcase-left-center[data-full-screen=true] .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w-fs, 1fr) auto}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-showcase{grid-area:left}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-area{grid-area:right}.bslib-value-box.showcase-bottom .value-box-grid{grid-template-columns:1fr;grid-template-rows:1fr var(---bslib-value-box-showcase-h, auto);grid-template-areas:"top" "bottom";overflow:hidden}.bslib-value-box.showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.bslib-value-box.showcase-bottom .value-box-grid .value-box-area{grid-area:top}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid{grid-template-rows:1fr var(---bslib-value-box-showcase-h-fs, 2fr)}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid .value-box-showcase{padding:1rem}[data-bs-theme=dark] .bslib-value-box{--bslib-value-box-shadow: 0 0.5rem 1rem rgb(0 0 0 / 50%)}.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-sidebar-icon-button-size: calc(var(--bslib-sidebar-icon-size, 1rem) * 2);--bslib-sidebar-padding-icon: calc(var(--bslib-sidebar-icon-button-size, 2rem) * 1.5);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, 0.25rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media(prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.bslib-sidebar-layout[data-bslib-sidebar-border=false]{border:none}.bslib-sidebar-layout[data-bslib-sidebar-border-radius=false]{border-radius:initial}.bslib-sidebar-layout>.main,.bslib-sidebar-layout>.sidebar{grid-row:1/2;border-radius:inherit;overflow:auto}.bslib-sidebar-layout>.main{grid-column:2/3;border-top-left-radius:0;border-bottom-left-radius:0;padding:var(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1/2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout>.sidebar>.sidebar-content>:last-child:not(.sidebar-title){margin-bottom:0}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion{margin-left:calc(-1*var(--bslib-sidebar-padding));margin-right:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child){margin-bottom:1rem}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion .accordion-body{display:flex;flex-direction:column}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:first-child) .accordion-item:first-child{border-top:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child) .accordion-item:last-child{border-bottom:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content.has-accordion>.sidebar-title{border-bottom:none;padding-bottom:0}.bslib-sidebar-layout>.sidebar .shiny-input-container{width:100%}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1/2;grid-column:1/2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem)/2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:var(--bslib-sidebar-icon-button-size, 2rem);width:var(--bslib-sidebar-icon-button-size, 2rem);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover>.collapse-icon{opacity:1}.bslib-sidebar-layout .sidebar-title{font-size:1.25rem;line-height:1.25;margin-top:0;margin-bottom:1rem;padding-bottom:1rem;border-bottom:var(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px))}.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/2;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit}.bslib-sidebar-layout.sidebar-right>.sidebar{grid-column:2/3;border-right:none;border-left:var(--bslib-sidebar-vert-border);border-top-left-radius:0;border-bottom-left-radius:0}.bslib-sidebar-layout.sidebar-right>.collapse-toggle{grid-column:2/3;left:var(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-vert-border: none;grid-template-columns:0 minmax(0, 1fr)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right{grid-template-columns:minmax(0, 1fr) 0}.bslib-sidebar-layout.sidebar-collapsed:not(.transitioning)>.sidebar>*{display:none}.bslib-sidebar-layout.sidebar-collapsed>.main{border-radius:inherit}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc(var(--bslib-sidebar-overlap-counter, 0)*(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding)) + var(--bslib-sidebar-icon-size, 1rem)/2);right:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media(min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media(max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open=desktop]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout>.sidebar,.bslib-sidebar-layout.sidebar-right>.sidebar{border:none}.bslib-sidebar-layout>.main,.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/3}.bslib-sidebar-layout[data-bslib-sidebar-open=always]{display:block !important}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar{max-height:var(--bslib-sidebar-max-height-mobile);overflow-y:auto;border-top:var(--bslib-sidebar-vert-border)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed>.main{opacity:1}}.bslib-grid{display:grid !important;gap:var(--bslib-spacer, 1rem);height:var(--bslib-grid-height)}.bslib-grid.grid{grid-template-columns:repeat(var(--bs-columns, 12), minmax(0, 1fr));grid-template-rows:unset;grid-auto-rows:var(--bslib-grid--row-heights);--bslib-grid--row-heights--xs: unset;--bslib-grid--row-heights--sm: unset;--bslib-grid--row-heights--md: unset;--bslib-grid--row-heights--lg: unset;--bslib-grid--row-heights--xl: unset;--bslib-grid--row-heights--xxl: unset}.bslib-grid.grid.bslib-grid--row-heights--xs{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xs)}@media(min-width: 576px){.bslib-grid.grid.bslib-grid--row-heights--sm{--bslib-grid--row-heights: var(--bslib-grid--row-heights--sm)}}@media(min-width: 768px){.bslib-grid.grid.bslib-grid--row-heights--md{--bslib-grid--row-heights: var(--bslib-grid--row-heights--md)}}@media(min-width: 992px){.bslib-grid.grid.bslib-grid--row-heights--lg{--bslib-grid--row-heights: var(--bslib-grid--row-heights--lg)}}@media(min-width: 1200px){.bslib-grid.grid.bslib-grid--row-heights--xl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xl)}}@media(min-width: 1400px){.bslib-grid.grid.bslib-grid--row-heights--xxl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xxl)}}.bslib-grid>*>.shiny-input-container{width:100%}.bslib-grid-item{grid-column:auto/span 1}@media(max-width: 767.98px){.bslib-grid-item{grid-column:1/-1}}@media(max-width: 575.98px){.bslib-grid{grid-template-columns:1fr !important;height:var(--bslib-grid-height-mobile)}.bslib-grid.grid{height:unset !important;grid-auto-rows:var(--bslib-grid--row-heights--xs, auto)}}@media(min-width: 576px){.nav:not(.nav-hidden){display:flex !important;display:-webkit-flex !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column){float:none !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.bslib-nav-spacer{margin-left:auto !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.form-inline{margin-top:auto;margin-bottom:auto}.nav:not(.nav-hidden).nav-stacked{flex-direction:column;-webkit-flex-direction:column;height:100%}.nav:not(.nav-hidden).nav-stacked>.bslib-nav-spacer{margin-top:auto !important}}.html-fill-container{display:flex;flex-direction:column;min-height:0;min-width:0}.html-fill-container>.html-fill-item{flex:1 1 auto;min-height:0;min-width:0}.html-fill-container>:not(.html-fill-item){flex:0 0 auto}.quarto-container{min-height:calc(100vh - 132px)}body.hypothesis-enabled #quarto-header{margin-right:16px}footer.footer .nav-footer,#quarto-header>nav{padding-left:1em;padding-right:1em}footer.footer div.nav-footer p:first-child{margin-top:0}footer.footer div.nav-footer p:last-child{margin-bottom:0}#quarto-content>*{padding-top:14px}#quarto-content>#quarto-sidebar-glass{padding-top:0px}@media(max-width: 991.98px){#quarto-content>*{padding-top:0}#quarto-content .subtitle{padding-top:14px}#quarto-content section:first-of-type h2:first-of-type,#quarto-content section:first-of-type .h2:first-of-type{margin-top:1rem}}.headroom-target,header.headroom{will-change:transform;transition:position 200ms linear;transition:all 200ms linear}header.headroom--pinned{transform:translateY(0%)}header.headroom--unpinned{transform:translateY(-100%)}.navbar-container{width:100%}.navbar-brand{overflow:hidden;text-overflow:ellipsis}.navbar-brand-container{max-width:calc(100% - 115px);min-width:0;display:flex;align-items:center}@media(min-width: 992px){.navbar-brand-container{margin-right:1em}}.navbar-brand.navbar-brand-logo{margin-right:4px;display:inline-flex}.navbar-toggler{flex-basis:content;flex-shrink:0}.navbar .navbar-brand-container{order:2}.navbar .navbar-toggler{order:1}.navbar .navbar-container>.navbar-nav{order:20}.navbar .navbar-container>.navbar-brand-container{margin-left:0 !important;margin-right:0 !important}.navbar .navbar-collapse{order:20}.navbar #quarto-search{order:4;margin-left:auto}.navbar .navbar-toggler{margin-right:.5em}.navbar-collapse .quarto-navbar-tools{margin-left:.5em}.navbar-logo{max-height:24px;width:auto;padding-right:4px}nav .nav-item:not(.compact){padding-top:1px}nav .nav-link i,nav .dropdown-item i{padding-right:1px}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.6rem;padding-right:.6rem}nav .nav-item.compact .nav-link{padding-left:.5rem;padding-right:.5rem;font-size:1.1rem}.navbar .quarto-navbar-tools{order:3}.navbar .quarto-navbar-tools div.dropdown{display:inline-block}.navbar .quarto-navbar-tools .quarto-navigation-tool{color:rgb(84.32,84.66,85)}.navbar .quarto-navbar-tools .quarto-navigation-tool:hover{color:rgb(31.2,77.6,181.6)}.navbar-nav .dropdown-menu{min-width:220px;font-size:.9rem}.navbar .navbar-nav .nav-link.dropdown-toggle::after{opacity:.75;vertical-align:.175em}.navbar ul.dropdown-menu{padding-top:0;padding-bottom:0}.navbar .dropdown-header{text-transform:uppercase;font-size:.8rem;padding:0 .5rem}.navbar .dropdown-item{padding:.4rem .5rem}.navbar .dropdown-item>i.bi{margin-left:.1rem;margin-right:.25em}.sidebar #quarto-search{margin-top:-1px}.sidebar #quarto-search svg.aa-SubmitIcon{width:16px;height:16px}.sidebar-navigation a{color:inherit}.sidebar-title{margin-top:.25rem;padding-bottom:.5rem;font-size:1.3rem;line-height:1.6rem;visibility:visible}.sidebar-title>a{font-size:inherit;text-decoration:none}.sidebar-title .sidebar-tools-main{margin-top:-6px}@media(max-width: 991.98px){#quarto-sidebar div.sidebar-header{padding-top:.2em}}.sidebar-header-stacked .sidebar-title{margin-top:.6rem}.sidebar-logo{max-width:90%;padding-bottom:.5rem}.sidebar-logo-link{text-decoration:none}.sidebar-navigation li a{text-decoration:none}.sidebar-navigation .quarto-navigation-tool{opacity:.7;font-size:.875rem}#quarto-sidebar>nav>.sidebar-tools-main{margin-left:14px}.sidebar-tools-main{display:inline-flex;margin-left:0px;order:2}.sidebar-tools-main:not(.tools-wide){vertical-align:middle}.sidebar-navigation .quarto-navigation-tool.dropdown-toggle::after{display:none}.sidebar.sidebar-navigation>*{padding-top:1em}.sidebar-item{margin-bottom:.2em;line-height:1rem;margin-top:.4rem}.sidebar-section{padding-left:.5em;padding-bottom:.2em}.sidebar-item .sidebar-item-container{display:flex;justify-content:space-between;cursor:pointer}.sidebar-item-toggle:hover{cursor:pointer}.sidebar-item .sidebar-item-toggle .bi{font-size:.7rem;text-align:center}.sidebar-item .sidebar-item-toggle .bi-chevron-right::before{transition:transform 200ms ease}.sidebar-item .sidebar-item-toggle[aria-expanded=false] .bi-chevron-right::before{transform:none}.sidebar-item .sidebar-item-toggle[aria-expanded=true] .bi-chevron-right::before{transform:rotate(90deg)}.sidebar-item-text{width:100%}.sidebar-navigation .sidebar-divider{margin-left:0;margin-right:0;margin-top:.5rem;margin-bottom:.5rem}@media(max-width: 991.98px){.quarto-secondary-nav{display:block}.quarto-secondary-nav button.quarto-search-button{padding-right:0em;padding-left:2em}.quarto-secondary-nav button.quarto-btn-toggle{margin-left:-0.75rem;margin-right:.15rem}.quarto-secondary-nav nav.quarto-title-breadcrumbs{display:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs{display:flex;align-items:center;padding-right:1em;margin-left:-0.25em}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{text-decoration:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs ol.breadcrumb{margin-bottom:0}}@media(min-width: 992px){.quarto-secondary-nav{display:none}}.quarto-title-breadcrumbs .breadcrumb{margin-bottom:.5em;font-size:.9rem}.quarto-title-breadcrumbs .breadcrumb li:last-of-type a{color:#6c757d}.quarto-secondary-nav .quarto-btn-toggle{color:hsl(0,0%,35%)}.quarto-secondary-nav[aria-expanded=false] .quarto-btn-toggle .bi-chevron-right::before{transform:none}.quarto-secondary-nav[aria-expanded=true] .quarto-btn-toggle .bi-chevron-right::before{transform:rotate(90deg)}.quarto-secondary-nav .quarto-btn-toggle .bi-chevron-right::before{transition:transform 200ms ease}.quarto-secondary-nav{cursor:pointer}.no-decor{text-decoration:none}.quarto-secondary-nav-title{margin-top:.3em;color:hsl(0,0%,35%);padding-top:4px}.quarto-secondary-nav nav.quarto-page-breadcrumbs{color:hsl(0,0%,35%)}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{color:hsl(0,0%,35%)}.quarto-secondary-nav nav.quarto-page-breadcrumbs a:hover{color:rgba(32.76,81.48,190.68,.8)}.quarto-secondary-nav nav.quarto-page-breadcrumbs .breadcrumb-item::before{color:hsl(0,0%,55%)}.breadcrumb-item{line-height:1.2rem}div.sidebar-item-container{color:hsl(0,0%,35%)}div.sidebar-item-container:hover,div.sidebar-item-container:focus{color:rgba(32.76,81.48,190.68,.8)}div.sidebar-item-container.disabled{color:hsla(0,0%,35%,.75)}div.sidebar-item-container .active,div.sidebar-item-container .show>.nav-link,div.sidebar-item-container .sidebar-link>code{color:rgb(32.76,81.48,190.68)}div.sidebar.sidebar-navigation.rollup.quarto-sidebar-toggle-contents,nav.sidebar.sidebar-navigation:not(.rollup){background-color:#fff}@media(max-width: 991.98px){.sidebar-navigation .sidebar-item a,.nav-page .nav-page-text,.sidebar-navigation{font-size:1rem}.sidebar-navigation ul.sidebar-section.depth1 .sidebar-section-item{font-size:1.1rem}.sidebar-logo{display:none}.sidebar.sidebar-navigation{position:static;border-bottom:1px solid #dee2e6}.sidebar.sidebar-navigation.collapsing{position:fixed;z-index:1000}.sidebar.sidebar-navigation.show{position:fixed;z-index:1000}.sidebar.sidebar-navigation{min-height:100%}nav.quarto-secondary-nav{background-color:#fff;border-bottom:1px solid #dee2e6}.quarto-banner nav.quarto-secondary-nav{background-color:#f8f9fa;color:rgb(84.32,84.66,85);border-top:1px solid #dee2e6}.sidebar .sidebar-footer{visibility:visible;padding-top:1rem;position:inherit}.sidebar-tools-collapse{display:block}}#quarto-sidebar{transition:width .15s ease-in}#quarto-sidebar>*{padding-right:1em}@media(max-width: 991.98px){#quarto-sidebar .sidebar-menu-container{white-space:nowrap;min-width:225px}#quarto-sidebar.show{transition:width .15s ease-out}}@media(min-width: 992px){#quarto-sidebar{display:flex;flex-direction:column}.nav-page .nav-page-text,.sidebar-navigation .sidebar-section .sidebar-item{font-size:.875rem}.sidebar-navigation .sidebar-item{font-size:.925rem}.sidebar.sidebar-navigation{display:block;position:sticky}.sidebar-search{width:100%}.sidebar .sidebar-footer{visibility:visible}}@media(min-width: 992px){#quarto-sidebar-glass{display:none}}@media(max-width: 991.98px){#quarto-sidebar-glass{position:fixed;top:0;bottom:0;left:0;right:0;background-color:hsla(0,0%,100%,0);transition:background-color .15s ease-in;z-index:-1}#quarto-sidebar-glass.collapsing{z-index:1000}#quarto-sidebar-glass.show{transition:background-color .15s ease-out;background-color:hsla(0,0%,40%,.4);z-index:1000}}.sidebar .sidebar-footer{padding:.5rem 1rem;align-self:flex-end;color:#6c757d;width:100%}.quarto-page-breadcrumbs .breadcrumb-item+.breadcrumb-item,.quarto-page-breadcrumbs .breadcrumb-item{padding-right:.33em;padding-left:0}.quarto-page-breadcrumbs .breadcrumb-item::before{padding-right:.33em}.quarto-sidebar-footer{font-size:.875em}.sidebar-section .bi-chevron-right{vertical-align:middle}.sidebar-section .bi-chevron-right::before{font-size:.9em}.notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;transition:none !important}.btn:focus:not(:focus-visible){box-shadow:none}.page-navigation{display:flex;justify-content:space-between}.nav-page{padding-bottom:.75em}.nav-page .bi{font-size:1.8rem;vertical-align:middle}.nav-page .nav-page-text{padding-left:.25em;padding-right:.25em}.nav-page a{color:#6c757d;text-decoration:none;display:flex;align-items:center}.nav-page a:hover{color:rgb(31.2,77.6,181.6)}.nav-footer .toc-actions{padding-bottom:.5em;padding-top:.5em}.nav-footer .toc-actions a,.nav-footer .toc-actions a:hover{text-decoration:none}.nav-footer .toc-actions ul{display:flex;list-style:none}.nav-footer .toc-actions ul :first-child{margin-left:auto}.nav-footer .toc-actions ul :last-child{margin-right:auto}.nav-footer .toc-actions ul li{padding-right:1.5em}.nav-footer .toc-actions ul li i.bi{padding-right:.4em}.nav-footer .toc-actions ul li:last-of-type{padding-right:0}.nav-footer{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:baseline;text-align:center;padding-top:.5rem;padding-bottom:.5rem;background-color:#fff}body.nav-fixed{padding-top:64px}.nav-footer-contents{color:#6c757d;margin-top:.25rem}.nav-footer{min-height:3.5em;color:hsl(0,0%,46%)}.nav-footer a{color:hsl(0,0%,46%)}.nav-footer .nav-footer-left{font-size:.825em}.nav-footer .nav-footer-center{font-size:.825em}.nav-footer .nav-footer-right{font-size:.825em}.nav-footer-left .footer-items,.nav-footer-center .footer-items,.nav-footer-right .footer-items{display:inline-flex;padding-top:.3em;padding-bottom:.3em;margin-bottom:0em}.nav-footer-left .footer-items .nav-link,.nav-footer-center .footer-items .nav-link,.nav-footer-right .footer-items .nav-link{padding-left:.6em;padding-right:.6em}@media(min-width: 768px){.nav-footer-left{flex:1 1 0px;text-align:left}}@media(max-width: 575.98px){.nav-footer-left{margin-bottom:1em;flex:100%}}@media(min-width: 768px){.nav-footer-right{flex:1 1 0px;text-align:right}}@media(max-width: 575.98px){.nav-footer-right{margin-bottom:1em;flex:100%}}.nav-footer-center{text-align:center;min-height:3em}@media(min-width: 768px){.nav-footer-center{flex:1 1 0px}}.nav-footer-center .footer-items{justify-content:center}@media(max-width: 767.98px){.nav-footer-center{margin-bottom:1em;flex:100%}}@media(max-width: 767.98px){.nav-footer-center{margin-top:3em;order:10}}.navbar .quarto-reader-toggle.reader .quarto-reader-toggle-btn{background-color:rgb(84.32,84.66,85);border-radius:3px}@media(max-width: 991.98px){.quarto-reader-toggle{display:none}}.quarto-reader-toggle.reader.quarto-navigation-tool .quarto-reader-toggle-btn{background-color:hsl(0,0%,35%);border-radius:3px}.quarto-reader-toggle .quarto-reader-toggle-btn{display:inline-flex;padding-left:.2em;padding-right:.2em;margin-left:-0.2em;margin-right:-0.2em;text-align:center}.navbar .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}#quarto-back-to-top{display:none;position:fixed;bottom:50px;background-color:#fff;border-radius:.25rem;box-shadow:0 .2rem .5rem #6c757d,0 0 .05rem #6c757d;color:#6c757d;text-decoration:none;font-size:.9em;text-align:center;left:50%;padding:.4rem .8rem;transform:translate(-50%, 0)}#quarto-announcement{padding:.5em;display:flex;justify-content:space-between;margin-bottom:0;font-size:.9em}#quarto-announcement .quarto-announcement-content{margin-right:auto}#quarto-announcement .quarto-announcement-content p{margin-bottom:0}#quarto-announcement .quarto-announcement-icon{margin-right:.5em;font-size:1.2em;margin-top:-0.15em}#quarto-announcement .quarto-announcement-action{cursor:pointer}.aa-DetachedSearchButtonQuery{display:none}.aa-DetachedOverlay ul.aa-List,#quarto-search-results ul.aa-List{list-style:none;padding-left:0}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{background-color:#fff;position:absolute;z-index:2000}#quarto-search-results .aa-Panel{max-width:400px}#quarto-search input{font-size:.925rem}@media(min-width: 992px){.navbar #quarto-search{margin-left:.25rem;order:999}}.navbar.navbar-expand-sm #quarto-search,.navbar.navbar-expand-md #quarto-search{order:999}@media(min-width: 992px){.navbar .quarto-navbar-tools{order:900}}@media(min-width: 992px){.navbar .quarto-navbar-tools.tools-end{margin-left:auto !important}}@media(max-width: 991.98px){#quarto-sidebar .sidebar-search{display:none}}#quarto-sidebar .sidebar-search .aa-Autocomplete{width:100%}.navbar .aa-Autocomplete .aa-Form{width:180px}.navbar #quarto-search.type-overlay .aa-Autocomplete{width:40px}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form{background-color:inherit;border:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form:focus-within{box-shadow:none;outline:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper{display:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper:focus-within{display:inherit}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-Label svg,.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-LoadingIndicator svg{width:26px;height:26px;color:rgb(84.32,84.66,85);opacity:1}.navbar #quarto-search.type-overlay .aa-Autocomplete svg.aa-SubmitIcon{width:26px;height:26px;color:rgb(84.32,84.66,85);opacity:1}.aa-Autocomplete .aa-Form,.aa-DetachedFormContainer .aa-Form{align-items:center;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;color:#343a40;display:flex;line-height:1em;margin:0;position:relative;width:100%}.aa-Autocomplete .aa-Form:focus-within,.aa-DetachedFormContainer .aa-Form:focus-within{box-shadow:rgba(39,128,227,.6) 0 0 0 1px;outline:currentColor none medium}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix{align-items:center;display:flex;flex-shrink:0;order:1}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{cursor:initial;flex-shrink:0;padding:0;text-align:left}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg{color:#343a40;opacity:.5}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton{appearance:none;background:none;border:0;margin:0}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{align-items:center;display:flex;justify-content:center}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapper,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper{order:3;position:relative;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input{appearance:none;background:none;border:0;color:#343a40;font:inherit;height:calc(1.5em + .1rem + 2px);padding:0;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::placeholder,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::placeholder{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input:focus{border-color:none;box-shadow:none;outline:none}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix{align-items:center;display:flex;order:4}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton{align-items:center;background:none;border:0;color:#343a40;opacity:.8;cursor:pointer;display:flex;margin:0;width:calc(1.5em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg{width:calc(1.5em + 0.75rem + calc(1px * 2))}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton{border:none;align-items:center;background:none;color:#343a40;opacity:.4;font-size:.7rem;cursor:pointer;display:none;margin:0;width:calc(1em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden]{display:none}.aa-PanelLayout:empty{display:none}.quarto-search-no-results.no-query{display:none}.aa-Source:has(.no-query){display:none}#quarto-search-results .aa-Panel{border:solid #dee2e6 1px}#quarto-search-results .aa-SourceNoResults{width:398px}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{max-height:65vh;overflow-y:auto;font-size:.925rem}.aa-DetachedOverlay .aa-SourceNoResults,#quarto-search-results .aa-SourceNoResults{height:60px;display:flex;justify-content:center;align-items:center}.aa-DetachedOverlay .search-error,#quarto-search-results .search-error{padding-top:10px;padding-left:20px;padding-right:20px;cursor:default}.aa-DetachedOverlay .search-error .search-error-title,#quarto-search-results .search-error .search-error-title{font-size:1.1rem;margin-bottom:.5rem}.aa-DetachedOverlay .search-error .search-error-title .search-error-icon,#quarto-search-results .search-error .search-error-title .search-error-icon{margin-right:8px}.aa-DetachedOverlay .search-error .search-error-text,#quarto-search-results .search-error .search-error-text{font-weight:300}.aa-DetachedOverlay .search-result-text,#quarto-search-results .search-result-text{font-weight:300;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.2rem;max-height:2.4rem}.aa-DetachedOverlay .aa-SourceHeader .search-result-header,#quarto-search-results .aa-SourceHeader .search-result-header{font-size:.875rem;background-color:hsl(0,0%,95%);padding-left:14px;padding-bottom:4px;padding-top:4px}.aa-DetachedOverlay .aa-SourceHeader .search-result-header-no-results,#quarto-search-results .aa-SourceHeader .search-result-header-no-results{display:none}.aa-DetachedOverlay .aa-SourceFooter .algolia-search-logo,#quarto-search-results .aa-SourceFooter .algolia-search-logo{width:110px;opacity:.85;margin:8px;float:right}.aa-DetachedOverlay .search-result-section,#quarto-search-results .search-result-section{font-size:.925em}.aa-DetachedOverlay a.search-result-link,#quarto-search-results a.search-result-link{color:inherit;text-decoration:none}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item,#quarto-search-results li.aa-Item[aria-selected=true] .search-item{background-color:#2780e3}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text-container{color:#fff;background-color:#2780e3}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=true] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-match.mark{color:#fff;background-color:rgb(75.1180327869,149.2360655738,231.6819672131)}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item,#quarto-search-results li.aa-Item[aria-selected=false] .search-item{background-color:#fff}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text-container{color:#343a40}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=false] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-match.mark{color:inherit;background-color:rgb(228.6196721311,239.4893442623,251.5803278689)}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container{background-color:#fff;color:#343a40}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container{padding-top:0px}.aa-DetachedOverlay li.aa-Item .search-result-doc.document-selectable .search-result-text-container,#quarto-search-results li.aa-Item .search-result-doc.document-selectable .search-result-text-container{margin-top:-4px}.aa-DetachedOverlay .aa-Item,#quarto-search-results .aa-Item{cursor:pointer}.aa-DetachedOverlay .aa-Item .search-item,#quarto-search-results .aa-Item .search-item{border-left:none;border-right:none;border-top:none;background-color:#fff;border-color:#dee2e6;color:#343a40}.aa-DetachedOverlay .aa-Item .search-item p,#quarto-search-results .aa-Item .search-item p{margin-top:0;margin-bottom:0}.aa-DetachedOverlay .aa-Item .search-item i.bi,#quarto-search-results .aa-Item .search-item i.bi{padding-left:8px;padding-right:8px;font-size:1.3em}.aa-DetachedOverlay .aa-Item .search-item .search-result-title,#quarto-search-results .aa-Item .search-item .search-result-title{margin-top:.3em;margin-bottom:0em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs,#quarto-search-results .aa-Item .search-item .search-result-crumbs{white-space:nowrap;text-overflow:ellipsis;font-size:.8em;font-weight:300;margin-right:1em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap),#quarto-search-results .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap){max-width:30%;margin-left:auto;margin-top:.5em;margin-bottom:.1rem}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap,#quarto-search-results .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap{flex-basis:100%;margin-top:0em;margin-bottom:.2em;margin-left:37px}.aa-DetachedOverlay .aa-Item .search-result-title-container,#quarto-search-results .aa-Item .search-result-title-container{font-size:1em;display:flex;flex-wrap:wrap;padding:6px 4px 6px 4px}.aa-DetachedOverlay .aa-Item .search-result-text-container,#quarto-search-results .aa-Item .search-result-text-container{padding-bottom:8px;padding-right:8px;margin-left:42px}.aa-DetachedOverlay .aa-Item .search-result-doc-section,.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-doc-section,#quarto-search-results .aa-Item .search-result-more{padding-top:8px;padding-bottom:8px;padding-left:44px}.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-more{font-size:.8em;font-weight:400}.aa-DetachedOverlay .aa-Item .search-result-doc,#quarto-search-results .aa-Item .search-result-doc{border-top:1px solid #dee2e6}.aa-DetachedSearchButton{background:none;border:none}.aa-DetachedSearchButton .aa-DetachedSearchButtonPlaceholder{display:none}.navbar .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:rgb(84.32,84.66,85)}.sidebar-tools-collapse #quarto-search,.sidebar-tools-main #quarto-search{display:inline}.sidebar-tools-collapse #quarto-search .aa-Autocomplete,.sidebar-tools-main #quarto-search .aa-Autocomplete{display:inline}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton{padding-left:4px;padding-right:4px}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:hsl(0,0%,35%)}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon{margin-top:-3px}.aa-DetachedContainer{background:hsla(0,0%,100%,.65);width:90%;bottom:0;box-shadow:rgba(222,226,230,.6) 0 0 0 1px;outline:currentColor none medium;display:flex;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:1101}.aa-DetachedContainer::after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px}.aa-DetachedContainer .aa-Panel{background-color:#fff;border-radius:0;box-shadow:none;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{background-color:#fff;border-bottom:1px solid #dee2e6;display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:.5em}.aa-DetachedCancelButton{background:none;font-size:.8em;border:0;border-radius:3px;color:#343a40;cursor:pointer;margin:0 0 0 .5em;padding:0 .5em}.aa-DetachedCancelButton:hover,.aa-DetachedCancelButton:focus{box-shadow:rgba(39,128,227,.6) 0 0 0 1px;outline:currentColor none medium}.aa-DetachedContainer--modal{bottom:inherit;height:auto;margin:0 auto;position:absolute;top:100px;border-radius:6px;max-width:850px}@media(max-width: 575.98px){.aa-DetachedContainer--modal{width:100%;top:0px;border-radius:0px;border:none}}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:var(--aa-detached-modal-max-height);padding-bottom:var(--aa-spacing-half);position:static}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:rgba(52,58,64,.4);position:fixed;left:0;right:0;top:0;margin:0;padding:0;height:100vh;z-index:1100}.quarto-dashboard.nav-fixed.dashboard-sidebar #quarto-content.quarto-dashboard-content{padding:0em}.quarto-dashboard #quarto-content.quarto-dashboard-content{padding:1em}.quarto-dashboard #quarto-content.quarto-dashboard-content>*{padding-top:0}@media(min-width: 576px){.quarto-dashboard{height:100%}}.quarto-dashboard .card.valuebox.bslib-card.bg-primary{background-color:#5397e9 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-secondary{background-color:#343a40 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-success{background-color:#3aa716 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-info{background-color:rgba(153,84,187,.7019607843) !important}.quarto-dashboard .card.valuebox.bslib-card.bg-warning{background-color:#fa6400 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-danger{background-color:rgba(255,0,57,.7019607843) !important}.quarto-dashboard .card.valuebox.bslib-card.bg-light{background-color:#f8f9fa !important}.quarto-dashboard .card.valuebox.bslib-card.bg-dark{background-color:#343a40 !important}.quarto-dashboard.dashboard-fill{display:flex;flex-direction:column}.quarto-dashboard #quarto-appendix{display:none}.quarto-dashboard #quarto-header #quarto-dashboard-header{border-top:solid 1px rgb(218.25,223.5,228.75);border-bottom:solid 1px rgb(218.25,223.5,228.75)}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav{padding-left:1em;padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav .navbar-brand-container{padding-left:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler{margin-right:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler-icon{height:1em;width:1em;background-image:url('data:image/svg+xml,')}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-brand-container{padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-title{font-size:1.1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-nav{font-size:.9em}.quarto-dashboard #quarto-dashboard-header .navbar{padding:0}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-container{padding-left:1em}.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-brand-container .nav-link,.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-nav .nav-link{padding:.7em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-color-scheme-toggle{order:9}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-toggler{margin-left:.5em;order:10}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .nav-link{padding:.5em;height:100%;display:flex;align-items:center}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .active{background-color:rgb(224.2,228.6,233)}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{padding:.5em .5em .5em 0;display:flex;flex-direction:row;margin-right:2em;align-items:center}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{margin-right:auto}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{align-self:stretch}@media(min-width: 768px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:8}}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:1000;padding-bottom:.5em}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse .navbar-nav{align-self:stretch}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title{font-size:1.25em;line-height:1.1em;display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title .navbar-title-text{margin-right:.4em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title a{text-decoration:none;color:inherit}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-subtitle,.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{font-size:.9rem;margin-right:.5em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{margin-left:auto}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-logo{max-height:48px;min-height:30px;object-fit:cover;margin-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-links{order:9;padding-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link-text{margin-left:.25em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link{padding-right:0em;padding-left:.7em;text-decoration:none;color:rgb(84.32,84.66,85)}.quarto-dashboard .page-layout-custom .tab-content{padding:0;border:none}.quarto-dashboard-img-contain{height:100%;width:100%;object-fit:contain}@media(max-width: 575.98px){.quarto-dashboard .bslib-grid{grid-template-rows:minmax(1em, max-content) !important}.quarto-dashboard .sidebar-content{height:inherit}.quarto-dashboard .page-layout-custom{min-height:100vh}}.quarto-dashboard.dashboard-toolbar>.page-layout-custom,.quarto-dashboard.dashboard-sidebar>.page-layout-custom{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages{padding:0}.quarto-dashboard .callout{margin-bottom:0;margin-top:0}.quarto-dashboard .html-fill-container figure{overflow:hidden}.quarto-dashboard bslib-tooltip .rounded-pill{border:solid #6c757d 1px}.quarto-dashboard bslib-tooltip .rounded-pill .svg{fill:#343a40}.quarto-dashboard .tabset .dashboard-card-no-title .nav-tabs{margin-left:0;margin-right:auto}.quarto-dashboard .tabset .tab-content{border:none}.quarto-dashboard .tabset .card-header .nav-link[role=tab]{margin-top:-6px;padding-top:6px;padding-bottom:6px}.quarto-dashboard .card.valuebox,.quarto-dashboard .card.bslib-value-box{min-height:3rem}.quarto-dashboard .card.valuebox .card-body,.quarto-dashboard .card.bslib-value-box .card-body{padding:0}.quarto-dashboard .bslib-value-box .value-box-value{font-size:clamp(.1em,15cqw,5em)}.quarto-dashboard .bslib-value-box .value-box-showcase .bi{font-size:clamp(.1em,max(18cqw,5.2cqh),5em);text-align:center;height:1em}.quarto-dashboard .bslib-value-box .value-box-showcase .bi::before{vertical-align:1em}.quarto-dashboard .bslib-value-box .value-box-area{margin-top:auto;margin-bottom:auto}.quarto-dashboard .card figure.quarto-float{display:flex;flex-direction:column;align-items:center}.quarto-dashboard .dashboard-scrolling{padding:1em}.quarto-dashboard .full-height{height:100%}.quarto-dashboard .showcase-bottom .value-box-grid{display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:"top" "bottom"}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase i.bi{font-size:4rem}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-area{grid-area:top}.quarto-dashboard .tab-content{margin-bottom:0}.quarto-dashboard .bslib-card .bslib-navs-card-title{justify-content:stretch;align-items:end}.quarto-dashboard .card-header{display:flex;flex-wrap:wrap;justify-content:space-between}.quarto-dashboard .card-header .card-title{display:flex;flex-direction:column;justify-content:center;margin-bottom:0}.quarto-dashboard .tabset .card-toolbar{margin-bottom:1em}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{border:none;gap:var(--bslib-spacer, 1rem)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{padding:0}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.sidebar{border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.collapse-toggle{display:none}@media(max-width: 767.98px){.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{grid-template-columns:1fr;grid-template-rows:max-content 1fr}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{grid-column:1;grid-row:2}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout .sidebar{grid-column:1;grid-row:1}}.quarto-dashboard .sidebar-right .sidebar{padding-left:2.5em}.quarto-dashboard .sidebar-right .collapse-toggle{left:2px}.quarto-dashboard .quarto-dashboard .sidebar-right button.collapse-toggle:not(.transitioning){left:unset}.quarto-dashboard aside.sidebar{padding-left:1em;padding-right:1em;background-color:rgba(52,58,64,.25);color:#343a40}.quarto-dashboard .bslib-sidebar-layout>div.main{padding:.7em}.quarto-dashboard .bslib-sidebar-layout button.collapse-toggle{margin-top:.3em}.quarto-dashboard .bslib-sidebar-layout .collapse-toggle{top:0}.quarto-dashboard .bslib-sidebar-layout.sidebar-collapsed:not(.transitioning):not(.sidebar-right) .collapse-toggle{left:2px}.quarto-dashboard .sidebar>section>.h3:first-of-type{margin-top:0em}.quarto-dashboard .sidebar .h3,.quarto-dashboard .sidebar .h4,.quarto-dashboard .sidebar .h5,.quarto-dashboard .sidebar .h6{margin-top:.5em}.quarto-dashboard .sidebar form{flex-direction:column;align-items:start;margin-bottom:1em}.quarto-dashboard .sidebar form div[class*=oi-][class$=-input]{flex-direction:column}.quarto-dashboard .sidebar form[class*=oi-][class$=-toggle]{flex-direction:row-reverse;align-items:center;justify-content:start}.quarto-dashboard .sidebar form input[type=range]{margin-top:.5em;margin-right:.8em;margin-left:1em}.quarto-dashboard .sidebar label{width:fit-content}.quarto-dashboard .sidebar .card-body{margin-bottom:2em}.quarto-dashboard .sidebar .shiny-input-container{margin-bottom:1em}.quarto-dashboard .sidebar .shiny-options-group{margin-top:0}.quarto-dashboard .sidebar .control-label{margin-bottom:.3em}.quarto-dashboard .card .card-body .quarto-layout-row{align-items:stretch}.quarto-dashboard .toolbar{font-size:.9em;display:flex;flex-direction:row;border-top:solid 1px hsl(210,3.0456852792%,74.5490196078%);padding:1em;flex-wrap:wrap;background-color:rgba(52,58,64,.25)}.quarto-dashboard .toolbar .cell-output-display{display:flex}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar>*:last-child{margin-right:0}.quarto-dashboard .toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .toolbar .input-daterange{width:inherit}.quarto-dashboard .toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar form{width:fit-content}.quarto-dashboard .toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .toolbar form input[type=date]{width:fit-content}.quarto-dashboard .toolbar form input[type=color]{width:3em}.quarto-dashboard .toolbar form button{padding:.4em}.quarto-dashboard .toolbar form select{width:fit-content}.quarto-dashboard .toolbar>*{font-size:.9em;flex-grow:0}.quarto-dashboard .toolbar .shiny-input-container label{margin-bottom:1px}.quarto-dashboard .toolbar-bottom{margin-top:1em;margin-bottom:0 !important;order:2}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>.tab-content>.tab-pane>*:not(.bslib-sidebar-layout){padding:1em}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>*:not(.tab-content){padding:1em}.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page>.dashboard-toolbar-container>.toolbar-content,.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page:not(.dashboard-sidebar-container)>*:not(.dashboard-toolbar-container){padding:1em}.quarto-dashboard .toolbar-content{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages .tab-pane>.dashboard-toolbar-container .toolbar{border-radius:0;margin-bottom:0}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar{border-bottom:1px solid rgba(0,0,0,.175)}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar-bottom{margin-top:0}.quarto-dashboard .dashboard-toolbar-container:not(.toolbar-toplevel) .toolbar{margin-bottom:1em;border-top:none;border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .vega-embed.has-actions details{width:1.7em;height:2em;position:absolute !important;top:0;right:0}.quarto-dashboard .dashboard-toolbar-container{padding:0}.quarto-dashboard .card .card-header p:last-child,.quarto-dashboard .card .card-footer p:last-child{margin-bottom:0}.quarto-dashboard .card .card-body>.h4:first-child{margin-top:0}.quarto-dashboard .card .card-body{z-index:4}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_length,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_info,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate{text-align:initial}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_filter{text-align:right}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:initial}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;padding-top:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper table{flex-shrink:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons{margin-bottom:.5em;margin-left:auto;width:fit-content;float:right}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons.btn-group{background:#fff;border:none}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn-secondary{background-color:#fff;background-image:none;border:solid #dee2e6 1px;padding:.2em .7em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn span{font-size:.8em;color:#343a40}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{margin-left:.5em;margin-bottom:.5em;padding-top:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.875em}}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.8em}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter{margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter input[type=search]{padding:1px 5px 1px 5px;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length{flex-basis:1 1 50%;margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length select{padding:.4em 3em .4em .5em;font-size:.875em;margin-left:.2em;margin-right:.2em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{flex-shrink:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{margin-left:auto}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate ul.pagination .paginate_button .page-link{font-size:.8em}.quarto-dashboard .card .card-footer{font-size:.9em}.quarto-dashboard .card .card-toolbar{display:flex;flex-grow:1;flex-direction:row;width:100%;flex-wrap:wrap}.quarto-dashboard .card .card-toolbar>*{font-size:.8em;flex-grow:0}.quarto-dashboard .card .card-toolbar>.card-title{font-size:1em;flex-grow:1;align-self:flex-start;margin-top:.1em}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar form{width:fit-content}.quarto-dashboard .card .card-toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=date]{width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=color]{width:3em}.quarto-dashboard .card .card-toolbar form button{padding:.4em}.quarto-dashboard .card .card-toolbar form select{width:fit-content}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .card .card-toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .card .card-toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .card .card-toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange{width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .card .card-toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .card .card-toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .card .card-toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .card .card-toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card-body>table>thead{border-top:none}.quarto-dashboard .card-body>.table>:not(caption)>*>*{background-color:#fff}.tableFloatingHeaderOriginal{background-color:#fff;position:sticky !important;top:0 !important}.dashboard-data-table{margin-top:-1px}div.value-box-area span.observablehq--number{font-size:calc(clamp(.1em,15cqw,5em)*1.25);line-height:1.2;color:inherit;font-family:var(--bs-body-font-family)}.quarto-listing{padding-bottom:1em}.listing-pagination{padding-top:.5em}ul.pagination{float:right;padding-left:8px;padding-top:.5em}ul.pagination li{padding-right:.75em}ul.pagination li.disabled a,ul.pagination li.active a{color:#fff;text-decoration:none}ul.pagination li:last-of-type{padding-right:0}.listing-actions-group{display:flex}.quarto-listing-filter{margin-bottom:1em;width:200px;margin-left:auto}.quarto-listing-sort{margin-bottom:1em;margin-right:auto;width:auto}.quarto-listing-sort .input-group-text{font-size:.8em}.input-group-text{border-right:none}.quarto-listing-sort select.form-select{font-size:.8em}.listing-no-matching{text-align:center;padding-top:2em;padding-bottom:3em;font-size:1em}#quarto-margin-sidebar .quarto-listing-category{padding-top:0;font-size:1rem}#quarto-margin-sidebar .quarto-listing-category-title{cursor:pointer;font-weight:600;font-size:1rem}.quarto-listing-category .category{cursor:pointer}.quarto-listing-category .category.active{font-weight:600}.quarto-listing-category.category-cloud{display:flex;flex-wrap:wrap;align-items:baseline}.quarto-listing-category.category-cloud .category{padding-right:5px}.quarto-listing-category.category-cloud .category-cloud-1{font-size:.75em}.quarto-listing-category.category-cloud .category-cloud-2{font-size:.95em}.quarto-listing-category.category-cloud .category-cloud-3{font-size:1.15em}.quarto-listing-category.category-cloud .category-cloud-4{font-size:1.35em}.quarto-listing-category.category-cloud .category-cloud-5{font-size:1.55em}.quarto-listing-category.category-cloud .category-cloud-6{font-size:1.75em}.quarto-listing-category.category-cloud .category-cloud-7{font-size:1.95em}.quarto-listing-category.category-cloud .category-cloud-8{font-size:2.15em}.quarto-listing-category.category-cloud .category-cloud-9{font-size:2.35em}.quarto-listing-category.category-cloud .category-cloud-10{font-size:2.55em}.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-1{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-2{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-3{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-3{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-4{grid-template-columns:repeat(4, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-4{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-4{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-5{grid-template-columns:repeat(5, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-5{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-5{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-6{grid-template-columns:repeat(6, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-6{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-6{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-7{grid-template-columns:repeat(7, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-7{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-7{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-8{grid-template-columns:repeat(8, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-8{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-8{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-9{grid-template-columns:repeat(9, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-9{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-9{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-10{grid-template-columns:repeat(10, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-10{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-10{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-11{grid-template-columns:repeat(11, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-11{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-11{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-12{grid-template-columns:repeat(12, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-12{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-12{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-grid{gap:1.5em}.quarto-grid-item.borderless{border:none}.quarto-grid-item.borderless .listing-categories .listing-category:last-of-type,.quarto-grid-item.borderless .listing-categories .listing-category:first-of-type{padding-left:0}.quarto-grid-item.borderless .listing-categories .listing-category{border:0}.quarto-grid-link{text-decoration:none;color:inherit}.quarto-grid-link:hover{text-decoration:none;color:inherit}.quarto-grid-item h5.title,.quarto-grid-item .title.h5{margin-top:0;margin-bottom:0}.quarto-grid-item .card-footer{display:flex;justify-content:space-between;font-size:.8em}.quarto-grid-item .card-footer p{margin-bottom:0}.quarto-grid-item p.card-img-top{margin-bottom:0}.quarto-grid-item p.card-img-top>img{object-fit:cover}.quarto-grid-item .card-other-values{margin-top:.5em;font-size:.8em}.quarto-grid-item .card-other-values tr{margin-bottom:.5em}.quarto-grid-item .card-other-values tr>td:first-of-type{font-weight:600;padding-right:1em;padding-left:1em;vertical-align:top}.quarto-grid-item div.post-contents{display:flex;flex-direction:column;text-decoration:none;height:100%}.quarto-grid-item .listing-item-img-placeholder{background-color:rgba(52,58,64,.25);flex-shrink:0}.quarto-grid-item .card-attribution{padding-top:1em;display:flex;gap:1em;text-transform:uppercase;color:#6c757d;font-weight:500;flex-grow:10;align-items:flex-end}.quarto-grid-item .description{padding-bottom:1em}.quarto-grid-item .card-attribution .date{align-self:flex-end}.quarto-grid-item .card-attribution.justify{justify-content:space-between}.quarto-grid-item .card-attribution.start{justify-content:flex-start}.quarto-grid-item .card-attribution.end{justify-content:flex-end}.quarto-grid-item .card-title{margin-bottom:.1em}.quarto-grid-item .card-subtitle{padding-top:.25em}.quarto-grid-item .card-text{font-size:.9em}.quarto-grid-item .listing-reading-time{padding-bottom:.25em}.quarto-grid-item .card-text-small{font-size:.8em}.quarto-grid-item .card-subtitle.subtitle{font-size:.9em;font-weight:600;padding-bottom:.5em}.quarto-grid-item .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}.quarto-grid-item .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}.quarto-grid-item.card-right{text-align:right}.quarto-grid-item.card-right .listing-categories{justify-content:flex-end}.quarto-grid-item.card-left{text-align:left}.quarto-grid-item.card-center{text-align:center}.quarto-grid-item.card-center .listing-description{text-align:justify}.quarto-grid-item.card-center .listing-categories{justify-content:center}table.quarto-listing-table td.image{padding:0px}table.quarto-listing-table td.image img{width:100%;max-width:50px;object-fit:contain}table.quarto-listing-table a{text-decoration:none;word-break:keep-all}table.quarto-listing-table th a{color:inherit}table.quarto-listing-table th a.asc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table th a.desc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table.table-hover td{cursor:pointer}.quarto-post.image-left{flex-direction:row}.quarto-post.image-right{flex-direction:row-reverse}@media(max-width: 767.98px){.quarto-post.image-right,.quarto-post.image-left{gap:0em;flex-direction:column}.quarto-post .metadata{padding-bottom:1em;order:2}.quarto-post .body{order:1}.quarto-post .thumbnail{order:3}}.list.quarto-listing-default div:last-of-type{border-bottom:none}@media(min-width: 992px){.quarto-listing-container-default{margin-right:2em}}div.quarto-post{display:flex;gap:2em;margin-bottom:1.5em;border-bottom:1px solid #dee2e6}@media(max-width: 767.98px){div.quarto-post{padding-bottom:1em}}div.quarto-post .metadata{flex-basis:20%;flex-grow:0;margin-top:.2em;flex-shrink:10}div.quarto-post .thumbnail{flex-basis:30%;flex-grow:0;flex-shrink:0}div.quarto-post .thumbnail img{margin-top:.4em;width:100%;object-fit:cover}div.quarto-post .body{flex-basis:45%;flex-grow:1;flex-shrink:0}div.quarto-post .body h3.listing-title,div.quarto-post .body .listing-title.h3{margin-top:0px;margin-bottom:0px;border-bottom:none}div.quarto-post .body .listing-subtitle{font-size:.875em;margin-bottom:.5em;margin-top:.2em}div.quarto-post .body .description{font-size:.9em}div.quarto-post .body pre code{white-space:pre-wrap}div.quarto-post a{color:#343a40;text-decoration:none}div.quarto-post .metadata{display:flex;flex-direction:column;font-size:.8em;font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";flex-basis:33%}div.quarto-post .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}div.quarto-post .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}div.quarto-post .listing-description{margin-bottom:.5em}div.quarto-about-jolla{display:flex !important;flex-direction:column;align-items:center;margin-top:10%;padding-bottom:1em}div.quarto-about-jolla .about-image{object-fit:cover;margin-left:auto;margin-right:auto;margin-bottom:1.5em}div.quarto-about-jolla img.round{border-radius:50%}div.quarto-about-jolla img.rounded{border-radius:10px}div.quarto-about-jolla .quarto-title h1.title,div.quarto-about-jolla .quarto-title .title.h1{text-align:center}div.quarto-about-jolla .quarto-title .description{text-align:center}div.quarto-about-jolla h2,div.quarto-about-jolla .h2{border-bottom:none}div.quarto-about-jolla .about-sep{width:60%}div.quarto-about-jolla main{text-align:center}div.quarto-about-jolla .about-links{display:flex}@media(min-width: 992px){div.quarto-about-jolla .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-jolla .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-jolla .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-jolla .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-jolla .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-jolla .about-link:hover{color:#2761e3}div.quarto-about-jolla .about-link i.bi{margin-right:.15em}div.quarto-about-solana{display:flex !important;flex-direction:column;padding-top:3em !important;padding-bottom:1em}div.quarto-about-solana .about-entity{display:flex !important;align-items:start;justify-content:space-between}@media(min-width: 992px){div.quarto-about-solana .about-entity{flex-direction:row}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity{flex-direction:column-reverse;align-items:center;text-align:center}}div.quarto-about-solana .about-entity .entity-contents{display:flex;flex-direction:column}@media(max-width: 767.98px){div.quarto-about-solana .about-entity .entity-contents{width:100%}}div.quarto-about-solana .about-entity .about-image{object-fit:cover}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-image{margin-bottom:1.5em}}div.quarto-about-solana .about-entity img.round{border-radius:50%}div.quarto-about-solana .about-entity img.rounded{border-radius:10px}div.quarto-about-solana .about-entity .about-links{display:flex;justify-content:left;padding-bottom:1.2em}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-solana .about-entity .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-solana .about-entity .about-link:hover{color:#2761e3}div.quarto-about-solana .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-solana .about-contents{padding-right:1.5em;flex-basis:0;flex-grow:1}div.quarto-about-solana .about-contents main.content{margin-top:0}div.quarto-about-solana .about-contents h2,div.quarto-about-solana .about-contents .h2{border-bottom:none}div.quarto-about-trestles{display:flex !important;flex-direction:row;padding-top:3em !important;padding-bottom:1em}@media(max-width: 991.98px){div.quarto-about-trestles{flex-direction:column;padding-top:0em !important}}div.quarto-about-trestles .about-entity{display:flex !important;flex-direction:column;align-items:center;text-align:center;padding-right:1em}@media(min-width: 992px){div.quarto-about-trestles .about-entity{flex:0 0 42%}}div.quarto-about-trestles .about-entity .about-image{object-fit:cover;margin-bottom:1.5em}div.quarto-about-trestles .about-entity img.round{border-radius:50%}div.quarto-about-trestles .about-entity img.rounded{border-radius:10px}div.quarto-about-trestles .about-entity .about-links{display:flex;justify-content:center}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-trestles .about-entity .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-trestles .about-entity .about-link:hover{color:#2761e3}div.quarto-about-trestles .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-trestles .about-contents{flex-basis:0;flex-grow:1}div.quarto-about-trestles .about-contents h2,div.quarto-about-trestles .about-contents .h2{border-bottom:none}@media(min-width: 992px){div.quarto-about-trestles .about-contents{border-left:solid 1px #dee2e6;padding-left:1.5em}}div.quarto-about-trestles .about-contents main.content{margin-top:0}div.quarto-about-marquee{padding-bottom:1em}div.quarto-about-marquee .about-contents{display:flex;flex-direction:column}div.quarto-about-marquee .about-image{max-height:550px;margin-bottom:1.5em;object-fit:cover}div.quarto-about-marquee img.round{border-radius:50%}div.quarto-about-marquee img.rounded{border-radius:10px}div.quarto-about-marquee h2,div.quarto-about-marquee .h2{border-bottom:none}div.quarto-about-marquee .about-links{display:flex;justify-content:center;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-marquee .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-marquee .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-marquee .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-marquee .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-marquee .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-marquee .about-link:hover{color:#2761e3}div.quarto-about-marquee .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-marquee .about-link{border:none}}div.quarto-about-broadside{display:flex;flex-direction:column;padding-bottom:1em}div.quarto-about-broadside .about-main{display:flex !important;padding-top:0 !important}@media(min-width: 992px){div.quarto-about-broadside .about-main{flex-direction:row;align-items:flex-start}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main{flex-direction:column}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main .about-entity{flex-shrink:0;width:100%;height:450px;margin-bottom:1.5em;background-size:cover;background-repeat:no-repeat}}@media(min-width: 992px){div.quarto-about-broadside .about-main .about-entity{flex:0 10 50%;margin-right:1.5em;width:100%;height:100%;background-size:100%;background-repeat:no-repeat}}div.quarto-about-broadside .about-main .about-contents{padding-top:14px;flex:0 0 50%}div.quarto-about-broadside h2,div.quarto-about-broadside .h2{border-bottom:none}div.quarto-about-broadside .about-sep{margin-top:1.5em;width:60%;align-self:center}div.quarto-about-broadside .about-links{display:flex;justify-content:center;column-gap:20px;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-broadside .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-broadside .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-broadside .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-broadside .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-broadside .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-broadside .about-link:hover{color:#2761e3}div.quarto-about-broadside .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-broadside .about-link{border:none}}.tippy-box[data-theme~=quarto]{background-color:#fff;border:solid 1px #dee2e6;border-radius:.25rem;color:#343a40;font-size:.875rem}.tippy-box[data-theme~=quarto]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=quarto]>.tippy-arrow:after,.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{content:"";position:absolute;z-index:-1}.tippy-box[data-theme~=quarto]>.tippy-arrow:after{border-color:rgba(0,0,0,0);border-style:solid}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-6px}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-6px}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-6px}.tippy-box[data-placement^=left]>.tippy-arrow:before{right:-6px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:after{border-top-color:#dee2e6;border-width:7px 7px 0;top:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow>svg{top:16px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow:after{top:17px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff;bottom:16px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:#dee2e6;border-width:0 7px 7px;bottom:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:15px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow:after{bottom:17px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:after{border-left-color:#dee2e6;border-width:7px 0 7px 7px;left:17px;top:1px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow>svg{left:11px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow:after{left:12px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff;right:16px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:after{border-width:7px 7px 7px 0;right:17px;top:1px;border-right-color:#dee2e6}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow>svg{right:11px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow:after{right:12px}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow{fill:#343a40}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=);background-size:16px 6px;width:16px;height:6px}.top-right{position:absolute;top:1em;right:1em}.visually-hidden{border:0;clip:rect(0 0 0 0);height:auto;margin:0;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none !important}.zindex-bottom{z-index:-1 !important}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:.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:.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:.5em}figure>figcaption.quarto-float-caption-top{margin-top:.5em}div[id^=tbl-]{position:relative}.quarto-figure>.anchorjs-link{position:absolute;top:.6em;right:.5em}div[id^=tbl-]>.anchorjs-link{position:absolute;top:.7em;right:.3em}.quarto-figure:hover>.anchorjs-link,div[id^=tbl-]:hover>.anchorjs-link,h2:hover>.anchorjs-link,.h2:hover>.anchorjs-link,h3:hover>.anchorjs-link,.h3:hover>.anchorjs-link,h4:hover>.anchorjs-link,.h4:hover>.anchorjs-link,h5:hover>.anchorjs-link,.h5:hover>.anchorjs-link,h6:hover>.anchorjs-link,.h6:hover>.anchorjs-link,.reveal-anchorjs-link>.anchorjs-link{opacity:1}#title-block-header{margin-block-end:1rem;position:relative;margin-top:-1px}#title-block-header .abstract{margin-block-start:1rem}#title-block-header .abstract .abstract-title{font-weight:600}#title-block-header a{text-decoration:none}#title-block-header .author,#title-block-header .date,#title-block-header .doi{margin-block-end:.2rem}#title-block-header .quarto-title-block>div{display:flex}#title-block-header .quarto-title-block>div>h1,#title-block-header .quarto-title-block>div>.h1{flex-grow:1}#title-block-header .quarto-title-block>div>button{flex-shrink:0;height:2.25rem;margin-top:0}@media(min-width: 992px){#title-block-header .quarto-title-block>div>button{margin-top:5px}}tr.header>th>p:last-of-type{margin-bottom:0px}table,table.table{margin-top:.5rem;margin-bottom:.5rem}caption,.table-caption{padding-top:.5rem;padding-bottom:.5rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-top{margin-top:.5rem;margin-bottom:.25rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-bottom{padding-top:.25rem;margin-bottom:.5rem;text-align:center}.utterances{max-width:none;margin-left:-8px}iframe{margin-bottom:1em}details{margin-bottom:1em}details[show]{margin-bottom:0}details>summary{color:#6c757d}details>summary>p:only-child{display:inline}div.code-copy-outer-scaffold{position:relative}dd code:not(.sourceCode),p code:not(.sourceCode){white-space:pre-wrap}code{white-space:pre}@media print{code{white-space:pre-wrap}}pre>code{display:block}pre>code.sourceCode{white-space:pre}pre>code.sourceCode>span>a:first-child::before{text-decoration:none}pre.code-overflow-wrap>code.sourceCode{white-space:pre-wrap}pre.code-overflow-scroll>code.sourceCode{white-space:pre}code a:any-link{color:inherit;text-decoration:none}code a:hover{color:inherit;text-decoration:underline}ul.task-list{padding-left:1em}[data-tippy-root]{display:inline-block}.tippy-content .footnote-back{display:none}.footnote-back{margin-left:.2em}.tippy-content{overflow-x:auto}.quarto-embedded-source-code{display:none}.quarto-unresolved-ref{font-weight:600}.quarto-cover-image{max-width:35%;float:right;margin-left:30px}.cell-output-display .widget-subarea{margin-bottom:1em}.cell-output-display:not(.no-overflow-x),.knitsql-table:not(.no-overflow-x){overflow-x:auto}.panel-input{margin-bottom:1em}.panel-input>div,.panel-input>div>div{display:inline-block;vertical-align:top;padding-right:12px}.panel-input>p:last-child{margin-bottom:0}.layout-sidebar{margin-bottom:1em}.layout-sidebar .tab-content{border:none}.tab-content>.page-columns.active{display:grid}div.sourceCode>iframe{width:100%;height:300px;margin-bottom:-0.5em}a{text-underline-offset:3px}.callout pre.sourceCode{padding-left:0}div.ansi-escaped-output{font-family:monospace;display:block}/*! -* -* ansi colors from IPython notebook's -* -* we also add `bright-[color]-` synonyms for the `-[color]-intense` classes since -* that seems to be what ansi_up emits -* -*/.ansi-black-fg{color:#3e424d}.ansi-black-bg{background-color:#3e424d}.ansi-black-intense-black,.ansi-bright-black-fg{color:#282c36}.ansi-black-intense-black,.ansi-bright-black-bg{background-color:#282c36}.ansi-red-fg{color:#e75c58}.ansi-red-bg{background-color:#e75c58}.ansi-red-intense-red,.ansi-bright-red-fg{color:#b22b31}.ansi-red-intense-red,.ansi-bright-red-bg{background-color:#b22b31}.ansi-green-fg{color:#00a250}.ansi-green-bg{background-color:#00a250}.ansi-green-intense-green,.ansi-bright-green-fg{color:#007427}.ansi-green-intense-green,.ansi-bright-green-bg{background-color:#007427}.ansi-yellow-fg{color:#ddb62b}.ansi-yellow-bg{background-color:#ddb62b}.ansi-yellow-intense-yellow,.ansi-bright-yellow-fg{color:#b27d12}.ansi-yellow-intense-yellow,.ansi-bright-yellow-bg{background-color:#b27d12}.ansi-blue-fg{color:#208ffb}.ansi-blue-bg{background-color:#208ffb}.ansi-blue-intense-blue,.ansi-bright-blue-fg{color:#0065ca}.ansi-blue-intense-blue,.ansi-bright-blue-bg{background-color:#0065ca}.ansi-magenta-fg{color:#d160c4}.ansi-magenta-bg{background-color:#d160c4}.ansi-magenta-intense-magenta,.ansi-bright-magenta-fg{color:#a03196}.ansi-magenta-intense-magenta,.ansi-bright-magenta-bg{background-color:#a03196}.ansi-cyan-fg{color:#60c6c8}.ansi-cyan-bg{background-color:#60c6c8}.ansi-cyan-intense-cyan,.ansi-bright-cyan-fg{color:#258f8f}.ansi-cyan-intense-cyan,.ansi-bright-cyan-bg{background-color:#258f8f}.ansi-white-fg{color:#c5c1b4}.ansi-white-bg{background-color:#c5c1b4}.ansi-white-intense-white,.ansi-bright-white-fg{color:#a1a6b2}.ansi-white-intense-white,.ansi-bright-white-bg{background-color:#a1a6b2}.ansi-default-inverse-fg{color:#fff}.ansi-default-inverse-bg{background-color:#000}.ansi-bold{font-weight:bold}.ansi-underline{text-decoration:underline}:root{--quarto-body-bg: #fff;--quarto-body-color: #343a40;--quarto-text-muted: #6c757d;--quarto-border-color: #dee2e6;--quarto-border-width: 1px}table.gt_table{color:var(--quarto-body-color);font-size:1em;width:100%;background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_column_spanner_outer{color:var(--quarto-body-color);background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_col_heading{color:var(--quarto-body-color);font-weight:bold;background-color:rgba(0,0,0,0)}table.gt_table thead.gt_col_headings{border-bottom:1px solid currentColor;border-top-width:inherit;border-top-color:var(--quarto-border-color)}table.gt_table thead.gt_col_headings:not(:first-child){border-top-width:1px;border-top-color:var(--quarto-border-color)}table.gt_table td.gt_row{border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-width:0px}table.gt_table tbody.gt_table_body{border-top-width:1px;border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-color:currentColor}div.columns{display:initial;gap:initial}div.column{display:inline-block;overflow-x:initial;vertical-align:top;width:50%}.code-annotation-tip-content{word-wrap:break-word}.code-annotation-container-hidden{display:none !important}dl.code-annotation-container-grid{display:grid;grid-template-columns:min-content auto}dl.code-annotation-container-grid dt{grid-column:1}dl.code-annotation-container-grid dd{grid-column:2}pre.sourceCode.code-annotation-code{padding-right:0}code.sourceCode .code-annotation-anchor{z-index:100;position:relative;float:right;background-color:rgba(0,0,0,0)}input[type=checkbox]{margin-right:.5ch}:root{--mermaid-bg-color: #fff;--mermaid-edge-color: #343a40;--mermaid-node-fg-color: #343a40;--mermaid-fg-color: #343a40;--mermaid-fg-color--lighter: rgb(74.8620689655, 83.5, 92.1379310345);--mermaid-fg-color--lightest: rgb(97.724137931, 109, 120.275862069);--mermaid-font-family: Source Sans Pro, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;--mermaid-label-bg-color: #fff;--mermaid-label-fg-color: #2780e3;--mermaid-node-bg-color: rgba(39, 128, 227, 0.1);--mermaid-node-fg-color: #343a40}@media print{:root{font-size:11pt}#quarto-sidebar,#TOC,.nav-page{display:none}.page-columns .content{grid-column-start:page-start}.fixed-top{position:relative}.panel-caption,.figure-caption,figcaption{color:#666}}body.quarto-light .dark-content{display:none !important}body.quarto-dark .light-content{display:none !important}.code-copy-button{position:absolute;top:0;right:0;border:0;margin-top:5px;margin-right:5px;background-color:rgba(0,0,0,0);z-index:3}.code-copy-button-tooltip{font-size:.75em}div.code-copy-outer-scaffold:hover>.code-copy-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}div.code-copy-outer-scaffold:hover>.code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}div.code-copy-outer-scaffold:hover>.code-copy-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}div.code-copy-outer-scaffold:hover>.code-copy-button-checked:hover>.bi::before{background-image:url('data:image/svg+xml,')}main ol ol,main ul ul,main ol ul,main ul ol{margin-bottom:1em}ul>li:not(:has(>p))>ul,ol>li:not(:has(>p))>ul,ul>li:not(:has(>p))>ol,ol>li:not(:has(>p))>ol{margin-bottom:0}ul>li:not(:has(>p))>ul>li:has(>p),ol>li:not(:has(>p))>ul>li:has(>p),ul>li:not(:has(>p))>ol>li:has(>p),ol>li:not(:has(>p))>ol>li:has(>p){margin-top:1rem}body{margin:0}main.page-columns>header>h1.title,main.page-columns>header>.title.h1{margin-bottom:0}@media(min-width: 992px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] 35px [page-end-inset page-end] 5fr [screen-end-inset] 1.5em}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 3em [body-end] 50px [body-end-outset] minmax(0px, 250px) [page-end-inset] minmax(50px, 100px) [page-end] 1fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] minmax(25px, 50px) [body-end-outset] minmax(50px, 150px) [page-end-inset] minmax(25px, 50px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(50px, 100px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(50px, 150px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] minmax(25px, 50px) [body-end-outset] minmax(50px, 150px) [page-end-inset] minmax(25px, 50px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 991.98px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1250px - 3em)) [body-content-end body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1.5em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(75px, 150px) [page-end-inset] 25px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(75px, 150px) [page-end-inset] 25px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 767.98px){body .page-columns,body.fullcontent:not(.floating):not(.docked) .page-columns,body.slimcontent:not(.floating):not(.docked) .page-columns,body.docked .page-columns,body.docked.slimcontent .page-columns,body.docked.fullcontent .page-columns,body.floating .page-columns,body.floating.slimcontent .page-columns,body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}nav[role=doc-toc]{display:none}}body,.page-row-navigation{grid-template-rows:[page-top] max-content [contents-top] max-content [contents-bottom] max-content [page-bottom]}.page-rows-contents{grid-template-rows:[content-top] minmax(max-content, 1fr) [content-bottom] minmax(60px, max-content) [page-bottom]}.page-full{grid-column:screen-start/screen-end !important}.page-columns>*{grid-column:body-content-start/body-content-end}.page-columns.column-page>*{grid-column:page-start/page-end}.page-columns.column-page-left .page-columns.page-full>*,.page-columns.column-page-left>*{grid-column:page-start/body-content-end}.page-columns.column-page-right .page-columns.page-full>*,.page-columns.column-page-right>*{grid-column:body-content-start/page-end}.page-rows{grid-auto-rows:auto}.header{grid-column:screen-start/screen-end;grid-row:page-top/contents-top}#quarto-content{padding:0;grid-column:screen-start/screen-end;grid-row:contents-top/contents-bottom}body.floating .sidebar.sidebar-navigation{grid-column:page-start/body-start;grid-row:content-top/page-bottom}body.docked .sidebar.sidebar-navigation{grid-column:screen-start/body-start;grid-row:content-top/page-bottom}.sidebar.toc-left{grid-column:page-start/body-start;grid-row:content-top/page-bottom}.sidebar.margin-sidebar{grid-column:body-end/page-end;grid-row:content-top/page-bottom}.page-columns .content{grid-column:body-content-start/body-content-end;grid-row:content-top/content-bottom;align-content:flex-start}.page-columns .page-navigation{grid-column:body-content-start/body-content-end;grid-row:content-bottom/page-bottom}.page-columns .footer{grid-column:screen-start/screen-end;grid-row:contents-bottom/page-bottom}.page-columns .column-body{grid-column:body-content-start/body-content-end}.page-columns .column-body-fullbleed{grid-column:body-start/body-end}.page-columns .column-body-outset{grid-column:body-start-outset/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset table{background:#fff}.page-columns .column-body-outset-left{grid-column:body-start-outset/body-content-end;z-index:998;opacity:.999}.page-columns .column-body-outset-left table{background:#fff}.page-columns .column-body-outset-right{grid-column:body-content-start/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset-right table{background:#fff}.page-columns .column-page{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-page table{background:#fff}.page-columns .column-page-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset table{background:#fff}.page-columns .column-page-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-inset-left table{background:#fff}.page-columns .column-page-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset-right figcaption table{background:#fff}.page-columns .column-page-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-left table{background:#fff}.page-columns .column-page-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-page-right figcaption table{background:#fff}#quarto-content.page-columns #quarto-margin-sidebar,#quarto-content.page-columns #quarto-sidebar{z-index:1}@media(max-width: 991.98px){#quarto-content.page-columns #quarto-margin-sidebar.collapse,#quarto-content.page-columns #quarto-sidebar.collapse,#quarto-content.page-columns #quarto-margin-sidebar.collapsing,#quarto-content.page-columns #quarto-sidebar.collapsing{z-index:1055}}#quarto-content.page-columns main.column-page,#quarto-content.page-columns main.column-page-right,#quarto-content.page-columns main.column-page-left{z-index:0}.page-columns .column-screen-inset{grid-column:screen-start-inset/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:screen-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:screen-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:screen-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:screen-start/screen-end;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}.zindex-content{z-index:998;opacity:.999}.zindex-modal{z-index:1055;opacity:.999}.zindex-over-content{z-index:999;opacity:.999}img.img-fluid.column-screen,img.img-fluid.column-screen-inset-shaded,img.img-fluid.column-screen-inset,img.img-fluid.column-screen-inset-left,img.img-fluid.column-screen-inset-right,img.img-fluid.column-screen-left,img.img-fluid.column-screen-right{width:100%}@media(min-width: 992px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.column-sidebar{grid-column:page-start/body-start !important;z-index:998}.column-leftmargin{grid-column:screen-start-inset/body-start !important;z-index:998}.no-row-height{height:1em;overflow:visible}}@media(max-width: 991.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.no-row-height{height:1em;overflow:visible}.page-columns.page-full{overflow:visible}.page-columns.toc-left .margin-caption,.page-columns.toc-left div.aside,.page-columns.toc-left aside:not(.footnotes):not(.sidebar),.page-columns.toc-left .column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.page-columns.toc-left .no-row-height{height:initial;overflow:initial}}@media(max-width: 767.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.no-row-height{height:initial;overflow:initial}#quarto-margin-sidebar{display:none}#quarto-sidebar-toc-left{display:none}.hidden-sm{display:none}}.panel-grid{display:grid;grid-template-rows:repeat(1, 1fr);grid-template-columns:repeat(24, 1fr);gap:1em}.panel-grid .g-col-1{grid-column:auto/span 1}.panel-grid .g-col-2{grid-column:auto/span 2}.panel-grid .g-col-3{grid-column:auto/span 3}.panel-grid .g-col-4{grid-column:auto/span 4}.panel-grid .g-col-5{grid-column:auto/span 5}.panel-grid .g-col-6{grid-column:auto/span 6}.panel-grid .g-col-7{grid-column:auto/span 7}.panel-grid .g-col-8{grid-column:auto/span 8}.panel-grid .g-col-9{grid-column:auto/span 9}.panel-grid .g-col-10{grid-column:auto/span 10}.panel-grid .g-col-11{grid-column:auto/span 11}.panel-grid .g-col-12{grid-column:auto/span 12}.panel-grid .g-col-13{grid-column:auto/span 13}.panel-grid .g-col-14{grid-column:auto/span 14}.panel-grid .g-col-15{grid-column:auto/span 15}.panel-grid .g-col-16{grid-column:auto/span 16}.panel-grid .g-col-17{grid-column:auto/span 17}.panel-grid .g-col-18{grid-column:auto/span 18}.panel-grid .g-col-19{grid-column:auto/span 19}.panel-grid .g-col-20{grid-column:auto/span 20}.panel-grid .g-col-21{grid-column:auto/span 21}.panel-grid .g-col-22{grid-column:auto/span 22}.panel-grid .g-col-23{grid-column:auto/span 23}.panel-grid .g-col-24{grid-column:auto/span 24}.panel-grid .g-start-1{grid-column-start:1}.panel-grid .g-start-2{grid-column-start:2}.panel-grid .g-start-3{grid-column-start:3}.panel-grid .g-start-4{grid-column-start:4}.panel-grid .g-start-5{grid-column-start:5}.panel-grid .g-start-6{grid-column-start:6}.panel-grid .g-start-7{grid-column-start:7}.panel-grid .g-start-8{grid-column-start:8}.panel-grid .g-start-9{grid-column-start:9}.panel-grid .g-start-10{grid-column-start:10}.panel-grid .g-start-11{grid-column-start:11}.panel-grid .g-start-12{grid-column-start:12}.panel-grid .g-start-13{grid-column-start:13}.panel-grid .g-start-14{grid-column-start:14}.panel-grid .g-start-15{grid-column-start:15}.panel-grid .g-start-16{grid-column-start:16}.panel-grid .g-start-17{grid-column-start:17}.panel-grid .g-start-18{grid-column-start:18}.panel-grid .g-start-19{grid-column-start:19}.panel-grid .g-start-20{grid-column-start:20}.panel-grid .g-start-21{grid-column-start:21}.panel-grid .g-start-22{grid-column-start:22}.panel-grid .g-start-23{grid-column-start:23}@media(min-width: 576px){.panel-grid .g-col-sm-1{grid-column:auto/span 1}.panel-grid .g-col-sm-2{grid-column:auto/span 2}.panel-grid .g-col-sm-3{grid-column:auto/span 3}.panel-grid .g-col-sm-4{grid-column:auto/span 4}.panel-grid .g-col-sm-5{grid-column:auto/span 5}.panel-grid .g-col-sm-6{grid-column:auto/span 6}.panel-grid .g-col-sm-7{grid-column:auto/span 7}.panel-grid .g-col-sm-8{grid-column:auto/span 8}.panel-grid .g-col-sm-9{grid-column:auto/span 9}.panel-grid .g-col-sm-10{grid-column:auto/span 10}.panel-grid .g-col-sm-11{grid-column:auto/span 11}.panel-grid .g-col-sm-12{grid-column:auto/span 12}.panel-grid .g-col-sm-13{grid-column:auto/span 13}.panel-grid .g-col-sm-14{grid-column:auto/span 14}.panel-grid .g-col-sm-15{grid-column:auto/span 15}.panel-grid .g-col-sm-16{grid-column:auto/span 16}.panel-grid .g-col-sm-17{grid-column:auto/span 17}.panel-grid .g-col-sm-18{grid-column:auto/span 18}.panel-grid .g-col-sm-19{grid-column:auto/span 19}.panel-grid .g-col-sm-20{grid-column:auto/span 20}.panel-grid .g-col-sm-21{grid-column:auto/span 21}.panel-grid .g-col-sm-22{grid-column:auto/span 22}.panel-grid .g-col-sm-23{grid-column:auto/span 23}.panel-grid .g-col-sm-24{grid-column:auto/span 24}.panel-grid .g-start-sm-1{grid-column-start:1}.panel-grid .g-start-sm-2{grid-column-start:2}.panel-grid .g-start-sm-3{grid-column-start:3}.panel-grid .g-start-sm-4{grid-column-start:4}.panel-grid .g-start-sm-5{grid-column-start:5}.panel-grid .g-start-sm-6{grid-column-start:6}.panel-grid .g-start-sm-7{grid-column-start:7}.panel-grid .g-start-sm-8{grid-column-start:8}.panel-grid .g-start-sm-9{grid-column-start:9}.panel-grid .g-start-sm-10{grid-column-start:10}.panel-grid .g-start-sm-11{grid-column-start:11}.panel-grid .g-start-sm-12{grid-column-start:12}.panel-grid .g-start-sm-13{grid-column-start:13}.panel-grid .g-start-sm-14{grid-column-start:14}.panel-grid .g-start-sm-15{grid-column-start:15}.panel-grid .g-start-sm-16{grid-column-start:16}.panel-grid .g-start-sm-17{grid-column-start:17}.panel-grid .g-start-sm-18{grid-column-start:18}.panel-grid .g-start-sm-19{grid-column-start:19}.panel-grid .g-start-sm-20{grid-column-start:20}.panel-grid .g-start-sm-21{grid-column-start:21}.panel-grid .g-start-sm-22{grid-column-start:22}.panel-grid .g-start-sm-23{grid-column-start:23}}@media(min-width: 768px){.panel-grid .g-col-md-1{grid-column:auto/span 1}.panel-grid .g-col-md-2{grid-column:auto/span 2}.panel-grid .g-col-md-3{grid-column:auto/span 3}.panel-grid .g-col-md-4{grid-column:auto/span 4}.panel-grid .g-col-md-5{grid-column:auto/span 5}.panel-grid .g-col-md-6{grid-column:auto/span 6}.panel-grid .g-col-md-7{grid-column:auto/span 7}.panel-grid .g-col-md-8{grid-column:auto/span 8}.panel-grid .g-col-md-9{grid-column:auto/span 9}.panel-grid .g-col-md-10{grid-column:auto/span 10}.panel-grid .g-col-md-11{grid-column:auto/span 11}.panel-grid .g-col-md-12{grid-column:auto/span 12}.panel-grid .g-col-md-13{grid-column:auto/span 13}.panel-grid .g-col-md-14{grid-column:auto/span 14}.panel-grid .g-col-md-15{grid-column:auto/span 15}.panel-grid .g-col-md-16{grid-column:auto/span 16}.panel-grid .g-col-md-17{grid-column:auto/span 17}.panel-grid .g-col-md-18{grid-column:auto/span 18}.panel-grid .g-col-md-19{grid-column:auto/span 19}.panel-grid .g-col-md-20{grid-column:auto/span 20}.panel-grid .g-col-md-21{grid-column:auto/span 21}.panel-grid .g-col-md-22{grid-column:auto/span 22}.panel-grid .g-col-md-23{grid-column:auto/span 23}.panel-grid .g-col-md-24{grid-column:auto/span 24}.panel-grid .g-start-md-1{grid-column-start:1}.panel-grid .g-start-md-2{grid-column-start:2}.panel-grid .g-start-md-3{grid-column-start:3}.panel-grid .g-start-md-4{grid-column-start:4}.panel-grid .g-start-md-5{grid-column-start:5}.panel-grid .g-start-md-6{grid-column-start:6}.panel-grid .g-start-md-7{grid-column-start:7}.panel-grid .g-start-md-8{grid-column-start:8}.panel-grid .g-start-md-9{grid-column-start:9}.panel-grid .g-start-md-10{grid-column-start:10}.panel-grid .g-start-md-11{grid-column-start:11}.panel-grid .g-start-md-12{grid-column-start:12}.panel-grid .g-start-md-13{grid-column-start:13}.panel-grid .g-start-md-14{grid-column-start:14}.panel-grid .g-start-md-15{grid-column-start:15}.panel-grid .g-start-md-16{grid-column-start:16}.panel-grid .g-start-md-17{grid-column-start:17}.panel-grid .g-start-md-18{grid-column-start:18}.panel-grid .g-start-md-19{grid-column-start:19}.panel-grid .g-start-md-20{grid-column-start:20}.panel-grid .g-start-md-21{grid-column-start:21}.panel-grid .g-start-md-22{grid-column-start:22}.panel-grid .g-start-md-23{grid-column-start:23}}@media(min-width: 992px){.panel-grid .g-col-lg-1{grid-column:auto/span 1}.panel-grid .g-col-lg-2{grid-column:auto/span 2}.panel-grid .g-col-lg-3{grid-column:auto/span 3}.panel-grid .g-col-lg-4{grid-column:auto/span 4}.panel-grid .g-col-lg-5{grid-column:auto/span 5}.panel-grid .g-col-lg-6{grid-column:auto/span 6}.panel-grid .g-col-lg-7{grid-column:auto/span 7}.panel-grid .g-col-lg-8{grid-column:auto/span 8}.panel-grid .g-col-lg-9{grid-column:auto/span 9}.panel-grid .g-col-lg-10{grid-column:auto/span 10}.panel-grid .g-col-lg-11{grid-column:auto/span 11}.panel-grid .g-col-lg-12{grid-column:auto/span 12}.panel-grid .g-col-lg-13{grid-column:auto/span 13}.panel-grid .g-col-lg-14{grid-column:auto/span 14}.panel-grid .g-col-lg-15{grid-column:auto/span 15}.panel-grid .g-col-lg-16{grid-column:auto/span 16}.panel-grid .g-col-lg-17{grid-column:auto/span 17}.panel-grid .g-col-lg-18{grid-column:auto/span 18}.panel-grid .g-col-lg-19{grid-column:auto/span 19}.panel-grid .g-col-lg-20{grid-column:auto/span 20}.panel-grid .g-col-lg-21{grid-column:auto/span 21}.panel-grid .g-col-lg-22{grid-column:auto/span 22}.panel-grid .g-col-lg-23{grid-column:auto/span 23}.panel-grid .g-col-lg-24{grid-column:auto/span 24}.panel-grid .g-start-lg-1{grid-column-start:1}.panel-grid .g-start-lg-2{grid-column-start:2}.panel-grid .g-start-lg-3{grid-column-start:3}.panel-grid .g-start-lg-4{grid-column-start:4}.panel-grid .g-start-lg-5{grid-column-start:5}.panel-grid .g-start-lg-6{grid-column-start:6}.panel-grid .g-start-lg-7{grid-column-start:7}.panel-grid .g-start-lg-8{grid-column-start:8}.panel-grid .g-start-lg-9{grid-column-start:9}.panel-grid .g-start-lg-10{grid-column-start:10}.panel-grid .g-start-lg-11{grid-column-start:11}.panel-grid .g-start-lg-12{grid-column-start:12}.panel-grid .g-start-lg-13{grid-column-start:13}.panel-grid .g-start-lg-14{grid-column-start:14}.panel-grid .g-start-lg-15{grid-column-start:15}.panel-grid .g-start-lg-16{grid-column-start:16}.panel-grid .g-start-lg-17{grid-column-start:17}.panel-grid .g-start-lg-18{grid-column-start:18}.panel-grid .g-start-lg-19{grid-column-start:19}.panel-grid .g-start-lg-20{grid-column-start:20}.panel-grid .g-start-lg-21{grid-column-start:21}.panel-grid .g-start-lg-22{grid-column-start:22}.panel-grid .g-start-lg-23{grid-column-start:23}}@media(min-width: 1200px){.panel-grid .g-col-xl-1{grid-column:auto/span 1}.panel-grid .g-col-xl-2{grid-column:auto/span 2}.panel-grid .g-col-xl-3{grid-column:auto/span 3}.panel-grid .g-col-xl-4{grid-column:auto/span 4}.panel-grid .g-col-xl-5{grid-column:auto/span 5}.panel-grid .g-col-xl-6{grid-column:auto/span 6}.panel-grid .g-col-xl-7{grid-column:auto/span 7}.panel-grid .g-col-xl-8{grid-column:auto/span 8}.panel-grid .g-col-xl-9{grid-column:auto/span 9}.panel-grid .g-col-xl-10{grid-column:auto/span 10}.panel-grid .g-col-xl-11{grid-column:auto/span 11}.panel-grid .g-col-xl-12{grid-column:auto/span 12}.panel-grid .g-col-xl-13{grid-column:auto/span 13}.panel-grid .g-col-xl-14{grid-column:auto/span 14}.panel-grid .g-col-xl-15{grid-column:auto/span 15}.panel-grid .g-col-xl-16{grid-column:auto/span 16}.panel-grid .g-col-xl-17{grid-column:auto/span 17}.panel-grid .g-col-xl-18{grid-column:auto/span 18}.panel-grid .g-col-xl-19{grid-column:auto/span 19}.panel-grid .g-col-xl-20{grid-column:auto/span 20}.panel-grid .g-col-xl-21{grid-column:auto/span 21}.panel-grid .g-col-xl-22{grid-column:auto/span 22}.panel-grid .g-col-xl-23{grid-column:auto/span 23}.panel-grid .g-col-xl-24{grid-column:auto/span 24}.panel-grid .g-start-xl-1{grid-column-start:1}.panel-grid .g-start-xl-2{grid-column-start:2}.panel-grid .g-start-xl-3{grid-column-start:3}.panel-grid .g-start-xl-4{grid-column-start:4}.panel-grid .g-start-xl-5{grid-column-start:5}.panel-grid .g-start-xl-6{grid-column-start:6}.panel-grid .g-start-xl-7{grid-column-start:7}.panel-grid .g-start-xl-8{grid-column-start:8}.panel-grid .g-start-xl-9{grid-column-start:9}.panel-grid .g-start-xl-10{grid-column-start:10}.panel-grid .g-start-xl-11{grid-column-start:11}.panel-grid .g-start-xl-12{grid-column-start:12}.panel-grid .g-start-xl-13{grid-column-start:13}.panel-grid .g-start-xl-14{grid-column-start:14}.panel-grid .g-start-xl-15{grid-column-start:15}.panel-grid .g-start-xl-16{grid-column-start:16}.panel-grid .g-start-xl-17{grid-column-start:17}.panel-grid .g-start-xl-18{grid-column-start:18}.panel-grid .g-start-xl-19{grid-column-start:19}.panel-grid .g-start-xl-20{grid-column-start:20}.panel-grid .g-start-xl-21{grid-column-start:21}.panel-grid .g-start-xl-22{grid-column-start:22}.panel-grid .g-start-xl-23{grid-column-start:23}}@media(min-width: 1400px){.panel-grid .g-col-xxl-1{grid-column:auto/span 1}.panel-grid .g-col-xxl-2{grid-column:auto/span 2}.panel-grid .g-col-xxl-3{grid-column:auto/span 3}.panel-grid .g-col-xxl-4{grid-column:auto/span 4}.panel-grid .g-col-xxl-5{grid-column:auto/span 5}.panel-grid .g-col-xxl-6{grid-column:auto/span 6}.panel-grid .g-col-xxl-7{grid-column:auto/span 7}.panel-grid .g-col-xxl-8{grid-column:auto/span 8}.panel-grid .g-col-xxl-9{grid-column:auto/span 9}.panel-grid .g-col-xxl-10{grid-column:auto/span 10}.panel-grid .g-col-xxl-11{grid-column:auto/span 11}.panel-grid .g-col-xxl-12{grid-column:auto/span 12}.panel-grid .g-col-xxl-13{grid-column:auto/span 13}.panel-grid .g-col-xxl-14{grid-column:auto/span 14}.panel-grid .g-col-xxl-15{grid-column:auto/span 15}.panel-grid .g-col-xxl-16{grid-column:auto/span 16}.panel-grid .g-col-xxl-17{grid-column:auto/span 17}.panel-grid .g-col-xxl-18{grid-column:auto/span 18}.panel-grid .g-col-xxl-19{grid-column:auto/span 19}.panel-grid .g-col-xxl-20{grid-column:auto/span 20}.panel-grid .g-col-xxl-21{grid-column:auto/span 21}.panel-grid .g-col-xxl-22{grid-column:auto/span 22}.panel-grid .g-col-xxl-23{grid-column:auto/span 23}.panel-grid .g-col-xxl-24{grid-column:auto/span 24}.panel-grid .g-start-xxl-1{grid-column-start:1}.panel-grid .g-start-xxl-2{grid-column-start:2}.panel-grid .g-start-xxl-3{grid-column-start:3}.panel-grid .g-start-xxl-4{grid-column-start:4}.panel-grid .g-start-xxl-5{grid-column-start:5}.panel-grid .g-start-xxl-6{grid-column-start:6}.panel-grid .g-start-xxl-7{grid-column-start:7}.panel-grid .g-start-xxl-8{grid-column-start:8}.panel-grid .g-start-xxl-9{grid-column-start:9}.panel-grid .g-start-xxl-10{grid-column-start:10}.panel-grid .g-start-xxl-11{grid-column-start:11}.panel-grid .g-start-xxl-12{grid-column-start:12}.panel-grid .g-start-xxl-13{grid-column-start:13}.panel-grid .g-start-xxl-14{grid-column-start:14}.panel-grid .g-start-xxl-15{grid-column-start:15}.panel-grid .g-start-xxl-16{grid-column-start:16}.panel-grid .g-start-xxl-17{grid-column-start:17}.panel-grid .g-start-xxl-18{grid-column-start:18}.panel-grid .g-start-xxl-19{grid-column-start:19}.panel-grid .g-start-xxl-20{grid-column-start:20}.panel-grid .g-start-xxl-21{grid-column-start:21}.panel-grid .g-start-xxl-22{grid-column-start:22}.panel-grid .g-start-xxl-23{grid-column-start:23}}main{margin-top:1em;margin-bottom:1em}h1,.h1,h2,.h2{color:inherit;margin-top:2rem;margin-bottom:1rem;font-weight:600}h1.title,.title.h1{margin-top:0}main.content>p:has(+section){margin-bottom:2rem}main.content>section:first-of-type>h2:nth-child(1),main.content>section:first-of-type>.h2:nth-child(1){margin-top:0}h2,.h2{border-bottom:1px solid #dee2e6;padding-bottom:.5rem}h3,.h3{font-weight:600}h3,.h3,h4,.h4{opacity:.9;margin-top:1.5rem}h5,.h5,h6,.h6{opacity:.9}.header-section-number{color:hsl(210,10.3448275862%,47.7450980392%)}.nav-link.active .header-section-number{color:inherit}mark,.mark{padding:0em}.panel-caption,.figure-caption,.subfigure-caption,.table-caption,figcaption,caption{font-size:.9rem;color:hsl(210,10.3448275862%,47.7450980392%)}.quarto-layout-cell[data-ref-parent] caption{color:hsl(210,10.3448275862%,47.7450980392%)}.column-margin figcaption,.margin-caption,div.aside,aside,.column-margin{color:hsl(210,10.3448275862%,47.7450980392%);font-size:.825rem}.panel-caption.margin-caption{text-align:inherit}.column-margin.column-container p{margin-bottom:0}.column-margin.column-container>*:not(.collapse):first-child{padding-bottom:.5em;display:block}.column-margin.column-container>*:not(.collapse):not(:first-child){padding-top:.5em;padding-bottom:.5em;display:block}body.quarto-dark .column-margin.column-container>.light-content+.dark-content{padding-top:0}.column-margin.column-container>*.collapse:not(.show){display:none}@media(min-width: 768px){.column-margin.column-container .callout-margin-content:first-child{margin-top:4.5em}.column-margin.column-container .callout-margin-content-simple:first-child{margin-top:3.5em}}.margin-caption>*{padding-top:.5em;padding-bottom:.5em}@media(max-width: 767.98px){.quarto-layout-row{flex-direction:column}}.nav-tabs .nav-item{margin-top:1px;cursor:pointer}.tab-content{margin-top:0px;border-left:#dee2e6 1px solid;border-right:#dee2e6 1px solid;border-bottom:#dee2e6 1px solid;margin-left:0;padding:1em;margin-bottom:1em}@media(max-width: 767.98px){.layout-sidebar{margin-left:0;margin-right:0}}.panel-sidebar,.panel-sidebar .form-control,.panel-input,.panel-input .form-control,.selectize-dropdown{font-size:.9rem}.panel-sidebar .form-control,.panel-input .form-control{padding-top:.1rem}.tab-pane div.sourceCode{margin-top:0px}.tab-pane>p{padding-top:0}.tab-pane>p:nth-child(1){padding-top:0}.tab-pane>p:last-child{margin-bottom:0}.tab-pane>pre:last-child{margin-bottom:0}.tab-content>.tab-pane:not(.active){display:none !important}div.sourceCode{background-color:rgba(233,236,239,.65);border:1px solid rgba(233,236,239,.65)}pre.sourceCode{background-color:rgba(0,0,0,0)}pre.sourceCode{border:none;font-size:.875em;overflow-y:visible !important;padding:.4em}div.sourceCode{overflow-y:hidden}.callout div.sourceCode{margin-left:initial}.blockquote{font-size:inherit;padding-left:1rem;padding-right:1.5rem;color:hsl(210,10.3448275862%,47.7450980392%)}.blockquote h1:first-child,.blockquote .h1:first-child,.blockquote h2:first-child,.blockquote .h2:first-child,.blockquote h3:first-child,.blockquote .h3:first-child,.blockquote h4:first-child,.blockquote .h4:first-child,.blockquote h5:first-child,.blockquote .h5:first-child{margin-top:0}pre{background-color:initial;padding:initial;border:initial}p code.sourceCode,li code.sourceCode,td code.sourceCode{background-color:rgba(233,236,239,.65)}p pre code:not(.sourceCode),li pre code:not(.sourceCode),pre code:not(.sourceCode){background-color:initial}p code:not(.sourceCode),li code:not(.sourceCode),td code:not(.sourceCode){background-color:rgba(233,236,239,.65);padding:.2em}nav p code:not(.sourceCode),nav li code:not(.sourceCode),nav td code:not(.sourceCode){background-color:rgba(0,0,0,0);padding:0}td code:not(.sourceCode){white-space:pre-wrap}#quarto-embedded-source-code-modal>.modal-dialog{max-width:1000px;padding-left:1.75rem;padding-right:1.75rem}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body{padding:0}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body div.sourceCode{margin:0;padding:.2rem .2rem;border-radius:0px;border:none}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-header{padding:.7rem}.code-tools-button{font-size:1rem;padding:.15rem .15rem;margin-left:5px;color:#6c757d;background-color:rgba(0,0,0,0);transition:initial;cursor:pointer}.code-tools-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}.code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}.sidebar{will-change:top;transition:top 200ms linear;position:sticky;overflow-y:auto;padding-top:1.2em;max-height:100vh}.sidebar.toc-left,.sidebar.margin-sidebar{top:0px;padding-top:1em}.sidebar.quarto-banner-title-block-sidebar>*{padding-top:1.65em}figure .quarto-notebook-link{margin-top:.5em}.quarto-notebook-link{font-size:.75em;color:#6c757d;margin-bottom:1em;text-decoration:none;display:block}.quarto-notebook-link:hover{text-decoration:underline;color:#2761e3}.quarto-notebook-link::before{display:inline-block;height:.75rem;width:.75rem;margin-bottom:0em;margin-right:.25em;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:.75rem .75rem}.toc-actions i.bi,.quarto-code-links i.bi,.quarto-other-links i.bi,.quarto-alternate-notebooks i.bi,.quarto-alternate-formats i.bi{margin-right:.4em;font-size:.8rem}.quarto-other-links-text-target .quarto-code-links i.bi,.quarto-other-links-text-target .quarto-other-links i.bi{margin-right:.2em}.quarto-other-formats-text-target .quarto-alternate-formats i.bi{margin-right:.1em}.toc-actions i.bi.empty,.quarto-code-links i.bi.empty,.quarto-other-links i.bi.empty,.quarto-alternate-notebooks i.bi.empty,.quarto-alternate-formats i.bi.empty{padding-left:1em}.quarto-notebook h2,.quarto-notebook .h2{border-bottom:none}.quarto-notebook .cell-container{display:flex}.quarto-notebook .cell-container .cell{flex-grow:4}.quarto-notebook .cell-container .cell-decorator{padding-top:1.5em;padding-right:1em;text-align:right}.quarto-notebook .cell-container.code-fold .cell-decorator{padding-top:3em}.quarto-notebook .cell-code code{white-space:pre-wrap}.quarto-notebook .cell .cell-output-stderr pre code,.quarto-notebook .cell .cell-output-stdout pre code{white-space:pre-wrap;overflow-wrap:anywhere}.toc-actions,.quarto-alternate-formats,.quarto-other-links,.quarto-code-links,.quarto-alternate-notebooks{padding-left:0em}.sidebar .toc-actions a,.sidebar .quarto-alternate-formats a,.sidebar .quarto-other-links a,.sidebar .quarto-code-links a,.sidebar .quarto-alternate-notebooks a,.sidebar nav[role=doc-toc] a{text-decoration:none}.sidebar .toc-actions a:hover,.sidebar .quarto-other-links a:hover,.sidebar .quarto-code-links a:hover,.sidebar .quarto-alternate-formats a:hover,.sidebar .quarto-alternate-notebooks a:hover{color:#2761e3}.sidebar .toc-actions h2,.sidebar .toc-actions .h2,.sidebar .quarto-code-links h2,.sidebar .quarto-code-links .h2,.sidebar .quarto-other-links h2,.sidebar .quarto-other-links .h2,.sidebar .quarto-alternate-notebooks h2,.sidebar .quarto-alternate-notebooks .h2,.sidebar .quarto-alternate-formats h2,.sidebar .quarto-alternate-formats .h2,.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-weight:500;margin-bottom:.2rem;margin-top:.3rem;font-family:inherit;border-bottom:0;padding-bottom:0;padding-top:0px}.sidebar .toc-actions>h2,.sidebar .toc-actions>.h2,.sidebar .quarto-code-links>h2,.sidebar .quarto-code-links>.h2,.sidebar .quarto-other-links>h2,.sidebar .quarto-other-links>.h2,.sidebar .quarto-alternate-notebooks>h2,.sidebar .quarto-alternate-notebooks>.h2,.sidebar .quarto-alternate-formats>h2,.sidebar .quarto-alternate-formats>.h2{font-size:.8rem}.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-size:.875rem}.sidebar nav[role=doc-toc]>ul a{border-left:1px solid #e9ecef;padding-left:.6rem}.sidebar .toc-actions h2>ul a,.sidebar .toc-actions .h2>ul a,.sidebar .quarto-code-links h2>ul a,.sidebar .quarto-code-links .h2>ul a,.sidebar .quarto-other-links h2>ul a,.sidebar .quarto-other-links .h2>ul a,.sidebar .quarto-alternate-notebooks h2>ul a,.sidebar .quarto-alternate-notebooks .h2>ul a,.sidebar .quarto-alternate-formats h2>ul a,.sidebar .quarto-alternate-formats .h2>ul a{border-left:none;padding-left:.6rem}.sidebar .toc-actions ul a:empty,.sidebar .quarto-code-links ul a:empty,.sidebar .quarto-other-links ul a:empty,.sidebar .quarto-alternate-notebooks ul a:empty,.sidebar .quarto-alternate-formats ul a:empty,.sidebar nav[role=doc-toc]>ul a:empty{display:none}.sidebar .toc-actions ul,.sidebar .quarto-code-links ul,.sidebar .quarto-other-links ul,.sidebar .quarto-alternate-notebooks ul,.sidebar .quarto-alternate-formats ul{padding-left:0;list-style:none}.sidebar nav[role=doc-toc] ul{list-style:none;padding-left:0;list-style:none}.sidebar nav[role=doc-toc]>ul{margin-left:.45em}.quarto-margin-sidebar nav[role=doc-toc]{padding-left:.5em}.sidebar .toc-actions>ul,.sidebar .quarto-code-links>ul,.sidebar .quarto-other-links>ul,.sidebar .quarto-alternate-notebooks>ul,.sidebar .quarto-alternate-formats>ul{font-size:.8rem}.sidebar nav[role=doc-toc]>ul{font-size:.875rem}.sidebar .toc-actions ul li a,.sidebar .quarto-code-links ul li a,.sidebar .quarto-other-links ul li a,.sidebar .quarto-alternate-notebooks ul li a,.sidebar .quarto-alternate-formats ul li a,.sidebar nav[role=doc-toc]>ul li a{line-height:1.1rem;padding-bottom:.2rem;padding-top:.2rem;color:inherit}.sidebar nav[role=doc-toc] ul>li>ul>li>a{padding-left:1.2em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>a{padding-left:2.4em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>a{padding-left:3.6em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:4.8em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:6em}.sidebar nav[role=doc-toc] ul>li>a.active,.sidebar nav[role=doc-toc] ul>li>ul>li>a.active{border-left:1px solid #2761e3;color:#2761e3 !important}.sidebar nav[role=doc-toc] ul>li>a:hover,.sidebar nav[role=doc-toc] ul>li>ul>li>a:hover{color:#2761e3 !important}kbd,.kbd{color:#343a40;background-color:#f8f9fa;border:1px solid;border-radius:5px;border-color:#dee2e6}.quarto-appendix-contents div.hanging-indent{margin-left:0em}.quarto-appendix-contents div.hanging-indent div.csl-entry{margin-left:1em;text-indent:-1em}.citation a,.footnote-ref{text-decoration:none}.footnotes ol{padding-left:1em}.tippy-content>*{margin-bottom:.7em}.tippy-content>*:last-child{margin-bottom:0}.callout{margin-top:1.25rem;margin-bottom:1.25rem;border-radius:.25rem;overflow-wrap:break-word}.callout .callout-title-container{overflow-wrap:anywhere}.callout.callout-style-simple{padding:.4em .7em;border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout.callout-style-default{border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout .callout-body-container{flex-grow:1}.callout.callout-style-simple .callout-body{font-size:.9rem;font-weight:400;margin-bottom:-0.4em;margin-top:.5em}.callout.callout-style-default .callout-body{font-size:.9rem;font-weight:400}.callout:not(.no-icon).callout-titled.callout-style-simple .callout-body{padding-left:1.6em}.callout.callout-titled>.callout-header{padding-top:.2em;margin-bottom:-0.2em}.callout.callout-empty-content>.callout-header{margin-bottom:0em;border-bottom-right-radius:calc(0.25rem + -1px)}.callout>.callout-header.collapsed{border-bottom-right-radius:calc(0.25rem + -1px)}.callout.callout-style-simple>div.callout-header{border-bottom:none;font-size:.9rem;font-weight:600;opacity:75%}.callout.callout-style-default>div.callout-header{border-bottom:none;font-weight:600;opacity:85%;font-size:.9rem;padding-left:.5em;padding-right:.5em;border-top-right-radius:calc(0.25rem + -1px)}.callout.callout-style-default .callout-body{padding-left:.5em;padding-right:.5em}.callout.callout-style-default .callout-body>:first-child{padding-top:.5rem;margin-top:0}.callout>div.callout-header[data-bs-toggle=collapse]{cursor:pointer}.callout.callout-style-default .callout-header[aria-expanded=false],.callout.callout-style-default .callout-header[aria-expanded=true]{padding-top:0px;margin-bottom:0px;align-items:center}.callout.callout-titled .callout-body>:last-child:not(.sourceCode),.callout.callout-titled .callout-body>div>:last-child:not(.sourceCode){padding-bottom:.5rem;margin-bottom:0}.callout:not(.callout-titled) .callout-body>:first-child,.callout:not(.callout-titled) .callout-body>div>:first-child{margin-top:.25rem}.callout:not(.callout-titled) .callout-body>:last-child,.callout:not(.callout-titled) .callout-body>div>:last-child{margin-bottom:.2rem}.callout.callout-style-simple:not(.callout-titled) .callout-body>:last-child,.callout.callout-style-simple:not(.callout-titled) .callout-body>div>:last-child{margin-bottom:.5em}.callout.callout-style-simple .callout-icon::before,.callout.callout-style-simple .callout-toggle::before{height:1rem;width:1rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.callout.callout-style-default .callout-icon::before,.callout.callout-style-default .callout-toggle::before{height:.9rem;width:.9rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:.9rem .9rem}.callout.callout-style-default .callout-toggle::before{margin-top:5px}.callout .callout-btn-toggle .callout-toggle::before{transition:transform .2s linear}.callout .callout-header[aria-expanded=false] .callout-toggle::before{transform:rotate(-90deg)}.callout .callout-header[aria-expanded=true] .callout-toggle::before{transform:none}.callout.callout-style-simple:not(.no-icon) div.callout-icon-container{padding-top:.2em;padding-right:.55em}.callout.callout-style-default:not(.no-icon) div.callout-icon-container{padding-top:.1em;padding-right:.35em}.callout.callout-style-default:not(.no-icon) div.callout-title-container{margin-top:-1px}.callout.callout-style-default.callout-caution:not(.no-icon) div.callout-icon-container{padding-top:.3em;padding-right:.35em}.callout>.callout-body>.callout-icon-container>.no-icon,.callout>.callout-header>.callout-icon-container>.no-icon{display:none}div.callout.callout{border-left-color:#6c757d}div.callout.callout-style-default>.callout-header{background-color:#6c757d}div.callout-note.callout{border-left-color:#2780e3}div.callout-note.callout-style-default>.callout-header{background-color:rgb(233.4,242.3,252.2)}div.callout-note:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-tip.callout{border-left-color:#3fb618}div.callout-tip.callout-style-default>.callout-header{background-color:rgb(235.8,247.7,231.9)}div.callout-tip:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-warning.callout{border-left-color:#ff7518}div.callout-warning.callout-style-default>.callout-header{background-color:rgb(255,241.2,231.9)}div.callout-warning:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-caution.callout{border-left-color:#f0ad4e}div.callout-caution.callout-style-default>.callout-header{background-color:rgb(253.5,246.8,237.3)}div.callout-caution:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-important.callout{border-left-color:#ff0039}div.callout-important.callout-style-default>.callout-header{background-color:rgb(255,229.5,235.2)}div.callout-important:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important .callout-toggle::before{background-image:url('data:image/svg+xml,')}.quarto-toggle-container{display:flex;align-items:center}.quarto-reader-toggle .bi::before,.quarto-color-scheme-toggle .bi::before{display:inline-block;height:1rem;width:1rem;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.sidebar-navigation{padding-left:20px}.navbar{background-color:#f8f9fa;color:rgb(84.32,84.66,85)}.navbar .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.quarto-sidebar-toggle{border-color:#dee2e6;border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;border-style:solid;border-width:1px;overflow:hidden;border-top-width:0px;padding-top:0px !important}.quarto-sidebar-toggle-title{cursor:pointer;padding-bottom:2px;margin-left:.25em;text-align:center;font-weight:400;font-size:.775em}#quarto-content .quarto-sidebar-toggle{background:hsl(0,0%,98%)}#quarto-content .quarto-sidebar-toggle-title{color:#343a40}.quarto-sidebar-toggle-icon{color:#dee2e6;margin-right:.5em;float:right;transition:transform .2s ease}.quarto-sidebar-toggle-icon::before{padding-top:5px}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-icon{transform:rotate(-180deg)}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-title{border-bottom:solid #dee2e6 1px}.quarto-sidebar-toggle-contents{background-color:#fff;padding-right:10px;padding-left:10px;margin-top:0px !important;transition:max-height .5s ease}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-contents{padding-top:1em;padding-bottom:10px}@media(max-width: 767.98px){.sidebar-menu-container{padding-bottom:5em}}.quarto-sidebar-toggle:not(.expanded) .quarto-sidebar-toggle-contents{padding-top:0px !important;padding-bottom:0px}nav[role=doc-toc]{z-index:1020}#quarto-sidebar>*,nav[role=doc-toc]>*{transition:opacity .1s ease,border .1s ease}#quarto-sidebar.slow>*,nav[role=doc-toc].slow>*{transition:opacity .4s ease,border .4s ease}.quarto-color-scheme-toggle:not(.alternate).top-right .bi::before{background-image:url('data:image/svg+xml,')}.quarto-color-scheme-toggle.alternate.top-right .bi::before{background-image:url('data:image/svg+xml,')}#quarto-appendix.default{border-top:1px solid #dee2e6}#quarto-appendix.default{background-color:#fff;padding-top:1.5em;margin-top:2em;z-index:998}#quarto-appendix.default .quarto-appendix-heading{margin-top:0;line-height:1.4em;font-weight:600;opacity:.9;border-bottom:none;margin-bottom:0}#quarto-appendix.default .footnotes ol,#quarto-appendix.default .footnotes ol li>p:last-of-type,#quarto-appendix.default .quarto-appendix-contents>p:last-of-type{margin-bottom:0}#quarto-appendix.default .footnotes ol{margin-left:.5em}#quarto-appendix.default .quarto-appendix-secondary-label{margin-bottom:.4em}#quarto-appendix.default .quarto-appendix-bibtex{font-size:.7em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-bibtex code.sourceCode{white-space:pre-wrap}#quarto-appendix.default .quarto-appendix-citeas{font-size:.9em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-heading{font-size:1em !important}#quarto-appendix.default *[role=doc-endnotes]>ol,#quarto-appendix.default .quarto-appendix-contents>*:not(h2):not(.h2){font-size:.9em}#quarto-appendix.default section{padding-bottom:1.5em}#quarto-appendix.default section *[role=doc-endnotes],#quarto-appendix.default section>*:not(a){opacity:.9;word-wrap:break-word}.btn.btn-quarto,div.cell-output-display .btn-quarto{--bs-btn-color: rgb(202.22, 203.78, 205.34);--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: rgb(202.22, 203.78, 205.34);--bs-btn-hover-bg: rgb(82.45, 87.55, 92.65);--bs-btn-hover-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-focus-shadow-rgb: 75, 80, 85;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(92.6, 97.4, 102.2);--bs-btn-active-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}nav.quarto-secondary-nav.color-navbar{background-color:#f8f9fa;color:rgb(84.32,84.66,85)}nav.quarto-secondary-nav.color-navbar h1,nav.quarto-secondary-nav.color-navbar .h1,nav.quarto-secondary-nav.color-navbar .quarto-btn-toggle{color:rgb(84.32,84.66,85)}@media(max-width: 991.98px){body.nav-sidebar .quarto-title-banner{margin-bottom:0;padding-bottom:1em}body.nav-sidebar #title-block-header{margin-block-end:0}}p.subtitle{margin-top:.25em;margin-bottom:.5em}code a:any-link{color:inherit;text-decoration-color:#6c757d}/*! light */div.observablehq table thead tr th{background-color:var(--bs-body-bg)}input,button,select,optgroup,textarea{background-color:var(--bs-body-bg)}.code-annotated .code-copy-button{margin-right:1.25em;margin-top:0;padding-bottom:0;padding-top:3px}.code-annotation-gutter-bg{background-color:#fff}.code-annotation-gutter{background-color:rgba(233,236,239,.65)}.code-annotation-gutter,.code-annotation-gutter-bg{height:100%;width:calc(20px + .5em);position:absolute;top:0;right:0}dl.code-annotation-container-grid dt{margin-right:1em;margin-top:.25rem}dl.code-annotation-container-grid dt{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;color:rgb(74.8620689655,83.5,92.1379310345);border:solid rgb(74.8620689655,83.5,92.1379310345) 1px;border-radius:50%;height:22px;width:22px;line-height:22px;font-size:11px;text-align:center;vertical-align:middle;text-decoration:none}dl.code-annotation-container-grid dt[data-target-cell]{cursor:pointer}dl.code-annotation-container-grid dt[data-target-cell].code-annotation-active{color:#fff;border:solid #aaa 1px;background-color:#aaa}pre.code-annotation-code{padding-top:0;padding-bottom:0}pre.code-annotation-code code{z-index:3}#code-annotation-line-highlight-gutter{width:100%;border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}#code-annotation-line-highlight{margin-left:-4em;width:calc(100% + 4em);border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}code.sourceCode .code-annotation-anchor.code-annotation-active{background-color:var(--quarto-hl-normal-color, #aaaaaa);border:solid var(--quarto-hl-normal-color, #aaaaaa) 1px;color:#e9ecef;font-weight:bolder}code.sourceCode .code-annotation-anchor{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;color:var(--quarto-hl-co-color);border:solid var(--quarto-hl-co-color) 1px;border-radius:50%;height:18px;width:18px;font-size:9px;margin-top:2px}code.sourceCode button.code-annotation-anchor{padding:2px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none}code.sourceCode a.code-annotation-anchor{line-height:18px;text-align:center;vertical-align:middle;cursor:default;text-decoration:none}@media print{.page-columns .column-screen-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:page-start-inset/page-end-inset;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}}.quarto-video{margin-bottom:1em}.table{border-top:1px solid rgb(214.4,215.6,216.8);border-bottom:1px solid rgb(214.4,215.6,216.8)}.table>thead{border-top-width:0;border-bottom:1px solid rgb(153.5,156.5,159.5)}.table a{word-break:break-word}.table>:not(caption)>*>*{background-color:unset;color:unset}#quarto-document-content .crosstalk-input .checkbox input[type=checkbox],#quarto-document-content .crosstalk-input .checkbox-inline input[type=checkbox]{position:unset;margin-top:unset;margin-left:unset}#quarto-document-content .row{margin-left:unset;margin-right:unset}.quarto-xref{white-space:nowrap}#quarto-draft-alert{margin-top:0px;margin-bottom:0px;padding:.3em;text-align:center;font-size:.9em}#quarto-draft-alert i{margin-right:.3em}#quarto-back-to-top{z-index:1000}pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:0.875em;font-weight:400}pre code{font-family:inherit;font-size:inherit;font-weight:inherit}code{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:0.875em;font-weight:400}a{background-color:rgba(0,0,0,0);font-weight:400;text-decoration:underline}.screen-reader-only{position:absolute;clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;width:1px}a.external:after{content:"";background-image:url('data:image/svg+xml,');background-size:contain;background-repeat:no-repeat;background-position:center center;margin-left:.2em;padding-right:.75em}div.sourceCode code a.external:after{content:none}a.external:after:hover{cursor:pointer}.quarto-ext-icon{display:inline-block;font-size:.75em;padding-left:.3em}.code-with-filename .code-with-filename-file{margin-bottom:0;padding-bottom:2px;padding-top:2px;padding-left:.7em;border:var(--quarto-border-width) solid var(--quarto-border-color);border-radius:var(--quarto-border-radius);border-bottom:0;border-bottom-left-radius:0%;border-bottom-right-radius:0%}.code-with-filename div.sourceCode,.reveal .code-with-filename div.sourceCode{margin-top:0;border-top-left-radius:0%;border-top-right-radius:0%}.code-with-filename .code-with-filename-file pre{margin-bottom:0}.code-with-filename .code-with-filename-file{background-color:rgba(219,219,219,.8)}.quarto-dark .code-with-filename .code-with-filename-file{background-color:#555}.code-with-filename .code-with-filename-file strong{font-weight:400}.quarto-title-banner{margin-bottom:1em;color:rgb(84.32,84.66,85);background:#f8f9fa}.quarto-title-banner a{color:rgb(84.32,84.66,85)}.quarto-title-banner h1,.quarto-title-banner .h1,.quarto-title-banner h2,.quarto-title-banner .h2{color:rgb(84.32,84.66,85)}.quarto-title-banner .code-tools-button{color:hsl(210,.4016064257%,53.2%)}.quarto-title-banner .code-tools-button:hover{color:rgb(84.32,84.66,85)}.quarto-title-banner .code-tools-button>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .quarto-title .title{font-weight:600}.quarto-title-banner .quarto-categories{margin-top:.75em}@media(min-width: 992px){.quarto-title-banner{padding-top:2.5em;padding-bottom:2.5em}}@media(max-width: 991.98px){.quarto-title-banner{padding-top:1em;padding-bottom:1em}}@media(max-width: 767.98px){body.hypothesis-enabled #title-block-header>*{padding-right:20px}}main.quarto-banner-title-block>section:first-child>h2,main.quarto-banner-title-block>section:first-child>.h2,main.quarto-banner-title-block>section:first-child>h3,main.quarto-banner-title-block>section:first-child>.h3,main.quarto-banner-title-block>section:first-child>h4,main.quarto-banner-title-block>section:first-child>.h4{margin-top:0}.quarto-title .quarto-categories{display:flex;flex-wrap:wrap;row-gap:.5em;column-gap:.4em;padding-bottom:.5em;margin-top:.75em}.quarto-title .quarto-categories .quarto-category{padding:.25em .75em;font-size:.65em;text-transform:uppercase;border:solid 1px;border-radius:.25rem;opacity:.6}.quarto-title .quarto-categories .quarto-category a{color:inherit}.quarto-title-meta-container{display:grid;grid-template-columns:1fr auto}.quarto-title-meta-column-end{display:flex;flex-direction:column;padding-left:1em}.quarto-title-meta-column-end a .bi{margin-right:.3em}#title-block-header.quarto-title-block.default .quarto-title-meta{display:grid;grid-template-columns:repeat(2, 1fr);grid-column-gap:1em}#title-block-header.quarto-title-block.default .quarto-title .title{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-author-orcid img{margin-top:-0.2em;height:.8em;width:.8em}#title-block-header.quarto-title-block.default .quarto-title-author-email{opacity:.7}#title-block-header.quarto-title-block.default .quarto-description p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p,#title-block-header.quarto-title-block.default .quarto-title-authors p,#title-block-header.quarto-title-block.default .quarto-title-affiliations p{margin-bottom:.1em}#title-block-header.quarto-title-block.default .quarto-title-meta-heading{text-transform:uppercase;margin-top:1em;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-contents{font-size:.9em}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p.affiliation:last-of-type{margin-bottom:.1em}#title-block-header.quarto-title-block.default p.affiliation{margin-bottom:.1em}#title-block-header.quarto-title-block.default .keywords,#title-block-header.quarto-title-block.default .description,#title-block-header.quarto-title-block.default .abstract{margin-top:0}#title-block-header.quarto-title-block.default .keywords>p,#title-block-header.quarto-title-block.default .description>p,#title-block-header.quarto-title-block.default .abstract>p{font-size:.9em}#title-block-header.quarto-title-block.default .keywords>p:last-of-type,#title-block-header.quarto-title-block.default .description>p:last-of-type,#title-block-header.quarto-title-block.default .abstract>p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .keywords .block-title,#title-block-header.quarto-title-block.default .description .block-title,#title-block-header.quarto-title-block.default .abstract .block-title{margin-top:1em;text-transform:uppercase;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-author{display:grid;grid-template-columns:minmax(max-content, 1fr) 1fr;grid-column-gap:1em}.quarto-title-tools-only{display:flex;justify-content:right}body{-webkit-font-smoothing:antialiased}.badge.bg-light{color:#343a40}.progress .progress-bar{font-size:8px;line-height:8px}:root{--quarto-scss-export-gray-300: #dee2e6;--quarto-scss-export-gray-500: #adb5bd;--quarto-scss-export-gray-600: #6c757d;--quarto-scss-export-gray-800: #343a40;--quarto-scss-export-card-cap-bg: rgba(52, 58, 64, 0.25);--quarto-scss-export-border-color: #dee2e6;--quarto-scss-export-text-muted: #6c757d;--quarto-scss-export-white: #fff;--quarto-scss-export-gray-100: #f8f9fa;--quarto-scss-export-gray-200: #e9ecef;--quarto-scss-export-gray-400: #ced4da;--quarto-scss-export-gray-700: #495057;--quarto-scss-export-gray-900: #212529;--quarto-scss-export-black: #000;--quarto-scss-export-blue: #2780e3;--quarto-scss-export-indigo: #6610f2;--quarto-scss-export-purple: #613d7c;--quarto-scss-export-pink: #e83e8c;--quarto-scss-export-red: #ff0039;--quarto-scss-export-orange: #f0ad4e;--quarto-scss-export-yellow: #ff7518;--quarto-scss-export-green: #3fb618;--quarto-scss-export-teal: #20c997;--quarto-scss-export-cyan: #9954bb;--quarto-scss-export-primary: #2780e3;--quarto-scss-export-secondary: #343a40;--quarto-scss-export-success: #3fb618;--quarto-scss-export-info: #9954bb;--quarto-scss-export-warning: #ff7518;--quarto-scss-export-danger: #ff0039;--quarto-scss-export-light: #f8f9fa;--quarto-scss-export-dark: #343a40;--quarto-scss-export-body-color: #343a40;--quarto-scss-export-title-banner-color: ;--quarto-scss-export-title-banner-bg: ;--quarto-scss-export-btn-code-copy-color: #5E5E5E;--quarto-scss-export-btn-code-copy-color-active: #4758AB;--quarto-scss-export-sidebar-bg: #fff;--quarto-scss-export-link-color: #2761e3;--quarto-scss-export-link-color-bg: transparent;--quarto-scss-export-code-color: #7d12ba;--quarto-scss-export-code-bg: #f8f9fa;--quarto-scss-export-toc-color: #2761e3;--quarto-scss-export-toc-active-border: #2761e3;--quarto-scss-export-toc-inactive-border: #e9ecef;--quarto-scss-export-navbar-default: #2780e3;--quarto-scss-export-navbar-hl-override: false;--quarto-scss-export-navbar-bg: #f8f9fa;--quarto-scss-export-btn-bg: #343a40;--quarto-scss-export-btn-fg: rgb(202.22, 203.78, 205.34);--quarto-scss-export-body-contrast-bg: #fff;--quarto-scss-export-body-contrast-color: #343a40;--quarto-scss-export-navbar-fg: rgb(84.32, 84.66, 85);--quarto-scss-export-navbar-hl: rgb(31.2, 77.6, 181.6);--quarto-scss-export-navbar-brand: rgb(84.32, 84.66, 85);--quarto-scss-export-navbar-brand-hl: rgb(31.2, 77.6, 181.6);--quarto-scss-export-navbar-toggler-border-color: rgba(84.32, 84.66, 85, 0);--quarto-scss-export-navbar-hover-color: rgba(31.2, 77.6, 181.6, 0.8);--quarto-scss-export-navbar-disabled-color: rgba(84.32, 84.66, 85, 0.75);--quarto-scss-export-sidebar-fg: rgb(89.25, 89.25, 89.25);--quarto-scss-export-title-block-color: #343a40;--quarto-scss-export-title-block-contast-color: #fff;--quarto-scss-export-footer-bg: #fff;--quarto-scss-export-footer-fg: rgb(117.3, 117.3, 117.3);--quarto-scss-export-popover-bg: #fff;--quarto-scss-export-input-bg: #fff;--quarto-scss-export-input-border-color: #dee2e6;--quarto-scss-export-code-annotation-higlight-color: rgba(170, 170, 170, 0.2666666667);--quarto-scss-export-code-annotation-higlight-bg: rgba(170, 170, 170, 0.1333333333);--quarto-scss-export-table-group-separator-color: rgb(153.5, 156.5, 159.5);--quarto-scss-export-table-group-separator-color-lighter: rgb(214.4, 215.6, 216.8);--quarto-scss-export-link-decoration: underline;--quarto-scss-export-table-border-color: #dee2e6;--quarto-scss-export-sidebar-glass-bg: rgba(102, 102, 102, 0.4);--quarto-scss-export-color-contrast-dark: #000;--quarto-scss-export-color-contrast-light: #fff;--quarto-scss-export-blue-100: rgb(211.8, 229.6, 249.4);--quarto-scss-export-blue-200: rgb(168.6, 204.2, 243.8);--quarto-scss-export-blue-300: rgb(125.4, 178.8, 238.2);--quarto-scss-export-blue-400: rgb(82.2, 153.4, 232.6);--quarto-scss-export-blue-500: #2780e3;--quarto-scss-export-blue-600: rgb(31.2, 102.4, 181.6);--quarto-scss-export-blue-700: rgb(23.4, 76.8, 136.2);--quarto-scss-export-blue-800: rgb(15.6, 51.2, 90.8);--quarto-scss-export-blue-900: rgb(7.8, 25.6, 45.4);--quarto-scss-export-indigo-100: rgb(224.4, 207.2, 252.4);--quarto-scss-export-indigo-200: rgb(193.8, 159.4, 249.8);--quarto-scss-export-indigo-300: rgb(163.2, 111.6, 247.2);--quarto-scss-export-indigo-400: rgb(132.6, 63.8, 244.6);--quarto-scss-export-indigo-500: #6610f2;--quarto-scss-export-indigo-600: rgb(81.6, 12.8, 193.6);--quarto-scss-export-indigo-700: rgb(61.2, 9.6, 145.2);--quarto-scss-export-indigo-800: rgb(40.8, 6.4, 96.8);--quarto-scss-export-indigo-900: rgb(20.4, 3.2, 48.4);--quarto-scss-export-purple-100: rgb(223.4, 216.2, 228.8);--quarto-scss-export-purple-200: rgb(191.8, 177.4, 202.6);--quarto-scss-export-purple-300: rgb(160.2, 138.6, 176.4);--quarto-scss-export-purple-400: rgb(128.6, 99.8, 150.2);--quarto-scss-export-purple-500: #613d7c;--quarto-scss-export-purple-600: rgb(77.6, 48.8, 99.2);--quarto-scss-export-purple-700: rgb(58.2, 36.6, 74.4);--quarto-scss-export-purple-800: rgb(38.8, 24.4, 49.6);--quarto-scss-export-purple-900: rgb(19.4, 12.2, 24.8);--quarto-scss-export-pink-100: rgb(250.4, 216.4, 232);--quarto-scss-export-pink-200: rgb(245.8, 177.8, 209);--quarto-scss-export-pink-300: rgb(241.2, 139.2, 186);--quarto-scss-export-pink-400: rgb(236.6, 100.6, 163);--quarto-scss-export-pink-500: #e83e8c;--quarto-scss-export-pink-600: rgb(185.6, 49.6, 112);--quarto-scss-export-pink-700: rgb(139.2, 37.2, 84);--quarto-scss-export-pink-800: rgb(92.8, 24.8, 56);--quarto-scss-export-pink-900: rgb(46.4, 12.4, 28);--quarto-scss-export-red-100: rgb(255, 204, 215.4);--quarto-scss-export-red-200: rgb(255, 153, 175.8);--quarto-scss-export-red-300: rgb(255, 102, 136.2);--quarto-scss-export-red-400: rgb(255, 51, 96.6);--quarto-scss-export-red-500: #ff0039;--quarto-scss-export-red-600: rgb(204, 0, 45.6);--quarto-scss-export-red-700: rgb(153, 0, 34.2);--quarto-scss-export-red-800: rgb(102, 0, 22.8);--quarto-scss-export-red-900: rgb(51, 0, 11.4);--quarto-scss-export-orange-100: rgb(252, 238.6, 219.6);--quarto-scss-export-orange-200: rgb(249, 222.2, 184.2);--quarto-scss-export-orange-300: rgb(246, 205.8, 148.8);--quarto-scss-export-orange-400: rgb(243, 189.4, 113.4);--quarto-scss-export-orange-500: #f0ad4e;--quarto-scss-export-orange-600: rgb(192, 138.4, 62.4);--quarto-scss-export-orange-700: rgb(144, 103.8, 46.8);--quarto-scss-export-orange-800: rgb(96, 69.2, 31.2);--quarto-scss-export-orange-900: rgb(48, 34.6, 15.6);--quarto-scss-export-yellow-100: rgb(255, 227.4, 208.8);--quarto-scss-export-yellow-200: rgb(255, 199.8, 162.6);--quarto-scss-export-yellow-300: rgb(255, 172.2, 116.4);--quarto-scss-export-yellow-400: rgb(255, 144.6, 70.2);--quarto-scss-export-yellow-500: #ff7518;--quarto-scss-export-yellow-600: rgb(204, 93.6, 19.2);--quarto-scss-export-yellow-700: rgb(153, 70.2, 14.4);--quarto-scss-export-yellow-800: rgb(102, 46.8, 9.6);--quarto-scss-export-yellow-900: rgb(51, 23.4, 4.8);--quarto-scss-export-green-100: rgb(216.6, 240.4, 208.8);--quarto-scss-export-green-200: rgb(178.2, 225.8, 162.6);--quarto-scss-export-green-300: rgb(139.8, 211.2, 116.4);--quarto-scss-export-green-400: rgb(101.4, 196.6, 70.2);--quarto-scss-export-green-500: #3fb618;--quarto-scss-export-green-600: rgb(50.4, 145.6, 19.2);--quarto-scss-export-green-700: rgb(37.8, 109.2, 14.4);--quarto-scss-export-green-800: rgb(25.2, 72.8, 9.6);--quarto-scss-export-green-900: rgb(12.6, 36.4, 4.8);--quarto-scss-export-teal-100: rgb(210.4, 244.2, 234.2);--quarto-scss-export-teal-200: rgb(165.8, 233.4, 213.4);--quarto-scss-export-teal-300: rgb(121.2, 222.6, 192.6);--quarto-scss-export-teal-400: rgb(76.6, 211.8, 171.8);--quarto-scss-export-teal-500: #20c997;--quarto-scss-export-teal-600: rgb(25.6, 160.8, 120.8);--quarto-scss-export-teal-700: rgb(19.2, 120.6, 90.6);--quarto-scss-export-teal-800: rgb(12.8, 80.4, 60.4);--quarto-scss-export-teal-900: rgb(6.4, 40.2, 30.2);--quarto-scss-export-cyan-100: rgb(234.6, 220.8, 241.4);--quarto-scss-export-cyan-200: rgb(214.2, 186.6, 227.8);--quarto-scss-export-cyan-300: rgb(193.8, 152.4, 214.2);--quarto-scss-export-cyan-400: rgb(173.4, 118.2, 200.6);--quarto-scss-export-cyan-500: #9954bb;--quarto-scss-export-cyan-600: rgb(122.4, 67.2, 149.6);--quarto-scss-export-cyan-700: rgb(91.8, 50.4, 112.2);--quarto-scss-export-cyan-800: rgb(61.2, 33.6, 74.8);--quarto-scss-export-cyan-900: rgb(30.6, 16.8, 37.4);--quarto-scss-export-default: #343a40;--quarto-scss-export-primary-text-emphasis: rgb(15.6, 51.2, 90.8);--quarto-scss-export-secondary-text-emphasis: rgb(20.8, 23.2, 25.6);--quarto-scss-export-success-text-emphasis: rgb(25.2, 72.8, 9.6);--quarto-scss-export-info-text-emphasis: rgb(61.2, 33.6, 74.8);--quarto-scss-export-warning-text-emphasis: rgb(102, 46.8, 9.6);--quarto-scss-export-danger-text-emphasis: rgb(102, 0, 22.8);--quarto-scss-export-light-text-emphasis: #495057;--quarto-scss-export-dark-text-emphasis: #495057;--quarto-scss-export-primary-bg-subtle: rgb(211.8, 229.6, 249.4);--quarto-scss-export-secondary-bg-subtle: rgb(214.4, 215.6, 216.8);--quarto-scss-export-success-bg-subtle: rgb(216.6, 240.4, 208.8);--quarto-scss-export-info-bg-subtle: rgb(234.6, 220.8, 241.4);--quarto-scss-export-warning-bg-subtle: rgb(255, 227.4, 208.8);--quarto-scss-export-danger-bg-subtle: rgb(255, 204, 215.4);--quarto-scss-export-light-bg-subtle: rgb(251.5, 252, 252.5);--quarto-scss-export-dark-bg-subtle: #ced4da;--quarto-scss-export-primary-border-subtle: rgb(168.6, 204.2, 243.8);--quarto-scss-export-secondary-border-subtle: rgb(173.8, 176.2, 178.6);--quarto-scss-export-success-border-subtle: rgb(178.2, 225.8, 162.6);--quarto-scss-export-info-border-subtle: rgb(214.2, 186.6, 227.8);--quarto-scss-export-warning-border-subtle: rgb(255, 199.8, 162.6);--quarto-scss-export-danger-border-subtle: rgb(255, 153, 175.8);--quarto-scss-export-light-border-subtle: #e9ecef;--quarto-scss-export-dark-border-subtle: #adb5bd;--quarto-scss-export-body-text-align: ;--quarto-scss-export-body-bg: #fff;--quarto-scss-export-body-secondary-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-body-secondary-bg: #e9ecef;--quarto-scss-export-body-tertiary-color: rgba(52, 58, 64, 0.5);--quarto-scss-export-body-tertiary-bg: #f8f9fa;--quarto-scss-export-body-emphasis-color: #000;--quarto-scss-export-link-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-link-hover-decoration: ;--quarto-scss-export-border-color-translucent: rgba(0, 0, 0, 0.175);--quarto-scss-export-component-active-bg: #2780e3;--quarto-scss-export-component-active-color: #fff;--quarto-scss-export-focus-ring-color: rgba(39, 128, 227, 0.25);--quarto-scss-export-headings-font-family: ;--quarto-scss-export-headings-font-style: ;--quarto-scss-export-display-font-family: ;--quarto-scss-export-display-font-style: ;--quarto-scss-export-blockquote-footer-color: #6c757d;--quarto-scss-export-blockquote-border-color: #e9ecef;--quarto-scss-export-hr-bg-color: ;--quarto-scss-export-hr-height: ;--quarto-scss-export-hr-border-color: ;--quarto-scss-export-legend-font-weight: ;--quarto-scss-export-mark-bg: rgb(255, 227.4, 208.8);--quarto-scss-export-table-color: #343a40;--quarto-scss-export-table-bg: #fff;--quarto-scss-export-table-accent-bg: transparent;--quarto-scss-export-table-th-font-weight: ;--quarto-scss-export-table-striped-color: #343a40;--quarto-scss-export-table-striped-bg: rgba(0, 0, 0, 0.05);--quarto-scss-export-table-active-color: #343a40;--quarto-scss-export-table-active-bg: rgba(0, 0, 0, 0.1);--quarto-scss-export-table-hover-color: #343a40;--quarto-scss-export-table-hover-bg: rgba(0, 0, 0, 0.075);--quarto-scss-export-table-caption-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-input-btn-font-family: ;--quarto-scss-export-input-btn-focus-color: rgba(39, 128, 227, 0.25);--quarto-scss-export-btn-color: #343a40;--quarto-scss-export-btn-font-family: ;--quarto-scss-export-btn-white-space: ;--quarto-scss-export-btn-link-color: #2761e3;--quarto-scss-export-btn-link-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-btn-link-disabled-color: #6c757d;--quarto-scss-export-form-text-font-style: ;--quarto-scss-export-form-text-font-weight: ;--quarto-scss-export-form-text-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-form-label-font-size: ;--quarto-scss-export-form-label-font-style: ;--quarto-scss-export-form-label-font-weight: ;--quarto-scss-export-form-label-color: ;--quarto-scss-export-input-font-family: ;--quarto-scss-export-input-disabled-color: ;--quarto-scss-export-input-disabled-bg: #e9ecef;--quarto-scss-export-input-disabled-border-color: ;--quarto-scss-export-input-color: #343a40;--quarto-scss-export-input-focus-bg: #fff;--quarto-scss-export-input-focus-border-color: rgb(147, 191.5, 241);--quarto-scss-export-input-focus-color: #343a40;--quarto-scss-export-input-placeholder-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-input-plaintext-color: #343a40;--quarto-scss-export-form-check-label-color: ;--quarto-scss-export-form-check-transition: ;--quarto-scss-export-form-check-input-bg: #fff;--quarto-scss-export-form-check-input-focus-border: rgb(147, 191.5, 241);--quarto-scss-export-form-check-input-checked-color: #fff;--quarto-scss-export-form-check-input-checked-bg-color: #2780e3;--quarto-scss-export-form-check-input-checked-border-color: #2780e3;--quarto-scss-export-form-check-input-indeterminate-color: #fff;--quarto-scss-export-form-check-input-indeterminate-bg-color: #2780e3;--quarto-scss-export-form-check-input-indeterminate-border-color: #2780e3;--quarto-scss-export-form-switch-color: rgba(0, 0, 0, 0.25);--quarto-scss-export-form-switch-focus-color: rgb(147, 191.5, 241);--quarto-scss-export-form-switch-checked-color: #fff;--quarto-scss-export-input-group-addon-color: #343a40;--quarto-scss-export-input-group-addon-bg: #f8f9fa;--quarto-scss-export-input-group-addon-border-color: #dee2e6;--quarto-scss-export-form-select-font-family: ;--quarto-scss-export-form-select-color: #343a40;--quarto-scss-export-form-select-bg: #fff;--quarto-scss-export-form-select-disabled-color: ;--quarto-scss-export-form-select-disabled-bg: #e9ecef;--quarto-scss-export-form-select-disabled-border-color: ;--quarto-scss-export-form-select-indicator-color: #343a40;--quarto-scss-export-form-select-border-color: #dee2e6;--quarto-scss-export-form-select-focus-border-color: rgb(147, 191.5, 241);--quarto-scss-export-form-range-track-bg: #f8f9fa;--quarto-scss-export-form-range-thumb-bg: #2780e3;--quarto-scss-export-form-range-thumb-active-bg: rgb(190.2, 216.9, 246.6);--quarto-scss-export-form-range-thumb-disabled-bg: rgba(52, 58, 64, 0.75);--quarto-scss-export-form-file-button-color: #343a40;--quarto-scss-export-form-file-button-bg: #f8f9fa;--quarto-scss-export-form-file-button-hover-bg: #e9ecef;--quarto-scss-export-form-floating-label-disabled-color: #6c757d;--quarto-scss-export-form-feedback-font-style: ;--quarto-scss-export-form-feedback-valid-color: #3fb618;--quarto-scss-export-form-feedback-invalid-color: #ff0039;--quarto-scss-export-form-feedback-icon-valid-color: #3fb618;--quarto-scss-export-form-feedback-icon-invalid-color: #ff0039;--quarto-scss-export-form-valid-color: #3fb618;--quarto-scss-export-form-valid-border-color: #3fb618;--quarto-scss-export-form-invalid-color: #ff0039;--quarto-scss-export-form-invalid-border-color: #ff0039;--quarto-scss-export-nav-link-font-size: ;--quarto-scss-export-nav-link-font-weight: ;--quarto-scss-export-nav-link-color: #2761e3;--quarto-scss-export-nav-link-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-nav-link-disabled-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-nav-tabs-border-color: #dee2e6;--quarto-scss-export-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--quarto-scss-export-nav-tabs-link-active-color: #000;--quarto-scss-export-nav-tabs-link-active-bg: #fff;--quarto-scss-export-nav-pills-link-active-bg: #2780e3;--quarto-scss-export-nav-pills-link-active-color: #fff;--quarto-scss-export-nav-underline-link-active-color: #000;--quarto-scss-export-navbar-padding-x: ;--quarto-scss-export-navbar-light-contrast: #000;--quarto-scss-export-navbar-dark-contrast: #000;--quarto-scss-export-navbar-light-icon-color: rgba(0, 0, 0, 0.75);--quarto-scss-export-navbar-dark-icon-color: rgba(0, 0, 0, 0.75);--quarto-scss-export-dropdown-color: #343a40;--quarto-scss-export-dropdown-bg: #fff;--quarto-scss-export-dropdown-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-link-color: #343a40;--quarto-scss-export-dropdown-link-hover-color: #343a40;--quarto-scss-export-dropdown-link-hover-bg: #f8f9fa;--quarto-scss-export-dropdown-link-active-bg: #2780e3;--quarto-scss-export-dropdown-link-active-color: #fff;--quarto-scss-export-dropdown-link-disabled-color: rgba(52, 58, 64, 0.5);--quarto-scss-export-dropdown-header-color: #6c757d;--quarto-scss-export-dropdown-dark-color: #dee2e6;--quarto-scss-export-dropdown-dark-bg: #343a40;--quarto-scss-export-dropdown-dark-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-dark-divider-bg: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-dark-box-shadow: ;--quarto-scss-export-dropdown-dark-link-color: #dee2e6;--quarto-scss-export-dropdown-dark-link-hover-color: #fff;--quarto-scss-export-dropdown-dark-link-hover-bg: rgba(255, 255, 255, 0.15);--quarto-scss-export-dropdown-dark-link-active-color: #fff;--quarto-scss-export-dropdown-dark-link-active-bg: #2780e3;--quarto-scss-export-dropdown-dark-link-disabled-color: #adb5bd;--quarto-scss-export-dropdown-dark-header-color: #adb5bd;--quarto-scss-export-pagination-color: #2761e3;--quarto-scss-export-pagination-bg: #fff;--quarto-scss-export-pagination-border-color: #dee2e6;--quarto-scss-export-pagination-focus-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-pagination-focus-bg: #e9ecef;--quarto-scss-export-pagination-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-pagination-hover-bg: #f8f9fa;--quarto-scss-export-pagination-hover-border-color: #dee2e6;--quarto-scss-export-pagination-active-color: #fff;--quarto-scss-export-pagination-active-bg: #2780e3;--quarto-scss-export-pagination-active-border-color: #2780e3;--quarto-scss-export-pagination-disabled-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-pagination-disabled-bg: #e9ecef;--quarto-scss-export-pagination-disabled-border-color: #dee2e6;--quarto-scss-export-card-title-color: ;--quarto-scss-export-card-subtitle-color: ;--quarto-scss-export-card-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-card-box-shadow: ;--quarto-scss-export-card-cap-color: ;--quarto-scss-export-card-height: ;--quarto-scss-export-card-color: ;--quarto-scss-export-card-bg: #fff;--quarto-scss-export-accordion-color: #343a40;--quarto-scss-export-accordion-bg: #fff;--quarto-scss-export-accordion-border-color: #dee2e6;--quarto-scss-export-accordion-button-color: #343a40;--quarto-scss-export-accordion-button-bg: #fff;--quarto-scss-export-accordion-button-active-bg: rgb(211.8, 229.6, 249.4);--quarto-scss-export-accordion-button-active-color: rgb(15.6, 51.2, 90.8);--quarto-scss-export-accordion-button-focus-border-color: rgb(147, 191.5, 241);--quarto-scss-export-accordion-icon-color: #343a40;--quarto-scss-export-accordion-icon-active-color: rgb(15.6, 51.2, 90.8);--quarto-scss-export-tooltip-color: #fff;--quarto-scss-export-tooltip-bg: #000;--quarto-scss-export-tooltip-margin: ;--quarto-scss-export-tooltip-arrow-color: ;--quarto-scss-export-form-feedback-tooltip-line-height: ;--quarto-scss-export-popover-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-popover-header-bg: #e9ecef;--quarto-scss-export-popover-body-color: #343a40;--quarto-scss-export-popover-arrow-color: #fff;--quarto-scss-export-popover-arrow-outer-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-toast-color: ;--quarto-scss-export-toast-background-color: rgba(255, 255, 255, 0.85);--quarto-scss-export-toast-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-toast-header-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-toast-header-background-color: rgba(255, 255, 255, 0.85);--quarto-scss-export-toast-header-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-badge-color: #fff;--quarto-scss-export-modal-content-color: ;--quarto-scss-export-modal-content-bg: #fff;--quarto-scss-export-modal-content-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-modal-backdrop-bg: #000;--quarto-scss-export-modal-header-border-color: #dee2e6;--quarto-scss-export-modal-footer-bg: ;--quarto-scss-export-modal-footer-border-color: #dee2e6;--quarto-scss-export-progress-bg: #e9ecef;--quarto-scss-export-progress-bar-color: #fff;--quarto-scss-export-progress-bar-bg: #2780e3;--quarto-scss-export-list-group-color: #343a40;--quarto-scss-export-list-group-bg: #fff;--quarto-scss-export-list-group-border-color: #dee2e6;--quarto-scss-export-list-group-hover-bg: #f8f9fa;--quarto-scss-export-list-group-active-bg: #2780e3;--quarto-scss-export-list-group-active-color: #fff;--quarto-scss-export-list-group-active-border-color: #2780e3;--quarto-scss-export-list-group-disabled-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-list-group-disabled-bg: #fff;--quarto-scss-export-list-group-action-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-list-group-action-hover-color: #000;--quarto-scss-export-list-group-action-active-color: #343a40;--quarto-scss-export-list-group-action-active-bg: #e9ecef;--quarto-scss-export-thumbnail-bg: #fff;--quarto-scss-export-thumbnail-border-color: #dee2e6;--quarto-scss-export-figure-caption-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-breadcrumb-font-size: ;--quarto-scss-export-breadcrumb-bg: ;--quarto-scss-export-breadcrumb-divider-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-breadcrumb-active-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-breadcrumb-border-radius: ;--quarto-scss-export-carousel-control-color: #fff;--quarto-scss-export-carousel-indicator-active-bg: #fff;--quarto-scss-export-carousel-caption-color: #fff;--quarto-scss-export-carousel-dark-indicator-active-bg: #000;--quarto-scss-export-carousel-dark-caption-color: #000;--quarto-scss-export-btn-close-color: #000;--quarto-scss-export-offcanvas-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-offcanvas-bg-color: #fff;--quarto-scss-export-offcanvas-color: #343a40;--quarto-scss-export-offcanvas-backdrop-bg: #000;--quarto-scss-export-code-color-dark: white;--quarto-scss-export-kbd-color: #fff;--quarto-scss-export-kbd-bg: #343a40;--quarto-scss-export-nested-kbd-font-weight: ;--quarto-scss-export-pre-bg: #f8f9fa;--quarto-scss-export-pre-color: #000;--quarto-scss-export-bslib-page-sidebar-title-bg: #f8f9fa;--quarto-scss-export-bslib-page-sidebar-title-color: #000;--quarto-scss-export-bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--quarto-scss-export-bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--quarto-scss-export-sidebar-color: rgb(89.25, 89.25, 89.25);--quarto-scss-export-sidebar-hover-color: rgba(32.76, 81.48, 190.68, 0.8);--quarto-scss-export-sidebar-disabled-color: rgba(89.25, 89.25, 89.25, 0.75);--quarto-scss-export-valuebox-bg-primary: #5397e9;--quarto-scss-export-valuebox-bg-secondary: #343a40;--quarto-scss-export-valuebox-bg-success: #3aa716;--quarto-scss-export-valuebox-bg-info: rgba(153, 84, 187, 0.7019607843);--quarto-scss-export-valuebox-bg-warning: #fa6400;--quarto-scss-export-valuebox-bg-danger: rgba(255, 0, 57, 0.7019607843);--quarto-scss-export-valuebox-bg-light: #f8f9fa;--quarto-scss-export-valuebox-bg-dark: #343a40;--quarto-scss-export-mermaid-bg-color: #fff;--quarto-scss-export-mermaid-edge-color: #343a40;--quarto-scss-export-mermaid-node-fg-color: #343a40;--quarto-scss-export-mermaid-fg-color: #343a40;--quarto-scss-export-mermaid-fg-color--lighter: rgb(74.8620689655, 83.5, 92.1379310345);--quarto-scss-export-mermaid-fg-color--lightest: rgb(97.724137931, 109, 120.275862069);--quarto-scss-export-mermaid-label-bg-color: #fff;--quarto-scss-export-mermaid-label-fg-color: #2780e3;--quarto-scss-export-mermaid-node-bg-color: rgba(39, 128, 227, 0.1);--quarto-scss-export-code-block-border-left-color: #dee2e6;--quarto-scss-export-callout-color-note: #2780e3;--quarto-scss-export-callout-color-tip: #3fb618;--quarto-scss-export-callout-color-important: #ff0039;--quarto-scss-export-callout-color-caution: #f0ad4e;--quarto-scss-export-callout-color-warning: #ff7518} \ No newline at end of file diff --git a/site_libs/bootstrap/bootstrap-icons.css b/site_libs/bootstrap/bootstrap-icons.css deleted file mode 100644 index 82b40f5..0000000 --- a/site_libs/bootstrap/bootstrap-icons.css +++ /dev/null @@ -1,2106 +0,0 @@ -/*! - * Bootstrap Icons v1.13.1 (https://icons.getbootstrap.com/) - * Copyright 2019-2024 The Bootstrap Authors - * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE) - */ - -@font-face { - font-display: block; - font-family: "bootstrap-icons"; - src: -url("./bootstrap-icons.woff?e34853135f9e39acf64315236852cd5a") format("woff"); -} - -.bi::before, -[class^="bi-"]::before, -[class*=" bi-"]::before { - display: inline-block; - font-family: bootstrap-icons !important; - font-style: normal; - font-weight: normal !important; - font-variant: normal; - text-transform: none; - line-height: 1; - vertical-align: -.125em; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.bi-123::before { content: "\f67f"; } -.bi-alarm-fill::before { content: "\f101"; } -.bi-alarm::before { content: "\f102"; } -.bi-align-bottom::before { content: "\f103"; } -.bi-align-center::before { content: "\f104"; } -.bi-align-end::before { content: "\f105"; } -.bi-align-middle::before { content: "\f106"; } -.bi-align-start::before { content: "\f107"; } -.bi-align-top::before { content: "\f108"; } -.bi-alt::before { content: "\f109"; } -.bi-app-indicator::before { content: "\f10a"; } -.bi-app::before { content: "\f10b"; } -.bi-archive-fill::before { content: "\f10c"; } -.bi-archive::before { content: "\f10d"; } -.bi-arrow-90deg-down::before { content: "\f10e"; } -.bi-arrow-90deg-left::before { content: "\f10f"; } -.bi-arrow-90deg-right::before { content: "\f110"; } -.bi-arrow-90deg-up::before { content: "\f111"; } -.bi-arrow-bar-down::before { content: "\f112"; } -.bi-arrow-bar-left::before { content: "\f113"; } -.bi-arrow-bar-right::before { content: "\f114"; } -.bi-arrow-bar-up::before { content: "\f115"; } -.bi-arrow-clockwise::before { content: "\f116"; } -.bi-arrow-counterclockwise::before { content: "\f117"; } -.bi-arrow-down-circle-fill::before { content: "\f118"; } -.bi-arrow-down-circle::before { content: "\f119"; } -.bi-arrow-down-left-circle-fill::before { content: "\f11a"; } -.bi-arrow-down-left-circle::before { content: "\f11b"; } -.bi-arrow-down-left-square-fill::before { content: "\f11c"; } -.bi-arrow-down-left-square::before { content: "\f11d"; } -.bi-arrow-down-left::before { content: "\f11e"; } -.bi-arrow-down-right-circle-fill::before { content: "\f11f"; } -.bi-arrow-down-right-circle::before { content: "\f120"; } -.bi-arrow-down-right-square-fill::before { content: "\f121"; } -.bi-arrow-down-right-square::before { content: "\f122"; } -.bi-arrow-down-right::before { content: "\f123"; } -.bi-arrow-down-short::before { content: "\f124"; } -.bi-arrow-down-square-fill::before { content: "\f125"; } -.bi-arrow-down-square::before { content: "\f126"; } -.bi-arrow-down-up::before { content: "\f127"; } -.bi-arrow-down::before { content: "\f128"; } -.bi-arrow-left-circle-fill::before { content: "\f129"; } -.bi-arrow-left-circle::before { content: "\f12a"; } -.bi-arrow-left-right::before { content: "\f12b"; } -.bi-arrow-left-short::before { content: "\f12c"; } -.bi-arrow-left-square-fill::before { content: "\f12d"; } -.bi-arrow-left-square::before { content: "\f12e"; } -.bi-arrow-left::before { content: "\f12f"; } -.bi-arrow-repeat::before { content: "\f130"; } -.bi-arrow-return-left::before { content: "\f131"; } -.bi-arrow-return-right::before { content: "\f132"; } -.bi-arrow-right-circle-fill::before { content: "\f133"; } -.bi-arrow-right-circle::before { content: "\f134"; } -.bi-arrow-right-short::before { content: "\f135"; } -.bi-arrow-right-square-fill::before { content: "\f136"; } -.bi-arrow-right-square::before { content: "\f137"; } -.bi-arrow-right::before { content: "\f138"; } -.bi-arrow-up-circle-fill::before { content: "\f139"; } -.bi-arrow-up-circle::before { content: "\f13a"; } -.bi-arrow-up-left-circle-fill::before { content: "\f13b"; } -.bi-arrow-up-left-circle::before { content: "\f13c"; } -.bi-arrow-up-left-square-fill::before { content: "\f13d"; } -.bi-arrow-up-left-square::before { content: "\f13e"; } -.bi-arrow-up-left::before { content: "\f13f"; } -.bi-arrow-up-right-circle-fill::before { content: "\f140"; } -.bi-arrow-up-right-circle::before { content: "\f141"; } -.bi-arrow-up-right-square-fill::before { content: "\f142"; } -.bi-arrow-up-right-square::before { content: "\f143"; } -.bi-arrow-up-right::before { content: "\f144"; } -.bi-arrow-up-short::before { content: "\f145"; } -.bi-arrow-up-square-fill::before { content: "\f146"; } -.bi-arrow-up-square::before { content: "\f147"; } -.bi-arrow-up::before { content: "\f148"; } -.bi-arrows-angle-contract::before { content: "\f149"; } -.bi-arrows-angle-expand::before { content: "\f14a"; } -.bi-arrows-collapse::before { content: "\f14b"; } -.bi-arrows-expand::before { content: "\f14c"; } -.bi-arrows-fullscreen::before { content: "\f14d"; } -.bi-arrows-move::before { content: "\f14e"; } -.bi-aspect-ratio-fill::before { content: "\f14f"; } -.bi-aspect-ratio::before { content: "\f150"; } -.bi-asterisk::before { content: "\f151"; } -.bi-at::before { content: "\f152"; } -.bi-award-fill::before { content: "\f153"; } -.bi-award::before { content: "\f154"; } -.bi-back::before { content: "\f155"; } -.bi-backspace-fill::before { content: "\f156"; } -.bi-backspace-reverse-fill::before { content: "\f157"; } -.bi-backspace-reverse::before { content: "\f158"; } -.bi-backspace::before { content: "\f159"; } -.bi-badge-3d-fill::before { content: "\f15a"; } -.bi-badge-3d::before { content: "\f15b"; } -.bi-badge-4k-fill::before { content: "\f15c"; } -.bi-badge-4k::before { content: "\f15d"; } -.bi-badge-8k-fill::before { content: "\f15e"; } -.bi-badge-8k::before { content: "\f15f"; } -.bi-badge-ad-fill::before { content: "\f160"; } -.bi-badge-ad::before { content: "\f161"; } -.bi-badge-ar-fill::before { content: "\f162"; } -.bi-badge-ar::before { content: "\f163"; } -.bi-badge-cc-fill::before { content: "\f164"; } -.bi-badge-cc::before { content: "\f165"; } -.bi-badge-hd-fill::before { content: "\f166"; } -.bi-badge-hd::before { content: "\f167"; } -.bi-badge-tm-fill::before { content: "\f168"; } -.bi-badge-tm::before { content: "\f169"; } -.bi-badge-vo-fill::before { content: "\f16a"; } -.bi-badge-vo::before { content: "\f16b"; } -.bi-badge-vr-fill::before { content: "\f16c"; } -.bi-badge-vr::before { content: "\f16d"; } -.bi-badge-wc-fill::before { content: "\f16e"; } -.bi-badge-wc::before { content: "\f16f"; } -.bi-bag-check-fill::before { content: "\f170"; } -.bi-bag-check::before { content: "\f171"; } -.bi-bag-dash-fill::before { content: "\f172"; } -.bi-bag-dash::before { content: "\f173"; } -.bi-bag-fill::before { content: "\f174"; } -.bi-bag-plus-fill::before { content: "\f175"; } -.bi-bag-plus::before { content: "\f176"; } -.bi-bag-x-fill::before { content: "\f177"; } -.bi-bag-x::before { content: "\f178"; } -.bi-bag::before { content: "\f179"; } -.bi-bar-chart-fill::before { content: "\f17a"; } -.bi-bar-chart-line-fill::before { content: "\f17b"; } -.bi-bar-chart-line::before { content: "\f17c"; } -.bi-bar-chart-steps::before { content: "\f17d"; } -.bi-bar-chart::before { content: "\f17e"; } -.bi-basket-fill::before { content: "\f17f"; } -.bi-basket::before { content: "\f180"; } -.bi-basket2-fill::before { content: "\f181"; } -.bi-basket2::before { content: "\f182"; } -.bi-basket3-fill::before { content: "\f183"; } -.bi-basket3::before { content: "\f184"; } -.bi-battery-charging::before { content: "\f185"; } -.bi-battery-full::before { content: "\f186"; } -.bi-battery-half::before { content: "\f187"; } -.bi-battery::before { content: "\f188"; } -.bi-bell-fill::before { content: "\f189"; } -.bi-bell::before { content: "\f18a"; } -.bi-bezier::before { content: "\f18b"; } -.bi-bezier2::before { content: "\f18c"; } -.bi-bicycle::before { content: "\f18d"; } -.bi-binoculars-fill::before { content: "\f18e"; } -.bi-binoculars::before { content: "\f18f"; } -.bi-blockquote-left::before { content: "\f190"; } -.bi-blockquote-right::before { content: "\f191"; } -.bi-book-fill::before { content: "\f192"; } -.bi-book-half::before { content: "\f193"; } -.bi-book::before { content: "\f194"; } -.bi-bookmark-check-fill::before { content: "\f195"; } -.bi-bookmark-check::before { content: "\f196"; } -.bi-bookmark-dash-fill::before { content: "\f197"; } -.bi-bookmark-dash::before { content: "\f198"; } -.bi-bookmark-fill::before { content: "\f199"; } -.bi-bookmark-heart-fill::before { content: "\f19a"; } -.bi-bookmark-heart::before { content: "\f19b"; } -.bi-bookmark-plus-fill::before { content: "\f19c"; } -.bi-bookmark-plus::before { content: "\f19d"; } -.bi-bookmark-star-fill::before { content: "\f19e"; } -.bi-bookmark-star::before { content: "\f19f"; } -.bi-bookmark-x-fill::before { content: "\f1a0"; } -.bi-bookmark-x::before { content: "\f1a1"; } -.bi-bookmark::before { content: "\f1a2"; } -.bi-bookmarks-fill::before { content: "\f1a3"; } -.bi-bookmarks::before { content: "\f1a4"; } -.bi-bookshelf::before { content: "\f1a5"; } -.bi-bootstrap-fill::before { content: "\f1a6"; } -.bi-bootstrap-reboot::before { content: "\f1a7"; } -.bi-bootstrap::before { content: "\f1a8"; } -.bi-border-all::before { content: "\f1a9"; } -.bi-border-bottom::before { content: "\f1aa"; } -.bi-border-center::before { content: "\f1ab"; } -.bi-border-inner::before { content: "\f1ac"; } -.bi-border-left::before { content: "\f1ad"; } -.bi-border-middle::before { content: "\f1ae"; } -.bi-border-outer::before { content: "\f1af"; } -.bi-border-right::before { content: "\f1b0"; } -.bi-border-style::before { content: "\f1b1"; } -.bi-border-top::before { content: "\f1b2"; } -.bi-border-width::before { content: "\f1b3"; } -.bi-border::before { content: "\f1b4"; } -.bi-bounding-box-circles::before { content: "\f1b5"; } -.bi-bounding-box::before { content: "\f1b6"; } -.bi-box-arrow-down-left::before { content: "\f1b7"; } -.bi-box-arrow-down-right::before { content: "\f1b8"; } -.bi-box-arrow-down::before { content: "\f1b9"; } -.bi-box-arrow-in-down-left::before { content: "\f1ba"; } -.bi-box-arrow-in-down-right::before { content: "\f1bb"; } -.bi-box-arrow-in-down::before { content: "\f1bc"; } -.bi-box-arrow-in-left::before { content: "\f1bd"; } -.bi-box-arrow-in-right::before { content: "\f1be"; } -.bi-box-arrow-in-up-left::before { content: "\f1bf"; } -.bi-box-arrow-in-up-right::before { content: "\f1c0"; } -.bi-box-arrow-in-up::before { content: "\f1c1"; } -.bi-box-arrow-left::before { content: "\f1c2"; } -.bi-box-arrow-right::before { content: "\f1c3"; } -.bi-box-arrow-up-left::before { content: "\f1c4"; } -.bi-box-arrow-up-right::before { content: "\f1c5"; } -.bi-box-arrow-up::before { content: "\f1c6"; } -.bi-box-seam::before { content: "\f1c7"; } -.bi-box::before { content: "\f1c8"; } -.bi-braces::before { content: "\f1c9"; } -.bi-bricks::before { content: "\f1ca"; } -.bi-briefcase-fill::before { content: "\f1cb"; } -.bi-briefcase::before { content: "\f1cc"; } -.bi-brightness-alt-high-fill::before { content: "\f1cd"; } -.bi-brightness-alt-high::before { content: "\f1ce"; } -.bi-brightness-alt-low-fill::before { content: "\f1cf"; } -.bi-brightness-alt-low::before { content: "\f1d0"; } -.bi-brightness-high-fill::before { content: "\f1d1"; } -.bi-brightness-high::before { content: "\f1d2"; } -.bi-brightness-low-fill::before { content: "\f1d3"; } -.bi-brightness-low::before { content: "\f1d4"; } -.bi-broadcast-pin::before { content: "\f1d5"; } -.bi-broadcast::before { content: "\f1d6"; } -.bi-brush-fill::before { content: "\f1d7"; } -.bi-brush::before { content: "\f1d8"; } -.bi-bucket-fill::before { content: "\f1d9"; } -.bi-bucket::before { content: "\f1da"; } -.bi-bug-fill::before { content: "\f1db"; } -.bi-bug::before { content: "\f1dc"; } -.bi-building::before { content: "\f1dd"; } -.bi-bullseye::before { content: "\f1de"; } -.bi-calculator-fill::before { content: "\f1df"; } -.bi-calculator::before { content: "\f1e0"; } -.bi-calendar-check-fill::before { content: "\f1e1"; } -.bi-calendar-check::before { content: "\f1e2"; } -.bi-calendar-date-fill::before { content: "\f1e3"; } -.bi-calendar-date::before { content: "\f1e4"; } -.bi-calendar-day-fill::before { content: "\f1e5"; } -.bi-calendar-day::before { content: "\f1e6"; } -.bi-calendar-event-fill::before { content: "\f1e7"; } -.bi-calendar-event::before { content: "\f1e8"; } -.bi-calendar-fill::before { content: "\f1e9"; } -.bi-calendar-minus-fill::before { content: "\f1ea"; } -.bi-calendar-minus::before { content: "\f1eb"; } -.bi-calendar-month-fill::before { content: "\f1ec"; } -.bi-calendar-month::before { content: "\f1ed"; } -.bi-calendar-plus-fill::before { content: "\f1ee"; } -.bi-calendar-plus::before { content: "\f1ef"; } -.bi-calendar-range-fill::before { content: "\f1f0"; } -.bi-calendar-range::before { content: "\f1f1"; } -.bi-calendar-week-fill::before { content: "\f1f2"; } -.bi-calendar-week::before { content: "\f1f3"; } -.bi-calendar-x-fill::before { content: "\f1f4"; } -.bi-calendar-x::before { content: "\f1f5"; } -.bi-calendar::before { content: "\f1f6"; } -.bi-calendar2-check-fill::before { content: "\f1f7"; } -.bi-calendar2-check::before { content: "\f1f8"; } -.bi-calendar2-date-fill::before { content: "\f1f9"; } -.bi-calendar2-date::before { content: "\f1fa"; } -.bi-calendar2-day-fill::before { content: "\f1fb"; } -.bi-calendar2-day::before { content: "\f1fc"; } -.bi-calendar2-event-fill::before { content: "\f1fd"; } -.bi-calendar2-event::before { content: "\f1fe"; } -.bi-calendar2-fill::before { content: "\f1ff"; } -.bi-calendar2-minus-fill::before { content: "\f200"; } -.bi-calendar2-minus::before { content: "\f201"; } -.bi-calendar2-month-fill::before { content: "\f202"; } -.bi-calendar2-month::before { content: "\f203"; } -.bi-calendar2-plus-fill::before { content: "\f204"; } -.bi-calendar2-plus::before { content: "\f205"; } -.bi-calendar2-range-fill::before { content: "\f206"; } -.bi-calendar2-range::before { content: "\f207"; } -.bi-calendar2-week-fill::before { content: "\f208"; } -.bi-calendar2-week::before { content: "\f209"; } -.bi-calendar2-x-fill::before { content: "\f20a"; } -.bi-calendar2-x::before { content: "\f20b"; } -.bi-calendar2::before { content: "\f20c"; } -.bi-calendar3-event-fill::before { content: "\f20d"; } -.bi-calendar3-event::before { content: "\f20e"; } -.bi-calendar3-fill::before { content: "\f20f"; } -.bi-calendar3-range-fill::before { content: "\f210"; } -.bi-calendar3-range::before { content: "\f211"; } -.bi-calendar3-week-fill::before { content: "\f212"; } -.bi-calendar3-week::before { content: "\f213"; } -.bi-calendar3::before { content: "\f214"; } -.bi-calendar4-event::before { content: "\f215"; } -.bi-calendar4-range::before { content: "\f216"; } -.bi-calendar4-week::before { content: "\f217"; } -.bi-calendar4::before { content: "\f218"; } -.bi-camera-fill::before { content: "\f219"; } -.bi-camera-reels-fill::before { content: "\f21a"; } -.bi-camera-reels::before { content: "\f21b"; } -.bi-camera-video-fill::before { content: "\f21c"; } -.bi-camera-video-off-fill::before { content: "\f21d"; } -.bi-camera-video-off::before { content: "\f21e"; } -.bi-camera-video::before { content: "\f21f"; } -.bi-camera::before { content: "\f220"; } -.bi-camera2::before { content: "\f221"; } -.bi-capslock-fill::before { content: "\f222"; } -.bi-capslock::before { content: "\f223"; } -.bi-card-checklist::before { content: "\f224"; } -.bi-card-heading::before { content: "\f225"; } -.bi-card-image::before { content: "\f226"; } -.bi-card-list::before { content: "\f227"; } -.bi-card-text::before { content: "\f228"; } -.bi-caret-down-fill::before { content: "\f229"; } -.bi-caret-down-square-fill::before { content: "\f22a"; } -.bi-caret-down-square::before { content: "\f22b"; } -.bi-caret-down::before { content: "\f22c"; } -.bi-caret-left-fill::before { content: "\f22d"; } -.bi-caret-left-square-fill::before { content: "\f22e"; } -.bi-caret-left-square::before { content: "\f22f"; } -.bi-caret-left::before { content: "\f230"; } -.bi-caret-right-fill::before { content: "\f231"; } -.bi-caret-right-square-fill::before { content: "\f232"; } -.bi-caret-right-square::before { content: "\f233"; } -.bi-caret-right::before { content: "\f234"; } -.bi-caret-up-fill::before { content: "\f235"; } -.bi-caret-up-square-fill::before { content: "\f236"; } -.bi-caret-up-square::before { content: "\f237"; } -.bi-caret-up::before { content: "\f238"; } -.bi-cart-check-fill::before { content: "\f239"; } -.bi-cart-check::before { content: "\f23a"; } -.bi-cart-dash-fill::before { content: "\f23b"; } -.bi-cart-dash::before { content: "\f23c"; } -.bi-cart-fill::before { content: "\f23d"; } -.bi-cart-plus-fill::before { content: "\f23e"; } -.bi-cart-plus::before { content: "\f23f"; } -.bi-cart-x-fill::before { content: "\f240"; } -.bi-cart-x::before { content: "\f241"; } -.bi-cart::before { content: "\f242"; } -.bi-cart2::before { content: "\f243"; } -.bi-cart3::before { content: "\f244"; } -.bi-cart4::before { content: "\f245"; } -.bi-cash-stack::before { content: "\f246"; } -.bi-cash::before { content: "\f247"; } -.bi-cast::before { content: "\f248"; } -.bi-chat-dots-fill::before { content: "\f249"; } -.bi-chat-dots::before { content: "\f24a"; } -.bi-chat-fill::before { content: "\f24b"; } -.bi-chat-left-dots-fill::before { content: "\f24c"; } -.bi-chat-left-dots::before { content: "\f24d"; } -.bi-chat-left-fill::before { content: "\f24e"; } -.bi-chat-left-quote-fill::before { content: "\f24f"; } -.bi-chat-left-quote::before { content: "\f250"; } -.bi-chat-left-text-fill::before { content: "\f251"; } -.bi-chat-left-text::before { content: "\f252"; } -.bi-chat-left::before { content: "\f253"; } -.bi-chat-quote-fill::before { content: "\f254"; } -.bi-chat-quote::before { content: "\f255"; } -.bi-chat-right-dots-fill::before { content: "\f256"; } -.bi-chat-right-dots::before { content: "\f257"; } -.bi-chat-right-fill::before { content: "\f258"; } -.bi-chat-right-quote-fill::before { content: "\f259"; } -.bi-chat-right-quote::before { content: "\f25a"; } -.bi-chat-right-text-fill::before { content: "\f25b"; } -.bi-chat-right-text::before { content: "\f25c"; } -.bi-chat-right::before { content: "\f25d"; } -.bi-chat-square-dots-fill::before { content: "\f25e"; } -.bi-chat-square-dots::before { content: "\f25f"; } -.bi-chat-square-fill::before { content: "\f260"; } -.bi-chat-square-quote-fill::before { content: "\f261"; } -.bi-chat-square-quote::before { content: "\f262"; } -.bi-chat-square-text-fill::before { content: "\f263"; } -.bi-chat-square-text::before { content: "\f264"; } -.bi-chat-square::before { content: "\f265"; } -.bi-chat-text-fill::before { content: "\f266"; } -.bi-chat-text::before { content: "\f267"; } -.bi-chat::before { content: "\f268"; } -.bi-check-all::before { content: "\f269"; } -.bi-check-circle-fill::before { content: "\f26a"; } -.bi-check-circle::before { content: "\f26b"; } -.bi-check-square-fill::before { content: "\f26c"; } -.bi-check-square::before { content: "\f26d"; } -.bi-check::before { content: "\f26e"; } -.bi-check2-all::before { content: "\f26f"; } -.bi-check2-circle::before { content: "\f270"; } -.bi-check2-square::before { content: "\f271"; } -.bi-check2::before { content: "\f272"; } -.bi-chevron-bar-contract::before { content: "\f273"; } -.bi-chevron-bar-down::before { content: "\f274"; } -.bi-chevron-bar-expand::before { content: "\f275"; } -.bi-chevron-bar-left::before { content: "\f276"; } -.bi-chevron-bar-right::before { content: "\f277"; } -.bi-chevron-bar-up::before { content: "\f278"; } -.bi-chevron-compact-down::before { content: "\f279"; } -.bi-chevron-compact-left::before { content: "\f27a"; } -.bi-chevron-compact-right::before { content: "\f27b"; } -.bi-chevron-compact-up::before { content: "\f27c"; } -.bi-chevron-contract::before { content: "\f27d"; } -.bi-chevron-double-down::before { content: "\f27e"; } -.bi-chevron-double-left::before { content: "\f27f"; } -.bi-chevron-double-right::before { content: "\f280"; } -.bi-chevron-double-up::before { content: "\f281"; } -.bi-chevron-down::before { content: "\f282"; } -.bi-chevron-expand::before { content: "\f283"; } -.bi-chevron-left::before { content: "\f284"; } -.bi-chevron-right::before { content: "\f285"; } -.bi-chevron-up::before { content: "\f286"; } -.bi-circle-fill::before { content: "\f287"; } -.bi-circle-half::before { content: "\f288"; } -.bi-circle-square::before { content: "\f289"; } -.bi-circle::before { content: "\f28a"; } -.bi-clipboard-check::before { content: "\f28b"; } -.bi-clipboard-data::before { content: "\f28c"; } -.bi-clipboard-minus::before { content: "\f28d"; } -.bi-clipboard-plus::before { content: "\f28e"; } -.bi-clipboard-x::before { content: "\f28f"; } -.bi-clipboard::before { content: "\f290"; } -.bi-clock-fill::before { content: "\f291"; } -.bi-clock-history::before { content: "\f292"; } -.bi-clock::before { content: "\f293"; } -.bi-cloud-arrow-down-fill::before { content: "\f294"; } -.bi-cloud-arrow-down::before { content: "\f295"; } -.bi-cloud-arrow-up-fill::before { content: "\f296"; } -.bi-cloud-arrow-up::before { content: "\f297"; } -.bi-cloud-check-fill::before { content: "\f298"; } -.bi-cloud-check::before { content: "\f299"; } -.bi-cloud-download-fill::before { content: "\f29a"; } -.bi-cloud-download::before { content: "\f29b"; } -.bi-cloud-drizzle-fill::before { content: "\f29c"; } -.bi-cloud-drizzle::before { content: "\f29d"; } -.bi-cloud-fill::before { content: "\f29e"; } -.bi-cloud-fog-fill::before { content: "\f29f"; } -.bi-cloud-fog::before { content: "\f2a0"; } -.bi-cloud-fog2-fill::before { content: "\f2a1"; } -.bi-cloud-fog2::before { content: "\f2a2"; } -.bi-cloud-hail-fill::before { content: "\f2a3"; } -.bi-cloud-hail::before { content: "\f2a4"; } -.bi-cloud-haze-fill::before { content: "\f2a6"; } -.bi-cloud-haze::before { content: "\f2a7"; } -.bi-cloud-haze2-fill::before { content: "\f2a8"; } -.bi-cloud-lightning-fill::before { content: "\f2a9"; } -.bi-cloud-lightning-rain-fill::before { content: "\f2aa"; } -.bi-cloud-lightning-rain::before { content: "\f2ab"; } -.bi-cloud-lightning::before { content: "\f2ac"; } -.bi-cloud-minus-fill::before { content: "\f2ad"; } -.bi-cloud-minus::before { content: "\f2ae"; } -.bi-cloud-moon-fill::before { content: "\f2af"; } -.bi-cloud-moon::before { content: "\f2b0"; } -.bi-cloud-plus-fill::before { content: "\f2b1"; } -.bi-cloud-plus::before { content: "\f2b2"; } -.bi-cloud-rain-fill::before { content: "\f2b3"; } -.bi-cloud-rain-heavy-fill::before { content: "\f2b4"; } -.bi-cloud-rain-heavy::before { content: "\f2b5"; } -.bi-cloud-rain::before { content: "\f2b6"; } -.bi-cloud-slash-fill::before { content: "\f2b7"; } -.bi-cloud-slash::before { content: "\f2b8"; } -.bi-cloud-sleet-fill::before { content: "\f2b9"; } -.bi-cloud-sleet::before { content: "\f2ba"; } -.bi-cloud-snow-fill::before { content: "\f2bb"; } -.bi-cloud-snow::before { content: "\f2bc"; } -.bi-cloud-sun-fill::before { content: "\f2bd"; } -.bi-cloud-sun::before { content: "\f2be"; } -.bi-cloud-upload-fill::before { content: "\f2bf"; } -.bi-cloud-upload::before { content: "\f2c0"; } -.bi-cloud::before { content: "\f2c1"; } -.bi-clouds-fill::before { content: "\f2c2"; } -.bi-clouds::before { content: "\f2c3"; } -.bi-cloudy-fill::before { content: "\f2c4"; } -.bi-cloudy::before { content: "\f2c5"; } -.bi-code-slash::before { content: "\f2c6"; } -.bi-code-square::before { content: "\f2c7"; } -.bi-code::before { content: "\f2c8"; } -.bi-collection-fill::before { content: "\f2c9"; } -.bi-collection-play-fill::before { content: "\f2ca"; } -.bi-collection-play::before { content: "\f2cb"; } -.bi-collection::before { content: "\f2cc"; } -.bi-columns-gap::before { content: "\f2cd"; } -.bi-columns::before { content: "\f2ce"; } -.bi-command::before { content: "\f2cf"; } -.bi-compass-fill::before { content: "\f2d0"; } -.bi-compass::before { content: "\f2d1"; } -.bi-cone-striped::before { content: "\f2d2"; } -.bi-cone::before { content: "\f2d3"; } -.bi-controller::before { content: "\f2d4"; } -.bi-cpu-fill::before { content: "\f2d5"; } -.bi-cpu::before { content: "\f2d6"; } -.bi-credit-card-2-back-fill::before { content: "\f2d7"; } -.bi-credit-card-2-back::before { content: "\f2d8"; } -.bi-credit-card-2-front-fill::before { content: "\f2d9"; } -.bi-credit-card-2-front::before { content: "\f2da"; } -.bi-credit-card-fill::before { content: "\f2db"; } -.bi-credit-card::before { content: "\f2dc"; } -.bi-crop::before { content: "\f2dd"; } -.bi-cup-fill::before { content: "\f2de"; } -.bi-cup-straw::before { content: "\f2df"; } -.bi-cup::before { content: "\f2e0"; } -.bi-cursor-fill::before { content: "\f2e1"; } -.bi-cursor-text::before { content: "\f2e2"; } -.bi-cursor::before { content: "\f2e3"; } -.bi-dash-circle-dotted::before { content: "\f2e4"; } -.bi-dash-circle-fill::before { content: "\f2e5"; } -.bi-dash-circle::before { content: "\f2e6"; } -.bi-dash-square-dotted::before { content: "\f2e7"; } -.bi-dash-square-fill::before { content: "\f2e8"; } -.bi-dash-square::before { content: "\f2e9"; } -.bi-dash::before { content: "\f2ea"; } -.bi-diagram-2-fill::before { content: "\f2eb"; } -.bi-diagram-2::before { content: "\f2ec"; } -.bi-diagram-3-fill::before { content: "\f2ed"; } -.bi-diagram-3::before { content: "\f2ee"; } -.bi-diamond-fill::before { content: "\f2ef"; } -.bi-diamond-half::before { content: "\f2f0"; } -.bi-diamond::before { content: "\f2f1"; } -.bi-dice-1-fill::before { content: "\f2f2"; } -.bi-dice-1::before { content: "\f2f3"; } -.bi-dice-2-fill::before { content: "\f2f4"; } -.bi-dice-2::before { content: "\f2f5"; } -.bi-dice-3-fill::before { content: "\f2f6"; } -.bi-dice-3::before { content: "\f2f7"; } -.bi-dice-4-fill::before { content: "\f2f8"; } -.bi-dice-4::before { content: "\f2f9"; } -.bi-dice-5-fill::before { content: "\f2fa"; } -.bi-dice-5::before { content: "\f2fb"; } -.bi-dice-6-fill::before { content: "\f2fc"; } -.bi-dice-6::before { content: "\f2fd"; } -.bi-disc-fill::before { content: "\f2fe"; } -.bi-disc::before { content: "\f2ff"; } -.bi-discord::before { content: "\f300"; } -.bi-display-fill::before { content: "\f301"; } -.bi-display::before { content: "\f302"; } -.bi-distribute-horizontal::before { content: "\f303"; } -.bi-distribute-vertical::before { content: "\f304"; } -.bi-door-closed-fill::before { content: "\f305"; } -.bi-door-closed::before { content: "\f306"; } -.bi-door-open-fill::before { content: "\f307"; } -.bi-door-open::before { content: "\f308"; } -.bi-dot::before { content: "\f309"; } -.bi-download::before { content: "\f30a"; } -.bi-droplet-fill::before { content: "\f30b"; } -.bi-droplet-half::before { content: "\f30c"; } -.bi-droplet::before { content: "\f30d"; } -.bi-earbuds::before { content: "\f30e"; } -.bi-easel-fill::before { content: "\f30f"; } -.bi-easel::before { content: "\f310"; } -.bi-egg-fill::before { content: "\f311"; } -.bi-egg-fried::before { content: "\f312"; } -.bi-egg::before { content: "\f313"; } -.bi-eject-fill::before { content: "\f314"; } -.bi-eject::before { content: "\f315"; } -.bi-emoji-angry-fill::before { content: "\f316"; } -.bi-emoji-angry::before { content: "\f317"; } -.bi-emoji-dizzy-fill::before { content: "\f318"; } -.bi-emoji-dizzy::before { content: "\f319"; } -.bi-emoji-expressionless-fill::before { content: "\f31a"; } -.bi-emoji-expressionless::before { content: "\f31b"; } -.bi-emoji-frown-fill::before { content: "\f31c"; } -.bi-emoji-frown::before { content: "\f31d"; } -.bi-emoji-heart-eyes-fill::before { content: "\f31e"; } -.bi-emoji-heart-eyes::before { content: "\f31f"; } -.bi-emoji-laughing-fill::before { content: "\f320"; } -.bi-emoji-laughing::before { content: "\f321"; } -.bi-emoji-neutral-fill::before { content: "\f322"; } -.bi-emoji-neutral::before { content: "\f323"; } -.bi-emoji-smile-fill::before { content: "\f324"; } -.bi-emoji-smile-upside-down-fill::before { content: "\f325"; } -.bi-emoji-smile-upside-down::before { content: "\f326"; } -.bi-emoji-smile::before { content: "\f327"; } -.bi-emoji-sunglasses-fill::before { content: "\f328"; } -.bi-emoji-sunglasses::before { content: "\f329"; } -.bi-emoji-wink-fill::before { content: "\f32a"; } -.bi-emoji-wink::before { content: "\f32b"; } -.bi-envelope-fill::before { content: "\f32c"; } -.bi-envelope-open-fill::before { content: "\f32d"; } -.bi-envelope-open::before { content: "\f32e"; } -.bi-envelope::before { content: "\f32f"; } -.bi-eraser-fill::before { content: "\f330"; } -.bi-eraser::before { content: "\f331"; } -.bi-exclamation-circle-fill::before { content: "\f332"; } -.bi-exclamation-circle::before { content: "\f333"; } -.bi-exclamation-diamond-fill::before { content: "\f334"; } -.bi-exclamation-diamond::before { content: "\f335"; } -.bi-exclamation-octagon-fill::before { content: "\f336"; } -.bi-exclamation-octagon::before { content: "\f337"; } -.bi-exclamation-square-fill::before { content: "\f338"; } -.bi-exclamation-square::before { content: "\f339"; } -.bi-exclamation-triangle-fill::before { content: "\f33a"; } -.bi-exclamation-triangle::before { content: "\f33b"; } -.bi-exclamation::before { content: "\f33c"; } -.bi-exclude::before { content: "\f33d"; } -.bi-eye-fill::before { content: "\f33e"; } -.bi-eye-slash-fill::before { content: "\f33f"; } -.bi-eye-slash::before { content: "\f340"; } -.bi-eye::before { content: "\f341"; } -.bi-eyedropper::before { content: "\f342"; } -.bi-eyeglasses::before { content: "\f343"; } -.bi-facebook::before { content: "\f344"; } -.bi-file-arrow-down-fill::before { content: "\f345"; } -.bi-file-arrow-down::before { content: "\f346"; } -.bi-file-arrow-up-fill::before { content: "\f347"; } -.bi-file-arrow-up::before { content: "\f348"; } -.bi-file-bar-graph-fill::before { content: "\f349"; } -.bi-file-bar-graph::before { content: "\f34a"; } -.bi-file-binary-fill::before { content: "\f34b"; } -.bi-file-binary::before { content: "\f34c"; } -.bi-file-break-fill::before { content: "\f34d"; } -.bi-file-break::before { content: "\f34e"; } -.bi-file-check-fill::before { content: "\f34f"; } -.bi-file-check::before { content: "\f350"; } -.bi-file-code-fill::before { content: "\f351"; } -.bi-file-code::before { content: "\f352"; } -.bi-file-diff-fill::before { content: "\f353"; } -.bi-file-diff::before { content: "\f354"; } -.bi-file-earmark-arrow-down-fill::before { content: "\f355"; } -.bi-file-earmark-arrow-down::before { content: "\f356"; } -.bi-file-earmark-arrow-up-fill::before { content: "\f357"; } -.bi-file-earmark-arrow-up::before { content: "\f358"; } -.bi-file-earmark-bar-graph-fill::before { content: "\f359"; } -.bi-file-earmark-bar-graph::before { content: "\f35a"; } -.bi-file-earmark-binary-fill::before { content: "\f35b"; } -.bi-file-earmark-binary::before { content: "\f35c"; } -.bi-file-earmark-break-fill::before { content: "\f35d"; } -.bi-file-earmark-break::before { content: "\f35e"; } -.bi-file-earmark-check-fill::before { content: "\f35f"; } -.bi-file-earmark-check::before { content: "\f360"; } -.bi-file-earmark-code-fill::before { content: "\f361"; } -.bi-file-earmark-code::before { content: "\f362"; } -.bi-file-earmark-diff-fill::before { content: "\f363"; } -.bi-file-earmark-diff::before { content: "\f364"; } -.bi-file-earmark-easel-fill::before { content: "\f365"; } -.bi-file-earmark-easel::before { content: "\f366"; } -.bi-file-earmark-excel-fill::before { content: "\f367"; } -.bi-file-earmark-excel::before { content: "\f368"; } -.bi-file-earmark-fill::before { content: "\f369"; } -.bi-file-earmark-font-fill::before { content: "\f36a"; } -.bi-file-earmark-font::before { content: "\f36b"; } -.bi-file-earmark-image-fill::before { content: "\f36c"; } -.bi-file-earmark-image::before { content: "\f36d"; } -.bi-file-earmark-lock-fill::before { content: "\f36e"; } -.bi-file-earmark-lock::before { content: "\f36f"; } -.bi-file-earmark-lock2-fill::before { content: "\f370"; } -.bi-file-earmark-lock2::before { content: "\f371"; } -.bi-file-earmark-medical-fill::before { content: "\f372"; } -.bi-file-earmark-medical::before { content: "\f373"; } -.bi-file-earmark-minus-fill::before { content: "\f374"; } -.bi-file-earmark-minus::before { content: "\f375"; } -.bi-file-earmark-music-fill::before { content: "\f376"; } -.bi-file-earmark-music::before { content: "\f377"; } -.bi-file-earmark-person-fill::before { content: "\f378"; } -.bi-file-earmark-person::before { content: "\f379"; } -.bi-file-earmark-play-fill::before { content: "\f37a"; } -.bi-file-earmark-play::before { content: "\f37b"; } -.bi-file-earmark-plus-fill::before { content: "\f37c"; } -.bi-file-earmark-plus::before { content: "\f37d"; } -.bi-file-earmark-post-fill::before { content: "\f37e"; } -.bi-file-earmark-post::before { content: "\f37f"; } -.bi-file-earmark-ppt-fill::before { content: "\f380"; } -.bi-file-earmark-ppt::before { content: "\f381"; } -.bi-file-earmark-richtext-fill::before { content: "\f382"; } -.bi-file-earmark-richtext::before { content: "\f383"; } -.bi-file-earmark-ruled-fill::before { content: "\f384"; } -.bi-file-earmark-ruled::before { content: "\f385"; } -.bi-file-earmark-slides-fill::before { content: "\f386"; } -.bi-file-earmark-slides::before { content: "\f387"; } -.bi-file-earmark-spreadsheet-fill::before { content: "\f388"; } -.bi-file-earmark-spreadsheet::before { content: "\f389"; } -.bi-file-earmark-text-fill::before { content: "\f38a"; } -.bi-file-earmark-text::before { content: "\f38b"; } -.bi-file-earmark-word-fill::before { content: "\f38c"; } -.bi-file-earmark-word::before { content: "\f38d"; } -.bi-file-earmark-x-fill::before { content: "\f38e"; } -.bi-file-earmark-x::before { content: "\f38f"; } -.bi-file-earmark-zip-fill::before { content: "\f390"; } -.bi-file-earmark-zip::before { content: "\f391"; } -.bi-file-earmark::before { content: "\f392"; } -.bi-file-easel-fill::before { content: "\f393"; } -.bi-file-easel::before { content: "\f394"; } -.bi-file-excel-fill::before { content: "\f395"; } -.bi-file-excel::before { content: "\f396"; } -.bi-file-fill::before { content: "\f397"; } -.bi-file-font-fill::before { content: "\f398"; } -.bi-file-font::before { content: "\f399"; } -.bi-file-image-fill::before { content: "\f39a"; } -.bi-file-image::before { content: "\f39b"; } -.bi-file-lock-fill::before { content: "\f39c"; } -.bi-file-lock::before { content: "\f39d"; } -.bi-file-lock2-fill::before { content: "\f39e"; } -.bi-file-lock2::before { content: "\f39f"; } -.bi-file-medical-fill::before { content: "\f3a0"; } -.bi-file-medical::before { content: "\f3a1"; } -.bi-file-minus-fill::before { content: "\f3a2"; } -.bi-file-minus::before { content: "\f3a3"; } -.bi-file-music-fill::before { content: "\f3a4"; } -.bi-file-music::before { content: "\f3a5"; } -.bi-file-person-fill::before { content: "\f3a6"; } -.bi-file-person::before { content: "\f3a7"; } -.bi-file-play-fill::before { content: "\f3a8"; } -.bi-file-play::before { content: "\f3a9"; } -.bi-file-plus-fill::before { content: "\f3aa"; } -.bi-file-plus::before { content: "\f3ab"; } -.bi-file-post-fill::before { content: "\f3ac"; } -.bi-file-post::before { content: "\f3ad"; } -.bi-file-ppt-fill::before { content: "\f3ae"; } -.bi-file-ppt::before { content: "\f3af"; } -.bi-file-richtext-fill::before { content: "\f3b0"; } -.bi-file-richtext::before { content: "\f3b1"; } -.bi-file-ruled-fill::before { content: "\f3b2"; } -.bi-file-ruled::before { content: "\f3b3"; } -.bi-file-slides-fill::before { content: "\f3b4"; } -.bi-file-slides::before { content: "\f3b5"; } -.bi-file-spreadsheet-fill::before { content: "\f3b6"; } -.bi-file-spreadsheet::before { content: "\f3b7"; } -.bi-file-text-fill::before { content: "\f3b8"; } -.bi-file-text::before { content: "\f3b9"; } -.bi-file-word-fill::before { content: "\f3ba"; } -.bi-file-word::before { content: "\f3bb"; } -.bi-file-x-fill::before { content: "\f3bc"; } -.bi-file-x::before { content: "\f3bd"; } -.bi-file-zip-fill::before { content: "\f3be"; } -.bi-file-zip::before { content: "\f3bf"; } -.bi-file::before { content: "\f3c0"; } -.bi-files-alt::before { content: "\f3c1"; } -.bi-files::before { content: "\f3c2"; } -.bi-film::before { content: "\f3c3"; } -.bi-filter-circle-fill::before { content: "\f3c4"; } -.bi-filter-circle::before { content: "\f3c5"; } -.bi-filter-left::before { content: "\f3c6"; } -.bi-filter-right::before { content: "\f3c7"; } -.bi-filter-square-fill::before { content: "\f3c8"; } -.bi-filter-square::before { content: "\f3c9"; } -.bi-filter::before { content: "\f3ca"; } -.bi-flag-fill::before { content: "\f3cb"; } -.bi-flag::before { content: "\f3cc"; } -.bi-flower1::before { content: "\f3cd"; } -.bi-flower2::before { content: "\f3ce"; } -.bi-flower3::before { content: "\f3cf"; } -.bi-folder-check::before { content: "\f3d0"; } -.bi-folder-fill::before { content: "\f3d1"; } -.bi-folder-minus::before { content: "\f3d2"; } -.bi-folder-plus::before { content: "\f3d3"; } -.bi-folder-symlink-fill::before { content: "\f3d4"; } -.bi-folder-symlink::before { content: "\f3d5"; } -.bi-folder-x::before { content: "\f3d6"; } -.bi-folder::before { content: "\f3d7"; } -.bi-folder2-open::before { content: "\f3d8"; } -.bi-folder2::before { content: "\f3d9"; } -.bi-fonts::before { content: "\f3da"; } -.bi-forward-fill::before { content: "\f3db"; } -.bi-forward::before { content: "\f3dc"; } -.bi-front::before { content: "\f3dd"; } -.bi-fullscreen-exit::before { content: "\f3de"; } -.bi-fullscreen::before { content: "\f3df"; } -.bi-funnel-fill::before { content: "\f3e0"; } -.bi-funnel::before { content: "\f3e1"; } -.bi-gear-fill::before { content: "\f3e2"; } -.bi-gear-wide-connected::before { content: "\f3e3"; } -.bi-gear-wide::before { content: "\f3e4"; } -.bi-gear::before { content: "\f3e5"; } -.bi-gem::before { content: "\f3e6"; } -.bi-geo-alt-fill::before { content: "\f3e7"; } -.bi-geo-alt::before { content: "\f3e8"; } -.bi-geo-fill::before { content: "\f3e9"; } -.bi-geo::before { content: "\f3ea"; } -.bi-gift-fill::before { content: "\f3eb"; } -.bi-gift::before { content: "\f3ec"; } -.bi-github::before { content: "\f3ed"; } -.bi-globe::before { content: "\f3ee"; } -.bi-globe2::before { content: "\f3ef"; } -.bi-google::before { content: "\f3f0"; } -.bi-graph-down::before { content: "\f3f1"; } -.bi-graph-up::before { content: "\f3f2"; } -.bi-grid-1x2-fill::before { content: "\f3f3"; } -.bi-grid-1x2::before { content: "\f3f4"; } -.bi-grid-3x2-gap-fill::before { content: "\f3f5"; } -.bi-grid-3x2-gap::before { content: "\f3f6"; } -.bi-grid-3x2::before { content: "\f3f7"; } -.bi-grid-3x3-gap-fill::before { content: "\f3f8"; } -.bi-grid-3x3-gap::before { content: "\f3f9"; } -.bi-grid-3x3::before { content: "\f3fa"; } -.bi-grid-fill::before { content: "\f3fb"; } -.bi-grid::before { content: "\f3fc"; } -.bi-grip-horizontal::before { content: "\f3fd"; } -.bi-grip-vertical::before { content: "\f3fe"; } -.bi-hammer::before { content: "\f3ff"; } -.bi-hand-index-fill::before { content: "\f400"; } -.bi-hand-index-thumb-fill::before { content: "\f401"; } -.bi-hand-index-thumb::before { content: "\f402"; } -.bi-hand-index::before { content: "\f403"; } -.bi-hand-thumbs-down-fill::before { content: "\f404"; } -.bi-hand-thumbs-down::before { content: "\f405"; } -.bi-hand-thumbs-up-fill::before { content: "\f406"; } -.bi-hand-thumbs-up::before { content: "\f407"; } -.bi-handbag-fill::before { content: "\f408"; } -.bi-handbag::before { content: "\f409"; } -.bi-hash::before { content: "\f40a"; } -.bi-hdd-fill::before { content: "\f40b"; } -.bi-hdd-network-fill::before { content: "\f40c"; } -.bi-hdd-network::before { content: "\f40d"; } -.bi-hdd-rack-fill::before { content: "\f40e"; } -.bi-hdd-rack::before { content: "\f40f"; } -.bi-hdd-stack-fill::before { content: "\f410"; } -.bi-hdd-stack::before { content: "\f411"; } -.bi-hdd::before { content: "\f412"; } -.bi-headphones::before { content: "\f413"; } -.bi-headset::before { content: "\f414"; } -.bi-heart-fill::before { content: "\f415"; } -.bi-heart-half::before { content: "\f416"; } -.bi-heart::before { content: "\f417"; } -.bi-heptagon-fill::before { content: "\f418"; } -.bi-heptagon-half::before { content: "\f419"; } -.bi-heptagon::before { content: "\f41a"; } -.bi-hexagon-fill::before { content: "\f41b"; } -.bi-hexagon-half::before { content: "\f41c"; } -.bi-hexagon::before { content: "\f41d"; } -.bi-hourglass-bottom::before { content: "\f41e"; } -.bi-hourglass-split::before { content: "\f41f"; } -.bi-hourglass-top::before { content: "\f420"; } -.bi-hourglass::before { content: "\f421"; } -.bi-house-door-fill::before { content: "\f422"; } -.bi-house-door::before { content: "\f423"; } -.bi-house-fill::before { content: "\f424"; } -.bi-house::before { content: "\f425"; } -.bi-hr::before { content: "\f426"; } -.bi-hurricane::before { content: "\f427"; } -.bi-image-alt::before { content: "\f428"; } -.bi-image-fill::before { content: "\f429"; } -.bi-image::before { content: "\f42a"; } -.bi-images::before { content: "\f42b"; } -.bi-inbox-fill::before { content: "\f42c"; } -.bi-inbox::before { content: "\f42d"; } -.bi-inboxes-fill::before { content: "\f42e"; } -.bi-inboxes::before { content: "\f42f"; } -.bi-info-circle-fill::before { content: "\f430"; } -.bi-info-circle::before { content: "\f431"; } -.bi-info-square-fill::before { content: "\f432"; } -.bi-info-square::before { content: "\f433"; } -.bi-info::before { content: "\f434"; } -.bi-input-cursor-text::before { content: "\f435"; } -.bi-input-cursor::before { content: "\f436"; } -.bi-instagram::before { content: "\f437"; } -.bi-intersect::before { content: "\f438"; } -.bi-journal-album::before { content: "\f439"; } -.bi-journal-arrow-down::before { content: "\f43a"; } -.bi-journal-arrow-up::before { content: "\f43b"; } -.bi-journal-bookmark-fill::before { content: "\f43c"; } -.bi-journal-bookmark::before { content: "\f43d"; } -.bi-journal-check::before { content: "\f43e"; } -.bi-journal-code::before { content: "\f43f"; } -.bi-journal-medical::before { content: "\f440"; } -.bi-journal-minus::before { content: "\f441"; } -.bi-journal-plus::before { content: "\f442"; } -.bi-journal-richtext::before { content: "\f443"; } -.bi-journal-text::before { content: "\f444"; } -.bi-journal-x::before { content: "\f445"; } -.bi-journal::before { content: "\f446"; } -.bi-journals::before { content: "\f447"; } -.bi-joystick::before { content: "\f448"; } -.bi-justify-left::before { content: "\f449"; } -.bi-justify-right::before { content: "\f44a"; } -.bi-justify::before { content: "\f44b"; } -.bi-kanban-fill::before { content: "\f44c"; } -.bi-kanban::before { content: "\f44d"; } -.bi-key-fill::before { content: "\f44e"; } -.bi-key::before { content: "\f44f"; } -.bi-keyboard-fill::before { content: "\f450"; } -.bi-keyboard::before { content: "\f451"; } -.bi-ladder::before { content: "\f452"; } -.bi-lamp-fill::before { content: "\f453"; } -.bi-lamp::before { content: "\f454"; } -.bi-laptop-fill::before { content: "\f455"; } -.bi-laptop::before { content: "\f456"; } -.bi-layer-backward::before { content: "\f457"; } -.bi-layer-forward::before { content: "\f458"; } -.bi-layers-fill::before { content: "\f459"; } -.bi-layers-half::before { content: "\f45a"; } -.bi-layers::before { content: "\f45b"; } -.bi-layout-sidebar-inset-reverse::before { content: "\f45c"; } -.bi-layout-sidebar-inset::before { content: "\f45d"; } -.bi-layout-sidebar-reverse::before { content: "\f45e"; } -.bi-layout-sidebar::before { content: "\f45f"; } -.bi-layout-split::before { content: "\f460"; } -.bi-layout-text-sidebar-reverse::before { content: "\f461"; } -.bi-layout-text-sidebar::before { content: "\f462"; } -.bi-layout-text-window-reverse::before { content: "\f463"; } -.bi-layout-text-window::before { content: "\f464"; } -.bi-layout-three-columns::before { content: "\f465"; } -.bi-layout-wtf::before { content: "\f466"; } -.bi-life-preserver::before { content: "\f467"; } -.bi-lightbulb-fill::before { content: "\f468"; } -.bi-lightbulb-off-fill::before { content: "\f469"; } -.bi-lightbulb-off::before { content: "\f46a"; } -.bi-lightbulb::before { content: "\f46b"; } -.bi-lightning-charge-fill::before { content: "\f46c"; } -.bi-lightning-charge::before { content: "\f46d"; } -.bi-lightning-fill::before { content: "\f46e"; } -.bi-lightning::before { content: "\f46f"; } -.bi-link-45deg::before { content: "\f470"; } -.bi-link::before { content: "\f471"; } -.bi-linkedin::before { content: "\f472"; } -.bi-list-check::before { content: "\f473"; } -.bi-list-nested::before { content: "\f474"; } -.bi-list-ol::before { content: "\f475"; } -.bi-list-stars::before { content: "\f476"; } -.bi-list-task::before { content: "\f477"; } -.bi-list-ul::before { content: "\f478"; } -.bi-list::before { content: "\f479"; } -.bi-lock-fill::before { content: "\f47a"; } -.bi-lock::before { content: "\f47b"; } -.bi-mailbox::before { content: "\f47c"; } -.bi-mailbox2::before { content: "\f47d"; } -.bi-map-fill::before { content: "\f47e"; } -.bi-map::before { content: "\f47f"; } -.bi-markdown-fill::before { content: "\f480"; } -.bi-markdown::before { content: "\f481"; } -.bi-mask::before { content: "\f482"; } -.bi-megaphone-fill::before { content: "\f483"; } -.bi-megaphone::before { content: "\f484"; } -.bi-menu-app-fill::before { content: "\f485"; } -.bi-menu-app::before { content: "\f486"; } -.bi-menu-button-fill::before { content: "\f487"; } -.bi-menu-button-wide-fill::before { content: "\f488"; } -.bi-menu-button-wide::before { content: "\f489"; } -.bi-menu-button::before { content: "\f48a"; } -.bi-menu-down::before { content: "\f48b"; } -.bi-menu-up::before { content: "\f48c"; } -.bi-mic-fill::before { content: "\f48d"; } -.bi-mic-mute-fill::before { content: "\f48e"; } -.bi-mic-mute::before { content: "\f48f"; } -.bi-mic::before { content: "\f490"; } -.bi-minecart-loaded::before { content: "\f491"; } -.bi-minecart::before { content: "\f492"; } -.bi-moisture::before { content: "\f493"; } -.bi-moon-fill::before { content: "\f494"; } -.bi-moon-stars-fill::before { content: "\f495"; } -.bi-moon-stars::before { content: "\f496"; } -.bi-moon::before { content: "\f497"; } -.bi-mouse-fill::before { content: "\f498"; } -.bi-mouse::before { content: "\f499"; } -.bi-mouse2-fill::before { content: "\f49a"; } -.bi-mouse2::before { content: "\f49b"; } -.bi-mouse3-fill::before { content: "\f49c"; } -.bi-mouse3::before { content: "\f49d"; } -.bi-music-note-beamed::before { content: "\f49e"; } -.bi-music-note-list::before { content: "\f49f"; } -.bi-music-note::before { content: "\f4a0"; } -.bi-music-player-fill::before { content: "\f4a1"; } -.bi-music-player::before { content: "\f4a2"; } -.bi-newspaper::before { content: "\f4a3"; } -.bi-node-minus-fill::before { content: "\f4a4"; } -.bi-node-minus::before { content: "\f4a5"; } -.bi-node-plus-fill::before { content: "\f4a6"; } -.bi-node-plus::before { content: "\f4a7"; } -.bi-nut-fill::before { content: "\f4a8"; } -.bi-nut::before { content: "\f4a9"; } -.bi-octagon-fill::before { content: "\f4aa"; } -.bi-octagon-half::before { content: "\f4ab"; } -.bi-octagon::before { content: "\f4ac"; } -.bi-option::before { content: "\f4ad"; } -.bi-outlet::before { content: "\f4ae"; } -.bi-paint-bucket::before { content: "\f4af"; } -.bi-palette-fill::before { content: "\f4b0"; } -.bi-palette::before { content: "\f4b1"; } -.bi-palette2::before { content: "\f4b2"; } -.bi-paperclip::before { content: "\f4b3"; } -.bi-paragraph::before { content: "\f4b4"; } -.bi-patch-check-fill::before { content: "\f4b5"; } -.bi-patch-check::before { content: "\f4b6"; } -.bi-patch-exclamation-fill::before { content: "\f4b7"; } -.bi-patch-exclamation::before { content: "\f4b8"; } -.bi-patch-minus-fill::before { content: "\f4b9"; } -.bi-patch-minus::before { content: "\f4ba"; } -.bi-patch-plus-fill::before { content: "\f4bb"; } -.bi-patch-plus::before { content: "\f4bc"; } -.bi-patch-question-fill::before { content: "\f4bd"; } -.bi-patch-question::before { content: "\f4be"; } -.bi-pause-btn-fill::before { content: "\f4bf"; } -.bi-pause-btn::before { content: "\f4c0"; } -.bi-pause-circle-fill::before { content: "\f4c1"; } -.bi-pause-circle::before { content: "\f4c2"; } -.bi-pause-fill::before { content: "\f4c3"; } -.bi-pause::before { content: "\f4c4"; } -.bi-peace-fill::before { content: "\f4c5"; } -.bi-peace::before { content: "\f4c6"; } -.bi-pen-fill::before { content: "\f4c7"; } -.bi-pen::before { content: "\f4c8"; } -.bi-pencil-fill::before { content: "\f4c9"; } -.bi-pencil-square::before { content: "\f4ca"; } -.bi-pencil::before { content: "\f4cb"; } -.bi-pentagon-fill::before { content: "\f4cc"; } -.bi-pentagon-half::before { content: "\f4cd"; } -.bi-pentagon::before { content: "\f4ce"; } -.bi-people-fill::before { content: "\f4cf"; } -.bi-people::before { content: "\f4d0"; } -.bi-percent::before { content: "\f4d1"; } -.bi-person-badge-fill::before { content: "\f4d2"; } -.bi-person-badge::before { content: "\f4d3"; } -.bi-person-bounding-box::before { content: "\f4d4"; } -.bi-person-check-fill::before { content: "\f4d5"; } -.bi-person-check::before { content: "\f4d6"; } -.bi-person-circle::before { content: "\f4d7"; } -.bi-person-dash-fill::before { content: "\f4d8"; } -.bi-person-dash::before { content: "\f4d9"; } -.bi-person-fill::before { content: "\f4da"; } -.bi-person-lines-fill::before { content: "\f4db"; } -.bi-person-plus-fill::before { content: "\f4dc"; } -.bi-person-plus::before { content: "\f4dd"; } -.bi-person-square::before { content: "\f4de"; } -.bi-person-x-fill::before { content: "\f4df"; } -.bi-person-x::before { content: "\f4e0"; } -.bi-person::before { content: "\f4e1"; } -.bi-phone-fill::before { content: "\f4e2"; } -.bi-phone-landscape-fill::before { content: "\f4e3"; } -.bi-phone-landscape::before { content: "\f4e4"; } -.bi-phone-vibrate-fill::before { content: "\f4e5"; } -.bi-phone-vibrate::before { content: "\f4e6"; } -.bi-phone::before { content: "\f4e7"; } -.bi-pie-chart-fill::before { content: "\f4e8"; } -.bi-pie-chart::before { content: "\f4e9"; } -.bi-pin-angle-fill::before { content: "\f4ea"; } -.bi-pin-angle::before { content: "\f4eb"; } -.bi-pin-fill::before { content: "\f4ec"; } -.bi-pin::before { content: "\f4ed"; } -.bi-pip-fill::before { content: "\f4ee"; } -.bi-pip::before { content: "\f4ef"; } -.bi-play-btn-fill::before { content: "\f4f0"; } -.bi-play-btn::before { content: "\f4f1"; } -.bi-play-circle-fill::before { content: "\f4f2"; } -.bi-play-circle::before { content: "\f4f3"; } -.bi-play-fill::before { content: "\f4f4"; } -.bi-play::before { content: "\f4f5"; } -.bi-plug-fill::before { content: "\f4f6"; } -.bi-plug::before { content: "\f4f7"; } -.bi-plus-circle-dotted::before { content: "\f4f8"; } -.bi-plus-circle-fill::before { content: "\f4f9"; } -.bi-plus-circle::before { content: "\f4fa"; } -.bi-plus-square-dotted::before { content: "\f4fb"; } -.bi-plus-square-fill::before { content: "\f4fc"; } -.bi-plus-square::before { content: "\f4fd"; } -.bi-plus::before { content: "\f4fe"; } -.bi-power::before { content: "\f4ff"; } -.bi-printer-fill::before { content: "\f500"; } -.bi-printer::before { content: "\f501"; } -.bi-puzzle-fill::before { content: "\f502"; } -.bi-puzzle::before { content: "\f503"; } -.bi-question-circle-fill::before { content: "\f504"; } -.bi-question-circle::before { content: "\f505"; } -.bi-question-diamond-fill::before { content: "\f506"; } -.bi-question-diamond::before { content: "\f507"; } -.bi-question-octagon-fill::before { content: "\f508"; } -.bi-question-octagon::before { content: "\f509"; } -.bi-question-square-fill::before { content: "\f50a"; } -.bi-question-square::before { content: "\f50b"; } -.bi-question::before { content: "\f50c"; } -.bi-rainbow::before { content: "\f50d"; } -.bi-receipt-cutoff::before { content: "\f50e"; } -.bi-receipt::before { content: "\f50f"; } -.bi-reception-0::before { content: "\f510"; } -.bi-reception-1::before { content: "\f511"; } -.bi-reception-2::before { content: "\f512"; } -.bi-reception-3::before { content: "\f513"; } -.bi-reception-4::before { content: "\f514"; } -.bi-record-btn-fill::before { content: "\f515"; } -.bi-record-btn::before { content: "\f516"; } -.bi-record-circle-fill::before { content: "\f517"; } -.bi-record-circle::before { content: "\f518"; } -.bi-record-fill::before { content: "\f519"; } -.bi-record::before { content: "\f51a"; } -.bi-record2-fill::before { content: "\f51b"; } -.bi-record2::before { content: "\f51c"; } -.bi-reply-all-fill::before { content: "\f51d"; } -.bi-reply-all::before { content: "\f51e"; } -.bi-reply-fill::before { content: "\f51f"; } -.bi-reply::before { content: "\f520"; } -.bi-rss-fill::before { content: "\f521"; } -.bi-rss::before { content: "\f522"; } -.bi-rulers::before { content: "\f523"; } -.bi-save-fill::before { content: "\f524"; } -.bi-save::before { content: "\f525"; } -.bi-save2-fill::before { content: "\f526"; } -.bi-save2::before { content: "\f527"; } -.bi-scissors::before { content: "\f528"; } -.bi-screwdriver::before { content: "\f529"; } -.bi-search::before { content: "\f52a"; } -.bi-segmented-nav::before { content: "\f52b"; } -.bi-server::before { content: "\f52c"; } -.bi-share-fill::before { content: "\f52d"; } -.bi-share::before { content: "\f52e"; } -.bi-shield-check::before { content: "\f52f"; } -.bi-shield-exclamation::before { content: "\f530"; } -.bi-shield-fill-check::before { content: "\f531"; } -.bi-shield-fill-exclamation::before { content: "\f532"; } -.bi-shield-fill-minus::before { content: "\f533"; } -.bi-shield-fill-plus::before { content: "\f534"; } -.bi-shield-fill-x::before { content: "\f535"; } -.bi-shield-fill::before { content: "\f536"; } -.bi-shield-lock-fill::before { content: "\f537"; } -.bi-shield-lock::before { content: "\f538"; } -.bi-shield-minus::before { content: "\f539"; } -.bi-shield-plus::before { content: "\f53a"; } -.bi-shield-shaded::before { content: "\f53b"; } -.bi-shield-slash-fill::before { content: "\f53c"; } -.bi-shield-slash::before { content: "\f53d"; } -.bi-shield-x::before { content: "\f53e"; } -.bi-shield::before { content: "\f53f"; } -.bi-shift-fill::before { content: "\f540"; } -.bi-shift::before { content: "\f541"; } -.bi-shop-window::before { content: "\f542"; } -.bi-shop::before { content: "\f543"; } -.bi-shuffle::before { content: "\f544"; } -.bi-signpost-2-fill::before { content: "\f545"; } -.bi-signpost-2::before { content: "\f546"; } -.bi-signpost-fill::before { content: "\f547"; } -.bi-signpost-split-fill::before { content: "\f548"; } -.bi-signpost-split::before { content: "\f549"; } -.bi-signpost::before { content: "\f54a"; } -.bi-sim-fill::before { content: "\f54b"; } -.bi-sim::before { content: "\f54c"; } -.bi-skip-backward-btn-fill::before { content: "\f54d"; } -.bi-skip-backward-btn::before { content: "\f54e"; } -.bi-skip-backward-circle-fill::before { content: "\f54f"; } -.bi-skip-backward-circle::before { content: "\f550"; } -.bi-skip-backward-fill::before { content: "\f551"; } -.bi-skip-backward::before { content: "\f552"; } -.bi-skip-end-btn-fill::before { content: "\f553"; } -.bi-skip-end-btn::before { content: "\f554"; } -.bi-skip-end-circle-fill::before { content: "\f555"; } -.bi-skip-end-circle::before { content: "\f556"; } -.bi-skip-end-fill::before { content: "\f557"; } -.bi-skip-end::before { content: "\f558"; } -.bi-skip-forward-btn-fill::before { content: "\f559"; } -.bi-skip-forward-btn::before { content: "\f55a"; } -.bi-skip-forward-circle-fill::before { content: "\f55b"; } -.bi-skip-forward-circle::before { content: "\f55c"; } -.bi-skip-forward-fill::before { content: "\f55d"; } -.bi-skip-forward::before { content: "\f55e"; } -.bi-skip-start-btn-fill::before { content: "\f55f"; } -.bi-skip-start-btn::before { content: "\f560"; } -.bi-skip-start-circle-fill::before { content: "\f561"; } -.bi-skip-start-circle::before { content: "\f562"; } -.bi-skip-start-fill::before { content: "\f563"; } -.bi-skip-start::before { content: "\f564"; } -.bi-slack::before { content: "\f565"; } -.bi-slash-circle-fill::before { content: "\f566"; } -.bi-slash-circle::before { content: "\f567"; } -.bi-slash-square-fill::before { content: "\f568"; } -.bi-slash-square::before { content: "\f569"; } -.bi-slash::before { content: "\f56a"; } -.bi-sliders::before { content: "\f56b"; } -.bi-smartwatch::before { content: "\f56c"; } -.bi-snow::before { content: "\f56d"; } -.bi-snow2::before { content: "\f56e"; } -.bi-snow3::before { content: "\f56f"; } -.bi-sort-alpha-down-alt::before { content: "\f570"; } -.bi-sort-alpha-down::before { content: "\f571"; } -.bi-sort-alpha-up-alt::before { content: "\f572"; } -.bi-sort-alpha-up::before { content: "\f573"; } -.bi-sort-down-alt::before { content: "\f574"; } -.bi-sort-down::before { content: "\f575"; } -.bi-sort-numeric-down-alt::before { content: "\f576"; } -.bi-sort-numeric-down::before { content: "\f577"; } -.bi-sort-numeric-up-alt::before { content: "\f578"; } -.bi-sort-numeric-up::before { content: "\f579"; } -.bi-sort-up-alt::before { content: "\f57a"; } -.bi-sort-up::before { content: "\f57b"; } -.bi-soundwave::before { content: "\f57c"; } -.bi-speaker-fill::before { content: "\f57d"; } -.bi-speaker::before { content: "\f57e"; } -.bi-speedometer::before { content: "\f57f"; } -.bi-speedometer2::before { content: "\f580"; } -.bi-spellcheck::before { content: "\f581"; } -.bi-square-fill::before { content: "\f582"; } -.bi-square-half::before { content: "\f583"; } -.bi-square::before { content: "\f584"; } -.bi-stack::before { content: "\f585"; } -.bi-star-fill::before { content: "\f586"; } -.bi-star-half::before { content: "\f587"; } -.bi-star::before { content: "\f588"; } -.bi-stars::before { content: "\f589"; } -.bi-stickies-fill::before { content: "\f58a"; } -.bi-stickies::before { content: "\f58b"; } -.bi-sticky-fill::before { content: "\f58c"; } -.bi-sticky::before { content: "\f58d"; } -.bi-stop-btn-fill::before { content: "\f58e"; } -.bi-stop-btn::before { content: "\f58f"; } -.bi-stop-circle-fill::before { content: "\f590"; } -.bi-stop-circle::before { content: "\f591"; } -.bi-stop-fill::before { content: "\f592"; } -.bi-stop::before { content: "\f593"; } -.bi-stoplights-fill::before { content: "\f594"; } -.bi-stoplights::before { content: "\f595"; } -.bi-stopwatch-fill::before { content: "\f596"; } -.bi-stopwatch::before { content: "\f597"; } -.bi-subtract::before { content: "\f598"; } -.bi-suit-club-fill::before { content: "\f599"; } -.bi-suit-club::before { content: "\f59a"; } -.bi-suit-diamond-fill::before { content: "\f59b"; } -.bi-suit-diamond::before { content: "\f59c"; } -.bi-suit-heart-fill::before { content: "\f59d"; } -.bi-suit-heart::before { content: "\f59e"; } -.bi-suit-spade-fill::before { content: "\f59f"; } -.bi-suit-spade::before { content: "\f5a0"; } -.bi-sun-fill::before { content: "\f5a1"; } -.bi-sun::before { content: "\f5a2"; } -.bi-sunglasses::before { content: "\f5a3"; } -.bi-sunrise-fill::before { content: "\f5a4"; } -.bi-sunrise::before { content: "\f5a5"; } -.bi-sunset-fill::before { content: "\f5a6"; } -.bi-sunset::before { content: "\f5a7"; } -.bi-symmetry-horizontal::before { content: "\f5a8"; } -.bi-symmetry-vertical::before { content: "\f5a9"; } -.bi-table::before { content: "\f5aa"; } -.bi-tablet-fill::before { content: "\f5ab"; } -.bi-tablet-landscape-fill::before { content: "\f5ac"; } -.bi-tablet-landscape::before { content: "\f5ad"; } -.bi-tablet::before { content: "\f5ae"; } -.bi-tag-fill::before { content: "\f5af"; } -.bi-tag::before { content: "\f5b0"; } -.bi-tags-fill::before { content: "\f5b1"; } -.bi-tags::before { content: "\f5b2"; } -.bi-telegram::before { content: "\f5b3"; } -.bi-telephone-fill::before { content: "\f5b4"; } -.bi-telephone-forward-fill::before { content: "\f5b5"; } -.bi-telephone-forward::before { content: "\f5b6"; } -.bi-telephone-inbound-fill::before { content: "\f5b7"; } -.bi-telephone-inbound::before { content: "\f5b8"; } -.bi-telephone-minus-fill::before { content: "\f5b9"; } -.bi-telephone-minus::before { content: "\f5ba"; } -.bi-telephone-outbound-fill::before { content: "\f5bb"; } -.bi-telephone-outbound::before { content: "\f5bc"; } -.bi-telephone-plus-fill::before { content: "\f5bd"; } -.bi-telephone-plus::before { content: "\f5be"; } -.bi-telephone-x-fill::before { content: "\f5bf"; } -.bi-telephone-x::before { content: "\f5c0"; } -.bi-telephone::before { content: "\f5c1"; } -.bi-terminal-fill::before { content: "\f5c2"; } -.bi-terminal::before { content: "\f5c3"; } -.bi-text-center::before { content: "\f5c4"; } -.bi-text-indent-left::before { content: "\f5c5"; } -.bi-text-indent-right::before { content: "\f5c6"; } -.bi-text-left::before { content: "\f5c7"; } -.bi-text-paragraph::before { content: "\f5c8"; } -.bi-text-right::before { content: "\f5c9"; } -.bi-textarea-resize::before { content: "\f5ca"; } -.bi-textarea-t::before { content: "\f5cb"; } -.bi-textarea::before { content: "\f5cc"; } -.bi-thermometer-half::before { content: "\f5cd"; } -.bi-thermometer-high::before { content: "\f5ce"; } -.bi-thermometer-low::before { content: "\f5cf"; } -.bi-thermometer-snow::before { content: "\f5d0"; } -.bi-thermometer-sun::before { content: "\f5d1"; } -.bi-thermometer::before { content: "\f5d2"; } -.bi-three-dots-vertical::before { content: "\f5d3"; } -.bi-three-dots::before { content: "\f5d4"; } -.bi-toggle-off::before { content: "\f5d5"; } -.bi-toggle-on::before { content: "\f5d6"; } -.bi-toggle2-off::before { content: "\f5d7"; } -.bi-toggle2-on::before { content: "\f5d8"; } -.bi-toggles::before { content: "\f5d9"; } -.bi-toggles2::before { content: "\f5da"; } -.bi-tools::before { content: "\f5db"; } -.bi-tornado::before { content: "\f5dc"; } -.bi-trash-fill::before { content: "\f5dd"; } -.bi-trash::before { content: "\f5de"; } -.bi-trash2-fill::before { content: "\f5df"; } -.bi-trash2::before { content: "\f5e0"; } -.bi-tree-fill::before { content: "\f5e1"; } -.bi-tree::before { content: "\f5e2"; } -.bi-triangle-fill::before { content: "\f5e3"; } -.bi-triangle-half::before { content: "\f5e4"; } -.bi-triangle::before { content: "\f5e5"; } -.bi-trophy-fill::before { content: "\f5e6"; } -.bi-trophy::before { content: "\f5e7"; } -.bi-tropical-storm::before { content: "\f5e8"; } -.bi-truck-flatbed::before { content: "\f5e9"; } -.bi-truck::before { content: "\f5ea"; } -.bi-tsunami::before { content: "\f5eb"; } -.bi-tv-fill::before { content: "\f5ec"; } -.bi-tv::before { content: "\f5ed"; } -.bi-twitch::before { content: "\f5ee"; } -.bi-twitter::before { content: "\f5ef"; } -.bi-type-bold::before { content: "\f5f0"; } -.bi-type-h1::before { content: "\f5f1"; } -.bi-type-h2::before { content: "\f5f2"; } -.bi-type-h3::before { content: "\f5f3"; } -.bi-type-italic::before { content: "\f5f4"; } -.bi-type-strikethrough::before { content: "\f5f5"; } -.bi-type-underline::before { content: "\f5f6"; } -.bi-type::before { content: "\f5f7"; } -.bi-ui-checks-grid::before { content: "\f5f8"; } -.bi-ui-checks::before { content: "\f5f9"; } -.bi-ui-radios-grid::before { content: "\f5fa"; } -.bi-ui-radios::before { content: "\f5fb"; } -.bi-umbrella-fill::before { content: "\f5fc"; } -.bi-umbrella::before { content: "\f5fd"; } -.bi-union::before { content: "\f5fe"; } -.bi-unlock-fill::before { content: "\f5ff"; } -.bi-unlock::before { content: "\f600"; } -.bi-upc-scan::before { content: "\f601"; } -.bi-upc::before { content: "\f602"; } -.bi-upload::before { content: "\f603"; } -.bi-vector-pen::before { content: "\f604"; } -.bi-view-list::before { content: "\f605"; } -.bi-view-stacked::before { content: "\f606"; } -.bi-vinyl-fill::before { content: "\f607"; } -.bi-vinyl::before { content: "\f608"; } -.bi-voicemail::before { content: "\f609"; } -.bi-volume-down-fill::before { content: "\f60a"; } -.bi-volume-down::before { content: "\f60b"; } -.bi-volume-mute-fill::before { content: "\f60c"; } -.bi-volume-mute::before { content: "\f60d"; } -.bi-volume-off-fill::before { content: "\f60e"; } -.bi-volume-off::before { content: "\f60f"; } -.bi-volume-up-fill::before { content: "\f610"; } -.bi-volume-up::before { content: "\f611"; } -.bi-vr::before { content: "\f612"; } -.bi-wallet-fill::before { content: "\f613"; } -.bi-wallet::before { content: "\f614"; } -.bi-wallet2::before { content: "\f615"; } -.bi-watch::before { content: "\f616"; } -.bi-water::before { content: "\f617"; } -.bi-whatsapp::before { content: "\f618"; } -.bi-wifi-1::before { content: "\f619"; } -.bi-wifi-2::before { content: "\f61a"; } -.bi-wifi-off::before { content: "\f61b"; } -.bi-wifi::before { content: "\f61c"; } -.bi-wind::before { content: "\f61d"; } -.bi-window-dock::before { content: "\f61e"; } -.bi-window-sidebar::before { content: "\f61f"; } -.bi-window::before { content: "\f620"; } -.bi-wrench::before { content: "\f621"; } -.bi-x-circle-fill::before { content: "\f622"; } -.bi-x-circle::before { content: "\f623"; } -.bi-x-diamond-fill::before { content: "\f624"; } -.bi-x-diamond::before { content: "\f625"; } -.bi-x-octagon-fill::before { content: "\f626"; } -.bi-x-octagon::before { content: "\f627"; } -.bi-x-square-fill::before { content: "\f628"; } -.bi-x-square::before { content: "\f629"; } -.bi-x::before { content: "\f62a"; } -.bi-youtube::before { content: "\f62b"; } -.bi-zoom-in::before { content: "\f62c"; } -.bi-zoom-out::before { content: "\f62d"; } -.bi-bank::before { content: "\f62e"; } -.bi-bank2::before { content: "\f62f"; } -.bi-bell-slash-fill::before { content: "\f630"; } -.bi-bell-slash::before { content: "\f631"; } -.bi-cash-coin::before { content: "\f632"; } -.bi-check-lg::before { content: "\f633"; } -.bi-coin::before { content: "\f634"; } -.bi-currency-bitcoin::before { content: "\f635"; } -.bi-currency-dollar::before { content: "\f636"; } -.bi-currency-euro::before { content: "\f637"; } -.bi-currency-exchange::before { content: "\f638"; } -.bi-currency-pound::before { content: "\f639"; } -.bi-currency-yen::before { content: "\f63a"; } -.bi-dash-lg::before { content: "\f63b"; } -.bi-exclamation-lg::before { content: "\f63c"; } -.bi-file-earmark-pdf-fill::before { content: "\f63d"; } -.bi-file-earmark-pdf::before { content: "\f63e"; } -.bi-file-pdf-fill::before { content: "\f63f"; } -.bi-file-pdf::before { content: "\f640"; } -.bi-gender-ambiguous::before { content: "\f641"; } -.bi-gender-female::before { content: "\f642"; } -.bi-gender-male::before { content: "\f643"; } -.bi-gender-trans::before { content: "\f644"; } -.bi-headset-vr::before { content: "\f645"; } -.bi-info-lg::before { content: "\f646"; } -.bi-mastodon::before { content: "\f647"; } -.bi-messenger::before { content: "\f648"; } -.bi-piggy-bank-fill::before { content: "\f649"; } -.bi-piggy-bank::before { content: "\f64a"; } -.bi-pin-map-fill::before { content: "\f64b"; } -.bi-pin-map::before { content: "\f64c"; } -.bi-plus-lg::before { content: "\f64d"; } -.bi-question-lg::before { content: "\f64e"; } -.bi-recycle::before { content: "\f64f"; } -.bi-reddit::before { content: "\f650"; } -.bi-safe-fill::before { content: "\f651"; } -.bi-safe2-fill::before { content: "\f652"; } -.bi-safe2::before { content: "\f653"; } -.bi-sd-card-fill::before { content: "\f654"; } -.bi-sd-card::before { content: "\f655"; } -.bi-skype::before { content: "\f656"; } -.bi-slash-lg::before { content: "\f657"; } -.bi-translate::before { content: "\f658"; } -.bi-x-lg::before { content: "\f659"; } -.bi-safe::before { content: "\f65a"; } -.bi-apple::before { content: "\f65b"; } -.bi-microsoft::before { content: "\f65d"; } -.bi-windows::before { content: "\f65e"; } -.bi-behance::before { content: "\f65c"; } -.bi-dribbble::before { content: "\f65f"; } -.bi-line::before { content: "\f660"; } -.bi-medium::before { content: "\f661"; } -.bi-paypal::before { content: "\f662"; } -.bi-pinterest::before { content: "\f663"; } -.bi-signal::before { content: "\f664"; } -.bi-snapchat::before { content: "\f665"; } -.bi-spotify::before { content: "\f666"; } -.bi-stack-overflow::before { content: "\f667"; } -.bi-strava::before { content: "\f668"; } -.bi-wordpress::before { content: "\f669"; } -.bi-vimeo::before { content: "\f66a"; } -.bi-activity::before { content: "\f66b"; } -.bi-easel2-fill::before { content: "\f66c"; } -.bi-easel2::before { content: "\f66d"; } -.bi-easel3-fill::before { content: "\f66e"; } -.bi-easel3::before { content: "\f66f"; } -.bi-fan::before { content: "\f670"; } -.bi-fingerprint::before { content: "\f671"; } -.bi-graph-down-arrow::before { content: "\f672"; } -.bi-graph-up-arrow::before { content: "\f673"; } -.bi-hypnotize::before { content: "\f674"; } -.bi-magic::before { content: "\f675"; } -.bi-person-rolodex::before { content: "\f676"; } -.bi-person-video::before { content: "\f677"; } -.bi-person-video2::before { content: "\f678"; } -.bi-person-video3::before { content: "\f679"; } -.bi-person-workspace::before { content: "\f67a"; } -.bi-radioactive::before { content: "\f67b"; } -.bi-webcam-fill::before { content: "\f67c"; } -.bi-webcam::before { content: "\f67d"; } -.bi-yin-yang::before { content: "\f67e"; } -.bi-bandaid-fill::before { content: "\f680"; } -.bi-bandaid::before { content: "\f681"; } -.bi-bluetooth::before { content: "\f682"; } -.bi-body-text::before { content: "\f683"; } -.bi-boombox::before { content: "\f684"; } -.bi-boxes::before { content: "\f685"; } -.bi-dpad-fill::before { content: "\f686"; } -.bi-dpad::before { content: "\f687"; } -.bi-ear-fill::before { content: "\f688"; } -.bi-ear::before { content: "\f689"; } -.bi-envelope-check-fill::before { content: "\f68b"; } -.bi-envelope-check::before { content: "\f68c"; } -.bi-envelope-dash-fill::before { content: "\f68e"; } -.bi-envelope-dash::before { content: "\f68f"; } -.bi-envelope-exclamation-fill::before { content: "\f691"; } -.bi-envelope-exclamation::before { content: "\f692"; } -.bi-envelope-plus-fill::before { content: "\f693"; } -.bi-envelope-plus::before { content: "\f694"; } -.bi-envelope-slash-fill::before { content: "\f696"; } -.bi-envelope-slash::before { content: "\f697"; } -.bi-envelope-x-fill::before { content: "\f699"; } -.bi-envelope-x::before { content: "\f69a"; } -.bi-explicit-fill::before { content: "\f69b"; } -.bi-explicit::before { content: "\f69c"; } -.bi-git::before { content: "\f69d"; } -.bi-infinity::before { content: "\f69e"; } -.bi-list-columns-reverse::before { content: "\f69f"; } -.bi-list-columns::before { content: "\f6a0"; } -.bi-meta::before { content: "\f6a1"; } -.bi-nintendo-switch::before { content: "\f6a4"; } -.bi-pc-display-horizontal::before { content: "\f6a5"; } -.bi-pc-display::before { content: "\f6a6"; } -.bi-pc-horizontal::before { content: "\f6a7"; } -.bi-pc::before { content: "\f6a8"; } -.bi-playstation::before { content: "\f6a9"; } -.bi-plus-slash-minus::before { content: "\f6aa"; } -.bi-projector-fill::before { content: "\f6ab"; } -.bi-projector::before { content: "\f6ac"; } -.bi-qr-code-scan::before { content: "\f6ad"; } -.bi-qr-code::before { content: "\f6ae"; } -.bi-quora::before { content: "\f6af"; } -.bi-quote::before { content: "\f6b0"; } -.bi-robot::before { content: "\f6b1"; } -.bi-send-check-fill::before { content: "\f6b2"; } -.bi-send-check::before { content: "\f6b3"; } -.bi-send-dash-fill::before { content: "\f6b4"; } -.bi-send-dash::before { content: "\f6b5"; } -.bi-send-exclamation-fill::before { content: "\f6b7"; } -.bi-send-exclamation::before { content: "\f6b8"; } -.bi-send-fill::before { content: "\f6b9"; } -.bi-send-plus-fill::before { content: "\f6ba"; } -.bi-send-plus::before { content: "\f6bb"; } -.bi-send-slash-fill::before { content: "\f6bc"; } -.bi-send-slash::before { content: "\f6bd"; } -.bi-send-x-fill::before { content: "\f6be"; } -.bi-send-x::before { content: "\f6bf"; } -.bi-send::before { content: "\f6c0"; } -.bi-steam::before { content: "\f6c1"; } -.bi-terminal-dash::before { content: "\f6c3"; } -.bi-terminal-plus::before { content: "\f6c4"; } -.bi-terminal-split::before { content: "\f6c5"; } -.bi-ticket-detailed-fill::before { content: "\f6c6"; } -.bi-ticket-detailed::before { content: "\f6c7"; } -.bi-ticket-fill::before { content: "\f6c8"; } -.bi-ticket-perforated-fill::before { content: "\f6c9"; } -.bi-ticket-perforated::before { content: "\f6ca"; } -.bi-ticket::before { content: "\f6cb"; } -.bi-tiktok::before { content: "\f6cc"; } -.bi-window-dash::before { content: "\f6cd"; } -.bi-window-desktop::before { content: "\f6ce"; } -.bi-window-fullscreen::before { content: "\f6cf"; } -.bi-window-plus::before { content: "\f6d0"; } -.bi-window-split::before { content: "\f6d1"; } -.bi-window-stack::before { content: "\f6d2"; } -.bi-window-x::before { content: "\f6d3"; } -.bi-xbox::before { content: "\f6d4"; } -.bi-ethernet::before { content: "\f6d5"; } -.bi-hdmi-fill::before { content: "\f6d6"; } -.bi-hdmi::before { content: "\f6d7"; } -.bi-usb-c-fill::before { content: "\f6d8"; } -.bi-usb-c::before { content: "\f6d9"; } -.bi-usb-fill::before { content: "\f6da"; } -.bi-usb-plug-fill::before { content: "\f6db"; } -.bi-usb-plug::before { content: "\f6dc"; } -.bi-usb-symbol::before { content: "\f6dd"; } -.bi-usb::before { content: "\f6de"; } -.bi-boombox-fill::before { content: "\f6df"; } -.bi-displayport::before { content: "\f6e1"; } -.bi-gpu-card::before { content: "\f6e2"; } -.bi-memory::before { content: "\f6e3"; } -.bi-modem-fill::before { content: "\f6e4"; } -.bi-modem::before { content: "\f6e5"; } -.bi-motherboard-fill::before { content: "\f6e6"; } -.bi-motherboard::before { content: "\f6e7"; } -.bi-optical-audio-fill::before { content: "\f6e8"; } -.bi-optical-audio::before { content: "\f6e9"; } -.bi-pci-card::before { content: "\f6ea"; } -.bi-router-fill::before { content: "\f6eb"; } -.bi-router::before { content: "\f6ec"; } -.bi-thunderbolt-fill::before { content: "\f6ef"; } -.bi-thunderbolt::before { content: "\f6f0"; } -.bi-usb-drive-fill::before { content: "\f6f1"; } -.bi-usb-drive::before { content: "\f6f2"; } -.bi-usb-micro-fill::before { content: "\f6f3"; } -.bi-usb-micro::before { content: "\f6f4"; } -.bi-usb-mini-fill::before { content: "\f6f5"; } -.bi-usb-mini::before { content: "\f6f6"; } -.bi-cloud-haze2::before { content: "\f6f7"; } -.bi-device-hdd-fill::before { content: "\f6f8"; } -.bi-device-hdd::before { content: "\f6f9"; } -.bi-device-ssd-fill::before { content: "\f6fa"; } -.bi-device-ssd::before { content: "\f6fb"; } -.bi-displayport-fill::before { content: "\f6fc"; } -.bi-mortarboard-fill::before { content: "\f6fd"; } -.bi-mortarboard::before { content: "\f6fe"; } -.bi-terminal-x::before { content: "\f6ff"; } -.bi-arrow-through-heart-fill::before { content: "\f700"; } -.bi-arrow-through-heart::before { content: "\f701"; } -.bi-badge-sd-fill::before { content: "\f702"; } -.bi-badge-sd::before { content: "\f703"; } -.bi-bag-heart-fill::before { content: "\f704"; } -.bi-bag-heart::before { content: "\f705"; } -.bi-balloon-fill::before { content: "\f706"; } -.bi-balloon-heart-fill::before { content: "\f707"; } -.bi-balloon-heart::before { content: "\f708"; } -.bi-balloon::before { content: "\f709"; } -.bi-box2-fill::before { content: "\f70a"; } -.bi-box2-heart-fill::before { content: "\f70b"; } -.bi-box2-heart::before { content: "\f70c"; } -.bi-box2::before { content: "\f70d"; } -.bi-braces-asterisk::before { content: "\f70e"; } -.bi-calendar-heart-fill::before { content: "\f70f"; } -.bi-calendar-heart::before { content: "\f710"; } -.bi-calendar2-heart-fill::before { content: "\f711"; } -.bi-calendar2-heart::before { content: "\f712"; } -.bi-chat-heart-fill::before { content: "\f713"; } -.bi-chat-heart::before { content: "\f714"; } -.bi-chat-left-heart-fill::before { content: "\f715"; } -.bi-chat-left-heart::before { content: "\f716"; } -.bi-chat-right-heart-fill::before { content: "\f717"; } -.bi-chat-right-heart::before { content: "\f718"; } -.bi-chat-square-heart-fill::before { content: "\f719"; } -.bi-chat-square-heart::before { content: "\f71a"; } -.bi-clipboard-check-fill::before { content: "\f71b"; } -.bi-clipboard-data-fill::before { content: "\f71c"; } -.bi-clipboard-fill::before { content: "\f71d"; } -.bi-clipboard-heart-fill::before { content: "\f71e"; } -.bi-clipboard-heart::before { content: "\f71f"; } -.bi-clipboard-minus-fill::before { content: "\f720"; } -.bi-clipboard-plus-fill::before { content: "\f721"; } -.bi-clipboard-pulse::before { content: "\f722"; } -.bi-clipboard-x-fill::before { content: "\f723"; } -.bi-clipboard2-check-fill::before { content: "\f724"; } -.bi-clipboard2-check::before { content: "\f725"; } -.bi-clipboard2-data-fill::before { content: "\f726"; } -.bi-clipboard2-data::before { content: "\f727"; } -.bi-clipboard2-fill::before { content: "\f728"; } -.bi-clipboard2-heart-fill::before { content: "\f729"; } -.bi-clipboard2-heart::before { content: "\f72a"; } -.bi-clipboard2-minus-fill::before { content: "\f72b"; } -.bi-clipboard2-minus::before { content: "\f72c"; } -.bi-clipboard2-plus-fill::before { content: "\f72d"; } -.bi-clipboard2-plus::before { content: "\f72e"; } -.bi-clipboard2-pulse-fill::before { content: "\f72f"; } -.bi-clipboard2-pulse::before { content: "\f730"; } -.bi-clipboard2-x-fill::before { content: "\f731"; } -.bi-clipboard2-x::before { content: "\f732"; } -.bi-clipboard2::before { content: "\f733"; } -.bi-emoji-kiss-fill::before { content: "\f734"; } -.bi-emoji-kiss::before { content: "\f735"; } -.bi-envelope-heart-fill::before { content: "\f736"; } -.bi-envelope-heart::before { content: "\f737"; } -.bi-envelope-open-heart-fill::before { content: "\f738"; } -.bi-envelope-open-heart::before { content: "\f739"; } -.bi-envelope-paper-fill::before { content: "\f73a"; } -.bi-envelope-paper-heart-fill::before { content: "\f73b"; } -.bi-envelope-paper-heart::before { content: "\f73c"; } -.bi-envelope-paper::before { content: "\f73d"; } -.bi-filetype-aac::before { content: "\f73e"; } -.bi-filetype-ai::before { content: "\f73f"; } -.bi-filetype-bmp::before { content: "\f740"; } -.bi-filetype-cs::before { content: "\f741"; } -.bi-filetype-css::before { content: "\f742"; } -.bi-filetype-csv::before { content: "\f743"; } -.bi-filetype-doc::before { content: "\f744"; } -.bi-filetype-docx::before { content: "\f745"; } -.bi-filetype-exe::before { content: "\f746"; } -.bi-filetype-gif::before { content: "\f747"; } -.bi-filetype-heic::before { content: "\f748"; } -.bi-filetype-html::before { content: "\f749"; } -.bi-filetype-java::before { content: "\f74a"; } -.bi-filetype-jpg::before { content: "\f74b"; } -.bi-filetype-js::before { content: "\f74c"; } -.bi-filetype-jsx::before { content: "\f74d"; } -.bi-filetype-key::before { content: "\f74e"; } -.bi-filetype-m4p::before { content: "\f74f"; } -.bi-filetype-md::before { content: "\f750"; } -.bi-filetype-mdx::before { content: "\f751"; } -.bi-filetype-mov::before { content: "\f752"; } -.bi-filetype-mp3::before { content: "\f753"; } -.bi-filetype-mp4::before { content: "\f754"; } -.bi-filetype-otf::before { content: "\f755"; } -.bi-filetype-pdf::before { content: "\f756"; } -.bi-filetype-php::before { content: "\f757"; } -.bi-filetype-png::before { content: "\f758"; } -.bi-filetype-ppt::before { content: "\f75a"; } -.bi-filetype-psd::before { content: "\f75b"; } -.bi-filetype-py::before { content: "\f75c"; } -.bi-filetype-raw::before { content: "\f75d"; } -.bi-filetype-rb::before { content: "\f75e"; } -.bi-filetype-sass::before { content: "\f75f"; } -.bi-filetype-scss::before { content: "\f760"; } -.bi-filetype-sh::before { content: "\f761"; } -.bi-filetype-svg::before { content: "\f762"; } -.bi-filetype-tiff::before { content: "\f763"; } -.bi-filetype-tsx::before { content: "\f764"; } -.bi-filetype-ttf::before { content: "\f765"; } -.bi-filetype-txt::before { content: "\f766"; } -.bi-filetype-wav::before { content: "\f767"; } -.bi-filetype-woff::before { content: "\f768"; } -.bi-filetype-xls::before { content: "\f76a"; } -.bi-filetype-xml::before { content: "\f76b"; } -.bi-filetype-yml::before { content: "\f76c"; } -.bi-heart-arrow::before { content: "\f76d"; } -.bi-heart-pulse-fill::before { content: "\f76e"; } -.bi-heart-pulse::before { content: "\f76f"; } -.bi-heartbreak-fill::before { content: "\f770"; } -.bi-heartbreak::before { content: "\f771"; } -.bi-hearts::before { content: "\f772"; } -.bi-hospital-fill::before { content: "\f773"; } -.bi-hospital::before { content: "\f774"; } -.bi-house-heart-fill::before { content: "\f775"; } -.bi-house-heart::before { content: "\f776"; } -.bi-incognito::before { content: "\f777"; } -.bi-magnet-fill::before { content: "\f778"; } -.bi-magnet::before { content: "\f779"; } -.bi-person-heart::before { content: "\f77a"; } -.bi-person-hearts::before { content: "\f77b"; } -.bi-phone-flip::before { content: "\f77c"; } -.bi-plugin::before { content: "\f77d"; } -.bi-postage-fill::before { content: "\f77e"; } -.bi-postage-heart-fill::before { content: "\f77f"; } -.bi-postage-heart::before { content: "\f780"; } -.bi-postage::before { content: "\f781"; } -.bi-postcard-fill::before { content: "\f782"; } -.bi-postcard-heart-fill::before { content: "\f783"; } -.bi-postcard-heart::before { content: "\f784"; } -.bi-postcard::before { content: "\f785"; } -.bi-search-heart-fill::before { content: "\f786"; } -.bi-search-heart::before { content: "\f787"; } -.bi-sliders2-vertical::before { content: "\f788"; } -.bi-sliders2::before { content: "\f789"; } -.bi-trash3-fill::before { content: "\f78a"; } -.bi-trash3::before { content: "\f78b"; } -.bi-valentine::before { content: "\f78c"; } -.bi-valentine2::before { content: "\f78d"; } -.bi-wrench-adjustable-circle-fill::before { content: "\f78e"; } -.bi-wrench-adjustable-circle::before { content: "\f78f"; } -.bi-wrench-adjustable::before { content: "\f790"; } -.bi-filetype-json::before { content: "\f791"; } -.bi-filetype-pptx::before { content: "\f792"; } -.bi-filetype-xlsx::before { content: "\f793"; } -.bi-1-circle-fill::before { content: "\f796"; } -.bi-1-circle::before { content: "\f797"; } -.bi-1-square-fill::before { content: "\f798"; } -.bi-1-square::before { content: "\f799"; } -.bi-2-circle-fill::before { content: "\f79c"; } -.bi-2-circle::before { content: "\f79d"; } -.bi-2-square-fill::before { content: "\f79e"; } -.bi-2-square::before { content: "\f79f"; } -.bi-3-circle-fill::before { content: "\f7a2"; } -.bi-3-circle::before { content: "\f7a3"; } -.bi-3-square-fill::before { content: "\f7a4"; } -.bi-3-square::before { content: "\f7a5"; } -.bi-4-circle-fill::before { content: "\f7a8"; } -.bi-4-circle::before { content: "\f7a9"; } -.bi-4-square-fill::before { content: "\f7aa"; } -.bi-4-square::before { content: "\f7ab"; } -.bi-5-circle-fill::before { content: "\f7ae"; } -.bi-5-circle::before { content: "\f7af"; } -.bi-5-square-fill::before { content: "\f7b0"; } -.bi-5-square::before { content: "\f7b1"; } -.bi-6-circle-fill::before { content: "\f7b4"; } -.bi-6-circle::before { content: "\f7b5"; } -.bi-6-square-fill::before { content: "\f7b6"; } -.bi-6-square::before { content: "\f7b7"; } -.bi-7-circle-fill::before { content: "\f7ba"; } -.bi-7-circle::before { content: "\f7bb"; } -.bi-7-square-fill::before { content: "\f7bc"; } -.bi-7-square::before { content: "\f7bd"; } -.bi-8-circle-fill::before { content: "\f7c0"; } -.bi-8-circle::before { content: "\f7c1"; } -.bi-8-square-fill::before { content: "\f7c2"; } -.bi-8-square::before { content: "\f7c3"; } -.bi-9-circle-fill::before { content: "\f7c6"; } -.bi-9-circle::before { content: "\f7c7"; } -.bi-9-square-fill::before { content: "\f7c8"; } -.bi-9-square::before { content: "\f7c9"; } -.bi-airplane-engines-fill::before { content: "\f7ca"; } -.bi-airplane-engines::before { content: "\f7cb"; } -.bi-airplane-fill::before { content: "\f7cc"; } -.bi-airplane::before { content: "\f7cd"; } -.bi-alexa::before { content: "\f7ce"; } -.bi-alipay::before { content: "\f7cf"; } -.bi-android::before { content: "\f7d0"; } -.bi-android2::before { content: "\f7d1"; } -.bi-box-fill::before { content: "\f7d2"; } -.bi-box-seam-fill::before { content: "\f7d3"; } -.bi-browser-chrome::before { content: "\f7d4"; } -.bi-browser-edge::before { content: "\f7d5"; } -.bi-browser-firefox::before { content: "\f7d6"; } -.bi-browser-safari::before { content: "\f7d7"; } -.bi-c-circle-fill::before { content: "\f7da"; } -.bi-c-circle::before { content: "\f7db"; } -.bi-c-square-fill::before { content: "\f7dc"; } -.bi-c-square::before { content: "\f7dd"; } -.bi-capsule-pill::before { content: "\f7de"; } -.bi-capsule::before { content: "\f7df"; } -.bi-car-front-fill::before { content: "\f7e0"; } -.bi-car-front::before { content: "\f7e1"; } -.bi-cassette-fill::before { content: "\f7e2"; } -.bi-cassette::before { content: "\f7e3"; } -.bi-cc-circle-fill::before { content: "\f7e6"; } -.bi-cc-circle::before { content: "\f7e7"; } -.bi-cc-square-fill::before { content: "\f7e8"; } -.bi-cc-square::before { content: "\f7e9"; } -.bi-cup-hot-fill::before { content: "\f7ea"; } -.bi-cup-hot::before { content: "\f7eb"; } -.bi-currency-rupee::before { content: "\f7ec"; } -.bi-dropbox::before { content: "\f7ed"; } -.bi-escape::before { content: "\f7ee"; } -.bi-fast-forward-btn-fill::before { content: "\f7ef"; } -.bi-fast-forward-btn::before { content: "\f7f0"; } -.bi-fast-forward-circle-fill::before { content: "\f7f1"; } -.bi-fast-forward-circle::before { content: "\f7f2"; } -.bi-fast-forward-fill::before { content: "\f7f3"; } -.bi-fast-forward::before { content: "\f7f4"; } -.bi-filetype-sql::before { content: "\f7f5"; } -.bi-fire::before { content: "\f7f6"; } -.bi-google-play::before { content: "\f7f7"; } -.bi-h-circle-fill::before { content: "\f7fa"; } -.bi-h-circle::before { content: "\f7fb"; } -.bi-h-square-fill::before { content: "\f7fc"; } -.bi-h-square::before { content: "\f7fd"; } -.bi-indent::before { content: "\f7fe"; } -.bi-lungs-fill::before { content: "\f7ff"; } -.bi-lungs::before { content: "\f800"; } -.bi-microsoft-teams::before { content: "\f801"; } -.bi-p-circle-fill::before { content: "\f804"; } -.bi-p-circle::before { content: "\f805"; } -.bi-p-square-fill::before { content: "\f806"; } -.bi-p-square::before { content: "\f807"; } -.bi-pass-fill::before { content: "\f808"; } -.bi-pass::before { content: "\f809"; } -.bi-prescription::before { content: "\f80a"; } -.bi-prescription2::before { content: "\f80b"; } -.bi-r-circle-fill::before { content: "\f80e"; } -.bi-r-circle::before { content: "\f80f"; } -.bi-r-square-fill::before { content: "\f810"; } -.bi-r-square::before { content: "\f811"; } -.bi-repeat-1::before { content: "\f812"; } -.bi-repeat::before { content: "\f813"; } -.bi-rewind-btn-fill::before { content: "\f814"; } -.bi-rewind-btn::before { content: "\f815"; } -.bi-rewind-circle-fill::before { content: "\f816"; } -.bi-rewind-circle::before { content: "\f817"; } -.bi-rewind-fill::before { content: "\f818"; } -.bi-rewind::before { content: "\f819"; } -.bi-train-freight-front-fill::before { content: "\f81a"; } -.bi-train-freight-front::before { content: "\f81b"; } -.bi-train-front-fill::before { content: "\f81c"; } -.bi-train-front::before { content: "\f81d"; } -.bi-train-lightrail-front-fill::before { content: "\f81e"; } -.bi-train-lightrail-front::before { content: "\f81f"; } -.bi-truck-front-fill::before { content: "\f820"; } -.bi-truck-front::before { content: "\f821"; } -.bi-ubuntu::before { content: "\f822"; } -.bi-unindent::before { content: "\f823"; } -.bi-unity::before { content: "\f824"; } -.bi-universal-access-circle::before { content: "\f825"; } -.bi-universal-access::before { content: "\f826"; } -.bi-virus::before { content: "\f827"; } -.bi-virus2::before { content: "\f828"; } -.bi-wechat::before { content: "\f829"; } -.bi-yelp::before { content: "\f82a"; } -.bi-sign-stop-fill::before { content: "\f82b"; } -.bi-sign-stop-lights-fill::before { content: "\f82c"; } -.bi-sign-stop-lights::before { content: "\f82d"; } -.bi-sign-stop::before { content: "\f82e"; } -.bi-sign-turn-left-fill::before { content: "\f82f"; } -.bi-sign-turn-left::before { content: "\f830"; } -.bi-sign-turn-right-fill::before { content: "\f831"; } -.bi-sign-turn-right::before { content: "\f832"; } -.bi-sign-turn-slight-left-fill::before { content: "\f833"; } -.bi-sign-turn-slight-left::before { content: "\f834"; } -.bi-sign-turn-slight-right-fill::before { content: "\f835"; } -.bi-sign-turn-slight-right::before { content: "\f836"; } -.bi-sign-yield-fill::before { content: "\f837"; } -.bi-sign-yield::before { content: "\f838"; } -.bi-ev-station-fill::before { content: "\f839"; } -.bi-ev-station::before { content: "\f83a"; } -.bi-fuel-pump-diesel-fill::before { content: "\f83b"; } -.bi-fuel-pump-diesel::before { content: "\f83c"; } -.bi-fuel-pump-fill::before { content: "\f83d"; } -.bi-fuel-pump::before { content: "\f83e"; } -.bi-0-circle-fill::before { content: "\f83f"; } -.bi-0-circle::before { content: "\f840"; } -.bi-0-square-fill::before { content: "\f841"; } -.bi-0-square::before { content: "\f842"; } -.bi-rocket-fill::before { content: "\f843"; } -.bi-rocket-takeoff-fill::before { content: "\f844"; } -.bi-rocket-takeoff::before { content: "\f845"; } -.bi-rocket::before { content: "\f846"; } -.bi-stripe::before { content: "\f847"; } -.bi-subscript::before { content: "\f848"; } -.bi-superscript::before { content: "\f849"; } -.bi-trello::before { content: "\f84a"; } -.bi-envelope-at-fill::before { content: "\f84b"; } -.bi-envelope-at::before { content: "\f84c"; } -.bi-regex::before { content: "\f84d"; } -.bi-text-wrap::before { content: "\f84e"; } -.bi-sign-dead-end-fill::before { content: "\f84f"; } -.bi-sign-dead-end::before { content: "\f850"; } -.bi-sign-do-not-enter-fill::before { content: "\f851"; } -.bi-sign-do-not-enter::before { content: "\f852"; } -.bi-sign-intersection-fill::before { content: "\f853"; } -.bi-sign-intersection-side-fill::before { content: "\f854"; } -.bi-sign-intersection-side::before { content: "\f855"; } -.bi-sign-intersection-t-fill::before { content: "\f856"; } -.bi-sign-intersection-t::before { content: "\f857"; } -.bi-sign-intersection-y-fill::before { content: "\f858"; } -.bi-sign-intersection-y::before { content: "\f859"; } -.bi-sign-intersection::before { content: "\f85a"; } -.bi-sign-merge-left-fill::before { content: "\f85b"; } -.bi-sign-merge-left::before { content: "\f85c"; } -.bi-sign-merge-right-fill::before { content: "\f85d"; } -.bi-sign-merge-right::before { content: "\f85e"; } -.bi-sign-no-left-turn-fill::before { content: "\f85f"; } -.bi-sign-no-left-turn::before { content: "\f860"; } -.bi-sign-no-parking-fill::before { content: "\f861"; } -.bi-sign-no-parking::before { content: "\f862"; } -.bi-sign-no-right-turn-fill::before { content: "\f863"; } -.bi-sign-no-right-turn::before { content: "\f864"; } -.bi-sign-railroad-fill::before { content: "\f865"; } -.bi-sign-railroad::before { content: "\f866"; } -.bi-building-add::before { content: "\f867"; } -.bi-building-check::before { content: "\f868"; } -.bi-building-dash::before { content: "\f869"; } -.bi-building-down::before { content: "\f86a"; } -.bi-building-exclamation::before { content: "\f86b"; } -.bi-building-fill-add::before { content: "\f86c"; } -.bi-building-fill-check::before { content: "\f86d"; } -.bi-building-fill-dash::before { content: "\f86e"; } -.bi-building-fill-down::before { content: "\f86f"; } -.bi-building-fill-exclamation::before { content: "\f870"; } -.bi-building-fill-gear::before { content: "\f871"; } -.bi-building-fill-lock::before { content: "\f872"; } -.bi-building-fill-slash::before { content: "\f873"; } -.bi-building-fill-up::before { content: "\f874"; } -.bi-building-fill-x::before { content: "\f875"; } -.bi-building-fill::before { content: "\f876"; } -.bi-building-gear::before { content: "\f877"; } -.bi-building-lock::before { content: "\f878"; } -.bi-building-slash::before { content: "\f879"; } -.bi-building-up::before { content: "\f87a"; } -.bi-building-x::before { content: "\f87b"; } -.bi-buildings-fill::before { content: "\f87c"; } -.bi-buildings::before { content: "\f87d"; } -.bi-bus-front-fill::before { content: "\f87e"; } -.bi-bus-front::before { content: "\f87f"; } -.bi-ev-front-fill::before { content: "\f880"; } -.bi-ev-front::before { content: "\f881"; } -.bi-globe-americas::before { content: "\f882"; } -.bi-globe-asia-australia::before { content: "\f883"; } -.bi-globe-central-south-asia::before { content: "\f884"; } -.bi-globe-europe-africa::before { content: "\f885"; } -.bi-house-add-fill::before { content: "\f886"; } -.bi-house-add::before { content: "\f887"; } -.bi-house-check-fill::before { content: "\f888"; } -.bi-house-check::before { content: "\f889"; } -.bi-house-dash-fill::before { content: "\f88a"; } -.bi-house-dash::before { content: "\f88b"; } -.bi-house-down-fill::before { content: "\f88c"; } -.bi-house-down::before { content: "\f88d"; } -.bi-house-exclamation-fill::before { content: "\f88e"; } -.bi-house-exclamation::before { content: "\f88f"; } -.bi-house-gear-fill::before { content: "\f890"; } -.bi-house-gear::before { content: "\f891"; } -.bi-house-lock-fill::before { content: "\f892"; } -.bi-house-lock::before { content: "\f893"; } -.bi-house-slash-fill::before { content: "\f894"; } -.bi-house-slash::before { content: "\f895"; } -.bi-house-up-fill::before { content: "\f896"; } -.bi-house-up::before { content: "\f897"; } -.bi-house-x-fill::before { content: "\f898"; } -.bi-house-x::before { content: "\f899"; } -.bi-person-add::before { content: "\f89a"; } -.bi-person-down::before { content: "\f89b"; } -.bi-person-exclamation::before { content: "\f89c"; } -.bi-person-fill-add::before { content: "\f89d"; } -.bi-person-fill-check::before { content: "\f89e"; } -.bi-person-fill-dash::before { content: "\f89f"; } -.bi-person-fill-down::before { content: "\f8a0"; } -.bi-person-fill-exclamation::before { content: "\f8a1"; } -.bi-person-fill-gear::before { content: "\f8a2"; } -.bi-person-fill-lock::before { content: "\f8a3"; } -.bi-person-fill-slash::before { content: "\f8a4"; } -.bi-person-fill-up::before { content: "\f8a5"; } -.bi-person-fill-x::before { content: "\f8a6"; } -.bi-person-gear::before { content: "\f8a7"; } -.bi-person-lock::before { content: "\f8a8"; } -.bi-person-slash::before { content: "\f8a9"; } -.bi-person-up::before { content: "\f8aa"; } -.bi-scooter::before { content: "\f8ab"; } -.bi-taxi-front-fill::before { content: "\f8ac"; } -.bi-taxi-front::before { content: "\f8ad"; } -.bi-amd::before { content: "\f8ae"; } -.bi-database-add::before { content: "\f8af"; } -.bi-database-check::before { content: "\f8b0"; } -.bi-database-dash::before { content: "\f8b1"; } -.bi-database-down::before { content: "\f8b2"; } -.bi-database-exclamation::before { content: "\f8b3"; } -.bi-database-fill-add::before { content: "\f8b4"; } -.bi-database-fill-check::before { content: "\f8b5"; } -.bi-database-fill-dash::before { content: "\f8b6"; } -.bi-database-fill-down::before { content: "\f8b7"; } -.bi-database-fill-exclamation::before { content: "\f8b8"; } -.bi-database-fill-gear::before { content: "\f8b9"; } -.bi-database-fill-lock::before { content: "\f8ba"; } -.bi-database-fill-slash::before { content: "\f8bb"; } -.bi-database-fill-up::before { content: "\f8bc"; } -.bi-database-fill-x::before { content: "\f8bd"; } -.bi-database-fill::before { content: "\f8be"; } -.bi-database-gear::before { content: "\f8bf"; } -.bi-database-lock::before { content: "\f8c0"; } -.bi-database-slash::before { content: "\f8c1"; } -.bi-database-up::before { content: "\f8c2"; } -.bi-database-x::before { content: "\f8c3"; } -.bi-database::before { content: "\f8c4"; } -.bi-houses-fill::before { content: "\f8c5"; } -.bi-houses::before { content: "\f8c6"; } -.bi-nvidia::before { content: "\f8c7"; } -.bi-person-vcard-fill::before { content: "\f8c8"; } -.bi-person-vcard::before { content: "\f8c9"; } -.bi-sina-weibo::before { content: "\f8ca"; } -.bi-tencent-qq::before { content: "\f8cb"; } -.bi-wikipedia::before { content: "\f8cc"; } -.bi-alphabet-uppercase::before { content: "\f2a5"; } -.bi-alphabet::before { content: "\f68a"; } -.bi-amazon::before { content: "\f68d"; } -.bi-arrows-collapse-vertical::before { content: "\f690"; } -.bi-arrows-expand-vertical::before { content: "\f695"; } -.bi-arrows-vertical::before { content: "\f698"; } -.bi-arrows::before { content: "\f6a2"; } -.bi-ban-fill::before { content: "\f6a3"; } -.bi-ban::before { content: "\f6b6"; } -.bi-bing::before { content: "\f6c2"; } -.bi-cake::before { content: "\f6e0"; } -.bi-cake2::before { content: "\f6ed"; } -.bi-cookie::before { content: "\f6ee"; } -.bi-copy::before { content: "\f759"; } -.bi-crosshair::before { content: "\f769"; } -.bi-crosshair2::before { content: "\f794"; } -.bi-emoji-astonished-fill::before { content: "\f795"; } -.bi-emoji-astonished::before { content: "\f79a"; } -.bi-emoji-grimace-fill::before { content: "\f79b"; } -.bi-emoji-grimace::before { content: "\f7a0"; } -.bi-emoji-grin-fill::before { content: "\f7a1"; } -.bi-emoji-grin::before { content: "\f7a6"; } -.bi-emoji-surprise-fill::before { content: "\f7a7"; } -.bi-emoji-surprise::before { content: "\f7ac"; } -.bi-emoji-tear-fill::before { content: "\f7ad"; } -.bi-emoji-tear::before { content: "\f7b2"; } -.bi-envelope-arrow-down-fill::before { content: "\f7b3"; } -.bi-envelope-arrow-down::before { content: "\f7b8"; } -.bi-envelope-arrow-up-fill::before { content: "\f7b9"; } -.bi-envelope-arrow-up::before { content: "\f7be"; } -.bi-feather::before { content: "\f7bf"; } -.bi-feather2::before { content: "\f7c4"; } -.bi-floppy-fill::before { content: "\f7c5"; } -.bi-floppy::before { content: "\f7d8"; } -.bi-floppy2-fill::before { content: "\f7d9"; } -.bi-floppy2::before { content: "\f7e4"; } -.bi-gitlab::before { content: "\f7e5"; } -.bi-highlighter::before { content: "\f7f8"; } -.bi-marker-tip::before { content: "\f802"; } -.bi-nvme-fill::before { content: "\f803"; } -.bi-nvme::before { content: "\f80c"; } -.bi-opencollective::before { content: "\f80d"; } -.bi-pci-card-network::before { content: "\f8cd"; } -.bi-pci-card-sound::before { content: "\f8ce"; } -.bi-radar::before { content: "\f8cf"; } -.bi-send-arrow-down-fill::before { content: "\f8d0"; } -.bi-send-arrow-down::before { content: "\f8d1"; } -.bi-send-arrow-up-fill::before { content: "\f8d2"; } -.bi-send-arrow-up::before { content: "\f8d3"; } -.bi-sim-slash-fill::before { content: "\f8d4"; } -.bi-sim-slash::before { content: "\f8d5"; } -.bi-sourceforge::before { content: "\f8d6"; } -.bi-substack::before { content: "\f8d7"; } -.bi-threads-fill::before { content: "\f8d8"; } -.bi-threads::before { content: "\f8d9"; } -.bi-transparency::before { content: "\f8da"; } -.bi-twitter-x::before { content: "\f8db"; } -.bi-type-h4::before { content: "\f8dc"; } -.bi-type-h5::before { content: "\f8dd"; } -.bi-type-h6::before { content: "\f8de"; } -.bi-backpack-fill::before { content: "\f8df"; } -.bi-backpack::before { content: "\f8e0"; } -.bi-backpack2-fill::before { content: "\f8e1"; } -.bi-backpack2::before { content: "\f8e2"; } -.bi-backpack3-fill::before { content: "\f8e3"; } -.bi-backpack3::before { content: "\f8e4"; } -.bi-backpack4-fill::before { content: "\f8e5"; } -.bi-backpack4::before { content: "\f8e6"; } -.bi-brilliance::before { content: "\f8e7"; } -.bi-cake-fill::before { content: "\f8e8"; } -.bi-cake2-fill::before { content: "\f8e9"; } -.bi-duffle-fill::before { content: "\f8ea"; } -.bi-duffle::before { content: "\f8eb"; } -.bi-exposure::before { content: "\f8ec"; } -.bi-gender-neuter::before { content: "\f8ed"; } -.bi-highlights::before { content: "\f8ee"; } -.bi-luggage-fill::before { content: "\f8ef"; } -.bi-luggage::before { content: "\f8f0"; } -.bi-mailbox-flag::before { content: "\f8f1"; } -.bi-mailbox2-flag::before { content: "\f8f2"; } -.bi-noise-reduction::before { content: "\f8f3"; } -.bi-passport-fill::before { content: "\f8f4"; } -.bi-passport::before { content: "\f8f5"; } -.bi-person-arms-up::before { content: "\f8f6"; } -.bi-person-raised-hand::before { content: "\f8f7"; } -.bi-person-standing-dress::before { content: "\f8f8"; } -.bi-person-standing::before { content: "\f8f9"; } -.bi-person-walking::before { content: "\f8fa"; } -.bi-person-wheelchair::before { content: "\f8fb"; } -.bi-shadows::before { content: "\f8fc"; } -.bi-suitcase-fill::before { content: "\f8fd"; } -.bi-suitcase-lg-fill::before { content: "\f8fe"; } -.bi-suitcase-lg::before { content: "\f8ff"; } -.bi-suitcase::before { content: "\f900"; } -.bi-suitcase2-fill::before { content: "\f901"; } -.bi-suitcase2::before { content: "\f902"; } -.bi-vignette::before { content: "\f903"; } -.bi-bluesky::before { content: "\f7f9"; } -.bi-tux::before { content: "\f904"; } -.bi-beaker-fill::before { content: "\f905"; } -.bi-beaker::before { content: "\f906"; } -.bi-flask-fill::before { content: "\f907"; } -.bi-flask-florence-fill::before { content: "\f908"; } -.bi-flask-florence::before { content: "\f909"; } -.bi-flask::before { content: "\f90a"; } -.bi-leaf-fill::before { content: "\f90b"; } -.bi-leaf::before { content: "\f90c"; } -.bi-measuring-cup-fill::before { content: "\f90d"; } -.bi-measuring-cup::before { content: "\f90e"; } -.bi-unlock2-fill::before { content: "\f90f"; } -.bi-unlock2::before { content: "\f910"; } -.bi-battery-low::before { content: "\f911"; } -.bi-anthropic::before { content: "\f912"; } -.bi-apple-music::before { content: "\f913"; } -.bi-claude::before { content: "\f914"; } -.bi-openai::before { content: "\f915"; } -.bi-perplexity::before { content: "\f916"; } -.bi-css::before { content: "\f917"; } -.bi-javascript::before { content: "\f918"; } -.bi-typescript::before { content: "\f919"; } -.bi-fork-knife::before { content: "\f91a"; } -.bi-globe-americas-fill::before { content: "\f91b"; } -.bi-globe-asia-australia-fill::before { content: "\f91c"; } -.bi-globe-central-south-asia-fill::before { content: "\f91d"; } -.bi-globe-europe-africa-fill::before { content: "\f91e"; } diff --git a/site_libs/bootstrap/bootstrap-icons.woff b/site_libs/bootstrap/bootstrap-icons.woff deleted file mode 100644 index a4fa4f024c2171080ebaf3112fccbf90cdb98479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180288 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 DSDONf diff --git a/site_libs/bootstrap/bootstrap.min.js b/site_libs/bootstrap/bootstrap.min.js deleted file mode 100644 index e8f21f7..0000000 --- a/site_libs/bootstrap/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v5.3.1 (https://getbootstrap.com/) - * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function j(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${j(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${j(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${j(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.1"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return n(e)},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",Mt="collapsing",jt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(Mt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(Mt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(jt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Me(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const je={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Me(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:Me(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==P(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],M=f?-T[$]/2:0,j=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-M-q-z-O.mainAxis:j-q-z-O.mainAxis,K=v?-E[$]/2+M+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,Mn=`hide${xn}`,jn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,jn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,jn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",Ms="Home",js="End",Fs="active",Hs="fade",Ws="show",Bs=":not(.dropdown-toggle)",zs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Rs=`.nav-link${Bs}, .list-group-item${Bs}, [role="tab"]${Bs}, ${zs}`,qs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Vs extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,Ms,js].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([Ms,js].includes(t.key))i=e[t.key===Ms?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Vs.getOrCreateInstance(i).show())}_getChildren(){return z.find(Rs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(Rs)?t:z.findOne(Rs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Vs.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,zs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Vs.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(qs))Vs.getOrCreateInstance(t)})),m(Vs);const Ks=".bs.toast",Qs=`mouseover${Ks}`,Xs=`mouseout${Ks}`,Ys=`focusin${Ks}`,Us=`focusout${Ks}`,Gs=`hide${Ks}`,Js=`hidden${Ks}`,Zs=`show${Ks}`,to=`shown${Ks}`,eo="hide",io="show",no="showing",so={animation:"boolean",autohide:"boolean",delay:"number"},oo={animation:!0,autohide:!0,delay:5e3};class ro extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return oo}static get DefaultType(){return so}static get NAME(){return"toast"}show(){N.trigger(this._element,Zs).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(eo),d(this._element),this._element.classList.add(io,no),this._queueCallback((()=>{this._element.classList.remove(no),N.trigger(this._element,to),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Gs).defaultPrevented||(this._element.classList.add(no),this._queueCallback((()=>{this._element.classList.add(eo),this._element.classList.remove(no,io),N.trigger(this._element,Js)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(io),super.dispose()}isShown(){return this._element.classList.contains(io)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Qs,(t=>this._onInteraction(t,!0))),N.on(this._element,Xs,(t=>this._onInteraction(t,!1))),N.on(this._element,Ys,(t=>this._onInteraction(t,!0))),N.on(this._element,Us,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ro.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ro),m(ro),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Vs,Toast:ro,Tooltip:cs}})); -//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/site_libs/clipboard/clipboard.min.js b/site_libs/clipboard/clipboard.min.js deleted file mode 100644 index 1103f81..0000000 --- a/site_libs/clipboard/clipboard.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * clipboard.js v2.0.11 - * https://clipboardjs.com/ - * - * Licensed MIT © Zeno Rocha - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1.container-fluid.crosstalk-bscols{margin-left:auto;margin-right:auto}.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column{display:inline-block;padding-right:12px;vertical-align:top}@media only screen and (max-width: 480px){.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column{display:block;padding-right:inherit}}.crosstalk-input{margin-bottom:15px}.crosstalk-input .control-label{margin-bottom:0;vertical-align:middle}.crosstalk-input input[type="checkbox"]{margin:4px 0 0;margin-top:1px;line-height:normal}.crosstalk-input .checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.crosstalk-input .checkbox>label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.crosstalk-input .checkbox input[type="checkbox"],.crosstalk-input .checkbox-inline input[type="checkbox"]{position:absolute;margin-top:2px;margin-left:-20px}.crosstalk-input .checkbox+.checkbox{margin-top:-5px}.crosstalk-input .checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.crosstalk-input .checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px} diff --git a/site_libs/crosstalk-1.2.2/js/crosstalk.js b/site_libs/crosstalk-1.2.2/js/crosstalk.js deleted file mode 100644 index fd9eb53..0000000 --- a/site_libs/crosstalk-1.2.2/js/crosstalk.js +++ /dev/null @@ -1,1474 +0,0 @@ -(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o b) { - return 1; - } -} - -/** - * @private - */ - -var FilterSet = function () { - function FilterSet() { - _classCallCheck(this, FilterSet); - - this.reset(); - } - - _createClass(FilterSet, [{ - key: "reset", - value: function reset() { - // Key: handle ID, Value: array of selected keys, or null - this._handles = {}; - // Key: key string, Value: count of handles that include it - this._keys = {}; - this._value = null; - this._activeHandles = 0; - } - }, { - key: "update", - value: function update(handleId, keys) { - if (keys !== null) { - keys = keys.slice(0); // clone before sorting - keys.sort(naturalComparator); - } - - var _diffSortedLists = (0, _util.diffSortedLists)(this._handles[handleId], keys), - added = _diffSortedLists.added, - removed = _diffSortedLists.removed; - - this._handles[handleId] = keys; - - for (var i = 0; i < added.length; i++) { - this._keys[added[i]] = (this._keys[added[i]] || 0) + 1; - } - for (var _i = 0; _i < removed.length; _i++) { - this._keys[removed[_i]]--; - } - - this._updateValue(keys); - } - - /** - * @param {string[]} keys Sorted array of strings that indicate - * a superset of possible keys. - * @private - */ - - }, { - key: "_updateValue", - value: function _updateValue() { - var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._allKeys; - - var handleCount = Object.keys(this._handles).length; - if (handleCount === 0) { - this._value = null; - } else { - this._value = []; - for (var i = 0; i < keys.length; i++) { - var count = this._keys[keys[i]]; - if (count === handleCount) { - this._value.push(keys[i]); - } - } - } - } - }, { - key: "clear", - value: function clear(handleId) { - if (typeof this._handles[handleId] === "undefined") { - return; - } - - var keys = this._handles[handleId]; - if (!keys) { - keys = []; - } - - for (var i = 0; i < keys.length; i++) { - this._keys[keys[i]]--; - } - delete this._handles[handleId]; - - this._updateValue(); - } - }, { - key: "value", - get: function get() { - return this._value; - } - }, { - key: "_allKeys", - get: function get() { - var allKeys = Object.keys(this._keys); - allKeys.sort(naturalComparator); - return allKeys; - } - }]); - - return FilterSet; -}(); - -exports.default = FilterSet; - -},{"./util":11}],4:[function(require,module,exports){ -(function (global){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.default = group; - -var _var2 = require("./var"); - -var _var3 = _interopRequireDefault(_var2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -// Use a global so that multiple copies of crosstalk.js can be loaded and still -// have groups behave as singletons across all copies. -global.__crosstalk_groups = global.__crosstalk_groups || {}; -var groups = global.__crosstalk_groups; - -function group(groupName) { - if (groupName && typeof groupName === "string") { - if (!groups.hasOwnProperty(groupName)) { - groups[groupName] = new Group(groupName); - } - return groups[groupName]; - } else if ((typeof groupName === "undefined" ? "undefined" : _typeof(groupName)) === "object" && groupName._vars && groupName.var) { - // Appears to already be a group object - return groupName; - } else if (Array.isArray(groupName) && groupName.length == 1 && typeof groupName[0] === "string") { - return group(groupName[0]); - } else { - throw new Error("Invalid groupName argument"); - } -} - -var Group = function () { - function Group(name) { - _classCallCheck(this, Group); - - this.name = name; - this._vars = {}; - } - - _createClass(Group, [{ - key: "var", - value: function _var(name) { - if (!name || typeof name !== "string") { - throw new Error("Invalid var name"); - } - - if (!this._vars.hasOwnProperty(name)) this._vars[name] = new _var3.default(this, name); - return this._vars[name]; - } - }, { - key: "has", - value: function has(name) { - if (!name || typeof name !== "string") { - throw new Error("Invalid var name"); - } - - return this._vars.hasOwnProperty(name); - } - }]); - - return Group; -}(); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./var":12}],5:[function(require,module,exports){ -(function (global){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _group = require("./group"); - -var _group2 = _interopRequireDefault(_group); - -var _selection = require("./selection"); - -var _filter = require("./filter"); - -var _input = require("./input"); - -require("./input_selectize"); - -require("./input_checkboxgroup"); - -require("./input_slider"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var defaultGroup = (0, _group2.default)("default"); - -function var_(name) { - return defaultGroup.var(name); -} - -function has(name) { - return defaultGroup.has(name); -} - -if (global.Shiny) { - global.Shiny.addCustomMessageHandler("update-client-value", function (message) { - if (typeof message.group === "string") { - (0, _group2.default)(message.group).var(message.name).set(message.value); - } else { - var_(message.name).set(message.value); - } - }); -} - -var crosstalk = { - group: _group2.default, - var: var_, - has: has, - SelectionHandle: _selection.SelectionHandle, - FilterHandle: _filter.FilterHandle, - bind: _input.bind -}; - -/** - * @namespace crosstalk - */ -exports.default = crosstalk; - -global.crosstalk = crosstalk; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./filter":2,"./group":4,"./input":6,"./input_checkboxgroup":7,"./input_selectize":8,"./input_slider":9,"./selection":10}],6:[function(require,module,exports){ -(function (global){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.register = register; -exports.bind = bind; -var $ = global.jQuery; - -var bindings = {}; - -function register(reg) { - bindings[reg.className] = reg; - if (global.document && global.document.readyState !== "complete") { - $(function () { - bind(); - }); - } else if (global.document) { - setTimeout(bind, 100); - } -} - -function bind() { - Object.keys(bindings).forEach(function (className) { - var binding = bindings[className]; - $("." + binding.className).not(".crosstalk-input-bound").each(function (i, el) { - bindInstance(binding, el); - }); - }); -} - -// Escape jQuery identifier -function $escape(val) { - return val.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1"); -} - -function bindEl(el) { - var $el = $(el); - Object.keys(bindings).forEach(function (className) { - if ($el.hasClass(className) && !$el.hasClass("crosstalk-input-bound")) { - var binding = bindings[className]; - bindInstance(binding, el); - } - }); -} - -function bindInstance(binding, el) { - var jsonEl = $(el).find("script[type='application/json'][data-for='" + $escape(el.id) + "']"); - var data = JSON.parse(jsonEl[0].innerText); - - var instance = binding.factory(el, data); - $(el).data("crosstalk-instance", instance); - $(el).addClass("crosstalk-input-bound"); -} - -if (global.Shiny) { - var inputBinding = new global.Shiny.InputBinding(); - var _$ = global.jQuery; - _$.extend(inputBinding, { - find: function find(scope) { - return _$(scope).find(".crosstalk-input"); - }, - initialize: function initialize(el) { - if (!_$(el).hasClass("crosstalk-input-bound")) { - bindEl(el); - } - }, - getId: function getId(el) { - return el.id; - }, - getValue: function getValue(el) {}, - setValue: function setValue(el, value) {}, - receiveMessage: function receiveMessage(el, data) {}, - subscribe: function subscribe(el, callback) { - _$(el).data("crosstalk-instance").resume(); - }, - unsubscribe: function unsubscribe(el) { - _$(el).data("crosstalk-instance").suspend(); - } - }); - global.Shiny.inputBindings.register(inputBinding, "crosstalk.inputBinding"); -} - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],7:[function(require,module,exports){ -(function (global){ -"use strict"; - -var _input = require("./input"); - -var input = _interopRequireWildcard(_input); - -var _filter = require("./filter"); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -var $ = global.jQuery; - -input.register({ - className: "crosstalk-input-checkboxgroup", - - factory: function factory(el, data) { - /* - * map: {"groupA": ["keyA", "keyB", ...], ...} - * group: "ct-groupname" - */ - var ctHandle = new _filter.FilterHandle(data.group); - - var lastKnownKeys = void 0; - var $el = $(el); - $el.on("change", "input[type='checkbox']", function () { - var checked = $el.find("input[type='checkbox']:checked"); - if (checked.length === 0) { - lastKnownKeys = null; - ctHandle.clear(); - } else { - var keys = {}; - checked.each(function () { - data.map[this.value].forEach(function (key) { - keys[key] = true; - }); - }); - var keyArray = Object.keys(keys); - keyArray.sort(); - lastKnownKeys = keyArray; - ctHandle.set(keyArray); - } - }); - - return { - suspend: function suspend() { - ctHandle.clear(); - }, - resume: function resume() { - if (lastKnownKeys) ctHandle.set(lastKnownKeys); - } - }; - } -}); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./filter":2,"./input":6}],8:[function(require,module,exports){ -(function (global){ -"use strict"; - -var _input = require("./input"); - -var input = _interopRequireWildcard(_input); - -var _util = require("./util"); - -var util = _interopRequireWildcard(_util); - -var _filter = require("./filter"); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -var $ = global.jQuery; - -input.register({ - className: "crosstalk-input-select", - - factory: function factory(el, data) { - /* - * items: {value: [...], label: [...]} - * map: {"groupA": ["keyA", "keyB", ...], ...} - * group: "ct-groupname" - */ - - var first = [{ value: "", label: "(All)" }]; - var items = util.dataframeToD3(data.items); - var opts = { - options: first.concat(items), - valueField: "value", - labelField: "label", - searchField: "label" - }; - - var select = $(el).find("select")[0]; - - var selectize = $(select).selectize(opts)[0].selectize; - - var ctHandle = new _filter.FilterHandle(data.group); - - var lastKnownKeys = void 0; - selectize.on("change", function () { - if (selectize.items.length === 0) { - lastKnownKeys = null; - ctHandle.clear(); - } else { - var keys = {}; - selectize.items.forEach(function (group) { - data.map[group].forEach(function (key) { - keys[key] = true; - }); - }); - var keyArray = Object.keys(keys); - keyArray.sort(); - lastKnownKeys = keyArray; - ctHandle.set(keyArray); - } - }); - - return { - suspend: function suspend() { - ctHandle.clear(); - }, - resume: function resume() { - if (lastKnownKeys) ctHandle.set(lastKnownKeys); - } - }; - } -}); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./filter":2,"./input":6,"./util":11}],9:[function(require,module,exports){ -(function (global){ -"use strict"; - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var _input = require("./input"); - -var input = _interopRequireWildcard(_input); - -var _filter = require("./filter"); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -var $ = global.jQuery; -var strftime = global.strftime; - -input.register({ - className: "crosstalk-input-slider", - - factory: function factory(el, data) { - /* - * map: {"groupA": ["keyA", "keyB", ...], ...} - * group: "ct-groupname" - */ - var ctHandle = new _filter.FilterHandle(data.group); - - var opts = {}; - var $el = $(el).find("input"); - var dataType = $el.data("data-type"); - var timeFormat = $el.data("time-format"); - var round = $el.data("round"); - var timeFormatter = void 0; - - // Set up formatting functions - if (dataType === "date") { - timeFormatter = strftime.utc(); - opts.prettify = function (num) { - return timeFormatter(timeFormat, new Date(num)); - }; - } else if (dataType === "datetime") { - var timezone = $el.data("timezone"); - if (timezone) timeFormatter = strftime.timezone(timezone);else timeFormatter = strftime; - - opts.prettify = function (num) { - return timeFormatter(timeFormat, new Date(num)); - }; - } else if (dataType === "number") { - if (typeof round !== "undefined") opts.prettify = function (num) { - var factor = Math.pow(10, round); - return Math.round(num * factor) / factor; - }; - } - - $el.ionRangeSlider(opts); - - function getValue() { - var result = $el.data("ionRangeSlider").result; - - // Function for converting numeric value from slider to appropriate type. - var convert = void 0; - var dataType = $el.data("data-type"); - if (dataType === "date") { - convert = function convert(val) { - return formatDateUTC(new Date(+val)); - }; - } else if (dataType === "datetime") { - convert = function convert(val) { - // Convert ms to s - return +val / 1000; - }; - } else { - convert = function convert(val) { - return +val; - }; - } - - if ($el.data("ionRangeSlider").options.type === "double") { - return [convert(result.from), convert(result.to)]; - } else { - return convert(result.from); - } - } - - var lastKnownKeys = null; - - $el.on("change.crosstalkSliderInput", function (event) { - if (!$el.data("updating") && !$el.data("animating")) { - var _getValue = getValue(), - _getValue2 = _slicedToArray(_getValue, 2), - from = _getValue2[0], - to = _getValue2[1]; - - var keys = []; - for (var i = 0; i < data.values.length; i++) { - var val = data.values[i]; - if (val >= from && val <= to) { - keys.push(data.keys[i]); - } - } - keys.sort(); - ctHandle.set(keys); - lastKnownKeys = keys; - } - }); - - // let $el = $(el); - // $el.on("change", "input[type="checkbox"]", function() { - // let checked = $el.find("input[type="checkbox"]:checked"); - // if (checked.length === 0) { - // ctHandle.clear(); - // } else { - // let keys = {}; - // checked.each(function() { - // data.map[this.value].forEach(function(key) { - // keys[key] = true; - // }); - // }); - // let keyArray = Object.keys(keys); - // keyArray.sort(); - // ctHandle.set(keyArray); - // } - // }); - - return { - suspend: function suspend() { - ctHandle.clear(); - }, - resume: function resume() { - if (lastKnownKeys) ctHandle.set(lastKnownKeys); - } - }; - } -}); - -// Convert a number to a string with leading zeros -function padZeros(n, digits) { - var str = n.toString(); - while (str.length < digits) { - str = "0" + str; - }return str; -} - -// Given a Date object, return a string in yyyy-mm-dd format, using the -// UTC date. This may be a day off from the date in the local time zone. -function formatDateUTC(date) { - if (date instanceof Date) { - return date.getUTCFullYear() + "-" + padZeros(date.getUTCMonth() + 1, 2) + "-" + padZeros(date.getUTCDate(), 2); - } else { - return null; - } -} - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./filter":2,"./input":6}],10:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.SelectionHandle = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _events = require("./events"); - -var _events2 = _interopRequireDefault(_events); - -var _group = require("./group"); - -var _group2 = _interopRequireDefault(_group); - -var _util = require("./util"); - -var util = _interopRequireWildcard(_util); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * Use this class to read and write (and listen for changes to) the selection - * for a Crosstalk group. This is intended to be used for linked brushing. - * - * If two (or more) `SelectionHandle` instances in the same webpage share the - * same group name, they will share the same state. Setting the selection using - * one `SelectionHandle` instance will result in the `value` property instantly - * changing across the others, and `"change"` event listeners on all instances - * (including the one that initiated the sending) will fire. - * - * @param {string} [group] - The name of the Crosstalk group, or if none, - * null or undefined (or any other falsy value). This can be changed later - * via the [SelectionHandle#setGroup](#setGroup) method. - * @param {Object} [extraInfo] - An object whose properties will be copied to - * the event object whenever an event is emitted. - */ -var SelectionHandle = exports.SelectionHandle = function () { - function SelectionHandle() { - var group = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var extraInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - - _classCallCheck(this, SelectionHandle); - - this._eventRelay = new _events2.default(); - this._emitter = new util.SubscriptionTracker(this._eventRelay); - - // Name of the group we're currently tracking, if any. Can change over time. - this._group = null; - // The Var we're currently tracking, if any. Can change over time. - this._var = null; - // The event handler subscription we currently have on var.on("change"). - this._varOnChangeSub = null; - - this._extraInfo = util.extend({ sender: this }, extraInfo); - - this.setGroup(group); - } - - /** - * Changes the Crosstalk group membership of this SelectionHandle. The group - * being switched away from (if any) will not have its selection value - * modified as a result of calling `setGroup`, even if this handle was the - * most recent handle to set the selection of the group. - * - * The group being switched to (if any) will also not have its selection value - * modified as a result of calling `setGroup`. If you want to set the - * selection value of the new group, call `set` explicitly. - * - * @param {string} group - The name of the Crosstalk group, or null (or - * undefined) to clear the group. - */ - - - _createClass(SelectionHandle, [{ - key: "setGroup", - value: function setGroup(group) { - var _this = this; - - // If group is unchanged, do nothing - if (this._group === group) return; - // Treat null, undefined, and other falsy values the same - if (!this._group && !group) return; - - if (this._var) { - this._var.off("change", this._varOnChangeSub); - this._var = null; - this._varOnChangeSub = null; - } - - this._group = group; - - if (group) { - this._var = (0, _group2.default)(group).var("selection"); - var sub = this._var.on("change", function (e) { - _this._eventRelay.trigger("change", e, _this); - }); - this._varOnChangeSub = sub; - } - } - - /** - * Retrieves the current selection for the group represented by this - * `SelectionHandle`. - * - * - If no selection is active, then this value will be falsy. - * - If a selection is active, but no data points are selected, then this - * value will be an empty array. - * - If a selection is active, and data points are selected, then the keys - * of the selected data points will be present in the array. - */ - - }, { - key: "_mergeExtraInfo", - - - /** - * Combines the given `extraInfo` (if any) with the handle's default - * `_extraInfo` (if any). - * @private - */ - value: function _mergeExtraInfo(extraInfo) { - // Important incidental effect: shallow clone is returned - return util.extend({}, this._extraInfo ? this._extraInfo : null, extraInfo ? extraInfo : null); - } - - /** - * Overwrites the current selection for the group, and raises the `"change"` - * event among all of the group's '`SelectionHandle` instances (including - * this one). - * - * @fires SelectionHandle#change - * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see - * {@link SelectionHandle#value}). - * @param {Object} [extraInfo] - Extra properties to be included on the event - * object that's passed to listeners (in addition to any options that were - * passed into the `SelectionHandle` constructor). - */ - - }, { - key: "set", - value: function set(selectedKeys, extraInfo) { - if (this._var) this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo)); - } - - /** - * Overwrites the current selection for the group, and raises the `"change"` - * event among all of the group's '`SelectionHandle` instances (including - * this one). - * - * @fires SelectionHandle#change - * @param {Object} [extraInfo] - Extra properties to be included on the event - * object that's passed to listeners (in addition to any that were passed - * into the `SelectionHandle` constructor). - */ - - }, { - key: "clear", - value: function clear(extraInfo) { - if (this._var) this.set(void 0, this._mergeExtraInfo(extraInfo)); - } - - /** - * Subscribes to events on this `SelectionHandle`. - * - * @param {string} eventType - Indicates the type of events to listen to. - * Currently, only `"change"` is supported. - * @param {SelectionHandle~listener} listener - The callback function that - * will be invoked when the event occurs. - * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel - * this subscription. - */ - - }, { - key: "on", - value: function on(eventType, listener) { - return this._emitter.on(eventType, listener); - } - - /** - * Cancels event subscriptions created by {@link SelectionHandle#on}. - * - * @param {string} eventType - The type of event to unsubscribe. - * @param {string|SelectionHandle~listener} listener - Either the callback - * function previously passed into {@link SelectionHandle#on}, or the - * string that was returned from {@link SelectionHandle#on}. - */ - - }, { - key: "off", - value: function off(eventType, listener) { - return this._emitter.off(eventType, listener); - } - - /** - * Shuts down the `SelectionHandle` object. - * - * Removes all event listeners that were added through this handle. - */ - - }, { - key: "close", - value: function close() { - this._emitter.removeAllListeners(); - this.setGroup(null); - } - }, { - key: "value", - get: function get() { - return this._var ? this._var.get() : null; - } - }]); - - return SelectionHandle; -}(); - -/** - * @callback SelectionHandle~listener - * @param {Object} event - An object containing details of the event. For - * `"change"` events, this includes the properties `value` (the new - * value of the selection, or `undefined` if no selection is active), - * `oldValue` (the previous value of the selection), and `sender` (the - * `SelectionHandle` instance that made the change). - */ - -/** - * @event SelectionHandle#change - * @type {object} - * @property {object} value - The new value of the selection, or `undefined` - * if no selection is active. - * @property {object} oldValue - The previous value of the selection. - * @property {SelectionHandle} sender - The `SelectionHandle` instance that - * changed the value. - */ - -},{"./events":1,"./group":4,"./util":11}],11:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.extend = extend; -exports.checkSorted = checkSorted; -exports.diffSortedLists = diffSortedLists; -exports.dataframeToD3 = dataframeToD3; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function extend(target) { - for (var _len = arguments.length, sources = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - sources[_key - 1] = arguments[_key]; - } - - for (var i = 0; i < sources.length; i++) { - var src = sources[i]; - if (typeof src === "undefined" || src === null) continue; - - for (var key in src) { - if (src.hasOwnProperty(key)) { - target[key] = src[key]; - } - } - } - return target; -} - -function checkSorted(list) { - for (var i = 1; i < list.length; i++) { - if (list[i] <= list[i - 1]) { - throw new Error("List is not sorted or contains duplicate"); - } - } -} - -function diffSortedLists(a, b) { - var i_a = 0; - var i_b = 0; - - if (!a) a = []; - if (!b) b = []; - - var a_only = []; - var b_only = []; - - checkSorted(a); - checkSorted(b); - - while (i_a < a.length && i_b < b.length) { - if (a[i_a] === b[i_b]) { - i_a++; - i_b++; - } else if (a[i_a] < b[i_b]) { - a_only.push(a[i_a++]); - } else { - b_only.push(b[i_b++]); - } - } - - if (i_a < a.length) a_only = a_only.concat(a.slice(i_a)); - if (i_b < b.length) b_only = b_only.concat(b.slice(i_b)); - return { - removed: a_only, - added: b_only - }; -} - -// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... } -// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ] -function dataframeToD3(df) { - var names = []; - var length = void 0; - for (var name in df) { - if (df.hasOwnProperty(name)) names.push(name); - if (_typeof(df[name]) !== "object" || typeof df[name].length === "undefined") { - throw new Error("All fields must be arrays"); - } else if (typeof length !== "undefined" && length !== df[name].length) { - throw new Error("All fields must be arrays of the same length"); - } - length = df[name].length; - } - var results = []; - var item = void 0; - for (var row = 0; row < length; row++) { - item = {}; - for (var col = 0; col < names.length; col++) { - item[names[col]] = df[names[col]][row]; - } - results.push(item); - } - return results; -} - -/** - * Keeps track of all event listener additions/removals and lets all active - * listeners be removed with a single operation. - * - * @private - */ - -var SubscriptionTracker = exports.SubscriptionTracker = function () { - function SubscriptionTracker(emitter) { - _classCallCheck(this, SubscriptionTracker); - - this._emitter = emitter; - this._subs = {}; - } - - _createClass(SubscriptionTracker, [{ - key: "on", - value: function on(eventType, listener) { - var sub = this._emitter.on(eventType, listener); - this._subs[sub] = eventType; - return sub; - } - }, { - key: "off", - value: function off(eventType, listener) { - var sub = this._emitter.off(eventType, listener); - if (sub) { - delete this._subs[sub]; - } - return sub; - } - }, { - key: "removeAllListeners", - value: function removeAllListeners() { - var _this = this; - - var current_subs = this._subs; - this._subs = {}; - Object.keys(current_subs).forEach(function (sub) { - _this._emitter.off(current_subs[sub], sub); - }); - } - }]); - - return SubscriptionTracker; -}(); - -},{}],12:[function(require,module,exports){ -(function (global){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _events = require("./events"); - -var _events2 = _interopRequireDefault(_events); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var Var = function () { - function Var(group, name, /*optional*/value) { - _classCallCheck(this, Var); - - this._group = group; - this._name = name; - this._value = value; - this._events = new _events2.default(); - } - - _createClass(Var, [{ - key: "get", - value: function get() { - return this._value; - } - }, { - key: "set", - value: function set(value, /*optional*/event) { - if (this._value === value) { - // Do nothing; the value hasn't changed - return; - } - var oldValue = this._value; - this._value = value; - // Alert JavaScript listeners that the value has changed - var evt = {}; - if (event && (typeof event === "undefined" ? "undefined" : _typeof(event)) === "object") { - for (var k in event) { - if (event.hasOwnProperty(k)) evt[k] = event[k]; - } - } - evt.oldValue = oldValue; - evt.value = value; - this._events.trigger("change", evt, this); - - // TODO: Make this extensible, to let arbitrary back-ends know that - // something has changed - if (global.Shiny && global.Shiny.onInputChange) { - global.Shiny.onInputChange(".clientValue-" + (this._group.name !== null ? this._group.name + "-" : "") + this._name, typeof value === "undefined" ? null : value); - } - } - }, { - key: "on", - value: function on(eventType, listener) { - return this._events.on(eventType, listener); - } - }, { - key: "off", - value: function off(eventType, listener) { - return this._events.off(eventType, listener); - } - }]); - - return Var; -}(); - -exports.default = Var; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./events":1}]},{},[5]) -//# sourceMappingURL=crosstalk.js.map diff --git a/site_libs/crosstalk-1.2.2/js/crosstalk.js.map b/site_libs/crosstalk-1.2.2/js/crosstalk.js.map deleted file mode 100644 index cff94f0..0000000 --- a/site_libs/crosstalk-1.2.2/js/crosstalk.js.map +++ /dev/null @@ -1,37 +0,0 @@ -{ - "version": 3, - "sources": [ - "node_modules/browser-pack/_prelude.js", - "javascript/src/events.js", - "javascript/src/filter.js", - "javascript/src/filterset.js", - "javascript/src/group.js", - "javascript/src/index.js", - "javascript/src/input.js", - "javascript/src/input_checkboxgroup.js", - "javascript/src/input_selectize.js", - "javascript/src/input_slider.js", - "javascript/src/selection.js", - "javascript/src/util.js", - "javascript/src/var.js" - ], - "names": [], - "mappings": "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", - "file": "generated.js", - "sourceRoot": "", - "sourcesContent": [ - "(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Combine the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Close the handle. This clears this handle's contribution to the filter set,\n * and unsubscribes all event listeners.\n */\n close() {\n this._emitter.removeAllListeners();\n this.clear();\n this.setGroup(null);\n }\n\n /**\n * Clear this handle's contribution to the filter set.\n *\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n clear(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.clear(this._id);\n this._onChange(extraInfo);\n }\n\n /**\n * Set this handle's contribution to the filter set. This array should consist\n * of the keys of the rows that _should_ be displayed; any keys that are not\n * present in the array will be considered _filtered out_. Note that multiple\n * `FilterHandle` instances in the group may each contribute an array of keys,\n * and only those keys that appear in _all_ of the arrays make it through the\n * filter.\n *\n * @param {string[]} keys - Empty array, or array of keys. To clear the\n * filter, don't pass an empty array; instead, use the\n * {@link FilterHandle#clear} method.\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n set(keys, extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.update(this._id, keys);\n this._onChange(extraInfo);\n }\n\n /**\n * @return {string[]|null} - Either: 1) an array of keys that made it through\n * all of the `FilterHandle` instances, or, 2) `null`, which means no filter\n * is being applied (all data should be displayed).\n */\n get filteredKeys() {\n return this._filterSet ? this._filterSet.value : null;\n }\n\n /**\n * Subscribe to events on this `FilterHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {FilterHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link FilterHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancel event subscriptions created by {@link FilterHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|FilterHandle~listener} listener - Either the callback\n * function previously passed into {@link FilterHandle#on}, or the\n * string that was returned from {@link FilterHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n _onChange(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * @callback FilterHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the filter set, or `null` if no filter set is active),\n * `oldValue` (the previous value of the filter set), and `sender` (the\n * `FilterHandle` instance that made the change).\n */\n\n}\n\n/**\n * @event FilterHandle#change\n * @type {object}\n * @property {object} value - The new value of the filter set, or `null`\n * if no filter set is active.\n * @property {object} oldValue - The previous value of the filter set.\n * @property {FilterHandle} sender - The `FilterHandle` instance that\n * changed the value.\n */\n", - "import { diffSortedLists } from \"./util\";\n\nfunction naturalComparator(a, b) {\n if (a === b) {\n return 0;\n } else if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n }\n}\n\n/**\n * @private\n */\nexport default class FilterSet {\n constructor() {\n this.reset();\n }\n\n reset() {\n // Key: handle ID, Value: array of selected keys, or null\n this._handles = {};\n // Key: key string, Value: count of handles that include it\n this._keys = {};\n this._value = null;\n this._activeHandles = 0;\n }\n\n get value() {\n return this._value;\n }\n\n update(handleId, keys) {\n if (keys !== null) {\n keys = keys.slice(0); // clone before sorting\n keys.sort(naturalComparator);\n }\n\n let {added, removed} = diffSortedLists(this._handles[handleId], keys);\n this._handles[handleId] = keys;\n\n for (let i = 0; i < added.length; i++) {\n this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;\n }\n for (let i = 0; i < removed.length; i++) {\n this._keys[removed[i]]--;\n }\n\n this._updateValue(keys);\n }\n\n /**\n * @param {string[]} keys Sorted array of strings that indicate\n * a superset of possible keys.\n * @private\n */\n _updateValue(keys = this._allKeys) {\n let handleCount = Object.keys(this._handles).length;\n if (handleCount === 0) {\n this._value = null;\n } else {\n this._value = [];\n for (let i = 0; i < keys.length; i++) {\n let count = this._keys[keys[i]];\n if (count === handleCount) {\n this._value.push(keys[i]);\n }\n }\n }\n }\n\n clear(handleId) {\n if (typeof(this._handles[handleId]) === \"undefined\") {\n return;\n }\n\n let keys = this._handles[handleId];\n if (!keys) {\n keys = [];\n }\n\n for (let i = 0; i < keys.length; i++) {\n this._keys[keys[i]]--;\n }\n delete this._handles[handleId];\n\n this._updateValue();\n }\n\n get _allKeys() {\n let allKeys = Object.keys(this._keys);\n allKeys.sort(naturalComparator);\n return allKeys;\n }\n}\n", - "import Var from \"./var\";\n\n// Use a global so that multiple copies of crosstalk.js can be loaded and still\n// have groups behave as singletons across all copies.\nglobal.__crosstalk_groups = global.__crosstalk_groups || {};\nlet groups = global.__crosstalk_groups;\n\nexport default function group(groupName) {\n if (groupName && typeof(groupName) === \"string\") {\n if (!groups.hasOwnProperty(groupName)) {\n groups[groupName] = new Group(groupName);\n }\n return groups[groupName];\n } else if (typeof(groupName) === \"object\" && groupName._vars && groupName.var) {\n // Appears to already be a group object\n return groupName;\n } else if (Array.isArray(groupName) &&\n groupName.length == 1 &&\n typeof(groupName[0]) === \"string\") {\n return group(groupName[0]);\n } else {\n throw new Error(\"Invalid groupName argument\");\n }\n}\n\nclass Group {\n constructor(name) {\n this.name = name;\n this._vars = {};\n }\n\n var(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n if (!this._vars.hasOwnProperty(name))\n this._vars[name] = new Var(this, name);\n return this._vars[name];\n }\n\n has(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n return this._vars.hasOwnProperty(name);\n }\n}\n", - "import group from \"./group\";\nimport { SelectionHandle } from \"./selection\";\nimport { FilterHandle } from \"./filter\";\nimport { bind } from \"./input\";\nimport \"./input_selectize\";\nimport \"./input_checkboxgroup\";\nimport \"./input_slider\";\n\nconst defaultGroup = group(\"default\");\n\nfunction var_(name) {\n return defaultGroup.var(name);\n}\n\nfunction has(name) {\n return defaultGroup.has(name);\n}\n\nif (global.Shiny) {\n global.Shiny.addCustomMessageHandler(\"update-client-value\", function(message) {\n if (typeof(message.group) === \"string\") {\n group(message.group).var(message.name).set(message.value);\n } else {\n var_(message.name).set(message.value);\n }\n });\n}\n\nconst crosstalk = {\n group: group,\n var: var_,\n has: has,\n SelectionHandle: SelectionHandle,\n FilterHandle: FilterHandle,\n bind: bind\n};\n\n/**\n * @namespace crosstalk\n */\nexport default crosstalk;\nglobal.crosstalk = crosstalk;\n", - "let $ = global.jQuery;\n\nlet bindings = {};\n\nexport function register(reg) {\n bindings[reg.className] = reg;\n if (global.document && global.document.readyState !== \"complete\") {\n $(() => {\n bind();\n });\n } else if (global.document) {\n setTimeout(bind, 100);\n }\n}\n\nexport function bind() {\n Object.keys(bindings).forEach(function(className) {\n let binding = bindings[className];\n $(\".\" + binding.className).not(\".crosstalk-input-bound\").each(function(i, el) {\n bindInstance(binding, el);\n });\n });\n}\n\n// Escape jQuery identifier\nfunction $escape(val) {\n return val.replace(/([!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n}\n\nfunction bindEl(el) {\n let $el = $(el);\n Object.keys(bindings).forEach(function(className) {\n if ($el.hasClass(className) && !$el.hasClass(\"crosstalk-input-bound\")) {\n let binding = bindings[className];\n bindInstance(binding, el);\n }\n });\n}\n\nfunction bindInstance(binding, el) {\n let jsonEl = $(el).find(\"script[type='application/json'][data-for='\" + $escape(el.id) + \"']\");\n let data = JSON.parse(jsonEl[0].innerText);\n\n let instance = binding.factory(el, data);\n $(el).data(\"crosstalk-instance\", instance);\n $(el).addClass(\"crosstalk-input-bound\");\n}\n\nif (global.Shiny) {\n let inputBinding = new global.Shiny.InputBinding();\n let $ = global.jQuery;\n $.extend(inputBinding, {\n find: function(scope) {\n return $(scope).find(\".crosstalk-input\");\n },\n initialize: function(el) {\n if (!$(el).hasClass(\"crosstalk-input-bound\")) {\n bindEl(el);\n }\n },\n getId: function(el) {\n return el.id;\n },\n getValue: function(el) {\n\n },\n setValue: function(el, value) {\n\n },\n receiveMessage: function(el, data) {\n\n },\n subscribe: function(el, callback) {\n $(el).data(\"crosstalk-instance\").resume();\n },\n unsubscribe: function(el) {\n $(el).data(\"crosstalk-instance\").suspend();\n }\n });\n global.Shiny.inputBindings.register(inputBinding, \"crosstalk.inputBinding\");\n}\n", - "import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-checkboxgroup\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n let $el = $(el);\n $el.on(\"change\", \"input[type='checkbox']\", function() {\n let checked = $el.find(\"input[type='checkbox']:checked\");\n if (checked.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n checked.each(function() {\n data.map[this.value].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n", - "import * as input from \"./input\";\nimport * as util from \"./util\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-select\",\n\n factory: function(el, data) {\n /*\n * items: {value: [...], label: [...]}\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n\n let first = [{value: \"\", label: \"(All)\"}];\n let items = util.dataframeToD3(data.items);\n let opts = {\n options: first.concat(items),\n valueField: \"value\",\n labelField: \"label\",\n searchField: \"label\"\n };\n\n let select = $(el).find(\"select\")[0];\n\n let selectize = $(select).selectize(opts)[0].selectize;\n\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n selectize.on(\"change\", function() {\n if (selectize.items.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n selectize.items.forEach(function(group) {\n data.map[group].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n", - "import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\nlet strftime = global.strftime;\n\ninput.register({\n className: \"crosstalk-input-slider\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let opts = {};\n let $el = $(el).find(\"input\");\n let dataType = $el.data(\"data-type\");\n let timeFormat = $el.data(\"time-format\");\n let round = $el.data(\"round\");\n let timeFormatter;\n\n // Set up formatting functions\n if (dataType === \"date\") {\n timeFormatter = strftime.utc();\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n\n } else if (dataType === \"datetime\") {\n let timezone = $el.data(\"timezone\");\n if (timezone)\n timeFormatter = strftime.timezone(timezone);\n else\n timeFormatter = strftime;\n\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n } else if (dataType === \"number\") {\n if (typeof round !== \"undefined\")\n opts.prettify = function(num) {\n let factor = Math.pow(10, round);\n return Math.round(num * factor) / factor;\n };\n }\n\n $el.ionRangeSlider(opts);\n\n function getValue() {\n let result = $el.data(\"ionRangeSlider\").result;\n\n // Function for converting numeric value from slider to appropriate type.\n let convert;\n let dataType = $el.data(\"data-type\");\n if (dataType === \"date\") {\n convert = function(val) {\n return formatDateUTC(new Date(+val));\n };\n } else if (dataType === \"datetime\") {\n convert = function(val) {\n // Convert ms to s\n return +val / 1000;\n };\n } else {\n convert = function(val) { return +val; };\n }\n\n if ($el.data(\"ionRangeSlider\").options.type === \"double\") {\n return [convert(result.from), convert(result.to)];\n } else {\n return convert(result.from);\n }\n }\n\n let lastKnownKeys = null;\n\n $el.on(\"change.crosstalkSliderInput\", function(event) {\n if (!$el.data(\"updating\") && !$el.data(\"animating\")) {\n let [from, to] = getValue();\n let keys = [];\n for (let i = 0; i < data.values.length; i++) {\n let val = data.values[i];\n if (val >= from && val <= to) {\n keys.push(data.keys[i]);\n }\n }\n keys.sort();\n ctHandle.set(keys);\n lastKnownKeys = keys;\n }\n });\n\n\n // let $el = $(el);\n // $el.on(\"change\", \"input[type=\"checkbox\"]\", function() {\n // let checked = $el.find(\"input[type=\"checkbox\"]:checked\");\n // if (checked.length === 0) {\n // ctHandle.clear();\n // } else {\n // let keys = {};\n // checked.each(function() {\n // data.map[this.value].forEach(function(key) {\n // keys[key] = true;\n // });\n // });\n // let keyArray = Object.keys(keys);\n // keyArray.sort();\n // ctHandle.set(keyArray);\n // }\n // });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n\n\n// Convert a number to a string with leading zeros\nfunction padZeros(n, digits) {\n let str = n.toString();\n while (str.length < digits)\n str = \"0\" + str;\n return str;\n}\n\n// Given a Date object, return a string in yyyy-mm-dd format, using the\n// UTC date. This may be a day off from the date in the local time zone.\nfunction formatDateUTC(date) {\n if (date instanceof Date) {\n return date.getUTCFullYear() + \"-\" +\n padZeros(date.getUTCMonth()+1, 2) + \"-\" +\n padZeros(date.getUTCDate(), 2);\n\n } else {\n return null;\n }\n}\n", - "import Events from \"./events\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\n/**\n * Use this class to read and write (and listen for changes to) the selection\n * for a Crosstalk group. This is intended to be used for linked brushing.\n *\n * If two (or more) `SelectionHandle` instances in the same webpage share the\n * same group name, they will share the same state. Setting the selection using\n * one `SelectionHandle` instance will result in the `value` property instantly\n * changing across the others, and `\"change\"` event listeners on all instances\n * (including the one that initiated the sending) will fire.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the [SelectionHandle#setGroup](#setGroup) method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class SelectionHandle {\n\n constructor(group = null, extraInfo = null) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._var = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this SelectionHandle. The group\n * being switched away from (if any) will not have its selection value\n * modified as a result of calling `setGroup`, even if this handle was the\n * most recent handle to set the selection of the group.\n *\n * The group being switched to (if any) will also not have its selection value\n * modified as a result of calling `setGroup`. If you want to set the\n * selection value of the new group, call `set` explicitly.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._var) {\n this._var.off(\"change\", this._varOnChangeSub);\n this._var = null;\n this._varOnChangeSub = null;\n }\n\n this._group = group;\n\n if (group) {\n this._var = grp(group).var(\"selection\");\n let sub = this._var.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Retrieves the current selection for the group represented by this\n * `SelectionHandle`.\n *\n * - If no selection is active, then this value will be falsy.\n * - If a selection is active, but no data points are selected, then this\n * value will be an empty array.\n * - If a selection is active, and data points are selected, then the keys\n * of the selected data points will be present in the array.\n */\n get value() {\n return this._var ? this._var.get() : null;\n }\n\n /**\n * Combines the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n // Important incidental effect: shallow clone is returned\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see\n * {@link SelectionHandle#value}).\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `SelectionHandle` constructor).\n */\n set(selectedKeys, extraInfo) {\n if (this._var)\n this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any that were passed\n * into the `SelectionHandle` constructor).\n */\n clear(extraInfo) {\n if (this._var)\n this.set(void 0, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Subscribes to events on this `SelectionHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {SelectionHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancels event subscriptions created by {@link SelectionHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|SelectionHandle~listener} listener - Either the callback\n * function previously passed into {@link SelectionHandle#on}, or the\n * string that was returned from {@link SelectionHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n /**\n * Shuts down the `SelectionHandle` object.\n *\n * Removes all event listeners that were added through this handle.\n */\n close() {\n this._emitter.removeAllListeners();\n this.setGroup(null);\n }\n}\n\n/**\n * @callback SelectionHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the selection, or `undefined` if no selection is active),\n * `oldValue` (the previous value of the selection), and `sender` (the\n * `SelectionHandle` instance that made the change).\n */\n\n/**\n * @event SelectionHandle#change\n * @type {object}\n * @property {object} value - The new value of the selection, or `undefined`\n * if no selection is active.\n * @property {object} oldValue - The previous value of the selection.\n * @property {SelectionHandle} sender - The `SelectionHandle` instance that\n * changed the value.\n */\n", - "export function extend(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n let src = sources[i];\n if (typeof(src) === \"undefined\" || src === null)\n continue;\n\n for (let key in src) {\n if (src.hasOwnProperty(key)) {\n target[key] = src[key];\n }\n }\n }\n return target;\n}\n\nexport function checkSorted(list) {\n for (let i = 1; i < list.length; i++) {\n if (list[i] <= list[i-1]) {\n throw new Error(\"List is not sorted or contains duplicate\");\n }\n }\n}\n\nexport function diffSortedLists(a, b) {\n let i_a = 0;\n let i_b = 0;\n\n if (!a) a = [];\n if (!b) b = [];\n\n let a_only = [];\n let b_only = [];\n\n checkSorted(a);\n checkSorted(b);\n\n while (i_a < a.length && i_b < b.length) {\n if (a[i_a] === b[i_b]) {\n i_a++;\n i_b++;\n } else if (a[i_a] < b[i_b]) {\n a_only.push(a[i_a++]);\n } else {\n b_only.push(b[i_b++]);\n }\n }\n\n if (i_a < a.length)\n a_only = a_only.concat(a.slice(i_a));\n if (i_b < b.length)\n b_only = b_only.concat(b.slice(i_b));\n return {\n removed: a_only,\n added: b_only\n };\n}\n\n// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... }\n// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ]\nexport function dataframeToD3(df) {\n let names = [];\n let length;\n for (let name in df) {\n if (df.hasOwnProperty(name))\n names.push(name);\n if (typeof(df[name]) !== \"object\" || typeof(df[name].length) === \"undefined\") {\n throw new Error(\"All fields must be arrays\");\n } else if (typeof(length) !== \"undefined\" && length !== df[name].length) {\n throw new Error(\"All fields must be arrays of the same length\");\n }\n length = df[name].length;\n }\n let results = [];\n let item;\n for (let row = 0; row < length; row++) {\n item = {};\n for (let col = 0; col < names.length; col++) {\n item[names[col]] = df[names[col]][row];\n }\n results.push(item);\n }\n return results;\n}\n\n/**\n * Keeps track of all event listener additions/removals and lets all active\n * listeners be removed with a single operation.\n *\n * @private\n */\nexport class SubscriptionTracker {\n constructor(emitter) {\n this._emitter = emitter;\n this._subs = {};\n }\n\n on(eventType, listener) {\n let sub = this._emitter.on(eventType, listener);\n this._subs[sub] = eventType;\n return sub;\n }\n\n off(eventType, listener) {\n let sub = this._emitter.off(eventType, listener);\n if (sub) {\n delete this._subs[sub];\n }\n return sub;\n }\n\n removeAllListeners() {\n let current_subs = this._subs;\n this._subs = {};\n Object.keys(current_subs).forEach((sub) => {\n this._emitter.off(current_subs[sub], sub);\n });\n }\n}\n", - "import Events from \"./events\";\n\nexport default class Var {\n constructor(group, name, /*optional*/ value) {\n this._group = group;\n this._name = name;\n this._value = value;\n this._events = new Events();\n }\n\n get() {\n return this._value;\n }\n\n set(value, /*optional*/ event) {\n if (this._value === value) {\n // Do nothing; the value hasn't changed\n return;\n }\n let oldValue = this._value;\n this._value = value;\n // Alert JavaScript listeners that the value has changed\n let evt = {};\n if (event && typeof(event) === \"object\") {\n for (let k in event) {\n if (event.hasOwnProperty(k))\n evt[k] = event[k];\n }\n }\n evt.oldValue = oldValue;\n evt.value = value;\n this._events.trigger(\"change\", evt, this);\n\n // TODO: Make this extensible, to let arbitrary back-ends know that\n // something has changed\n if (global.Shiny && global.Shiny.onInputChange) {\n global.Shiny.onInputChange(\n \".clientValue-\" +\n (this._group.name !== null ? this._group.name + \"-\" : \"\") +\n this._name,\n typeof(value) === \"undefined\" ? null : value\n );\n }\n }\n\n on(eventType, listener) {\n return this._events.on(eventType, listener);\n }\n\n off(eventType, listener) {\n return this._events.off(eventType, listener);\n }\n}\n" - ] -} \ No newline at end of file diff --git a/site_libs/crosstalk-1.2.2/js/crosstalk.min.js b/site_libs/crosstalk-1.2.2/js/crosstalk.min.js deleted file mode 100644 index b7ec0ac..0000000 --- a/site_libs/crosstalk-1.2.2/js/crosstalk.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function o(u,a,l){function s(n,e){if(!a[n]){if(!u[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(f)return f(n,!0);var r=new Error("Cannot find module '"+n+"'");throw r.code="MODULE_NOT_FOUND",r}var i=a[n]={exports:{}};u[n][0].call(i.exports,function(e){var t=u[n][1][e];return s(t||e)},i,i.exports,o,u,a,l)}return a[n].exports}for(var f="function"==typeof require&&require,e=0;e?@[\\\]^`{|}~])/g,"\\$1")+"']"),r=JSON.parse(n[0].innerText),i=e.factory(t,r);o(t).data("crosstalk-instance",i),o(t).addClass("crosstalk-input-bound")}if(t.Shiny){var e=new t.Shiny.InputBinding,u=t.jQuery;u.extend(e,{find:function(e){return u(e).find(".crosstalk-input")},initialize:function(e){var t,n;u(e).hasClass("crosstalk-input-bound")||(n=o(t=e),Object.keys(r).forEach(function(e){n.hasClass(e)&&!n.hasClass("crosstalk-input-bound")&&i(r[e],t)}))},getId:function(e){return e.id},getValue:function(e){},setValue:function(e,t){},receiveMessage:function(e,t){},subscribe:function(e,t){u(e).data("crosstalk-instance").resume()},unsubscribe:function(e){u(e).data("crosstalk-instance").suspend()}}),t.Shiny.inputBindings.register(e,"crosstalk.inputBinding")}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(r,e,t){(function(e){"use strict";var t=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(r("./input")),n=r("./filter");var a=e.jQuery;t.register({className:"crosstalk-input-checkboxgroup",factory:function(e,r){var i=new n.FilterHandle(r.group),o=void 0,u=a(e);return u.on("change","input[type='checkbox']",function(){var e=u.find("input[type='checkbox']:checked");if(0===e.length)o=null,i.clear();else{var t={};e.each(function(){r.map[this.value].forEach(function(e){t[e]=!0})});var n=Object.keys(t);n.sort(),o=n,i.set(n)}}),{suspend:function(){i.clear()},resume:function(){o&&i.set(o)}}}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./input":6}],8:[function(r,e,t){(function(e){"use strict";var t=n(r("./input")),l=n(r("./util")),s=r("./filter");function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var f=e.jQuery;t.register({className:"crosstalk-input-select",factory:function(e,n){var t=l.dataframeToD3(n.items),r={options:[{value:"",label:"(All)"}].concat(t),valueField:"value",labelField:"label",searchField:"label"},i=f(e).find("select")[0],o=f(i).selectize(r)[0].selectize,u=new s.FilterHandle(n.group),a=void 0;return o.on("change",function(){if(0===o.items.length)a=null,u.clear();else{var t={};o.items.forEach(function(e){n.map[e].forEach(function(e){t[e]=!0})});var e=Object.keys(t);e.sort(),a=e,u.set(e)}}),{suspend:function(){u.clear()},resume:function(){a&&u.set(a)}}}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./input":6,"./util":11}],9:[function(n,e,t){(function(e){"use strict";var d=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var u,a=e[Symbol.iterator]();!(r=(u=a.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&a.return&&a.return()}finally{if(i)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},t=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(n("./input")),a=n("./filter");var v=e.jQuery,p=e.strftime;function y(e,t){for(var n=e.toString();n.length {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Combine the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Close the handle. This clears this handle's contribution to the filter set,\n * and unsubscribes all event listeners.\n */\n close() {\n this._emitter.removeAllListeners();\n this.clear();\n this.setGroup(null);\n }\n\n /**\n * Clear this handle's contribution to the filter set.\n *\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n clear(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.clear(this._id);\n this._onChange(extraInfo);\n }\n\n /**\n * Set this handle's contribution to the filter set. This array should consist\n * of the keys of the rows that _should_ be displayed; any keys that are not\n * present in the array will be considered _filtered out_. Note that multiple\n * `FilterHandle` instances in the group may each contribute an array of keys,\n * and only those keys that appear in _all_ of the arrays make it through the\n * filter.\n *\n * @param {string[]} keys - Empty array, or array of keys. To clear the\n * filter, don't pass an empty array; instead, use the\n * {@link FilterHandle#clear} method.\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n set(keys, extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.update(this._id, keys);\n this._onChange(extraInfo);\n }\n\n /**\n * @return {string[]|null} - Either: 1) an array of keys that made it through\n * all of the `FilterHandle` instances, or, 2) `null`, which means no filter\n * is being applied (all data should be displayed).\n */\n get filteredKeys() {\n return this._filterSet ? this._filterSet.value : null;\n }\n\n /**\n * Subscribe to events on this `FilterHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {FilterHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link FilterHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancel event subscriptions created by {@link FilterHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|FilterHandle~listener} listener - Either the callback\n * function previously passed into {@link FilterHandle#on}, or the\n * string that was returned from {@link FilterHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n _onChange(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * @callback FilterHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the filter set, or `null` if no filter set is active),\n * `oldValue` (the previous value of the filter set), and `sender` (the\n * `FilterHandle` instance that made the change).\n */\n\n}\n\n/**\n * @event FilterHandle#change\n * @type {object}\n * @property {object} value - The new value of the filter set, or `null`\n * if no filter set is active.\n * @property {object} oldValue - The previous value of the filter set.\n * @property {FilterHandle} sender - The `FilterHandle` instance that\n * changed the value.\n */\n","import { diffSortedLists } from \"./util\";\n\nfunction naturalComparator(a, b) {\n if (a === b) {\n return 0;\n } else if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n }\n}\n\n/**\n * @private\n */\nexport default class FilterSet {\n constructor() {\n this.reset();\n }\n\n reset() {\n // Key: handle ID, Value: array of selected keys, or null\n this._handles = {};\n // Key: key string, Value: count of handles that include it\n this._keys = {};\n this._value = null;\n this._activeHandles = 0;\n }\n\n get value() {\n return this._value;\n }\n\n update(handleId, keys) {\n if (keys !== null) {\n keys = keys.slice(0); // clone before sorting\n keys.sort(naturalComparator);\n }\n\n let {added, removed} = diffSortedLists(this._handles[handleId], keys);\n this._handles[handleId] = keys;\n\n for (let i = 0; i < added.length; i++) {\n this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;\n }\n for (let i = 0; i < removed.length; i++) {\n this._keys[removed[i]]--;\n }\n\n this._updateValue(keys);\n }\n\n /**\n * @param {string[]} keys Sorted array of strings that indicate\n * a superset of possible keys.\n * @private\n */\n _updateValue(keys = this._allKeys) {\n let handleCount = Object.keys(this._handles).length;\n if (handleCount === 0) {\n this._value = null;\n } else {\n this._value = [];\n for (let i = 0; i < keys.length; i++) {\n let count = this._keys[keys[i]];\n if (count === handleCount) {\n this._value.push(keys[i]);\n }\n }\n }\n }\n\n clear(handleId) {\n if (typeof(this._handles[handleId]) === \"undefined\") {\n return;\n }\n\n let keys = this._handles[handleId];\n if (!keys) {\n keys = [];\n }\n\n for (let i = 0; i < keys.length; i++) {\n this._keys[keys[i]]--;\n }\n delete this._handles[handleId];\n\n this._updateValue();\n }\n\n get _allKeys() {\n let allKeys = Object.keys(this._keys);\n allKeys.sort(naturalComparator);\n return allKeys;\n }\n}\n","import Var from \"./var\";\n\n// Use a global so that multiple copies of crosstalk.js can be loaded and still\n// have groups behave as singletons across all copies.\nglobal.__crosstalk_groups = global.__crosstalk_groups || {};\nlet groups = global.__crosstalk_groups;\n\nexport default function group(groupName) {\n if (groupName && typeof(groupName) === \"string\") {\n if (!groups.hasOwnProperty(groupName)) {\n groups[groupName] = new Group(groupName);\n }\n return groups[groupName];\n } else if (typeof(groupName) === \"object\" && groupName._vars && groupName.var) {\n // Appears to already be a group object\n return groupName;\n } else if (Array.isArray(groupName) &&\n groupName.length == 1 &&\n typeof(groupName[0]) === \"string\") {\n return group(groupName[0]);\n } else {\n throw new Error(\"Invalid groupName argument\");\n }\n}\n\nclass Group {\n constructor(name) {\n this.name = name;\n this._vars = {};\n }\n\n var(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n if (!this._vars.hasOwnProperty(name))\n this._vars[name] = new Var(this, name);\n return this._vars[name];\n }\n\n has(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n return this._vars.hasOwnProperty(name);\n }\n}\n","import group from \"./group\";\nimport { SelectionHandle } from \"./selection\";\nimport { FilterHandle } from \"./filter\";\nimport { bind } from \"./input\";\nimport \"./input_selectize\";\nimport \"./input_checkboxgroup\";\nimport \"./input_slider\";\n\nconst defaultGroup = group(\"default\");\n\nfunction var_(name) {\n return defaultGroup.var(name);\n}\n\nfunction has(name) {\n return defaultGroup.has(name);\n}\n\nif (global.Shiny) {\n global.Shiny.addCustomMessageHandler(\"update-client-value\", function(message) {\n if (typeof(message.group) === \"string\") {\n group(message.group).var(message.name).set(message.value);\n } else {\n var_(message.name).set(message.value);\n }\n });\n}\n\nconst crosstalk = {\n group: group,\n var: var_,\n has: has,\n SelectionHandle: SelectionHandle,\n FilterHandle: FilterHandle,\n bind: bind\n};\n\n/**\n * @namespace crosstalk\n */\nexport default crosstalk;\nglobal.crosstalk = crosstalk;\n","let $ = global.jQuery;\n\nlet bindings = {};\n\nexport function register(reg) {\n bindings[reg.className] = reg;\n if (global.document && global.document.readyState !== \"complete\") {\n $(() => {\n bind();\n });\n } else if (global.document) {\n setTimeout(bind, 100);\n }\n}\n\nexport function bind() {\n Object.keys(bindings).forEach(function(className) {\n let binding = bindings[className];\n $(\".\" + binding.className).not(\".crosstalk-input-bound\").each(function(i, el) {\n bindInstance(binding, el);\n });\n });\n}\n\n// Escape jQuery identifier\nfunction $escape(val) {\n return val.replace(/([!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n}\n\nfunction bindEl(el) {\n let $el = $(el);\n Object.keys(bindings).forEach(function(className) {\n if ($el.hasClass(className) && !$el.hasClass(\"crosstalk-input-bound\")) {\n let binding = bindings[className];\n bindInstance(binding, el);\n }\n });\n}\n\nfunction bindInstance(binding, el) {\n let jsonEl = $(el).find(\"script[type='application/json'][data-for='\" + $escape(el.id) + \"']\");\n let data = JSON.parse(jsonEl[0].innerText);\n\n let instance = binding.factory(el, data);\n $(el).data(\"crosstalk-instance\", instance);\n $(el).addClass(\"crosstalk-input-bound\");\n}\n\nif (global.Shiny) {\n let inputBinding = new global.Shiny.InputBinding();\n let $ = global.jQuery;\n $.extend(inputBinding, {\n find: function(scope) {\n return $(scope).find(\".crosstalk-input\");\n },\n initialize: function(el) {\n if (!$(el).hasClass(\"crosstalk-input-bound\")) {\n bindEl(el);\n }\n },\n getId: function(el) {\n return el.id;\n },\n getValue: function(el) {\n\n },\n setValue: function(el, value) {\n\n },\n receiveMessage: function(el, data) {\n\n },\n subscribe: function(el, callback) {\n $(el).data(\"crosstalk-instance\").resume();\n },\n unsubscribe: function(el) {\n $(el).data(\"crosstalk-instance\").suspend();\n }\n });\n global.Shiny.inputBindings.register(inputBinding, \"crosstalk.inputBinding\");\n}\n","import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-checkboxgroup\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n let $el = $(el);\n $el.on(\"change\", \"input[type='checkbox']\", function() {\n let checked = $el.find(\"input[type='checkbox']:checked\");\n if (checked.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n checked.each(function() {\n data.map[this.value].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n","import * as input from \"./input\";\nimport * as util from \"./util\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-select\",\n\n factory: function(el, data) {\n /*\n * items: {value: [...], label: [...]}\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n\n let first = [{value: \"\", label: \"(All)\"}];\n let items = util.dataframeToD3(data.items);\n let opts = {\n options: first.concat(items),\n valueField: \"value\",\n labelField: \"label\",\n searchField: \"label\"\n };\n\n let select = $(el).find(\"select\")[0];\n\n let selectize = $(select).selectize(opts)[0].selectize;\n\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n selectize.on(\"change\", function() {\n if (selectize.items.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n selectize.items.forEach(function(group) {\n data.map[group].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n","import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\nlet strftime = global.strftime;\n\ninput.register({\n className: \"crosstalk-input-slider\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let opts = {};\n let $el = $(el).find(\"input\");\n let dataType = $el.data(\"data-type\");\n let timeFormat = $el.data(\"time-format\");\n let round = $el.data(\"round\");\n let timeFormatter;\n\n // Set up formatting functions\n if (dataType === \"date\") {\n timeFormatter = strftime.utc();\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n\n } else if (dataType === \"datetime\") {\n let timezone = $el.data(\"timezone\");\n if (timezone)\n timeFormatter = strftime.timezone(timezone);\n else\n timeFormatter = strftime;\n\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n } else if (dataType === \"number\") {\n if (typeof round !== \"undefined\")\n opts.prettify = function(num) {\n let factor = Math.pow(10, round);\n return Math.round(num * factor) / factor;\n };\n }\n\n $el.ionRangeSlider(opts);\n\n function getValue() {\n let result = $el.data(\"ionRangeSlider\").result;\n\n // Function for converting numeric value from slider to appropriate type.\n let convert;\n let dataType = $el.data(\"data-type\");\n if (dataType === \"date\") {\n convert = function(val) {\n return formatDateUTC(new Date(+val));\n };\n } else if (dataType === \"datetime\") {\n convert = function(val) {\n // Convert ms to s\n return +val / 1000;\n };\n } else {\n convert = function(val) { return +val; };\n }\n\n if ($el.data(\"ionRangeSlider\").options.type === \"double\") {\n return [convert(result.from), convert(result.to)];\n } else {\n return convert(result.from);\n }\n }\n\n let lastKnownKeys = null;\n\n $el.on(\"change.crosstalkSliderInput\", function(event) {\n if (!$el.data(\"updating\") && !$el.data(\"animating\")) {\n let [from, to] = getValue();\n let keys = [];\n for (let i = 0; i < data.values.length; i++) {\n let val = data.values[i];\n if (val >= from && val <= to) {\n keys.push(data.keys[i]);\n }\n }\n keys.sort();\n ctHandle.set(keys);\n lastKnownKeys = keys;\n }\n });\n\n\n // let $el = $(el);\n // $el.on(\"change\", \"input[type=\"checkbox\"]\", function() {\n // let checked = $el.find(\"input[type=\"checkbox\"]:checked\");\n // if (checked.length === 0) {\n // ctHandle.clear();\n // } else {\n // let keys = {};\n // checked.each(function() {\n // data.map[this.value].forEach(function(key) {\n // keys[key] = true;\n // });\n // });\n // let keyArray = Object.keys(keys);\n // keyArray.sort();\n // ctHandle.set(keyArray);\n // }\n // });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n\n\n// Convert a number to a string with leading zeros\nfunction padZeros(n, digits) {\n let str = n.toString();\n while (str.length < digits)\n str = \"0\" + str;\n return str;\n}\n\n// Given a Date object, return a string in yyyy-mm-dd format, using the\n// UTC date. This may be a day off from the date in the local time zone.\nfunction formatDateUTC(date) {\n if (date instanceof Date) {\n return date.getUTCFullYear() + \"-\" +\n padZeros(date.getUTCMonth()+1, 2) + \"-\" +\n padZeros(date.getUTCDate(), 2);\n\n } else {\n return null;\n }\n}\n","import Events from \"./events\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\n/**\n * Use this class to read and write (and listen for changes to) the selection\n * for a Crosstalk group. This is intended to be used for linked brushing.\n *\n * If two (or more) `SelectionHandle` instances in the same webpage share the\n * same group name, they will share the same state. Setting the selection using\n * one `SelectionHandle` instance will result in the `value` property instantly\n * changing across the others, and `\"change\"` event listeners on all instances\n * (including the one that initiated the sending) will fire.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the [SelectionHandle#setGroup](#setGroup) method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class SelectionHandle {\n\n constructor(group = null, extraInfo = null) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._var = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this SelectionHandle. The group\n * being switched away from (if any) will not have its selection value\n * modified as a result of calling `setGroup`, even if this handle was the\n * most recent handle to set the selection of the group.\n *\n * The group being switched to (if any) will also not have its selection value\n * modified as a result of calling `setGroup`. If you want to set the\n * selection value of the new group, call `set` explicitly.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._var) {\n this._var.off(\"change\", this._varOnChangeSub);\n this._var = null;\n this._varOnChangeSub = null;\n }\n\n this._group = group;\n\n if (group) {\n this._var = grp(group).var(\"selection\");\n let sub = this._var.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Retrieves the current selection for the group represented by this\n * `SelectionHandle`.\n *\n * - If no selection is active, then this value will be falsy.\n * - If a selection is active, but no data points are selected, then this\n * value will be an empty array.\n * - If a selection is active, and data points are selected, then the keys\n * of the selected data points will be present in the array.\n */\n get value() {\n return this._var ? this._var.get() : null;\n }\n\n /**\n * Combines the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n // Important incidental effect: shallow clone is returned\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see\n * {@link SelectionHandle#value}).\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `SelectionHandle` constructor).\n */\n set(selectedKeys, extraInfo) {\n if (this._var)\n this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any that were passed\n * into the `SelectionHandle` constructor).\n */\n clear(extraInfo) {\n if (this._var)\n this.set(void 0, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Subscribes to events on this `SelectionHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {SelectionHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancels event subscriptions created by {@link SelectionHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|SelectionHandle~listener} listener - Either the callback\n * function previously passed into {@link SelectionHandle#on}, or the\n * string that was returned from {@link SelectionHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n /**\n * Shuts down the `SelectionHandle` object.\n *\n * Removes all event listeners that were added through this handle.\n */\n close() {\n this._emitter.removeAllListeners();\n this.setGroup(null);\n }\n}\n\n/**\n * @callback SelectionHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the selection, or `undefined` if no selection is active),\n * `oldValue` (the previous value of the selection), and `sender` (the\n * `SelectionHandle` instance that made the change).\n */\n\n/**\n * @event SelectionHandle#change\n * @type {object}\n * @property {object} value - The new value of the selection, or `undefined`\n * if no selection is active.\n * @property {object} oldValue - The previous value of the selection.\n * @property {SelectionHandle} sender - The `SelectionHandle` instance that\n * changed the value.\n */\n","export function extend(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n let src = sources[i];\n if (typeof(src) === \"undefined\" || src === null)\n continue;\n\n for (let key in src) {\n if (src.hasOwnProperty(key)) {\n target[key] = src[key];\n }\n }\n }\n return target;\n}\n\nexport function checkSorted(list) {\n for (let i = 1; i < list.length; i++) {\n if (list[i] <= list[i-1]) {\n throw new Error(\"List is not sorted or contains duplicate\");\n }\n }\n}\n\nexport function diffSortedLists(a, b) {\n let i_a = 0;\n let i_b = 0;\n\n if (!a) a = [];\n if (!b) b = [];\n\n let a_only = [];\n let b_only = [];\n\n checkSorted(a);\n checkSorted(b);\n\n while (i_a < a.length && i_b < b.length) {\n if (a[i_a] === b[i_b]) {\n i_a++;\n i_b++;\n } else if (a[i_a] < b[i_b]) {\n a_only.push(a[i_a++]);\n } else {\n b_only.push(b[i_b++]);\n }\n }\n\n if (i_a < a.length)\n a_only = a_only.concat(a.slice(i_a));\n if (i_b < b.length)\n b_only = b_only.concat(b.slice(i_b));\n return {\n removed: a_only,\n added: b_only\n };\n}\n\n// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... }\n// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ]\nexport function dataframeToD3(df) {\n let names = [];\n let length;\n for (let name in df) {\n if (df.hasOwnProperty(name))\n names.push(name);\n if (typeof(df[name]) !== \"object\" || typeof(df[name].length) === \"undefined\") {\n throw new Error(\"All fields must be arrays\");\n } else if (typeof(length) !== \"undefined\" && length !== df[name].length) {\n throw new Error(\"All fields must be arrays of the same length\");\n }\n length = df[name].length;\n }\n let results = [];\n let item;\n for (let row = 0; row < length; row++) {\n item = {};\n for (let col = 0; col < names.length; col++) {\n item[names[col]] = df[names[col]][row];\n }\n results.push(item);\n }\n return results;\n}\n\n/**\n * Keeps track of all event listener additions/removals and lets all active\n * listeners be removed with a single operation.\n *\n * @private\n */\nexport class SubscriptionTracker {\n constructor(emitter) {\n this._emitter = emitter;\n this._subs = {};\n }\n\n on(eventType, listener) {\n let sub = this._emitter.on(eventType, listener);\n this._subs[sub] = eventType;\n return sub;\n }\n\n off(eventType, listener) {\n let sub = this._emitter.off(eventType, listener);\n if (sub) {\n delete this._subs[sub];\n }\n return sub;\n }\n\n removeAllListeners() {\n let current_subs = this._subs;\n this._subs = {};\n Object.keys(current_subs).forEach((sub) => {\n this._emitter.off(current_subs[sub], sub);\n });\n }\n}\n","import Events from \"./events\";\n\nexport default class Var {\n constructor(group, name, /*optional*/ value) {\n this._group = group;\n this._name = name;\n this._value = value;\n this._events = new Events();\n }\n\n get() {\n return this._value;\n }\n\n set(value, /*optional*/ event) {\n if (this._value === value) {\n // Do nothing; the value hasn't changed\n return;\n }\n let oldValue = this._value;\n this._value = value;\n // Alert JavaScript listeners that the value has changed\n let evt = {};\n if (event && typeof(event) === \"object\") {\n for (let k in event) {\n if (event.hasOwnProperty(k))\n evt[k] = event[k];\n }\n }\n evt.oldValue = oldValue;\n evt.value = value;\n this._events.trigger(\"change\", evt, this);\n\n // TODO: Make this extensible, to let arbitrary back-ends know that\n // something has changed\n if (global.Shiny && global.Shiny.onInputChange) {\n global.Shiny.onInputChange(\n \".clientValue-\" +\n (this._group.name !== null ? this._group.name + \"-\" : \"\") +\n this._name,\n typeof(value) === \"undefined\" ? null : value\n );\n }\n }\n\n on(eventType, listener) {\n return this._events.on(eventType, listener);\n }\n\n off(eventType, listener) {\n return this._events.off(eventType, listener);\n }\n}\n"]} \ No newline at end of file diff --git a/site_libs/crosstalk-1.2.2/scss/crosstalk.scss b/site_libs/crosstalk-1.2.2/scss/crosstalk.scss deleted file mode 100644 index 3566561..0000000 --- a/site_libs/crosstalk-1.2.2/scss/crosstalk.scss +++ /dev/null @@ -1,75 +0,0 @@ -/* Adjust margins outwards, so column contents line up with the edges of the - parent of container-fluid. */ -.container-fluid.crosstalk-bscols { - margin-left: -30px; - margin-right: -30px; - white-space: normal; -} - -/* But don't adjust the margins outwards if we're directly under the body, - i.e. we were the top-level of something at the console. */ -body > .container-fluid.crosstalk-bscols { - margin-left: auto; - margin-right: auto; -} - -.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column { - display: inline-block; - padding-right: 12px; - vertical-align: top; -} - -@media only screen and (max-width:480px) { - .crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column { - display: block; - padding-right: inherit; - } -} - -/* Relevant BS3 styles to make filter_checkbox() look reasonable without Bootstrap */ -.crosstalk-input { - margin-bottom: 15px; /* a la .form-group */ - .control-label { - margin-bottom: 0; - vertical-align: middle; - } - input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px; - line-height: normal; - } - .checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; - } - .checkbox > label{ - padding-left: 20px; - margin-bottom: 0; - font-weight: 400; - cursor: pointer; - } - .checkbox input[type="checkbox"], - .checkbox-inline input[type="checkbox"] { - position: absolute; - margin-top: 2px; - margin-left: -20px; - } - .checkbox + .checkbox { - margin-top: -5px; - } - .checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - font-weight: 400; - vertical-align: middle; - cursor: pointer; - } - .checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; - } -} diff --git a/site_libs/datatables-binding-0.34.0/datatables.js b/site_libs/datatables-binding-0.34.0/datatables.js deleted file mode 100644 index 136a8b9..0000000 --- a/site_libs/datatables-binding-0.34.0/datatables.js +++ /dev/null @@ -1,1539 +0,0 @@ -(function() { - -// some helper functions: using a global object DTWidget so that it can be used -// in JS() code, e.g. datatable(options = list(foo = JS('code'))); unlike R's -// dynamic scoping, when 'code' is eval'ed, JavaScript does not know objects -// from the "parent frame", e.g. JS('DTWidget') will not work unless it was made -// a global object -var DTWidget = {}; - -// 123456666.7890 -> 123,456,666.7890 -var markInterval = function(d, digits, interval, mark, decMark, precision) { - x = precision ? d.toPrecision(digits) : d.toFixed(digits); - if (!/^-?[\d.]+$/.test(x)) return x; - var xv = x.split('.'); - if (xv.length > 2) return x; // should have at most one decimal point - xv[0] = xv[0].replace(new RegExp('\\B(?=(\\d{' + interval + '})+(?!\\d))', 'g'), mark); - return xv.join(decMark); -}; - -DTWidget.formatCurrency = function(data, currency, digits, interval, mark, decMark, before, zeroPrint) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - if (zeroPrint !== null && d === 0.0) return zeroPrint; - var res = markInterval(d, digits, interval, mark, decMark); - res = before ? (/^-/.test(res) ? '-' + currency + res.replace(/^-/, '') : currency + res) : - res + currency; - return res; -}; - -DTWidget.formatString = function(data, prefix, suffix) { - var d = data; - if (d === null) return ''; - return prefix + d + suffix; -}; - -DTWidget.formatPercentage = function(data, digits, interval, mark, decMark, zeroPrint) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - if (zeroPrint !== null && d === 0.0) return zeroPrint; - return markInterval(d * 100, digits, interval, mark, decMark) + '%'; -}; - -DTWidget.formatRound = function(data, digits, interval, mark, decMark, zeroPrint) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - if (zeroPrint !== null && d === 0.0) return zeroPrint; - return markInterval(d, digits, interval, mark, decMark); -}; - -DTWidget.formatSignif = function(data, digits, interval, mark, decMark, zeroPrint) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - if (zeroPrint !== null && d === 0.0) return zeroPrint; - return markInterval(d, digits, interval, mark, decMark, true); -}; - -DTWidget.formatDate = function(data, method, params) { - var d = data; - if (d === null) return ''; - // (new Date('2015-10-28')).toDateString() may return 2015-10-27 because the - // actual time created could be like 'Tue Oct 27 2015 19:00:00 GMT-0500 (CDT)', - // i.e. the date-only string is treated as UTC time instead of local time - if ((method === 'toDateString' || method === 'toLocaleDateString') && /^\d{4,}\D\d{2}\D\d{2}$/.test(d)) { - d = d.split(/\D/); - d = new Date(d[0], d[1] - 1, d[2]); - } else { - d = new Date(d); - } - return d[method].apply(d, params); -}; - -window.DTWidget = DTWidget; - -// A helper function to update the properties of existing filters -var setFilterProps = function(td, props) { - // Update enabled/disabled state - var $input = $(td).find('input').first(); - var searchable = $input.data('searchable'); - $input.prop('disabled', !searchable || props.disabled); - - // Based on the filter type, set its new values - var type = td.getAttribute('data-type'); - if (['factor', 'logical'].includes(type)) { - // Reformat the new dropdown options for use with selectize - var new_vals = props.params.options.map(function(item) { - return { text: item, value: item }; - }); - - // Find the selectize object - var dropdown = $(td).find('.selectized').eq(0)[0].selectize; - - // Note the current values - var old_vals = dropdown.getValue(); - - // Remove the existing values - dropdown.clearOptions(); - - // Add the new options - dropdown.addOption(new_vals); - - // Preserve the existing values - dropdown.setValue(old_vals); - - } else if (['number', 'integer', 'date', 'time'].includes(type)) { - // Apply internal scaling to new limits. Updating scale not yet implemented. - var slider = $(td).find('.noUi-target').eq(0); - var scale = Math.pow(10, Math.max(0, +slider.data('scale') || 0)); - var new_vals = [props.params.min * scale, props.params.max * scale]; - - // Note what the new limits will be just for this filter - var new_lims = new_vals.slice(); - - // Determine the current values and limits - var old_vals = slider.val().map(Number); - var old_lims = slider.noUiSlider('options').range; - old_lims = [old_lims.min, old_lims.max]; - - // Preserve the current values if filters have been applied; otherwise, apply no filtering - if (old_vals[0] != old_lims[0]) { - new_vals[0] = Math.max(old_vals[0], new_vals[0]); - } - - if (old_vals[1] != old_lims[1]) { - new_vals[1] = Math.min(old_vals[1], new_vals[1]); - } - - // Update the endpoints of the slider - slider.noUiSlider({ - start: new_vals, - range: {'min': new_lims[0], 'max': new_lims[1]} - }, true); - } -}; - -var transposeArray2D = function(a) { - return a.length === 0 ? a : HTMLWidgets.transposeArray2D(a); -}; - -var crosstalkPluginsInstalled = false; - -function maybeInstallCrosstalkPlugins() { - if (crosstalkPluginsInstalled) - return; - crosstalkPluginsInstalled = true; - - $.fn.dataTable.ext.afnFiltering.push( - function(oSettings, aData, iDataIndex) { - var ctfilter = oSettings.nTable.ctfilter; - if (ctfilter && !ctfilter[iDataIndex]) - return false; - - var ctselect = oSettings.nTable.ctselect; - if (ctselect && !ctselect[iDataIndex]) - return false; - - return true; - } - ); -} - -HTMLWidgets.widget({ - name: "datatables", - type: "output", - renderOnNullValue: true, - initialize: function(el, width, height) { - // in order that the type=number inputs return a number - $.valHooks.number = { - get: function(el) { - var value = parseFloat(el.value); - return isNaN(value) ? "" : value; - } - }; - $(el).html(' '); - return { - data: null, - ctfilterHandle: new crosstalk.FilterHandle(), - ctfilterSubscription: null, - ctselectHandle: new crosstalk.SelectionHandle(), - ctselectSubscription: null - }; - }, - renderValue: function(el, data, instance) { - if ((el.offsetWidth === 0 || el.offsetHeight === 0) && data.lazyRender !== false) { - instance.data = data; - return; - } - instance.data = null; - var $el = $(el); - $el.empty(); - - if (data === null) { - $el.append(' '); - // clear previous Shiny inputs (if any) - for (var i in instance.clearInputs) instance.clearInputs[i](); - instance.clearInputs = {}; - return; - } - - var crosstalkOptions = data.crosstalkOptions; - if (!crosstalkOptions) crosstalkOptions = { - 'key': null, 'group': null - }; - if (crosstalkOptions.group) { - maybeInstallCrosstalkPlugins(); - instance.ctfilterHandle.setGroup(crosstalkOptions.group); - instance.ctselectHandle.setGroup(crosstalkOptions.group); - } - - // if we are in the viewer then we always want to fillContainer and - // and autoHideNavigation (unless the user has explicitly set these) - if (window.HTMLWidgets.viewerMode) { - if (!data.hasOwnProperty("fillContainer")) - data.fillContainer = true; - if (!data.hasOwnProperty("autoHideNavigation")) - data.autoHideNavigation = true; - } - - // propagate fillContainer to instance (so we have it in resize) - instance.fillContainer = data.fillContainer; - - var cells = data.data; - - if (cells instanceof Array) cells = transposeArray2D(cells); - - $el.append(data.container); - var $table = $el.find('table'); - if (data.class) $table.addClass(data.class); - if (data.caption) $table.prepend(data.caption); - - if (!data.selection) data.selection = { - mode: 'none', selected: null, target: 'row', selectable: null - }; - if (HTMLWidgets.shinyMode && data.selection.mode !== 'none' && - data.selection.target === 'row+column') { - if ($table.children('tfoot').length === 0) { - $table.append($('')); - $table.find('thead tr').clone().appendTo($table.find('tfoot')); - } - } - - // column filters - var filterRow; - switch (data.filter) { - case 'top': - $table.children('thead').append(data.filterHTML); - filterRow = $table.find('thead tr:last td'); - break; - case 'bottom': - if ($table.children('tfoot').length === 0) { - $table.append($('')); - } - $table.children('tfoot').prepend(data.filterHTML); - filterRow = $table.find('tfoot tr:first td'); - break; - } - - var options = { searchDelay: 1000 }; - if (cells !== null) $.extend(options, { - data: cells - }); - - // options for fillContainer - var bootstrapActive = typeof($.fn.popover) != 'undefined'; - if (instance.fillContainer) { - - // force scrollX/scrollY and turn off autoWidth - options.scrollX = true; - options.scrollY = "100px"; // can be any value, we'll adjust below - - // if we aren't paginating then move around the info/filter controls - // to save space at the bottom and rephrase the info callback - if (data.options.paging === false) { - - // we know how to do this cleanly for bootstrap, not so much - // for other themes/layouts - if (bootstrapActive) { - options.dom = "<'row'<'col-sm-4'i><'col-sm-8'f>>" + - "<'row'<'col-sm-12'tr>>"; - } - - options.fnInfoCallback = function(oSettings, iStart, iEnd, - iMax, iTotal, sPre) { - return Number(iTotal).toLocaleString() + " records"; - }; - } - } - - // auto hide navigation if requested - // Note, this only works on client-side processing mode as on server-side, - // cells (data.data) is null; In addition, we require the pageLength option - // being provided explicitly to enable this. Despite we may be able to deduce - // the default value of pageLength, it may complicate things so we'd rather - // put this responsiblity to users and warn them on the R side. - if (data.autoHideNavigation === true && data.options.paging !== false) { - // strip all nav if length >= cells - if ((cells instanceof Array) && data.options.pageLength >= cells.length) - options.dom = bootstrapActive ? "<'row'<'col-sm-12'tr>>" : "t"; - // alternatively lean things out for flexdashboard mobile portrait - else if (bootstrapActive && window.FlexDashboard && window.FlexDashboard.isMobilePhone()) - options.dom = "<'row'<'col-sm-12'f>>" + - "<'row'<'col-sm-12'tr>>" + - "<'row'<'col-sm-12'p>>"; - } - - $.extend(true, options, data.options || {}); - - var searchCols = options.searchCols; - if (searchCols) { - searchCols = searchCols.map(function(x) { - return x === null ? '' : x.search; - }); - // FIXME: this means I don't respect the escapeRegex setting - delete options.searchCols; - } - - // server-side processing? - var server = options.serverSide === true; - - // use the dataSrc function to pre-process JSON data returned from R - var DT_rows_all = [], DT_rows_current = []; - if (server && HTMLWidgets.shinyMode && typeof options.ajax === 'object' && - /^session\/[\da-z]+\/dataobj/.test(options.ajax.url) && !options.ajax.dataSrc) { - options.ajax.dataSrc = function(json) { - DT_rows_all = $.makeArray(json.DT_rows_all); - DT_rows_current = $.makeArray(json.DT_rows_current); - var data = json.data; - if (!colReorderEnabled()) return data; - var table = $table.DataTable(), order = table.colReorder.order(), flag = true, i, j, row; - for (i = 0; i < order.length; ++i) if (order[i] !== i) flag = false; - if (flag) return data; - for (i = 0; i < data.length; ++i) { - row = data[i].slice(); - for (j = 0; j < order.length; ++j) data[i][j] = row[order[j]]; - } - return data; - }; - } - - var thiz = this; - if (instance.fillContainer) $table.on('init.dt', function(e) { - thiz.fillAvailableHeight(el, $(el).innerHeight()); - }); - // If the page contains serveral datatables and one of which enables colReorder, - // the table.colReorder.order() function will exist but throws error when called. - // So it seems like the only way to know if colReorder is enabled or not is to - // check the options. - var colReorderEnabled = function() { return "colReorder" in options; }; - var table = $table.DataTable(options); - $el.data('datatable', table); - - if ('rowGroup' in options) { - // Maintain RowGroup dataSrc when columns are reordered (#1109) - table.on('column-reorder', function(e, settings, details) { - var oldDataSrc = table.rowGroup().dataSrc(); - var newDataSrc = details.mapping[oldDataSrc]; - table.rowGroup().dataSrc(newDataSrc); - }); - } - - // Unregister previous Crosstalk event subscriptions, if they exist - if (instance.ctfilterSubscription) { - instance.ctfilterHandle.off("change", instance.ctfilterSubscription); - instance.ctfilterSubscription = null; - } - if (instance.ctselectSubscription) { - instance.ctselectHandle.off("change", instance.ctselectSubscription); - instance.ctselectSubscription = null; - } - - if (!crosstalkOptions.group) { - $table[0].ctfilter = null; - $table[0].ctselect = null; - } else { - var key = crosstalkOptions.key; - function keysToMatches(keys) { - if (!keys) { - return null; - } else { - var selectedKeys = {}; - for (var i = 0; i < keys.length; i++) { - selectedKeys[keys[i]] = true; - } - var matches = {}; - for (var j = 0; j < key.length; j++) { - if (selectedKeys[key[j]]) - matches[j] = true; - } - return matches; - } - } - - function applyCrosstalkFilter(e) { - $table[0].ctfilter = keysToMatches(e.value); - table.draw(); - } - instance.ctfilterSubscription = instance.ctfilterHandle.on("change", applyCrosstalkFilter); - applyCrosstalkFilter({value: instance.ctfilterHandle.filteredKeys}); - - function applyCrosstalkSelection(e) { - if (e.sender !== instance.ctselectHandle) { - table - .rows('.' + selClass, {search: 'applied'}) - .nodes() - .to$() - .removeClass(selClass); - if (selectedRows) - changeInput('rows_selected', selectedRows(), void 0, true); - } - - if (e.sender !== instance.ctselectHandle && e.value && e.value.length) { - var matches = keysToMatches(e.value); - - // persistent selection with plotly (& leaflet) - var ctOpts = crosstalk.var("plotlyCrosstalkOpts").get() || {}; - if (ctOpts.persistent === true) { - var matches = $.extend(matches, $table[0].ctselect); - } - - $table[0].ctselect = matches; - table.draw(); - } else { - if ($table[0].ctselect) { - $table[0].ctselect = null; - table.draw(); - } - } - } - instance.ctselectSubscription = instance.ctselectHandle.on("change", applyCrosstalkSelection); - // TODO: This next line doesn't seem to work when renderDataTable is used - applyCrosstalkSelection({value: instance.ctselectHandle.value}); - } - - var inArray = function(val, array) { - return $.inArray(val, $.makeArray(array)) > -1; - }; - - // search the i-th column - var searchColumn = function(i, value) { - var regex = false, ci = true; - if (options.search) { - regex = options.search.regex, - ci = options.search.caseInsensitive !== false; - } - // need to transpose the column index when colReorder is enabled - if (table.colReorder) i = table.colReorder.transpose(i); - return table.column(i).search(value, regex, !regex, ci); - }; - - if (data.filter !== 'none') { - if (!data.hasOwnProperty('filterSettings')) data.filterSettings = {}; - - filterRow.each(function(i, td) { - - var $td = $(td), type = $td.data('type'), filter; - var $input = $td.children('div').first().children('input'); - var disabled = $input.prop('disabled'); - var searchable = table.settings()[0].aoColumns[i].bSearchable; - $input.prop('disabled', !searchable || disabled); - $input.data('searchable', searchable); // for updating later - $input.on('input blur', function() { - $input.next('span').toggle(Boolean($input.val())); - }); - // Bootstrap sets pointer-events to none and we won't be able to click - // the clear button - $input.next('span').css('pointer-events', 'auto').hide().click(function() { - $(this).hide().prev('input').val('').trigger('input').focus(); - }); - var searchCol; // search string for this column - if (searchCols && searchCols[i]) { - searchCol = searchCols[i]; - $input.val(searchCol).trigger('input'); - } - var $x = $td.children('div').last(); - - // remove the overflow: hidden attribute of the scrollHead - // (otherwise the scrolling table body obscures the filters) - // The workaround and the discussion from - // https://github.com/rstudio/DT/issues/554#issuecomment-518007347 - // Otherwise the filter selection will not be anchored to the values - // when the columns number is many and scrollX is enabled. - var scrollHead = $(el).find('.dataTables_scrollHead,.dataTables_scrollFoot'); - var cssOverflowHead = scrollHead.css('overflow'); - var scrollBody = $(el).find('.dataTables_scrollBody'); - var cssOverflowBody = scrollBody.css('overflow'); - var scrollTable = $(el).find('.dataTables_scroll'); - var cssOverflowTable = scrollTable.css('overflow'); - if (cssOverflowHead === 'hidden') { - $x.on('show hide', function(e) { - if (e.type === 'show') { - scrollHead.css('overflow', 'visible'); - scrollBody.css('overflow', 'visible'); - scrollTable.css('overflow-x', 'scroll'); - } else { - scrollHead.css('overflow', cssOverflowHead); - scrollBody.css('overflow', cssOverflowBody); - scrollTable.css('overflow-x', cssOverflowTable); - } - }); - $x.css('z-index', 25); - } - - if (inArray(type, ['factor', 'logical'])) { - $input.on({ - click: function() { - $input.parent().hide(); $x.show().trigger('show'); filter[0].selectize.focus(); - }, - input: function() { - var v1 = JSON.stringify(filter[0].selectize.getValue()), v2 = $input.val(); - if (v1 === '[]') v1 = ''; - if (v1 !== v2) filter[0].selectize.setValue(v2 === '' ? [] : JSON.parse(v2)); - } - }); - var $input2 = $x.children('select'); - filter = $input2.selectize($.extend({ - options: $input2.data('options').map(function(v, i) { - return ({text: v, value: v}); - }), - plugins: ['remove_button'], - hideSelected: true, - onChange: function(value) { - if (value === null) value = []; // compatibility with jQuery 3.0 - $input.val(value.length ? JSON.stringify(value) : ''); - if (value.length) $input.trigger('input'); - $input.attr('title', $input.val()); - if (server) { - searchColumn(i, value.length ? JSON.stringify(value) : '').draw(); - return; - } - // turn off filter if nothing selected - $td.data('filter', value.length > 0); - table.draw(); // redraw table, and filters will be applied - } - }, data.filterSettings.select)); - filter[0].selectize.on('blur', function() { - $x.hide().trigger('hide'); $input.parent().show(); $input.trigger('blur'); - }); - filter.next('div').css('margin-bottom', 'auto'); - } else if (type === 'character') { - var fun = function() { - searchColumn(i, $input.val()).draw(); - }; - // throttle searching for server-side processing - var throttledFun = $.fn.dataTable.util.throttle(fun, options.searchDelay); - $input.on('input', function(e, immediate) { - // always bypass throttling when immediate = true (via the updateSearch method) - (immediate || !server) ? fun() : throttledFun(); - }); - } else if (inArray(type, ['number', 'integer', 'date', 'time'])) { - var $x0 = $x; - $x = $x0.children('div').first(); - $x0.css({ - 'background-color': '#fff', - 'border': '1px #ddd solid', - 'border-radius': '4px', - 'padding': data.vertical ? '35px 20px': '20px 20px 10px 20px' - }); - var $spans = $x0.children('span').css({ - 'margin-top': data.vertical ? '0' : '10px', - 'white-space': 'nowrap' - }); - var $span1 = $spans.first(), $span2 = $spans.last(); - var r1 = +$x.data('min'), r2 = +$x.data('max'); - // when the numbers are too small or have many decimal places, the - // slider may have numeric precision problems (#150) - var scale = Math.pow(10, Math.max(0, +$x.data('scale') || 0)); - r1 = Math.round(r1 * scale); r2 = Math.round(r2 * scale); - var scaleBack = function(x, scale) { - if (scale === 1) return x; - var d = Math.round(Math.log(scale) / Math.log(10)); - // to avoid problems like 3.423/100 -> 0.034230000000000003 - return (x / scale).toFixed(d); - }; - var slider_min = function() { - return filter.noUiSlider('options').range.min; - }; - var slider_max = function() { - return filter.noUiSlider('options').range.max; - }; - $input.on({ - focus: function() { - $x0.show().trigger('show'); - // first, make sure the slider div leaves at least 20px between - // the two (slider value) span's - $x0.width(Math.max(160, $span1.outerWidth() + $span2.outerWidth() + 20)); - // then, if the input is really wide or slider is vertical, - // make the slider the same width as the input - if ($x0.outerWidth() < $input.outerWidth() || data.vertical) { - $x0.outerWidth($input.outerWidth()); - } - // make sure the slider div does not reach beyond the right margin - if ($(window).width() < $x0.offset().left + $x0.width()) { - $x0.offset({ - 'left': $input.offset().left + $input.outerWidth() - $x0.outerWidth() - }); - } - }, - blur: function() { - $x0.hide().trigger('hide'); - }, - input: function() { - if ($input.val() === '') filter.val([slider_min(), slider_max()]); - }, - change: function() { - var v = $input.val().replace(/\s/g, ''); - if (v === '') return; - v = v.split('...'); - if (v.length !== 2) { - $input.parent().addClass('has-error'); - return; - } - if (v[0] === '') v[0] = slider_min(); - if (v[1] === '') v[1] = slider_max(); - $input.parent().removeClass('has-error'); - // treat date as UTC time at midnight - var strTime = function(x) { - var s = type === 'date' ? 'T00:00:00Z' : ''; - var t = new Date(x + s).getTime(); - // add 10 minutes to date since it does not hurt the date, and - // it helps avoid the tricky floating point arithmetic problems, - // e.g. sometimes the date may be a few milliseconds earlier - // than the midnight due to precision problems in noUiSlider - return type === 'date' ? t + 3600000 : t; - }; - if (inArray(type, ['date', 'time'])) { - v[0] = strTime(v[0]); - v[1] = strTime(v[1]); - } - if (v[0] != slider_min()) v[0] *= scale; - if (v[1] != slider_max()) v[1] *= scale; - filter.val(v); - } - }); - var formatDate = function(d) { - d = scaleBack(d, scale); - if (type === 'number') return d; - if (type === 'integer') return parseInt(d); - var x = new Date(+d); - if (type === 'date') { - var pad0 = function(x) { - return ('0' + x).substr(-2, 2); - }; - return x.getUTCFullYear() + '-' + pad0(1 + x.getUTCMonth()) - + '-' + pad0(x.getUTCDate()); - } else { - return x.toISOString(); - } - }; - var opts = type === 'date' ? { step: 60 * 60 * 1000 } : - type === 'integer' ? { step: 1 } : {}; - - opts.orientation = data.vertical ? 'vertical': 'horizontal'; - opts.direction = data.vertical ? 'rtl': 'ltr'; - - filter = $x.noUiSlider($.extend({ - start: [r1, r2], - range: {min: r1, max: r2}, - connect: true - }, opts, data.filterSettings.slider)); - if (scale > 1) (function() { - var t1 = r1, t2 = r2; - var val = filter.val(); - while (val[0] > r1 || val[1] < r2) { - if (val[0] > r1) { - t1 -= val[0] - r1; - } - if (val[1] < r2) { - t2 += r2 - val[1]; - } - filter = $x.noUiSlider($.extend({ - start: [t1, t2], - range: {min: t1, max: t2}, - connect: true - }, opts, data.filterSettings.slider), true); - val = filter.val(); - } - r1 = t1; r2 = t2; - })(); - // format with active column renderer, if defined - var colDef = data.options.columnDefs.find(function(def) { - return (def.targets === i || inArray(i, def.targets)) && 'render' in def; - }); - var updateSliderText = function(v1, v2) { - // we only know how to use function renderers - if (colDef && typeof colDef.render === 'function') { - var restore = function(v) { - v = scaleBack(v, scale); - return inArray(type, ['date', 'time']) ? new Date(+v) : v; - } - $span1.text(colDef.render(restore(v1), 'display')); - $span2.text(colDef.render(restore(v2), 'display')); - } else { - $span1.text(formatDate(v1)); - $span2.text(formatDate(v2)); - } - }; - updateSliderText(r1, r2); - var updateSlider = function(e) { - var val = filter.val(); - // turn off filter if in full range - $td.data('filter', val[0] > slider_min() || val[1] < slider_max()); - var v1 = formatDate(val[0]), v2 = formatDate(val[1]), ival; - if ($td.data('filter')) { - ival = v1 + ' ... ' + v2; - $input.attr('title', ival).val(ival).trigger('input'); - } else { - $input.attr('title', '').val(''); - } - updateSliderText(val[0], val[1]); - if (e.type === 'slide') return; // no searching when sliding only - if (server) { - searchColumn(i, $td.data('filter') ? ival : '').draw(); - return; - } - table.draw(); - }; - filter.on({ - set: updateSlider, - slide: updateSlider - }); - } - - // server-side processing will be handled by R (or whatever server - // language you use); the following code is only needed for client-side - // processing - if (server) { - // if a search string has been pre-set, search now - if (searchCol) $input.trigger('input').trigger('change'); - return; - } - - var customFilter = function(settings, data, dataIndex) { - // there is no way to attach a search function to a specific table, - // and we need to make sure a global search function is not applied to - // all tables (i.e. a range filter in a previous table should not be - // applied to the current table); we use the settings object to - // determine if we want to perform searching on the current table, - // since settings.sTableId will be different to different tables - if (table.settings()[0] !== settings) return true; - // no filter on this column or no need to filter this column - if (typeof filter === 'undefined' || !$td.data('filter')) return true; - - var r = filter.val(), v, r0, r1; - var i_data = function(i) { - if (!colReorderEnabled()) return i; - var order = table.colReorder.order(), k; - for (k = 0; k < order.length; ++k) if (order[k] === i) return k; - return i; // in theory it will never be here... - } - v = data[i_data(i)]; - if (type === 'number' || type === 'integer') { - v = parseFloat(v); - // how to handle NaN? currently exclude these rows - if (isNaN(v)) return(false); - r0 = parseFloat(scaleBack(r[0], scale)) - r1 = parseFloat(scaleBack(r[1], scale)); - if (v >= r0 && v <= r1) return true; - } else if (type === 'date' || type === 'time') { - v = new Date(v); - r0 = new Date(r[0] / scale); r1 = new Date(r[1] / scale); - if (v >= r0 && v <= r1) return true; - } else if (type === 'factor') { - if (r.length === 0 || inArray(v, r)) return true; - } else if (type === 'logical') { - if (r.length === 0) return true; - if (inArray(v === '' ? 'na' : v, r)) return true; - } - return false; - }; - - $.fn.dataTable.ext.search.push(customFilter); - - // search for the preset search strings if it is non-empty - if (searchCol) $input.trigger('input').trigger('change'); - - }); - - } - - // highlight search keywords - var highlight = function() { - var body = $(table.table().body()); - // removing the old highlighting first - body.unhighlight(); - - // don't highlight the "not found" row, so we get the rows using the api - if (table.rows({ filter: 'applied' }).data().length === 0) return; - // highlight global search keywords - body.highlight($.trim(table.search()).split(/\s+/)); - // then highlight keywords from individual column filters - if (filterRow) filterRow.each(function(i, td) { - var $td = $(td), type = $td.data('type'); - if (type !== 'character') return; - var $input = $td.children('div').first().children('input'); - var column = table.column(i).nodes().to$(), - val = $.trim($input.val()); - if (type !== 'character' || val === '') return; - column.highlight(val.split(/\s+/)); - }); - }; - - if (options.searchHighlight) { - table - .on('draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth', highlight) - .on('destroy', function() { - // remove event handler - table.off('draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth'); - }); - - // Set the option for escaping regex characters in our search string. This will be used - // for all future matching. - jQuery.fn.highlight.options.escapeRegex = (!options.search || !options.search.regex); - - // initial highlight for state saved conditions and initial states - highlight(); - } - - // run the callback function on the table instance - if (typeof data.callback === 'function') data.callback(table); - - // double click to edit the cell, row, column, or all cells - if (data.editable) table.on('dblclick.dt', 'tbody td', function(e) { - // only bring up the editor when the cell itself is dbclicked, and ignore - // other dbclick events bubbled up (e.g. from the ) - if (e.target !== this) return; - var target = [], immediate = false; - switch (data.editable.target) { - case 'cell': - target = [this]; - immediate = true; // edit will take effect immediately - break; - case 'row': - target = table.cells(table.cell(this).index().row, '*').nodes(); - break; - case 'column': - target = table.cells('*', table.cell(this).index().column).nodes(); - break; - case 'all': - target = table.cells().nodes(); - break; - default: - throw 'The editable parameter must be "cell", "row", "column", or "all"'; - } - var disableCols = data.editable.disable ? data.editable.disable.columns : null; - var numericCols = data.editable.numeric; - var areaCols = data.editable.area; - var dateCols = data.editable.date; - for (var i = 0; i < target.length; i++) { - (function(cell, current) { - var $cell = $(cell), html = $cell.html(); - var _cell = table.cell(cell), value = _cell.data(), index = _cell.index().column; - var $input; - if (inArray(index, numericCols)) { - $input = $(''); - } else if (inArray(index, areaCols)) { - $input = $(''); - } else if (inArray(index, dateCols)) { - $input = $(''); - } else { - $input = $(''); - } - if (!immediate) { - $cell.data('input', $input).data('html', html); - $input.attr('title', 'Hit Ctrl+Enter to finish editing, or Esc to cancel'); - } - $input.val(value); - if (inArray(index, disableCols)) { - $input.attr('readonly', '').css('filter', 'invert(25%)'); - } - $cell.empty().append($input); - if (cell === current) $input.focus(); - $input.css('width', '100%'); - - if (immediate) $input.on('blur', function(e) { - var valueNew = $input.val(); - if (valueNew !== value) { - _cell.data(valueNew); - if (HTMLWidgets.shinyMode) { - changeInput('cell_edit', [cellInfo(cell)], 'DT.cellInfo', null, {priority: 'event'}); - } - // for server-side processing, users have to call replaceData() to update the table - if (!server) table.draw(false); - } else { - $cell.html(html); - } - }).on('keyup', function(e) { - // hit Escape to cancel editing - if (e.keyCode === 27) $input.trigger('blur'); - }); - - // bulk edit (row, column, or all) - if (!immediate) $input.on('keyup', function(e) { - var removeInput = function($cell, restore) { - $cell.data('input').remove(); - if (restore) $cell.html($cell.data('html')); - } - if (e.keyCode === 27) { - for (var i = 0; i < target.length; i++) { - removeInput($(target[i]), true); - } - } else if (e.keyCode === 13 && e.ctrlKey) { - // Ctrl + Enter - var cell, $cell, _cell, cellData = []; - for (var i = 0; i < target.length; i++) { - cell = target[i]; $cell = $(cell); _cell = table.cell(cell); - _cell.data($cell.data('input').val()); - HTMLWidgets.shinyMode && cellData.push(cellInfo(cell)); - removeInput($cell, false); - } - if (HTMLWidgets.shinyMode) { - changeInput('cell_edit', cellData, 'DT.cellInfo', null, {priority: "event"}); - } - if (!server) table.draw(false); - } - }); - })(target[i], this); - } - }); - - // interaction with shiny - if (!HTMLWidgets.shinyMode && !crosstalkOptions.group) return; - - var methods = {}; - var shinyData = {}; - - methods.updateCaption = function(caption) { - if (!caption) return; - $table.children('caption').replaceWith(caption); - } - - // register clear functions to remove input values when the table is removed - instance.clearInputs = {}; - - var changeInput = function(id, value, type, noCrosstalk, opts) { - var event = id; - id = el.id + '_' + id; - if (type) id = id + ':' + type; - // do not update if the new value is the same as old value - if (event !== 'cell_edit' && !/_clicked$/.test(event) && shinyData.hasOwnProperty(id) && shinyData[id] === JSON.stringify(value)) - return; - shinyData[id] = JSON.stringify(value); - if (HTMLWidgets.shinyMode && Shiny.setInputValue) { - Shiny.setInputValue(id, value, opts); - if (!instance.clearInputs[id]) instance.clearInputs[id] = function() { - Shiny.setInputValue(id, null); - } - } - - // HACK - if (event === "rows_selected" && !noCrosstalk) { - if (crosstalkOptions.group) { - var keys = crosstalkOptions.key; - var selectedKeys = null; - if (value) { - selectedKeys = []; - for (var i = 0; i < value.length; i++) { - // The value array's contents use 1-based row numbers, so we must - // convert to 0-based before indexing into the keys array. - selectedKeys.push(keys[value[i] - 1]); - } - } - instance.ctselectHandle.set(selectedKeys); - } - } - }; - - var addOne = function(x) { - return x.map(function(i) { return 1 + i; }); - }; - - var unique = function(x) { - var ux = []; - $.each(x, function(i, el){ - if ($.inArray(el, ux) === -1) ux.push(el); - }); - return ux; - } - - // change the row index of a cell - var tweakCellIndex = function(cell) { - var info = cell.index(); - // some cell may not be valid. e.g, #759 - // when using the RowGroup extension, datatables will - // generate the row label and the cells are not part of - // the data thus contain no row/col info - if (info === undefined) - return {row: null, col: null}; - if (server) { - info.row = DT_rows_current[info.row]; - } else { - info.row += 1; - } - return {row: info.row, col: info.column}; - } - - var cleanSelectedValues = function() { - changeInput('rows_selected', []); - changeInput('columns_selected', []); - changeInput('cells_selected', transposeArray2D([]), 'shiny.matrix'); - } - // #828 we should clean the selection on the server-side when the table reloads - cleanSelectedValues(); - - // a flag to indicates if select extension is initialized or not - var flagSelectExt = table.settings()[0]._select !== undefined; - // the Select extension should only be used in the client mode and - // when the selection.mode is set to none - if (data.selection.mode === 'none' && !server && flagSelectExt) { - var updateRowsSelected = function() { - var rows = table.rows({selected: true}); - var selected = []; - $.each(rows.indexes().toArray(), function(i, v) { - selected.push(v + 1); - }); - changeInput('rows_selected', selected); - } - var updateColsSelected = function() { - var columns = table.columns({selected: true}); - changeInput('columns_selected', columns.indexes().toArray()); - } - var updateCellsSelected = function() { - var cells = table.cells({selected: true}); - var selected = []; - cells.every(function() { - var row = this.index().row; - var col = this.index().column; - selected = selected.concat([[row + 1, col]]); - }); - changeInput('cells_selected', transposeArray2D(selected), 'shiny.matrix'); - } - table.on('select deselect', function(e, dt, type, indexes) { - updateRowsSelected(); - updateColsSelected(); - updateCellsSelected(); - }) - updateRowsSelected(); - updateColsSelected(); - updateCellsSelected(); - } - - var selMode = data.selection.mode, selTarget = data.selection.target; - var selDisable = data.selection.selectable === false; - if (inArray(selMode, ['single', 'multiple'])) { - var selClass = inArray(data.style, ['bootstrap', 'bootstrap4']) ? 'active' : 'selected'; - // selected1: row indices; selected2: column indices - var initSel = function(x) { - if (x === null || typeof x === 'boolean' || selTarget === 'cell') { - return {rows: [], cols: []}; - } else if (selTarget === 'row') { - return {rows: $.makeArray(x), cols: []}; - } else if (selTarget === 'column') { - return {rows: [], cols: $.makeArray(x)}; - } else if (selTarget === 'row+column') { - return {rows: $.makeArray(x.rows), cols: $.makeArray(x.cols)}; - } - } - var selected = data.selection.selected; - var selected1 = initSel(selected).rows, selected2 = initSel(selected).cols; - // selectable should contain either all positive or all non-positive values, not both - // positive values indicate "selectable" while non-positive values means "nonselectable" - // the assertion is performed on R side. (only column indicides could be zero which indicates - // the row name) - var selectable = data.selection.selectable; - var selectable1 = initSel(selectable).rows, selectable2 = initSel(selectable).cols; - - // After users reorder the rows or filter the table, we cannot use the table index - // directly. Instead, we need this function to find out the rows between the two clicks. - // If user filter the table again between the start click and the end click, the behavior - // would be undefined, but it should not be a problem. - var shiftSelRowsIndex = function(start, end) { - var indexes = server ? DT_rows_all : table.rows({ search: 'applied' }).indexes().toArray(); - start = indexes.indexOf(start); end = indexes.indexOf(end); - // if start is larger than end, we need to swap - if (start > end) { - var tmp = end; end = start; start = tmp; - } - return indexes.slice(start, end + 1); - } - - var serverRowIndex = function(clientRowIndex) { - return server ? DT_rows_current[clientRowIndex] : clientRowIndex + 1; - } - - // row, column, or cell selection - var lastClickedRow; - if (inArray(selTarget, ['row', 'row+column'])) { - // Get the current selected rows. It will also - // update the selected1's value based on the current row selection state - // Note we can't put this function inside selectRows() directly, - // the reason is method.selectRows() will override selected1's value but this - // function will add rows to selected1 (keep the existing selection), which is - // inconsistent with column and cell selection. - var selectedRows = function() { - var rows = table.rows('.' + selClass); - var idx = rows.indexes().toArray(); - if (!server) { - selected1 = addOne(idx); - return selected1; - } - idx = idx.map(function(i) { - return DT_rows_current[i]; - }); - selected1 = selMode === 'multiple' ? unique(selected1.concat(idx)) : idx; - return selected1; - } - // Change selected1's value based on selectable1, then refresh the row state - var onlyKeepSelectableRows = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected1 = []; - return; - } - if (selectable1.length === 0) return; - var nonselectable = selectable1[0] <= 0; - if (nonselectable) { - // should make selectable1 positive - selected1 = $(selected1).not(selectable1.map(function(i) { return -i; })).get(); - } else { - selected1 = $(selected1).filter(selectable1).get(); - } - } - // Change selected1's value based on selectable1, then - // refresh the row selection state according to values in selected1 - var selectRows = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableRows(); - table.$('tr.' + selClass).removeClass(selClass); - if (selected1.length === 0) return; - if (server) { - table.rows({page: 'current'}).every(function() { - if (inArray(DT_rows_current[this.index()], selected1)) { - $(this.node()).addClass(selClass); - } - }); - } else { - var selected0 = selected1.map(function(i) { return i - 1; }); - $(table.rows(selected0).nodes()).addClass(selClass); - } - } - table.on('mousedown.dt', 'tbody tr', function(e) { - var $this = $(this), thisRow = table.row(this); - if (selMode === 'multiple') { - if (e.shiftKey && lastClickedRow !== undefined) { - // select or de-select depends on the last clicked row's status - var flagSel = !$this.hasClass(selClass); - var crtClickedRow = serverRowIndex(thisRow.index()); - if (server) { - var rowsIndex = shiftSelRowsIndex(lastClickedRow, crtClickedRow); - // update current page's selClass - rowsIndex.map(function(i) { - var rowIndex = DT_rows_current.indexOf(i); - if (rowIndex >= 0) { - var row = table.row(rowIndex).nodes().to$(); - var flagRowSel = !row.hasClass(selClass); - if (flagSel === flagRowSel) row.toggleClass(selClass); - } - }); - // update selected1 - if (flagSel) { - selected1 = unique(selected1.concat(rowsIndex)); - } else { - selected1 = selected1.filter(function(index) { - return !inArray(index, rowsIndex); - }); - } - } else { - // js starts from 0 - shiftSelRowsIndex(lastClickedRow - 1, crtClickedRow - 1).map(function(value) { - var row = table.row(value).nodes().to$(); - var flagRowSel = !row.hasClass(selClass); - if (flagSel === flagRowSel) row.toggleClass(selClass); - }); - } - e.preventDefault(); - } else { - $this.toggleClass(selClass); - } - } else { - if ($this.hasClass(selClass)) { - $this.removeClass(selClass); - } else { - table.$('tr.' + selClass).removeClass(selClass); - $this.addClass(selClass); - } - } - if (server && !$this.hasClass(selClass)) { - var id = DT_rows_current[thisRow.index()]; - // remove id from selected1 since its class .selected has been removed - if (inArray(id, selected1)) selected1.splice($.inArray(id, selected1), 1); - } - selectedRows(); // update selected1's value based on selClass - selectRows(false); // only keep the selectable rows - changeInput('rows_selected', selected1); - changeInput('row_last_clicked', serverRowIndex(thisRow.index()), null, null, {priority: 'event'}); - lastClickedRow = serverRowIndex(thisRow.index()); - }); - selectRows(false); // in case users have specified pre-selected rows - // restore selected rows after the table is redrawn (e.g. sort/search/page); - // client-side tables will preserve the selections automatically; for - // server-side tables, we have to *real* row indices are in `selected1` - changeInput('rows_selected', selected1); - if (server) table.on('draw.dt', function(e) { selectRows(false); }); - methods.selectRows = function(selected, ignoreSelectable) { - selected1 = $.makeArray(selected); - selectRows(ignoreSelectable); - changeInput('rows_selected', selected1); - } - } - - if (inArray(selTarget, ['column', 'row+column'])) { - if (selTarget === 'row+column') { - $(table.columns().footer()).css('cursor', 'pointer'); - } - // update selected2's value based on selectable2 - var onlyKeepSelectableCols = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected2 = []; - return; - } - if (selectable2.length === 0) return; - var nonselectable = selectable2[0] <= 0; - if (nonselectable) { - // need to make selectable2 positive - selected2 = $(selected2).not(selectable2.map(function(i) { return -i; })).get(); - } else { - selected2 = $(selected2).filter(selectable2).get(); - } - } - // update selected2 and then - // refresh the col selection state according to values in selected2 - var selectCols = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableCols(); - // if selected2 is not a valide index (e.g., larger than the column number) - // table.columns(selected2) will fail and result in a blank table - // this is different from the table.rows(), where the out-of-range indexes - // doesn't affect at all - selected2 = $(selected2).filter(table.columns().indexes()).get(); - table.columns().nodes().flatten().to$().removeClass(selClass); - if (selected2.length > 0) - table.columns(selected2).nodes().flatten().to$().addClass(selClass); - } - var callback = function() { - var colIdx = selTarget === 'column' ? table.cell(this).index().column : - $.inArray(this, table.columns().footer()), - thisCol = $(table.column(colIdx).nodes()); - if (colIdx === -1) return; - if (thisCol.hasClass(selClass)) { - thisCol.removeClass(selClass); - selected2.splice($.inArray(colIdx, selected2), 1); - } else { - if (selMode === 'single') $(table.cells().nodes()).removeClass(selClass); - thisCol.addClass(selClass); - selected2 = selMode === 'single' ? [colIdx] : unique(selected2.concat([colIdx])); - } - selectCols(false); // update selected2 based on selectable - changeInput('columns_selected', selected2); - } - if (selTarget === 'column') { - $(table.table().body()).on('click.dt', 'td', callback); - } else { - $(table.table().footer()).on('click.dt', 'tr th', callback); - } - selectCols(false); // in case users have specified pre-selected columns - changeInput('columns_selected', selected2); - if (server) table.on('draw.dt', function(e) { selectCols(false); }); - methods.selectColumns = function(selected, ignoreSelectable) { - selected2 = $.makeArray(selected); - selectCols(ignoreSelectable); - changeInput('columns_selected', selected2); - } - } - - if (selTarget === 'cell') { - var selected3 = [], selectable3 = []; - if (selected !== null) selected3 = selected; - if (selectable !== null && typeof selectable !== 'boolean') selectable3 = selectable; - var findIndex = function(ij, sel) { - for (var i = 0; i < sel.length; i++) { - if (ij[0] === sel[i][0] && ij[1] === sel[i][1]) return i; - } - return -1; - } - // Change selected3's value based on selectable3, then refresh the cell state - var onlyKeepSelectableCells = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected3 = []; - return; - } - if (selectable3.length === 0) return; - var nonselectable = selectable3[0][0] <= 0; - var out = []; - if (nonselectable) { - selected3.map(function(ij) { - // should make selectable3 positive - if (findIndex([-ij[0], -ij[1]], selectable3) === -1) { out.push(ij); } - }); - } else { - selected3.map(function(ij) { - if (findIndex(ij, selectable3) > -1) { out.push(ij); } - }); - } - selected3 = out; - } - // Change selected3's value based on selectable3, then - // refresh the cell selection state according to values in selected3 - var selectCells = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableCells(); - table.$('td.' + selClass).removeClass(selClass); - if (selected3.length === 0) return; - if (server) { - table.cells({page: 'current'}).every(function() { - var info = tweakCellIndex(this); - if (findIndex([info.row, info.col], selected3) > -1) - $(this.node()).addClass(selClass); - }); - } else { - selected3.map(function(ij) { - $(table.cell(ij[0] - 1, ij[1]).node()).addClass(selClass); - }); - } - }; - table.on('click.dt', 'tbody td', function() { - var $this = $(this), info = tweakCellIndex(table.cell(this)); - if ($this.hasClass(selClass)) { - $this.removeClass(selClass); - selected3.splice(findIndex([info.row, info.col], selected3), 1); - } else { - if (selMode === 'single') $(table.cells().nodes()).removeClass(selClass); - $this.addClass(selClass); - selected3 = selMode === 'single' ? [[info.row, info.col]] : - unique(selected3.concat([[info.row, info.col]])); - } - selectCells(false); // must call this to update selected3 based on selectable3 - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - }); - selectCells(false); // in case users have specified pre-selected columns - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - - if (server) table.on('draw.dt', function(e) { selectCells(false); }); - methods.selectCells = function(selected, ignoreSelectable) { - selected3 = selected ? selected : []; - selectCells(ignoreSelectable); - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - } - } - } - - // expose some table info to Shiny - var updateTableInfo = function(e, settings) { - // TODO: is anyone interested in the page info? - // changeInput('page_info', table.page.info()); - var updateRowInfo = function(id, modifier) { - var idx; - if (server) { - idx = modifier.page === 'current' ? DT_rows_current : DT_rows_all; - } else { - var rows = table.rows($.extend({ - search: 'applied', - page: 'all' - }, modifier)); - idx = addOne(rows.indexes().toArray()); - } - changeInput('rows' + '_' + id, idx); - }; - updateRowInfo('current', {page: 'current'}); - updateRowInfo('all', {}); - } - table.on('draw.dt', updateTableInfo); - updateTableInfo(); - - // state info - table.on('draw.dt column-visibility.dt', function() { - changeInput('state', table.state()); - }); - changeInput('state', table.state()); - - // search info - var updateSearchInfo = function() { - changeInput('search', table.search()); - if (filterRow) changeInput('search_columns', filterRow.toArray().map(function(td) { - return $(td).find('input').first().val(); - })); - } - table.on('draw.dt', updateSearchInfo); - updateSearchInfo(); - - var cellInfo = function(thiz) { - var info = tweakCellIndex(table.cell(thiz)); - info.value = table.cell(thiz).data(); - return info; - } - // the current cell clicked on - table.on('click.dt', 'tbody td', function() { - changeInput('cell_clicked', cellInfo(this), null, null, {priority: 'event'}); - }) - changeInput('cell_clicked', {}); - - // do not trigger table selection when clicking on links unless they have classes - table.on('mousedown.dt', 'tbody td a', function(e) { - if (this.className === '') e.stopPropagation(); - }); - - methods.addRow = function(data, rowname, resetPaging) { - var n = table.columns().indexes().length, d = n - data.length; - if (d === 1) { - data = rowname.concat(data) - } else if (d !== 0) { - console.log(data); - console.log(table.columns().indexes()); - throw 'New data must be of the same length as current data (' + n + ')'; - }; - table.row.add(data).draw(resetPaging); - } - - methods.updateSearch = function(keywords) { - if (keywords.global !== null) - $(table.table().container()).find('input[type=search]').first() - .val(keywords.global).trigger('input'); - var columns = keywords.columns; - if (!filterRow || columns === null) return; - filterRow.toArray().map(function(td, i) { - var v = typeof columns === 'string' ? columns : columns[i]; - if (typeof v === 'undefined') { - console.log('The search keyword for column ' + i + ' is undefined') - return; - } - // Update column search string and values on linked filter widgets. - // 'input' for factor and char filters, 'change' for numeric filters. - $(td).find('input').first().val(v).trigger('input', [true]).trigger('change'); - }); - table.draw(); - } - - methods.hideCols = function(hide, reset) { - if (reset) table.columns().visible(true, false); - table.columns(hide).visible(false); - } - - methods.showCols = function(show, reset) { - if (reset) table.columns().visible(false, false); - table.columns(show).visible(true); - } - - methods.colReorder = function(order, origOrder) { - table.colReorder.order(order, origOrder); - } - - methods.selectPage = function(page) { - if (table.page.info().pages < page || page < 1) { - throw 'Selected page is out of range'; - }; - table.page(page - 1).draw(false); - } - - methods.reloadData = function(resetPaging, clearSelection) { - // empty selections first if necessary - if (methods.selectRows && inArray('row', clearSelection)) methods.selectRows([]); - if (methods.selectColumns && inArray('column', clearSelection)) methods.selectColumns([]); - if (methods.selectCells && inArray('cell', clearSelection)) methods.selectCells([]); - table.ajax.reload(null, resetPaging); - } - - // update table filters (set new limits of sliders) - methods.updateFilters = function(newProps) { - // loop through each filter in the filter row - filterRow.each(function(i, td) { - var k = i; - if (filterRow.length > newProps.length) { - if (i === 0) return; // first column is row names - k = i - 1; - } - // Update the filters to reflect the updated data. - // Allow "falsy" (e.g. NULL) to signify a no-op. - if (newProps[k]) { - setFilterProps(td, newProps[k]); - } - }); - }; - - table.shinyMethods = methods; - }, - resize: function(el, width, height, instance) { - if (instance.data) this.renderValue(el, instance.data, instance); - - // dynamically adjust height if fillContainer = TRUE - if (instance.fillContainer) - this.fillAvailableHeight(el, height); - - this.adjustWidth(el); - }, - - // dynamically set the scroll body to fill available height - // (used with fillContainer = TRUE) - fillAvailableHeight: function(el, availableHeight) { - - // see how much of the table is occupied by header/footer elements - // and use that to compute a target scroll body height - var dtWrapper = $(el).find('div.dataTables_wrapper'); - var dtScrollBody = $(el).find($('div.dataTables_scrollBody')); - var framingHeight = dtWrapper.innerHeight() - dtScrollBody.innerHeight(); - var scrollBodyHeight = availableHeight - framingHeight; - - // we need to set `max-height` to none as datatables library now sets this - // to a fixed height, disabling the ability to resize to fill the window, - // as it will be set to a fixed 100px under such circumstances, e.g., RStudio IDE, - // or FlexDashboard - // see https://github.com/rstudio/DT/issues/951#issuecomment-1026464509 - dtScrollBody.css('max-height', 'none'); - // set the height - dtScrollBody.height(scrollBodyHeight + 'px'); - }, - - // adjust the width of columns; remove the hard-coded widths on table and the - // scroll header when scrollX/Y are enabled - adjustWidth: function(el) { - var $el = $(el), table = $el.data('datatable'); - if (table) table.columns.adjust(); - $el.find('.dataTables_scrollHeadInner').css('width', '') - .children('table').css('margin-left', ''); - } -}); - - if (!HTMLWidgets.shinyMode) return; - - Shiny.addCustomMessageHandler('datatable-calls', function(data) { - var id = data.id; - var el = document.getElementById(id); - var table = el ? $(el).data('datatable') : null; - if (!table) { - console.log("Couldn't find table with id " + id); - return; - } - - var methods = table.shinyMethods, call = data.call; - if (methods[call.method]) { - methods[call.method].apply(table, call.args); - } else { - console.log("Unknown method " + call.method); - } - }); - -})(); diff --git a/site_libs/datatables-css-0.0.0/datatables-crosstalk.css b/site_libs/datatables-css-0.0.0/datatables-crosstalk.css deleted file mode 100644 index bd1159c..0000000 --- a/site_libs/datatables-css-0.0.0/datatables-crosstalk.css +++ /dev/null @@ -1,32 +0,0 @@ -.dt-crosstalk-fade { - opacity: 0.2; -} - -html body div.DTS div.dataTables_scrollBody { - background: none; -} - - -/* -Fix https://github.com/rstudio/DT/issues/563 -If the `table.display` is set to "block" (e.g., pkgdown), the browser will display -datatable objects strangely. The search panel and the page buttons will still be -in full-width but the table body will be "compact" and shorter. -In therory, having this attributes will affect `dom="t"` -with `display: block` users. But in reality, there should be no one. -We may remove the below lines in the future if the upstream agree to have this there. -See https://github.com/DataTables/DataTablesSrc/issues/160 -*/ - -table.dataTable { - display: table; -} - - -/* -When DTOutput(fill = TRUE), it receives a .html-fill-item class (via htmltools::bindFillRole()), which effectively amounts to `flex: 1 1 auto`. That's mostly fine, but the case where `fillContainer=TRUE`+`height:auto`+`flex-basis:auto` and the container (e.g., a bslib::card()) doesn't have a defined height is a bit problematic since the table wants to fit the parent but the parent wants to fit the table, which results pretty small table height (maybe because there is a minimum height somewhere?). It seems better in this case to impose a 400px height default for the table, which we can do by setting `flex-basis` to 400px (the table is still allowed to grow/shrink when the container has an opinionated height). -*/ - -.html-fill-container > .html-fill-item.datatables { - flex-basis: 400px; -} diff --git a/site_libs/dt-core-1.13.6/css/jquery.dataTables.extra.css b/site_libs/dt-core-1.13.6/css/jquery.dataTables.extra.css deleted file mode 100644 index b2dd141..0000000 --- a/site_libs/dt-core-1.13.6/css/jquery.dataTables.extra.css +++ /dev/null @@ -1,28 +0,0 @@ -/* Selected rows/cells */ -table.dataTable tr.selected td, table.dataTable td.selected { - background-color: #b0bed9 !important; -} -/* In case of scrollX/Y or FixedHeader */ -.dataTables_scrollBody .dataTables_sizing { - visibility: hidden; -} - -/* The datatables' theme CSS file doesn't define -the color but with white background. It leads to an issue that -when the HTML's body color is set to 'white', the user can't -see the text since the background is white. One case happens in the -RStudio's IDE when inline viewing the DT table inside an Rmd file, -if the IDE theme is set to "Cobalt". - -See https://github.com/rstudio/DT/issues/447 for more info - -This fixes should have little side-effects because all the other elements -of the default theme use the #333 font color. - -TODO: The upstream may use relative colors for both the table background -and the color. It means the table can display well without this patch -then. At that time, we need to remove the below CSS attributes. -*/ -div.datatables { - color: #333; -} diff --git a/site_libs/dt-core-1.13.6/css/jquery.dataTables.min.css b/site_libs/dt-core-1.13.6/css/jquery.dataTables.min.css deleted file mode 100644 index ad59f84..0000000 --- a/site_libs/dt-core-1.13.6/css/jquery.dataTables.min.css +++ /dev/null @@ -1 +0,0 @@ -:root{--dt-row-selected: 13, 110, 253;--dt-row-selected-text: 255, 255, 255;--dt-row-selected-link: 9, 10, 11;--dt-row-stripe: 0, 0, 0;--dt-row-hover: 0, 0, 0;--dt-column-ordering: 0, 0, 0;--dt-html-background: white}:root.dark{--dt-html-background: rgb(33, 37, 41)}table.dataTable td.dt-control{text-align:center;cursor:pointer}table.dataTable td.dt-control:before{display:inline-block;color:rgba(0, 0, 0, 0.5);content:"►"}table.dataTable tr.dt-hasChild td.dt-control:before{content:"▼"}html.dark table.dataTable td.dt-control:before{color:rgba(255, 255, 255, 0.5)}html.dark table.dataTable tr.dt-hasChild td.dt-control:before{color:rgba(255, 255, 255, 0.5)}table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting_asc_disabled,table.dataTable thead>tr>th.sorting_desc_disabled,table.dataTable thead>tr>td.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting_asc_disabled,table.dataTable thead>tr>td.sorting_desc_disabled{cursor:pointer;position:relative;padding-right:26px}table.dataTable thead>tr>th.sorting:before,table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>th.sorting_desc:before,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>th.sorting_asc_disabled:after,table.dataTable thead>tr>th.sorting_desc_disabled:before,table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting:before,table.dataTable thead>tr>td.sorting:after,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_asc:after,table.dataTable thead>tr>td.sorting_desc:before,table.dataTable thead>tr>td.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_asc_disabled:after,table.dataTable thead>tr>td.sorting_desc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:after{position:absolute;display:block;opacity:.125;right:10px;line-height:9px;font-size:.8em}table.dataTable thead>tr>th.sorting:before,table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_desc:before,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>th.sorting_desc_disabled:before,table.dataTable thead>tr>td.sorting:before,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_desc:before,table.dataTable thead>tr>td.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:before{bottom:50%;content:"▲";content:"▲"/""}table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>th.sorting_asc_disabled:after,table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting:after,table.dataTable thead>tr>td.sorting_asc:after,table.dataTable thead>tr>td.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc_disabled:after,table.dataTable thead>tr>td.sorting_desc_disabled:after{top:50%;content:"▼";content:"▼"/""}table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_desc:after{opacity:.6}table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting_asc_disabled:before{display:none}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}div.dataTables_scrollBody>table.dataTable>thead>tr>th:before,div.dataTables_scrollBody>table.dataTable>thead>tr>th:after,div.dataTables_scrollBody>table.dataTable>thead>tr>td:before,div.dataTables_scrollBody>table.dataTable>thead>tr>td:after{display:none}div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:2px}div.dataTables_processing>div:last-child{position:relative;width:80px;height:15px;margin:1em auto}div.dataTables_processing>div:last-child>div{position:absolute;top:0;width:13px;height:13px;border-radius:50%;background:rgb(13, 110, 253);background:rgb(var(--dt-row-selected));animation-timing-function:cubic-bezier(0, 1, 1, 0)}div.dataTables_processing>div:last-child>div:nth-child(1){left:8px;animation:datatables-loader-1 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(2){left:8px;animation:datatables-loader-2 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(3){left:32px;animation:datatables-loader-2 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(4){left:56px;animation:datatables-loader-3 .6s infinite}@keyframes datatables-loader-1{0%{transform:scale(0)}100%{transform:scale(1)}}@keyframes datatables-loader-3{0%{transform:scale(1)}100%{transform:scale(0)}}@keyframes datatables-loader-2{0%{transform:translate(0, 0)}100%{transform:translate(24px, 0)}}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th,table.dataTable thead td,table.dataTable tfoot th,table.dataTable tfoot td{text-align:left}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable>thead>tr>th,table.dataTable>thead>tr>td{padding:10px;border-bottom:1px solid rgba(0, 0, 0, 0.3)}table.dataTable>thead>tr>th:active,table.dataTable>thead>tr>td:active{outline:none}table.dataTable>tfoot>tr>th,table.dataTable>tfoot>tr>td{padding:10px 10px 6px 10px;border-top:1px solid rgba(0, 0, 0, 0.3)}table.dataTable tbody tr{background-color:transparent}table.dataTable tbody tr.selected>*{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.9);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.9);color:rgb(255, 255, 255);color:rgb(var(--dt-row-selected-text))}table.dataTable tbody tr.selected a{color:rgb(9, 10, 11);color:rgb(var(--dt-row-selected-link))}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border>tbody>tr>th,table.dataTable.row-border>tbody>tr>td,table.dataTable.display>tbody>tr>th,table.dataTable.display>tbody>tr>td{border-top:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.row-border>tbody>tr:first-child>th,table.dataTable.row-border>tbody>tr:first-child>td,table.dataTable.display>tbody>tr:first-child>th,table.dataTable.display>tbody>tr:first-child>td{border-top:none}table.dataTable.row-border>tbody>tr.selected+tr.selected>td,table.dataTable.display>tbody>tr.selected+tr.selected>td{border-top-color:#0262ef}table.dataTable.cell-border>tbody>tr>th,table.dataTable.cell-border>tbody>tr>td{border-top:1px solid rgba(0, 0, 0, 0.15);border-right:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.cell-border>tbody>tr>th:first-child,table.dataTable.cell-border>tbody>tr>td:first-child{border-left:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.cell-border>tbody>tr:first-child>th,table.dataTable.cell-border>tbody>tr:first-child>td{border-top:none}table.dataTable.stripe>tbody>tr.odd>*,table.dataTable.display>tbody>tr.odd>*{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.023);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.023)}table.dataTable.stripe>tbody>tr.odd.selected>*,table.dataTable.display>tbody>tr.odd.selected>*{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.923);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.923)}table.dataTable.hover>tbody>tr:hover>*,table.dataTable.display>tbody>tr:hover>*{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.035);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.035)}table.dataTable.hover>tbody>tr.selected:hover>*,table.dataTable.display>tbody>tr.selected:hover>*{box-shadow:inset 0 0 0 9999px #0d6efd !important;box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 1) !important}table.dataTable.order-column>tbody tr>.sorting_1,table.dataTable.order-column>tbody tr>.sorting_2,table.dataTable.order-column>tbody tr>.sorting_3,table.dataTable.display>tbody tr>.sorting_1,table.dataTable.display>tbody tr>.sorting_2,table.dataTable.display>tbody tr>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.019);box-shadow:inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.019)}table.dataTable.order-column>tbody tr.selected>.sorting_1,table.dataTable.order-column>tbody tr.selected>.sorting_2,table.dataTable.order-column>tbody tr.selected>.sorting_3,table.dataTable.display>tbody tr.selected>.sorting_1,table.dataTable.display>tbody tr.selected>.sorting_2,table.dataTable.display>tbody tr.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.919);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.919)}table.dataTable.display>tbody>tr.odd>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.054);box-shadow:inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.054)}table.dataTable.display>tbody>tr.odd>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.047);box-shadow:inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.047)}table.dataTable.display>tbody>tr.odd>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.039);box-shadow:inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.039)}table.dataTable.display>tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.954);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.954)}table.dataTable.display>tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.947);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.947)}table.dataTable.display>tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.939);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.939)}table.dataTable.display>tbody>tr.even>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.019);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.019)}table.dataTable.display>tbody>tr.even>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.011);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.011)}table.dataTable.display>tbody>tr.even>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.003);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.003)}table.dataTable.display>tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.919);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.919)}table.dataTable.display>tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.911);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.911)}table.dataTable.display>tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.903);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.903)}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.082);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.082)}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.074);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.074)}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.062);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.062)}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.982);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.982)}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.974);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.974)}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.962);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.962)}table.dataTable.no-footer{border-bottom:1px solid rgba(0, 0, 0, 0.3)}table.dataTable.compact thead th,table.dataTable.compact thead td,table.dataTable.compact tfoot th,table.dataTable.compact tfoot td,table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_length select{border:1px solid #aaa;border-radius:3px;padding:5px;background-color:transparent;color:inherit;padding:4px}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{border:1px solid #aaa;border-radius:3px;padding:5px;background-color:transparent;color:inherit;margin-left:3px}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;color:inherit !important;border:1px solid transparent;border-radius:2px;background:transparent}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:inherit !important;border:1px solid rgba(0, 0, 0, 0.3);background-color:rgba(0, 0, 0, 0.05);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(230, 230, 230, 0.05)), color-stop(100%, rgba(0, 0, 0, 0.05)));background:-webkit-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%);background:-moz-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%);background:-ms-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%);background:-o-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%);background:linear-gradient(to bottom, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#111;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#0c0c0c;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:inherit}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid rgba(0, 0, 0, 0.3)}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}html.dark{--dt-row-hover: 255, 255, 255;--dt-row-stripe: 255, 255, 255;--dt-column-ordering: 255, 255, 255}html.dark table.dataTable>thead>tr>th,html.dark table.dataTable>thead>tr>td{border-bottom:1px solid rgb(89, 91, 94)}html.dark table.dataTable>thead>tr>th:active,html.dark table.dataTable>thead>tr>td:active{outline:none}html.dark table.dataTable>tfoot>tr>th,html.dark table.dataTable>tfoot>tr>td{border-top:1px solid rgb(89, 91, 94)}html.dark table.dataTable.row-border>tbody>tr>th,html.dark table.dataTable.row-border>tbody>tr>td,html.dark table.dataTable.display>tbody>tr>th,html.dark table.dataTable.display>tbody>tr>td{border-top:1px solid rgb(64, 67, 70)}html.dark table.dataTable.row-border>tbody>tr.selected+tr.selected>td,html.dark table.dataTable.display>tbody>tr.selected+tr.selected>td{border-top-color:#0257d5}html.dark table.dataTable.cell-border>tbody>tr>th,html.dark table.dataTable.cell-border>tbody>tr>td{border-top:1px solid rgb(64, 67, 70);border-right:1px solid rgb(64, 67, 70)}html.dark table.dataTable.cell-border>tbody>tr>th:first-child,html.dark table.dataTable.cell-border>tbody>tr>td:first-child{border-left:1px solid rgb(64, 67, 70)}html.dark .dataTables_wrapper .dataTables_filter input,html.dark .dataTables_wrapper .dataTables_length select{border:1px solid rgba(255, 255, 255, 0.2);background-color:var(--dt-html-background)}html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.current,html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{border:1px solid rgb(89, 91, 94);background:rgba(255, 255, 255, 0.15)}html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled,html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{color:#666 !important}html.dark .dataTables_wrapper .dataTables_paginate .paginate_button:hover{border:1px solid rgb(53, 53, 53);background:rgb(53, 53, 53)}html.dark .dataTables_wrapper .dataTables_paginate .paginate_button:active{background:#3a3a3a} diff --git a/site_libs/dt-core-1.13.6/js/jquery.dataTables.min.js b/site_libs/dt-core-1.13.6/js/jquery.dataTables.min.js deleted file mode 100644 index f786b0d..0000000 --- a/site_libs/dt-core-1.13.6/js/jquery.dataTables.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! DataTables 1.13.6 - * ©2008-2023 SpryMedia Ltd - datatables.net/license - */ -!function(n){"use strict";var a;"function"==typeof define&&define.amd?define(["jquery"],function(t){return n(t,window,document)}):"object"==typeof exports?(a=require("jquery"),"undefined"==typeof window?module.exports=function(t,e){return t=t||window,e=e||a(t),n(e,t,t.document)}:n(a,window,window.document)):window.DataTable=n(jQuery,window,document)}(function(P,j,v,H){"use strict";function d(t){var e=parseInt(t,10);return!isNaN(e)&&isFinite(t)?e:null}function l(t,e,n){var a=typeof t,r="string"==a;return"number"==a||"bigint"==a||!!h(t)||(e&&r&&(t=$(t,e)),n&&r&&(t=t.replace(q,"")),!isNaN(parseFloat(t))&&isFinite(t))}function a(t,e,n){var a;return!!h(t)||(h(a=t)||"string"==typeof a)&&!!l(t.replace(V,"").replace(/