diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 000000000..e69de29bb
diff --git a/2022/08/29/dev-meeting.html b/2022/08/29/dev-meeting.html
new file mode 100644
index 000000000..b642e3a69
--- /dev/null
+++ b/2022/08/29/dev-meeting.html
@@ -0,0 +1,447 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Dev meeting | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Dev meeting
+
29 August 2022
+
Meeting Summary
+
+
The meeting took place on 04 September 2022, at 2:00 PM UTC via Google Meet,
+with team members from different time zones joining to discuss key aspects of the Pactus project.
+
+
NanoMsg instead of ZeroMQ
+
+
During the meeting, Joseph suggested using Nanomsg instead of ZeroMQ because building ZeroMQ is not easy,
+especially in Windows. Additionally, we can use the pure Go implementation of Nanomsg.
+
+
The format of block events was defined as follows:
+
+
<event_id: 1 byte><event_data: variant><height: 4 bytes><seq_num: 4 bytes>
+
+
+
As a consequence of this, smart contracts events can be defined more easily and
+Infura-like services become simple, as we can just replay the events.
+
+
Reviewing a Pull Request
+
+
Nagaraj’s pull request reviewed.
+
+
Renaming project
+
+
The team discussed renaming (rebranding) the project and decided to create an online survey to
+gather suggestions for a new name.
+Everyone is encouraged to participate in the survey and suggest new names for the project.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2022/09/04/dev-meeting.html b/2022/09/04/dev-meeting.html
new file mode 100644
index 000000000..da455d1fb
--- /dev/null
+++ b/2022/09/04/dev-meeting.html
@@ -0,0 +1,556 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Dev meeting | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Dev meeting
+
04 September 2022
+
Meeting Summary
+
+
The meeting took place on 29 August 2022, at 2:00 PM UTC via Google Meet,
+with team members from different time zones joining to discuss key aspects of the Pactus project.
+
+
Project renamed to Pactus
+
+
During the last meeting, the team conducted an online survey to rename the project.
+A total of 31 responses were received, and the following names were suggested:
+
+
+
+
+ Name
+ Votes
+
+
+
+
+ Sirius
+ 11
+
+
+ Pactus
+ 10
+
+
+ Nova
+ 7
+
+
+ Texo
+ 6
+
+
+ Zemus
+ 6
+
+
+ Helios
+ 6
+
+
+ Tutti
+ 5
+
+
+ Haki
+ 5
+
+
+ Aegeus
+ 4
+
+
+ Virgo
+ 4
+
+
+ Zentora
+ 3
+
+
+ Zinova
+ 3
+
+
+ Xerxes
+ 2
+
+
+ Ledgeria
+ 2
+
+
+ Solidus
+ 2
+
+
+ Welt
+ 2
+
+
+ Ventura
+ 2
+
+
+ Zebra
+ 2
+
+
+ Miranet
+ 2
+
+
+ Monetha
+ 2
+
+
+ FutureHub
+ 1
+
+
+ Muonet
+ 1
+
+
+ Mentha
+ 1
+
+
+ Hypatios
+ 0
+
+
+ Chaintopia
+ 0
+
+
+ Sycee
+ 0
+
+
+ Lepus
+ 0
+
+
+
+
+
After reviewing the responses, the team chose “Pactus” as the new name for the project. 🎉
+The project will be moved to “pactus-project/pactus,” and the team plans to announce it on social media.
+
+
Discussion on GUI
+
+
In terms of the GUI, Joseph suggested using Flutter, and the team agreed.
+To interact with the wallet, gRPC APIs will be provided, and the GUI will use these APIs.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2022/09/18/dev-meeting.html b/2022/09/18/dev-meeting.html
new file mode 100644
index 000000000..83acbff98
--- /dev/null
+++ b/2022/09/18/dev-meeting.html
@@ -0,0 +1,466 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Dev meeting | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Dev meeting
+
18 September 2022
+
Meeting Summary
+
+
The meeting took place on 18 September 2022, at 2:00 PM UTC via Google Meet,
+with team members from different time zones joining to discuss key aspects of the Pactus project.
+
+
Discussion about Testnet
+
+
The team discussed Testnet and related issues, including IP block issues that were found by Hadi.
+Due to sanctions, some IPs are blocked, so the team will run a support node to assist users inside Iran.
+The GUI application had some issues on Windows, but they were fixed and tested by Hadi.
+
+
Discussion about Website
+
+
The website still has some issues, such as the need to rename the animation to “Pactus” and the lack of a logo.
+The community suggested some logos. Additionally, the roadmap page is missing.
+
+
+
+
The team discussed the status of social media platforms, including:
+
+
+ Discord: 70 members
+ Instagram: 87 followers
+ Telegram: 20 followers
+ Linkedin: 20 followers
+ Twitter: Not yet
+
+
+
The team also decided to announce the project on social media on 29 September.
+
+
Consensus parameters
+
+
The team discussed the current consensus parameters:
+
+
+ Total supply: 21 million coins
+ Reward: 1 coin per block
+ Block time: 10 second
+ Committee size: 21 members
+ Bond interval: one hour
+ Unbond interval: 21 days
+ Fee fraction: 0.0001
+ Min fee: 0.0000001
+ Max fee: 0.01
+ Maximum stake: 12381
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2022/09/20/release-0-9-0.html b/2022/09/20/release-0-9-0.html
new file mode 100644
index 000000000..4adc9eb29
--- /dev/null
+++ b/2022/09/20/release-0-9-0.html
@@ -0,0 +1,436 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.9.0 released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.9.0 released
+
20 September 2022
+
Overview
+
+
Pactus Blockchain Release Version 0.9.0
+is now available for download.
+This release includes a new graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Download
+
+
This version has been implemented for Testnet-0 and is preparing for the upcoming Mainnet launch.
+To get started with the Pactus Blockchain Testnet-0, simply download
+the latest version and run the Pactus software.
+
+
Join the Testnet now and get ready for the future!
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2022/09/24/testnet-0-launched.html b/2022/09/24/testnet-0-launched.html
new file mode 100644
index 000000000..8a0ee4876
--- /dev/null
+++ b/2022/09/24/testnet-0-launched.html
@@ -0,0 +1,432 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Testnet-0 launch announcement | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Testnet-0 launch announcement
+
24 September 2022
+
+
+
The Pactus blockchain Testnet-0 is now accessible.
+To participate, simply download the Pactus application version 0.9.0 and
+connect to the Testnet without any special configurations.
+For test coins, please visit our Discord channel and share your validator address.
+
+
By taking part in the Testnet, you can familiarize yourself with the Pactus blockchain and
+get ready for the Mainnet launch.
+Testnet participants will also be given higher priority during the Mainnet launch.
+
+
Please share your feedback with us to help improve the user experience in future versions of the software.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2022/10/30/dev-meeting.html b/2022/10/30/dev-meeting.html
new file mode 100644
index 000000000..540feb5c1
--- /dev/null
+++ b/2022/10/30/dev-meeting.html
@@ -0,0 +1,459 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Dev meeting | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Dev meeting
+
30 October 2022
+
Meeting Summary
+
+
The meeting took place on 30 October 2022, at 2:00 PM UTC via Google Meet,
+with team members from different time zones joining to discuss key aspects of the Pactus project.
+
+
In memory of Mahsa Amini
+
+
The meeting started in memory of Mahsa Amini .
+We in the Pactus family stand in solidarity with courageous people who are fighting for equality, equity and freedom in Iran.
+
+
+
+
Launching Block explorer
+
+
The beta version of the block explorer has been launched 🚀 and is now available at
+https://pacviewer.com .
+
+
Nagaraj explained the block explorer and some of the features.
+
+
Project road map
+
+
Project road map was discussed.
+
+
IdeaKita pitch deck
+
+
Ali presented the Pactus pitch deck for the IdeaKita in Malaysia.
+The IdeaKita program, under the Malaysia Digital Economy Corporation (MDEC), is designed to
+support entrepreneurs and startups in Malaysia.
+
+
Latest development progress
+
+
The latest pull requests were reviewed:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2022/11/24/release-0-9-1.html b/2022/11/24/release-0-9-1.html
new file mode 100644
index 000000000..edb5be00d
--- /dev/null
+++ b/2022/11/24/release-0-9-1.html
@@ -0,0 +1,451 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.9.1 released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.9.1 released
+
24 November 2022
+
Overview
+
+
Pactus Blockchain Release Version 0.9.1
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Download
+
+
This version has been implemented for Testnet-0 and is preparing for the upcoming Mainnet launch.
+To start using the Pactus Blockchain Testnet-0,
+you can download the latest version from download page
+and join the Testnet.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
+ Blocks can be fully decoded when queried in gRPC
+ The HTTP module now uses gRPC module, making node configuration simpler by removing the CapnP module
+ Reducing the blockchain size by saving blocks by number instead of hash
+ The wallet can hold unconfirmed transactions
+ The wallet can use different gRPC servers
+ The GUI displays committee information
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/03/01/what-is-testnet.html b/2023/03/01/what-is-testnet.html
new file mode 100644
index 000000000..e5e57cfe6
--- /dev/null
+++ b/2023/03/01/what-is-testnet.html
@@ -0,0 +1,503 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ What is a Testnet? | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
What is a Testnet?
+
01 March 2023
+
Mainnet vs Testnet?
+
+
If you have ever wondered what Testnet is and how it is different from Mainnet, read this article to the end to find out!
+
+
Mainnet and Testnet are two widely used terminologies in the Blockchain ecosystem;
+so it is important to understand the meaning and differences while working in the industry or
+following announcements of the Blockchain projects like Pactus.
+
+
Here’s a quick explanation:
+Before the actual live version of a Blockchain network that is used for real transactions,
+functions and smart-contracts (which is referred as Mainnet),
+there is a test version of the Blockchain network for testing purposes (which is referred as Testnet).
+In Testnet, a safe environment is provided to help developers experiment and test their applications,
+and make sure that everything functions smoothly in the Mainnet version.
+
+
Testnet
+
+
A Testnet is a simulation of a Blockchain, in which developers can test all the functionalities of
+their Blockchain network without risking their assets and convenience of end-users.
+Using Testnet, any possible error, bug or malfunctions can be fixed before the Mainnet launch.
+Testnet also can be an experimental environment for new features, updates and upgrades.
+So several Testnet networks of the same version or newer version of the Mainnet can be implemented on the roadmap.
+
+
What are use cases of Testnet?
+
+
A secure environment to test development ideas and updates.
+So many features and minor details in Pactus project have been successfully developed so far using the Testnet; such as:
+
+
+ extra details and information on Pactus-GUI;
+ well-functioning Pactus Blockchain explorer to access transactions and block details;
+ Upgrades that led to decreasing the size of the Pactus network
+
+
+
Providing a safe testing ground for resolve scalability and security problems, as well as decentralization issues.
+Pactus network is also a secure and purely decentralized network. However in the last updates during the Testnet,
+developers are now able to decrease the database size by approximately 10% without compromising performance.
+They did it by utilizing block height instead of hash to store blocks within the database. (you can find out more
+here ).
+
+
Testing new versions, patches and features on Testnet. it is vital for enhancing the security, load testing,
+Blockchain migration, integration tests, and etc. This is why you can now use the latest version of Pactus-GUI
+that works like clockwork and is extremely secure.
+
+
Testing the functions of cryptocurrency without disrupting the Mainnet. In the Testnet of Pactus Blockchain,
+you as a user or validator can use all the features to send, receive, bond or unbond your assets in the Pactus-GUI.
+
+
Development and simulation of smart contract features and DApps. Note that many Blockchain projects like Pactus,
+can be used as smart-contract platforms. So the Testnet can be designed in different stages to test and improve
+different applications of the network.
+
+
Please note that after a certain period of time, when developers get satisfied with the functionality and debugging process,
+they launch Mainnet. Mainnet has its own independent genesis blocks;
+so the assets and addresses that users use in Testnet are not valid inside the new Mainnet Blockchain anymore.
+In fact the whole Blockchain network starts working from the scratch and users and validators start to
+work with real coins and transactions instead of the simulated ones. But since Testnet has an important effect
+on the health and improvement of the network, in Pactus Blockchain, we have several advantages
+for the people who join the Testnet.
+
+
Why should you join the Testnet?
+
+
There are different contributors in a Blockchain network;
+Some people are developers and programmers that use the Testnet to contribute, enhance and lead the project to a better future.
+Testnet is actually vital for them to perform their changes and try their innovations and ideas.
+
+
But you might also be an end user; you might want to either be a validator and stake your assets to earn more Pactus coins,
+or you might want to learn how to use the network for future personal applications. Either way,
+you might find it handy to give it a try and be familiar with Pactus-GUI and its different features.
+
+
However, there is another advantage for end users who join the Testnet.
+While using the network, running a node or testing the Pactus-GUI in Testnet period, you are contributing to
+the community to find improvement potentials, that’s why there are more advantages contemplated for the Testnet users;
+Soon our Mainnet will be launched and also Pactus network will be announced and listed in well-known exchanges.
+As an early contributor, you will have the advantage of getting some extra initial coins at the beginning of Mainnet launch.
+So that you can use it to run a validator node and earn more from staking your assets. This airdrop is considered
+for every individual who installs Pactus-GUI and starts a node in Testnet.
+
+
There are other positive conditions you may experience as an early contributor.
+
+
+ Advanced and very responsive support for your issues (we dedicate more time to provide you with solutions)
+ Embracing your suggestions, improvement ideas, needs and information you may require to have a better user experience.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/04/21/testnet-0-concluded.html b/2023/04/21/testnet-0-concluded.html
new file mode 100644
index 000000000..a13260592
--- /dev/null
+++ b/2023/04/21/testnet-0-concluded.html
@@ -0,0 +1,464 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Story of Testnet-0 | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Story of Testnet-0
+
21 April 2023
+
What is Testnet?
+
+
Testnet is a testing environment where developers and users can try out the functionality of a blockchain project,
+without putting real assets or data at risk.
+It helps to ensure that the final product is reliable and secure for users to use.
+If you like to read more about the Testnet you can check out our post on
+“What is Testnet? ”.
+
+
Summary of Testnet-0
+
+
In September 2022, we launched Testnet-0 .
+The purpose of this Testnet was to
+check the consensus protocol ,
+test different transaction types,
+and ensure the stability of the blockchain.
+We also wanted to test the sortition algorithm
+to make sure it works properly.
+
+
The committee
+for the Testnet-0 was set to five validators, and more than 19 validators joined during the Testnet period.
+Over 2 million blocks were created, and more than 3.2 million transactions were processed during this time.
+The size of the blockchain is approximately 1 gigabyte.
+The maximum number of transactions recorded in a single block was 386 . With a block time of 10 seconds,
+we can confirm that Pactus blockchain can support up to 30 transactions per second (TPS),
+which is a reasonable number for TPS.
+
+
At this point, the development team decided to end the Testnet-0 and move on to the next one,
+Testnet-1. We are planning to run the Testnet-1 to prepare for the MainNet launch.
+We will provide updates on our progress and share the details of the new Testnet soon.
+
+
+
+
This Testnet was important for us.
+It helped us learn what we need to do to make Pactus work even better.
+Without the community that supports us and dedicates their time and resources to testing and feedback,
+we wouldn’t have been able to progress as we have.
+
+
We thank all of them for their valuable contributions.
+As promised, participants in Testnets will be given priority as validators for the MainNet , and
+will receive bounty PAC coins to set up their validators.
+
+
We are grateful to all those who participated in Testnet-0, and
+we encourage them to join our next Testnet to help us improve Pactus.
+As a community-based project, we rely on the support of our community members, and we value any help we receive.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/05/08/release-0-10-0.html b/2023/05/08/release-0-10-0.html
new file mode 100644
index 000000000..7ca627a3c
--- /dev/null
+++ b/2023/05/08/release-0-10-0.html
@@ -0,0 +1,479 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.10.0 released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.10.0 released
+
08 May 2023
+
Overview
+
+
Pactus Blockchain Version 0.10.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlight
+
+
The main update in this version allows users to set up multiple validators in one node.
+Users can set up to 32 validators in a single node, and each validator can stake up to 1,000 coins.
+
+
+
+
Download
+
+
This version has been implemented for Testnet-1 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-1, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to run and configure your node:
+
+
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ removing address from account (#454 )
+ supporting multiple consensus instances (#450 )
+ adding sortition interval to the parameters (#442 )
+
+
+
Fix
+
+
+ gui : check if the node has an active consensus instance (#458 )
+ Use of a Persistent Merkle tree to enhance performance of calculating the
+state hash ; fully tested in Testnet-0 (#432 )
+ GetBlockchainInfo
API in gRPC now returns the total number of validators and accounts (#439 )
+ wallet path as argument (#455 )
+ adding reward addresses to config (#453 )
+ removing committers from the certificate hash (#444 )
+ prevent data race conditions in committee (#452 )
+ using 2^256 for the vrf denominator (#445 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/05/09/testnet-1-launched.html b/2023/05/09/testnet-1-launched.html
new file mode 100644
index 000000000..9c054448c
--- /dev/null
+++ b/2023/05/09/testnet-1-launched.html
@@ -0,0 +1,462 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Testnet-1 launch announcement | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Testnet-1 launch announcement
+
09 May 2023
+
Overview
+
+
The Pactus blockchain Testnet-1 is now available for participation.
+This version simulates the Mainnet environment and evaluate the system’s performance, stability,
+and security in a controlled environment.
+The primary goal of this version of Testnet is to determine the efficient and secure committee size for the Mainnet.
+
+
Key Aspects
+
+
+ Simulating the Mainnet environment
+ Determining the actual block creation time
+ Assessing the staking mechanism and consensus protocol
+ Evaluating network usage under different loads
+ Evaluating the syncing process for new nodes joining the network
+ Ensuring network stability with over 1000 validators
+ Evaluating transaction performance
+ Conducting stress tests
+ Performing security tests, including double spend attacks, Sybil attacks
+(nodes with different identities), and forking resistance
+
+
+
Joining Testnet-1
+
+
To join the Testnet, download Pactus software
+version 0.10.0 and
+connect to Testnet without any special configuration or hardware.
+You can run the software on your personal computer or laptop.
+To acquire test coins, visit the Discord channel and
+provide your validator address.
+
+
Benefits for Participation
+
+
By taking part in the Testnet, users can familiarize themselves with the Pactus blockchain and
+be well-prepared for the Mainnet launch.
+Testnet participants will also receive higher priority during the Mainnet launch and
+get free coins for initial staking on the Mainnet.
+
+
Your Feedback Matters
+
+
User feedback plays a vital role in the improvement of the Pactus blockchain.
+Share your thoughts and experiences to contribute to the enhancement of future software versions.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/05/29/release-0-11-0.html b/2023/05/29/release-0-11-0.html
new file mode 100644
index 000000000..d86e53a37
--- /dev/null
+++ b/2023/05/29/release-0-11-0.html
@@ -0,0 +1,491 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.11.0 released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.11.0 released
+
29 May 2023
+
Overview
+
+
Pactus Blockchain Version 0.11.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
The main update in this version is the fix for the relay
+connection issue.
+A relay is a peer in the network that facilitates the connection between two peers,
+particularly when they are using home internet.
+
+
Another significant update is that sending a Bond transaction
+is now more user-friendly.
+Users no longer need to set the validator public key if they want to bond Test PAC coins to their validators.
+
+
+
+
Download
+
+
This version has been implemented for Testnet-1 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-1, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to run and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Fix
+
+
+ gui : showing the total number of validators (#474 )
+ network : fixing relay connection issue (#475 )
+ consensus : rejecting vote with round numbers exceeding the limit (#466 )
+ increase failed counter when stream got error (#489 )
+ boosting syncing process (#482 )
+ waiting for proposal in pre-commit phase (#486 )
+ retrieving public key from wallet for bond transactions (#485 )
+ restoring config file to the default (#484 )
+ defining ChainType in genesis to detect the type of network (#483 )
+ reducing the default Argon2d to consume less memory (#480 )
+ adding password option to the start commands (#473 )
+
+
+
Refactor
+
+
+ rename send to transfer. (#469 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/06/19/release-0-12-0.html b/2023/06/19/release-0-12-0.html
new file mode 100644
index 000000000..02b155740
--- /dev/null
+++ b/2023/06/19/release-0-12-0.html
@@ -0,0 +1,489 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.12.0 released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.12.0 released
+
19 June 2023
+
Overview
+
+
Pactus Blockchain Version 0.12.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
This version is focused on improving the sync time to make it faster.
+This is achieved by implementing a caching mechanism that executes transactions more quickly and
+improves the calculation of total power (stake) of the blockchain in a more effective way.
+
+
+
+
Download
+
+
This version has been implemented for Testnet-1 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-1, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to run and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ add GetAccountByNumber API to get account by number (#511 )
+
+
+
Fix
+
+
+ caching account and validator in store (#513 )
+ get recent blocks by stamp (#509 )
+ closing the mDNS connection upon stopping the network (#508 )
+ updating linkedmap to use generic (#507 )
+ removing state from cache (#506 )
+ Typo in GUI (#499 )
+ supporting localnet (#492 )
+
+
+
Refactor
+
+
+ update total power calculation based on power change(deltas) (#518 )
+ GetValidators return all validators in state validators map (#512 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/07/01/release-0-13-0.html b/2023/07/01/release-0-13-0.html
new file mode 100644
index 000000000..f24018fa8
--- /dev/null
+++ b/2023/07/01/release-0-13-0.html
@@ -0,0 +1,480 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.13.0 released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.13.0 released
+
01 July 2023
+
Overview
+
+
Pactus Blockchain Version 0.13.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
Users can now restore the default_wallet
during the node initialization.
+If users have a backup of the seed phrase (mnemonic) for the default_wallet
,
+they can now restore it and re-initialize the node.
+
+
+
+
Download
+
+
This version has been implemented for Testnet-1 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-1, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to run and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Fix
+
+
+ implemented restore wallet base on input seed (#553 )
+ measuring total sent and received bytes (#552 )
+ add validate seed and restore wallet (#533 )
+ HTTP : Missing handlers (#549 )
+ gui : update about dialog and menu items in help (#532 )
+
+
+
Refactor
+
+
+ implementing TestSuite (#535 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/07/05/testnet-500-validators.html b/2023/07/05/testnet-500-validators.html
new file mode 100644
index 000000000..342c6b96a
--- /dev/null
+++ b/2023/07/05/testnet-500-validators.html
@@ -0,0 +1,454 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 500 validators joined Testnet | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
500 validators joined Testnet
+
05 July 2023
+
For a Proof of Stake blockchain, validators are important for
+maintaining the network’s integrity and security. They are similar to miners in Proof of Work blockchains like Bitcoin.
+
+
Pactus as a real Proof of Stake blockchain, has achieved a significant milestone.
+More than 500 validators joined the Testnet
+in less than 2 months.
+This accomplishment proves that Pactus is reliable, resilient, and trustworthy. More importantly, it sets new standards
+in the blockchain world. In fact, the Pactus Testnet is even more decentralized than some well-known blockchains.
+
+
+
+
One key reason why Pactus can accommodate more validators is its powerful
+consensus mechanism .
+The consensus mechanism in Pactus eliminates the need for delegation, making it possible for anyone to become a validator.
+Additionally, the user-friendly application ensures that even those new to blockchain can easily contribute to the network.
+
+
What is the next
+
+
To remain competitive in the market, Pactus recognizes the importance of prioritizing user space.
+We aim to ensure that running Pactus is affordable and accessible to anyone, regardless of their technical expertise or
+available resources.
+
+
To achieve this, the Pactus team constantly monitors network, storage, and computational usage, striving to keep them
+at minimal levels.
+By doing so, we enable more individuals to participate in the Pactus blockchain.
+
+
Currently, the Pactus team is working on optimizing and reducing network usage. This effort will lead to reduced costs,
+especially for users who are using home internet connections.
+
+
Furthermore, we are planning to introduce a pruning mode, allowing users to run the Pactus blockchain with significantly
+less storage.
+Although we believe the storage size is already small, our goal is to enable users to
+retain only the most recent blockchain history.
+This approach ensures that the blockchain size remains as compact as possible by disregarding some history of the blockchain.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/07/09/dev-meeting.html b/2023/07/09/dev-meeting.html
new file mode 100644
index 000000000..e0fed543b
--- /dev/null
+++ b/2023/07/09/dev-meeting.html
@@ -0,0 +1,460 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Dev meeting | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Dev meeting
+
09 July 2023
+
Meeting Summary
+
+
The meeting took place on 09 July 2023, at 2:00 PM UTC via Google Meet,
+with team members from different time zones joining to discuss key aspects of the Pactus project.
+
+
Overview to the Network Module
+
+
The meeting began with an overview of the Network module in Pactus.
+This module uses Libp2p as its underlying network protocol.
+
+
The Network module is agnostic about the content of the message and
+handles two types of messages: Gossip messages, which are broadcasted,
+and Stream messages, which are sent directly to a specific peer.
+The team discussed the relay nodes that enable communication for nodes behind NAT.
+Upon receiving a message, the module publishes an event.
+The two types of events are Gossip events and Steam events.
+
+
+
+
The team discussed the issue of Relay connections resetting, and explored solutions such as
+hole punching or using UDP and IPv6.
+
+
Some users in the Testnet reported high network usage.
+The team discussed implementing metrics for LibP2P to monitor network usage effectively.
+The discussion related to this issue can be found here .
+Additionally, the team discussed the customization of network resources,
+including setting limits for inbound and outbound connections.
+
+
Overview to the Sync Module
+
+
Moving on, the Sync module was discussed.
+Unlike the Network module, the Sync module has full knowledge about the messages and packets.
+The module handles a range of message types, which can be found
+here .
+
+
It was suggested that we need to define metrics for each message type.
+There was also a discussion about the need for reducing the messages to optimize the use of network resources.
+
+
The team decided to continue discussing these topics in future meetings.
+They also plan to work on improving the Network and Sync modules based on these discussions.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/08/01/testnet-1-concluded.html b/2023/08/01/testnet-1-concluded.html
new file mode 100644
index 000000000..6104fb256
--- /dev/null
+++ b/2023/08/01/testnet-1-concluded.html
@@ -0,0 +1,489 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Story of Testnet-1 | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Story of Testnet-1
+
01 August 2023
+
What is Testnet?
+
+
Testnet is a testing environment where developers and users can try out the functionality of a blockchain project,
+without putting real assets or data at risk.
+It helps to ensure that the final product is reliable and secure for users to use.
+If you like to read more about the Testnet you can check out our post on
+“What is Testnet? ”.
+
+
Summary
+
+
In May 2023, we launched Testnet-1 .
+The main purpose of this Testnet was to measure block time creation and the responsiveness of the blockchain.
+The development team also focused on evaluating the network’s performance.
+Additionally, the overall performance of the software and the syncing process were closely examined and assessed.
+
+
The committee for Testnet-1 was set to 21 validators,
+and 584 validators joined during the Testnet period.
+More than 600,000 blocks were created, and more than 1 million transactions were processed during this time.
+The size of the blockchain is about 300 megabytes.
+
+
About 300,000 coins were staked during this period, it was almost 50% of the total generated coins.
+It shows that users, even in Testnet, tend to stake their coins.
+
+
+
+
We were able to extract the confirmation time of transactions.
+More than 97% of transactions were confirmed in just one block after submission.
+This indicates that the transaction pool and broadcasting models are working fine.
+
+
+
+
Based on logs from one of the validators, the time for creating a block is about 3 seconds in normal cases.
+More than 97% of blocks are committed in the first rounds.
+
+
+
+
Major updates
+
+
During Testnet-1, we released three versions(Version
+0.11.0 ,
+0.12.0 ,
+0.13.0 ), and the upgrade process was smooth.
+Unfortunately, during Testnet-1, we encountered a consensus failure that may occur at any time in the future.
+The consensus failure was resolved by requiring some validators to re-sync their nodes.
+At this time, the development team decided to stop Testnet-1 and work on improvements that are not backward compatible,
+including:
+
+
+ Improving the consensus protocol
+ Reducing the blockchain size
+ Optimizing the network usage
+
+
+
After stabilizing the changes, we will announce the next Testnet, and hopefully, this will be the pre-launch Testnet.
+
+
+
+
This Testnet was important for us.
+It helped us learn what we need to do to make Pactus work even better.
+Without the community that supports us and dedicates their time and resources to testing and feedback,
+we wouldn’t have been able to progress as we have.
+
+
We thank all of them for their valuable contributions.
+As promised, participants in Testnets will be given priority as validators for the MainNet , and
+will receive bounty PAC coins to set up their validators.
+
+
We are grateful to all those who participated in Testnet-1, and
+we encourage them to join our next Testnet to help us improve Pactus.
+As a community-based project, we rely on the support of our community members, and we value any help we receive.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/08/22/dev-report.html b/2023/08/22/dev-report.html
new file mode 100644
index 000000000..09deb175c
--- /dev/null
+++ b/2023/08/22/dev-report.html
@@ -0,0 +1,454 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Dev report | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Dev report
+
22 August 2023
+
Abstract
+
+
there is several activities in Pactus github this month, here is a clear report and explain of activities.
+
+
+
+
Linters
+
+
one of new changes in Pactus project is new linters we added this month.
+what is linters?
+linters are just a set of rules for the style of source codes, they force developers to write new codes
+in correct, clean and safe way.
+
+
why we use them?
+the reason we are using linters in Pactus and add new ones, is to make the code more safe,
+and also make it easy to work on for new contributors because we are focus on being decentralized even in development.
+
+
Linters we added till now
+
+
TLA+ spec
+
+
one another new change in Pactus is updating TLA+ spec, which is related to consensus,
+as you know we had some problem with consensus in Testnet-1, we fixed the issues and now we are trying to make it more clean.
+
+
link to changes
+
+
if you wish you can learn more about Pactus consensus here.
+
+
Refactoring
+
+
some of previous Pactus dependencies was so old, so we start refactoring them and use new libraries.
+also we used some libraries with higher performance which is make Pactus full node more faster in mainnet.
+
+
one of refactors
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/09/04/introduction-to-pips.html b/2023/09/04/introduction-to-pips.html
new file mode 100644
index 000000000..cd170fa07
--- /dev/null
+++ b/2023/09/04/introduction-to-pips.html
@@ -0,0 +1,462 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Introduction to PIPs | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Introduction to PIPs
+
04 September 2023
+
Introduction to PIPs
+
+
In our commitment to transparency and innovation, we’re excited to introduce a major step in Pactus’s journey:
+the Pactus Improvement Proposals, or PIPs.
+
+
+
+
What are PIPs?
+
+
Pactus Improvement Proposals (PIPs) define standards for the ongoing development and enhancement of the Pactus platform.
+Each PIP has a unique number like PIP-2 ,
+PIP-3 , and so on.
+These proposals provide technical details for suggested modifications or enactments, serving as a guide for development.
+
+
The PIP process
+
+
The PIP process is open, allowing any member of the Pactus community to propose a PIP.
+The author should provide a summary, motivation, and a detailed technical explanation.
+The Pactus Laboratory team will carefully review each PIP.
+Security considerations must be addressed before finalizing a PIP.
+Once finalized, it can be added to the code.
+This process helps avoid unexpected issues during development and maintain consistency and safety.
+
+
The Origins of PIPs
+
+
The Pactus Improvement Proposals (PIPs) was inspired by the
+Ethereum Improvement Proposals (EIPs ) system,
+which had its roots in the Bitcoin Improvement Proposals (BIPs ) and
+Python Enhancement Proposals (PEPs ).
+
+
New Feature Policy
+
+
From now on, all major changes or new features in the Pactus project require a PIP.
+Any implementation must reference its specific PIP.
+Without approval from Pactus Laboratory team, changes won’t be approved and added to the codebase.
+
+
PIPs Repository
+
+
For a complete list of Pactus Improvement Proposals, visit this link .
+The corresponding GitHub repository is accessible here .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/09/24/dev-report-pre-testnet-2.html b/2023/09/24/dev-report-pre-testnet-2.html
new file mode 100644
index 000000000..05b62746c
--- /dev/null
+++ b/2023/09/24/dev-report-pre-testnet-2.html
@@ -0,0 +1,472 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Dev Report pre-testnet2 | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Dev Report pre-testnet2
+
24 September 2023
+
Abstract
+
+
there is several activities in Pactus github in September month, here is a clear report and explain of activities.
+
+
+
+
Implementing PIP 2, 3 and 4
+
+
After starting Pactus Labs and PIPs ,
+we start implementing each accepted PIP one by one to improve Pactus, here is a list of implemented PIPs:
+
+
+
+
Network
+
+
There is some very good change and new features for Pactus network module,
+this list contain a list of important changes in Pactus networking:
+
+
+
+
gRPC and nanomessage services
+
+
We also updated, improved and enhanced gRPC and nanomessage services for better developer experience,
+for third-party and side project developers, here is some changes:
+
+
+
+
Refactoring and other new feature or debugs
+
+
We had some not implemented feature request, not fixed bugs and some issue with new golang version,
+list of this changes:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/09/28/how-sspos-works-in-simple-word.html b/2023/09/28/how-sspos-works-in-simple-word.html
new file mode 100644
index 000000000..219082cd7
--- /dev/null
+++ b/2023/09/28/how-sspos-works-in-simple-word.html
@@ -0,0 +1,506 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ How SSPoS (Solid State Proof of Stake) works in simple word | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
How SSPoS (Solid State Proof of Stake) works in simple word
+
28 September 2023
+
Abstract
+
+
In all Blockchain protocols, there is a concept called a consensus mechanism.
+This mechanism is used to enable nodes to reach an agreement
+on the state of the Blockchain they are
+maintaining, in order to have a synchronized and integrated Blockchain.
+
+
For now, we have a lot of consensus mechanisms in the Blockchain world.
+Pactus Blockchain uses the SSPoS (Solid State Proof of State) which is a new consensus model.
+
+
To explain how it works let’s start with explaining one of the first and simplest
+consensus mechanisms (or if you already know them, just jump into the last part named SSPoS).
+
+
+
+
PoW (Proof of Work)
+
+
In the proof of work model, each node in the network should solve a complex mathematical
+problem that requires lots of computing resources to make a new block.
+
+
In this way, it’s highly unlikely that anyone would be able to change
+past transactions and change Blockchain states such as balances,
+without expending equivalent computational power.
+
+
By doing this we ensure the security and integrity of the Blockchain.
+
+
The concept was adapted from digital tokens by Hal Finney in 2004
+through the idea of “reusable proof of work” using the 160-bit secure hash algorithm 1 (SHA-1).
+
+
Bitcoin uses this consensus model.
+
+
PoS (Proof of Stake)
+
+
On the other hand, PoS or Proof of Stake is another consensus mechanism that instead of miners has validators!
+
+
Validators lock a number of their assets in the Blockchain and they can transfer or use it
+till it is locked which we call staking.
+after each Block is committed one of the validators will be chosen randomly (more amount of stake,
+more chance to be chosen) when a validator is chosen
+it proposes a block and announces it to other nodes to be validated,
+when a supermajority of validators accept the block it’s going to be committed.
+
+
In this system, validators have no incentive to behave maliciously or dishonestly.
+If they do, they risk losing the stake amount.
+
+
More amount of validators in a PoS Blockchain makes it more secure,
+decentralized, and trustable, but it also makes the validation and consensus process slower and more difficult.
+
+
Ethereum uses this model.
+
+
DPoS (Delegated Proof of Stake)
+
+
DPoS or Delegated Proof of Stake, is a variant of the PoS consensus algorithm.
+users entrust their stakes to a small group of “delegates”.
+These delegates are responsible for validating transactions
+and creating blocks. The number of delegates is limited
+to ensure accountability and efficiency in the validation process.
+
+
Some Blockchains like Cardano and Tron use DPoS.
+
+
DPoS tries to solve the issue of PoS which when validators
+increase we have an inefficient validation process. but the main issue with DPoS itself is putting a lot
+of trust in the hands of a small number of delegates,
+which goes against the principle of “don’t trust, verify”.
+
+
SSPoS (Solid State Proof of Stake)
+
+
BUT, HOW ABOUT SSPoS? HOW ABOUT PACTUS?
+
+
In Pactus Blockchain, we have something called Solid State Proof of Stake
+and we try to fix the previous model’s issue, let me explain.
+
+
Pactus uses a dynamic committee of validators with a fixed size of 51,
+but the members of the committee randomly change in each round,
+based on stake amount the chance of being chosen is higher. on the other hand,
+the number of validators out on the committee is unlimited, allowing anyone
+to become a validator by staking coins.
+
+
At each block, validators participate in a sortition algorithm by generating a random number
+between zero and the total staked coins. If the number is less
+than the validator’s stake, they can enter the committee and replace the oldest committee member.
+
+
So, in SSPoS models which are a variant of PoS, we can reach a consensus,
+without using high computation resources, having an inefficient
+validation process by increasing validator numbers,
+and also without breaking the principle of “don’t trust, verify”.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/10/15/release-0-15-0.html b/2023/10/15/release-0-15-0.html
new file mode 100644
index 000000000..84e1dc151
--- /dev/null
+++ b/2023/10/15/release-0-15-0.html
@@ -0,0 +1,546 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.15.0 released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.15.0 released
+
15 October 2023
+
Overview
+
+
Pactus Blockchain Version 0.15.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
+
+
Download
+
+
This version is the bootstrap version for
+Testnet-2 .
+To start using Pactus Blockchain Testnet-1, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to run and configure your node:
+
+
+
+
+ If you participated in Testnet-1, ensure to delete your previous working directory and
+ create a new wallet.
+
+ By default, the working directory is located at "C:\Users\<name>\pactus" on Windows,
+ or "~/pactus" on Unix-compatible platforms.
+
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ gui : adding the splash screen (#743 )
+ add absentees votes to the certificate (#746 )
+ logger : short stringer for loggers (#732 )
+ implementing pip-7 (#731 )
+ implementing pip-11 (#712 )
+ implementing pip-8 (#711 )
+ implementing pip-9 (#706 )
+ new API to get Public key by address (#704 )
+ Adding address field for AccountInfo (#703 )
+ CreateValidatorEvent and CreateAccountEvent for nanomsg (#702 )
+ implementing PIP-2 and PIP-3 (#699 )
+ Adding Hole Punching to network (#697 )
+ write logs into file (#673 )
+ check protocol support before sending connect/disconnect event (#683 )
+ updating genesis for pre-testnet-2 (#679 )
+ adding udp protocol for network (#672 )
+ implementing pip-4 (#671 )
+ Notifee service events (#628 )
+ adding MinimumStake parameter (#574 )
+ adding Sent and Received bytes per message metrics for peers (#618 )
+ add reason to BlockResponse messages (#607 )
+ Add CalcualteFee in GRPC (#601 )
+ add sent bytes and received bytes metrics to peerset plus update grpc (#606 )
+ added metrics of libp2p with supporting prometheus (#588 )
+ Check node address is valid (#565 )
+ add LastSent and LastReceived properties to peer (#569 )
+
+
+
Fix
+
+
+ data race issue on updating certificate (#747 )
+ network : async connection (#744 )
+ adding query vote timer for CP phase (#738 )
+ trim transactions in proposed block (#737 )
+ fixing query votes and proposal issue (#736 )
+ fixing issue when a block has max transactions (#735 )
+ consensus : anti-entroy mechanism for the consensus (#734 )
+ logger : invalid level parsing error (#733 )
+ cache certificate by height (#730 )
+ fixing a crash on consensus (#729 )
+ consensus : prevent double entry in new height (#728 )
+ resolve consensus halt caused by time discrepancy in network. (#727 )
+ unsorted addresses in wallet listing (#721 )
+ send query votes message, if there is no proposal yet (#723 )
+ fixing logger level issue (#722 )
+ fixing syncing stuck issue (#720 )
+ fixing some minor issues on pre-testnet (#719 )
+ supporting go version 1.21 and higher (#692 )
+ ensure log rotation using tests (#693 )
+ restoring at the first block (#691 )
+ swagger doesn’t work with multiple proto files (#687 )
+ fixing wallet-cli issues (#686 )
+ prevent stripping public key for subsidy transactions (#678 )
+ updating the consensus protocol (#668 )
+ aggregating signature for hello message (#640 )
+ error case for logger (#634 )
+ adding committers to the certificate (#623 )
+ updating sortition executor (#608 )
+ update buf and fixing proto generation issue (#600 )
+ adding block hash to peer (#584 )
+ copy to clipboard option for address and pubkey (#583 )
+ public key aggregate (#576 )
+ remove GetValidators rpc method (#573 )
+ missing swagger ui for grpc get account by number (#564 )
+ incorrect handler for validator by number (#563 )
+
+
+
Refactor
+
+
+ sync : refactoring syncing process (#676 )
+ remove payload prefix from payload transaction type (#669 )
+ change Hello message from broadcasting to direct messaging (#665 )
+ committee : using generic list for validators (#667 )
+ rename SanityCheck to BasicCheck (#643 )
+ cli : Migrating from mow.cli to cobra for wallet (#629 )
+ cli : replacing mow.cli with cobra for daemon (#621 )
+ logger : using fast JSON logger (zerolog) (#613 )
+ Using Generics for calculating Min and Max for numeric type #604 (#609 )
+ Updating LRU cache to version 2 #514 (#602 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/10/15/testnet-2-launched.html b/2023/10/15/testnet-2-launched.html
new file mode 100644
index 000000000..b35fb7c76
--- /dev/null
+++ b/2023/10/15/testnet-2-launched.html
@@ -0,0 +1,470 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Testnet-2 launch announcement | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Testnet-2 launch announcement
+
15 October 2023
+
Overview
+
+
Exciting news for the Pactus Community: Testnet-2 is has launched!
+The journey through Testnet-1
+brought success and invaluable experiences, with over 500 validators joining the network.
+Despite its noteworthy achievements, it also faced challenges that led to a tough decision: to pause the Testnet and
+thoroughly address these issues.
+After two months of dedicated work and testing, many problems have been resolved, and
+we feel confident launching the Testnet again.
+Testnet-2 comes with substantial improvements compared to its predecessor by enhancing the core of the Pactus Blockchain.
+Notably, the new consensus mechanism and improved overall network performance.
+
+
At this point, we want to assure the Pactus community that this version of
+the Testnet will not stop until the mainnet launches ,
+and our main focus is on improving its overall performance and launching the Mainnet.
+
+
If you’re new to the concept of Testnet, check out our informative post:
+What is the Testnet?
+
+
Key Focus Areas
+
+
Testnet-2 has important tasks ahead.
+Firstly, we aim to confirm that the new consensus mechanism is both safe and efficient.
+A close eye will be kept on the network’s performance, ensuring it operates as expected.
+For Testnet-2, the committee
+size has been expanded to 51 members.
+Both the committee’s performance and block production will be closely monitored.
+The goal is a blockchain that remains stable and trustworthy,
+even with thousands of validators in the network,
+ensuring it manages its regular duties seamlessly.
+
+
How To Join
+
+
Want to join the Testnet-2? Great! It’s super easy.
+Just download the latest Pactus software and you’re good to go.
+no fancy setups or special gear needed.
+You can run the software straight from your personal computer or laptop.
+Need some test coins? Pop over to our Discord channel and share your validator address there.
+
+
Benefits for Participation
+
+
By taking part in the Testnet, users can familiarize themselves with the Pactus blockchain and
+be well-prepared for the Mainnet launch.
+Testnet participants will also receive higher priority during the Mainnet launch and
+get free coins for initial staking on the Mainnet.
+
+
Your Feedback Matters
+
+
User feedback plays a vital role in the improvement of the Pactus blockchain.
+Share your thoughts and experiences to contribute to the enhancement of future software versions.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/10/29/release-0-16-0.html b/2023/10/29/release-0-16-0.html
new file mode 100644
index 000000000..6dd910922
--- /dev/null
+++ b/2023/10/29/release-0-16-0.html
@@ -0,0 +1,493 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.16.0 Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.16.0 Released
+
29 October 2023
+
Overview
+
+
Pactus Blockchain Version 0.16.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
This version allows users to create new addresses for both validators and accounts.
+The networking module has been improved, and users can now set limits on the number of connections.
+A random crash on the agreement protocol has been fixed in this version.
+
+
+
+
Download
+
+
This version has been implemented for Testnet-2 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-2, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to download, install and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ gui : display network ID (#780 )
+ create new validator address (CLI and GUI) (#757 )
+ add community bootstrap nodes to testnet config (#764 )
+ network : implementing connection manager (#773 )
+ network : adding bootstrapper mode to the network config (#760 )
+
+
+
Fix
+
+
+ network : redefine the network limits (#788 )
+ consensus : not increase the vote-box power on duplicated votes (#785 )
+ network : close connection when unable to get supported protocols (#781 )
+ network : enabling peer exchange for bootstrappers (#779 )
+ network : set connection limit for the resource manager (#775 )
+ sync : peer status set to known on sucessfull handshaking (#774 )
+ consensus : strong termination for the binary agreement (#765 )
+ consensus : not increase the voting power on duplicated binary votes (#762 )
+
+
+
Refactor
+
+
+ network : refactoring peer manager (#787 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/11/12/release-0-17-0.html b/2023/11/12/release-0-17-0.html
new file mode 100644
index 000000000..c17ada713
--- /dev/null
+++ b/2023/11/12/release-0-17-0.html
@@ -0,0 +1,502 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.17.0 Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.17.0 Released
+
12 November 2023
+
Overview
+
+
Pactus Blockchain Version 0.17.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
The Testnet has been upgraded and all validators must update their nodes.
+
+
This version will address major networking issues, reduce network usage, and improve overall performance.
+
+
A new node type, “Node Gossips ”, has been introduced to help broadcast and spread messages across the network.
+Node Gossips support the network by delivering messages to non-gossiping nodes.
+This gossip option is disabled by default but can be enabled in the configuration file.
+If you are running Pactus on a stable and reliable server, we recommend enabling this option for your node.
+Please note that this option is still experimental and subject to potential changes in future releases.
+
+
+
+
Download
+
+
This version has been implemented for Testnet-2 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-2, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to download, install and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
+After updating the node, the configuration file will be overwritten with a new version.
+You need to make modifications to the config file if you had customized it prior to the update.
+
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ network : default configs for bootstrap and relay peers (#812 )
+ introducing node gossip type (#811 )
+ sync : adding remote address to the peer info (#804 )
+ network : adding public address to factory (#795 )
+ network : filter private ips (#793 )
+
+
+
Fix
+
+
+ upgrading Testnet (#814 )
+ sync : prevent opening sessions indefinitely (#813 )
+ execution : fixing mistake on calculating unbonded power (#806 )
+ network : check connection threshold on gater (#803 )
+ network : no transient connection (#799 )
+ not close connection for bootstrap nodes (#792 )
+
+
+
Refactor
+
+
+ sync : refactoring sync process (#807 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2023/12/12/release-0-18-0.html b/2023/12/12/release-0-18-0.html
new file mode 100644
index 000000000..a6ebf76b0
--- /dev/null
+++ b/2023/12/12/release-0-18-0.html
@@ -0,0 +1,503 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.18.0 Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.18.0 Released
+
12 December 2023
+
Overview
+
+
Pactus Blockchain Version 0.18.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
This version has significantly improved the syncing progress.
+The syncing process concurrently requests blocks from 8 different peers and
+actively connects to the most optimal peers for downloading the blockchain.
+
+
Additionally, users can now import private keys into their wallet and securely encrypt them using their wallet password.
+
+
Breaking change
+
+
For Unix-based systems, please note that the working directory for root users has changed from /pactus
to /root/pactus
.
+
+
Download
+
+
This version has been implemented for Testnet-2 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-2, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to download, install and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
+After you update the node, the configuration file will automatically get updated, keeping the old settings.
+If you want to return the configuration file to its default settings,
+just delete the current config file and restart the node.
+
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ implement pip-14 (#841 )
+ sort wallet addresses (#836 )
+ grpc : endpoints for creating raw transaction (#838 )
+ network reachability API (#834 )
+ implement pip-13 (#835 )
+ subscribing to libp2p eventbus (#831 )
+ implement helper methods for wallet address path (#830 )
+ logger : adding rotate log file after days, compress and maxgae for logger config (#822 )
+ enable bandwidth router metric (#819 )
+
+
+
Fix
+
+
+ network : refining the connection limit (#849 )
+ corrected mistake when retrieving the reward address (#848 )
+ config : restore default config when it is deleted (#847 )
+ cmd : changing home directory for root users (#846 )
+ removing BasicCheck for hash (#845 )
+ disabling libp2p ping protocol (#844 )
+ build docker file (#839 )
+ sync : ignore publishing a block if it is received before (#829 )
+ network : subscribing to the Libp2p event bus (#828 )
+ sync : ignore block request if blocks are already inside the cache (#817 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/01/04/release-0-19-0.html b/2024/01/04/release-0-19-0.html
new file mode 100644
index 000000000..4ec0cf530
--- /dev/null
+++ b/2024/01/04/release-0-19-0.html
@@ -0,0 +1,507 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.19.0 Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.19.0 Released
+
04 January 2024
+
Overview
+
+
Pactus Blockchain Version 0.19.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
This version has improved the overall performance of the blockchain by implementing
+PIP-15 .
+PIP-15 suggests to add caching algorithms to the database for the most frequently used items.
+
+
Additionally, this version has enhanced the connectivity of the nodes in the P2P network.
+
+
Availability Score
+
+
This version comes with the implementation of PIP-19 .
+PIP-19 suggests assigning the “Availability Score” to each validator based on their activities in the
+committee .
+Validators with a score less than 0.8 won’t receive the block reward,
+as their proposals will be rejected by other validators.
+The main reason behind this PIP is to prevent users from downgrading
+their node specifications and running Pactus on machines with low resources.
+
+
Breaking change
+
+
The Docker container now contains both daemon and wallet binary files.
+Users who use Docker to run Pacts now need to add the entry point to run Pactus.
+
+
Download
+
+
This version has been implemented for Testnet-2 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-2, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to download, install and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ gRPC : defining network and peers info response’s properly (#898 )
+ implementing pip-19 (#899 )
+ network : disabling GosipSub, only FloodSub (#895 )
+ www : adding change proposer round and value to consensus info votes (#892 )
+ network : adding relay service to dial relay nodes (#887 )
+ implementing pip-15 (#843 )
+ check already running by lock file (#871 )
+
+
+
Fix
+
+
+ store : use cache to check if public key exists (#902 )
+ executor : not rejecting bond transaction for bootstrap validator (#901 )
+ GUI : removing unnecessary tags in transaction confirm dialog (#893 )
+ network : close relay connection for public node (#891 )
+ network : refining GossipSubParams for Gossiper node (#882 )
+ sync : adding sequence number to the bundle (#881 )
+ network : turn off mesh for gossiper node (#880 )
+ consensus : check voteset for CP strong termination (#879 )
+ adding querier to query messages (#878 )
+ execution : fixing issue #869 (#870 )
+ fixing logger issue on rotating log file (#859 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/01/08/mainnet-announcement.html b/2024/01/08/mainnet-announcement.html
new file mode 100644
index 000000000..e63054836
--- /dev/null
+++ b/2024/01/08/mainnet-announcement.html
@@ -0,0 +1,439 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Mainnet announcement | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Mainnet announcement
+
08 January 2024
+
The much-awaited Mainnet Launch of The Pactus Blockchain is finally here!
+On January 24, 2024, at 20:24:00 UTC, the first block, known as the Genesis block ,
+will be minted by four Bootstrap validators.
+After that, every 10 seconds, a new block will be added to the blockchain.
+Each block contains the committed transactions in the network.
+The block finality in the Pactus blockchain is immediate.
+It means that there is no need to wait for block confirmation to ensure a transaction is committed.
+
+
Later, more than 2000 community validators will secure the blockchain and make it decentralized.
+These validators are Testnet participants who helped test Pactus during our testing period.
+The community validators will receive the initial staking coins from a Discord Bot named RoboPac.
+
+
To ensure everything works smoothly on the Mainnet, three different Testnets (
+Testnet0 ,
+Testnet1 , and
+Testnet2 ) have been run.
+
+
The Mainnet will never be stopped or interrupted by the core developers of Pactus,
+and validators should primarily participate in and maintain the security of the blockchain.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/01/11/release-0-20-0.html b/2024/01/11/release-0-20-0.html
new file mode 100644
index 000000000..477513d5a
--- /dev/null
+++ b/2024/01/11/release-0-20-0.html
@@ -0,0 +1,504 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.20.0 Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.20.0 Released
+
11 January 2024
+
Overview
+
+
Pactus Blockchain Version 0.20.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
Validator Stake Management
+
+
The new GUI application enables users to easily Unbond and Withdraw their validator’s stake.
+
+
+
+
Improving Network Connectivity
+
+
Some users have reported that UDP packets are being dropped by their Internet Service Providers.
+Therefore, the UDP protocol is disabled by default.
+Users can still activate the UDP protocol by configuring the settings in the file if necessary.
+
+
Also, the experimental Node Gossip feature has been removed in this version.
+Node gossip could cause some validators to become isolated from the rest of the network.
+
+
Relay service
+
+
This version enables users to turn their node into a relay service.
+A relay service node can help users behind NAT to communicate with each other.
+It is disabled by default and can be enabled inside the config file.
+Please note that it is still in an experimental state.
+
+
Download
+
+
This version has been implemented for Testnet-2 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-2, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to download, install and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ implement relay service (#931 )
+ HTTP : Integrate AddRowDouble and update tests (#926 )
+ network : making listen address private in config (#921 )
+ http : adding AvailabilityScore to http module (#917 )
+ network : adding ‘enable_udp’ config (#918 )
+ network : removing gossip node service (#916 )
+ gRPC : adding AvailabilityScore to gRPC (#910 )
+ GUI : unbond and withdraw transaction dialogs (#908 )
+
+
+
Fix
+
+
+ gRPC : adding missing get raw transaction APIs to gRPC gateway (#925 )
+ network : preventing self dial (#924 )
+ fixing time lag on starting node (#923 )
+ network : fixing network deadlock on linux arm64 (#922 )
+ GUI : updating unbond and withdraw dialogs (#911 )
+ fixing gRPC node info issue (#906 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/01/22/testnet-2-concluded.html b/2024/01/22/testnet-2-concluded.html
new file mode 100644
index 000000000..31b9b4207
--- /dev/null
+++ b/2024/01/22/testnet-2-concluded.html
@@ -0,0 +1,487 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Story of Testnet-2 | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Story of Testnet-2
+
22 January 2024
+
What is Testnet?
+
+
Testnet is a testing environment where developers and users can try out the functionality of a blockchain project,
+without putting real assets or data at risk.
+It helps to ensure that the final product is reliable and secure for users to use.
+If you like to read more about the Testnet you can check out our post on
+“What is Testnet? ”.
+
+
Summary
+
+
In October 2023, we launched Testnet-2 .
+The main purpose of this Testnet was to closely monitor the new consensus mechanism and the stability of the P2P network.
+
+
The committee for Testnet-2 was set to 51 validators,
+and 2084 validators joined during the Testnet period.
+More than 1500 computers and servers joined the network, and we experienced a high volume of data transmission in the network.
+More than 800,000 blocks were created, and about 2 million transactions were processed during this time.
+The size of the blockchain is about 450 megabytes.
+
+
About 500,000 coins were staked during this period, almost 60% of the total generated coins.
+It shows that users, even in Testnet, tend to stake their coins.
+
+
Stability of Consensus
+
+
In Testnet-1, we had one consensus failure that caused us to
+conclude the Testnet-1 .
+During Testnet-2, there were no issues with the consensus mechanism, and
+we had no case of failure during the testing period,
+although the number of validators and nodes significantly increased on Testnet-2 compared to its predecessor.
+It proved that the consensus mechanism is in a stable situation.
+
+
Networking issues
+
+
In Testnet-2, the blockchain stopped twice, and each time it took more than 24 hours to fix the problem.
+In the second blockage, we had no choice but to ask active validators inside the committee to
+update their nodes to overcome the networking issue.
+The development team faced a difficult situation and had to make the proper decision to fix the networking issues.
+On one hand, the networking traffic increased significantly, and on the other hand, we had to
+make sure normal users with limited internet bandwidth could still participate in the consensus mechanism without any problems.
+After examining different scenarios, the networking issues were resolved, and
+no major problems were reported till the end of Testnet.
+
+
Major updates
+
+
During Testnet-2, we introduced several updates, including versions
+0.15.0 ,
+0.16.0 ,
+0.17.0 ,
+0.18.0 ,
+0.19.0 , and
+0.20.0 .
+The update process went smoothly, and with the stability of Version 0.20.0 confirmed,
+the development team shifted its focus to the Mainnet launch.
+
+
+
+
This Testnet was important for us.
+It helped us learn what we need to do to make Pactus work even better.
+Without the community that supports us and dedicates their time and resources to testing and feedback,
+we wouldn’t have been able to progress as we have.
+
+
We thank all of them for their valuable contributions.
+As promised, participants in Testnets will be given priority as validators for the MainNet , and
+will receive bounty PAC coins to set up their validators.
+
+
We are grateful to all those who participated in Testnets, and we encourage them to join the Mainnet.
+As a community-based project, we rely on the support of our community members, and we value any help we receive.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/01/24/mainnet-launched.html b/2024/01/24/mainnet-launched.html
new file mode 100644
index 000000000..73a304a69
--- /dev/null
+++ b/2024/01/24/mainnet-launched.html
@@ -0,0 +1,477 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Mainnet launched 🚀 | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Mainnet launched 🚀
+
24 January 2024
+
Years to Launch
+
+
Pactus Mainnet started creating the first block on 24 January 2024 at 20:24:10 UTC time.
+Pactus Mainnet is the result of years of hard work, research, and innovation.
+It started from one idea:
+
+
A low-cost, truly decentralized blockchain, built by the people for the people,
+where anyone could run and be their own validator.
+
+
We faced many challenges and obstacles along the way, but we never gave up.
+We overcame them with our determination and perseverance.
+We learned from our mistakes and improved our solutions.
+We grew from a small team to a large community.
+We achieved many milestones and breakthroughs. And we did it.
+We created Pactus, the platform that empowers you.
+
+
+
+
We want to thank Pactus community for helping us on the Testnet.
+
+
You have been instrumental in testing and improving the Testnet.
+You have given us your honest feedback and constructive suggestions.
+You have reported and help fixed bugs and errors.
+You have challenged and pushed us to do better.
+You have been our partners and friends in this journey.
+
+
On the Road
+
+
The true journey has just started.
+The Mainnet is not the end, but the beginning.
+The beginning of a new era of blockchain innovation.
+The beginning of a new challenge and opportunity.
+The beginning of a new revolution and evolution!
+
+
We welcome you more than ever.
+We need you to join us in this exciting adventure.
+We need you to support us in this ambitious endeavor.
+We need you to be part of Pactus, the platform that empowers you!
+
+
We Have a Dream
+
+
We have a dream.
+A dream of a world where blockchain technology is not a privilege, but a right for everyone.
+A dream of a world where smart contracts and decentralized applications are fast, secure, and scalable.
+A dream of a world where Pactus is the platform that empowers you.
+
+
This dream is not just ours. It is yours too.
+You share our vision and passion for blockchain innovation.
+You believe in our potential and impact.
+You support our goals and values.
+You are part of our dream.
+
+
And this dream is not just a fantasy. It is a reality.
+A reality that we have created together.
+A reality that we have launched today. A reality that we can explore and enjoy together.
+A reality that we can shape and improve together.
+A reality that we can make better and brighter together!
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/01/31/release-1-0-0.html b/2024/01/31/release-1-0-0.html
new file mode 100644
index 000000000..e67d7aa9d
--- /dev/null
+++ b/2024/01/31/release-1-0-0.html
@@ -0,0 +1,492 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.0.0 (Beijing) Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.0.0 (Beijing) Released
+
31 January 2024
+
Overview
+
+
Pactus Blockchain Version 1.0.0 (Beijing)
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
+
+
Highlights
+
+
Mainnet Official Release v1.0.0 (Beijing)
+
+
The much-anticipated official software release of Pactus v1.0.0 (Beijing) marks a significant milestone
+for our community.
+This impressive mainnet release represents the culmination of extensive development efforts.
+Pactus v1.0.0 (Beijing) offers a pioneering solution for streamlining the validation of Pactus blockchain,
+enhancing security, and providing a user-friendly experience. We’re excited to unveil the official software
+and welcome users to experience the power of Pactus in revolutionizing the future of blockchain. Join us on
+this exciting journey.
+
+
Onboarding validators
+
+
On February 1st, a total of 53,494 PAC coins will be distributed among 1,311 validators who participated in
+Testnet-0 ,
+Testnet-1 , and
+Testnet-2 .
+This marks the beginning of a new chapter in the decentralized world.
+
+
Download
+
+
This version has been implemented for Mainnet
+To start using Pactus Mainnet, download the latest version from the download
+page and join the Mainnet.
+
+
These guides can help you to download, install and configure your node:
+
+
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ implement get validator address for grpc (#975 )
+ add bootstrap.json and load in config on build (#964 )
+ add mainnet config and genesis files (#951 )
+ add Consensus-address to network info (#952 )
+ grpc : sign transaction using wallet client (#945 )
+ pactus gui lock support (#947 )
+ consensus : turning consensus to a zero-config module (#942 )
+
+
+
Fix
+
+
+ localnet wallet issue (#970 )
+ sync : remove ReachabilityStatus from agent info (#956 )
+ daemon : keeping previous behavior for password flag, linting CLI messages (#950 )
+ consensus : detect if the system time is behind the network (#939 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/02/10/release-1-0-1.html b/2024/02/10/release-1-0-1.html
new file mode 100644
index 000000000..7a8c1f01c
--- /dev/null
+++ b/2024/02/10/release-1-0-1.html
@@ -0,0 +1,472 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.0.1 (Beijing) Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.0.1 (Beijing) Released
+
10 February 2024
+
Overview
+
+
Pactus Blockchain Version 1.0.1 (Beijing)
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
This release is named after the city of Beijing and it
+was unanimously selected by Pactus community.
+
+
+
+
Highlights
+
+
This update fixes several issues identified after the release of
+1.0.0 (Beijing) .
+Specifically, it fixes the missed log file on the Windows GUI application and improves the node connectivity.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ gui : add connections and moniker fields to main windows (#1090 )
+
+
+
Fix
+
+
+ network : set dial and accept limit in connection gater (#1089 )
+ gui stderr logger in windows os (#1081 )
+ sync : improve syncing process (#1087 )
+ network : redefine resource limits (#1086 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/02/18/release-1-0-2.html b/2024/02/18/release-1-0-2.html
new file mode 100644
index 000000000..c33d14e1d
--- /dev/null
+++ b/2024/02/18/release-1-0-2.html
@@ -0,0 +1,463 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.0.2 (Istanbul) Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.0.2 (Istanbul) Released
+
18 February 2024
+
Overview
+
+
Pactus Blockchain Version 1.0.2 (Istanbul)
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
This release is named after the city of Istanbul and it
+was unanimously selected by Pactus community.
+
+
+
+
Highlights
+
+
This update fixes a major issue that decreases the number of inbound connections of the nodes over time.
+We highly recommend all users to upgrade to the new version for better connectivity.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Fix
+
+
+ sync : fix concurrent map read-write crash (#1112 )
+ network : remove disconnected peers from peerMgr (#1110 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/03/16/testnet-phoenix-launched.html b/2024/03/16/testnet-phoenix-launched.html
new file mode 100644
index 000000000..059a9d1be
--- /dev/null
+++ b/2024/03/16/testnet-phoenix-launched.html
@@ -0,0 +1,451 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus Permanent Phoenix Testnet Launched | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus Permanent Phoenix Testnet Launched
+
16 March 2024
+
The public and permanent Phoenix Testnet
+for the Pactus blockchain has been launched.
+This Testnet serves as a valuable platform for developers to thoroughly examine their projects,
+providing a safe playground to test and deploy their applications before transitioning to the Mainnet.
+
+
+
+
All parameters within the Testnet mirror those of the Mainnet,
+ensuring a consistent environment for testing and development.
+The genesis block for the Testnet is available
+here .
+
+
Currently, there are four active nodes running the Testnet, accessible at the following addresses:
+
+
+ testnet1.pactus.org
+ testnet2.pactus.org
+ testnet3.pactus.org
+ testnet4.pactus.org
+
+
+
The Testnet’s name, Phoenix, was chosen by the Pactus community from various suggestions.
+It embodies the spirit of rebirth and renewal, highlighting the innovative and testing-focused nature of the network.
+Developers can utilize the RoboPAC as a faucet to receive test coins and
+thoroughly test their applications within this environment.
+It’s important to note that the coins within this Testnet hold no monetary value and are only meant for testing purpose.
+
+
All addresses within the Phoenix network are prefixed with tpc1...
,
+distinguishing them from Mainnet addresses that start with pc1...
’.
+This clear differentiation streamlines development and ensures seamless integration when transitioning to
+the Mainnet environment.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/04/14/release-1-1-0.html b/2024/04/14/release-1-1-0.html
new file mode 100644
index 000000000..31dc251ee
--- /dev/null
+++ b/2024/04/14/release-1-1-0.html
@@ -0,0 +1,556 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.0 (Hanoi) Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.0 (Hanoi) Released
+
14 April 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.0 (Hanoi)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
This release is named after the city of Hanoi ,
+and it was unanimously selected by the Pactus community.
+
+
+
+
Highlights
+
+
This update brings some changes that are not compatible with the earlier version.
+Here are the key points:
+
+
+ Fee calculations are now rounded, and fees can be accepted within a range of one NanaoPAC (see #1174 ).
+ Small bonds for existing validators are now accepted (see #1152 ).
+
+
+
Validators must update their nodes to this version as soon as possible.
+
+
Other major changes in this version include:
+
+
+ The addition of a JSON-RPC endpoint required by third parties like exchanges to connect to Pactus nodes.
+ The implementation of Pactus Shell tools, allowing users to query the node.
+
+
+
Additionally, this version improves the syncing process for new nodes, enhances the GUI, and addresses several issues.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ gRPC : add get address history method (#1206 )
+ grpc : Add GetNewAddress/GetTotalBalance endpoint to gateway (#1197 )
+ GUI : adding total balance to wallet widget (#1194 )
+ Add GetNewAddress gRPC API (#1193 )
+ gRPC : add new API to get the total balance of wallet (#1190 )
+ GUI : showing transaction hash after broadcasting transaction (#1187 )
+ add jsonrpc gateway support (#1183 )
+ config : one reward address in config for all validators (#1178 )
+ GUI : memo field for transactions on GUI wallet (#1182 )
+ implement basic auth for pactus shell (#1177 )
+ grpc : add rust code gen for proto (#1151 )
+ testnet : define permanent Testent genesis (#1173 )
+ add basic auth authentication for securing grpc (#1162 )
+ grpc : calculate fee for create-raw-transaction APIs (#1159 )
+ grpc : add fixed-amount to calc-fee API (#1146 )
+ wallet : adding all account address functions (#1128 )
+ grpc : update swagger API to version 1.1 (#1106 )
+ GUI : adding availability score in wallet (#1118 )
+ logger : adding log target (#1122 )
+ logger : adding file_only option (#1117 )
+ gui : add connections and moniker fields to main windows (#1090 )
+ implementation for PIP-22 (#1067 )
+ generate documentation for proto files (#1064 )
+ pactus-ctl (#946 )
+
+
+
Fix
+
+
+ gRPC : add basic auth option in header (#1217 )
+ gRPC : not return block data on information verbosity (#1212 )
+ wallet : fix wallet conn issue (#1211 )
+ GUI : update total balance on wallet timeout (#1204 )
+ accept small bond to existing validator (#1152 )
+ GUI : make transaction hash selactable (#1196 )
+ close connections with peers that have no supported protocol (#1181 )
+ sync : check the start block request height (#1176 )
+ config : load logger levels in Mainnet config (#1168 )
+ gRPC : pactus swagger not found (#1163 )
+ add error type for invalid configs (#1153 )
+ save Mainnet config with inline comments (#1143 )
+ network : set deadline for streams (#1149 )
+ grpc : fix error 404 on grpc gateway (#1144 )
+ wallet : checking args in history add (#1141 )
+ gRPC : adding sign raw transaction API to gateway (#1116 )
+ sync : fix concurrent map read-write crash (#1112 )
+ network : remove disconnected peers from peerMgr (#1110 )
+ network : set dial and accept limit in connection gater (#1089 )
+ stderr logger in windows os (#1081 )
+ sync : improve syncing process (#1087 )
+ network : redefine resource limits (#1086 )
+
+
+
Refactor
+
+
+ sync : improve syncing process (#1207 )
+ move fee calculation logic to execution package (#1195 )
+ introduce Amount data type for converting PAC units (#1174 )
+ using PAC instead of atomic units for external input/outputs (#1161 )
+ change func() to cancel func type (#1142 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/04/18/release-1-1-1.html b/2024/04/18/release-1-1-1.html
new file mode 100644
index 000000000..9f26a324f
--- /dev/null
+++ b/2024/04/18/release-1-1-1.html
@@ -0,0 +1,491 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.1 (Jakarta) Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.1 (Jakarta) Released
+
18 April 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.1 (Jakarta)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
This release is named after the city of Jakarta ,
+and it was unanimously selected by the Pactus community.
+
+
+
+
Highlights
+
+
This update fixes the issue of zero-bonding
+that identified after the release of 1.1.0 (Hanoi) .
+This fix will be applied at block height 740,000 to ensure a smooth upgrade.
+
+
Additionally, this version rejects connections from nodes version 1.0.2 and earlier.
+
+
Validators must update their nodes to this version as soon as possible.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ reject direct message from non-supporting agents (#1225 )
+
+
+
Fix
+
+
+ prevent zero stake for bond transactions (#1227 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/04/25/release-1-1-3.html b/2024/04/25/release-1-1-3.html
new file mode 100644
index 000000000..8f3e7090c
--- /dev/null
+++ b/2024/04/25/release-1-1-3.html
@@ -0,0 +1,495 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.3 (Kuala Lumpur) Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.3 (Kuala Lumpur) Released
+
25 April 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.3 (Kuala Lumpur)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
This release is named after the city of Kuala Lumpur ,
+and it was unanimously selected by the Pactus community.
+
+
+
+
Highlights
+
+
This version prevents spamming transactions by defining a minimum value per transaction.
+It is not part of the consensus parameters,
+and each node can set its own threshold.
+By default, it is set to 0.1 PAC.
+
+
The version also bans validators that were part of the recent spam attack on the network.
+Their stake will be frozen at block 820,000.
+
+
Validators must update their nodes to this version as soon as possible.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ ban attacker validators (#1235 )
+ txpool : prevent spamming transactions by defining a minimum value (#1233 )
+
+
+
Fix
+
+
+ wallet : saving wallet file after generating new address in gRPC (#1236 )
+ network : disconnect from peers that has no protocol (#1243 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/05/07/release-1-1-4.html b/2024/05/07/release-1-1-4.html
new file mode 100644
index 000000000..d1d66db85
--- /dev/null
+++ b/2024/05/07/release-1-1-4.html
@@ -0,0 +1,484 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.4 (London) Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.4 (London) Released
+
07 May 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.4 (London)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+
Highlights
+
+
This version fixes some issues related to the syncing process and improves the connectivity of the nodes.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Fix
+
+
+ network : set infinite limit for resource manager (#1261 )
+ sync : introduce session manager (#1257 )
+ HTTP : using amount type for fee in transaction details (#1255 )
+
+
+
Refactor
+
+
+ network : refactor peer manager and redefine the min cons (#1259 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/05/30/release-1-1-5.html b/2024/05/30/release-1-1-5.html
new file mode 100644
index 000000000..12885ae45
--- /dev/null
+++ b/2024/05/30/release-1-1-5.html
@@ -0,0 +1,496 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.5 (Cape Town) Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.5 (Cape Town) Released
+
30 May 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.5 (Cape Town)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
Highlights
+
+
Rate limit
+
+
This version applies a rate limit to the messages in the general topics including blocks and transactions.
+This will help nodes to manage the network traffic in times of network congestion or spam attacks.
+
+
Dynamic fee
+
+
To prevent attackers from sending spam transactions, a dynamic fee model is introduced in this patch.
+Each node can define a minimum fee that is defaulted to 0.000001 PAC.
+However, if the transaction pool becomes full, the transaction fee can increase up to 1 PAC.
+
+
To ensure network stability and security,
+it is recommended that all validators upgrade to this version as soon as they can.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ add dynamic fee (#1290 )
+ network : define config for rate limit threshold (#1284 )
+ network : ratelimit gossip for prevent spamming (#1283 )
+
+
+
Fix
+
+
+ change CalculateFee to be backward compatible (#1291 )
+ proposal basic checks deferred to consensus (#1288 )
+ rejected spam tx for same from and to (#1287 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/05/31/release-1-1-6.html b/2024/05/31/release-1-1-6.html
new file mode 100644
index 000000000..71b75ae46
--- /dev/null
+++ b/2024/05/31/release-1-1-6.html
@@ -0,0 +1,483 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.6 (Ottawa) Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.6 (Ottawa) Released
+
31 May 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.6 (Ottawa)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
Highlights
+
+
This version updates the consensus mechanism to move to new rounds once
+a proper and justified “Decided” vote seen by a non-faulty validator.
+This helps ensure that the consensus mechanism stays in sync with the network when the validator restarts.
+
+
In this version, the minimum availability score is set to 0.6666.
+This change will help validators receive rewards even in faulty network conditions,
+ensuring that they can continue to participate in the consensus mechanism.
+
+
To ensure network stability and security,
+it is recommended that all validators upgrade to this version as soon as they can.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Fix
+
+
+ consensus : move to new round on decided vote (#1293 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/06/02/release-1-1-7.html b/2024/06/02/release-1-1-7.html
new file mode 100644
index 000000000..92f668694
--- /dev/null
+++ b/2024/06/02/release-1-1-7.html
@@ -0,0 +1,500 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.7 (Santiago) Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.7 (Santiago) Released
+
02 June 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.7 (Santiago)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
Highlights
+
+
Here are the key improvements in this version:
+
+
+
+ Resolves critical issue in consensus :
+This version addresses a critical issue in consensus that prevents broadcasting expired proposals across the network.
+
+
+ Improved network security :
+The version defines a list of blacklisted IPs and disconnects from them, enhancing network security.
+
+
+ Node compatibility :
+This version only connects to nodes with version 1.1.6 or above, ensuring compatibility with the latest software.
+
+
+
+
To ensure network stability and security,
+it is recommended that all validators upgrade to this version as soon as they can.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ network : add firewall black list ips to banning when connecting to peer (#1298 )
+
+
+
Fix
+
+
+ sync : load black listed addresses from the config (#1301 )
+ consensus : only proposer responds to the query proposal (#1300 )
+ network : set latest support version to 1.1.6 (#1299 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/06/02/release-1-1-8.html b/2024/06/02/release-1-1-8.html
new file mode 100644
index 000000000..281ab6b91
--- /dev/null
+++ b/2024/06/02/release-1-1-8.html
@@ -0,0 +1,494 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.8 (Budapest) Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.8 (Budapest) Released
+
02 June 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.8 (Budapest)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+
Highlights
+
+
This version aims to reduce the consensus message once there is a delay on block creation.
+It also defines a fixed fee of 0.1 PAC for transactions.
+This fixed fee will be replaced by a dynamic fee in future releases,
+which will provide more flexibility and efficiency.
+
+
To ensure network stability and security,
+it is recommended that all validators upgrade to this version as soon as they can.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ firewall : define rate limit for network topics (#1308 )
+
+
+
Fix
+
+
+ set fix fee 0.1 PAC for transactions (#1315 )
+ consensus : add round to query proposal message (#1314 )
+ firewall : block peer base on blacklisted CIDR (#1309 )
+ consensus : reduce ChangeProposerTimeout to 6 seconds (#1311 )
+ sync : define rate limit for query vote and proposal (#1310 )
+ decrease to 100 maximum transaction per block (#1306 )
+ consume message first then ignore on ratelimit (#1304 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/06/20/release-1-2-0.html b/2024/06/20/release-1-2-0.html
new file mode 100644
index 000000000..551b969dd
--- /dev/null
+++ b/2024/06/20/release-1-2-0.html
@@ -0,0 +1,538 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.2.0 (Sydney) Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.2.0 (Sydney) Released
+
20 June 2024
+
Overview
+
+
Pactus Blockchain Version 1.2.0 (Sydney)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+
Highlights
+
+
This version includes some improvements and new features, such as:
+
+
+ Clock offset calculation: Adding clock offset check to
+alert the user if their machine’s time is not synced with the network.
+See PIP-18: Clock Offset Calculation .
+ Minimum fee: The minimum fee is configurable in this version, with the default set to 0.01.
+Each validator can decide the minimum fee of transactions they want to include in the block
+by changing the min_fee
value inside the config file.
+ ip blocker: A new option allows nodes to block certain IPs and disconnect from them.
+ rate limit: Nodes can set rate limits for incoming messages, including transactions.
+ wallet manager: The wallet manager allows users to create and manage wallets using gRPC endpoints.
+
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ config : make minimum fee configurable (#1349 )
+ apply rate limit for the network topics (#1332 )
+ add ipblocker package (#1323 )
+ consensus : fast consensus path implementation (#1253 )
+ version : add alias to node version (#1281 )
+ ntp : add ntp util (#1274 )
+ gRPC : add connection info to node info (#1273 )
+ gRPC : add only_connected parameter to getNetworkInfo API (#1264 )
+ grpc : refactor CreateWallet and add RestoreWallet API endpoint (#1256 )
+ add wallet service (#1241 )
+ ban attacker validators (#1235 )
+ txpool : prevent spamming transactions by defining a minimum value (#1233 )
+ reject direct message from non-supporting agents (#1225 )
+
+
+
Fix
+
+
+ wallet : add public key on get new address (#1350 )
+ sync : add IsBannedAddress check in processing connect event (#1347 )
+ sync : update latest supporting version (#1336 )
+ state : improve node startup by optimizing availability score calculation (#1338 )
+ HTTP : add clock offset and connection info to node-info API (#1334 )
+ grpc : add stacktrace to locate panic (#1333 )
+ consensus : implement PIP-26 (#1331 )
+ grpc : improve grpc server and client (#1330 )
+ util : add more ntp pool (#1328 )
+ jsonrpc : update JSON-RPC Gateway to support headers and improve client registry (#1327 )
+ consensus : improve consensus algorithm (#1329 )
+ txpool : set fix fee of 0.1 PAC for transactions (#1320 )
+ network : add block and transaction topics (#1319 )
+ gRPC : prevent concurrent map iteration and map write (#1279 )
+ api : add swagger schemes (#1270 )
+ network : set infinite limit for resource manager (#1261 )
+ sync : introduce session manager (#1257 )
+ HTTP : using amount type for fee in transaction details (#1255 )
+ network : disconnect from peers that has no protocol (#1243 )
+ wallet : saving wallet file after generating new address in gRPC (#1236 )
+ prevent zero stake for bond transactions (#1227 )
+ set bounding interval for first boudning tx only (#1224 )
+
+
+
Refactor
+
+
+ wallet : set server address on loading wallet (#1348 )
+ removed deprecated LockWallet and UnLockWallet from WalletService (#1343 )
+ crypto : decode data to point on verification (#1339 )
+ network : define connection info in network proto (#1297 )
+ sync : define peer package (#1271 )
+ network : refactor peer manager and redefine the min cons (#1259 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/06/27/release-1-3-0.html b/2024/06/27/release-1-3-0.html
new file mode 100644
index 000000000..003c7b42e
--- /dev/null
+++ b/2024/06/27/release-1-3-0.html
@@ -0,0 +1,496 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.3.0 (Warsaw) Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.3.0 (Warsaw) Released
+
27 June 2024
+
Overview
+
+
Pactus Blockchain Version 1.3.0 (Warsaw)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+
Highlights
+
+
This version fixes an issue that caused some nodes to get stuck for one minutes and
+not receive any new messages during that time.
+
+
Breaking Change : gRPC APIs now convert all binary values to hexadecimal strings.
+
+
+ Attention Exchanges and Third-Party Pactus Blockchain Users:
+
+
+ After upgrading to this version, be aware that binary data, such as hashes and signatures,
+ are now formatted as hexadecimal strings. You must update your code to accommodate this change.
+
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ grpc : get txpool content API (#1364 )
+ network : permanent peer store (#1354 )
+
+
+
Fix
+
+
+ grpc : change bytes type to hex string (#1371 )
+ http : add basic auth middleware for http server (#1372 )
+ network : use goroutines for sending streams (#1365 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2024/08/01/release-1-4-0.html b/2024/08/01/release-1-4-0.html
new file mode 100644
index 000000000..e4b166b8e
--- /dev/null
+++ b/2024/08/01/release-1-4-0.html
@@ -0,0 +1,550 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.4.0 (Amsterdam) Released | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.4.0 (Amsterdam) Released
+
01 August 2024
+
Overview
+
+
Pactus Blockchain Version 1.4.0 (Amsterdam)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+
Highlights
+
+
+
+ Introduction of Pruned Mode:
+Starting with version 1.4.0, Pactus now supports Pruned Mode.
+This feature allows nodes to maintain only the most recent blocks from the last 10 days,
+significantly reducing storage requirements and speeding up the synchronization process.
+
+
+ Node Type Page:
+The startup assistant now features a page for selecting the Node Type,
+enabling users to easily choose between a Full Node and a Pruned Node.
+
+
+ Import Command:
+The import
command now facilitates the download and integration of pruned snapshots,
+making it easier to set up nodes with minimal data.
+
+
+ Prune Command:
+The prune
command allows users to manually initiate the pruning of old blocks and transactions.
+This command helps reduce storage size by removing outdated data.
+
+
+ Enhanced Security Features:
+This release includes updates to the firewall, enhancing the validation of gossip and stream messages,
+which improves the overall security of the network.
+
+
+ New gRPC API Enhancements:
+The gRPC API now includes additional information, such as pruning status and height,
+providing more data for developers and users.
+
+
+ Stability and Performance Improvements:
+Numerous fixes and optimizations have been made across the platform,
+including resolving issues with dynamic library dependencies on macOS,
+addressing syncing issues in Pruned Mode,
+and fixing a bug in the consensus algorithm on query-proposal message.
+
+
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ cmd : add node type page to the startup assistant (#1431 )
+ grpc : adding is-pruned and pruning-height to blockchain info API (#1420 )
+ daemon : add import command to download pruned snapshots (#1424 )
+ util : file downloader with verify sha256 hash (#1422 )
+ sync : define full and prune service (#1412 )
+ pip : implement PIP-23 (#1397 )
+ firewall : check valid gossip and stream messages (#1402 )
+ state : prune block on commit (#1404 )
+ core : pruning client by prune command (#1400 )
+ store : prune block function (#1399 )
+ wallet : add timeout client connection (#1396 )
+ add backup tool script (#1373 )
+
+
+
Fix
+
+
+ consensus : handle query for decided proposal (#1438 )
+ gtk : solve dynamic library dependencies and import path on macOS (#1435 )
+ cmd : prevent sudden crash on download error (#1432 )
+ store : pruning height returns zero when store is not in prune mode (#1430 )
+ grpc : add last-block-time to blockchain-info API (#1428 )
+ grpc : show negative pruning height when is pruned false (#1429 )
+ sync : fix syncing issue on prune mode (#1415 )
+ grpc : return error on invalid arguments for VerifyMessage (#1411 )
+ network : accept messages originating from self (#1408 )
+ change wallet rpc ip to dns address (#1398 )
+ pactus-shell : pactus shell support basic auth (#1384 )
+ gui : support ctrl+c for interrupt gui (#1385 )
+ grpc : add basic auth in swagger header (#1383 )
+
+
+
Refactor
+
+
+ execution : simplify executors and tests (#1425 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/404.html b/404.html
new file mode 100644
index 000000000..09932ac03
--- /dev/null
+++ b/404.html
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Error 404, Page Not Found | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
404
+
+
Page not found :(
+
The requested page could not be found.
+
+
+
+
diff --git a/CNAME b/CNAME
new file mode 100644
index 000000000..4ad1830d6
--- /dev/null
+++ b/CNAME
@@ -0,0 +1 @@
+pactus.org
diff --git a/about/faq/index.html b/about/faq/index.html
new file mode 100644
index 000000000..bfc205773
--- /dev/null
+++ b/about/faq/index.html
@@ -0,0 +1,1447 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ FAQ | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
+
+
+
***
+
+
+
+
+
+
+
+
+ What does "Pactus" mean?
+
+
+
+
+
+
+
+
+ The word "Pactus" is of Latin origin and means "to agree together", "contract", or "transact". In English, the term "Pact" is derived from the Latin word "Pactus".
+
+
+
+
+
+
+
+ Is Pactus a copy of any other blockchain?
+
+
+
+
+
+
+
+
+ No, Pactus is not a copy or a derivative of any other blockchain. It is a new and unique blockchain protocol that has been designed from scratch. The consensus mechanism used in Pactus is unique and specifically created to solve the scalability issue of validators in the Proof of Stake blockchains.
+
+
+
+
+
+
+
+ Did Pactus have an ICO?
+
+
+
+
+
+
+
+
+ No, Pactus didn't have any ICO or Initial Coin Offering.
+
+
+
+
+
+
+
+ Where can I buy Pactus coins?
+
+
+
+
+
+
+
+
+ Pactus does not have any pre-sales coins. The only way to obtain Pactus coins at the moment is by installing the Pactus software and actively participating in block validation. By engaging in the network and contributing to block validation, you will be rewarded with Pactus coins.
+
+
+
+
+
+
+
+ Why was Pactus developed?
+
+
+
+
+
+
+
+
+ Pactus was developed with the goal of scaling blockchain without compromising security and decentralization. To achieve this, Pactus utilizes a unique consensus mechanism that enables the creation of blocks in just 10 seconds. Moreover, Pactus was designed to be more accessible to all users, regardless of their technical expertise or financial resources.
+
+
+
+
+
+
+
+ What problems does Pactus solve that other blockchains don't?
+
+
+
+
+
+
+
+
+ Pactus tries to solve several problems faced by other blockchain networks, including: Scalability: Pactus has a unique consensus mechanism that is specifically designed to address the scalability issue without sacrificing the security and decentralization. Accessibility: Running a node on Pactus is designed to be more accessible to normal users compared to other blockchains. Storage cost: Pactus offers a novel storage solution by allowing users to allocate dedicated storage files, reducing storage costs and simplifying the smart contracts.
+
+
+
+
+
+
+
+ How is Pactus different from Bitcoin?
+
+
+
+
+
+
+
+
+ Pactus and Bitcoin are two different types of blockchain networks. While Bitcoin uses a process called "Proof of Work" to secure its network, Pactus uses a different method called "Proof of Stake". This means that instead of mining, validators are responsible for voting on incoming blocks and must hold a certain amount of the network's coin, known as "stake", as a security deposit to prevent malicious behavior.
+
+
+
+
+
+
+
+ How is Pactus different from Ethereum?
+
+
+
+
+
+
+
+
+ Pactus and Ethereum are both Proof of Stake blockchains, but they differ in their approach to running a validator. Running a validator on Ethereum can be challenging and requires 32 Ethereum coins to stake. In Pactus, there is no fixed amount for staking. Pactus is specifically designed to be more accessible to normal users, and you can run the Pactus blockchain on your personal computer with basic hardware.
+
+
+
+
+
+
+
+
+
+
+
+
+ What are validators?
+
+
+
+
+
+
+
+
+ Validators on Pactus are responsible for processing transactions and creating blocks and, by doing so, helping to secure the network and keep it decentralized. They use their own coins as a stake to ensure the network's security and receive rewards for their contributions.
+
+
+
+
+
+
+
+
+
+ How many validators does Pactus have?
+
+
+
+
+
+
+
+
+ Pactus is a real Proof of Stake blockchain, which means there is no limit on the number of validators in the network. However, a committee of 51 validators is responsible for creating blocks. It's important to note that the committee members are not fixed and they change over time.
+
+
+
+
+
+
+
+
+
+ What are the minimum and maximum amounts I can stake?
+
+
+
+
+
+
+
+
+ In Pactus, there is no minimum limit for staking coins, but the maximum amount you can stake is 1000 coins. If you want to stake more than 1000 coins, you can run a new validator. Running multiple validators keeps the network more decentralized and helps maintain its security and stability.
+
+
+
+
+
+
+
+ What are the minimum hardware requirements?
+
+
+
+
+
+
+
+
+ After thorough testing on multiple machines, we can conclude that the recommended minimum hardware requirements are as follows:
Private Server:
+ CPU's: 1/2 physical core / 1vCPU
+ RAM: 1 GB Ram
+ Storage (SSD): 20 GB NVMe Drive
+ Network: stable internet connection with 1 TBps speed
+
+
Personal Computer or Laptop:
+ CPU's: 2 physical cores / 4vCPU
+ RAM: 4 GB Ram
+ Storage (SSD): 64 GB SSD Drive
+ Network: stable internet connection with over 15 MBps speed
+
+These specifications have been tested and provide an availability score of over 0.9.
+
+
+
+
+
+
+
+
+
+ Why is there a limit for maximum stake?
+
+
+
+
+
+
+
+
+ The limit for the maximum stake per validator enhances decentralization and prevents validators from gaining too much power, which could potentially lead them to control the committee. The maximum staking limit is part of the consensus parameters and can be changed in the future through consensus among the validators.
+
+
+
+
+
+
+
+ Can I run multiple validators on one computer?
+
+
+
+
+
+
+
+
+ The Pactus software allows you to run up to 32 validators on a single node. Running multiple validators may require slightly more memory, but it has no impact on storage, and has a negligible effect on CPU and networking usage. Running multiple validators on a single node enables users to distribute their stake across multiple validators, especially when they want to stake more than the maximum stake per validator. This eliminates the need for additional resources and simplifies node management.
+
+
+
+
+
+
+
+
+
+ How do validators get rewarded?
+
+
+
+
+
+
+
+
+ Once a validator proposes a valid block and it is accepted by the network, the validator receives one coin as a block reward. The reward is an incentive given to validators for their contribution to the network.
+
+
+
+
+
+
+
+
+
+ How much is the block reward in Pactus?
+
+
+
+
+
+
+
+
+ Block reward in Pactus is fixed, and it is always one coin per block. This flat reward scheme helps to ensure simplicity, fairness and better coin distribution.
+
+
+
+
+
+
+
+
+
+
+
+ How many PAC coins are generated per day?
+
+
+
+
+
+
+
+
+ Daily, a total amount of 8640 PAC is generated. This figure translates to 241,000 every 28 days and 3,153,600 per year.
+
+
+
+
+
+
+
+
+
+
+
+
+ How does Pactus blockchain work?
+
+
+
+
+
+
+
+
+ Pactus operates with a committee of validators who are responsible for creating new blocks. The committee consists of 51 validators, however, the members of the committee change randomly over time. Every 10 seconds, a validator in the committee known as the proposer collects all the valid transactions, adds them into a block, and shares it with other validators in the committee. If more than ⅔ of the stakeholders in the committee attest to the proposed block by signing it, the block gets committed and all the transactions inside the block will be executed. This process repeats every 10 seconds.
+
+
+
+
+
+
+
+
+
+
+
+ How can a validator enter to the committee?
+
+
+
+
+
+
+
+
+ To enter the committee in Pactus, validators participate in a sortition process that occurs at each block. In this process, validators generate a provable random number between zero and the total staked coins, and if the number is less than their stake, they can send a transaction known as sortition transaction with the proof of sortition. Once the sortition transaction is included in a block, the validator replaces the oldest committee member.
+
+
+
+
+
+
+
+
+
+ How are block proposers selected in the committee?
+
+
+
+
+
+
+
+
+ The block proposer inside the committee is selected based on the time they entered the committee. This means that the selection process follows a first-come, first-propose order.
+
+
+
+
+
+
+
+
+
+ Can multiple validators enter the committee at once?
+
+
+
+
+
+
+
+
+ The process of sortition in Pactus is random, so it's possible for more than one validator to enter the committee at once, or no validator at all. However, on average, one validator should join the committee at each block.
+
+
+
+
+
+
+
+ Is it possible to have two valid blocks at the same time?
+
+
+
+
+
+
+
+
+ It is not possible to have two valid blocks at the same time in Pactus blockchain. The consensus algorithm in Pactus prevents the possibility of having two block proposers at the same time. This ensures that there will be no fork in the network.
+
+
+
+
+
+
+
+
+
+ How much is the block confirmation in the Pactus Blockchain?
+
+
+
+
+
+
+
+
+ Block confirmation refers to the number of blocks that need to be created before a transaction is considered final and irreversible. In Pactus, block confirmation is immediate, meaning that once a transaction is added to a block, it is considered confirmed and cannot be reversed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ What is the total supply of Pactus coins?
+
+
+
+
+
+
+
+
+ Pactus has a total supply of 42 million coins, and each coin is divided into 1 billion units. $$ 1 \ PAC = 10^9 \ SatoshiPAC $$
+
+
+
+
+
+
+
+ How are Genesis Coins allocated in Pactus?
+
+
+
+
+
+
+
+
+ The initial allocation of Genesis Coins in the Pactus blockchain is distributed as follows:
+ Genesis Coin Allocation for Pactus
+
+
+ Category
+ Coin Allocation
+ Percentage
+
+
+
+
+ Treasury
+ 21 Million coins
+ 50%
+
+
+ Foundation
+ 8.4 Million coins
+ 20%
+
+
+ VC Allocation
+ 6.3 Million coins
+ 15%
+
+
+ Team and Operations
+ 4.2 Million coins
+ 10%
+
+
+ Community
+ 2.1 Million coins
+ 5%
+
+
+
+
+
+
+
+
+
+
+
+
+ What is the Treasury account?
+
+
+
+
+
+
+
+
+ The Treasury account is a special account in Pactus blockchain that holds 21 million coins at the genesis time. It has no key pair associated with it, meaning it cannot be accessed or controlled by anyone. Every time a block is created, one coin from the Treasury account transfers to the proposer account as a block reward.
+
+
+
+
+
+
+
+
+
+ How will the Treasury coins be distributed?
+
+
+
+
+
+
+
+
+ Treasury coins are distributed as block rewards to the block proposers. Every 10 seconds, one coin from the Treasury account transfers to the block proposer account. This process is called "coin minting". As a result, the total number of Pactus coins in circulation gradually increases over time as new blocks are added to the blockchain. Every day, 8,640 coins are minted, resulting in approximately 3 million coins being minted annually by the Treasury account.
+
+
+
+
+
+
+
+
+
+
+
+ How will the Support coins be spent?
+
+
+
+
+
+
+
+
+ The support accounts are designed to provide financial backing for the project. Initially, Pactus Genesis contained only the Treasury accounts without any Backup or Support accounts. The introduction of support coins was a strategic response to the absence of investors, despite the significant progress of the project.
These coins are allocated in several ways:
+ Community :
+ This portion will mainly support the community.
+ As part of this, the participants on Testnets receive initial staking coins to
+ setup their validator and secure the Mainnet.
+
+ Team and Operations :
+ Another portion supports the project team.
+ Team members receive a monthly distribution of these coins, which is estimated to sustain the team for over six years.
+
+ Venture Capital (VC) Allocation :
+ Another portion is set aside for any potential venture capitalists who
+ might show interest in investing in the project in the future.
+
+ Foundation :
+ The foundation coins are reserved for future use, potentially in supporting strong projects that align with Pactus's objectives.
+
+
+Transparency is a key aspect of this allocation, as all movements of these coins are trackable due to the fully transparent nature of the blockchain.
+
+
+
+
+
+
+
+
+
+
+
+
+ What is a Transfer transaction?
+
+
+
+
+
+
+
+
+ A transfer transaction is a type of transaction that allows users to transfer Pactus coin from one account to another.
+
+
+
+
+
+
+
+
+
+ What is a Bond transaction?
+
+
+
+
+
+
+
+
+ A bond transaction is a type of transaction that allows users to become a validator by staking some coins. The amount of stake determines the voting power in the consensus.
+
+
+
+
+
+
+
+
+
+ What is a Sortition transaction?
+
+
+
+
+
+
+
+
+ A sortition transaction is a type of transaction that allows validators to enter the committee.
+
+
+
+
+
+
+
+
+
+ What is an Unbond transaction?
+
+
+
+
+
+
+
+
+ An unbond transaction is a type of transaction that allows users to unbond their validator. Once a validator is unbonded, they can no longer participate in the consensus mechanism.
+
+
+
+
+
+
+
+
+
+ What is a Withdraw transaction?
+
+
+
+
+
+
+
+
+ A withdraw transaction is a type of transaction that allows a validator to withdraw their staked coins from the network.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/about/roadmap/index.html b/about/roadmap/index.html
new file mode 100644
index 000000000..695e544ac
--- /dev/null
+++ b/about/roadmap/index.html
@@ -0,0 +1,735 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Roadmap | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
Roadmap
+
+
+
✅ Completed Task
+
🚧 Ongoing Task
+
⏳ Upcoming Task
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus Onchain Governance
+
+
+
Q1 2026
+
+
+
+
+
+
+
+
+
+ Decentralized Domain Name System
+
+
+
Q4 2025
+
+
+
+
+
+
+
+
+
+ Decentralized Password Manager
+
+
+
Q4 2025
+
+
+
+
+
+
+
+
+
+ Browser Extension
+
+
+
Q3 2025
+
+
+
+
+
+
+
+
+
+ Pactus Virtual Machine (PVM)
+
+
+
Q3 2025
+
+
+
+
+
+
+
+
+
+ Mobile Friendly GUI
+
+
+
Q2 2025
+
+
+
+
+
+
+
+
+
+ Decentralized Storage Platform
+
+
+
Q2 2025
+
+
+
+
+
+
+
+
+
+ Integrating with Wallets applications
+
+
+
Q1 2025
+
+
+
+
+
+
+
+
+
+ Consumptional Fee Model
+
+
+
Q4 2024
+
+
+
+
+
+
+
+
+
+ Nanomsg service
+
+
+
Q3 2024
+
+
+
+
+
+
+
+
+
+ Supporting Secp256k1 Curve
+
+
+
Q3 2024
+
+
+
+
+
+
+
+
+
+ Pruned Node
+
+
+
August 2024
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/about/what-is-pactus/index.html b/about/what-is-pactus/index.html
new file mode 100644
index 000000000..f8bdf49a4
--- /dev/null
+++ b/about/what-is-pactus/index.html
@@ -0,0 +1,449 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ What is Pactus? | Welcome to Pactus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
What is Pactus?
+
+
+
+
+
+
Pactus is a blockchain focused on decentralization
+ Pactus is built on the principle that a fair and transparent system can only be achieved through decentralization. Unlike many other blockchain platforms, Pactus aims to eliminate the potential for centralization and manipulation by removing the need for delegation and miners. This allows anyone to become a part of the ecosystem and ensures that the platform remains truly decentralized.
+
+
+
+
+
+
+
Pactus is a user-friendly blockchain
+ Pactus aims to create a user-friendly blockchain that can be easily used by anyone, not just tech experts. Our protocol is designed to be simple, easy to maintain, and develop. Pactus offers a simple GUI application that makes it easy for users to run a node.
+
+
+
+
+
+
+
Dedicated Decentralized Storage in Pactus
+ In Pactus, users can purchase a dedicated storage file that can be renewed annually, leading to reduced costs for storage and smart contract execution. This unique feature can pave the way for a new protocols in the decentralized platforms.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android-chrome-192x192.png b/android-chrome-192x192.png
new file mode 100644
index 000000000..6b8b563b7
Binary files /dev/null and b/android-chrome-192x192.png differ
diff --git a/android-chrome-256x256.png b/android-chrome-256x256.png
new file mode 100644
index 000000000..5386e869a
Binary files /dev/null and b/android-chrome-256x256.png differ
diff --git a/apple-touch-icon.png b/apple-touch-icon.png
new file mode 100644
index 000000000..6419a53bc
Binary files /dev/null and b/apple-touch-icon.png differ
diff --git a/ar/2022/08/29/dev-meeting.html b/ar/2022/08/29/dev-meeting.html
new file mode 100644
index 000000000..bc7fbc607
--- /dev/null
+++ b/ar/2022/08/29/dev-meeting.html
@@ -0,0 +1,447 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Dev meeting | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Dev meeting
+
29 August 2022
+
Meeting Summary
+
+
The meeting took place on 04 September 2022, at 2:00 PM UTC via Google Meet,
+with team members from different time zones joining to discuss key aspects of the Pactus project.
+
+
NanoMsg instead of ZeroMQ
+
+
During the meeting, Joseph suggested using Nanomsg instead of ZeroMQ because building ZeroMQ is not easy,
+especially in Windows. Additionally, we can use the pure Go implementation of Nanomsg.
+
+
The format of block events was defined as follows:
+
+
<event_id: 1 byte><event_data: variant><height: 4 bytes><seq_num: 4 bytes>
+
+
+
As a consequence of this, smart contracts events can be defined more easily and
+Infura-like services become simple, as we can just replay the events.
+
+
Reviewing a Pull Request
+
+
Nagaraj’s pull request reviewed.
+
+
Renaming project
+
+
The team discussed renaming (rebranding) the project and decided to create an online survey to
+gather suggestions for a new name.
+Everyone is encouraged to participate in the survey and suggest new names for the project.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2022/09/04/dev-meeting.html b/ar/2022/09/04/dev-meeting.html
new file mode 100644
index 000000000..668cd0a20
--- /dev/null
+++ b/ar/2022/09/04/dev-meeting.html
@@ -0,0 +1,556 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Dev meeting | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Dev meeting
+
04 September 2022
+
Meeting Summary
+
+
The meeting took place on 29 August 2022, at 2:00 PM UTC via Google Meet,
+with team members from different time zones joining to discuss key aspects of the Pactus project.
+
+
Project renamed to Pactus
+
+
During the last meeting, the team conducted an online survey to rename the project.
+A total of 31 responses were received, and the following names were suggested:
+
+
+
+
+ Name
+ Votes
+
+
+
+
+ Sirius
+ 11
+
+
+ Pactus
+ 10
+
+
+ Nova
+ 7
+
+
+ Texo
+ 6
+
+
+ Zemus
+ 6
+
+
+ Helios
+ 6
+
+
+ Tutti
+ 5
+
+
+ Haki
+ 5
+
+
+ Aegeus
+ 4
+
+
+ Virgo
+ 4
+
+
+ Zentora
+ 3
+
+
+ Zinova
+ 3
+
+
+ Xerxes
+ 2
+
+
+ Ledgeria
+ 2
+
+
+ Solidus
+ 2
+
+
+ Welt
+ 2
+
+
+ Ventura
+ 2
+
+
+ Zebra
+ 2
+
+
+ Miranet
+ 2
+
+
+ Monetha
+ 2
+
+
+ FutureHub
+ 1
+
+
+ Muonet
+ 1
+
+
+ Mentha
+ 1
+
+
+ Hypatios
+ 0
+
+
+ Chaintopia
+ 0
+
+
+ Sycee
+ 0
+
+
+ Lepus
+ 0
+
+
+
+
+
After reviewing the responses, the team chose “Pactus” as the new name for the project. 🎉
+The project will be moved to “pactus-project/pactus,” and the team plans to announce it on social media.
+
+
Discussion on GUI
+
+
In terms of the GUI, Joseph suggested using Flutter, and the team agreed.
+To interact with the wallet, gRPC APIs will be provided, and the GUI will use these APIs.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2022/09/18/dev-meeting.html b/ar/2022/09/18/dev-meeting.html
new file mode 100644
index 000000000..200fc0dc5
--- /dev/null
+++ b/ar/2022/09/18/dev-meeting.html
@@ -0,0 +1,466 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Dev meeting | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Dev meeting
+
18 September 2022
+
Meeting Summary
+
+
The meeting took place on 18 September 2022, at 2:00 PM UTC via Google Meet,
+with team members from different time zones joining to discuss key aspects of the Pactus project.
+
+
Discussion about Testnet
+
+
The team discussed Testnet and related issues, including IP block issues that were found by Hadi.
+Due to sanctions, some IPs are blocked, so the team will run a support node to assist users inside Iran.
+The GUI application had some issues on Windows, but they were fixed and tested by Hadi.
+
+
Discussion about Website
+
+
The website still has some issues, such as the need to rename the animation to “Pactus” and the lack of a logo.
+The community suggested some logos. Additionally, the roadmap page is missing.
+
+
+
+
The team discussed the status of social media platforms, including:
+
+
+ Discord: 70 members
+ Instagram: 87 followers
+ Telegram: 20 followers
+ Linkedin: 20 followers
+ Twitter: Not yet
+
+
+
The team also decided to announce the project on social media on 29 September.
+
+
Consensus parameters
+
+
The team discussed the current consensus parameters:
+
+
+ Total supply: 21 million coins
+ Reward: 1 coin per block
+ Block time: 10 second
+ Committee size: 21 members
+ Bond interval: one hour
+ Unbond interval: 21 days
+ Fee fraction: 0.0001
+ Min fee: 0.0000001
+ Max fee: 0.01
+ Maximum stake: 12381
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2022/09/20/release-0-9-0.html b/ar/2022/09/20/release-0-9-0.html
new file mode 100644
index 000000000..c58a9ff25
--- /dev/null
+++ b/ar/2022/09/20/release-0-9-0.html
@@ -0,0 +1,436 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.9.0 released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.9.0 released
+
20 September 2022
+
Overview
+
+
Pactus Blockchain Release Version 0.9.0
+is now available for download.
+This release includes a new graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Download
+
+
This version has been implemented for Testnet-0 and is preparing for the upcoming Mainnet launch.
+To get started with the Pactus Blockchain Testnet-0, simply download
+the latest version and run the Pactus software.
+
+
Join the Testnet now and get ready for the future!
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2022/09/24/testnet-0-launched.html b/ar/2022/09/24/testnet-0-launched.html
new file mode 100644
index 000000000..8b82772c3
--- /dev/null
+++ b/ar/2022/09/24/testnet-0-launched.html
@@ -0,0 +1,432 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Testnet-0 launch announcement | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Testnet-0 launch announcement
+
24 September 2022
+
+
+
The Pactus blockchain Testnet-0 is now accessible.
+To participate, simply download the Pactus application version 0.9.0 and
+connect to the Testnet without any special configurations.
+For test coins, please visit our Discord channel and share your validator address.
+
+
By taking part in the Testnet, you can familiarize yourself with the Pactus blockchain and
+get ready for the Mainnet launch.
+Testnet participants will also be given higher priority during the Mainnet launch.
+
+
Please share your feedback with us to help improve the user experience in future versions of the software.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2022/10/30/dev-meeting.html b/ar/2022/10/30/dev-meeting.html
new file mode 100644
index 000000000..94767ee48
--- /dev/null
+++ b/ar/2022/10/30/dev-meeting.html
@@ -0,0 +1,459 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Dev meeting | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Dev meeting
+
30 October 2022
+
Meeting Summary
+
+
The meeting took place on 30 October 2022, at 2:00 PM UTC via Google Meet,
+with team members from different time zones joining to discuss key aspects of the Pactus project.
+
+
In memory of Mahsa Amini
+
+
The meeting started in memory of Mahsa Amini .
+We in the Pactus family stand in solidarity with courageous people who are fighting for equality, equity and freedom in Iran.
+
+
+
+
Launching Block explorer
+
+
The beta version of the block explorer has been launched 🚀 and is now available at
+https://pacviewer.com .
+
+
Nagaraj explained the block explorer and some of the features.
+
+
Project road map
+
+
Project road map was discussed.
+
+
IdeaKita pitch deck
+
+
Ali presented the Pactus pitch deck for the IdeaKita in Malaysia.
+The IdeaKita program, under the Malaysia Digital Economy Corporation (MDEC), is designed to
+support entrepreneurs and startups in Malaysia.
+
+
Latest development progress
+
+
The latest pull requests were reviewed:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2022/11/24/release-0-9-1.html b/ar/2022/11/24/release-0-9-1.html
new file mode 100644
index 000000000..457e2ca2a
--- /dev/null
+++ b/ar/2022/11/24/release-0-9-1.html
@@ -0,0 +1,451 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.9.1 released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.9.1 released
+
24 November 2022
+
Overview
+
+
Pactus Blockchain Release Version 0.9.1
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Download
+
+
This version has been implemented for Testnet-0 and is preparing for the upcoming Mainnet launch.
+To start using the Pactus Blockchain Testnet-0,
+you can download the latest version from download page
+and join the Testnet.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
+ Blocks can be fully decoded when queried in gRPC
+ The HTTP module now uses gRPC module, making node configuration simpler by removing the CapnP module
+ Reducing the blockchain size by saving blocks by number instead of hash
+ The wallet can hold unconfirmed transactions
+ The wallet can use different gRPC servers
+ The GUI displays committee information
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/03/01/what-is-testnet.html b/ar/2023/03/01/what-is-testnet.html
new file mode 100644
index 000000000..c39e7a6d9
--- /dev/null
+++ b/ar/2023/03/01/what-is-testnet.html
@@ -0,0 +1,503 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ What is a Testnet? | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
What is a Testnet?
+
01 March 2023
+
Mainnet vs Testnet?
+
+
If you have ever wondered what Testnet is and how it is different from Mainnet, read this article to the end to find out!
+
+
Mainnet and Testnet are two widely used terminologies in the Blockchain ecosystem;
+so it is important to understand the meaning and differences while working in the industry or
+following announcements of the Blockchain projects like Pactus.
+
+
Here’s a quick explanation:
+Before the actual live version of a Blockchain network that is used for real transactions,
+functions and smart-contracts (which is referred as Mainnet),
+there is a test version of the Blockchain network for testing purposes (which is referred as Testnet).
+In Testnet, a safe environment is provided to help developers experiment and test their applications,
+and make sure that everything functions smoothly in the Mainnet version.
+
+
Testnet
+
+
A Testnet is a simulation of a Blockchain, in which developers can test all the functionalities of
+their Blockchain network without risking their assets and convenience of end-users.
+Using Testnet, any possible error, bug or malfunctions can be fixed before the Mainnet launch.
+Testnet also can be an experimental environment for new features, updates and upgrades.
+So several Testnet networks of the same version or newer version of the Mainnet can be implemented on the roadmap.
+
+
What are use cases of Testnet?
+
+
A secure environment to test development ideas and updates.
+So many features and minor details in Pactus project have been successfully developed so far using the Testnet; such as:
+
+
+ extra details and information on Pactus-GUI;
+ well-functioning Pactus Blockchain explorer to access transactions and block details;
+ Upgrades that led to decreasing the size of the Pactus network
+
+
+
Providing a safe testing ground for resolve scalability and security problems, as well as decentralization issues.
+Pactus network is also a secure and purely decentralized network. However in the last updates during the Testnet,
+developers are now able to decrease the database size by approximately 10% without compromising performance.
+They did it by utilizing block height instead of hash to store blocks within the database. (you can find out more
+here ).
+
+
Testing new versions, patches and features on Testnet. it is vital for enhancing the security, load testing,
+Blockchain migration, integration tests, and etc. This is why you can now use the latest version of Pactus-GUI
+that works like clockwork and is extremely secure.
+
+
Testing the functions of cryptocurrency without disrupting the Mainnet. In the Testnet of Pactus Blockchain,
+you as a user or validator can use all the features to send, receive, bond or unbond your assets in the Pactus-GUI.
+
+
Development and simulation of smart contract features and DApps. Note that many Blockchain projects like Pactus,
+can be used as smart-contract platforms. So the Testnet can be designed in different stages to test and improve
+different applications of the network.
+
+
Please note that after a certain period of time, when developers get satisfied with the functionality and debugging process,
+they launch Mainnet. Mainnet has its own independent genesis blocks;
+so the assets and addresses that users use in Testnet are not valid inside the new Mainnet Blockchain anymore.
+In fact the whole Blockchain network starts working from the scratch and users and validators start to
+work with real coins and transactions instead of the simulated ones. But since Testnet has an important effect
+on the health and improvement of the network, in Pactus Blockchain, we have several advantages
+for the people who join the Testnet.
+
+
Why should you join the Testnet?
+
+
There are different contributors in a Blockchain network;
+Some people are developers and programmers that use the Testnet to contribute, enhance and lead the project to a better future.
+Testnet is actually vital for them to perform their changes and try their innovations and ideas.
+
+
But you might also be an end user; you might want to either be a validator and stake your assets to earn more Pactus coins,
+or you might want to learn how to use the network for future personal applications. Either way,
+you might find it handy to give it a try and be familiar with Pactus-GUI and its different features.
+
+
However, there is another advantage for end users who join the Testnet.
+While using the network, running a node or testing the Pactus-GUI in Testnet period, you are contributing to
+the community to find improvement potentials, that’s why there are more advantages contemplated for the Testnet users;
+Soon our Mainnet will be launched and also Pactus network will be announced and listed in well-known exchanges.
+As an early contributor, you will have the advantage of getting some extra initial coins at the beginning of Mainnet launch.
+So that you can use it to run a validator node and earn more from staking your assets. This airdrop is considered
+for every individual who installs Pactus-GUI and starts a node in Testnet.
+
+
There are other positive conditions you may experience as an early contributor.
+
+
+ Advanced and very responsive support for your issues (we dedicate more time to provide you with solutions)
+ Embracing your suggestions, improvement ideas, needs and information you may require to have a better user experience.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/04/21/testnet-0-concluded.html b/ar/2023/04/21/testnet-0-concluded.html
new file mode 100644
index 000000000..7ed3d4845
--- /dev/null
+++ b/ar/2023/04/21/testnet-0-concluded.html
@@ -0,0 +1,464 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Story of Testnet-0 | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Story of Testnet-0
+
21 April 2023
+
What is Testnet?
+
+
Testnet is a testing environment where developers and users can try out the functionality of a blockchain project,
+without putting real assets or data at risk.
+It helps to ensure that the final product is reliable and secure for users to use.
+If you like to read more about the Testnet you can check out our post on
+“What is Testnet? ”.
+
+
Summary of Testnet-0
+
+
In September 2022, we launched Testnet-0 .
+The purpose of this Testnet was to
+check the consensus protocol ,
+test different transaction types,
+and ensure the stability of the blockchain.
+We also wanted to test the sortition algorithm
+to make sure it works properly.
+
+
The committee
+for the Testnet-0 was set to five validators, and more than 19 validators joined during the Testnet period.
+Over 2 million blocks were created, and more than 3.2 million transactions were processed during this time.
+The size of the blockchain is approximately 1 gigabyte.
+The maximum number of transactions recorded in a single block was 386 . With a block time of 10 seconds,
+we can confirm that Pactus blockchain can support up to 30 transactions per second (TPS),
+which is a reasonable number for TPS.
+
+
At this point, the development team decided to end the Testnet-0 and move on to the next one,
+Testnet-1. We are planning to run the Testnet-1 to prepare for the MainNet launch.
+We will provide updates on our progress and share the details of the new Testnet soon.
+
+
+
+
This Testnet was important for us.
+It helped us learn what we need to do to make Pactus work even better.
+Without the community that supports us and dedicates their time and resources to testing and feedback,
+we wouldn’t have been able to progress as we have.
+
+
We thank all of them for their valuable contributions.
+As promised, participants in Testnets will be given priority as validators for the MainNet , and
+will receive bounty PAC coins to set up their validators.
+
+
We are grateful to all those who participated in Testnet-0, and
+we encourage them to join our next Testnet to help us improve Pactus.
+As a community-based project, we rely on the support of our community members, and we value any help we receive.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/05/08/release-0-10-0.html b/ar/2023/05/08/release-0-10-0.html
new file mode 100644
index 000000000..7d096d29b
--- /dev/null
+++ b/ar/2023/05/08/release-0-10-0.html
@@ -0,0 +1,479 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.10.0 released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.10.0 released
+
08 May 2023
+
Overview
+
+
Pactus Blockchain Version 0.10.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlight
+
+
The main update in this version allows users to set up multiple validators in one node.
+Users can set up to 32 validators in a single node, and each validator can stake up to 1,000 coins.
+
+
+
+
Download
+
+
This version has been implemented for Testnet-1 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-1, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to run and configure your node:
+
+
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ removing address from account (#454 )
+ supporting multiple consensus instances (#450 )
+ adding sortition interval to the parameters (#442 )
+
+
+
Fix
+
+
+ gui : check if the node has an active consensus instance (#458 )
+ Use of a Persistent Merkle tree to enhance performance of calculating the
+state hash ; fully tested in Testnet-0 (#432 )
+ GetBlockchainInfo
API in gRPC now returns the total number of validators and accounts (#439 )
+ wallet path as argument (#455 )
+ adding reward addresses to config (#453 )
+ removing committers from the certificate hash (#444 )
+ prevent data race conditions in committee (#452 )
+ using 2^256 for the vrf denominator (#445 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/05/09/testnet-1-launched.html b/ar/2023/05/09/testnet-1-launched.html
new file mode 100644
index 000000000..077be8384
--- /dev/null
+++ b/ar/2023/05/09/testnet-1-launched.html
@@ -0,0 +1,462 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Testnet-1 launch announcement | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Testnet-1 launch announcement
+
09 May 2023
+
Overview
+
+
The Pactus blockchain Testnet-1 is now available for participation.
+This version simulates the Mainnet environment and evaluate the system’s performance, stability,
+and security in a controlled environment.
+The primary goal of this version of Testnet is to determine the efficient and secure committee size for the Mainnet.
+
+
Key Aspects
+
+
+ Simulating the Mainnet environment
+ Determining the actual block creation time
+ Assessing the staking mechanism and consensus protocol
+ Evaluating network usage under different loads
+ Evaluating the syncing process for new nodes joining the network
+ Ensuring network stability with over 1000 validators
+ Evaluating transaction performance
+ Conducting stress tests
+ Performing security tests, including double spend attacks, Sybil attacks
+(nodes with different identities), and forking resistance
+
+
+
Joining Testnet-1
+
+
To join the Testnet, download Pactus software
+version 0.10.0 and
+connect to Testnet without any special configuration or hardware.
+You can run the software on your personal computer or laptop.
+To acquire test coins, visit the Discord channel and
+provide your validator address.
+
+
Benefits for Participation
+
+
By taking part in the Testnet, users can familiarize themselves with the Pactus blockchain and
+be well-prepared for the Mainnet launch.
+Testnet participants will also receive higher priority during the Mainnet launch and
+get free coins for initial staking on the Mainnet.
+
+
Your Feedback Matters
+
+
User feedback plays a vital role in the improvement of the Pactus blockchain.
+Share your thoughts and experiences to contribute to the enhancement of future software versions.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/05/29/release-0-11-0.html b/ar/2023/05/29/release-0-11-0.html
new file mode 100644
index 000000000..986be7d9c
--- /dev/null
+++ b/ar/2023/05/29/release-0-11-0.html
@@ -0,0 +1,491 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.11.0 released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.11.0 released
+
29 May 2023
+
Overview
+
+
Pactus Blockchain Version 0.11.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
The main update in this version is the fix for the relay
+connection issue.
+A relay is a peer in the network that facilitates the connection between two peers,
+particularly when they are using home internet.
+
+
Another significant update is that sending a Bond transaction
+is now more user-friendly.
+Users no longer need to set the validator public key if they want to bond Test PAC coins to their validators.
+
+
+
+
Download
+
+
This version has been implemented for Testnet-1 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-1, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to run and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Fix
+
+
+ gui : showing the total number of validators (#474 )
+ network : fixing relay connection issue (#475 )
+ consensus : rejecting vote with round numbers exceeding the limit (#466 )
+ increase failed counter when stream got error (#489 )
+ boosting syncing process (#482 )
+ waiting for proposal in pre-commit phase (#486 )
+ retrieving public key from wallet for bond transactions (#485 )
+ restoring config file to the default (#484 )
+ defining ChainType in genesis to detect the type of network (#483 )
+ reducing the default Argon2d to consume less memory (#480 )
+ adding password option to the start commands (#473 )
+
+
+
Refactor
+
+
+ rename send to transfer. (#469 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/06/19/release-0-12-0.html b/ar/2023/06/19/release-0-12-0.html
new file mode 100644
index 000000000..db2d30d85
--- /dev/null
+++ b/ar/2023/06/19/release-0-12-0.html
@@ -0,0 +1,489 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.12.0 released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.12.0 released
+
19 June 2023
+
Overview
+
+
Pactus Blockchain Version 0.12.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
This version is focused on improving the sync time to make it faster.
+This is achieved by implementing a caching mechanism that executes transactions more quickly and
+improves the calculation of total power (stake) of the blockchain in a more effective way.
+
+
+
+
Download
+
+
This version has been implemented for Testnet-1 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-1, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to run and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ add GetAccountByNumber API to get account by number (#511 )
+
+
+
Fix
+
+
+ caching account and validator in store (#513 )
+ get recent blocks by stamp (#509 )
+ closing the mDNS connection upon stopping the network (#508 )
+ updating linkedmap to use generic (#507 )
+ removing state from cache (#506 )
+ Typo in GUI (#499 )
+ supporting localnet (#492 )
+
+
+
Refactor
+
+
+ update total power calculation based on power change(deltas) (#518 )
+ GetValidators return all validators in state validators map (#512 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/07/01/release-0-13-0.html b/ar/2023/07/01/release-0-13-0.html
new file mode 100644
index 000000000..8b3030f3a
--- /dev/null
+++ b/ar/2023/07/01/release-0-13-0.html
@@ -0,0 +1,480 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.13.0 released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.13.0 released
+
01 July 2023
+
Overview
+
+
Pactus Blockchain Version 0.13.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
Users can now restore the default_wallet
during the node initialization.
+If users have a backup of the seed phrase (mnemonic) for the default_wallet
,
+they can now restore it and re-initialize the node.
+
+
+
+
Download
+
+
This version has been implemented for Testnet-1 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-1, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to run and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Fix
+
+
+ implemented restore wallet base on input seed (#553 )
+ measuring total sent and received bytes (#552 )
+ add validate seed and restore wallet (#533 )
+ HTTP : Missing handlers (#549 )
+ gui : update about dialog and menu items in help (#532 )
+
+
+
Refactor
+
+
+ implementing TestSuite (#535 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/07/05/testnet-500-validators.html b/ar/2023/07/05/testnet-500-validators.html
new file mode 100644
index 000000000..10ea311bf
--- /dev/null
+++ b/ar/2023/07/05/testnet-500-validators.html
@@ -0,0 +1,454 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 500 validators joined Testnet | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
500 validators joined Testnet
+
05 July 2023
+
For a Proof of Stake blockchain, validators are important for
+maintaining the network’s integrity and security. They are similar to miners in Proof of Work blockchains like Bitcoin.
+
+
Pactus as a real Proof of Stake blockchain, has achieved a significant milestone.
+More than 500 validators joined the Testnet
+in less than 2 months.
+This accomplishment proves that Pactus is reliable, resilient, and trustworthy. More importantly, it sets new standards
+in the blockchain world. In fact, the Pactus Testnet is even more decentralized than some well-known blockchains.
+
+
+
+
One key reason why Pactus can accommodate more validators is its powerful
+consensus mechanism .
+The consensus mechanism in Pactus eliminates the need for delegation, making it possible for anyone to become a validator.
+Additionally, the user-friendly application ensures that even those new to blockchain can easily contribute to the network.
+
+
What is the next
+
+
To remain competitive in the market, Pactus recognizes the importance of prioritizing user space.
+We aim to ensure that running Pactus is affordable and accessible to anyone, regardless of their technical expertise or
+available resources.
+
+
To achieve this, the Pactus team constantly monitors network, storage, and computational usage, striving to keep them
+at minimal levels.
+By doing so, we enable more individuals to participate in the Pactus blockchain.
+
+
Currently, the Pactus team is working on optimizing and reducing network usage. This effort will lead to reduced costs,
+especially for users who are using home internet connections.
+
+
Furthermore, we are planning to introduce a pruning mode, allowing users to run the Pactus blockchain with significantly
+less storage.
+Although we believe the storage size is already small, our goal is to enable users to
+retain only the most recent blockchain history.
+This approach ensures that the blockchain size remains as compact as possible by disregarding some history of the blockchain.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/07/09/dev-meeting.html b/ar/2023/07/09/dev-meeting.html
new file mode 100644
index 000000000..d788da4d1
--- /dev/null
+++ b/ar/2023/07/09/dev-meeting.html
@@ -0,0 +1,460 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Dev meeting | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Dev meeting
+
09 July 2023
+
Meeting Summary
+
+
The meeting took place on 09 July 2023, at 2:00 PM UTC via Google Meet,
+with team members from different time zones joining to discuss key aspects of the Pactus project.
+
+
Overview to the Network Module
+
+
The meeting began with an overview of the Network module in Pactus.
+This module uses Libp2p as its underlying network protocol.
+
+
The Network module is agnostic about the content of the message and
+handles two types of messages: Gossip messages, which are broadcasted,
+and Stream messages, which are sent directly to a specific peer.
+The team discussed the relay nodes that enable communication for nodes behind NAT.
+Upon receiving a message, the module publishes an event.
+The two types of events are Gossip events and Steam events.
+
+
+
+
The team discussed the issue of Relay connections resetting, and explored solutions such as
+hole punching or using UDP and IPv6.
+
+
Some users in the Testnet reported high network usage.
+The team discussed implementing metrics for LibP2P to monitor network usage effectively.
+The discussion related to this issue can be found here .
+Additionally, the team discussed the customization of network resources,
+including setting limits for inbound and outbound connections.
+
+
Overview to the Sync Module
+
+
Moving on, the Sync module was discussed.
+Unlike the Network module, the Sync module has full knowledge about the messages and packets.
+The module handles a range of message types, which can be found
+here .
+
+
It was suggested that we need to define metrics for each message type.
+There was also a discussion about the need for reducing the messages to optimize the use of network resources.
+
+
The team decided to continue discussing these topics in future meetings.
+They also plan to work on improving the Network and Sync modules based on these discussions.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/08/01/testnet-1-concluded.html b/ar/2023/08/01/testnet-1-concluded.html
new file mode 100644
index 000000000..6b8d1f513
--- /dev/null
+++ b/ar/2023/08/01/testnet-1-concluded.html
@@ -0,0 +1,489 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Story of Testnet-1 | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Story of Testnet-1
+
01 August 2023
+
What is Testnet?
+
+
Testnet is a testing environment where developers and users can try out the functionality of a blockchain project,
+without putting real assets or data at risk.
+It helps to ensure that the final product is reliable and secure for users to use.
+If you like to read more about the Testnet you can check out our post on
+“What is Testnet? ”.
+
+
Summary
+
+
In May 2023, we launched Testnet-1 .
+The main purpose of this Testnet was to measure block time creation and the responsiveness of the blockchain.
+The development team also focused on evaluating the network’s performance.
+Additionally, the overall performance of the software and the syncing process were closely examined and assessed.
+
+
The committee for Testnet-1 was set to 21 validators,
+and 584 validators joined during the Testnet period.
+More than 600,000 blocks were created, and more than 1 million transactions were processed during this time.
+The size of the blockchain is about 300 megabytes.
+
+
About 300,000 coins were staked during this period, it was almost 50% of the total generated coins.
+It shows that users, even in Testnet, tend to stake their coins.
+
+
+
+
We were able to extract the confirmation time of transactions.
+More than 97% of transactions were confirmed in just one block after submission.
+This indicates that the transaction pool and broadcasting models are working fine.
+
+
+
+
Based on logs from one of the validators, the time for creating a block is about 3 seconds in normal cases.
+More than 97% of blocks are committed in the first rounds.
+
+
+
+
Major updates
+
+
During Testnet-1, we released three versions(Version
+0.11.0 ,
+0.12.0 ,
+0.13.0 ), and the upgrade process was smooth.
+Unfortunately, during Testnet-1, we encountered a consensus failure that may occur at any time in the future.
+The consensus failure was resolved by requiring some validators to re-sync their nodes.
+At this time, the development team decided to stop Testnet-1 and work on improvements that are not backward compatible,
+including:
+
+
+ Improving the consensus protocol
+ Reducing the blockchain size
+ Optimizing the network usage
+
+
+
After stabilizing the changes, we will announce the next Testnet, and hopefully, this will be the pre-launch Testnet.
+
+
+
+
This Testnet was important for us.
+It helped us learn what we need to do to make Pactus work even better.
+Without the community that supports us and dedicates their time and resources to testing and feedback,
+we wouldn’t have been able to progress as we have.
+
+
We thank all of them for their valuable contributions.
+As promised, participants in Testnets will be given priority as validators for the MainNet , and
+will receive bounty PAC coins to set up their validators.
+
+
We are grateful to all those who participated in Testnet-1, and
+we encourage them to join our next Testnet to help us improve Pactus.
+As a community-based project, we rely on the support of our community members, and we value any help we receive.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/08/22/dev-report.html b/ar/2023/08/22/dev-report.html
new file mode 100644
index 000000000..8c5fc4f94
--- /dev/null
+++ b/ar/2023/08/22/dev-report.html
@@ -0,0 +1,454 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Dev report | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Dev report
+
22 August 2023
+
Abstract
+
+
there is several activities in Pactus github this month, here is a clear report and explain of activities.
+
+
+
+
Linters
+
+
one of new changes in Pactus project is new linters we added this month.
+what is linters?
+linters are just a set of rules for the style of source codes, they force developers to write new codes
+in correct, clean and safe way.
+
+
why we use them?
+the reason we are using linters in Pactus and add new ones, is to make the code more safe,
+and also make it easy to work on for new contributors because we are focus on being decentralized even in development.
+
+
Linters we added till now
+
+
TLA+ spec
+
+
one another new change in Pactus is updating TLA+ spec, which is related to consensus,
+as you know we had some problem with consensus in Testnet-1, we fixed the issues and now we are trying to make it more clean.
+
+
link to changes
+
+
if you wish you can learn more about Pactus consensus here.
+
+
Refactoring
+
+
some of previous Pactus dependencies was so old, so we start refactoring them and use new libraries.
+also we used some libraries with higher performance which is make Pactus full node more faster in mainnet.
+
+
one of refactors
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/09/04/introduction-to-pips.html b/ar/2023/09/04/introduction-to-pips.html
new file mode 100644
index 000000000..5a09c695e
--- /dev/null
+++ b/ar/2023/09/04/introduction-to-pips.html
@@ -0,0 +1,462 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Introduction to PIPs | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Introduction to PIPs
+
04 September 2023
+
Introduction to PIPs
+
+
In our commitment to transparency and innovation, we’re excited to introduce a major step in Pactus’s journey:
+the Pactus Improvement Proposals, or PIPs.
+
+
+
+
What are PIPs?
+
+
Pactus Improvement Proposals (PIPs) define standards for the ongoing development and enhancement of the Pactus platform.
+Each PIP has a unique number like PIP-2 ,
+PIP-3 , and so on.
+These proposals provide technical details for suggested modifications or enactments, serving as a guide for development.
+
+
The PIP process
+
+
The PIP process is open, allowing any member of the Pactus community to propose a PIP.
+The author should provide a summary, motivation, and a detailed technical explanation.
+The Pactus Laboratory team will carefully review each PIP.
+Security considerations must be addressed before finalizing a PIP.
+Once finalized, it can be added to the code.
+This process helps avoid unexpected issues during development and maintain consistency and safety.
+
+
The Origins of PIPs
+
+
The Pactus Improvement Proposals (PIPs) was inspired by the
+Ethereum Improvement Proposals (EIPs ) system,
+which had its roots in the Bitcoin Improvement Proposals (BIPs ) and
+Python Enhancement Proposals (PEPs ).
+
+
New Feature Policy
+
+
From now on, all major changes or new features in the Pactus project require a PIP.
+Any implementation must reference its specific PIP.
+Without approval from Pactus Laboratory team, changes won’t be approved and added to the codebase.
+
+
PIPs Repository
+
+
For a complete list of Pactus Improvement Proposals, visit this link .
+The corresponding GitHub repository is accessible here .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/09/24/dev-report-pre-testnet-2.html b/ar/2023/09/24/dev-report-pre-testnet-2.html
new file mode 100644
index 000000000..41e4f993f
--- /dev/null
+++ b/ar/2023/09/24/dev-report-pre-testnet-2.html
@@ -0,0 +1,472 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Dev Report pre-testnet2 | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Dev Report pre-testnet2
+
24 September 2023
+
Abstract
+
+
there is several activities in Pactus github in September month, here is a clear report and explain of activities.
+
+
+
+
Implementing PIP 2, 3 and 4
+
+
After starting Pactus Labs and PIPs ,
+we start implementing each accepted PIP one by one to improve Pactus, here is a list of implemented PIPs:
+
+
+
+
Network
+
+
There is some very good change and new features for Pactus network module,
+this list contain a list of important changes in Pactus networking:
+
+
+
+
gRPC and nanomessage services
+
+
We also updated, improved and enhanced gRPC and nanomessage services for better developer experience,
+for third-party and side project developers, here is some changes:
+
+
+
+
Refactoring and other new feature or debugs
+
+
We had some not implemented feature request, not fixed bugs and some issue with new golang version,
+list of this changes:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/09/28/how-sspos-works-in-simple-word.html b/ar/2023/09/28/how-sspos-works-in-simple-word.html
new file mode 100644
index 000000000..fe1c792eb
--- /dev/null
+++ b/ar/2023/09/28/how-sspos-works-in-simple-word.html
@@ -0,0 +1,506 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ How SSPoS (Solid State Proof of Stake) works in simple word | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
How SSPoS (Solid State Proof of Stake) works in simple word
+
28 September 2023
+
Abstract
+
+
In all Blockchain protocols, there is a concept called a consensus mechanism.
+This mechanism is used to enable nodes to reach an agreement
+on the state of the Blockchain they are
+maintaining, in order to have a synchronized and integrated Blockchain.
+
+
For now, we have a lot of consensus mechanisms in the Blockchain world.
+Pactus Blockchain uses the SSPoS (Solid State Proof of State) which is a new consensus model.
+
+
To explain how it works let’s start with explaining one of the first and simplest
+consensus mechanisms (or if you already know them, just jump into the last part named SSPoS).
+
+
+
+
PoW (Proof of Work)
+
+
In the proof of work model, each node in the network should solve a complex mathematical
+problem that requires lots of computing resources to make a new block.
+
+
In this way, it’s highly unlikely that anyone would be able to change
+past transactions and change Blockchain states such as balances,
+without expending equivalent computational power.
+
+
By doing this we ensure the security and integrity of the Blockchain.
+
+
The concept was adapted from digital tokens by Hal Finney in 2004
+through the idea of “reusable proof of work” using the 160-bit secure hash algorithm 1 (SHA-1).
+
+
Bitcoin uses this consensus model.
+
+
PoS (Proof of Stake)
+
+
On the other hand, PoS or Proof of Stake is another consensus mechanism that instead of miners has validators!
+
+
Validators lock a number of their assets in the Blockchain and they can transfer or use it
+till it is locked which we call staking.
+after each Block is committed one of the validators will be chosen randomly (more amount of stake,
+more chance to be chosen) when a validator is chosen
+it proposes a block and announces it to other nodes to be validated,
+when a supermajority of validators accept the block it’s going to be committed.
+
+
In this system, validators have no incentive to behave maliciously or dishonestly.
+If they do, they risk losing the stake amount.
+
+
More amount of validators in a PoS Blockchain makes it more secure,
+decentralized, and trustable, but it also makes the validation and consensus process slower and more difficult.
+
+
Ethereum uses this model.
+
+
DPoS (Delegated Proof of Stake)
+
+
DPoS or Delegated Proof of Stake, is a variant of the PoS consensus algorithm.
+users entrust their stakes to a small group of “delegates”.
+These delegates are responsible for validating transactions
+and creating blocks. The number of delegates is limited
+to ensure accountability and efficiency in the validation process.
+
+
Some Blockchains like Cardano and Tron use DPoS.
+
+
DPoS tries to solve the issue of PoS which when validators
+increase we have an inefficient validation process. but the main issue with DPoS itself is putting a lot
+of trust in the hands of a small number of delegates,
+which goes against the principle of “don’t trust, verify”.
+
+
SSPoS (Solid State Proof of Stake)
+
+
BUT, HOW ABOUT SSPoS? HOW ABOUT PACTUS?
+
+
In Pactus Blockchain, we have something called Solid State Proof of Stake
+and we try to fix the previous model’s issue, let me explain.
+
+
Pactus uses a dynamic committee of validators with a fixed size of 51,
+but the members of the committee randomly change in each round,
+based on stake amount the chance of being chosen is higher. on the other hand,
+the number of validators out on the committee is unlimited, allowing anyone
+to become a validator by staking coins.
+
+
At each block, validators participate in a sortition algorithm by generating a random number
+between zero and the total staked coins. If the number is less
+than the validator’s stake, they can enter the committee and replace the oldest committee member.
+
+
So, in SSPoS models which are a variant of PoS, we can reach a consensus,
+without using high computation resources, having an inefficient
+validation process by increasing validator numbers,
+and also without breaking the principle of “don’t trust, verify”.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/10/15/release-0-15-0.html b/ar/2023/10/15/release-0-15-0.html
new file mode 100644
index 000000000..29ca85dd0
--- /dev/null
+++ b/ar/2023/10/15/release-0-15-0.html
@@ -0,0 +1,546 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.15.0 released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.15.0 released
+
15 October 2023
+
Overview
+
+
Pactus Blockchain Version 0.15.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
+
+
Download
+
+
This version is the bootstrap version for
+Testnet-2 .
+To start using Pactus Blockchain Testnet-1, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to run and configure your node:
+
+
+
+
+ If you participated in Testnet-1, ensure to delete your previous working directory and
+ create a new wallet.
+
+ By default, the working directory is located at "C:\Users\<name>\pactus" on Windows,
+ or "~/pactus" on Unix-compatible platforms.
+
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ gui : adding the splash screen (#743 )
+ add absentees votes to the certificate (#746 )
+ logger : short stringer for loggers (#732 )
+ implementing pip-7 (#731 )
+ implementing pip-11 (#712 )
+ implementing pip-8 (#711 )
+ implementing pip-9 (#706 )
+ new API to get Public key by address (#704 )
+ Adding address field for AccountInfo (#703 )
+ CreateValidatorEvent and CreateAccountEvent for nanomsg (#702 )
+ implementing PIP-2 and PIP-3 (#699 )
+ Adding Hole Punching to network (#697 )
+ write logs into file (#673 )
+ check protocol support before sending connect/disconnect event (#683 )
+ updating genesis for pre-testnet-2 (#679 )
+ adding udp protocol for network (#672 )
+ implementing pip-4 (#671 )
+ Notifee service events (#628 )
+ adding MinimumStake parameter (#574 )
+ adding Sent and Received bytes per message metrics for peers (#618 )
+ add reason to BlockResponse messages (#607 )
+ Add CalcualteFee in GRPC (#601 )
+ add sent bytes and received bytes metrics to peerset plus update grpc (#606 )
+ added metrics of libp2p with supporting prometheus (#588 )
+ Check node address is valid (#565 )
+ add LastSent and LastReceived properties to peer (#569 )
+
+
+
Fix
+
+
+ data race issue on updating certificate (#747 )
+ network : async connection (#744 )
+ adding query vote timer for CP phase (#738 )
+ trim transactions in proposed block (#737 )
+ fixing query votes and proposal issue (#736 )
+ fixing issue when a block has max transactions (#735 )
+ consensus : anti-entroy mechanism for the consensus (#734 )
+ logger : invalid level parsing error (#733 )
+ cache certificate by height (#730 )
+ fixing a crash on consensus (#729 )
+ consensus : prevent double entry in new height (#728 )
+ resolve consensus halt caused by time discrepancy in network. (#727 )
+ unsorted addresses in wallet listing (#721 )
+ send query votes message, if there is no proposal yet (#723 )
+ fixing logger level issue (#722 )
+ fixing syncing stuck issue (#720 )
+ fixing some minor issues on pre-testnet (#719 )
+ supporting go version 1.21 and higher (#692 )
+ ensure log rotation using tests (#693 )
+ restoring at the first block (#691 )
+ swagger doesn’t work with multiple proto files (#687 )
+ fixing wallet-cli issues (#686 )
+ prevent stripping public key for subsidy transactions (#678 )
+ updating the consensus protocol (#668 )
+ aggregating signature for hello message (#640 )
+ error case for logger (#634 )
+ adding committers to the certificate (#623 )
+ updating sortition executor (#608 )
+ update buf and fixing proto generation issue (#600 )
+ adding block hash to peer (#584 )
+ copy to clipboard option for address and pubkey (#583 )
+ public key aggregate (#576 )
+ remove GetValidators rpc method (#573 )
+ missing swagger ui for grpc get account by number (#564 )
+ incorrect handler for validator by number (#563 )
+
+
+
Refactor
+
+
+ sync : refactoring syncing process (#676 )
+ remove payload prefix from payload transaction type (#669 )
+ change Hello message from broadcasting to direct messaging (#665 )
+ committee : using generic list for validators (#667 )
+ rename SanityCheck to BasicCheck (#643 )
+ cli : Migrating from mow.cli to cobra for wallet (#629 )
+ cli : replacing mow.cli with cobra for daemon (#621 )
+ logger : using fast JSON logger (zerolog) (#613 )
+ Using Generics for calculating Min and Max for numeric type #604 (#609 )
+ Updating LRU cache to version 2 #514 (#602 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/10/15/testnet-2-launched.html b/ar/2023/10/15/testnet-2-launched.html
new file mode 100644
index 000000000..bf6b5b1ab
--- /dev/null
+++ b/ar/2023/10/15/testnet-2-launched.html
@@ -0,0 +1,470 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Testnet-2 launch announcement | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Testnet-2 launch announcement
+
15 October 2023
+
Overview
+
+
Exciting news for the Pactus Community: Testnet-2 is has launched!
+The journey through Testnet-1
+brought success and invaluable experiences, with over 500 validators joining the network.
+Despite its noteworthy achievements, it also faced challenges that led to a tough decision: to pause the Testnet and
+thoroughly address these issues.
+After two months of dedicated work and testing, many problems have been resolved, and
+we feel confident launching the Testnet again.
+Testnet-2 comes with substantial improvements compared to its predecessor by enhancing the core of the Pactus Blockchain.
+Notably, the new consensus mechanism and improved overall network performance.
+
+
At this point, we want to assure the Pactus community that this version of
+the Testnet will not stop until the mainnet launches ,
+and our main focus is on improving its overall performance and launching the Mainnet.
+
+
If you’re new to the concept of Testnet, check out our informative post:
+What is the Testnet?
+
+
Key Focus Areas
+
+
Testnet-2 has important tasks ahead.
+Firstly, we aim to confirm that the new consensus mechanism is both safe and efficient.
+A close eye will be kept on the network’s performance, ensuring it operates as expected.
+For Testnet-2, the committee
+size has been expanded to 51 members.
+Both the committee’s performance and block production will be closely monitored.
+The goal is a blockchain that remains stable and trustworthy,
+even with thousands of validators in the network,
+ensuring it manages its regular duties seamlessly.
+
+
How To Join
+
+
Want to join the Testnet-2? Great! It’s super easy.
+Just download the latest Pactus software and you’re good to go.
+no fancy setups or special gear needed.
+You can run the software straight from your personal computer or laptop.
+Need some test coins? Pop over to our Discord channel and share your validator address there.
+
+
Benefits for Participation
+
+
By taking part in the Testnet, users can familiarize themselves with the Pactus blockchain and
+be well-prepared for the Mainnet launch.
+Testnet participants will also receive higher priority during the Mainnet launch and
+get free coins for initial staking on the Mainnet.
+
+
Your Feedback Matters
+
+
User feedback plays a vital role in the improvement of the Pactus blockchain.
+Share your thoughts and experiences to contribute to the enhancement of future software versions.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/10/29/release-0-16-0.html b/ar/2023/10/29/release-0-16-0.html
new file mode 100644
index 000000000..ea6c2a842
--- /dev/null
+++ b/ar/2023/10/29/release-0-16-0.html
@@ -0,0 +1,493 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.16.0 Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.16.0 Released
+
29 October 2023
+
Overview
+
+
Pactus Blockchain Version 0.16.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
This version allows users to create new addresses for both validators and accounts.
+The networking module has been improved, and users can now set limits on the number of connections.
+A random crash on the agreement protocol has been fixed in this version.
+
+
+
+
Download
+
+
This version has been implemented for Testnet-2 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-2, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to download, install and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ gui : display network ID (#780 )
+ create new validator address (CLI and GUI) (#757 )
+ add community bootstrap nodes to testnet config (#764 )
+ network : implementing connection manager (#773 )
+ network : adding bootstrapper mode to the network config (#760 )
+
+
+
Fix
+
+
+ network : redefine the network limits (#788 )
+ consensus : not increase the vote-box power on duplicated votes (#785 )
+ network : close connection when unable to get supported protocols (#781 )
+ network : enabling peer exchange for bootstrappers (#779 )
+ network : set connection limit for the resource manager (#775 )
+ sync : peer status set to known on sucessfull handshaking (#774 )
+ consensus : strong termination for the binary agreement (#765 )
+ consensus : not increase the voting power on duplicated binary votes (#762 )
+
+
+
Refactor
+
+
+ network : refactoring peer manager (#787 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/11/12/release-0-17-0.html b/ar/2023/11/12/release-0-17-0.html
new file mode 100644
index 000000000..f74834621
--- /dev/null
+++ b/ar/2023/11/12/release-0-17-0.html
@@ -0,0 +1,502 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.17.0 Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.17.0 Released
+
12 November 2023
+
Overview
+
+
Pactus Blockchain Version 0.17.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
The Testnet has been upgraded and all validators must update their nodes.
+
+
This version will address major networking issues, reduce network usage, and improve overall performance.
+
+
A new node type, “Node Gossips ”, has been introduced to help broadcast and spread messages across the network.
+Node Gossips support the network by delivering messages to non-gossiping nodes.
+This gossip option is disabled by default but can be enabled in the configuration file.
+If you are running Pactus on a stable and reliable server, we recommend enabling this option for your node.
+Please note that this option is still experimental and subject to potential changes in future releases.
+
+
+
+
Download
+
+
This version has been implemented for Testnet-2 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-2, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to download, install and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
+After updating the node, the configuration file will be overwritten with a new version.
+You need to make modifications to the config file if you had customized it prior to the update.
+
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ network : default configs for bootstrap and relay peers (#812 )
+ introducing node gossip type (#811 )
+ sync : adding remote address to the peer info (#804 )
+ network : adding public address to factory (#795 )
+ network : filter private ips (#793 )
+
+
+
Fix
+
+
+ upgrading Testnet (#814 )
+ sync : prevent opening sessions indefinitely (#813 )
+ execution : fixing mistake on calculating unbonded power (#806 )
+ network : check connection threshold on gater (#803 )
+ network : no transient connection (#799 )
+ not close connection for bootstrap nodes (#792 )
+
+
+
Refactor
+
+
+ sync : refactoring sync process (#807 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2023/12/12/release-0-18-0.html b/ar/2023/12/12/release-0-18-0.html
new file mode 100644
index 000000000..ea6698ca2
--- /dev/null
+++ b/ar/2023/12/12/release-0-18-0.html
@@ -0,0 +1,503 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.18.0 Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.18.0 Released
+
12 December 2023
+
Overview
+
+
Pactus Blockchain Version 0.18.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
This version has significantly improved the syncing progress.
+The syncing process concurrently requests blocks from 8 different peers and
+actively connects to the most optimal peers for downloading the blockchain.
+
+
Additionally, users can now import private keys into their wallet and securely encrypt them using their wallet password.
+
+
Breaking change
+
+
For Unix-based systems, please note that the working directory for root users has changed from /pactus
to /root/pactus
.
+
+
Download
+
+
This version has been implemented for Testnet-2 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-2, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to download, install and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
+After you update the node, the configuration file will automatically get updated, keeping the old settings.
+If you want to return the configuration file to its default settings,
+just delete the current config file and restart the node.
+
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ implement pip-14 (#841 )
+ sort wallet addresses (#836 )
+ grpc : endpoints for creating raw transaction (#838 )
+ network reachability API (#834 )
+ implement pip-13 (#835 )
+ subscribing to libp2p eventbus (#831 )
+ implement helper methods for wallet address path (#830 )
+ logger : adding rotate log file after days, compress and maxgae for logger config (#822 )
+ enable bandwidth router metric (#819 )
+
+
+
Fix
+
+
+ network : refining the connection limit (#849 )
+ corrected mistake when retrieving the reward address (#848 )
+ config : restore default config when it is deleted (#847 )
+ cmd : changing home directory for root users (#846 )
+ removing BasicCheck for hash (#845 )
+ disabling libp2p ping protocol (#844 )
+ build docker file (#839 )
+ sync : ignore publishing a block if it is received before (#829 )
+ network : subscribing to the Libp2p event bus (#828 )
+ sync : ignore block request if blocks are already inside the cache (#817 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/01/04/release-0-19-0.html b/ar/2024/01/04/release-0-19-0.html
new file mode 100644
index 000000000..14c1a792c
--- /dev/null
+++ b/ar/2024/01/04/release-0-19-0.html
@@ -0,0 +1,507 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.19.0 Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.19.0 Released
+
04 January 2024
+
Overview
+
+
Pactus Blockchain Version 0.19.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
This version has improved the overall performance of the blockchain by implementing
+PIP-15 .
+PIP-15 suggests to add caching algorithms to the database for the most frequently used items.
+
+
Additionally, this version has enhanced the connectivity of the nodes in the P2P network.
+
+
Availability Score
+
+
This version comes with the implementation of PIP-19 .
+PIP-19 suggests assigning the “Availability Score” to each validator based on their activities in the
+committee .
+Validators with a score less than 0.8 won’t receive the block reward,
+as their proposals will be rejected by other validators.
+The main reason behind this PIP is to prevent users from downgrading
+their node specifications and running Pactus on machines with low resources.
+
+
Breaking change
+
+
The Docker container now contains both daemon and wallet binary files.
+Users who use Docker to run Pacts now need to add the entry point to run Pactus.
+
+
Download
+
+
This version has been implemented for Testnet-2 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-2, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to download, install and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ gRPC : defining network and peers info response’s properly (#898 )
+ implementing pip-19 (#899 )
+ network : disabling GosipSub, only FloodSub (#895 )
+ www : adding change proposer round and value to consensus info votes (#892 )
+ network : adding relay service to dial relay nodes (#887 )
+ implementing pip-15 (#843 )
+ check already running by lock file (#871 )
+
+
+
Fix
+
+
+ store : use cache to check if public key exists (#902 )
+ executor : not rejecting bond transaction for bootstrap validator (#901 )
+ GUI : removing unnecessary tags in transaction confirm dialog (#893 )
+ network : close relay connection for public node (#891 )
+ network : refining GossipSubParams for Gossiper node (#882 )
+ sync : adding sequence number to the bundle (#881 )
+ network : turn off mesh for gossiper node (#880 )
+ consensus : check voteset for CP strong termination (#879 )
+ adding querier to query messages (#878 )
+ execution : fixing issue #869 (#870 )
+ fixing logger issue on rotating log file (#859 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/01/08/mainnet-announcement.html b/ar/2024/01/08/mainnet-announcement.html
new file mode 100644
index 000000000..ca0c78e91
--- /dev/null
+++ b/ar/2024/01/08/mainnet-announcement.html
@@ -0,0 +1,439 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Mainnet announcement | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Mainnet announcement
+
08 January 2024
+
The much-awaited Mainnet Launch of The Pactus Blockchain is finally here!
+On January 24, 2024, at 20:24:00 UTC, the first block, known as the Genesis block ,
+will be minted by four Bootstrap validators.
+After that, every 10 seconds, a new block will be added to the blockchain.
+Each block contains the committed transactions in the network.
+The block finality in the Pactus blockchain is immediate.
+It means that there is no need to wait for block confirmation to ensure a transaction is committed.
+
+
Later, more than 2000 community validators will secure the blockchain and make it decentralized.
+These validators are Testnet participants who helped test Pactus during our testing period.
+The community validators will receive the initial staking coins from a Discord Bot named RoboPac.
+
+
To ensure everything works smoothly on the Mainnet, three different Testnets (
+Testnet0 ,
+Testnet1 , and
+Testnet2 ) have been run.
+
+
The Mainnet will never be stopped or interrupted by the core developers of Pactus,
+and validators should primarily participate in and maintain the security of the blockchain.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/01/11/release-0-20-0.html b/ar/2024/01/11/release-0-20-0.html
new file mode 100644
index 000000000..65ad03e9c
--- /dev/null
+++ b/ar/2024/01/11/release-0-20-0.html
@@ -0,0 +1,504 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 0.20.0 Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 0.20.0 Released
+
11 January 2024
+
Overview
+
+
Pactus Blockchain Version 0.20.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
Highlights
+
+
Validator Stake Management
+
+
The new GUI application enables users to easily Unbond and Withdraw their validator’s stake.
+
+
+
+
Improving Network Connectivity
+
+
Some users have reported that UDP packets are being dropped by their Internet Service Providers.
+Therefore, the UDP protocol is disabled by default.
+Users can still activate the UDP protocol by configuring the settings in the file if necessary.
+
+
Also, the experimental Node Gossip feature has been removed in this version.
+Node gossip could cause some validators to become isolated from the rest of the network.
+
+
Relay service
+
+
This version enables users to turn their node into a relay service.
+A relay service node can help users behind NAT to communicate with each other.
+It is disabled by default and can be enabled inside the config file.
+Please note that it is still in an experimental state.
+
+
Download
+
+
This version has been implemented for Testnet-2 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-2, download the latest version from the
+download page and join the Testnet.
+
+
These guides can help you to download, install and configure your node:
+
+
+
+
How to Upgrade
+
+
If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ implement relay service (#931 )
+ HTTP : Integrate AddRowDouble and update tests (#926 )
+ network : making listen address private in config (#921 )
+ http : adding AvailabilityScore to http module (#917 )
+ network : adding ‘enable_udp’ config (#918 )
+ network : removing gossip node service (#916 )
+ gRPC : adding AvailabilityScore to gRPC (#910 )
+ GUI : unbond and withdraw transaction dialogs (#908 )
+
+
+
Fix
+
+
+ gRPC : adding missing get raw transaction APIs to gRPC gateway (#925 )
+ network : preventing self dial (#924 )
+ fixing time lag on starting node (#923 )
+ network : fixing network deadlock on linux arm64 (#922 )
+ GUI : updating unbond and withdraw dialogs (#911 )
+ fixing gRPC node info issue (#906 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/01/22/testnet-2-concluded.html b/ar/2024/01/22/testnet-2-concluded.html
new file mode 100644
index 000000000..225ec4125
--- /dev/null
+++ b/ar/2024/01/22/testnet-2-concluded.html
@@ -0,0 +1,487 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Story of Testnet-2 | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Story of Testnet-2
+
22 January 2024
+
What is Testnet?
+
+
Testnet is a testing environment where developers and users can try out the functionality of a blockchain project,
+without putting real assets or data at risk.
+It helps to ensure that the final product is reliable and secure for users to use.
+If you like to read more about the Testnet you can check out our post on
+“What is Testnet? ”.
+
+
Summary
+
+
In October 2023, we launched Testnet-2 .
+The main purpose of this Testnet was to closely monitor the new consensus mechanism and the stability of the P2P network.
+
+
The committee for Testnet-2 was set to 51 validators,
+and 2084 validators joined during the Testnet period.
+More than 1500 computers and servers joined the network, and we experienced a high volume of data transmission in the network.
+More than 800,000 blocks were created, and about 2 million transactions were processed during this time.
+The size of the blockchain is about 450 megabytes.
+
+
About 500,000 coins were staked during this period, almost 60% of the total generated coins.
+It shows that users, even in Testnet, tend to stake their coins.
+
+
Stability of Consensus
+
+
In Testnet-1, we had one consensus failure that caused us to
+conclude the Testnet-1 .
+During Testnet-2, there were no issues with the consensus mechanism, and
+we had no case of failure during the testing period,
+although the number of validators and nodes significantly increased on Testnet-2 compared to its predecessor.
+It proved that the consensus mechanism is in a stable situation.
+
+
Networking issues
+
+
In Testnet-2, the blockchain stopped twice, and each time it took more than 24 hours to fix the problem.
+In the second blockage, we had no choice but to ask active validators inside the committee to
+update their nodes to overcome the networking issue.
+The development team faced a difficult situation and had to make the proper decision to fix the networking issues.
+On one hand, the networking traffic increased significantly, and on the other hand, we had to
+make sure normal users with limited internet bandwidth could still participate in the consensus mechanism without any problems.
+After examining different scenarios, the networking issues were resolved, and
+no major problems were reported till the end of Testnet.
+
+
Major updates
+
+
During Testnet-2, we introduced several updates, including versions
+0.15.0 ,
+0.16.0 ,
+0.17.0 ,
+0.18.0 ,
+0.19.0 , and
+0.20.0 .
+The update process went smoothly, and with the stability of Version 0.20.0 confirmed,
+the development team shifted its focus to the Mainnet launch.
+
+
+
+
This Testnet was important for us.
+It helped us learn what we need to do to make Pactus work even better.
+Without the community that supports us and dedicates their time and resources to testing and feedback,
+we wouldn’t have been able to progress as we have.
+
+
We thank all of them for their valuable contributions.
+As promised, participants in Testnets will be given priority as validators for the MainNet , and
+will receive bounty PAC coins to set up their validators.
+
+
We are grateful to all those who participated in Testnets, and we encourage them to join the Mainnet.
+As a community-based project, we rely on the support of our community members, and we value any help we receive.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/01/24/mainnet-launched.html b/ar/2024/01/24/mainnet-launched.html
new file mode 100644
index 000000000..7df438664
--- /dev/null
+++ b/ar/2024/01/24/mainnet-launched.html
@@ -0,0 +1,477 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Mainnet launched 🚀 | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Mainnet launched 🚀
+
24 January 2024
+
Years to Launch
+
+
Pactus Mainnet started creating the first block on 24 January 2024 at 20:24:10 UTC time.
+Pactus Mainnet is the result of years of hard work, research, and innovation.
+It started from one idea:
+
+
A low-cost, truly decentralized blockchain, built by the people for the people,
+where anyone could run and be their own validator.
+
+
We faced many challenges and obstacles along the way, but we never gave up.
+We overcame them with our determination and perseverance.
+We learned from our mistakes and improved our solutions.
+We grew from a small team to a large community.
+We achieved many milestones and breakthroughs. And we did it.
+We created Pactus, the platform that empowers you.
+
+
+
+
We want to thank Pactus community for helping us on the Testnet.
+
+
You have been instrumental in testing and improving the Testnet.
+You have given us your honest feedback and constructive suggestions.
+You have reported and help fixed bugs and errors.
+You have challenged and pushed us to do better.
+You have been our partners and friends in this journey.
+
+
On the Road
+
+
The true journey has just started.
+The Mainnet is not the end, but the beginning.
+The beginning of a new era of blockchain innovation.
+The beginning of a new challenge and opportunity.
+The beginning of a new revolution and evolution!
+
+
We welcome you more than ever.
+We need you to join us in this exciting adventure.
+We need you to support us in this ambitious endeavor.
+We need you to be part of Pactus, the platform that empowers you!
+
+
We Have a Dream
+
+
We have a dream.
+A dream of a world where blockchain technology is not a privilege, but a right for everyone.
+A dream of a world where smart contracts and decentralized applications are fast, secure, and scalable.
+A dream of a world where Pactus is the platform that empowers you.
+
+
This dream is not just ours. It is yours too.
+You share our vision and passion for blockchain innovation.
+You believe in our potential and impact.
+You support our goals and values.
+You are part of our dream.
+
+
And this dream is not just a fantasy. It is a reality.
+A reality that we have created together.
+A reality that we have launched today. A reality that we can explore and enjoy together.
+A reality that we can shape and improve together.
+A reality that we can make better and brighter together!
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/01/31/release-1-0-0.html b/ar/2024/01/31/release-1-0-0.html
new file mode 100644
index 000000000..fe58d5d52
--- /dev/null
+++ b/ar/2024/01/31/release-1-0-0.html
@@ -0,0 +1,492 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.0.0 (Beijing) Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.0.0 (Beijing) Released
+
31 January 2024
+
Overview
+
+
Pactus Blockchain Version 1.0.0 (Beijing)
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
+
+
Highlights
+
+
Mainnet Official Release v1.0.0 (Beijing)
+
+
The much-anticipated official software release of Pactus v1.0.0 (Beijing) marks a significant milestone
+for our community.
+This impressive mainnet release represents the culmination of extensive development efforts.
+Pactus v1.0.0 (Beijing) offers a pioneering solution for streamlining the validation of Pactus blockchain,
+enhancing security, and providing a user-friendly experience. We’re excited to unveil the official software
+and welcome users to experience the power of Pactus in revolutionizing the future of blockchain. Join us on
+this exciting journey.
+
+
Onboarding validators
+
+
On February 1st, a total of 53,494 PAC coins will be distributed among 1,311 validators who participated in
+Testnet-0 ,
+Testnet-1 , and
+Testnet-2 .
+This marks the beginning of a new chapter in the decentralized world.
+
+
Download
+
+
This version has been implemented for Mainnet
+To start using Pactus Mainnet, download the latest version from the download
+page and join the Mainnet.
+
+
These guides can help you to download, install and configure your node:
+
+
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ implement get validator address for grpc (#975 )
+ add bootstrap.json and load in config on build (#964 )
+ add mainnet config and genesis files (#951 )
+ add Consensus-address to network info (#952 )
+ grpc : sign transaction using wallet client (#945 )
+ pactus gui lock support (#947 )
+ consensus : turning consensus to a zero-config module (#942 )
+
+
+
Fix
+
+
+ localnet wallet issue (#970 )
+ sync : remove ReachabilityStatus from agent info (#956 )
+ daemon : keeping previous behavior for password flag, linting CLI messages (#950 )
+ consensus : detect if the system time is behind the network (#939 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/02/10/release-1-0-1.html b/ar/2024/02/10/release-1-0-1.html
new file mode 100644
index 000000000..621bacc82
--- /dev/null
+++ b/ar/2024/02/10/release-1-0-1.html
@@ -0,0 +1,472 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.0.1 (Beijing) Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.0.1 (Beijing) Released
+
10 February 2024
+
Overview
+
+
Pactus Blockchain Version 1.0.1 (Beijing)
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
This release is named after the city of Beijing and it
+was unanimously selected by Pactus community.
+
+
+
+
Highlights
+
+
This update fixes several issues identified after the release of
+1.0.0 (Beijing) .
+Specifically, it fixes the missed log file on the Windows GUI application and improves the node connectivity.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ gui : add connections and moniker fields to main windows (#1090 )
+
+
+
Fix
+
+
+ network : set dial and accept limit in connection gater (#1089 )
+ gui stderr logger in windows os (#1081 )
+ sync : improve syncing process (#1087 )
+ network : redefine resource limits (#1086 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/02/18/release-1-0-2.html b/ar/2024/02/18/release-1-0-2.html
new file mode 100644
index 000000000..7ae0434d6
--- /dev/null
+++ b/ar/2024/02/18/release-1-0-2.html
@@ -0,0 +1,463 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.0.2 (Istanbul) Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.0.2 (Istanbul) Released
+
18 February 2024
+
Overview
+
+
Pactus Blockchain Version 1.0.2 (Istanbul)
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
This release is named after the city of Istanbul and it
+was unanimously selected by Pactus community.
+
+
+
+
Highlights
+
+
This update fixes a major issue that decreases the number of inbound connections of the nodes over time.
+We highly recommend all users to upgrade to the new version for better connectivity.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version.
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Fix
+
+
+ sync : fix concurrent map read-write crash (#1112 )
+ network : remove disconnected peers from peerMgr (#1110 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/03/16/testnet-phoenix-launched.html b/ar/2024/03/16/testnet-phoenix-launched.html
new file mode 100644
index 000000000..d755af836
--- /dev/null
+++ b/ar/2024/03/16/testnet-phoenix-launched.html
@@ -0,0 +1,451 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus Permanent Phoenix Testnet Launched | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus Permanent Phoenix Testnet Launched
+
16 March 2024
+
The public and permanent Phoenix Testnet
+for the Pactus blockchain has been launched.
+This Testnet serves as a valuable platform for developers to thoroughly examine their projects,
+providing a safe playground to test and deploy their applications before transitioning to the Mainnet.
+
+
+
+
All parameters within the Testnet mirror those of the Mainnet,
+ensuring a consistent environment for testing and development.
+The genesis block for the Testnet is available
+here .
+
+
Currently, there are four active nodes running the Testnet, accessible at the following addresses:
+
+
+ testnet1.pactus.org
+ testnet2.pactus.org
+ testnet3.pactus.org
+ testnet4.pactus.org
+
+
+
The Testnet’s name, Phoenix, was chosen by the Pactus community from various suggestions.
+It embodies the spirit of rebirth and renewal, highlighting the innovative and testing-focused nature of the network.
+Developers can utilize the RoboPAC as a faucet to receive test coins and
+thoroughly test their applications within this environment.
+It’s important to note that the coins within this Testnet hold no monetary value and are only meant for testing purpose.
+
+
All addresses within the Phoenix network are prefixed with tpc1...
,
+distinguishing them from Mainnet addresses that start with pc1...
’.
+This clear differentiation streamlines development and ensures seamless integration when transitioning to
+the Mainnet environment.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/04/14/release-1-1-0.html b/ar/2024/04/14/release-1-1-0.html
new file mode 100644
index 000000000..7ef879490
--- /dev/null
+++ b/ar/2024/04/14/release-1-1-0.html
@@ -0,0 +1,556 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.0 (Hanoi) Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.0 (Hanoi) Released
+
14 April 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.0 (Hanoi)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
This release is named after the city of Hanoi ,
+and it was unanimously selected by the Pactus community.
+
+
+
+
Highlights
+
+
This update brings some changes that are not compatible with the earlier version.
+Here are the key points:
+
+
+ Fee calculations are now rounded, and fees can be accepted within a range of one NanaoPAC (see #1174 ).
+ Small bonds for existing validators are now accepted (see #1152 ).
+
+
+
Validators must update their nodes to this version as soon as possible.
+
+
Other major changes in this version include:
+
+
+ The addition of a JSON-RPC endpoint required by third parties like exchanges to connect to Pactus nodes.
+ The implementation of Pactus Shell tools, allowing users to query the node.
+
+
+
Additionally, this version improves the syncing process for new nodes, enhances the GUI, and addresses several issues.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ gRPC : add get address history method (#1206 )
+ grpc : Add GetNewAddress/GetTotalBalance endpoint to gateway (#1197 )
+ GUI : adding total balance to wallet widget (#1194 )
+ Add GetNewAddress gRPC API (#1193 )
+ gRPC : add new API to get the total balance of wallet (#1190 )
+ GUI : showing transaction hash after broadcasting transaction (#1187 )
+ add jsonrpc gateway support (#1183 )
+ config : one reward address in config for all validators (#1178 )
+ GUI : memo field for transactions on GUI wallet (#1182 )
+ implement basic auth for pactus shell (#1177 )
+ grpc : add rust code gen for proto (#1151 )
+ testnet : define permanent Testent genesis (#1173 )
+ add basic auth authentication for securing grpc (#1162 )
+ grpc : calculate fee for create-raw-transaction APIs (#1159 )
+ grpc : add fixed-amount to calc-fee API (#1146 )
+ wallet : adding all account address functions (#1128 )
+ grpc : update swagger API to version 1.1 (#1106 )
+ GUI : adding availability score in wallet (#1118 )
+ logger : adding log target (#1122 )
+ logger : adding file_only option (#1117 )
+ gui : add connections and moniker fields to main windows (#1090 )
+ implementation for PIP-22 (#1067 )
+ generate documentation for proto files (#1064 )
+ pactus-ctl (#946 )
+
+
+
Fix
+
+
+ gRPC : add basic auth option in header (#1217 )
+ gRPC : not return block data on information verbosity (#1212 )
+ wallet : fix wallet conn issue (#1211 )
+ GUI : update total balance on wallet timeout (#1204 )
+ accept small bond to existing validator (#1152 )
+ GUI : make transaction hash selactable (#1196 )
+ close connections with peers that have no supported protocol (#1181 )
+ sync : check the start block request height (#1176 )
+ config : load logger levels in Mainnet config (#1168 )
+ gRPC : pactus swagger not found (#1163 )
+ add error type for invalid configs (#1153 )
+ save Mainnet config with inline comments (#1143 )
+ network : set deadline for streams (#1149 )
+ grpc : fix error 404 on grpc gateway (#1144 )
+ wallet : checking args in history add (#1141 )
+ gRPC : adding sign raw transaction API to gateway (#1116 )
+ sync : fix concurrent map read-write crash (#1112 )
+ network : remove disconnected peers from peerMgr (#1110 )
+ network : set dial and accept limit in connection gater (#1089 )
+ stderr logger in windows os (#1081 )
+ sync : improve syncing process (#1087 )
+ network : redefine resource limits (#1086 )
+
+
+
Refactor
+
+
+ sync : improve syncing process (#1207 )
+ move fee calculation logic to execution package (#1195 )
+ introduce Amount data type for converting PAC units (#1174 )
+ using PAC instead of atomic units for external input/outputs (#1161 )
+ change func() to cancel func type (#1142 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/04/18/release-1-1-1.html b/ar/2024/04/18/release-1-1-1.html
new file mode 100644
index 000000000..6ea4cc527
--- /dev/null
+++ b/ar/2024/04/18/release-1-1-1.html
@@ -0,0 +1,491 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.1 (Jakarta) Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.1 (Jakarta) Released
+
18 April 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.1 (Jakarta)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
This release is named after the city of Jakarta ,
+and it was unanimously selected by the Pactus community.
+
+
+
+
Highlights
+
+
This update fixes the issue of zero-bonding
+that identified after the release of 1.1.0 (Hanoi) .
+This fix will be applied at block height 740,000 to ensure a smooth upgrade.
+
+
Additionally, this version rejects connections from nodes version 1.0.2 and earlier.
+
+
Validators must update their nodes to this version as soon as possible.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ reject direct message from non-supporting agents (#1225 )
+
+
+
Fix
+
+
+ prevent zero stake for bond transactions (#1227 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/04/25/release-1-1-3.html b/ar/2024/04/25/release-1-1-3.html
new file mode 100644
index 000000000..842daaf62
--- /dev/null
+++ b/ar/2024/04/25/release-1-1-3.html
@@ -0,0 +1,495 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.3 (Kuala Lumpur) Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.3 (Kuala Lumpur) Released
+
25 April 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.3 (Kuala Lumpur)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
This release is named after the city of Kuala Lumpur ,
+and it was unanimously selected by the Pactus community.
+
+
+
+
Highlights
+
+
This version prevents spamming transactions by defining a minimum value per transaction.
+It is not part of the consensus parameters,
+and each node can set its own threshold.
+By default, it is set to 0.1 PAC.
+
+
The version also bans validators that were part of the recent spam attack on the network.
+Their stake will be frozen at block 820,000.
+
+
Validators must update their nodes to this version as soon as possible.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ ban attacker validators (#1235 )
+ txpool : prevent spamming transactions by defining a minimum value (#1233 )
+
+
+
Fix
+
+
+ wallet : saving wallet file after generating new address in gRPC (#1236 )
+ network : disconnect from peers that has no protocol (#1243 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/05/07/release-1-1-4.html b/ar/2024/05/07/release-1-1-4.html
new file mode 100644
index 000000000..d764a9198
--- /dev/null
+++ b/ar/2024/05/07/release-1-1-4.html
@@ -0,0 +1,484 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.4 (London) Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.4 (London) Released
+
07 May 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.4 (London)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+
Highlights
+
+
This version fixes some issues related to the syncing process and improves the connectivity of the nodes.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Fix
+
+
+ network : set infinite limit for resource manager (#1261 )
+ sync : introduce session manager (#1257 )
+ HTTP : using amount type for fee in transaction details (#1255 )
+
+
+
Refactor
+
+
+ network : refactor peer manager and redefine the min cons (#1259 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/05/30/release-1-1-5.html b/ar/2024/05/30/release-1-1-5.html
new file mode 100644
index 000000000..2cf12f1ad
--- /dev/null
+++ b/ar/2024/05/30/release-1-1-5.html
@@ -0,0 +1,496 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.5 (Cape Town) Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.5 (Cape Town) Released
+
30 May 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.5 (Cape Town)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
Highlights
+
+
Rate limit
+
+
This version applies a rate limit to the messages in the general topics including blocks and transactions.
+This will help nodes to manage the network traffic in times of network congestion or spam attacks.
+
+
Dynamic fee
+
+
To prevent attackers from sending spam transactions, a dynamic fee model is introduced in this patch.
+Each node can define a minimum fee that is defaulted to 0.000001 PAC.
+However, if the transaction pool becomes full, the transaction fee can increase up to 1 PAC.
+
+
To ensure network stability and security,
+it is recommended that all validators upgrade to this version as soon as they can.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ add dynamic fee (#1290 )
+ network : define config for rate limit threshold (#1284 )
+ network : ratelimit gossip for prevent spamming (#1283 )
+
+
+
Fix
+
+
+ change CalculateFee to be backward compatible (#1291 )
+ proposal basic checks deferred to consensus (#1288 )
+ rejected spam tx for same from and to (#1287 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/05/31/release-1-1-6.html b/ar/2024/05/31/release-1-1-6.html
new file mode 100644
index 000000000..25f92c957
--- /dev/null
+++ b/ar/2024/05/31/release-1-1-6.html
@@ -0,0 +1,483 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.6 (Ottawa) Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.6 (Ottawa) Released
+
31 May 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.6 (Ottawa)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
Highlights
+
+
This version updates the consensus mechanism to move to new rounds once
+a proper and justified “Decided” vote seen by a non-faulty validator.
+This helps ensure that the consensus mechanism stays in sync with the network when the validator restarts.
+
+
In this version, the minimum availability score is set to 0.6666.
+This change will help validators receive rewards even in faulty network conditions,
+ensuring that they can continue to participate in the consensus mechanism.
+
+
To ensure network stability and security,
+it is recommended that all validators upgrade to this version as soon as they can.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Fix
+
+
+ consensus : move to new round on decided vote (#1293 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/06/02/release-1-1-7.html b/ar/2024/06/02/release-1-1-7.html
new file mode 100644
index 000000000..a8ceb90af
--- /dev/null
+++ b/ar/2024/06/02/release-1-1-7.html
@@ -0,0 +1,500 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.7 (Santiago) Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.7 (Santiago) Released
+
02 June 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.7 (Santiago)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
Highlights
+
+
Here are the key improvements in this version:
+
+
+
+ Resolves critical issue in consensus :
+This version addresses a critical issue in consensus that prevents broadcasting expired proposals across the network.
+
+
+ Improved network security :
+The version defines a list of blacklisted IPs and disconnects from them, enhancing network security.
+
+
+ Node compatibility :
+This version only connects to nodes with version 1.1.6 or above, ensuring compatibility with the latest software.
+
+
+
+
To ensure network stability and security,
+it is recommended that all validators upgrade to this version as soon as they can.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ network : add firewall black list ips to banning when connecting to peer (#1298 )
+
+
+
Fix
+
+
+ sync : load black listed addresses from the config (#1301 )
+ consensus : only proposer responds to the query proposal (#1300 )
+ network : set latest support version to 1.1.6 (#1299 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/06/02/release-1-1-8.html b/ar/2024/06/02/release-1-1-8.html
new file mode 100644
index 000000000..fcc3fa4c1
--- /dev/null
+++ b/ar/2024/06/02/release-1-1-8.html
@@ -0,0 +1,494 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.1.8 (Budapest) Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.1.8 (Budapest) Released
+
02 June 2024
+
Overview
+
+
Pactus Blockchain Version 1.1.8 (Budapest)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+
Highlights
+
+
This version aims to reduce the consensus message once there is a delay on block creation.
+It also defines a fixed fee of 0.1 PAC for transactions.
+This fixed fee will be replaced by a dynamic fee in future releases,
+which will provide more flexibility and efficiency.
+
+
To ensure network stability and security,
+it is recommended that all validators upgrade to this version as soon as they can.
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ firewall : define rate limit for network topics (#1308 )
+
+
+
Fix
+
+
+ set fix fee 0.1 PAC for transactions (#1315 )
+ consensus : add round to query proposal message (#1314 )
+ firewall : block peer base on blacklisted CIDR (#1309 )
+ consensus : reduce ChangeProposerTimeout to 6 seconds (#1311 )
+ sync : define rate limit for query vote and proposal (#1310 )
+ decrease to 100 maximum transaction per block (#1306 )
+ consume message first then ignore on ratelimit (#1304 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/06/20/release-1-2-0.html b/ar/2024/06/20/release-1-2-0.html
new file mode 100644
index 000000000..2d7480f6d
--- /dev/null
+++ b/ar/2024/06/20/release-1-2-0.html
@@ -0,0 +1,538 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.2.0 (Sydney) Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.2.0 (Sydney) Released
+
20 June 2024
+
Overview
+
+
Pactus Blockchain Version 1.2.0 (Sydney)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+
Highlights
+
+
This version includes some improvements and new features, such as:
+
+
+ Clock offset calculation: Adding clock offset check to
+alert the user if their machine’s time is not synced with the network.
+See PIP-18: Clock Offset Calculation .
+ Minimum fee: The minimum fee is configurable in this version, with the default set to 0.01.
+Each validator can decide the minimum fee of transactions they want to include in the block
+by changing the min_fee
value inside the config file.
+ ip blocker: A new option allows nodes to block certain IPs and disconnect from them.
+ rate limit: Nodes can set rate limits for incoming messages, including transactions.
+ wallet manager: The wallet manager allows users to create and manage wallets using gRPC endpoints.
+
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ config : make minimum fee configurable (#1349 )
+ apply rate limit for the network topics (#1332 )
+ add ipblocker package (#1323 )
+ consensus : fast consensus path implementation (#1253 )
+ version : add alias to node version (#1281 )
+ ntp : add ntp util (#1274 )
+ gRPC : add connection info to node info (#1273 )
+ gRPC : add only_connected parameter to getNetworkInfo API (#1264 )
+ grpc : refactor CreateWallet and add RestoreWallet API endpoint (#1256 )
+ add wallet service (#1241 )
+ ban attacker validators (#1235 )
+ txpool : prevent spamming transactions by defining a minimum value (#1233 )
+ reject direct message from non-supporting agents (#1225 )
+
+
+
Fix
+
+
+ wallet : add public key on get new address (#1350 )
+ sync : add IsBannedAddress check in processing connect event (#1347 )
+ sync : update latest supporting version (#1336 )
+ state : improve node startup by optimizing availability score calculation (#1338 )
+ HTTP : add clock offset and connection info to node-info API (#1334 )
+ grpc : add stacktrace to locate panic (#1333 )
+ consensus : implement PIP-26 (#1331 )
+ grpc : improve grpc server and client (#1330 )
+ util : add more ntp pool (#1328 )
+ jsonrpc : update JSON-RPC Gateway to support headers and improve client registry (#1327 )
+ consensus : improve consensus algorithm (#1329 )
+ txpool : set fix fee of 0.1 PAC for transactions (#1320 )
+ network : add block and transaction topics (#1319 )
+ gRPC : prevent concurrent map iteration and map write (#1279 )
+ api : add swagger schemes (#1270 )
+ network : set infinite limit for resource manager (#1261 )
+ sync : introduce session manager (#1257 )
+ HTTP : using amount type for fee in transaction details (#1255 )
+ network : disconnect from peers that has no protocol (#1243 )
+ wallet : saving wallet file after generating new address in gRPC (#1236 )
+ prevent zero stake for bond transactions (#1227 )
+ set bounding interval for first boudning tx only (#1224 )
+
+
+
Refactor
+
+
+ wallet : set server address on loading wallet (#1348 )
+ removed deprecated LockWallet and UnLockWallet from WalletService (#1343 )
+ crypto : decode data to point on verification (#1339 )
+ network : define connection info in network proto (#1297 )
+ sync : define peer package (#1271 )
+ network : refactor peer manager and redefine the min cons (#1259 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/06/27/release-1-3-0.html b/ar/2024/06/27/release-1-3-0.html
new file mode 100644
index 000000000..7de546e0c
--- /dev/null
+++ b/ar/2024/06/27/release-1-3-0.html
@@ -0,0 +1,496 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.3.0 (Warsaw) Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.3.0 (Warsaw) Released
+
27 June 2024
+
Overview
+
+
Pactus Blockchain Version 1.3.0 (Warsaw)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+
Highlights
+
+
This version fixes an issue that caused some nodes to get stuck for one minutes and
+not receive any new messages during that time.
+
+
Breaking Change : gRPC APIs now convert all binary values to hexadecimal strings.
+
+
+ Attention Exchanges and Third-Party Pactus Blockchain Users:
+
+
+ After upgrading to this version, be aware that binary data, such as hashes and signatures,
+ are now formatted as hexadecimal strings. You must update your code to accommodate this change.
+
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ grpc : get txpool content API (#1364 )
+ network : permanent peer store (#1354 )
+
+
+
Fix
+
+
+ grpc : change bytes type to hex string (#1371 )
+ http : add basic auth middleware for http server (#1372 )
+ network : use goroutines for sending streams (#1365 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/2024/08/01/release-1-4-0.html b/ar/2024/08/01/release-1-4-0.html
new file mode 100644
index 000000000..47a0fdf1c
--- /dev/null
+++ b/ar/2024/08/01/release-1-4-0.html
@@ -0,0 +1,550 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus 1.4.0 (Amsterdam) Released | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
Pactus 1.4.0 (Amsterdam) Released
+
01 August 2024
+
Overview
+
+
Pactus Blockchain Version 1.4.0 (Amsterdam)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+
Highlights
+
+
+
+ Introduction of Pruned Mode:
+Starting with version 1.4.0, Pactus now supports Pruned Mode.
+This feature allows nodes to maintain only the most recent blocks from the last 10 days,
+significantly reducing storage requirements and speeding up the synchronization process.
+
+
+ Node Type Page:
+The startup assistant now features a page for selecting the Node Type,
+enabling users to easily choose between a Full Node and a Pruned Node.
+
+
+ Import Command:
+The import
command now facilitates the download and integration of pruned snapshots,
+making it easier to set up nodes with minimal data.
+
+
+ Prune Command:
+The prune
command allows users to manually initiate the pruning of old blocks and transactions.
+This command helps reduce storage size by removing outdated data.
+
+
+ Enhanced Security Features:
+This release includes updates to the firewall, enhancing the validation of gossip and stream messages,
+which improves the overall security of the network.
+
+
+ New gRPC API Enhancements:
+The gRPC API now includes additional information, such as pruning status and height,
+providing more data for developers and users.
+
+
+ Stability and Performance Improvements:
+Numerous fixes and optimizations have been made across the platform,
+including resolving issues with dynamic library dependencies on macOS,
+addressing syncing issues in Pruned Mode,
+and fixing a bug in the consensus algorithm on query-proposal message.
+
+
+
+
Download
+
+
To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+
How to Upgrade
+
+
If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+
Change log
+
+
This version includes several changes and improvements, such as:
+
+
Feat
+
+
+ cmd : add node type page to the startup assistant (#1431 )
+ grpc : adding is-pruned and pruning-height to blockchain info API (#1420 )
+ daemon : add import command to download pruned snapshots (#1424 )
+ util : file downloader with verify sha256 hash (#1422 )
+ sync : define full and prune service (#1412 )
+ pip : implement PIP-23 (#1397 )
+ firewall : check valid gossip and stream messages (#1402 )
+ state : prune block on commit (#1404 )
+ core : pruning client by prune command (#1400 )
+ store : prune block function (#1399 )
+ wallet : add timeout client connection (#1396 )
+ add backup tool script (#1373 )
+
+
+
Fix
+
+
+ consensus : handle query for decided proposal (#1438 )
+ gtk : solve dynamic library dependencies and import path on macOS (#1435 )
+ cmd : prevent sudden crash on download error (#1432 )
+ store : pruning height returns zero when store is not in prune mode (#1430 )
+ grpc : add last-block-time to blockchain-info API (#1428 )
+ grpc : show negative pruning height when is pruned false (#1429 )
+ sync : fix syncing issue on prune mode (#1415 )
+ grpc : return error on invalid arguments for VerifyMessage (#1411 )
+ network : accept messages originating from self (#1408 )
+ change wallet rpc ip to dns address (#1398 )
+ pactus-shell : pactus shell support basic auth (#1384 )
+ gui : support ctrl+c for interrupt gui (#1385 )
+ grpc : add basic auth in swagger header (#1383 )
+
+
+
Refactor
+
+
+ execution : simplify executors and tests (#1425 )
+
+
+
You can find the full list of changes on Github ,
+as well as the source code
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/404.html b/ar/404.html
new file mode 100644
index 000000000..9bbdcce50
--- /dev/null
+++ b/ar/404.html
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Error 404, Page Not Found | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
404
+
+
Page not found :(
+
The requested page could not be found.
+
+
+
+
diff --git a/ar/about/faq/index.html b/ar/about/faq/index.html
new file mode 100644
index 000000000..92ddb320c
--- /dev/null
+++ b/ar/about/faq/index.html
@@ -0,0 +1,1490 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ الأسئلة المتكررة | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
+
+
+
***
+
+
+
+
+
+
+
+
+ ما معنى "بكتوس"؟
+
+
+
+
+
+
+
+
+ كلمة "Pactus" ذات أصل لاتيني
+ وتعني "الاتفاق معًا" أو "عقد" أو "معاملة". في الإنجليزية، يتم استخراج مصطلح "Pact" من الكلمة اللاتينية "Pactus".
+
+
+
+
+
+
+
+ هل بكتوس هي نسخة من أي بلوكشين أخرى؟
+
+
+
+
+
+
+
+
+ لا، بكتوس ليست نسخة أو مشتقة من أي بلوكشين آخر. إنها بروتوكول بلوكشين جديد وفريد تم تصميمه من الصفر. آلية التوافق المستخدمة في بكتوس فريدة وتم إنشاؤها خصيصًا لحل مشكلة قابلية توسع محققي الحصة الأدلة بلوكشين.
+
+
+
+
+
+
+
+ Did Pactus have an ICO?
+
+
+
+
+
+
+
+
+
+ الترجمة قديمة. يمكنك قراءتها، لكن قد لا تكون دقيقة.
+
+ لا، بكتوس ليس لديها ICO (Initial Coin Offering) ولا توجد حسابات محددة مسبقًا أو محظوظة في بكتوس. يبدأ بلوكشين بكتوس من الصفر وتتم طباعة جميع العملات من خلال آلية التوافق. هذا يضمن توزيع العملات بشكل عادل وعدم وجود تمركز للثروة.
+
+
+
+
+
+
+
+ Where can I buy Pactus coins?
+
+
+
+
+
+
+
+
+ Pactus does not have any pre-sales coins. The only way to obtain Pactus coins at the moment is by installing the Pactus software and actively participating in block validation. By engaging in the network and contributing to block validation, you will be rewarded with Pactus coins.
+
+
+
+
+
+
+
+ لماذا تم تطوير بكتوس؟
+
+
+
+
+
+
+
+
+
+ الترجمة قديمة. يمكنك قراءتها، لكن قد لا تكون دقيقة.
+
+ تم تطوير بكتوس بهدف توسيع مقياس بلوكشين دون التأثير على الأمان والتفرد. ولتحقيق ذلك، يستخدم بكتوس آلية توافق فريدة تمكّن من إنشاء بلوك في 10 ثوانٍ فقط. وعلاوة على ذلك، تم تصميم بكتوس لتكون أكثر إمكانية الوصول لجميع المستخدمين، بغض النظر عن خبراتهم التقنية أو مواردهم المالية.
تعكس التزامنا بالتفرد والعدالة في قرارنا
+ بالبدء في بلوكشين بكتوس من الصفر وضمان طباعة جميع العملات من خلال آلية التوافق، بدلاً من إجراء ICO أو حسابات محظوظة.
+
+
+
+
+
+
+
+ ما المشكلات التي يحلّها بكتوس ولا يحلّها غيرها من البلوكتشينات؟
+
+
+
+
+
+
+
+
+
+ الترجمة قديمة. يمكنك قراءتها، لكن قد لا تكون دقيقة.
+
+ تحاول بكتوس حلّ العديد من المشاكل التي تواجهها شبكات البلوكتشين الأخرى، بما في ذلك مشكلات القابلية للتوسع، والوصول، والعدالة في التوزيع، وتكلفة التخزين.
مشكلات القابلية للتوسع: تتميز بكتوس بآلية اتفاق فريدة من نوعها تم تصميمها خصيصًا للتعامل مع مشكلة القابلية للتوسع، دون التضحية بالأمان واللامركزية.
الوصول: تم تصميم تشغيل المعالج على بكتوس بحيث يكون أكثر وصولًا للمستخدمين العاديين مقارنة بالبلوكتشينات الأخرى.
العدالة في التوزيع: تمتلك بكتوس نموذجًا عادلاً وشفافًا لتوزيع العملات، بهدف منع تراكم الثروة.
تكلفة التخزين: توفر بكتوس حلًا جديدًا لمشكلة التخزين، حيث يمكن للمستخدمين تخصيص ملفات تخزين مخصصة، مما يقلل من تكلفة التخزين ويبسط العقود الذكية.
+
+
+
+
+
+
+
+ ما الفرق بين بكتوس وبيتكوين؟
+
+
+
+
+
+
+
+
+ بكتوس وبيتكوين هما نوعان مختلفان من شبكات البلوكتشين. بينما يستخدم بيتكوين
+ عملية تسمى "إثبات العمل" لتأمين شبكته، يستخدم بكتوس طريقة مختلفة تسمى "إثبات الحصة". هذا يعني أنه بدلاً من التعدين،
+يكون المصدقون مسؤولين عن التصويت على الكتل الواردة ويجب أن يمتلكوا مبلغًا معينًا من عملة الشبكة، المعروفة باسم "الحصة"، كوديعة أمان لمنع السلوك الخبيث.
+
+
+
+
+
+
+
+ ما الفرق بين بكتوس وإيثيريوم؟
+
+
+
+
+
+
+
+
+
+ الترجمة قديمة. يمكنك قراءتها، لكن قد لا تكون دقيقة.
+
+ بكتوس و إيثيريوم هما شبكتي بلوكتشين تعتمدان على إثبات الحصة، لكنهما يختلفان في نهجهما لتشغيل المصدق. يمكن أن يكون تشغيل المصدق في إيثيريوم تحديًا ويتطلب حصةً بحد أدنى 32 عملة إيثيريوم. بالمقابل، صُمم بكتوس ليكون أكثر قابلية للاستخدام للمستخدمين العاديين. لا يوجد متطلب حصة دنيا، ويمكنك تشغيل عقدة بكتوس على أي نظام تشغيل بمعدات أساسية. يعكس هذا النهج التزامنا بتعزيز التوزيع وجعل تقنية البلوكتشين متاحة لجمهور أوسع.
+
+
+
+
+
+
+
+
+
+
+
+
+ ما هي المُعالِجين؟
+
+
+
+
+
+
+
+
+ يتحمّل المعالجون في بكتوس مسؤولية معالجة المعاملات وإنشاء الكتل وبالتالي، يساعدون في تأمين الشبكة والحفاظ على انحيازها. يستخدمون عملاتهم الخاصة كرهان لضمان أمان الشبكة وتلقي مكافآت عن مساهماتهم.
+
+
+
+
+
+
+
+
+
+ ما هو عدد المعالجين الذي يدعمه بكتوس؟
+
+
+
+
+
+
+
+
+
+ الترجمة قديمة. يمكنك قراءتها، لكن قد لا تكون دقيقة.
+
+ بكتوس عبارة عن بلوكتشين حقيقي للإثبات بالحصة، مما يعني أنه لا يوجد حد لعدد المعالجين في الشبكة. ومع ذلك، فإن لجنة مكونة من 21 معالجًا مسؤولة عن إنشاء الكتل. من المهم الإشارة إلى أن أعضاء اللجنة ليسوا ثابتين ويتغيرون مع مرور الوقت.
+
+
+
+
+
+
+
+
+
+ ما هي الحدود الدنيا والعليا للرهان الممكنة؟
+
+
+
+
+
+
+
+
+
+ الترجمة قديمة. يمكنك قراءتها، لكن قد لا تكون دقيقة.
+
+ في بكتوس، لا يوجد حد أدنى لتجميد العملات، ولكن الحد الأقصى للعملات التي يمكنك تجميدها هو 1000 عملة. إذا كنت ترغب في تجميد أكثر من 1000 عملة، يمكنك تشغيل محقق جديد. تشغيل العديد من المحققين يحافظ على توزيع الشبكة بشكل أفضل ويساعد على الحفاظ على أمانها واستقرارها.
+
+
+
+
+
+
+
+ What are the minimum hardware requirements?
+
+
+
+
+
+
+
+
+ After thorough testing on multiple machines, we can conclude that the recommended minimum hardware requirements are as follows:
Private Server:
+ CPU's: 1/2 physical core / 1vCPU
+ RAM: 1 GB Ram
+ Storage (SSD): 20 GB NVMe Drive
+ Network: stable internet connection with 1 TBps speed
+
+
Personal Computer or Laptop:
+ CPU's: 2 physical cores / 4vCPU
+ RAM: 4 GB Ram
+ Storage (SSD): 64 GB SSD Drive
+ Network: stable internet connection with over 15 MBps speed
+
+These specifications have been tested and provide an availability score of over 0.9.
+
+
+
+
+
+
+
+
+
+ Why is there a limit for maximum stake?
+
+
+
+
+
+
+
+
+ The limit for the maximum stake per validator enhances decentralization and prevents validators from gaining too much power, which could potentially lead them to control the committee. The maximum staking limit is part of the consensus parameters and can be changed in the future through consensus among the validators.
+
+
+
+
+
+
+
+ Can I run multiple validators on one computer?
+
+
+
+
+
+
+
+
+ The Pactus software allows you to run up to 32 validators on a single node. Running multiple validators may require slightly more memory, but it has no impact on storage, and has a negligible effect on CPU and networking usage. Running multiple validators on a single node enables users to distribute their stake across multiple validators, especially when they want to stake more than the maximum stake per validator. This eliminates the need for additional resources and simplifies node management.
+
+
+
+
+
+
+
+
+
+ كيف يتم مكافأة المعالجين؟
+
+
+
+
+
+
+
+
+
+ الترجمة قديمة. يمكنك قراءتها، لكن قد لا تكون دقيقة.
+
+ بمجرد أن يقترح المعالج كتلة صالحة ويتم قبولها من قِبل الشبكة، يحصل المعالج على عملة واحدة كمكافأة للكتلة. تعتبر المكافأة حافزًا يتم إعطاؤه للمعالجين على مساهماتهم في أمان وسلامة الشبكة، مما يساعد على الحفاظ على سير العمل بسلاسة.
+
+
+
+
+
+
+
+
+
+ ما هو حجم مكافأة الكتلة في بكتوس؟
+
+
+
+
+
+
+
+
+ تكون مكافأة الكتلة في بكتوس ثابتة، وهي عملة واحدة دائمًا لكل كتلة. تساعد هذه الخطة الثابتة للمكافأة على ضمان البساطة والعدالة وتوزيع العملة بشكل أفضل.
+
+
+
+
+
+
+
+
+
+
+
+ How many PAC coins are generated per day?
+
+
+
+
+
+
+
+
+ Daily, a total amount of 8640 PAC is generated. This figure translates to 241,000 every 28 days and 3,153,600 per year.
+
+
+
+
+
+
+
+
+
+
+
+
+ كيف تعمل بلوكشين بكتوس؟
+
+
+
+
+
+
+
+
+
+ الترجمة قديمة. يمكنك قراءتها، لكن قد لا تكون دقيقة.
+
+ يعمل بكتوس بواسطة لجنة من المصادقين المسؤولين عن إنشاء كتل جديدة. تتكون اللجنة من 21 مصادقًا، ومع ذلك، تتغير أعضاء اللجنة بشكل عشوائي مع مرور الوقت. كل 10 ثوانٍ، يجمع مصادق في اللجنة يُعرف باسم "المقترح" جميع المعاملات الصالحة، ويضيفها إلى كتلة، ويشاركها مع المصادقين الآخرين في اللجنة. إذا أكد أكثر من 2/3 من أصحاب المصلحة في اللجنة على الكتلة المقترحة بتوقيعهم عليها، يتم تأكيد الكتلة ويتم تنفيذ جميع المعاملات داخل الكتلة. يتكرر هذه العملية كل 10 ثوانٍ.
+
+
+
+
+
+
+
+
+
+
+
+ كيف يمكن لمصادق الانضمام إلى اللجنة؟
+
+
+
+
+
+
+
+
+
+ الترجمة قديمة. يمكنك قراءتها، لكن قد لا تكون دقيقة.
+
+ للانضمام إلى اللجنة في بكتوس، يشارك المصادقون في عملية قرعة أو تصفية تحدث في كل كتلة. في هذه العملية، يقوم المصادقون بإنشاء رقم عشوائي قابل للإثبات بين الصفر وإجمالي العملات المرهونة، وإذا كان الرقم أقل من مرهوناتهم، يمكنهم إرسال معاملة تسمى معاملة التصفية مع دليل التصفية. بمجرد تضمين معاملة التصفية في كتلة، يحل المصادق محل أقدم عضو في اللجنة.
+
+
+
+
+
+
+
+
+
+ كيف يتم اختيار مقترحي البلوك في اللجنة؟
+
+
+
+
+
+
+
+
+ يتم اختيار مقترح البلوك داخل اللجنة بناءً على وقت دخوله إلى اللجنة. وهذا يعني أن عملية الاختيار تتبع ترتيب "الأولوية لأولئك الذين يدخلون أولاً".
+
+
+
+
+
+
+
+
+
+ هل يمكن للمحققين العديدة الدخول إلى اللجنة في وقت واحد؟
+
+
+
+
+
+
+
+
+
+ الترجمة قديمة. يمكنك قراءتها، لكن قد لا تكون دقيقة.
+
+ عملية الفرز العشوائي في بكتوس هي عشوائية، لذلك فمن الممكن أن يدخل أكثر من محقق إلى اللجنة في وقت واحد، أو لا يدخل أي محقق على الإطلاق. ومع ذلك، لكي تعتبر عملية الفرز صالحة وتتم إضافتها إلى البلوك، يجب أن تستوفي شرطين: لا يمكن تغيير أكثر من 1/3 من حصة اللجنة، و لا يمكن إزالة محقق لم يتاح له فرصة تقديم اقتراح لبلوك بعد.
+
+
+
+
+
+
+
+ هل من الممكن أن يكون هناك بلوكين صحيحين في نفس الوقت؟
+
+
+
+
+
+
+
+
+ لا يمكن أن يكون هناك بلوكين صحيحين في نفس الوقت في سلسلة بكتوس. يمنع خوارزمية الاتفاق في بكتوس إمكانية وجود اثنين من المقترحين في نفس الوقت. هذا يضمن عدم حدوث فورك في الشبكة.
+
+
+
+
+
+
+
+
+
+ How much is the block confirmation in the Pactus Blockchain?
+
+
+
+
+
+
+
+
+ Block confirmation refers to the number of blocks that need to be created before a transaction is considered final and irreversible. In Pactus, block confirmation is immediate, meaning that once a transaction is added to a block, it is considered confirmed and cannot be reversed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ما هو إجمالي إمدادات عملة بكتوس؟
+
+
+
+
+
+
+
+
+
+ الترجمة قديمة. يمكنك قراءتها، لكن قد لا تكون دقيقة.
+
+ بكتوس لديها إجمالي إمدادات 21 مليون عملة، وكل عملة مقسمة إلى 1 مليار وحدة. كل 10 ثوانٍ، يتم إنشاء عملة جديدة، مما يؤدي إلى 8،640 عملة جديدة في اليوم وحوالي 3 ملايين في السنة. سيتم إنشاء جميع العملات في غضون 7 سنوات.
+
+
+
+
+
+
+
+ How are Genesis Coins allocated in Pactus?
+
+
+
+
+
+
+
+
+ The initial allocation of Genesis Coins in the Pactus blockchain is distributed as follows:
+ Genesis Coin Allocation for Pactus
+
+
+ Category
+ Coin Allocation
+ Percentage
+
+
+
+
+ Treasury
+ 21 Million coins
+ 50%
+
+
+ Foundation
+ 8.4 Million coins
+ 20%
+
+
+ VC Allocation
+ 6.3 Million coins
+ 15%
+
+
+ Team and Operations
+ 4.2 Million coins
+ 10%
+
+
+ Community
+ 2.1 Million coins
+ 5%
+
+
+
+
+
+
+
+
+
+
+
+
+ ما هو حساب الخزانة؟
+
+
+
+
+
+
+
+
+ حساب الخزانة هو حساب خاص في بلوكشين بكتوس يحتوي على إجمالي إمدادات العملات والذي يبلغ 21 مليون عملة. يتم إنشاؤه في وقت النشأة وليس له زوج مفاتيح مرتبط به، مما يعني عدم إمكانية الوصول إليه أو التحكم فيه من قبل أي شخص. في كل مرة يتم إنشاء بلوك، يتم نقل عملة واحدة من حساب الخزانة إلى حساب المقترح كمكافأة للبلوك.
+
+
+
+
+
+
+
+
+
+ How are Treasury coins distributed?
+
+
+
+
+
+
+
+
+ Treasury coins are distributed as block rewards to the block proposers. Every 10 seconds, one coin from the Treasury account transfers to the block proposer account. This process is called "coin minting". As a result, the total number of Pactus coins in circulation gradually increases over time as new blocks are added to the blockchain. Every day, 8,640 coins are minted, resulting in approximately 3 million coins being minted annually by the Treasury account.
+
+
+
+
+
+
+
+
+
+
+
+ How will the Support coins be spent?
+
+
+
+
+
+
+
+
+ The support accounts are designed to provide financial backing for the project. Initially, Pactus Genesis contained only the Treasury accounts without any Backup or Support accounts. The introduction of support coins was a strategic response to the absence of investors, despite the significant progress of the project.
These coins are allocated in several ways:
+ Community :
+ This portion will mainly support the community.
+ As part of this, the participants on Testnets receive initial staking coins to
+ setup their validator and secure the Mainnet.
+
+ Team and Operations :
+ Another portion supports the project team.
+ Team members receive a monthly distribution of these coins, which is estimated to sustain the team for over six years.
+
+ Venture Capital (VC) Allocation :
+ Another portion is set aside for any potential venture capitalists who
+ might show interest in investing in the project in the future.
+
+ Foundation :
+ The foundation coins are reserved for future use, potentially in supporting strong projects that align with Pactus's objectives.
+
+
+Transparency is a key aspect of this allocation, as all movements of these coins are trackable due to the fully transparent nature of the blockchain.
+
+
+
+
+
+
+
+
+
+
+
+
+ ما هي عملية تحويل الأموال؟
+
+
+
+
+
+
+
+
+ عملية تحويل الأموال هي نوع من العمليات التي تسمح للمستخدمين بتحويل عملات بكتوس من حساب واحد إلى آخر.
+
+
+
+
+
+
+
+
+
+ ما هي عملية الرهن؟
+
+
+
+
+
+
+
+
+
+ الترجمة قديمة. يمكنك قراءتها، لكن قد لا تكون دقيقة.
+
+ عملية الرهن هي نوع من العمليات التي تسمح لك بأن تصبح محققاً من خلال رهن بعض العملات. عند إرسال عملية رهن، سيصبح عقدك محققًا. يحدد مقدار الرهن قوتك في الاتفاق.
+
+
+
+
+
+
+
+
+
+ ما هي عملية الفرز؟
+
+
+
+
+
+
+
+
+ عملية الفرز هي نوع من العمليات التي تسمح للمحققين بالدخول إلى اللجنة.
+
+
+
+
+
+
+
+
+
+ ما هي عملية الغاء الرهن؟
+
+
+
+
+
+
+
+
+
+ الترجمة قديمة. يمكنك قراءتها، لكن قد لا تكون دقيقة.
+
+ عملية الغاء الرهن هي نوع من العمليات التي تسمح لك بإلغاء رهنك كمحقق. عند إرسال عملية الغاء الرهن، لن تكون قادراً بعد ذلك على إرسال عمليات الفرز أو الرهن.
+
+
+
+
+
+
+
+
+
+ ما هي عملية السحب؟
+
+
+
+
+
+
+
+
+ عملية السحب هي نوع من العمليات التي تسمح للمحققين بسحب عملاتهم التي تم رهنها من الشبكة.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/about/roadmap/index.html b/ar/about/roadmap/index.html
new file mode 100644
index 000000000..40cdeaacc
--- /dev/null
+++ b/ar/about/roadmap/index.html
@@ -0,0 +1,735 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ خارطة الطريق | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
خارطة الطريق
+
+
+
✅ المهمة المكتملة
+
🚧 المهمة الجارية
+
⏳ المهمة القادمة
+
+
+
+
+
+
+
+
+
+
+
+
+ Pactus Onchain Governance
+
+
+
Q1 2026
+
+
+
+
+
+
+
+
+
+ Decentralized Domain Name System
+
+
+
Q4 2025
+
+
+
+
+
+
+
+
+
+ Decentralized Password Manager
+
+
+
Q4 2025
+
+
+
+
+
+
+
+
+
+ Browser Extension
+
+
+
Q3 2025
+
+
+
+
+
+
+
+
+
+ Pactus Virtual Machine (PVM)
+
+
+
Q3 2025
+
+
+
+
+
+
+
+
+
+ Mobile Friendly GUI
+
+
+
Q2 2025
+
+
+
+
+
+
+
+
+
+ Decentralized Storage Platform
+
+
+
Q2 2025
+
+
+
+
+
+
+
+
+
+ Integrating with Wallets applications
+
+
+
Q1 2025
+
+
+
+
+
+
+
+
+
+ Consumptional Fee Model
+
+
+
Q4 2024
+
+
+
+
+
+
+
+
+
+ Nanomsg service
+
+
+
Q3 2024
+
+
+
+
+
+
+
+
+
+ Supporting Secp256k1 Curve
+
+
+
Q3 2024
+
+
+
+
+
+
+
+
+
+ Pruned Node
+
+
+
August 2024
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/about/what-is-pactus/index.html b/ar/about/what-is-pactus/index.html
new file mode 100644
index 000000000..fc8f4d13f
--- /dev/null
+++ b/ar/about/what-is-pactus/index.html
@@ -0,0 +1,449 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ما هو بكتوس؟ | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
ما هو بكتوس؟
+
+
+
+
+
+
بكتوس هو بلوكشين يركز على التوزيع
+ يعتمد بكتوس على مبدأ أنه يمكن تحقيق نظام عادل وشفاف فقط من خلال التوزيع. على عكس العديد من منصات البلوكشين الأخرى، يهدف بكتوس إلى القضاء على إمكانية المركزية والتلاعب من خلال إزالة الحاجة إلى التفويض والمُعدِّنين. يتيح ذلك لأي شخص أن يصبح جزءًا من النظام البيئي ويضمن أن تظل المنصة موزعة بالفعل.
+
+
+
+
+
+
+
بكتوس هو بلوكشين سهل الاستخدام
+ يهدف بكتوس إلى إنشاء بلوكشين سهل الاستخدام يمكن استخدامه بسهولة من قبل أي شخص، وليس فقط خبراء التقنية. يتم تصميم بروتوكولنا ليكون بسيطًا وسهل الصيانة والتطوير. يقدم بكتوس تطبيق واجهة المستخدم الرسومية البسيطة التي يسهل للمستخدمين تشغيل عقدة.
+
+
+
+
+
+
+
تخزين متفرد ولامركزي في بكتوس
+ في بكتوس، يمكن للمستخدمين شراء ملف تخزين مخصص يمكن تجديده سنويًا، مما يؤدي إلى تخفيض التكاليف المتعلقة بالتخزين وتنفيذ العقود الذكية. يمكن أن تمهد هذه الميزة الفريدة الطريق لبروتوكولات جديدة في المنصات الموزعة.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/android-chrome-192x192.png b/ar/android-chrome-192x192.png
new file mode 100644
index 000000000..8a8e2b6d8
Binary files /dev/null and b/ar/android-chrome-192x192.png differ
diff --git a/ar/android-chrome-256x256.png b/ar/android-chrome-256x256.png
new file mode 100644
index 000000000..827219e8a
Binary files /dev/null and b/ar/android-chrome-256x256.png differ
diff --git a/ar/apple-touch-icon.png b/ar/apple-touch-icon.png
new file mode 100644
index 000000000..1fa36ea07
Binary files /dev/null and b/ar/apple-touch-icon.png differ
diff --git a/ar/assets/css/custom.css b/ar/assets/css/custom.css
new file mode 100644
index 000000000..00e05b42d
--- /dev/null
+++ b/ar/assets/css/custom.css
@@ -0,0 +1 @@
+:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}:root,[data-bs-theme=light]{--pa-blue: #0d6efd;--pa-indigo: #6610f2;--pa-purple: #6f42c1;--pa-pink: #d63384;--pa-red: #dc3545;--pa-orange: #fd7e14;--pa-yellow: #ffc107;--pa-green: #198754;--pa-teal: #20c997;--pa-cyan: #0dcaf0;--pa-black: #000;--pa-white: #fff;--pa-gray: #6c757d;--pa-gray-dark: #343a40;--pa-gray-100: #f8f9fa;--pa-gray-200: #e9ecef;--pa-gray-300: #dee2e6;--pa-gray-400: #ced4da;--pa-gray-500: #adb5bd;--pa-gray-600: #6c757d;--pa-gray-700: #495057;--pa-gray-800: #343a40;--pa-gray-900: #212529;--pa-primary: #021a34;--pa-secondary: #075f94;--pa-success: #198754;--pa-info: #0dcaf0;--pa-warning: #ffc107;--pa-danger: #dc3545;--pa-light: #f8f9fa;--pa-dark: #212529;--pa-primary-rgb: 2, 26, 52;--pa-secondary-rgb: 7, 95, 148;--pa-success-rgb: 25, 135, 84;--pa-info-rgb: 13, 202, 240;--pa-warning-rgb: 255, 193, 7;--pa-danger-rgb: 220, 53, 69;--pa-light-rgb: 248, 249, 250;--pa-dark-rgb: 33, 37, 41;--pa-primary-text-emphasis: #010a15;--pa-secondary-text-emphasis: #03263b;--pa-success-text-emphasis: #0a3622;--pa-info-text-emphasis: #055160;--pa-warning-text-emphasis: #664d03;--pa-danger-text-emphasis: #58151c;--pa-light-text-emphasis: #495057;--pa-dark-text-emphasis: #495057;--pa-primary-bg-subtle: #ccd1d6;--pa-secondary-bg-subtle: #cddfea;--pa-success-bg-subtle: #d1e7dd;--pa-info-bg-subtle: #cff4fc;--pa-warning-bg-subtle: #fff3cd;--pa-danger-bg-subtle: #f8d7da;--pa-light-bg-subtle: #fcfcfd;--pa-dark-bg-subtle: #ced4da;--pa-primary-border-subtle: #9aa3ae;--pa-secondary-border-subtle: #9cbfd4;--pa-success-border-subtle: #a3cfbb;--pa-info-border-subtle: #9eeaf9;--pa-warning-border-subtle: #ffe69c;--pa-danger-border-subtle: #f1aeb5;--pa-light-border-subtle: #e9ecef;--pa-dark-border-subtle: #adb5bd;--pa-white-rgb: 255, 255, 255;--pa-black-rgb: 0, 0, 0;--pa-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--pa-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--pa-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--pa-body-font-family: var(--pa-font-sans-serif);--pa-body-font-size:1rem;--pa-body-font-weight: 400;--pa-body-line-height: 1.5;--pa-body-color: #212529;--pa-body-color-rgb: 33, 37, 41;--pa-body-bg: #fff;--pa-body-bg-rgb: 255, 255, 255;--pa-emphasis-color: #000;--pa-emphasis-color-rgb: 0, 0, 0;--pa-secondary-color: rgba(33, 37, 41, 0.75);--pa-secondary-color-rgb: 33, 37, 41;--pa-secondary-bg: #e9ecef;--pa-secondary-bg-rgb: 233, 236, 239;--pa-tertiary-color: rgba(33, 37, 41, 0.5);--pa-tertiary-color-rgb: 33, 37, 41;--pa-tertiary-bg: #f8f9fa;--pa-tertiary-bg-rgb: 248, 249, 250;--pa-heading-color: inherit;--pa-link-color: #021a34;--pa-link-color-rgb: 2, 26, 52;--pa-link-decoration: underline;--pa-link-hover-color: #02152a;--pa-link-hover-color-rgb: 2, 21, 42;--pa-code-color: #d63384;--pa-highlight-color: #212529;--pa-highlight-bg: #fff3cd;--pa-border-width: 1px;--pa-border-style: solid;--pa-border-color: #dee2e6;--pa-border-color-translucent: rgba(0, 0, 0, 0.175);--pa-border-radius: 0.375rem;--pa-border-radius-sm: 0.25rem;--pa-border-radius-lg: 0.5rem;--pa-border-radius-xl: 1rem;--pa-border-radius-xxl: 2rem;--pa-border-radius-2xl: var(--pa-border-radius-xxl);--pa-border-radius-pill: 50rem;--pa-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--pa-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--pa-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--pa-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--pa-focus-ring-width: 0.25rem;--pa-focus-ring-opacity: 0.25;--pa-focus-ring-color: rgba(2, 26, 52, 0.25);--pa-form-valid-color: #198754;--pa-form-valid-border-color: #198754;--pa-form-invalid-color: #dc3545;--pa-form-invalid-border-color: #dc3545}[data-bs-theme=dark]{color-scheme:dark;--pa-body-color: #dee2e6;--pa-body-color-rgb: 222, 226, 230;--pa-body-bg: #212529;--pa-body-bg-rgb: 33, 37, 41;--pa-emphasis-color: #fff;--pa-emphasis-color-rgb: 255, 255, 255;--pa-secondary-color: rgba(222, 226, 230, 0.75);--pa-secondary-color-rgb: 222, 226, 230;--pa-secondary-bg: #343a40;--pa-secondary-bg-rgb: 52, 58, 64;--pa-tertiary-color: rgba(222, 226, 230, 0.5);--pa-tertiary-color-rgb: 222, 226, 230;--pa-tertiary-bg: #2b3035;--pa-tertiary-bg-rgb: 43, 48, 53;--pa-primary-text-emphasis: #677685;--pa-secondary-text-emphasis: #6a9fbf;--pa-success-text-emphasis: #75b798;--pa-info-text-emphasis: #6edff6;--pa-warning-text-emphasis: #ffda6a;--pa-danger-text-emphasis: #ea868f;--pa-light-text-emphasis: #f8f9fa;--pa-dark-text-emphasis: #dee2e6;--pa-primary-bg-subtle: #00050a;--pa-secondary-bg-subtle: #01131e;--pa-success-bg-subtle: #051b11;--pa-info-bg-subtle: #032830;--pa-warning-bg-subtle: #332701;--pa-danger-bg-subtle: #2c0b0e;--pa-light-bg-subtle: #343a40;--pa-dark-bg-subtle: #1a1d20;--pa-primary-border-subtle: #01101f;--pa-secondary-border-subtle: #043959;--pa-success-border-subtle: #0f5132;--pa-info-border-subtle: #087990;--pa-warning-border-subtle: #997404;--pa-danger-border-subtle: #842029;--pa-light-border-subtle: #495057;--pa-dark-border-subtle: #343a40;--pa-heading-color: inherit;--pa-link-color: #677685;--pa-link-hover-color: #85919d;--pa-link-color-rgb: 103, 118, 133;--pa-link-hover-color-rgb: 133, 145, 157;--pa-code-color: #e685b5;--pa-highlight-color: #dee2e6;--pa-highlight-bg: #664d03;--pa-border-color: #495057;--pa-border-color-translucent: rgba(255, 255, 255, 0.15);--pa-form-valid-color: #75b798;--pa-form-valid-border-color: #75b798;--pa-form-invalid-color: #ea868f;--pa-form-invalid-border-color: #ea868f}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--pa-body-font-family);font-size:var(--pa-body-font-size);font-weight:var(--pa-body-font-weight);line-height:var(--pa-body-line-height);color:var(--pa-body-color);text-align:var(--pa-body-text-align);background-color:var(--pa-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--pa-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--pa-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;color:var(--pa-highlight-color);background-color:var(--pa-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(--pa-link-color-rgb), var(--pa-link-opacity, 1));text-decoration:underline}a:hover{--pa-link-color-rgb: var(--pa-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--pa-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--pa-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:0.875em;color:var(--pa-body-bg);background-color:var(--pa-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--pa-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 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:var(--pa-body-bg);border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-sm);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:var(--pa-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--pa-gutter-x: 1.5rem;--pa-gutter-y: 0;width:100%;padding-right:calc(var(--pa-gutter-x)*.5);padding-left:calc(var(--pa-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{--pa-breakpoint-xs: 0;--pa-breakpoint-sm: 576px;--pa-breakpoint-md: 768px;--pa-breakpoint-lg: 992px;--pa-breakpoint-xl: 1200px;--pa-breakpoint-xxl: 1400px}.row{--pa-gutter-x: 1.5rem;--pa-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--pa-gutter-y));margin-right:calc(-0.5*var(--pa-gutter-x));margin-left:calc(-0.5*var(--pa-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--pa-gutter-x)*.5);padding-left:calc(var(--pa-gutter-x)*.5);margin-top:var(--pa-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--pa-gutter-x: 0}.g-0,.gy-0{--pa-gutter-y: 0}.g-1,.gx-1{--pa-gutter-x: 0.25rem}.g-1,.gy-1{--pa-gutter-y: 0.25rem}.g-2,.gx-2{--pa-gutter-x: 0.5rem}.g-2,.gy-2{--pa-gutter-y: 0.5rem}.g-3,.gx-3{--pa-gutter-x: 1rem}.g-3,.gy-3{--pa-gutter-y: 1rem}.g-4,.gx-4{--pa-gutter-x: 1.5rem}.g-4,.gy-4{--pa-gutter-y: 1.5rem}.g-5,.gx-5{--pa-gutter-x: 3rem}.g-5,.gy-5{--pa-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--pa-gutter-x: 0}.g-sm-0,.gy-sm-0{--pa-gutter-y: 0}.g-sm-1,.gx-sm-1{--pa-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--pa-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--pa-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--pa-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--pa-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--pa-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--pa-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--pa-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--pa-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--pa-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--pa-gutter-x: 0}.g-md-0,.gy-md-0{--pa-gutter-y: 0}.g-md-1,.gx-md-1{--pa-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--pa-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--pa-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--pa-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--pa-gutter-x: 1rem}.g-md-3,.gy-md-3{--pa-gutter-y: 1rem}.g-md-4,.gx-md-4{--pa-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--pa-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--pa-gutter-x: 3rem}.g-md-5,.gy-md-5{--pa-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--pa-gutter-x: 0}.g-lg-0,.gy-lg-0{--pa-gutter-y: 0}.g-lg-1,.gx-lg-1{--pa-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--pa-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--pa-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--pa-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--pa-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--pa-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--pa-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--pa-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--pa-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--pa-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--pa-gutter-x: 0}.g-xl-0,.gy-xl-0{--pa-gutter-y: 0}.g-xl-1,.gx-xl-1{--pa-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--pa-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--pa-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--pa-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--pa-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--pa-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--pa-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--pa-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--pa-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--pa-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--pa-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--pa-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--pa-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--pa-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--pa-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--pa-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--pa-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--pa-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--pa-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--pa-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--pa-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--pa-gutter-y: 3rem}}.table{--pa-table-color-type: initial;--pa-table-bg-type: initial;--pa-table-color-state: initial;--pa-table-bg-state: initial;--pa-table-color: var(--pa-emphasis-color);--pa-table-bg: var(--pa-body-bg);--pa-table-border-color: var(--pa-border-color);--pa-table-accent-bg: transparent;--pa-table-striped-color: var(--pa-emphasis-color);--pa-table-striped-bg: rgba(var(--pa-emphasis-color-rgb), 0.05);--pa-table-active-color: var(--pa-emphasis-color);--pa-table-active-bg: rgba(var(--pa-emphasis-color-rgb), 0.1);--pa-table-hover-color: var(--pa-emphasis-color);--pa-table-hover-bg: rgba(var(--pa-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--pa-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--pa-table-color-state, var(--pa-table-color-type, var(--pa-table-color)));background-color:var(--pa-table-bg);border-bottom-width:var(--pa-border-width);box-shadow:inset 0 0 0 9999px var(--pa-table-bg-state, var(--pa-table-bg-type, var(--pa-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--pa-border-width)*2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--pa-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--pa-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--pa-table-color-type: var(--pa-table-striped-color);--pa-table-bg-type: var(--pa-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--pa-table-color-type: var(--pa-table-striped-color);--pa-table-bg-type: var(--pa-table-striped-bg)}.table-active{--pa-table-color-state: var(--pa-table-active-color);--pa-table-bg-state: var(--pa-table-active-bg)}.table-hover>tbody>tr:hover>*{--pa-table-color-state: var(--pa-table-hover-color);--pa-table-bg-state: var(--pa-table-hover-bg)}.table-primary{--pa-table-color: #000;--pa-table-bg: #ccd1d6;--pa-table-border-color: #a3a7ab;--pa-table-striped-bg: #c2c7cb;--pa-table-striped-color: #000;--pa-table-active-bg: #b8bcc1;--pa-table-active-color: #000;--pa-table-hover-bg: #bdc1c6;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-secondary{--pa-table-color: #000;--pa-table-bg: #cddfea;--pa-table-border-color: #a4b2bb;--pa-table-striped-bg: #c3d4de;--pa-table-striped-color: #000;--pa-table-active-bg: #b9c9d3;--pa-table-active-color: #000;--pa-table-hover-bg: #beced8;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-success{--pa-table-color: #000;--pa-table-bg: #d1e7dd;--pa-table-border-color: #a7b9b1;--pa-table-striped-bg: #c7dbd2;--pa-table-striped-color: #000;--pa-table-active-bg: #bcd0c7;--pa-table-active-color: #000;--pa-table-hover-bg: #c1d6cc;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-info{--pa-table-color: #000;--pa-table-bg: #cff4fc;--pa-table-border-color: #a6c3ca;--pa-table-striped-bg: #c5e8ef;--pa-table-striped-color: #000;--pa-table-active-bg: #badce3;--pa-table-active-color: #000;--pa-table-hover-bg: #bfe2e9;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-warning{--pa-table-color: #000;--pa-table-bg: #fff3cd;--pa-table-border-color: #ccc2a4;--pa-table-striped-bg: #f2e7c3;--pa-table-striped-color: #000;--pa-table-active-bg: #e6dbb9;--pa-table-active-color: #000;--pa-table-hover-bg: #ece1be;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-danger{--pa-table-color: #000;--pa-table-bg: #f8d7da;--pa-table-border-color: #c6acae;--pa-table-striped-bg: #eccccf;--pa-table-striped-color: #000;--pa-table-active-bg: #dfc2c4;--pa-table-active-color: #000;--pa-table-hover-bg: #e5c7ca;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-light{--pa-table-color: #000;--pa-table-bg: #f8f9fa;--pa-table-border-color: #c6c7c8;--pa-table-striped-bg: #ecedee;--pa-table-striped-color: #000;--pa-table-active-bg: #dfe0e1;--pa-table-active-color: #000;--pa-table-hover-bg: #e5e6e7;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-dark{--pa-table-color: #fff;--pa-table-bg: #212529;--pa-table-border-color: #4d5154;--pa-table-striped-bg: #2c3034;--pa-table-striped-color: #fff;--pa-table-active-bg: #373b3e;--pa-table-active-color: #fff;--pa-table-hover-bg: #323539;--pa-table-hover-color: #fff;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + var(--pa-border-width));padding-bottom:calc(0.375rem + var(--pa-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + var(--pa-border-width));padding-bottom:calc(0.5rem + var(--pa-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + var(--pa-border-width));padding-bottom:calc(0.25rem + var(--pa-border-width));font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:var(--pa-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);appearance:none;background-color:var(--pa-body-bg);background-clip:padding-box;border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-inset);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--pa-body-color);background-color:var(--pa-body-bg);border-color:#818d9a;outline:0;box-shadow:var(--pa-box-shadow-inset),0 0 0 .25rem rgba(2,26,52,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--pa-secondary-color);opacity:1}.form-control:disabled{background-color:var(--pa-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:var(--pa-body-color);background-color:var(--pa-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--pa-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--pa-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--pa-body-color);background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:var(--pa-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2));padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.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(var(--pa-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}.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(var(--pa-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--pa-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(var(--pa-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--pa-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--pa-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--pa-border-width) * 2))}.form-select{--pa-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);appearance:none;background-color:var(--pa-body-bg);background-image:var(--pa-form-select-bg-img),var(--pa-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-inset);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:#818d9a;outline:0;box-shadow:var(--pa-box-shadow-inset),0 0 0 .25rem rgba(2,26,52,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--pa-secondary-bg)}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 var(--pa-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}[data-bs-theme=dark] .form-select{--pa-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--pa-form-check-bg: var(--pa-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;background-color:var(--pa-form-check-bg);background-image:var(--pa-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--pa-border-width) solid var(--pa-border-color);print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#818d9a;outline:0;box-shadow:0 0 0 .25rem rgba(2,26,52,.25)}.form-check-input:checked{background-color:#021a34;border-color:#021a34}.form-check-input:checked[type=checkbox]{--pa-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]{--pa-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#021a34;border-color:#021a34;--pa-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--pa-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(--pa-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--pa-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='%23818d9a'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--pa-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){--pa-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;background-color: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(2,26,52,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(2,26,52,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;background-color:#021a34;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);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:#b3bac2}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--pa-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem;box-shadow:var(--pa-box-shadow-inset)}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;background-color:#021a34;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);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:#b3bac2}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--pa-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem;box-shadow:var(--pa-box-shadow-inset)}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--pa-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--pa-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--pa-border-width) * 2));min-height:calc(3.5rem + calc(var(--pa-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--pa-border-width) 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(--pa-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:var(--pa-body-bg);border-radius:var(--pa-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--pa-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--pa-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:var(--pa-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);text-align:center;white-space:nowrap;background-color:var(--pa-tertiary-bg);border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--pa-border-width)*-1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--pa-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--pa-success);border-radius:var(--pa-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--pa-form-valid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--pa-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--pa-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--pa-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--pa-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--pa-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--pa-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--pa-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--pa-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--pa-danger);border-radius:var(--pa-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--pa-form-invalid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--pa-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--pa-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--pa-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--pa-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--pa-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--pa-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--pa-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--pa-btn-padding-x: 0.75rem;--pa-btn-padding-y: 0.375rem;--pa-btn-font-family: ;--pa-btn-font-size:1rem;--pa-btn-font-weight: 400;--pa-btn-line-height: 1.5;--pa-btn-color: var(--pa-body-color);--pa-btn-bg: transparent;--pa-btn-border-width: var(--pa-border-width);--pa-btn-border-color: transparent;--pa-btn-border-radius: var(--pa-border-radius);--pa-btn-hover-border-color: transparent;--pa-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--pa-btn-disabled-opacity: 0.65;--pa-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--pa-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--pa-btn-padding-y) var(--pa-btn-padding-x);font-family:var(--pa-btn-font-family);font-size:var(--pa-btn-font-size);font-weight:var(--pa-btn-font-weight);line-height:var(--pa-btn-line-height);color:var(--pa-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;border:var(--pa-btn-border-width) solid var(--pa-btn-border-color);border-radius:var(--pa-btn-border-radius);background-color:var(--pa-btn-bg);box-shadow:var(--pa-btn-box-shadow);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(--pa-btn-hover-color);background-color:var(--pa-btn-hover-bg);border-color:var(--pa-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--pa-btn-color);background-color:var(--pa-btn-bg);border-color:var(--pa-btn-border-color)}.btn:focus-visible{color:var(--pa-btn-hover-color);background-color:var(--pa-btn-hover-bg);border-color:var(--pa-btn-hover-border-color);outline:0;box-shadow:var(--pa-btn-box-shadow),var(--pa-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--pa-btn-hover-border-color);outline:0;box-shadow:var(--pa-btn-box-shadow),var(--pa-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--pa-btn-active-color);background-color:var(--pa-btn-active-bg);border-color:var(--pa-btn-active-border-color);box-shadow:var(--pa-btn-active-shadow)}.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(--pa-btn-active-shadow),var(--pa-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--pa-btn-disabled-color);pointer-events:none;background-color:var(--pa-btn-disabled-bg);border-color:var(--pa-btn-disabled-border-color);opacity:var(--pa-btn-disabled-opacity);box-shadow:none}.btn-primary{--pa-btn-color: #fff;--pa-btn-bg: #021a34;--pa-btn-border-color: #021a34;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #02162c;--pa-btn-hover-border-color: #02152a;--pa-btn-focus-shadow-rgb: 40, 60, 82;--pa-btn-active-color: #fff;--pa-btn-active-bg: #02152a;--pa-btn-active-border-color: #021427;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #021a34;--pa-btn-disabled-border-color: #021a34}.btn-secondary{--pa-btn-color: #fff;--pa-btn-bg: #075f94;--pa-btn-border-color: #075f94;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #06517e;--pa-btn-hover-border-color: #064c76;--pa-btn-focus-shadow-rgb: 44, 119, 164;--pa-btn-active-color: #fff;--pa-btn-active-bg: #064c76;--pa-btn-active-border-color: #05476f;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #075f94;--pa-btn-disabled-border-color: #075f94}.btn-success{--pa-btn-color: #fff;--pa-btn-bg: #198754;--pa-btn-border-color: #198754;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #157347;--pa-btn-hover-border-color: #146c43;--pa-btn-focus-shadow-rgb: 60, 153, 110;--pa-btn-active-color: #fff;--pa-btn-active-bg: #146c43;--pa-btn-active-border-color: #13653f;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #198754;--pa-btn-disabled-border-color: #198754}.btn-info{--pa-btn-color: #000;--pa-btn-bg: #0dcaf0;--pa-btn-border-color: #0dcaf0;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #31d2f2;--pa-btn-hover-border-color: #25cff2;--pa-btn-focus-shadow-rgb: 11, 172, 204;--pa-btn-active-color: #000;--pa-btn-active-bg: #3dd5f3;--pa-btn-active-border-color: #25cff2;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #0dcaf0;--pa-btn-disabled-border-color: #0dcaf0}.btn-warning{--pa-btn-color: #000;--pa-btn-bg: #ffc107;--pa-btn-border-color: #ffc107;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #ffca2c;--pa-btn-hover-border-color: #ffc720;--pa-btn-focus-shadow-rgb: 217, 164, 6;--pa-btn-active-color: #000;--pa-btn-active-bg: #ffcd39;--pa-btn-active-border-color: #ffc720;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #ffc107;--pa-btn-disabled-border-color: #ffc107}.btn-danger{--pa-btn-color: #fff;--pa-btn-bg: #dc3545;--pa-btn-border-color: #dc3545;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #bb2d3b;--pa-btn-hover-border-color: #b02a37;--pa-btn-focus-shadow-rgb: 225, 83, 97;--pa-btn-active-color: #fff;--pa-btn-active-bg: #b02a37;--pa-btn-active-border-color: #a52834;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #dc3545;--pa-btn-disabled-border-color: #dc3545}.btn-light{--pa-btn-color: #000;--pa-btn-bg: #f8f9fa;--pa-btn-border-color: #f8f9fa;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #d3d4d5;--pa-btn-hover-border-color: #c6c7c8;--pa-btn-focus-shadow-rgb: 211, 212, 213;--pa-btn-active-color: #000;--pa-btn-active-bg: #c6c7c8;--pa-btn-active-border-color: #babbbc;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #f8f9fa;--pa-btn-disabled-border-color: #f8f9fa}.btn-dark{--pa-btn-color: #fff;--pa-btn-bg: #212529;--pa-btn-border-color: #212529;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #424649;--pa-btn-hover-border-color: #373b3e;--pa-btn-focus-shadow-rgb: 66, 70, 73;--pa-btn-active-color: #fff;--pa-btn-active-bg: #4d5154;--pa-btn-active-border-color: #373b3e;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #212529;--pa-btn-disabled-border-color: #212529}.btn-outline-primary{--pa-btn-color: #021a34;--pa-btn-border-color: #021a34;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #021a34;--pa-btn-hover-border-color: #021a34;--pa-btn-focus-shadow-rgb: 2, 26, 52;--pa-btn-active-color: #fff;--pa-btn-active-bg: #021a34;--pa-btn-active-border-color: #021a34;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #021a34;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #021a34;--pa-gradient: none}.btn-outline-secondary{--pa-btn-color: #075f94;--pa-btn-border-color: #075f94;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #075f94;--pa-btn-hover-border-color: #075f94;--pa-btn-focus-shadow-rgb: 7, 95, 148;--pa-btn-active-color: #fff;--pa-btn-active-bg: #075f94;--pa-btn-active-border-color: #075f94;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #075f94;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #075f94;--pa-gradient: none}.btn-outline-success{--pa-btn-color: #198754;--pa-btn-border-color: #198754;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #198754;--pa-btn-hover-border-color: #198754;--pa-btn-focus-shadow-rgb: 25, 135, 84;--pa-btn-active-color: #fff;--pa-btn-active-bg: #198754;--pa-btn-active-border-color: #198754;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #198754;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #198754;--pa-gradient: none}.btn-outline-info{--pa-btn-color: #0dcaf0;--pa-btn-border-color: #0dcaf0;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #0dcaf0;--pa-btn-hover-border-color: #0dcaf0;--pa-btn-focus-shadow-rgb: 13, 202, 240;--pa-btn-active-color: #000;--pa-btn-active-bg: #0dcaf0;--pa-btn-active-border-color: #0dcaf0;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #0dcaf0;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #0dcaf0;--pa-gradient: none}.btn-outline-warning{--pa-btn-color: #ffc107;--pa-btn-border-color: #ffc107;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #ffc107;--pa-btn-hover-border-color: #ffc107;--pa-btn-focus-shadow-rgb: 255, 193, 7;--pa-btn-active-color: #000;--pa-btn-active-bg: #ffc107;--pa-btn-active-border-color: #ffc107;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #ffc107;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #ffc107;--pa-gradient: none}.btn-outline-danger{--pa-btn-color: #dc3545;--pa-btn-border-color: #dc3545;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #dc3545;--pa-btn-hover-border-color: #dc3545;--pa-btn-focus-shadow-rgb: 220, 53, 69;--pa-btn-active-color: #fff;--pa-btn-active-bg: #dc3545;--pa-btn-active-border-color: #dc3545;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #dc3545;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #dc3545;--pa-gradient: none}.btn-outline-light{--pa-btn-color: #f8f9fa;--pa-btn-border-color: #f8f9fa;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #f8f9fa;--pa-btn-hover-border-color: #f8f9fa;--pa-btn-focus-shadow-rgb: 248, 249, 250;--pa-btn-active-color: #000;--pa-btn-active-bg: #f8f9fa;--pa-btn-active-border-color: #f8f9fa;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #f8f9fa;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #f8f9fa;--pa-gradient: none}.btn-outline-dark{--pa-btn-color: #212529;--pa-btn-border-color: #212529;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #212529;--pa-btn-hover-border-color: #212529;--pa-btn-focus-shadow-rgb: 33, 37, 41;--pa-btn-active-color: #fff;--pa-btn-active-bg: #212529;--pa-btn-active-border-color: #212529;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #212529;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #212529;--pa-gradient: none}.btn-link{--pa-btn-font-weight: 400;--pa-btn-color: var(--pa-link-color);--pa-btn-bg: transparent;--pa-btn-border-color: transparent;--pa-btn-hover-color: var(--pa-link-hover-color);--pa-btn-hover-border-color: transparent;--pa-btn-active-color: var(--pa-link-hover-color);--pa-btn-active-border-color: transparent;--pa-btn-disabled-color: #6c757d;--pa-btn-disabled-border-color: transparent;--pa-btn-box-shadow: 0 0 0 #000;--pa-btn-focus-shadow-rgb: 40, 60, 82;text-decoration:underline}.btn-link:focus-visible{color:var(--pa-btn-color)}.btn-link:hover{color:var(--pa-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--pa-btn-padding-y: 0.5rem;--pa-btn-padding-x: 1rem;--pa-btn-font-size:1.25rem;--pa-btn-border-radius: var(--pa-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--pa-btn-padding-y: 0.25rem;--pa-btn-padding-x: 0.5rem;--pa-btn-font-size:0.875rem;--pa-btn-border-radius: var(--pa-border-radius-sm)}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.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{--pa-dropdown-zindex: 1000;--pa-dropdown-min-width: 10rem;--pa-dropdown-padding-x: 0;--pa-dropdown-padding-y: 0.5rem;--pa-dropdown-spacer: 0.125rem;--pa-dropdown-font-size:1rem;--pa-dropdown-color: var(--pa-body-color);--pa-dropdown-bg: var(--pa-body-bg);--pa-dropdown-border-color: var(--pa-border-color-translucent);--pa-dropdown-border-radius: var(--pa-border-radius);--pa-dropdown-border-width: var(--pa-border-width);--pa-dropdown-inner-border-radius: calc(var(--pa-border-radius) - var(--pa-border-width));--pa-dropdown-divider-bg: var(--pa-border-color-translucent);--pa-dropdown-divider-margin-y: 0.5rem;--pa-dropdown-box-shadow: var(--pa-box-shadow);--pa-dropdown-link-color: var(--pa-body-color);--pa-dropdown-link-hover-color: var(--pa-body-color);--pa-dropdown-link-hover-bg: var(--pa-tertiary-bg);--pa-dropdown-link-active-color: #fff;--pa-dropdown-link-active-bg: #021a34;--pa-dropdown-link-disabled-color: var(--pa-tertiary-color);--pa-dropdown-item-padding-x: 1rem;--pa-dropdown-item-padding-y: 0.25rem;--pa-dropdown-header-color: #6c757d;--pa-dropdown-header-padding-x: 1rem;--pa-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--pa-dropdown-zindex);display:none;min-width:var(--pa-dropdown-min-width);padding:var(--pa-dropdown-padding-y) var(--pa-dropdown-padding-x);margin:0;font-size:var(--pa-dropdown-font-size);color:var(--pa-dropdown-color);text-align:left;list-style:none;background-color:var(--pa-dropdown-bg);background-clip:padding-box;border:var(--pa-dropdown-border-width) solid var(--pa-dropdown-border-color);border-radius:var(--pa-dropdown-border-radius);box-shadow:var(--pa-dropdown-box-shadow)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--pa-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(--pa-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(--pa-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(--pa-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(--pa-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--pa-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--pa-dropdown-item-padding-y) var(--pa-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--pa-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0;border-radius:var(--pa-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--pa-dropdown-link-hover-color);background-color:var(--pa-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--pa-dropdown-link-active-color);text-decoration:none;background-color:var(--pa-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--pa-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(--pa-dropdown-header-padding-y) var(--pa-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--pa-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--pa-dropdown-item-padding-y) var(--pa-dropdown-item-padding-x);color:var(--pa-dropdown-link-color)}.dropdown-menu-dark{--pa-dropdown-color: #dee2e6;--pa-dropdown-bg: #343a40;--pa-dropdown-border-color: var(--pa-border-color-translucent);--pa-dropdown-box-shadow: ;--pa-dropdown-link-color: #dee2e6;--pa-dropdown-link-hover-color: #fff;--pa-dropdown-divider-bg: var(--pa-border-color-translucent);--pa-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--pa-dropdown-link-active-color: #fff;--pa-dropdown-link-active-bg: #021a34;--pa-dropdown-link-disabled-color: #adb5bd;--pa-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--pa-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--pa-border-width)*-1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group.show .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--pa-border-width)*-1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--pa-nav-link-padding-x: 1rem;--pa-nav-link-padding-y: 0.5rem;--pa-nav-link-font-weight: ;--pa-nav-link-color: var(--pa-link-color);--pa-nav-link-hover-color: var(--pa-link-hover-color);--pa-nav-link-disabled-color: var(--pa-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--pa-nav-link-padding-y) var(--pa-nav-link-padding-x);font-size:var(--pa-nav-link-font-size);font-weight:var(--pa-nav-link-font-weight);color:var(--pa-nav-link-color);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(--pa-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(2,26,52,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--pa-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--pa-nav-tabs-border-width: var(--pa-border-width);--pa-nav-tabs-border-color: var(--pa-border-color);--pa-nav-tabs-border-radius: var(--pa-border-radius);--pa-nav-tabs-link-hover-border-color: var(--pa-secondary-bg) var(--pa-secondary-bg) var(--pa-border-color);--pa-nav-tabs-link-active-color: var(--pa-emphasis-color);--pa-nav-tabs-link-active-bg: var(--pa-body-bg);--pa-nav-tabs-link-active-border-color: var(--pa-border-color) var(--pa-border-color) var(--pa-body-bg);border-bottom:var(--pa-nav-tabs-border-width) solid var(--pa-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--pa-nav-tabs-border-width));border:var(--pa-nav-tabs-border-width) solid rgba(0,0,0,0);border-top-left-radius:var(--pa-nav-tabs-border-radius);border-top-right-radius:var(--pa-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--pa-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--pa-nav-tabs-link-active-color);background-color:var(--pa-nav-tabs-link-active-bg);border-color:var(--pa-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--pa-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--pa-nav-pills-border-radius: var(--pa-border-radius);--pa-nav-pills-link-active-color: #fff;--pa-nav-pills-link-active-bg: #021a34}.nav-pills .nav-link{border-radius:var(--pa-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--pa-nav-pills-link-active-color);background-color:var(--pa-nav-pills-link-active-bg)}.nav-underline{--pa-nav-underline-gap: 1rem;--pa-nav-underline-border-width: 0.125rem;--pa-nav-underline-link-active-color: var(--pa-emphasis-color);gap:var(--pa-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--pa-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(--pa-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--pa-navbar-padding-x: 0;--pa-navbar-padding-y: 0.5rem;--pa-navbar-color: rgba(var(--pa-emphasis-color-rgb), 0.65);--pa-navbar-hover-color: rgba(var(--pa-emphasis-color-rgb), 0.8);--pa-navbar-disabled-color: rgba(var(--pa-emphasis-color-rgb), 0.3);--pa-navbar-active-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-brand-padding-y: 0.3125rem;--pa-navbar-brand-margin-end: 1rem;--pa-navbar-brand-font-size: 1.25rem;--pa-navbar-brand-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-brand-hover-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-nav-link-padding-x: 0.5rem;--pa-navbar-toggler-padding-y: 0.25rem;--pa-navbar-toggler-padding-x: 0.75rem;--pa-navbar-toggler-font-size: 1.25rem;--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--pa-navbar-toggler-border-color: rgba(var(--pa-emphasis-color-rgb), 0.15);--pa-navbar-toggler-border-radius: var(--pa-border-radius);--pa-navbar-toggler-focus-width: 0.25rem;--pa-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--pa-navbar-padding-y) var(--pa-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--pa-navbar-brand-padding-y);padding-bottom:var(--pa-navbar-brand-padding-y);margin-right:var(--pa-navbar-brand-margin-end);font-size:var(--pa-navbar-brand-font-size);color:var(--pa-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--pa-navbar-brand-hover-color)}.navbar-nav{--pa-nav-link-padding-x: 0;--pa-nav-link-padding-y: 0.5rem;--pa-nav-link-font-weight: ;--pa-nav-link-color: var(--pa-navbar-color);--pa-nav-link-hover-color: var(--pa-navbar-hover-color);--pa-nav-link-disabled-color: var(--pa-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--pa-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--pa-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--pa-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--pa-navbar-toggler-padding-y) var(--pa-navbar-toggler-padding-x);font-size:var(--pa-navbar-toggler-font-size);line-height:1;color:var(--pa-navbar-color);background-color:rgba(0,0,0,0);border:var(--pa-border-width) solid var(--pa-navbar-toggler-border-color);border-radius:var(--pa-navbar-toggler-border-radius);transition:var(--pa-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(--pa-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--pa-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--pa-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--pa-navbar-color: rgba(255, 255, 255, 0.55);--pa-navbar-hover-color: rgba(255, 255, 255, 0.75);--pa-navbar-disabled-color: rgba(255, 255, 255, 0.25);--pa-navbar-active-color: #fff;--pa-navbar-brand-color: #fff;--pa-navbar-brand-hover-color: #fff;--pa-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.badge{--pa-badge-padding-x: 0.65em;--pa-badge-padding-y: 0.35em;--pa-badge-font-size:0.75em;--pa-badge-font-weight: 700;--pa-badge-color: #fff;--pa-badge-border-radius: var(--pa-border-radius);display:inline-block;padding:var(--pa-badge-padding-y) var(--pa-badge-padding-x);font-size:var(--pa-badge-font-size);font-weight:var(--pa-badge-font-weight);line-height:1;color:var(--pa-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--pa-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--pa-alert-bg: transparent;--pa-alert-padding-x: 1rem;--pa-alert-padding-y: 1rem;--pa-alert-margin-bottom: 1rem;--pa-alert-color: inherit;--pa-alert-border-color: transparent;--pa-alert-border: var(--pa-border-width) solid var(--pa-alert-border-color);--pa-alert-border-radius: var(--pa-border-radius);--pa-alert-link-color: inherit;position:relative;padding:var(--pa-alert-padding-y) var(--pa-alert-padding-x);margin-bottom:var(--pa-alert-margin-bottom);color:var(--pa-alert-color);background-color:var(--pa-alert-bg);border:var(--pa-alert-border);border-radius:var(--pa-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--pa-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--pa-alert-color: var(--pa-primary-text-emphasis);--pa-alert-bg: var(--pa-primary-bg-subtle);--pa-alert-border-color: var(--pa-primary-border-subtle);--pa-alert-link-color: var(--pa-primary-text-emphasis)}.alert-secondary{--pa-alert-color: var(--pa-secondary-text-emphasis);--pa-alert-bg: var(--pa-secondary-bg-subtle);--pa-alert-border-color: var(--pa-secondary-border-subtle);--pa-alert-link-color: var(--pa-secondary-text-emphasis)}.alert-success{--pa-alert-color: var(--pa-success-text-emphasis);--pa-alert-bg: var(--pa-success-bg-subtle);--pa-alert-border-color: var(--pa-success-border-subtle);--pa-alert-link-color: var(--pa-success-text-emphasis)}.alert-info{--pa-alert-color: var(--pa-info-text-emphasis);--pa-alert-bg: var(--pa-info-bg-subtle);--pa-alert-border-color: var(--pa-info-border-subtle);--pa-alert-link-color: var(--pa-info-text-emphasis)}.alert-warning{--pa-alert-color: var(--pa-warning-text-emphasis);--pa-alert-bg: var(--pa-warning-bg-subtle);--pa-alert-border-color: var(--pa-warning-border-subtle);--pa-alert-link-color: var(--pa-warning-text-emphasis)}.alert-danger{--pa-alert-color: var(--pa-danger-text-emphasis);--pa-alert-bg: var(--pa-danger-bg-subtle);--pa-alert-border-color: var(--pa-danger-border-subtle);--pa-alert-link-color: var(--pa-danger-text-emphasis)}.alert-light{--pa-alert-color: var(--pa-light-text-emphasis);--pa-alert-bg: var(--pa-light-bg-subtle);--pa-alert-border-color: var(--pa-light-border-subtle);--pa-alert-link-color: var(--pa-light-text-emphasis)}.alert-dark{--pa-alert-color: var(--pa-dark-text-emphasis);--pa-alert-bg: var(--pa-dark-bg-subtle);--pa-alert-border-color: var(--pa-dark-border-subtle);--pa-alert-link-color: var(--pa-dark-text-emphasis)}.btn-close{--pa-btn-close-color: #000;--pa-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");--pa-btn-close-opacity: 0.5;--pa-btn-close-hover-opacity: 0.75;--pa-btn-close-focus-shadow: 0 0 0 0.25rem rgba(2, 26, 52, 0.25);--pa-btn-close-focus-opacity: 1;--pa-btn-close-disabled-opacity: 0.25;--pa-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--pa-btn-close-color);background:rgba(0,0,0,0) var(--pa-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--pa-btn-close-opacity)}.btn-close:hover{color:var(--pa-btn-close-color);text-decoration:none;opacity:var(--pa-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--pa-btn-close-focus-shadow);opacity:var(--pa-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;opacity:var(--pa-btn-close-disabled-opacity)}.btn-close-white{filter:var(--pa-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--pa-btn-close-white-filter)}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--pa-primary-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--pa-secondary-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--pa-success-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--pa-info-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--pa-warning-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--pa-danger-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--pa-light-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--pa-dark-rgb), var(--pa-bg-opacity, 1)) !important}.link-primary{color:RGBA(var(--pa-primary-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-primary-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(2, 21, 42, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(2, 21, 42, var(--pa-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--pa-secondary-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-secondary-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(6, 76, 118, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(6, 76, 118, var(--pa-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--pa-success-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-success-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20, 108, 67, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(20, 108, 67, var(--pa-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--pa-info-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-info-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61, 213, 243, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(61, 213, 243, var(--pa-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--pa-warning-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-warning-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255, 205, 57, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 205, 57, var(--pa-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--pa-danger-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-danger-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176, 42, 55, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(176, 42, 55, var(--pa-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--pa-light-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-light-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--pa-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--pa-dark-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-dark-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, var(--pa-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--pa-focus-ring-x, 0) var(--pa-focus-ring-y, 0) var(--pa-focus-ring-blur, 0) var(--pa-focus-ring-width) var(--pa-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;text-decoration-color:rgba(var(--pa-link-color-rgb), var(--pa-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--pa-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--pa-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--pa-aspect-ratio: 100%}.ratio-4x3{--pa-aspect-ratio: 75%}.ratio-16x9{--pa-aspect-ratio: 56.25%}.ratio-21x9{--pa-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--pa-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:var(--pa-box-shadow) !important}.shadow-sm{box-shadow:var(--pa-box-shadow-sm) !important}.shadow-lg{box-shadow:var(--pa-box-shadow-lg) !important}.shadow-none{box-shadow:none !important}.focus-ring-primary{--pa-focus-ring-color: rgba(var(--pa-primary-rgb), var(--pa-focus-ring-opacity))}.focus-ring-secondary{--pa-focus-ring-color: rgba(var(--pa-secondary-rgb), var(--pa-focus-ring-opacity))}.focus-ring-success{--pa-focus-ring-color: rgba(var(--pa-success-rgb), var(--pa-focus-ring-opacity))}.focus-ring-info{--pa-focus-ring-color: rgba(var(--pa-info-rgb), var(--pa-focus-ring-opacity))}.focus-ring-warning{--pa-focus-ring-color: rgba(var(--pa-warning-rgb), var(--pa-focus-ring-opacity))}.focus-ring-danger{--pa-focus-ring-color: rgba(var(--pa-danger-rgb), var(--pa-focus-ring-opacity))}.focus-ring-light{--pa-focus-ring-color: rgba(var(--pa-light-rgb), var(--pa-focus-ring-opacity))}.focus-ring-dark{--pa-focus-ring-color: rgba(var(--pa-dark-rgb), var(--pa-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(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-start-0{border-left:0 !important}.border-primary{--pa-border-opacity: 1;border-color:rgba(var(--pa-primary-rgb), var(--pa-border-opacity)) !important}.border-secondary{--pa-border-opacity: 1;border-color:rgba(var(--pa-secondary-rgb), var(--pa-border-opacity)) !important}.border-success{--pa-border-opacity: 1;border-color:rgba(var(--pa-success-rgb), var(--pa-border-opacity)) !important}.border-info{--pa-border-opacity: 1;border-color:rgba(var(--pa-info-rgb), var(--pa-border-opacity)) !important}.border-warning{--pa-border-opacity: 1;border-color:rgba(var(--pa-warning-rgb), var(--pa-border-opacity)) !important}.border-danger{--pa-border-opacity: 1;border-color:rgba(var(--pa-danger-rgb), var(--pa-border-opacity)) !important}.border-light{--pa-border-opacity: 1;border-color:rgba(var(--pa-light-rgb), var(--pa-border-opacity)) !important}.border-dark{--pa-border-opacity: 1;border-color:rgba(var(--pa-dark-rgb), var(--pa-border-opacity)) !important}.border-black{--pa-border-opacity: 1;border-color:rgba(var(--pa-black-rgb), var(--pa-border-opacity)) !important}.border-white{--pa-border-opacity: 1;border-color:rgba(var(--pa-white-rgb), var(--pa-border-opacity)) !important}.border-primary-subtle{border-color:var(--pa-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--pa-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--pa-success-border-subtle) !important}.border-info-subtle{border-color:var(--pa-info-border-subtle) !important}.border-warning-subtle{border-color:var(--pa-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--pa-danger-border-subtle) !important}.border-light-subtle{border-color:var(--pa-light-border-subtle) !important}.border-dark-subtle{border-color:var(--pa-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{--pa-border-opacity: 0.1}.border-opacity-25{--pa-border-opacity: 0.25}.border-opacity-50{--pa-border-opacity: 0.5}.border-opacity-75{--pa-border-opacity: 0.75}.border-opacity-100{--pa-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(--pa-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--pa-text-opacity: 1;color:rgba(var(--pa-primary-rgb), var(--pa-text-opacity)) !important}.text-secondary{--pa-text-opacity: 1;color:rgba(var(--pa-secondary-rgb), var(--pa-text-opacity)) !important}.text-success{--pa-text-opacity: 1;color:rgba(var(--pa-success-rgb), var(--pa-text-opacity)) !important}.text-info{--pa-text-opacity: 1;color:rgba(var(--pa-info-rgb), var(--pa-text-opacity)) !important}.text-warning{--pa-text-opacity: 1;color:rgba(var(--pa-warning-rgb), var(--pa-text-opacity)) !important}.text-danger{--pa-text-opacity: 1;color:rgba(var(--pa-danger-rgb), var(--pa-text-opacity)) !important}.text-light{--pa-text-opacity: 1;color:rgba(var(--pa-light-rgb), var(--pa-text-opacity)) !important}.text-dark{--pa-text-opacity: 1;color:rgba(var(--pa-dark-rgb), var(--pa-text-opacity)) !important}.text-black{--pa-text-opacity: 1;color:rgba(var(--pa-black-rgb), var(--pa-text-opacity)) !important}.text-white{--pa-text-opacity: 1;color:rgba(var(--pa-white-rgb), var(--pa-text-opacity)) !important}.text-body{--pa-text-opacity: 1;color:rgba(var(--pa-body-color-rgb), var(--pa-text-opacity)) !important}.text-muted{--pa-text-opacity: 1;color:var(--pa-secondary-color) !important}.text-black-50{--pa-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--pa-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-body-secondary{--pa-text-opacity: 1;color:var(--pa-secondary-color) !important}.text-body-tertiary{--pa-text-opacity: 1;color:var(--pa-tertiary-color) !important}.text-body-emphasis{--pa-text-opacity: 1;color:var(--pa-emphasis-color) !important}.text-reset{--pa-text-opacity: 1;color:inherit !important}.text-opacity-25{--pa-text-opacity: 0.25}.text-opacity-50{--pa-text-opacity: 0.5}.text-opacity-75{--pa-text-opacity: 0.75}.text-opacity-100{--pa-text-opacity: 1}.text-primary-emphasis{color:var(--pa-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--pa-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--pa-success-text-emphasis) !important}.text-info-emphasis{color:var(--pa-info-text-emphasis) !important}.text-warning-emphasis{color:var(--pa-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--pa-danger-text-emphasis) !important}.text-light-emphasis{color:var(--pa-light-text-emphasis) !important}.text-dark-emphasis{color:var(--pa-dark-text-emphasis) !important}.link-opacity-10{--pa-link-opacity: 0.1}.link-opacity-10-hover:hover{--pa-link-opacity: 0.1}.link-opacity-25{--pa-link-opacity: 0.25}.link-opacity-25-hover:hover{--pa-link-opacity: 0.25}.link-opacity-50{--pa-link-opacity: 0.5}.link-opacity-50-hover:hover{--pa-link-opacity: 0.5}.link-opacity-75{--pa-link-opacity: 0.75}.link-opacity-75-hover:hover{--pa-link-opacity: 0.75}.link-opacity-100{--pa-link-opacity: 1}.link-opacity-100-hover:hover{--pa-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-primary{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-primary-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-secondary{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-secondary-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-success{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-success-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-info{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-info-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-warning{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-warning-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-danger{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-danger-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-light{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-light-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-dark{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-dark-rgb), var(--pa-link-underline-opacity)) !important}.link-underline{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-link-color-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--pa-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--pa-link-underline-opacity: 0}.link-underline-opacity-10{--pa-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--pa-link-underline-opacity: 0.1}.link-underline-opacity-25{--pa-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--pa-link-underline-opacity: 0.25}.link-underline-opacity-50{--pa-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--pa-link-underline-opacity: 0.5}.link-underline-opacity-75{--pa-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--pa-link-underline-opacity: 0.75}.link-underline-opacity-100{--pa-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--pa-link-underline-opacity: 1}.bg-primary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-primary-rgb), var(--pa-bg-opacity)) !important}.bg-secondary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-secondary-rgb), var(--pa-bg-opacity)) !important}.bg-success{--pa-bg-opacity: 1;background-color:rgba(var(--pa-success-rgb), var(--pa-bg-opacity)) !important}.bg-info{--pa-bg-opacity: 1;background-color:rgba(var(--pa-info-rgb), var(--pa-bg-opacity)) !important}.bg-warning{--pa-bg-opacity: 1;background-color:rgba(var(--pa-warning-rgb), var(--pa-bg-opacity)) !important}.bg-danger{--pa-bg-opacity: 1;background-color:rgba(var(--pa-danger-rgb), var(--pa-bg-opacity)) !important}.bg-light{--pa-bg-opacity: 1;background-color:rgba(var(--pa-light-rgb), var(--pa-bg-opacity)) !important}.bg-dark{--pa-bg-opacity: 1;background-color:rgba(var(--pa-dark-rgb), var(--pa-bg-opacity)) !important}.bg-black{--pa-bg-opacity: 1;background-color:rgba(var(--pa-black-rgb), var(--pa-bg-opacity)) !important}.bg-white{--pa-bg-opacity: 1;background-color:rgba(var(--pa-white-rgb), var(--pa-bg-opacity)) !important}.bg-body{--pa-bg-opacity: 1;background-color:rgba(var(--pa-body-bg-rgb), var(--pa-bg-opacity)) !important}.bg-transparent{--pa-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-secondary-bg-rgb), var(--pa-bg-opacity)) !important}.bg-body-tertiary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-tertiary-bg-rgb), var(--pa-bg-opacity)) !important}.bg-opacity-10{--pa-bg-opacity: 0.1}.bg-opacity-25{--pa-bg-opacity: 0.25}.bg-opacity-50{--pa-bg-opacity: 0.5}.bg-opacity-75{--pa-bg-opacity: 0.75}.bg-opacity-100{--pa-bg-opacity: 1}.bg-primary-subtle{background-color:var(--pa-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--pa-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--pa-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--pa-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--pa-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--pa-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--pa-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--pa-dark-bg-subtle) !important}.bg-gradient{background-image:var(--pa-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(--pa-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--pa-border-radius-sm) !important}.rounded-2{border-radius:var(--pa-border-radius) !important}.rounded-3{border-radius:var(--pa-border-radius-lg) !important}.rounded-4{border-radius:var(--pa-border-radius-xl) !important}.rounded-5{border-radius:var(--pa-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--pa-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--pa-border-radius) !important;border-top-right-radius:var(--pa-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(--pa-border-radius-sm) !important;border-top-right-radius:var(--pa-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--pa-border-radius) !important;border-top-right-radius:var(--pa-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--pa-border-radius-lg) !important;border-top-right-radius:var(--pa-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--pa-border-radius-xl) !important;border-top-right-radius:var(--pa-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--pa-border-radius-xxl) !important;border-top-right-radius:var(--pa-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(--pa-border-radius-pill) !important;border-top-right-radius:var(--pa-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--pa-border-radius) !important;border-bottom-right-radius:var(--pa-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(--pa-border-radius-sm) !important;border-bottom-right-radius:var(--pa-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--pa-border-radius) !important;border-bottom-right-radius:var(--pa-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--pa-border-radius-lg) !important;border-bottom-right-radius:var(--pa-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--pa-border-radius-xl) !important;border-bottom-right-radius:var(--pa-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--pa-border-radius-xxl) !important;border-bottom-right-radius:var(--pa-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(--pa-border-radius-pill) !important;border-bottom-right-radius:var(--pa-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--pa-border-radius) !important;border-bottom-left-radius:var(--pa-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(--pa-border-radius-sm) !important;border-bottom-left-radius:var(--pa-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--pa-border-radius) !important;border-bottom-left-radius:var(--pa-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--pa-border-radius-lg) !important;border-bottom-left-radius:var(--pa-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--pa-border-radius-xl) !important;border-bottom-left-radius:var(--pa-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--pa-border-radius-xxl) !important;border-bottom-left-radius:var(--pa-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(--pa-border-radius-pill) !important;border-bottom-left-radius:var(--pa-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--pa-border-radius) !important;border-top-left-radius:var(--pa-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(--pa-border-radius-sm) !important;border-top-left-radius:var(--pa-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--pa-border-radius) !important;border-top-left-radius:var(--pa-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--pa-border-radius-lg) !important;border-top-left-radius:var(--pa-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--pa-border-radius-xl) !important;border-top-left-radius:var(--pa-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--pa-border-radius-xxl) !important;border-top-left-radius:var(--pa-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(--pa-border-radius-pill) !important;border-top-left-radius:var(--pa-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}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}body{font-family:"Open Sans",sans-serif;font-weight:400;color:var(--text-color);background-color:var(--bg-color);max-width:1200px;margin:0 auto}.btn-primary{color:var(--text-color-reverse);background-color:var(--primary-color);border-color:var(--primary-color)}.btn-outline-primary{color:var(--primary-color);background:none;border-color:var(--primary-color)}.btn-outline-primary:hover{background-color:var(--primary-color);color:var(--text-color-reverse)}.btn-secondary{color:#fff;background-color:var(--secondary-color);border-color:var(--secondary-color)}.navbar .nav-top{height:86px}.navbar .fixed-menu{width:220px}.navbar .logo img{width:200px}a{text-decoration:underline;color:var(--link-color)}a:hover{color:var(--link-hover-color)}a:active{color:var(--link-color)}h1,.h1,h2,.h2{font-weight:500;line-height:1.25;padding-bottom:12px;padding-top:14px}h1,.h1{font-weight:600}h3,.h3{padding-top:16px}.motto .title{font-weight:600;font-size:32px;padding-top:36px}.motto .motto{font-weight:500;font-size:20px}.motto .short{font-weight:500;font-size:12px}.btn-fixed{border-width:2px;border-style:solid;width:220px;height:46px;text-transform:uppercase;font-weight:700;border-radius:5px 5px 5px 5px;vertical-align:middle;line-height:42px;padding:0;margin:16px;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)}.pactus-video video{max-width:100%;width:100%;margin-left:auto;margin-right:auto;display:block}.highlighter-rouge .highlight pre{background-color:#0d1117;padding:32px 12px 12px 12px;color:#ccc;position:relative;overflow:auto;direction:ltr}.highlighter-rouge .highlight pre button{position:absolute;top:6px;right:8px;padding:2px;background-color:gray;color:#404040;border-radius:5px;border:ridge 1px gray}.highlighter-rouge .highlight pre button:hover{cursor:pointer;background-color:#bcbabb}.nav-tabs{border-color:#0d1117 !important}.nav-tabs .nav-link{border-width:0 !important}.nav-tabs .nav-link:not(.active):hover{color:#fff !important;background-color:gray !important}.nav-tabs .active{color:#fff !important;background-color:#0d1117 !important}.table thead tr th{font-weight:700;background-color:var(--bg-color) !important}blockquote{background:#eee;border-left:10px solid #ccc;padding:16px;quotes:"“" "”" "‘" "’"}blockquote:before{color:#ccc;content:open-quote;font-size:64px;line-height:.1em;vertical-align:-0.4em}blockquote p{margin-top:16px}blockquote p:first-child{display:inline;padding-bottom:160px;margin-bottom:160px}.footer{background-color:var(--primary-color);color:var(--text-color-reverse)}.footer .section{font-size:1.75rem;font-weight:500;line-height:1.25;padding-bottom:20px}.footer li{padding-bottom:8px}.footer.anchor a{color:var(--text-color-reverse)}.footer.anchor a:link{color:var(--text-color-reverse);background-color:rgba(0,0,0,0);text-decoration:none}.footer.anchor a:hover{color:var(--text-color-reverse)}.footer .legal{color:var(--text-color-reverse);font-size:12px}.community img{margin:4px}.community_ran img{margin:4px}#btn-back-to-top{background-color:var(--primary-color);color:var(--bg-color);position:fixed;bottom:20px;right:20px;display:none}.edit-bar{padding-top:30px}.edit-bar .edit-btn,.edit-bar .edit-btn>a:hover{color:var(--text-color);text-decoration:none}.all-posts .post-link{padding-bottom:8px}.blog-post .post-date{padding-bottom:10px;color:gray}.blog-post .content{padding-top:22px;min-height:600px}.partners img{padding-top:24px}.sensifai{max-width:300px}.hexdump{font-family:monospace;font-size:12px;padding-bottom:1rem}.hexdump .offset{border-right:2px solid #708090;color:#789}.hexdump .ascii{color:dimgray}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.faq h3,.faq .h3{margin-top:20px;padding-top:16px;border-top:1px solid var(--primary-color)}.faq a{text-decoration:none}.faq .group{padding-top:16px}.faq .group .col{font-weight:600;padding-bottom:10px}.faq .separator{padding-top:12px;padding-bottom:12px}.faq .read_more{padding-top:12px}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.toc .btn,.toc a{color:var(--text-color)}.toc .btn-section{padding:.25rem .5rem;font-weight:600;background-color:rgba(0,0,0,0)}.toc .btn-section:hover,.toc .btn-section:focus{background-color:var(--bg-color)}.toc .btn-page a{padding:.1875rem .5rem;margin-top:.125rem;margin-left:1.25rem}.toc .btn-page a:hover,.toc .btn-page a:focus,.toc .btn-page .selected{background-color:var(--bg-color)}.timeline{position:relative}.timeline::after{content:"";position:absolute;width:6px;background-color:#939597;top:0;bottom:0;left:50%;margin-left:-3px}.timeline-card{position:relative;width:50%}.timeline-card .card{border:1px solid rgba(0,0,0,.175);border-radius:5px;background-color:#eee;color:#4c4c4c}.timeline-card .card a{color:#4c4c4c}.timeline-card .card .text-muted{color:#898b8d !important}.timeline-card .card-title{padding-bottom:12px;font-size:1.1rem;font-weight:500}.timeline-card::after{line-height:38px;font-size:24px;position:absolute;text-align:center;width:48px;height:48px;right:-24px;top:15px;border-radius:50%;z-index:1}.timeline-card.completed::after{content:"✅";background-color:#eee;border:5px solid #77b255}.timeline-card.ongoing::after{content:"🚧";background-color:#eee;border:5px solid #ffcb4b}.timeline-card.upcoming::after{content:"⏳";background-color:#eee;border:5px solid #478ec2}.timeline-card.left{padding:0px 50px 20px 0px;left:0}.timeline-card.right{padding:0px 0px 20px 50px;left:50%}.timeline-card.left::before{content:"";position:absolute;height:20px;width:20px;background-color:#eee;box-sizing:border-box;transform:rotate(45deg) translate(-50%);top:34px;z-index:0;right:33px;border-right:1px solid rgba(0,0,0,.175);border-top:1px solid rgba(0,0,0,.175)}.timeline-card.right::before{content:"";position:absolute;height:20px;width:20px;background-color:#eee !important;box-sizing:border-box;transform:rotate(45deg) translate(-50%);top:33px;z-index:0;left:48px;border-left:1px solid rgba(0,0,0,.175);border-bottom:1px solid rgba(0,0,0,.175)}.timeline-card.right::after{left:-24px}@media screen and (max-width: 600px){.timeline::after{left:31px}.timeline-card{width:100%;padding-left:80px !important;padding-right:25px !important}.timeline-card::before{left:77px !important}.timeline-card.left::after,.timeline-card.right::after{left:8px !important}.timeline-card.left::before{border-right:none;border-top:none;border-left:1px solid rgba(0,0,0,.175);border-bottom:1px solid rgba(0,0,0,.175)}.timeline-card.right::before{right:auto}.timeline-card.right{left:0%}}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.learn h2,.learn .h2{border-top:1px solid var(--primary-color)}[data-bs-theme=dark] blockquote{background:#14171c}[data-bs-theme=dark] .toc .btn-section::before{--svg-color: var(--text)}[data-bs-theme=dark] .fa-linux{color:#fff}/*# sourceMappingURL=custom.css.map */
\ No newline at end of file
diff --git a/ar/assets/css/custom.css.map b/ar/assets/css/custom.css.map
new file mode 100644
index 000000000..e0c48830b
--- /dev/null
+++ b/ar/assets/css/custom.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../../_sass/_vars.scss","../../../node_modules/bootstrap/scss/_root.scss","../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../node_modules/bootstrap/scss/_reboot.scss","../../../node_modules/bootstrap/scss/_variables.scss","../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../node_modules/bootstrap/scss/_type.scss","../../../node_modules/bootstrap/scss/mixins/_lists.scss","../../../node_modules/bootstrap/scss/_images.scss","../../../node_modules/bootstrap/scss/mixins/_image.scss","../../../node_modules/bootstrap/scss/mixins/_box-shadow.scss","../../../node_modules/bootstrap/scss/_containers.scss","../../../node_modules/bootstrap/scss/mixins/_container.scss","../../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../../node_modules/bootstrap/scss/_grid.scss","../../../node_modules/bootstrap/scss/mixins/_grid.scss","../../../node_modules/bootstrap/scss/_tables.scss","../../../node_modules/bootstrap/scss/mixins/_table-variants.scss","../../../node_modules/bootstrap/scss/forms/_labels.scss","../../../node_modules/bootstrap/scss/forms/_form-text.scss","../../../node_modules/bootstrap/scss/forms/_form-control.scss","../../../node_modules/bootstrap/scss/mixins/_transition.scss","../../../node_modules/bootstrap/scss/mixins/_gradients.scss","../../../node_modules/bootstrap/scss/forms/_form-select.scss","../../../node_modules/bootstrap/scss/forms/_form-check.scss","../../../node_modules/bootstrap/scss/forms/_form-range.scss","../../../node_modules/bootstrap/scss/forms/_floating-labels.scss","../../../node_modules/bootstrap/scss/forms/_input-group.scss","../../../node_modules/bootstrap/scss/mixins/_forms.scss","../../../node_modules/bootstrap/scss/_buttons.scss","../../../node_modules/bootstrap/scss/mixins/_buttons.scss","../../../node_modules/bootstrap/scss/_transitions.scss","../../../node_modules/bootstrap/scss/_dropdown.scss","../../../node_modules/bootstrap/scss/mixins/_caret.scss","../../../node_modules/bootstrap/scss/_button-group.scss","../../../node_modules/bootstrap/scss/_nav.scss","../../../node_modules/bootstrap/scss/_navbar.scss","../../../node_modules/bootstrap/scss/_badge.scss","../../../node_modules/bootstrap/scss/_alert.scss","../../../node_modules/bootstrap/scss/_close.scss","../../../node_modules/bootstrap/scss/mixins/_clearfix.scss","../../../node_modules/bootstrap/scss/helpers/_color-bg.scss","../../../node_modules/bootstrap/scss/helpers/_colored-links.scss","../../../node_modules/bootstrap/scss/helpers/_focus-ring.scss","../../../node_modules/bootstrap/scss/helpers/_icon-link.scss","../../../node_modules/bootstrap/scss/helpers/_ratio.scss","../../../node_modules/bootstrap/scss/helpers/_position.scss","../../../node_modules/bootstrap/scss/helpers/_stacks.scss","../../../node_modules/bootstrap/scss/helpers/_visually-hidden.scss","../../../node_modules/bootstrap/scss/mixins/_visually-hidden.scss","../../../node_modules/bootstrap/scss/helpers/_stretched-link.scss","../../../node_modules/bootstrap/scss/helpers/_text-truncation.scss","../../../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../../../node_modules/bootstrap/scss/helpers/_vr.scss","../../../node_modules/bootstrap/scss/mixins/_utilities.scss","../../../node_modules/bootstrap/scss/utilities/_api.scss","../../_sass/_styles.scss","../../_sass/_hexdump.scss","../../_sass/_faq.scss","../../_sass/_toc.scss","../../_sass/_roadmap.scss","../../_sass/_learn.scss","../../_sass/dark_mode.scss"],"names":[],"mappings":"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,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBK/OR,eCvDE,eACA,gBD2DF,aC5DE,eACA,gBD8DF,kBACE,qBAEA,mCACE,aFsoB0B,ME5nB9B,YL8MM,UALI,QKvMR,yBAIF,YACE,cFiUO,KH1HH,UALI,QK/LR,wBACE,gBAIJ,mBACE,iBACA,cFuTO,KH1HH,UALI,QKtLR,MFtFS,QEwFT,2BACE,aEhGJ,WCIE,eAGA,YDDF,eACE,QJ6jDkC,OI5jDlC,iBJ6jDkC,kBI5jDlC,2DHGE,sCKLE,WARW,wBDKf,eAGA,YDcF,QAEE,qBAGF,YACE,oBACA,cAGF,gBPyPM,UALI,QOlPR,MJgjDkC,0BOllDlC,mGCHA,sBACA,iBACA,WACA,0CACA,yCACA,kBACA,iBCsDE,yBF5CE,yBACE,UPkee,OSvbnB,yBF5CE,uCACE,UPkee,OSvbnB,yBF5CE,qDACE,UPkee,OSvbnB,0BF5CE,mEACE,UPkee,QSvbnB,0BF5CE,kFACE,UPkee,QUlfvB,MAEI,2JAKF,KCNA,sBACA,iBACA,aACA,eAEA,uCACA,2CACA,0CDEE,OCOF,cACA,WACA,eACA,0CACA,yCACA,8BA+CI,KACE,YAGF,iBApCJ,cACA,WAcA,cACE,cACA,WAFF,cACE,cACA,UAFF,cACE,cACA,mBAFF,cACE,cACA,UAFF,cACE,cACA,UAFF,cACE,cACA,mBA+BE,UAhDJ,cACA,WAqDQ,OAhEN,cACA,kBA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,UA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,UA+DM,OAhE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AEE,sBAPF,mBAEE,oBAGF,mBAEE,oBAPF,mBAEE,sBAGF,mBAEE,sBAPF,mBAEE,oBAGF,mBAEE,qBCrHV,OAEE,+BACA,4BACA,gCACA,6BAEA,2CACA,iCACA,gDACA,kCACA,mDACA,gEACA,kDACA,8DACA,iDACA,+DAEA,WACA,cZkYO,KYjYP,eZusB4B,IYtsB5B,0CAOA,yBACE,oBAEA,qFACA,oCACA,oBZ+sB0B,uBY9sB1B,2GAGF,aACE,uBAGF,aACE,sBAIJ,qBACE,6DAOF,aACE,iBAUA,4BACE,sBAeF,gCACE,sCAGA,kCACE,sCAOJ,oCACE,sBAGF,qCACE,mBAUF,2CACE,qDACA,+CAMF,yDACE,qDACA,+CAQJ,cACE,qDACA,+CAQA,8BACE,oDACA,8CC5IF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,iBAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,YAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,cAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,aAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,YAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CDiJA,kBACE,gBACA,iCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,6BGyFA,qBACE,gBACA,kCH3FF,6BGyFA,sBACE,gBACA,kCEnKN,YACE,cdu2BsC,Mc91BxC,gBACE,oDACA,uDACA,gBjB8QI,UALI,QiBrQR,Yd+lB4B,Ic3lB9B,mBACE,kDACA,qDjBoQI,UALI,QiB3PV,mBACE,mDACA,sDjB8PI,UALI,SkBtRV,WACE,Wf+1BsC,OHrkBlC,UALI,QkBjRR,Mf+1BsC,0BgBp2BxC,cACE,cACA,WACA,uBnBwRI,UALI,KmBhRR,YhBkmB4B,IgBjmB5B,YhBymB4B,IgBxmB5B,MhB43BsC,qBgB33BtC,gBACA,iBhBq3BsC,kBgBp3BtC,4BACA,2DfGE,sCKLE,WARW,2BWUX,WDMJ,0DCFI,uCDhBN,cCiBQ,iBDGN,yBACE,gBAEA,wDACE,eAKJ,oBACE,MhBs2BoC,qBgBr2BpC,iBhBg2BoC,kBgB/1BpC,ahB82BoC,QgB72BpC,UVvBE,WARW,0DUwCf,2CAME,eAMA,aAKA,SAKF,qCACE,cACA,UAIF,2BACE,MhB40BoC,0BgB10BpC,UAQF,uBAEE,iBhB8yBoC,uBgB3yBpC,UAIF,oCACE,uBACA,0BACA,kBhBorB0B,OgBnrB1B,MhBsyBoC,qBkBp4BtC,iBlBqiCgC,sBgBr8B9B,oBACA,qBACA,mBACA,eACA,wBhBgsB0B,uBgB/rB1B,gBCzFE,WD0FF,mHCtFE,uCD0EJ,oCCzEM,iBDwFN,yEACE,iBhB47B8B,uBgBn7BlC,wBACE,cACA,WACA,kBACA,gBACA,YhBwf4B,IgBvf5B,MhB2xBsC,qBgB1xBtC,+BACA,2BACA,sCAEA,8BACE,UAGF,gFAEE,gBACA,eAWJ,iBACE,WhB4wBsC,wDgB3wBtC,qBnByII,UALI,SIvQN,yCeuIF,uCACE,qBACA,wBACA,kBhBooB0B,MgBhoB9B,iBACE,WhBgwBsC,sDgB/vBtC,mBnB4HI,UALI,QIvQN,yCeoJF,uCACE,mBACA,qBACA,kBhB2nB0B,KgBnnB5B,sBACE,WhB6uBoC,yDgB1uBtC,yBACE,WhB0uBoC,wDgBvuBtC,yBACE,WhBuuBoC,sDgBluBxC,oBACE,MhBquBsC,KgBpuBtC,OhB8tBsC,yDgB7tBtC,QhBilB4B,QgB/kB5B,mDACE,eAGF,uCACE,oBfvLA,sCe2LF,0CACE,oBf5LA,sCegMF,2ChB8sBsC,wDgB7sBtC,2ChB8sBsC,sDmB75BxC,aACE,yPAEA,cACA,WACA,uCtBqRI,UALI,KsB7QR,YnB+lB4B,ImB9lB5B,YnBsmB4B,ImBrmB5B,MnBy3BsC,qBmBx3BtC,gBACA,iBnBk3BsC,kBmBj3BtC,kFACA,4BACA,oBnB+9BkC,oBmB99BlC,gBnB+9BkC,UmB99BlC,2DlBHE,sCKLE,WARW,2BWUX,WESJ,0DFLI,uCEfN,aFgBQ,iBEMN,mBACE,anBs3BoC,QmBr3BpC,UbfE,WARW,0DagCf,0DAEE,cnB6uB0B,OmB5uB1B,sBAGF,sBAEE,iBnBu1BoC,uBmBl1BtC,4BACE,oBACA,uCAIJ,gBACE,YnBsuB4B,OmBruB5B,enBquB4B,OmBpuB5B,anBquB4B,MHlgBxB,UALI,SIvQN,yCkB8CJ,gBACE,YnBkuB4B,MmBjuB5B,enBiuB4B,MmBhuB5B,anBiuB4B,KHtgBxB,UALI,QIvQN,yCkBwDA,kCACE,yPCxEN,YACE,cACA,WpBq6BwC,OoBp6BxC,apBq6BwC,MoBp6BxC,cpBq6BwC,QoBn6BxC,8BACE,WACA,mBAIJ,oBACE,cpB25BwC,MoB15BxC,eACA,iBAEA,sCACE,YACA,oBACA,cAIJ,kBACE,sCAEA,cACA,MpB04BwC,IoBz4BxC,OpBy4BwC,IoBx4BxC,iBACA,mBACA,gBACA,yCACA,+CACA,4BACA,2BACA,wBACA,OpB24BwC,oDoB14BxC,yBAGA,iCnB3BE,oBmB+BF,8BAEE,cpBm4BsC,IoBh4BxC,yBACE,OpB03BsC,gBoBv3BxC,wBACE,apBs1BoC,QoBr1BpC,UACA,WpB8foB,+BoB3ftB,0BACE,iBzBlEY,QyBmEZ,azBnEY,QyBqEZ,yCAII,wPAIJ,sCAII,gKAKN,+CACE,iBzBvFY,QyBwFZ,azBxFY,QyB6FV,kPAIJ,2BACE,oBACA,YACA,QpBk2BuC,GoB31BvC,2FACE,eACA,QpBy1BqC,GoB30B3C,aACE,apBo1BgC,MoBl1BhC,+BACE,4KAEA,MpB80B8B,IoB70B9B,mBACA,0CACA,gCnBjHA,kBgBHE,WGsHF,qCHlHE,uCG0GJ,+BHzGM,iBGmHJ,qCACE,8JAGF,uCACE,oBpB60B4B,aoBx0B1B,2JAKN,gCACE,cpBwzB8B,MoBvzB9B,eAEA,kDACE,oBACA,cAKN,mBACE,qBACA,apBsyBgC,KoBnyBlC,WACE,kBACA,sBACA,oBAIE,mDACE,oBACA,YACA,QpBspBwB,IoB/oB1B,8EACE,kLCnLN,YACE,WACA,cACA,UACA,gBACA,+BAEA,kBACE,UAIA,mDrB8gCuC,8CqB7gCvC,+CrB6gCuC,8CqB1gCzC,8BACE,SAGF,kCACE,MrB+/BuC,KqB9/BvC,OrB8/BuC,KqB7/BvC,oBACA,gBH1BF,iBvBJc,Q0BgCZ,OrB6/BuC,EC1gCvC,mBKLE,WARW,8BWUX,WImBF,4FJfE,uCIMJ,kCJLM,iBIgBJ,yCHjCF,iBlB8hCyC,QqBx/BzC,2CACE,MrBw+B8B,KqBv+B9B,OrBw+B8B,MqBv+B9B,oBACA,OrBu+B8B,QqBt+B9B,iBrBu+B8B,uBqBt+B9B,2BpB7BA,mBKLE,WARW,2Be+Cf,8BACE,MrBo+BuC,KqBn+BvC,OrBm+BuC,KqBl+BvC,gBHpDF,iBvBJc,Q0B0DZ,OrBm+BuC,EC1gCvC,mBKLE,WARW,8BWUX,WI6CF,4FJzCE,uCIiCJ,8BJhCM,iBI0CJ,qCH3DF,iBlB8hCyC,QqB99BzC,8BACE,MrB88B8B,KqB78B9B,OrB88B8B,MqB78B9B,oBACA,OrB68B8B,QqB58B9B,iBrB68B8B,uBqB58B9B,2BpBvDA,mBKLE,WARW,2BeyEf,qBACE,oBAEA,2CACE,iBrBg9BqC,0BqB78BvC,uCACE,iBrB48BqC,0BsBniC3C,eACE,kBAEA,gGAGE,OtBwiCoC,gDsBviCpC,WtBuiCoC,gDsBtiCpC,YtBuiCoC,KsBpiCtC,qBACE,kBACA,MACA,OACA,UACA,YACA,oBACA,gBACA,iBACA,uBACA,mBACA,oBACA,kDACA,qBLRE,WKSF,kDLLE,uCKTJ,qBLUM,iBKON,oEAEE,oBAEA,8FACE,oBAGF,oMAEE,YtB4gCkC,SsB3gClC,etB4gCkC,QsBzgCpC,sGACE,YtBugCkC,SsBtgClC,etBugCkC,QsBngCtC,4BACE,YtBigCoC,SsBhgCpC,etBigCo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ACA,6DACA,8BACA,8BACA,wCDyFA,aCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,UCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,aCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,YCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,WCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,yCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,UCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,sCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDmHA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,qCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,uBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,sCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,kBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,oBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,mBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,yCACA,4BACA,4BACA,sCACA,6DACA,iCACA,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UACA,sDAMJ,qBACE,qBACA,YACA,aACA,sBACA,kDACA,4BACA,2BACA,qBAGF,mBACE,yCACA,gBvB1HE,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,0BuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,0BuBsIA,mBAEI,iBACA,2BAEA,+BACE,mBAEA,8CACE,kBAGF,yCACE,kDACA,iDAIJ,sCACE,iBAGF,oCACE,wBACA,gBAGF,mCACE,aAGF,8BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,gDACE,aAGF,8CACE,aACA,YACA,UACA,oBAtDR,eAEI,iBACA,2BAEA,2BACE,mBAEA,0CACE,kBAGF,qCACE,kDACA,iDAIJ,kCACE,iBAGF,gCACE,wBACA,gBAGF,+BACE,aAGF,0BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,4CACE,aAGF,0CACE,aACA,YACA,UACA,mBAiBZ,yCAGE,6CACA,mDACA,sDACA,+BACA,8BACA,oCACA,2DACA,+QAME,0CACE,+QCxRN,OAEE,6BACA,6BpCuRI,qBALI,OoChRR,4BACA,uBACA,kDAGA,qBACA,4DpC+QI,UALI,0BoCxQR,wCACA,cACA,4BACA,kBACA,mBACA,wBhCJE,4CgCSF,aACE,aAKJ,YACE,kBACA,SChCF,OAEE,2BACA,2BACA,2BACA,+BACA,0BACA,qCACA,6EACA,kDACA,+BAGA,kBACA,4DACA,4CACA,4BACA,oCACA,8BjCHE,4CiCQJ,eAEE,cAIF,YACE,YlC6kB4B,IkC5kB5B,iCAQF,mBACE,clCo+C8B,KkCj+C9B,8BACE,kBACA,MACA,QACA,UACA,qBAQF,eACE,kDACA,2CACA,yDACA,uDAJF,iBACE,oDACA,6CACA,2DACA,yDAJF,eACE,kDACA,2CACA,yDACA,uDAJF,YACE,+CACA,wCACA,sDACA,oDAJF,eACE,kDACA,2CACA,yDACA,uDAJF,cACE,iDACA,0CACA,wDACA,sDAJF,aACE,gDACA,yCACA,uDACA,qDAJF,YACE,+CACA,wCACA,sDACA,oDC3DJ,WAEE,2BACA,qVACA,4BACA,mCACA,iEACA,gCACA,sCACA,wEAGA,uBACA,MnCmpD2B,ImClpD3B,OnCkpD2B,ImCjpD3B,oBACA,gCACA,0EACA,SlCJE,sBkCMF,oCAGA,iBACE,gCACA,qBACA,0CAGF,iBACE,UACA,4CACA,0CAGF,wCAEE,oBACA,iBACA,6CAQJ,iBAHE,wCASE,gCATF,wCC/CA,iBACE,cACA,WACA,WCHF,iBACE,sBACA,iFAFF,mBACE,sBACA,mFAFF,iBACE,sBACA,iFAFF,cACE,sBACA,8EAFF,iBACE,sBACA,iFAFF,gBACE,sBACA,gFAFF,eACE,sBACA,+EAFF,cACE,sBACA,8ECFF,cACE,wEACA,kGAGE,wCAGE,4DACA,sFATN,gBACE,0EACA,oGAGE,4CAGE,6DACA,uFATN,cACE,wEACA,kGAGE,wCAGE,8DACA,wFATN,WACE,qEACA,+FAGE,kCAGE,+DACA,yFATN,cACE,wEACA,kGAGE,wCAGE,+DACA,yFATN,aACE,uEACA,iGAGE,sCAGE,8DACA,wFATN,YACE,sEACA,gGAGE,oCAGE,gEACA,0FATN,WACE,qEACA,+FAGE,kCAGE,6DACA,uFAOR,oBACE,+EACA,yGAGE,oDAEE,kFACA,4GC1BN,kBACE,UAEA,kJCHF,WACE,oBACA,IxC6c4B,QwC5c5B,mBACA,kFACA,sBxC2c4B,MwC1c5B,2BAEA,eACE,cACA,MxCuc0B,IwCtc1B,OxCsc0B,IwCrc1B,kBvBIE,WuBHF,0BvBOE,uCuBZJ,evBaM,iBuBDJ,8DACE,mECnBN,OACE,kBACA,WAEA,eACE,cACA,mCACA,WAGF,SACE,kBACA,MACA,OACA,WACA,YAKF,WACE,wBADF,WACE,uBADF,YACE,0BADF,YACE,kCCrBJ,WACE,eACA,MACA,QACA,OACA,Q1CumCkC,K0CpmCpC,cACE,eACA,QACA,SACA,OACA,Q1C+lCkC,K0CvlChC,YACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,eACE,gBACA,SACA,Q1C6kC8B,KS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,0BiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,0BiCxCA,gBACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,mBACE,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aAGF,UACE,iBAEA,gDAEE,wBACA,qBAKF,sBACE,mBAKF,sBACE,oBACA,WAGF,oBACE,iBACA,iBAKF,cACE,iBAIJ,UACE,gBC3VF,SACE,sBACA,eACA,oBAGF,iBACE,+BACA,WAEF,gBACE,c1DRF,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD2D7DA,iBACE,gBACA,iBACA,0CAGF,OACE,qBAGF,YACE,iBAEA,iBACE,gBACA,oBAIJ,gBACE,iBACA,oBAGF,gBACE,iB3DzBJ,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD4D5DA,iBAEE,wBAGF,kBACE,qBACA,gBACA,+BAGF,gDAEE,iCAGF,iBACE,uBACA,mBACA,oBAGF,uEAGE,iCC1BJ,UACE,kBAGA,iBACE,WACA,kBACA,UACA,iBAXS,QAYT,MACA,SACA,SACA,iBAKJ,eACE,kBACA,UAEA,qBACE,kCACA,kBACA,sBACA,cAEA,uBACE,cAGF,iCACE,yBAIJ,2BACE,oBACA,iBACA,gBAIF,sBACE,iBACA,eACA,kBACA,kBACA,WACA,YACA,YACA,SACA,kBACA,UAGF,gCACE,YACA,sBACA,yBAGF,8BACE,aACA,sBACA,yBAGF,+BACE,YACA,sBACA,yBAIF,oBACE,0BACA,OAIF,qBACE,0BACA,SAIF,4BACE,WACA,kBACA,YACA,WACA,sBACA,sBACA,wCACA,SACA,UACA,WACA,wCACA,sCAIF,6BACE,WACA,kBACA,YACA,WACA,iCACA,sBACA,wCACA,SACA,UACA,UACA,uCACA,yCAIF,4BACE,WAKJ,qCAGE,iBACE,UAIF,eACE,WACA,6BACA,8BAGA,uBACE,qBAIF,uDAEE,oBAGF,4BACE,kBACA,gBACA,uCACA,yCAGF,6BACE,WAIF,qBACE,S7DlKN,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD8D7DA,qBACE,0CCHF,gCACE,mBAKA,+CACE,yBAIJ,+BACE","sourcesContent":["$primary-color: #021a34;\n$secondary-color: #075f94;\n\n:root {\n // -- Light\n --primary-color-light: #021a34;\n --secondary-color-light: #075f94;\n\n --bg-color-light: #edeef0;\n --bg-color-reverse-light: #021a34;\n --bg-color-tinted-light: #b0b2b4;\n\n --text-color-light: #4c4c4c;\n --text-color-reverse-light: #edeef0;\n --text-muted-color-light: #4c4c4c;\n\n --link-color-light: #4c4c4c;\n --link-hover-color-light: #6c6c6c;\n\n // -- Dark\n --primary-color-dark: #edeef0;\n --secondary-color-dark: #075f94;\n\n --bg-color-dark: #14171c;\n --bg-color-reverse-dark: #edeef0;\n --bg-color-tinted-dark: #627191;\n\n --text-color-dark: #edeef0;\n --text-color-reverse-dark: #14171c;\n --text-muted-color-dark: #edeef0;\n\n --link-color-dark: #edeef0;\n --link-hover-color-dark: #ffffff;\n}\n\n[data-bs-theme=\"light\"] {\n --primary-color: var(--primary-color-light);\n --secondary-color: var(--secondary-color-light);\n --bg-color-tinted: var(--bg-color-tinted-light);\n\n --bg-color: var(--bg-color-light);\n --bg-color-reverse: var(--bg-color-reverse-light);\n --text-color: var(--text-color-light);\n\n --text-color-reverse: var(--text-color-reverse-light);\n --text-muted-color: var(--text-muted-color-light);\n\n --link-color: var(--link-color-light);\n --link-hover-color: var(--link-hover-color-light);\n}\n\n[data-bs-theme=\"dark\"] {\n --primary-color: var(--primary-color-dark);\n --secondary-color: var(--secondary-color-dark);\n\n --bg-color: var(--bg-color-dark);\n --bg-color-reverse: var(--bg-color-reverse-dark);\n --bg-color-tinted: var(--bg-color-tinted-dark);\n\n --text-color: var(--text-color-dark);\n --text-color-reverse: var(--text-color-reverse-dark);\n --text-muted-color: var(--text-muted-color-dark);\n\n --link-color: var(--link-color-dark);\n --link-hover-color: var(--link-hover-color-dark);\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n\n --#{$prefix}body-color: #{$body-color};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n // scss-docs-end root-body-variables\n\n --#{$prefix}heading-color: #{$headings-color};\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-color: #{$mark-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n // Focus styles\n // scss-docs-start root-focus-variables\n --#{$prefix}focus-ring-width: #{$focus-ring-width};\n --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n --#{$prefix}focus-ring-color: #{$focus-ring-color};\n // scss-docs-end root-focus-variables\n\n // scss-docs-start root-form-validation-variables\n --#{$prefix}form-valid-color: #{$form-valid-color};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n --#{$prefix}form-invalid-color: #{$form-invalid-color};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n color-scheme: dark;\n\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n @each $color, $value in $theme-colors-text-dark {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle-dark {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle-dark {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n --#{$prefix}highlight-color: #{$mark-color-dark};\n --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query () {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query () {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + \" \" + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n } @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + \" \" + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n } @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + \" \" + $value;\n } @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + \" calc(\" + $min-width + if($value < 0, \" - \", \" + \") + $variable-width + \")\";\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluid-val: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluid-val {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule () {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule () {\n #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, ``-`` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on ` `s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `
` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. ``s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n// 2. Correct the outline style in Safari.\n\n[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n outline-offset: -2px; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// scss-docs-start theme-text-variables\n$primary-text-emphasis: shade-color($primary, 60%) !default;\n$secondary-text-emphasis: shade-color($secondary, 60%) !default;\n$success-text-emphasis: shade-color($success, 60%) !default;\n$info-text-emphasis: shade-color($info, 60%) !default;\n$warning-text-emphasis: shade-color($warning, 60%) !default;\n$danger-text-emphasis: shade-color($danger, 60%) !default;\n$light-text-emphasis: $gray-700 !default;\n$dark-text-emphasis: $gray-700 !default;\n// scss-docs-end theme-text-variables\n\n// scss-docs-start theme-bg-subtle-variables\n$primary-bg-subtle: tint-color($primary, 80%) !default;\n$secondary-bg-subtle: tint-color($secondary, 80%) !default;\n$success-bg-subtle: tint-color($success, 80%) !default;\n$info-bg-subtle: tint-color($info, 80%) !default;\n$warning-bg-subtle: tint-color($warning, 80%) !default;\n$danger-bg-subtle: tint-color($danger, 80%) !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n// scss-docs-end theme-bg-subtle-variables\n\n// scss-docs-start theme-border-subtle-variables\n$primary-border-subtle: tint-color($primary, 60%) !default;\n$secondary-border-subtle: tint-color($secondary, 60%) !default;\n$success-border-subtle: tint-color($success, 60%) !default;\n$info-border-subtle: tint-color($info, 60%) !default;\n$warning-border-subtle: tint-color($warning, 60%) !default;\n$danger-border-subtle: tint-color($danger, 60%) !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n// scss-docs-end theme-border-subtle-variables\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `` element.\n\n$body-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-secondary-color: rgba($body-color, .75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, .5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$body-emphasis-color: $black !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Icon links\n// scss-docs-start icon-link-variables\n$icon-link-gap: .375rem !default;\n$icon-link-underline-offset: .25em !default;\n$icon-link-icon-size: 1em !default;\n$icon-link-icon-transition: .2s ease-in-out transform !default;\n$icon-link-icon-transform: translate3d(.25em, 0, 0) !default;\n// scss-docs-end icon-link-variables\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-xxl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n// fusv-disable\n$border-radius-2xl: $border-radius-xxl !default; // Deprecated in v5.3.0\n// fusv-enable\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start focus-ring-variables\n$focus-ring-width: .25rem !default;\n$focus-ring-opacity: .25 !default;\n$focus-ring-color: rgba($primary, $focus-ring-opacity) !default;\n$focus-ring-blur: 0 !default;\n$focus-ring-box-shadow: 0 0 $focus-ring-blur $focus-ring-width $focus-ring-color !default;\n// scss-docs-end focus-ring-variables\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-medium: 500 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n// fusv-disable\n$text-muted: var(--#{$prefix}secondary-color) !default; // Deprecated in 5.3.0\n// fusv-enable\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: .25 !default;\n\n// scss-docs-start vr-variables\n$vr-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end vr-variables\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-color: $body-color !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}emphasis-color) !default;\n$table-bg: var(--#{$prefix}body-bg) !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-hover-bg-factor) !default;\n\n$table-border-factor: .2 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: var(--#{$prefix}secondary-color) !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: $focus-ring-width !default;\n$input-btn-focus-color-opacity: $focus-ring-opacity !default;\n$input-btn-focus-color: $focus-ring-color !default;\n$input-btn-focus-blur: $focus-ring-blur !default;\n$input-btn-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-color: var(--#{$prefix}body-color) !default;\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n$btn-link-focus-shadow-rgb: to-rgb(mix(color-contrast($link-color), $link-color, 15%)) !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: var(--#{$prefix}border-radius) !default;\n$btn-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$btn-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: var(--#{$prefix}body-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$input-border-radius: var(--#{$prefix}border-radius) !default;\n$input-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$input-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc(#{$input-border-width} * 2) !default; // stylelint-disable-line function-disallowed-list\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,
\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,
\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,
\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,
\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,
\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,
\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $input-disabled-bg !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,
\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: var(--#{$prefix}secondary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-height: 1.5em !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,
\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,
\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-colors\n$form-valid-color: $form-feedback-valid-color !default;\n$form-valid-border-color: $form-feedback-valid-color !default;\n$form-invalid-color: $form-feedback-invalid-color !default;\n$form-invalid-border-color: $form-feedback-invalid-color !default;\n// scss-docs-end form-validation-colors\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": var(--#{$prefix}form-valid-color),\n \"icon\": $form-feedback-icon-valid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}success),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}form-valid-border-color),\n ),\n \"invalid\": (\n \"color\": var(--#{$prefix}form-invalid-color),\n \"icon\": $form-feedback-icon-invalid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}danger),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}form-invalid-border-color),\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n n1: -1,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3\n) !default;\n// scss-docs-end zindex-levels-map\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default;\n$nav-link-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-underline-gap: 1rem !default;\n$nav-underline-border-width: .125rem !default;\n$nav-underline-link-active-color: var(--#{$prefix}emphasis-color) !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;\n$navbar-light-icon-color: rgba($body-color, .75) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,
\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-icon-color: $navbar-dark-color !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,
\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: var(--#{$prefix}border-radius) !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: var(--#{$prefix}box-shadow) !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: var(--#{$prefix}tertiary-color) !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc(#{$pagination-border-width} * -1) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $focus-ring-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$pagination-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}border-radius) !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: var(--#{$prefix}body-color) !default;\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}border-radius) !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text-emphasis) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text-emphasis !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,
\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,
\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}border-radius) !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc(#{$popover-border-radius} - #{$popover-border-width}) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: var(--#{$prefix}box-shadow) !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: var(--#{$prefix}body-color) !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-header-border-color: $toast-border-color !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: var(--#{$prefix}border-radius) !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: var(--#{$prefix}box-shadow-sm) !default;\n$modal-content-box-shadow-sm-up: var(--#{$prefix}box-shadow) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: var(--#{$prefix}border-radius) !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,
\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,
\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,
\") !default;\n$btn-close-focus-shadow: $focus-ring-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-color) !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","//\n// Headings\n//\n.h1 {\n @extend h1;\n}\n\n.h2 {\n @extend h2;\n}\n\n.h3 {\n @extend h3;\n}\n\n.h4 {\n @extend h4;\n}\n\n.h5 {\n @extend h5;\n}\n\n.h6 {\n @extend h6;\n}\n\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n .display-#{$display} {\n @include font-size($font-size);\n font-family: $display-font-family;\n font-style: $display-font-style;\n font-weight: $display-font-weight;\n line-height: $display-line-height;\n }\n}\n\n//\n// Emphasis\n//\n.small {\n @extend small;\n}\n\n.mark {\n @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size($initialism-font-size);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-font-size);\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n.blockquote-footer {\n margin-top: -$blockquote-margin-y;\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-footer-font-size);\n color: $blockquote-footer-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `
`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer * .5;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n","@mixin box-shadow($shadow...) {\n @if $enable-shadows {\n $result: ();\n\n @each $value in $shadow {\n @if $value != null {\n $result: append($result, $value, \"comma\");\n }\n @if $value == none and length($shadow) > 1 {\n @warn \"The keyword 'none' must be used as a single argument.\";\n }\n }\n\n @if (length($result) > 0) {\n box-shadow: $result;\n }\n }\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n:root {\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: percentage(divide(1, $count));\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n // Reset needed for nesting tables\n --#{$prefix}table-color-type: initial;\n --#{$prefix}table-bg-type: initial;\n --#{$prefix}table-color-state: initial;\n --#{$prefix}table-bg-state: initial;\n // End of reset\n --#{$prefix}table-color: #{$table-color};\n --#{$prefix}table-bg: #{$table-bg};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-accent-bg: #{$table-accent-bg};\n --#{$prefix}table-striped-color: #{$table-striped-color};\n --#{$prefix}table-striped-bg: #{$table-striped-bg};\n --#{$prefix}table-active-color: #{$table-active-color};\n --#{$prefix}table-active-bg: #{$table-active-bg};\n --#{$prefix}table-hover-color: #{$table-hover-color};\n --#{$prefix}table-hover-bg: #{$table-hover-bg};\n\n width: 100%;\n margin-bottom: $spacer;\n vertical-align: $table-cell-vertical-align;\n border-color: var(--#{$prefix}table-border-color);\n\n // Target th & td\n // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y $table-cell-padding-x;\n // Following the precept of cascades: https://codepen.io/miriamsuzanne/full/vYNgodb\n color: var(--#{$prefix}table-color-state, var(--#{$prefix}table-color-type, var(--#{$prefix}table-color)));\n background-color: var(--#{$prefix}table-bg);\n border-bottom-width: $table-border-width;\n box-shadow: inset 0 0 0 9999px var(--#{$prefix}table-bg-state, var(--#{$prefix}table-bg-type, var(--#{$prefix}table-accent-bg)));\n }\n\n > tbody {\n vertical-align: inherit;\n }\n\n > thead {\n vertical-align: bottom;\n }\n}\n\n.table-group-divider {\n border-top: calc(#{$table-border-width} * 2) solid $table-group-separator-color; // stylelint-disable-line function-disallowed-list\n}\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n caption-side: top;\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefor we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n > :not(caption) > * {\n border-width: $table-border-width 0;\n\n // stylelint-disable-next-line selector-max-universal\n > * {\n border-width: 0 $table-border-width;\n }\n }\n}\n\n.table-borderless {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n border-bottom-width: 0;\n }\n\n > :not(:first-child) {\n border-top-width: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n// For rows\n.table-striped {\n > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n --#{$prefix}table-color-type: var(--#{$prefix}table-striped-color);\n --#{$prefix}table-bg-type: var(--#{$prefix}table-striped-bg);\n }\n}\n\n// For columns\n.table-striped-columns {\n > :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {\n --#{$prefix}table-color-type: var(--#{$prefix}table-striped-color);\n --#{$prefix}table-bg-type: var(--#{$prefix}table-striped-bg);\n }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n --#{$prefix}table-color-state: var(--#{$prefix}table-active-color);\n --#{$prefix}table-bg-state: var(--#{$prefix}table-active-bg);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover > * {\n --#{$prefix}table-color-state: var(--#{$prefix}table-hover-color);\n --#{$prefix}table-bg-state: var(--#{$prefix}table-hover-bg);\n }\n}\n\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @include media-breakpoint-down($breakpoint) {\n .table-responsive#{$infix} {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n }\n}\n","// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n .table-#{$state} {\n $color: color-contrast(opaque($body-bg, $background));\n $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n $table-border-color: mix($color, $background, percentage($table-border-factor));\n\n --#{$prefix}table-color: #{$color};\n --#{$prefix}table-bg: #{$background};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-striped-bg: #{$striped-bg};\n --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};\n --#{$prefix}table-active-bg: #{$active-bg};\n --#{$prefix}table-active-color: #{color-contrast($active-bg)};\n --#{$prefix}table-hover-bg: #{$hover-bg};\n --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n color: var(--#{$prefix}table-color);\n border-color: var(--#{$prefix}table-border-color);\n }\n}\n// scss-docs-end table-variant\n","//\n// Labels\n//\n\n.form-label {\n margin-bottom: $form-label-margin-bottom;\n @include font-size($form-label-font-size);\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `
` default\n @include font-size(inherit); // Override the `` default\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n line-height: $input-line-height;\n color: $form-label-color;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n}\n","//\n// Form text\n//\n\n.form-text {\n margin-top: $form-text-margin-top;\n @include font-size($form-text-font-size);\n font-style: $form-text-font-style;\n font-weight: $form-text-font-weight;\n color: $form-text-color;\n}\n","//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n appearance: none; // Fix appearance for date inputs in Safari\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on s in some browsers, due to the limited stylability of ``s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n &[type=\"file\"] {\n overflow: hidden; // prevent pseudo element button overlap\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n\n &::-webkit-date-and-time-value {\n // On Android Chrome, form-control's \"width: 100%\" makes the input width too small\n // Tested under Android 11 / Chrome 89, Android 12 / Chrome 100, Android 13 / Chrome 109\n //\n // On iOS Safari, form-control's \"appearance: none\" + \"width: 100%\" makes the input width too small\n // Tested under iOS 16.2 / Safari 16.2\n min-width: 85px; // Seems to be a good minimum safe width\n\n // Add some height to date inputs on iOS\n // https://github.com/twbs/bootstrap/issues/23307\n // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n // Multiply line-height by 1em if it has no unit\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n\n // Android Chrome type=\"date\" is taller than the other inputs\n // because of \"margin: 1px 24px 1px 4px\" inside the shadow DOM\n // Tested under Android 11 / Chrome 89, Android 12 / Chrome 100, Android 13 / Chrome 109\n margin: 0;\n }\n\n // Prevent excessive date input height in Webkit\n // https://github.com/twbs/bootstrap/issues/34433\n &::-webkit-datetime-edit {\n display: block;\n padding: 0;\n }\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled {\n color: $input-disabled-color;\n background-color: $input-disabled-bg;\n border-color: $input-disabled-border-color;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n\n // File input buttons theming\n &::file-selector-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: $form-file-button-hover-bg;\n }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &:focus {\n outline: 0;\n }\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n min-height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n\n &::file-selector-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n}\n\n.form-control-lg {\n min-height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n\n &::file-selector-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n}\n\n// Make sure textareas don't shrink too much when resized\n// https://github.com/twbs/bootstrap/pull/29124\n// stylelint-disable selector-no-qualifying-type\ntextarea {\n &.form-control {\n min-height: $input-height;\n }\n\n &.form-control-sm {\n min-height: $input-height-sm;\n }\n\n &.form-control-lg {\n min-height: $input-height-lg;\n }\n}\n// stylelint-enable selector-no-qualifying-type\n\n.form-control-color {\n width: $form-color-width;\n height: $input-height;\n padding: $input-padding-y;\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n\n &::-moz-color-swatch {\n border: 0 !important; // stylelint-disable-line declaration-no-important\n @include border-radius($input-border-radius);\n }\n\n &::-webkit-color-swatch {\n border: 0 !important; // stylelint-disable-line declaration-no-important\n @include border-radius($input-border-radius);\n }\n\n &.form-control-sm { height: $input-height-sm; }\n &.form-control-lg { height: $input-height-lg; }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n background-color: $color;\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n// scss-docs-end gradient-mixins\n","// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator)};\n\n display: block;\n width: 100%;\n padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;\n font-family: $form-select-font-family;\n @include font-size($form-select-font-size);\n font-weight: $form-select-font-weight;\n line-height: $form-select-line-height;\n color: $form-select-color;\n appearance: none;\n background-color: $form-select-bg;\n background-image: var(--#{$prefix}form-select-bg-img), var(--#{$prefix}form-select-bg-icon, none);\n background-repeat: no-repeat;\n background-position: $form-select-bg-position;\n background-size: $form-select-bg-size;\n border: $form-select-border-width solid $form-select-border-color;\n @include border-radius($form-select-border-radius, 0);\n @include box-shadow($form-select-box-shadow);\n @include transition($form-select-transition);\n\n &:focus {\n border-color: $form-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $form-select-focus-box-shadow;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n padding-right: $form-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $form-select-disabled-color;\n background-color: $form-select-disabled-bg;\n border-color: $form-select-disabled-border-color;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $form-select-color;\n }\n}\n\n.form-select-sm {\n padding-top: $form-select-padding-y-sm;\n padding-bottom: $form-select-padding-y-sm;\n padding-left: $form-select-padding-x-sm;\n @include font-size($form-select-font-size-sm);\n @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: $form-select-padding-y-lg;\n padding-bottom: $form-select-padding-y-lg;\n padding-left: $form-select-padding-x-lg;\n @include font-size($form-select-font-size-lg);\n @include border-radius($form-select-border-radius-lg);\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .form-select {\n --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator-dark)};\n }\n }\n}\n","//\n// Check/radio\n//\n\n.form-check {\n display: block;\n min-height: $form-check-min-height;\n padding-left: $form-check-padding-start;\n margin-bottom: $form-check-margin-bottom;\n\n .form-check-input {\n float: left;\n margin-left: $form-check-padding-start * -1;\n }\n}\n\n.form-check-reverse {\n padding-right: $form-check-padding-start;\n padding-left: 0;\n text-align: right;\n\n .form-check-input {\n float: right;\n margin-right: $form-check-padding-start * -1;\n margin-left: 0;\n }\n}\n\n.form-check-input {\n --#{$prefix}form-check-bg: #{$form-check-input-bg};\n\n flex-shrink: 0;\n width: $form-check-input-width;\n height: $form-check-input-width;\n margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height\n vertical-align: top;\n appearance: none;\n background-color: var(--#{$prefix}form-check-bg);\n background-image: var(--#{$prefix}form-check-bg-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: $form-check-input-border;\n print-color-adjust: exact; // Keep themed appearance for print\n @include transition($form-check-transition);\n\n &[type=\"checkbox\"] {\n @include border-radius($form-check-input-border-radius);\n }\n\n &[type=\"radio\"] {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $form-check-radio-border-radius;\n }\n\n &:active {\n filter: $form-check-input-active-filter;\n }\n\n &:focus {\n border-color: $form-check-input-focus-border;\n outline: 0;\n box-shadow: $form-check-input-focus-box-shadow;\n }\n\n &:checked {\n background-color: $form-check-input-checked-bg-color;\n border-color: $form-check-input-checked-border-color;\n\n &[type=\"checkbox\"] {\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)};\n }\n }\n\n &[type=\"radio\"] {\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)};\n }\n }\n }\n\n &[type=\"checkbox\"]:indeterminate {\n background-color: $form-check-input-indeterminate-bg-color;\n border-color: $form-check-input-indeterminate-border-color;\n\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)};\n }\n }\n\n &:disabled {\n pointer-events: none;\n filter: none;\n opacity: $form-check-input-disabled-opacity;\n }\n\n // Use disabled attribute in addition of :disabled pseudo-class\n // See: https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .form-check-label {\n cursor: default;\n opacity: $form-check-label-disabled-opacity;\n }\n }\n}\n\n.form-check-label {\n color: $form-check-label-color;\n cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n padding-left: $form-switch-padding-start;\n\n .form-check-input {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image)};\n\n width: $form-switch-width;\n margin-left: $form-switch-padding-start * -1;\n background-image: var(--#{$prefix}form-switch-bg);\n background-position: left center;\n @include border-radius($form-switch-border-radius);\n @include transition($form-switch-transition);\n\n &:focus {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-focus-bg-image)};\n }\n\n &:checked {\n background-position: $form-switch-checked-bg-position;\n\n @if $enable-gradients {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)};\n }\n }\n }\n\n &.form-check-reverse {\n padding-right: $form-switch-padding-start;\n padding-left: 0;\n\n .form-check-input {\n margin-right: $form-switch-padding-start * -1;\n margin-left: 0;\n }\n }\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n\n &[disabled],\n &:disabled {\n + .btn {\n pointer-events: none;\n filter: none;\n opacity: $form-check-btn-check-disabled-opacity;\n }\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .form-switch .form-check-input:not(:checked):not(:focus) {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image-dark)};\n }\n }\n}\n","// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n width: 100%;\n height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n appearance: none;\n background-color: transparent;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific\n appearance: none;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent; // Why?\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent;\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n appearance: none;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent;\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &:disabled {\n pointer-events: none;\n\n &::-webkit-slider-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n\n &::-moz-range-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n }\n}\n",".form-floating {\n position: relative;\n\n > .form-control,\n > .form-control-plaintext,\n > .form-select {\n height: $form-floating-height;\n min-height: $form-floating-height;\n line-height: $form-floating-line-height;\n }\n\n > label {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2;\n height: 100%; // allow textareas\n padding: $form-floating-padding-y $form-floating-padding-x;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n transform-origin: 0 0;\n @include transition($form-floating-transition);\n }\n\n > .form-control,\n > .form-control-plaintext {\n padding: $form-floating-padding-y $form-floating-padding-x;\n\n &::placeholder {\n color: transparent;\n }\n\n &:focus,\n &:not(:placeholder-shown) {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n &:-webkit-autofill {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n }\n\n > .form-select {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n\n > .form-control:focus,\n > .form-control:not(:placeholder-shown),\n > .form-control-plaintext,\n > .form-select {\n ~ label {\n color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity});\n transform: $form-floating-label-transform;\n\n &::after {\n position: absolute;\n inset: $form-floating-padding-y ($form-floating-padding-x * .5);\n z-index: -1;\n height: $form-floating-label-height;\n content: \"\";\n background-color: $input-bg;\n @include border-radius($input-border-radius);\n }\n }\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n > .form-control:-webkit-autofill {\n ~ label {\n color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity});\n transform: $form-floating-label-transform;\n }\n }\n\n > .form-control-plaintext {\n ~ label {\n border-width: $input-border-width 0; // Required to properly position label text - as explained above\n }\n }\n\n > :disabled ~ label,\n > .form-control:disabled ~ label { // Required for `.form-control`s because of specificity\n color: $form-floating-label-disabled-color;\n\n &::after {\n background-color: $input-disabled-bg;\n }\n }\n}\n","//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-select,\n > .form-floating {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .form-select:focus,\n > .form-floating:focus-within {\n z-index: 5;\n }\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 5;\n }\n }\n}\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n @include font-size($input-font-size); // Match inputs\n font-weight: $input-group-addon-font-weight;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n &:not(.has-validation) {\n > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 3),\n > .form-floating:not(:last-child) > .form-control,\n > .form-floating:not(:last-child) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n &.has-validation {\n > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 4),\n > .form-floating:nth-last-child(n + 3) > .form-control,\n > .form-floating:nth-last-child(n + 3) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n $validation-messages: \"\";\n @each $state in map-keys($form-validation-states) {\n $validation-messages: $validation-messages + \":not(.\" + unquote($state) + \"-tooltip)\" + \":not(.\" + unquote($state) + \"-feedback)\";\n }\n\n > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n margin-left: calc(#{$input-border-width} * -1); // stylelint-disable-line function-disallowed-list\n @include border-start-radius(0);\n }\n\n > .form-floating:not(:first-child) > .form-control,\n > .form-floating:not(:first-child) > .form-select {\n @include border-start-radius(0);\n }\n}\n","// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state(\n $state,\n $color,\n $icon,\n $tooltip-color: color-contrast($color),\n $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity),\n $border-color: $color\n) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n font-style: $form-feedback-font-style;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: $tooltip-color;\n background-color: $tooltip-bg-color;\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $border-color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .form-select {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n @if $enable-validation-icons {\n &:not([multiple]):not([size]),\n &:not([multiple])[size=\"1\"] {\n --#{$prefix}form-select-bg-icon: #{escape-svg($icon)};\n padding-right: $form-select-feedback-icon-padding-end;\n background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n }\n }\n\n &:focus {\n border-color: $border-color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n .form-control-color {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n width: add($form-color-width, $input-height-inner);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n &:checked {\n background-color: $color;\n }\n\n &:focus {\n box-shadow: $focus-box-shadow;\n }\n\n ~ .form-check-label {\n color: $color;\n }\n }\n }\n .form-check-inline .form-check-input {\n ~ .#{$state}-feedback {\n margin-left: .5em;\n }\n }\n\n .input-group {\n > .form-control:not(:focus),\n > .form-select:not(:focus),\n > .form-floating:not(:focus-within) {\n @include form-validation-state-selector($state) {\n @if $state == \"valid\" {\n z-index: 3;\n } @else if $state == \"invalid\" {\n z-index: 4;\n }\n }\n }\n }\n}\n// scss-docs-end form-validation-mixins\n","//\n// Base styles\n//\n\n.btn {\n // scss-docs-start btn-css-vars\n --#{$prefix}btn-padding-x: #{$btn-padding-x};\n --#{$prefix}btn-padding-y: #{$btn-padding-y};\n --#{$prefix}btn-font-family: #{$btn-font-family};\n @include rfs($btn-font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-font-weight: #{$btn-font-weight};\n --#{$prefix}btn-line-height: #{$btn-line-height};\n --#{$prefix}btn-color: #{$btn-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-width: #{$btn-border-width};\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-border-radius: #{$btn-border-radius};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};\n --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5);\n // scss-docs-end btn-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x);\n font-family: var(--#{$prefix}btn-font-family);\n @include font-size(var(--#{$prefix}btn-font-size));\n font-weight: var(--#{$prefix}btn-font-weight);\n line-height: var(--#{$prefix}btn-line-height);\n color: var(--#{$prefix}btn-color);\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n cursor: if($enable-button-pointers, pointer, null);\n user-select: none;\n border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color);\n @include border-radius(var(--#{$prefix}btn-border-radius));\n @include gradient-bg(var(--#{$prefix}btn-bg));\n @include box-shadow(var(--#{$prefix}btn-box-shadow));\n @include transition($btn-transition);\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}btn-hover-bg);\n border-color: var(--#{$prefix}btn-hover-border-color);\n }\n\n .btn-check + &:hover {\n // override for the checkbox/radio buttons\n color: var(--#{$prefix}btn-color);\n background-color: var(--#{$prefix}btn-bg);\n border-color: var(--#{$prefix}btn-border-color);\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-hover-color);\n @include gradient-bg(var(--#{$prefix}btn-hover-bg));\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:focus-visible + & {\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:checked + &,\n :not(.btn-check) + &:active,\n &:first-child:active,\n &.active,\n &.show {\n color: var(--#{$prefix}btn-active-color);\n background-color: var(--#{$prefix}btn-active-bg);\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-active-border-color);\n @include box-shadow(var(--#{$prefix}btn-active-shadow));\n\n &:focus-visible {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n }\n\n &:disabled,\n &.disabled,\n fieldset:disabled & {\n color: var(--#{$prefix}btn-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}btn-disabled-bg);\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-disabled-border-color);\n opacity: var(--#{$prefix}btn-disabled-opacity);\n @include box-shadow(none);\n }\n}\n\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @if $color == \"light\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: shade-color($value, $btn-hover-bg-shade-amount),\n $hover-border: shade-color($value, $btn-hover-border-shade-amount),\n $active-background: shade-color($value, $btn-active-bg-shade-amount),\n $active-border: shade-color($value, $btn-active-border-shade-amount)\n );\n } @else if $color == \"dark\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: tint-color($value, $btn-hover-bg-tint-amount),\n $hover-border: tint-color($value, $btn-hover-border-tint-amount),\n $active-background: tint-color($value, $btn-active-bg-tint-amount),\n $active-border: tint-color($value, $btn-active-border-tint-amount)\n );\n } @else {\n @include button-variant($value, $value);\n }\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n// scss-docs-end btn-variant-loops\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n --#{$prefix}btn-font-weight: #{$font-weight-normal};\n --#{$prefix}btn-color: #{$btn-link-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-hover-color: #{$btn-link-hover-color};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-active-color: #{$btn-link-hover-color};\n --#{$prefix}btn-active-border-color: transparent;\n --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};\n --#{$prefix}btn-disabled-border-color: transparent;\n --#{$prefix}btn-box-shadow: 0 0 0 #000; // Can't use `none` as keyword negates all values when used with multiple shadows\n --#{$prefix}btn-focus-shadow-rgb: #{$btn-link-focus-shadow-rgb};\n\n text-decoration: $link-decoration;\n @if $enable-gradients {\n background-image: none;\n }\n\n &:hover,\n &:focus-visible {\n text-decoration: $link-hover-decoration;\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-color);\n }\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm);\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n $background,\n $border,\n $color: color-contrast($background),\n $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),\n $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),\n $hover-color: color-contrast($hover-background),\n $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),\n $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),\n $active-color: color-contrast($active-background),\n $disabled-background: $background,\n $disabled-border: $border,\n $disabled-color: color-contrast($disabled-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-bg: #{$background};\n --#{$prefix}btn-border-color: #{$border};\n --#{$prefix}btn-hover-color: #{$hover-color};\n --#{$prefix}btn-hover-bg: #{$hover-background};\n --#{$prefix}btn-hover-border-color: #{$hover-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$disabled-color};\n --#{$prefix}btn-disabled-bg: #{$disabled-background};\n --#{$prefix}btn-disabled-border-color: #{$disabled-border};\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n $color,\n $color-hover: color-contrast($color),\n $active-background: $color,\n $active-border: $color,\n $active-color: color-contrast($active-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-border-color: #{$color};\n --#{$prefix}btn-hover-color: #{$color-hover};\n --#{$prefix}btn-hover-bg: #{$active-background};\n --#{$prefix}btn-hover-border-color: #{$active-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$color};\n --#{$prefix}btn-disabled-bg: transparent;\n --#{$prefix}btn-disabled-border-color: #{$color};\n --#{$prefix}gradient: none;\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}btn-padding-y: #{$padding-y};\n --#{$prefix}btn-padding-x: #{$padding-x};\n @include rfs($font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-border-radius: #{$border-radius};\n}\n// scss-docs-end btn-size-mixin\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n\n &.collapse-horizontal {\n width: 0;\n height: auto;\n @include transition($transition-collapse-width);\n }\n}\n// scss-docs-end collapse-classes\n","// The dropdown wrapper (``)\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n // scss-docs-start dropdown-css-vars\n --#{$prefix}dropdown-zindex: #{$zindex-dropdown};\n --#{$prefix}dropdown-min-width: #{$dropdown-min-width};\n --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};\n --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};\n --#{$prefix}dropdown-spacer: #{$dropdown-spacer};\n @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);\n --#{$prefix}dropdown-color: #{$dropdown-color};\n --#{$prefix}dropdown-bg: #{$dropdown-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-border-color};\n --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};\n --#{$prefix}dropdown-border-width: #{$dropdown-border-width};\n --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};\n --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};\n --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};\n --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};\n --#{$prefix}dropdown-header-color: #{$dropdown-header-color};\n --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};\n --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};\n // scss-docs-end dropdown-css-vars\n\n position: absolute;\n z-index: var(--#{$prefix}dropdown-zindex);\n display: none; // none by default, but block on \"open\" of the menu\n min-width: var(--#{$prefix}dropdown-min-width);\n padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x);\n margin: 0; // Override default margin of ul\n @include font-size(var(--#{$prefix}dropdown-font-size));\n color: var(--#{$prefix}dropdown-color);\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: var(--#{$prefix}dropdown-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color);\n @include border-radius(var(--#{$prefix}dropdown-border-radius));\n @include box-shadow(var(--#{$prefix}dropdown-box-shadow));\n\n &[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--#{$prefix}dropdown-spacer);\n }\n\n @if $dropdown-padding-y == 0 {\n > .dropdown-item:first-child,\n > li:first-child .dropdown-item {\n @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n > .dropdown-item:last-child,\n > li:last-child .dropdown-item {\n @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n\n }\n}\n\n// scss-docs-start responsive-breakpoints\n// We deliberately hardcode the `bs-` prefix because we check\n// this custom property in JS to determine Popper's positioning\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-start {\n --bs-position: start;\n\n &[data-bs-popper] {\n right: auto;\n left: 0;\n }\n }\n\n .dropdown-menu#{$infix}-end {\n --bs-position: end;\n\n &[data-bs-popper] {\n right: 0;\n left: auto;\n }\n }\n }\n}\n// scss-docs-end responsive-breakpoints\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropend {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(end);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropstart {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(start);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n\n// Dividers (basically an `
`) within the dropdown\n.dropdown-divider {\n height: 0;\n margin: var(--#{$prefix}dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--#{$prefix}dropdown-divider-bg);\n opacity: 1; // Revisit in v6 to de-dupe styles that conflict with
element\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `
`-specific styles are denoted with `// For s`\n.dropdown-item {\n display: block;\n width: 100%; // For ``s\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n clear: both;\n font-weight: $font-weight-normal;\n color: var(--#{$prefix}dropdown-link-color);\n text-align: inherit; // For ``s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For ``s\n border: 0; // For ``s\n @include border-radius(var(--#{$prefix}dropdown-item-border-radius, 0));\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}dropdown-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n @include gradient-bg(var(--#{$prefix}dropdown-link-hover-bg));\n }\n\n &.active,\n &:active {\n color: var(--#{$prefix}dropdown-link-active-color);\n text-decoration: none;\n @include gradient-bg(var(--#{$prefix}dropdown-link-active-bg));\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: var(--#{$prefix}dropdown-header-padding-y) var(--#{$prefix}dropdown-header-padding-x);\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: var(--#{$prefix}dropdown-header-color);\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n color: var(--#{$prefix}dropdown-link-color);\n}\n\n// Dark dropdowns\n.dropdown-menu-dark {\n // scss-docs-start dropdown-dark-css-vars\n --#{$prefix}dropdown-color: #{$dropdown-dark-color};\n --#{$prefix}dropdown-bg: #{$dropdown-dark-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};\n --#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};\n // scss-docs-end dropdown-dark-css-vars\n}\n","// scss-docs-start caret-mixins\n@mixin caret-down($width: $caret-width) {\n border-top: $width solid;\n border-right: $width solid transparent;\n border-bottom: 0;\n border-left: $width solid transparent;\n}\n\n@mixin caret-up($width: $caret-width) {\n border-top: 0;\n border-right: $width solid transparent;\n border-bottom: $width solid;\n border-left: $width solid transparent;\n}\n\n@mixin caret-end($width: $caret-width) {\n border-top: $width solid transparent;\n border-right: 0;\n border-bottom: $width solid transparent;\n border-left: $width solid;\n}\n\n@mixin caret-start($width: $caret-width) {\n border-top: $width solid transparent;\n border-right: $width solid;\n border-bottom: $width solid transparent;\n}\n\n@mixin caret(\n $direction: down,\n $width: $caret-width,\n $spacing: $caret-spacing,\n $vertical-align: $caret-vertical-align\n) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $spacing;\n vertical-align: $vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down($width);\n } @else if $direction == up {\n @include caret-up($width);\n } @else if $direction == end {\n @include caret-end($width);\n }\n }\n\n @if $direction == start {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $spacing;\n vertical-align: $vertical-align;\n content: \"\";\n @include caret-start($width);\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n// scss-docs-end caret-mixins\n","// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n }\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n > .btn-check:checked + .btn,\n > .btn-check:focus + .btn,\n > .btn:hover,\n > .btn:focus,\n > .btn:active,\n > .btn.active {\n z-index: 1;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n @include border-radius($btn-border-radius);\n\n // Prevent double borders when buttons are next to each other\n > :not(.btn-check:first-child) + .btn,\n > .btn-group:not(:first-child) {\n margin-left: calc(#{$btn-border-width} * -1); // stylelint-disable-line function-disallowed-list\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn.dropdown-toggle-split:first-child,\n > .btn-group:not(:last-child) > .btn {\n @include border-end-radius(0);\n }\n\n // The left radius should be 0 if the button is:\n // - the \"third or more\" child\n // - the second child and the previous element isn't `.btn-check` (making it the first child visually)\n // - part of a btn-group which isn't the first child\n > .btn:nth-child(n + 3),\n > :not(.btn-check) + .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-start-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropend &::after {\n margin-left: 0;\n }\n\n .dropstart &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: calc(#{$btn-border-width} * -1); // stylelint-disable-line function-disallowed-list\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn ~ .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// ``s, ``s or ``s.\n\n.nav {\n // scss-docs-start nav-css-vars\n --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: #{$nav-link-color};\n --#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};\n --#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};\n // scss-docs-end nav-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--#{$prefix}nav-link-padding-y) var(--#{$prefix}nav-link-padding-x);\n @include font-size(var(--#{$prefix}nav-link-font-size));\n font-weight: var(--#{$prefix}nav-link-font-weight);\n color: var(--#{$prefix}nav-link-color);\n text-decoration: if($link-decoration == none, null, none);\n background: none;\n border: 0;\n @include transition($nav-link-transition);\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}nav-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n &:focus-visible {\n outline: 0;\n box-shadow: $nav-link-focus-box-shadow;\n }\n\n // Disabled state lightens text\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n // scss-docs-start nav-tabs-css-vars\n --#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};\n --#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};\n --#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};\n --#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};\n --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};\n --#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};\n --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};\n // scss-docs-end nav-tabs-css-vars\n\n border-bottom: var(--#{$prefix}nav-tabs-border-width) solid var(--#{$prefix}nav-tabs-border-color);\n\n .nav-link {\n margin-bottom: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n border: var(--#{$prefix}nav-tabs-border-width) solid transparent;\n @include border-top-radius(var(--#{$prefix}nav-tabs-border-radius));\n\n &:hover,\n &:focus {\n // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link\n isolation: isolate;\n border-color: var(--#{$prefix}nav-tabs-link-hover-border-color);\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: var(--#{$prefix}nav-tabs-link-active-color);\n background-color: var(--#{$prefix}nav-tabs-link-active-bg);\n border-color: var(--#{$prefix}nav-tabs-link-active-border-color);\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n // scss-docs-start nav-pills-css-vars\n --#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};\n --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};\n --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};\n // scss-docs-end nav-pills-css-vars\n\n .nav-link {\n @include border-radius(var(--#{$prefix}nav-pills-border-radius));\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: var(--#{$prefix}nav-pills-link-active-color);\n @include gradient-bg(var(--#{$prefix}nav-pills-link-active-bg));\n }\n}\n\n\n//\n// Underline\n//\n\n.nav-underline {\n // scss-docs-start nav-underline-css-vars\n --#{$prefix}nav-underline-gap: #{$nav-underline-gap};\n --#{$prefix}nav-underline-border-width: #{$nav-underline-border-width};\n --#{$prefix}nav-underline-link-active-color: #{$nav-underline-link-active-color};\n // scss-docs-end nav-underline-css-vars\n\n gap: var(--#{$prefix}nav-underline-gap);\n\n .nav-link {\n padding-right: 0;\n padding-left: 0;\n border-bottom: var(--#{$prefix}nav-underline-border-width) solid transparent;\n\n &:hover,\n &:focus {\n border-bottom-color: currentcolor;\n }\n }\n\n .nav-link.active,\n .show > .nav-link {\n font-weight: $font-weight-bold;\n color: var(--#{$prefix}nav-underline-link-active-color);\n border-bottom-color: currentcolor;\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n.nav-fill,\n.nav-justified {\n .nav-item .nav-link {\n width: 100%; // Make sure button will grow\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n // scss-docs-start navbar-css-vars\n --#{$prefix}navbar-padding-x: #{if($navbar-padding-x == null, 0, $navbar-padding-x)};\n --#{$prefix}navbar-padding-y: #{$navbar-padding-y};\n --#{$prefix}navbar-color: #{$navbar-light-color};\n --#{$prefix}navbar-hover-color: #{$navbar-light-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-light-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-light-active-color};\n --#{$prefix}navbar-brand-padding-y: #{$navbar-brand-padding-y};\n --#{$prefix}navbar-brand-margin-end: #{$navbar-brand-margin-end};\n --#{$prefix}navbar-brand-font-size: #{$navbar-brand-font-size};\n --#{$prefix}navbar-brand-color: #{$navbar-light-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-light-brand-hover-color};\n --#{$prefix}navbar-nav-link-padding-x: #{$navbar-nav-link-padding-x};\n --#{$prefix}navbar-toggler-padding-y: #{$navbar-toggler-padding-y};\n --#{$prefix}navbar-toggler-padding-x: #{$navbar-toggler-padding-x};\n --#{$prefix}navbar-toggler-font-size: #{$navbar-toggler-font-size};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-light-toggler-icon-bg)};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-light-toggler-border-color};\n --#{$prefix}navbar-toggler-border-radius: #{$navbar-toggler-border-radius};\n --#{$prefix}navbar-toggler-focus-width: #{$navbar-toggler-focus-width};\n --#{$prefix}navbar-toggler-transition: #{$navbar-toggler-transition};\n // scss-docs-end navbar-css-vars\n\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: var(--#{$prefix}navbar-padding-y) var(--#{$prefix}navbar-padding-x);\n @include gradient-bg();\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n // The `flex-wrap` property is inherited to simplify the expanded navbars\n %container-flex-properties {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n padding-top: var(--#{$prefix}navbar-brand-padding-y);\n padding-bottom: var(--#{$prefix}navbar-brand-padding-y);\n margin-right: var(--#{$prefix}navbar-brand-margin-end);\n @include font-size(var(--#{$prefix}navbar-brand-font-size));\n color: var(--#{$prefix}navbar-brand-color);\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap;\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}navbar-brand-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n // scss-docs-start navbar-nav-css-vars\n --#{$prefix}nav-link-padding-x: 0;\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: var(--#{$prefix}navbar-color);\n --#{$prefix}nav-link-hover-color: var(--#{$prefix}navbar-hover-color);\n --#{$prefix}nav-link-disabled-color: var(--#{$prefix}navbar-disabled-color);\n // scss-docs-end navbar-nav-css-vars\n\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-link {\n &.active,\n &.show {\n color: var(--#{$prefix}navbar-active-color);\n }\n }\n\n .dropdown-menu {\n position: static;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n color: var(--#{$prefix}navbar-color);\n\n a,\n a:hover,\n a:focus {\n color: var(--#{$prefix}navbar-active-color);\n }\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: var(--#{$prefix}navbar-toggler-padding-y) var(--#{$prefix}navbar-toggler-padding-x);\n @include font-size(var(--#{$prefix}navbar-toggler-font-size));\n line-height: 1;\n color: var(--#{$prefix}navbar-color);\n background-color: transparent; // remove default button style\n border: var(--#{$prefix}border-width) solid var(--#{$prefix}navbar-toggler-border-color); // remove default button style\n @include border-radius(var(--#{$prefix}navbar-toggler-border-radius));\n @include transition(var(--#{$prefix}navbar-toggler-transition));\n\n &:hover {\n text-decoration: none;\n }\n\n &:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--#{$prefix}navbar-toggler-focus-width);\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--#{$prefix}navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--#{$prefix}scroll-height, 75vh);\n overflow-y: auto;\n}\n\n// scss-docs-start navbar-expand-loop\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n // stylelint-disable-next-line scss/selector-no-union-class-name\n {$infix} {\n @include media-breakpoint-up($next) {\n flex-wrap: nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: var(--#{$prefix}navbar-nav-link-padding-x);\n padding-left: var(--#{$prefix}navbar-nav-link-padding-x);\n }\n }\n\n .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n\n .offcanvas {\n // stylelint-disable declaration-no-important\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n @include box-shadow(none);\n @include transition(none);\n // stylelint-enable declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n }\n }\n }\n }\n}\n// scss-docs-end navbar-expand-loop\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n.navbar-light {\n @include deprecate(\"`.navbar-light`\", \"v5.2.0\", \"v6.0.0\", true);\n}\n\n.navbar-dark,\n.navbar[data-bs-theme=\"dark\"] {\n // scss-docs-start navbar-dark-css-vars\n --#{$prefix}navbar-color: #{$navbar-dark-color};\n --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-dark-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-dark-active-color};\n --#{$prefix}navbar-brand-color: #{$navbar-dark-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-dark-brand-hover-color};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-dark-toggler-border-color};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n // scss-docs-end navbar-dark-css-vars\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .navbar-toggler-icon {\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n }\n }\n}\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n // scss-docs-start badge-css-vars\n --#{$prefix}badge-padding-x: #{$badge-padding-x};\n --#{$prefix}badge-padding-y: #{$badge-padding-y};\n @include rfs($badge-font-size, --#{$prefix}badge-font-size);\n --#{$prefix}badge-font-weight: #{$badge-font-weight};\n --#{$prefix}badge-color: #{$badge-color};\n --#{$prefix}badge-border-radius: #{$badge-border-radius};\n // scss-docs-end badge-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);\n @include font-size(var(--#{$prefix}badge-font-size));\n font-weight: var(--#{$prefix}badge-font-weight);\n line-height: 1;\n color: var(--#{$prefix}badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius(var(--#{$prefix}badge-border-radius));\n @include gradient-bg();\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n","//\n// Base styles\n//\n\n.alert {\n // scss-docs-start alert-css-vars\n --#{$prefix}alert-bg: transparent;\n --#{$prefix}alert-padding-x: #{$alert-padding-x};\n --#{$prefix}alert-padding-y: #{$alert-padding-y};\n --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};\n --#{$prefix}alert-color: inherit;\n --#{$prefix}alert-border-color: transparent;\n --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);\n --#{$prefix}alert-border-radius: #{$alert-border-radius};\n --#{$prefix}alert-link-color: inherit;\n // scss-docs-end alert-css-vars\n\n position: relative;\n padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);\n margin-bottom: var(--#{$prefix}alert-margin-bottom);\n color: var(--#{$prefix}alert-color);\n background-color: var(--#{$prefix}alert-bg);\n border: var(--#{$prefix}alert-border);\n @include border-radius(var(--#{$prefix}alert-border-radius));\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n color: var(--#{$prefix}alert-link-color);\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $alert-dismissible-padding-r;\n\n // Adjust close link position\n .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: $stretched-link-z-index + 1;\n padding: $alert-padding-y * 1.25 $alert-padding-x;\n }\n}\n\n\n// scss-docs-start alert-modifiers\n// Generate contextual modifier classes for colorizing the alert\n@each $state in map-keys($theme-colors) {\n .alert-#{$state} {\n --#{$prefix}alert-color: var(--#{$prefix}#{$state}-text-emphasis);\n --#{$prefix}alert-bg: var(--#{$prefix}#{$state}-bg-subtle);\n --#{$prefix}alert-border-color: var(--#{$prefix}#{$state}-border-subtle);\n --#{$prefix}alert-link-color: var(--#{$prefix}#{$state}-text-emphasis);\n }\n}\n// scss-docs-end alert-modifiers\n","// Transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n // scss-docs-start close-css-vars\n --#{$prefix}btn-close-color: #{$btn-close-color};\n --#{$prefix}btn-close-bg: #{ escape-svg($btn-close-bg) };\n --#{$prefix}btn-close-opacity: #{$btn-close-opacity};\n --#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity};\n --#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow};\n --#{$prefix}btn-close-focus-opacity: #{$btn-close-focus-opacity};\n --#{$prefix}btn-close-disabled-opacity: #{$btn-close-disabled-opacity};\n --#{$prefix}btn-close-white-filter: #{$btn-close-white-filter};\n // scss-docs-end close-css-vars\n\n box-sizing: content-box;\n width: $btn-close-width;\n height: $btn-close-height;\n padding: $btn-close-padding-y $btn-close-padding-x;\n color: var(--#{$prefix}btn-close-color);\n background: transparent var(--#{$prefix}btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements\n border: 0; // for button elements\n @include border-radius();\n opacity: var(--#{$prefix}btn-close-opacity);\n\n // Override 's hover style\n &:hover {\n color: var(--#{$prefix}btn-close-color);\n text-decoration: none;\n opacity: var(--#{$prefix}btn-close-hover-opacity);\n }\n\n &:focus {\n outline: 0;\n box-shadow: var(--#{$prefix}btn-close-focus-shadow);\n opacity: var(--#{$prefix}btn-close-focus-opacity);\n }\n\n &:disabled,\n &.disabled {\n pointer-events: none;\n user-select: none;\n opacity: var(--#{$prefix}btn-close-disabled-opacity);\n }\n}\n\n@mixin btn-close-white() {\n filter: var(--#{$prefix}btn-close-white-filter);\n}\n\n.btn-close-white {\n @include btn-close-white();\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .btn-close {\n @include btn-close-white();\n }\n }\n}\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: RGBA(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}link-opacity, 1)) if($enable-important-utilities, !important, null);\n text-decoration-color: RGBA(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}link-underline-opacity, 1)) if($enable-important-utilities, !important, null);\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n $hover-color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage));\n color: RGBA(#{to-rgb($hover-color)}, var(--#{$prefix}link-opacity, 1)) if($enable-important-utilities, !important, null);\n text-decoration-color: RGBA(to-rgb($hover-color), var(--#{$prefix}link-underline-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n }\n }\n}\n\n// One-off special link helper as a bridge until v6\n.link-body-emphasis {\n color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-opacity, 1)) if($enable-important-utilities, !important, null);\n text-decoration-color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-underline-opacity, 1)) if($enable-important-utilities, !important, null);\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-opacity, .75)) if($enable-important-utilities, !important, null);\n text-decoration-color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-underline-opacity, .75)) if($enable-important-utilities, !important, null);\n }\n }\n}\n",".focus-ring:focus {\n outline: 0;\n // By default, there is no `--bs-focus-ring-x`, `--bs-focus-ring-y`, or `--bs-focus-ring-blur`, but we provide CSS variables with fallbacks to initial `0` values\n box-shadow: var(--#{$prefix}focus-ring-x, 0) var(--#{$prefix}focus-ring-y, 0) var(--#{$prefix}focus-ring-blur, 0) var(--#{$prefix}focus-ring-width) var(--#{$prefix}focus-ring-color);\n}\n",".icon-link {\n display: inline-flex;\n gap: $icon-link-gap;\n align-items: center;\n text-decoration-color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, .5));\n text-underline-offset: $icon-link-underline-offset;\n backface-visibility: hidden;\n\n > .bi {\n flex-shrink: 0;\n width: $icon-link-icon-size;\n height: $icon-link-icon-size;\n fill: currentcolor;\n @include transition($icon-link-icon-transition);\n }\n}\n\n.icon-link-hover {\n &:hover,\n &:focus-visible {\n > .bi {\n transform: var(--#{$prefix}icon-link-transform, $icon-link-icon-transform);\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n\n // Fix for positioned table caption that could become anonymous cells\n &:not(caption) {\n position: absolute !important;\n }\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: $vr-border-width;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix: \"\", $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n","@import \"vars\";\n\n// Variable overrides first\n$primary: $primary-color;\n$secondary: $secondary-color;\n$enable-shadows: true;\n$prefix: \"pa-\";\n\n// Required\n@import \"../../node_modules/bootstrap/scss/functions\";\n@import \"../../node_modules/bootstrap/scss/variables\";\n@import \"../../node_modules/bootstrap/scss/variables-dark\";\n@import \"../../node_modules/bootstrap/scss/maps\";\n@import \"../../node_modules/bootstrap/scss/mixins\";\n@import \"../../node_modules/bootstrap/scss/utilities\";\n@import \"../../node_modules/bootstrap/scss/root\";\n@import \"../../node_modules/bootstrap/scss/reboot\";\n\n@import \"../../node_modules/bootstrap/scss/type\";\n@import \"../../node_modules/bootstrap/scss/images\";\n@import \"../../node_modules/bootstrap/scss/containers\";\n@import \"../../node_modules/bootstrap/scss/grid\";\n@import \"../../node_modules/bootstrap/scss/tables\";\n@import \"../../node_modules/bootstrap/scss/forms\";\n@import \"../../node_modules/bootstrap/scss/buttons\";\n@import \"../../node_modules/bootstrap/scss/transitions\";\n@import \"../../node_modules/bootstrap/scss/dropdown\";\n@import \"../../node_modules/bootstrap/scss/button-group\";\n@import \"../../node_modules/bootstrap/scss/nav\";\n@import \"../../node_modules/bootstrap/scss/navbar\"; // Requires nav\n// @import \"../../node_modules/bootstrap/scss/card\";\n// @import \"../../node_modules/bootstrap/scss/breadcrumb\";\n// @import \"../../node_modules/bootstrap/scss/accordion\";\n// @import \"../../node_modules/bootstrap/scss/pagination\";\n@import \"../../node_modules/bootstrap/scss/badge\";\n@import \"../../node_modules/bootstrap/scss/alert\";\n// @import \"../../node_modules/bootstrap/scss/progress\";\n// @import \"../../node_modules/bootstrap/scss/list-group\";\n@import \"../../node_modules/bootstrap/scss/close\";\n// @import \"../../node_modules/bootstrap/scss/toasts\";\n// @import \"../../node_modules/bootstrap/scss/modal\"; // Requires transitions\n// @import \"../../node_modules/bootstrap/scss/tooltip\";\n// @import \"../../node_modules/bootstrap/scss/popover\";\n// @import \"../../node_modules/bootstrap/scss/carousel\";\n// @import \"../../node_modules/bootstrap/scss/spinners\";\n// @import \"../../node_modules/bootstrap/scss/offcanvas\"; // Requires transitions\n// @import \"../../node_modules/bootstrap/scss/placeholders\";\n\n// Helpers\n@import \"../../node_modules/bootstrap/scss/helpers\";\n\n// Utilities\n@import \"../../node_modules/bootstrap/scss/utilities/api\";\n\nbody {\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n color: var(--text-color);\n background-color: var(--bg-color);\n max-width: 1200px;\n margin: 0 auto;\n}\n\n.btn-primary {\n color: var(--text-color-reverse);\n background-color: var(--primary-color);\n border-color: var(--primary-color);\n}\n\n.btn-outline-primary {\n color: var(--primary-color);\n background: none;\n border-color: var(--primary-color);\n\n &:hover {\n background-color: var(--primary-color);\n color: var(--text-color-reverse);\n }\n}\n\n.btn-secondary {\n color: #ffffff;\n background-color: var(--secondary-color);\n border-color: var(--secondary-color);\n}\n\n.navbar {\n .nav-top {\n height: 86px;\n }\n\n .fixed-menu {\n width: 220px;\n }\n\n .logo img {\n width: 200px;\n }\n}\n\na {\n text-decoration: underline;\n color: var(--link-color);\n\n &:hover {\n color: var(--link-hover-color);\n }\n\n &:active {\n color: var(--link-color);\n }\n}\n\nh1,\nh2 {\n font-weight: 500;\n line-height: 1.25;\n padding-bottom: 12px;\n padding-top: 14px;\n}\n\nh1 {\n font-weight: 600;\n}\n\nh3 {\n padding-top: 16px;\n}\n\n.motto {\n .title {\n font-weight: 600;\n font-size: 32px;\n padding-top: 36px;\n }\n\n .motto {\n font-weight: 500;\n font-size: 20px;\n }\n\n .short {\n font-weight: 500;\n font-size: 12px;\n }\n\n}\n\n.btn-fixed {\n border-width: 2px;\n border-style: solid;\n width: 220px;\n height: 46px;\n text-transform: uppercase;\n font-weight: 700;\n border-radius: 5px 5px 5px 5px;\n vertical-align: middle;\n line-height: 42px;\n padding: 0;\n margin: 16px;\n box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075);\n}\n\n\n.pactus-video {\n video {\n max-width: 100%;\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n display: block;\n }\n}\n\n.highlighter-rouge .highlight pre {\n background-color: #0d1117;\n padding: 32px 12px 12px 12px;\n color: #cccccc;\n position: relative;\n overflow: auto;\n direction: ltr;\n\n button {\n position: absolute;\n top: 6px;\n right: 8px;\n\n padding: 2px;\n background-color: #808080;\n color: #404040;\n border-radius: 5px;\n border: ridge 1px #808080;\n\n &:hover {\n cursor: pointer;\n background-color: #bcbabb;\n }\n }\n}\n\n.nav-tabs {\n border-color: #0d1117 !important;\n\n .nav-link {\n border-width: 0 !important;\n\n &:not(.active):hover {\n color: #ffffff !important;\n background-color: #808080 !important;\n }\n }\n\n .active {\n color: #ffffff !important;\n background-color: #0d1117 !important;\n }\n}\n\n.table {\n thead tr th {\n font-weight: 700;\n background-color: var(--bg-color) !important;\n }\n\n // tbody tr:nth-child(2n + 1) td {\n // background-color: #eee;\n // }\n}\n\nblockquote {\n background: #eee;\n border-left: 10px solid #ccc;\n padding: 16px;\n quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n\n &:before {\n color: #ccc;\n content: open-quote;\n font-size: 64px;\n line-height: 0.1em;\n vertical-align: -0.4em;\n }\n\n p {\n margin-top: 16px;\n }\n\n & p:first-child {\n display: inline;\n padding-bottom: 160px;\n margin-bottom: 160px;\n }\n}\n\n.footer {\n background-color: var(--primary-color);\n color: var(--text-color-reverse);\n\n .section {\n font-size: 1.75rem;\n font-weight: 500;\n line-height: 1.25;\n padding-bottom: 20px;\n }\n\n li {\n padding-bottom: 8px;\n }\n\n &.anchor {\n a {\n color: var(--text-color-reverse);\n }\n\n a:link {\n color: var(--text-color-reverse);\n background-color: transparent;\n text-decoration: none;\n }\n\n a:hover {\n color: var(--text-color-reverse);\n }\n }\n\n .legal {\n color: var(--text-color-reverse);\n font-size: 12px;\n }\n}\n\n.community {\n img {\n margin: 4px;\n }\n}\n\n.community_ran {\n img {\n margin: 4px;\n }\n}\n\n#btn-back-to-top {\n background-color: var(--primary-color);\n color: var(--bg-color);\n position: fixed;\n bottom: 20px;\n right: 20px;\n display: none;\n}\n\n.edit-bar {\n padding-top: 30px;\n\n .edit-btn,\n .edit-btn>a:hover {\n color: var(--text-color);\n text-decoration: none;\n }\n}\n\n.all-posts {\n .post-link {\n padding-bottom: 8px;\n }\n}\n\n.blog-post {\n .post-date {\n padding-bottom: 10px;\n color: #808080;\n }\n\n .content {\n padding-top: 22px;\n min-height: 600px;\n }\n}\n\n.partners {\n img {\n padding-top: 24px;\n }\n}\n\n.sensifai{\n max-width: 300px;\n}\n",".hexdump {\n font-family: monospace;\n font-size: 12px;\n padding-bottom: 1rem;\n}\n\n.hexdump .offset {\n border-right: 2px solid #708090;\n color: #778899;\n}\n.hexdump .ascii {\n color: #696969;\n}\n","@import \"vars\";\n\n.faq {\n h3 {\n margin-top: 20px;\n padding-top: 16px;\n border-top: 1px solid var(--primary-color);\n }\n\n a {\n text-decoration: none;\n }\n\n .group {\n padding-top: 16px;\n\n .col {\n font-weight: 600;\n padding-bottom: 10px;\n }\n }\n\n .separator {\n padding-top: 12px;\n padding-bottom: 12px;\n }\n\n .read_more {\n padding-top: 12px;\n }\n}\n","@import \"vars\";\n\n.toc {\n\n .btn,\n a {\n color: var(--text-color);\n }\n\n .btn-section {\n padding: 0.25rem 0.5rem;\n font-weight: 600;\n background-color: transparent;\n }\n\n .btn-section:hover,\n .btn-section:focus {\n background-color: var(--bg-color);\n }\n\n .btn-page a {\n padding: 0.1875rem 0.5rem;\n margin-top: 0.125rem;\n margin-left: 1.25rem;\n }\n\n .btn-page a:hover,\n .btn-page a:focus,\n .btn-page .selected {\n background-color: var(--bg-color);\n }\n}\n","$line-color: #939597;\n\n/* The actual timeline (the vertical ruler) */\n.timeline {\n position: relative;\n\n /* The actual timeline (the vertical ruler) */\n &::after {\n content: \"\";\n position: absolute;\n width: 6px;\n background-color: $line-color;\n top: 0;\n bottom: 0;\n left: 50%;\n margin-left: -3px;\n }\n}\n\n/* Container around content */\n.timeline-card {\n position: relative;\n width: 50%;\n\n .card {\n border: 1px solid rgba(0, 0, 0, 0.175);\n border-radius: 5px;\n background-color: #eeeeee;\n color: #4c4c4c;\n\n a {\n color: #4c4c4c;\n }\n\n .text-muted {\n color: #898b8d !important;\n }\n }\n\n .card-title {\n padding-bottom: 12px;\n font-size: 1.1rem;\n font-weight: 500;\n }\n\n /* The circles on the timeline */\n &::after {\n line-height: 38px;\n font-size: 24px;\n position: absolute;\n text-align: center;\n width: 48px;\n height: 48px;\n right: -24px;\n top: 15px;\n border-radius: 50%;\n z-index: 1;\n }\n\n &.completed::after {\n content: \"✅\";\n background-color: #eeeeee;\n border: 5px solid #77b255;\n }\n\n &.ongoing::after {\n content: \"🚧\";\n background-color: #eeeeee;\n border: 5px solid #ffcb4b;\n }\n\n &.upcoming::after {\n content: \"⏳\";\n background-color: #eeeeee;\n border: 5px solid #478ec2;\n }\n\n /* Place the container to the left */\n &.left {\n padding: 0px 50px 20px 0px;\n left: 0;\n }\n\n /* Place the container to the right */\n &.right {\n padding: 0px 0px 20px 50px;\n left: 50%;\n }\n\n /* Add arrows to the left container (pointing right) */\n &.left::before {\n content: \"\";\n position: absolute;\n height: 20px;\n width: 20px;\n background-color: #eeeeee;\n box-sizing: border-box;\n transform: rotate(45deg) translate(-50%);\n top: 34px;\n z-index: 0;\n right: 33px;\n border-right: 1px solid rgba(0, 0, 0, 0.175);\n border-top: 1px solid rgba(0, 0, 0, 0.175);\n }\n\n /* Add arrows to the right container (pointing left) */\n &.right::before {\n content: \"\";\n position: absolute;\n height: 20px;\n width: 20px;\n background-color: #eeeeee !important;\n box-sizing: border-box;\n transform: rotate(45deg) translate(-50%);\n top: 33px;\n z-index: 0;\n left: 48px;\n border-left: 1px solid rgba(0, 0, 0, 0.175);\n border-bottom: 1px solid rgba(0, 0, 0, 0.175);\n }\n\n /* Fix the circle for containers on the right side */\n &.right::after {\n left: -24px;\n }\n}\n\n/* Media queries - Responsive timeline on screens less than 600px wide */\n@media screen and (max-width: 600px) {\n\n /* Place the timeline to the left */\n .timeline::after {\n left: 31px;\n }\n\n /* Full-width containers */\n .timeline-card {\n width: 100%;\n padding-left: 80px !important;\n padding-right: 25px !important;\n\n /* Make sure that all arrows are pointing leftwards */\n &::before {\n left: 77px !important;\n }\n\n /* Make sure all circles are at the same spot */\n &.left::after,\n &.right::after {\n left: 8px !important;\n }\n\n &.left::before {\n border-right: none;\n border-top: none;\n border-left: 1px solid rgba(0, 0, 0, 0.175);\n border-bottom: 1px solid rgba(0, 0, 0, 0.175);\n }\n\n &.right::before {\n right: auto;\n }\n\n /* Make all right containers behave like the left ones */\n &.right {\n left: 0%;\n }\n }\n}\n","@import \"vars\";\n\n.learn {\n h2 {\n border-top: 1px solid var(--primary-color);\n }\n}\n","@include color-mode(dark) {\n blockquote {\n background: #14171c;\n }\n\n\n .toc {\n .btn-section::before {\n --svg-color: var(--text);\n }\n }\n\n .fa-linux {\n color: #ffffff;\n }\n}\n"],"file":"custom.css"}
\ No newline at end of file
diff --git a/ar/blog/index.html b/ar/blog/index.html
new file mode 100644
index 000000000..d5e6514e3
--- /dev/null
+++ b/ar/blog/index.html
@@ -0,0 +1,673 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ مدونة | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
جميع المقالات
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- 28 September 2023
+
+
+
+
+
- 24 September 2023
+
+
+
+
+
- 04 September 2023
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- 24 September 2022
+
+
+
+
+
- 20 September 2022
+
+
+
+
+
- 18 September 2022
+
+
+
+
+
- 04 September 2022
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/browserconfig.xml b/ar/browserconfig.xml
new file mode 100644
index 000000000..b3930d0f0
--- /dev/null
+++ b/ar/browserconfig.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+ #da532c
+
+
+
diff --git a/ar/community/index.html b/ar/community/index.html
new file mode 100644
index 000000000..e40c65388
--- /dev/null
+++ b/ar/community/index.html
@@ -0,0 +1,485 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ المجتمع | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
انضم إلى مجتمع بكتوس
+
+
من خلال الانضمام إلى مجتمع بكتوس، تصبح جزءًا من شبكة عالمية من المبتكرين والمفكرين والفاعلين الذين يتحدون برؤية مشتركة لبناء مستقبل أفضل مع تقنية البلوكشين. سواء كنت مطورًا أو رائد أعمال أو مستثمرًا أو مجرد عاشق للبلوكشين، هناك مكان لك هنا في بكتوس. إذًا، لنتحد ونحدث تغييرًا!
+
+
+
+
To explore the communities managed by members of the community, you can follow the links below.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/contributing/index.html b/ar/contributing/index.html
new file mode 100644
index 000000000..aad73ce4b
--- /dev/null
+++ b/ar/contributing/index.html
@@ -0,0 +1,481 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ المساهمة | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
المساهمة
+
+
+ الترجمة قديمة. يمكنك قراءتها، لكن قد لا تكون دقيقة.
+
As an open-source platform, Pactus blockchain empowers from its community.
+Whether you’re a developer, designer, or enthusiast, your contributions can make a meaningful impact.
+
+
There are several ways to support the Pactus project:
+
+
Run a Node
+
+
One of the most effective ways to contribute to the Pactus network is by running a node.
+A “node” is a software program that downloads a copy of the Pactus blockchain and
+ensure the network keeps running safe and decentralized.
+
+
These guides can help you to run and configure your node:
+
+
+
+
Become a Validator
+
+
Validators play an important role in the Pactus blockchain by verifying transactions and
+adding them to the blockchain.
+By becoming a validator, you can earn rewards
+for contributing to the network’s security and decentralization.
+
+
To become a validator, you will need to stake a certain amount of Pactus coins.
+These guides can help you to send a Bond transaction and stake some coins:
+
+
+
+
Develop
+
+
Pactus is an open-source project that welcomes and encourages contributions from developers.
+By contributing to the project, you can help improve the Pactus platform and create new features that
+benefit the entire community.
+
+
You can check our Contributing page
+for more information on how to get involved and contribute to the project.
+
+
Translation
+
+
Another way to contribute to the Pactus project is by translating this website into other languages and
+improving its content.
+
+
Spread the Word
+
+
The more people who know about Pactus, the more opportunities there are for collaboration and growth.
+Share our project on social media, attend Pactus events, or simply tell your friends and colleagues about us.
+
+
+
+
Together, Let’s build a better future for blockchain technology.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/download/index.html b/ar/download/index.html
new file mode 100644
index 000000000..67ffbfbac
--- /dev/null
+++ b/ar/download/index.html
@@ -0,0 +1,596 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ تنزيل | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
تحميل بكتوس
+
+
على هذه الصفحة يمكنك العثور على كيفية تحميل والحصول على أحدث إصدار من برنامج بكتوس.
+
+
+
+
🏗️ تجميع من شفرة المصدر
+
+
يتم توزيع مشروع بكتوس كبرنامج مفتوح المصدر، لذا فإن الطريقة المفضلة لتثبيته هي استنساخ شفرة المصدر من مستودع جيت هاب وتجميع شفرة المصدر.
+
+
تتوفر تعليمات تجميع بكتوس على صفحة التثبيت .
+
+
+
+
⬇️ تنزيل الإصدارات المستقرة
+
+
يمكنك أيضًا تنزيل أحدث إصدارات بكتوس المستقرة. يتم تحديث هذه الإصدارات تلقائيًا عند إصدار نسخة جديدة في مستودع جيت هاب .
+
+
واجهة المستخدم الرسومية لـ بكتوس (GUI)
+
+
يمكنك تشغيل بكتوس في وضع واجهة المستخدم الرسومية (GUI) وهو مناسب للمبتدئين والمستخدمين المتقدمين.
+
+
+
+
+
+
+
تطبيق غير موثوق كن على علم بأن الثنائيات المجمعة مسبقًا لا يتم شحنها مع أي
شهادة توقيع الكود . من المحتمل أن تكون الثنائيات المجمعة مسبقًا غير موثوقة على نظام ويندوز و ماك أو إس.
+
+
+
+
بمجرد تنزيل واجهة بكتوس الرسومية (GUI)، يمكنك اتباع هذا البرنامج التعليمي لإعداد عقدتك وتشغيلها:
+ كيفية تشغيل بكتوس في الوضع الرسومي؟
+
+
+
+
واجهة سطر الأوامر لـ بكتوس (CLI)
+
+
يمكن للمستخدم المتقدم تشغيل بكتوس في وضع واجهة سطر الأوامر (CLI).
+
+
+
+
+
+
بمجرد تنزيل بكتوس CLI، يمكنك اتباع هذا البرنامج التعليمي لإعداد عقدتك وتشغيلها:
+ كيفية تشغيل بكتوس في وضع سطر الأوامر؟
+
+
Downloader script
+
+
For Unix-like systems (e.g., Linux, macOS, or MSYS2 on Windows), there is a downloader script available. This script can download the archived file, verify it, and extract it for you. To use it, simply run the following command in your terminal:
+
+
curl --proto '=https' --tlsv1 .2 -sSL https://github.com/pactus-project/pactus/releases/download/v1.4.0/pactus_downloader.sh | sh
+
+
+
+
+
🐳 حاوية دوكر
+
+
يمكن للمستخدم المتقدم الحصول على صورة بكتوس دوكر من Docker Hub .
+
+
يمكنك اتباع هذا البرنامج التعليمي لإعداد عقدتك وتشغيلها باستخدام دوكر:
+ كيفية تشغيل بكتوس باستخدام دوكر؟
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/favicon-128x128.png b/ar/favicon-128x128.png
new file mode 100644
index 000000000..56c2f6cb2
Binary files /dev/null and b/ar/favicon-128x128.png differ
diff --git a/ar/favicon-16x16.png b/ar/favicon-16x16.png
new file mode 100644
index 000000000..4babb6356
Binary files /dev/null and b/ar/favicon-16x16.png differ
diff --git a/ar/favicon-32x32.png b/ar/favicon-32x32.png
new file mode 100644
index 000000000..e22d5d721
Binary files /dev/null and b/ar/favicon-32x32.png differ
diff --git a/ar/favicon-64x64.png b/ar/favicon-64x64.png
new file mode 100644
index 000000000..e8d111c2e
Binary files /dev/null and b/ar/favicon-64x64.png differ
diff --git a/ar/favicon.ico b/ar/favicon.ico
new file mode 100644
index 000000000..64080c0ee
Binary files /dev/null and b/ar/favicon.ico differ
diff --git a/ar/feed.xml b/ar/feed.xml
new file mode 100644
index 000000000..0175b9efc
--- /dev/null
+++ b/ar/feed.xml
@@ -0,0 +1,1456 @@
+Jekyll 2024-08-27T21:36:24+00:00 https://pactus.org/feed.xml Pactus blockchain Pactus 1.4.0 (Amsterdam) Released 2024-08-01T00:00:00+00:00 2024-08-01T00:00:00+00:00 https://pactus.org/2024/08/01/release-1-4-0 Overview
+
+Pactus Blockchain Version 1.4.0 (Amsterdam)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+Highlights
+
+
+
+ Introduction of Pruned Mode:
+Starting with version 1.4.0, Pactus now supports Pruned Mode.
+This feature allows nodes to maintain only the most recent blocks from the last 10 days,
+significantly reducing storage requirements and speeding up the synchronization process.
+
+
+ Node Type Page:
+The startup assistant now features a page for selecting the Node Type,
+enabling users to easily choose between a Full Node and a Pruned Node.
+
+
+ Import Command:
+The import
command now facilitates the download and integration of pruned snapshots,
+making it easier to set up nodes with minimal data.
+
+
+ Prune Command:
+The prune
command allows users to manually initiate the pruning of old blocks and transactions.
+This command helps reduce storage size by removing outdated data.
+
+
+ Enhanced Security Features:
+This release includes updates to the firewall, enhancing the validation of gossip and stream messages,
+which improves the overall security of the network.
+
+
+ New gRPC API Enhancements:
+The gRPC API now includes additional information, such as pruning status and height,
+providing more data for developers and users.
+
+
+ Stability and Performance Improvements:
+Numerous fixes and optimizations have been made across the platform,
+including resolving issues with dynamic library dependencies on macOS,
+addressing syncing issues in Pruned Mode,
+and fixing a bug in the consensus algorithm on query-proposal message.
+
+
+
+Download
+
+To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+How to Upgrade
+
+If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Feat
+
+
+ cmd : add node type page to the startup assistant (#1431 )
+ grpc : adding is-pruned and pruning-height to blockchain info API (#1420 )
+ daemon : add import command to download pruned snapshots (#1424 )
+ util : file downloader with verify sha256 hash (#1422 )
+ sync : define full and prune service (#1412 )
+ pip : implement PIP-23 (#1397 )
+ firewall : check valid gossip and stream messages (#1402 )
+ state : prune block on commit (#1404 )
+ core : pruning client by prune command (#1400 )
+ store : prune block function (#1399 )
+ wallet : add timeout client connection (#1396 )
+ add backup tool script (#1373 )
+
+
+Fix
+
+
+ consensus : handle query for decided proposal (#1438 )
+ gtk : solve dynamic library dependencies and import path on macOS (#1435 )
+ cmd : prevent sudden crash on download error (#1432 )
+ store : pruning height returns zero when store is not in prune mode (#1430 )
+ grpc : add last-block-time to blockchain-info API (#1428 )
+ grpc : show negative pruning height when is pruned false (#1429 )
+ sync : fix syncing issue on prune mode (#1415 )
+ grpc : return error on invalid arguments for VerifyMessage (#1411 )
+ network : accept messages originating from self (#1408 )
+ change wallet rpc ip to dns address (#1398 )
+ pactus-shell : pactus shell support basic auth (#1384 )
+ gui : support ctrl+c for interrupt gui (#1385 )
+ grpc : add basic auth in swagger header (#1383 )
+
+
+Refactor
+
+
+ execution : simplify executors and tests (#1425 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Pactus 1.3.0 (Warsaw) Released 2024-06-27T00:00:00+00:00 2024-06-27T00:00:00+00:00 https://pactus.org/2024/06/27/release-1-3-0 Overview
+
+Pactus Blockchain Version 1.3.0 (Warsaw)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+Highlights
+
+This version fixes an issue that caused some nodes to get stuck for one minutes and
+not receive any new messages during that time.
+
+Breaking Change : gRPC APIs now convert all binary values to hexadecimal strings.
+
+
+ Attention Exchanges and Third-Party Pactus Blockchain Users:
+
+
+ After upgrading to this version, be aware that binary data, such as hashes and signatures,
+ are now formatted as hexadecimal strings. You must update your code to accommodate this change.
+
+
+Download
+
+To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+How to Upgrade
+
+If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Feat
+
+
+ grpc : get txpool content API (#1364 )
+ network : permanent peer store (#1354 )
+
+
+Fix
+
+
+ grpc : change bytes type to hex string (#1371 )
+ http : add basic auth middleware for http server (#1372 )
+ network : use goroutines for sending streams (#1365 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Pactus 1.2.0 (Sydney) Released 2024-06-20T00:00:00+00:00 2024-06-20T00:00:00+00:00 https://pactus.org/2024/06/20/release-1-2-0 Overview
+
+Pactus Blockchain Version 1.2.0 (Sydney)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+Highlights
+
+This version includes some improvements and new features, such as:
+
+
+ Clock offset calculation: Adding clock offset check to
+alert the user if their machine’s time is not synced with the network.
+See PIP-18: Clock Offset Calculation .
+ Minimum fee: The minimum fee is configurable in this version, with the default set to 0.01.
+Each validator can decide the minimum fee of transactions they want to include in the block
+by changing the min_fee
value inside the config file.
+ ip blocker: A new option allows nodes to block certain IPs and disconnect from them.
+ rate limit: Nodes can set rate limits for incoming messages, including transactions.
+ wallet manager: The wallet manager allows users to create and manage wallets using gRPC endpoints.
+
+
+Download
+
+To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+How to Upgrade
+
+If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Feat
+
+
+ config : make minimum fee configurable (#1349 )
+ apply rate limit for the network topics (#1332 )
+ add ipblocker package (#1323 )
+ consensus : fast consensus path implementation (#1253 )
+ version : add alias to node version (#1281 )
+ ntp : add ntp util (#1274 )
+ gRPC : add connection info to node info (#1273 )
+ gRPC : add only_connected parameter to getNetworkInfo API (#1264 )
+ grpc : refactor CreateWallet and add RestoreWallet API endpoint (#1256 )
+ add wallet service (#1241 )
+ ban attacker validators (#1235 )
+ txpool : prevent spamming transactions by defining a minimum value (#1233 )
+ reject direct message from non-supporting agents (#1225 )
+
+
+Fix
+
+
+ wallet : add public key on get new address (#1350 )
+ sync : add IsBannedAddress check in processing connect event (#1347 )
+ sync : update latest supporting version (#1336 )
+ state : improve node startup by optimizing availability score calculation (#1338 )
+ HTTP : add clock offset and connection info to node-info API (#1334 )
+ grpc : add stacktrace to locate panic (#1333 )
+ consensus : implement PIP-26 (#1331 )
+ grpc : improve grpc server and client (#1330 )
+ util : add more ntp pool (#1328 )
+ jsonrpc : update JSON-RPC Gateway to support headers and improve client registry (#1327 )
+ consensus : improve consensus algorithm (#1329 )
+ txpool : set fix fee of 0.1 PAC for transactions (#1320 )
+ network : add block and transaction topics (#1319 )
+ gRPC : prevent concurrent map iteration and map write (#1279 )
+ api : add swagger schemes (#1270 )
+ network : set infinite limit for resource manager (#1261 )
+ sync : introduce session manager (#1257 )
+ HTTP : using amount type for fee in transaction details (#1255 )
+ network : disconnect from peers that has no protocol (#1243 )
+ wallet : saving wallet file after generating new address in gRPC (#1236 )
+ prevent zero stake for bond transactions (#1227 )
+ set bounding interval for first boudning tx only (#1224 )
+
+
+Refactor
+
+
+ wallet : set server address on loading wallet (#1348 )
+ removed deprecated LockWallet and UnLockWallet from WalletService (#1343 )
+ crypto : decode data to point on verification (#1339 )
+ network : define connection info in network proto (#1297 )
+ sync : define peer package (#1271 )
+ network : refactor peer manager and redefine the min cons (#1259 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Pactus 1.1.7 (Santiago) Released 2024-06-02T00:00:00+00:00 2024-06-02T00:00:00+00:00 https://pactus.org/2024/06/02/release-1-1-7 Overview
+
+Pactus Blockchain Version 1.1.7 (Santiago)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+Highlights
+
+Here are the key improvements in this version:
+
+
+
+ Resolves critical issue in consensus :
+This version addresses a critical issue in consensus that prevents broadcasting expired proposals across the network.
+
+
+ Improved network security :
+The version defines a list of blacklisted IPs and disconnects from them, enhancing network security.
+
+
+ Node compatibility :
+This version only connects to nodes with version 1.1.6 or above, ensuring compatibility with the latest software.
+
+
+
+To ensure network stability and security,
+it is recommended that all validators upgrade to this version as soon as they can.
+
+Download
+
+To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+How to Upgrade
+
+If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Feat
+
+
+ network : add firewall black list ips to banning when connecting to peer (#1298 )
+
+
+Fix
+
+
+ sync : load black listed addresses from the config (#1301 )
+ consensus : only proposer responds to the query proposal (#1300 )
+ network : set latest support version to 1.1.6 (#1299 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Pactus 1.1.8 (Budapest) Released 2024-06-02T00:00:00+00:00 2024-06-02T00:00:00+00:00 https://pactus.org/2024/06/02/release-1-1-8 Overview
+
+Pactus Blockchain Version 1.1.8 (Budapest)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+Highlights
+
+This version aims to reduce the consensus message once there is a delay on block creation.
+It also defines a fixed fee of 0.1 PAC for transactions.
+This fixed fee will be replaced by a dynamic fee in future releases,
+which will provide more flexibility and efficiency.
+
+To ensure network stability and security,
+it is recommended that all validators upgrade to this version as soon as they can.
+
+Download
+
+To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+How to Upgrade
+
+If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Feat
+
+
+ firewall : define rate limit for network topics (#1308 )
+
+
+Fix
+
+
+ set fix fee 0.1 PAC for transactions (#1315 )
+ consensus : add round to query proposal message (#1314 )
+ firewall : block peer base on blacklisted CIDR (#1309 )
+ consensus : reduce ChangeProposerTimeout to 6 seconds (#1311 )
+ sync : define rate limit for query vote and proposal (#1310 )
+ decrease to 100 maximum transaction per block (#1306 )
+ consume message first then ignore on ratelimit (#1304 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Pactus 1.1.6 (Ottawa) Released 2024-05-31T00:00:00+00:00 2024-05-31T00:00:00+00:00 https://pactus.org/2024/05/31/release-1-1-6 Overview
+
+Pactus Blockchain Version 1.1.6 (Ottawa)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+Highlights
+
+This version updates the consensus mechanism to move to new rounds once
+a proper and justified “Decided” vote seen by a non-faulty validator.
+This helps ensure that the consensus mechanism stays in sync with the network when the validator restarts.
+
+In this version, the minimum availability score is set to 0.6666.
+This change will help validators receive rewards even in faulty network conditions,
+ensuring that they can continue to participate in the consensus mechanism.
+
+To ensure network stability and security,
+it is recommended that all validators upgrade to this version as soon as they can.
+
+Download
+
+To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+How to Upgrade
+
+If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Fix
+
+
+ consensus : move to new round on decided vote (#1293 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Pactus 1.1.5 (Cape Town) Released 2024-05-30T00:00:00+00:00 2024-05-30T00:00:00+00:00 https://pactus.org/2024/05/30/release-1-1-5 Overview
+
+Pactus Blockchain Version 1.1.5 (Cape Town)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+Highlights
+
+Rate limit
+
+This version applies a rate limit to the messages in the general topics including blocks and transactions.
+This will help nodes to manage the network traffic in times of network congestion or spam attacks.
+
+Dynamic fee
+
+To prevent attackers from sending spam transactions, a dynamic fee model is introduced in this patch.
+Each node can define a minimum fee that is defaulted to 0.000001 PAC.
+However, if the transaction pool becomes full, the transaction fee can increase up to 1 PAC.
+
+To ensure network stability and security,
+it is recommended that all validators upgrade to this version as soon as they can.
+
+Download
+
+To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+How to Upgrade
+
+If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Feat
+
+
+ add dynamic fee (#1290 )
+ network : define config for rate limit threshold (#1284 )
+ network : ratelimit gossip for prevent spamming (#1283 )
+
+
+Fix
+
+
+ change CalculateFee to be backward compatible (#1291 )
+ proposal basic checks deferred to consensus (#1288 )
+ rejected spam tx for same from and to (#1287 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Pactus 1.1.4 (London) Released 2024-05-07T00:00:00+00:00 2024-05-07T00:00:00+00:00 https://pactus.org/2024/05/07/release-1-1-4 Overview
+
+Pactus Blockchain Version 1.1.4 (London)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+
+
+Highlights
+
+This version fixes some issues related to the syncing process and improves the connectivity of the nodes.
+
+Download
+
+To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+How to Upgrade
+
+If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Fix
+
+
+ network : set infinite limit for resource manager (#1261 )
+ sync : introduce session manager (#1257 )
+ HTTP : using amount type for fee in transaction details (#1255 )
+
+
+Refactor
+
+
+ network : refactor peer manager and redefine the min cons (#1259 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Pactus 1.1.3 (Kuala Lumpur) Released 2024-04-25T00:00:00+00:00 2024-04-25T00:00:00+00:00 https://pactus.org/2024/04/25/release-1-1-3 Overview
+
+Pactus Blockchain Version 1.1.3 (Kuala Lumpur)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+This release is named after the city of Kuala Lumpur ,
+and it was unanimously selected by the Pactus community.
+
+
+
+Highlights
+
+This version prevents spamming transactions by defining a minimum value per transaction.
+It is not part of the consensus parameters,
+and each node can set its own threshold.
+By default, it is set to 0.1 PAC.
+
+The version also bans validators that were part of the recent spam attack on the network.
+Their stake will be frozen at block 820,000.
+
+Validators must update their nodes to this version as soon as possible.
+
+Download
+
+To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+How to Upgrade
+
+If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Feat
+
+
+ ban attacker validators (#1235 )
+ txpool : prevent spamming transactions by defining a minimum value (#1233 )
+
+
+Fix
+
+
+ wallet : saving wallet file after generating new address in gRPC (#1236 )
+ network : disconnect from peers that has no protocol (#1243 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Pactus 1.1.1 (Jakarta) Released 2024-04-18T00:00:00+00:00 2024-04-18T00:00:00+00:00 https://pactus.org/2024/04/18/release-1-1-1 Overview
+
+Pactus Blockchain Version 1.1.1 (Jakarta)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+This release is named after the city of Jakarta ,
+and it was unanimously selected by the Pactus community.
+
+
+
+Highlights
+
+This update fixes the issue of zero-bonding
+that identified after the release of 1.1.0 (Hanoi) .
+This fix will be applied at block height 740,000 to ensure a smooth upgrade.
+
+Additionally, this version rejects connections from nodes version 1.0.2 and earlier.
+
+Validators must update their nodes to this version as soon as possible.
+
+Download
+
+To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+How to Upgrade
+
+If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Feat
+
+
+ reject direct message from non-supporting agents (#1225 )
+
+
+Fix
+
+
+ prevent zero stake for bond transactions (#1227 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Pactus 1.1.0 (Hanoi) Released 2024-04-14T00:00:00+00:00 2024-04-14T00:00:00+00:00 https://pactus.org/2024/04/14/release-1-1-0 Overview
+
+Pactus Blockchain Version 1.1.0 (Hanoi)
+is now available for download.
+This release includes the following applications:
+
+
+
+ Pactus GUI :
+The graphical user interface (GUI) for the Pactus node that is suitable
+for both beginners and experienced users.
+
+
+ Pactus Daemon :
+The command-line interface (CLI) for the Pactus node that is suitable for experienced users.
+
+
+ Pactus Shell :
+The command-line tool that allows users to interact with a Pactus node.
+
+
+ Pactus Wallet :
+The wallet software that allows users to manage their wallet and send transactions
+without the need to sync the entire blockchain.
+
+
+
+This release is named after the city of Hanoi ,
+and it was unanimously selected by the Pactus community.
+
+
+
+Highlights
+
+This update brings some changes that are not compatible with the earlier version.
+Here are the key points:
+
+
+ Fee calculations are now rounded, and fees can be accepted within a range of one NanaoPAC (see #1174 ).
+ Small bonds for existing validators are now accepted (see #1152 ).
+
+
+Validators must update their nodes to this version as soon as possible.
+
+Other major changes in this version include:
+
+
+ The addition of a JSON-RPC endpoint required by third parties like exchanges to connect to Pactus nodes.
+ The implementation of Pactus Shell tools, allowing users to query the node.
+
+
+Additionally, this version improves the syncing process for new nodes, enhances the GUI, and addresses several issues.
+
+Download
+
+To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+How to Upgrade
+
+If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version .
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Feat
+
+
+ gRPC : add get address history method (#1206 )
+ grpc : Add GetNewAddress/GetTotalBalance endpoint to gateway (#1197 )
+ GUI : adding total balance to wallet widget (#1194 )
+ Add GetNewAddress gRPC API (#1193 )
+ gRPC : add new API to get the total balance of wallet (#1190 )
+ GUI : showing transaction hash after broadcasting transaction (#1187 )
+ add jsonrpc gateway support (#1183 )
+ config : one reward address in config for all validators (#1178 )
+ GUI : memo field for transactions on GUI wallet (#1182 )
+ implement basic auth for pactus shell (#1177 )
+ grpc : add rust code gen for proto (#1151 )
+ testnet : define permanent Testent genesis (#1173 )
+ add basic auth authentication for securing grpc (#1162 )
+ grpc : calculate fee for create-raw-transaction APIs (#1159 )
+ grpc : add fixed-amount to calc-fee API (#1146 )
+ wallet : adding all account address functions (#1128 )
+ grpc : update swagger API to version 1.1 (#1106 )
+ GUI : adding availability score in wallet (#1118 )
+ logger : adding log target (#1122 )
+ logger : adding file_only option (#1117 )
+ gui : add connections and moniker fields to main windows (#1090 )
+ implementation for PIP-22 (#1067 )
+ generate documentation for proto files (#1064 )
+ pactus-ctl (#946 )
+
+
+Fix
+
+
+ gRPC : add basic auth option in header (#1217 )
+ gRPC : not return block data on information verbosity (#1212 )
+ wallet : fix wallet conn issue (#1211 )
+ GUI : update total balance on wallet timeout (#1204 )
+ accept small bond to existing validator (#1152 )
+ GUI : make transaction hash selactable (#1196 )
+ close connections with peers that have no supported protocol (#1181 )
+ sync : check the start block request height (#1176 )
+ config : load logger levels in Mainnet config (#1168 )
+ gRPC : pactus swagger not found (#1163 )
+ add error type for invalid configs (#1153 )
+ save Mainnet config with inline comments (#1143 )
+ network : set deadline for streams (#1149 )
+ grpc : fix error 404 on grpc gateway (#1144 )
+ wallet : checking args in history add (#1141 )
+ gRPC : adding sign raw transaction API to gateway (#1116 )
+ sync : fix concurrent map read-write crash (#1112 )
+ network : remove disconnected peers from peerMgr (#1110 )
+ network : set dial and accept limit in connection gater (#1089 )
+ stderr logger in windows os (#1081 )
+ sync : improve syncing process (#1087 )
+ network : redefine resource limits (#1086 )
+
+
+Refactor
+
+
+ sync : improve syncing process (#1207 )
+ move fee calculation logic to execution package (#1195 )
+ introduce Amount data type for converting PAC units (#1174 )
+ using PAC instead of atomic units for external input/outputs (#1161 )
+ change func() to cancel func type (#1142 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Pactus Permanent Phoenix Testnet Launched 2024-03-16T00:00:00+00:00 2024-03-16T00:00:00+00:00 https://pactus.org/2024/03/16/testnet-phoenix-launched The public and permanent Phoenix Testnet
+for the Pactus blockchain has been launched.
+This Testnet serves as a valuable platform for developers to thoroughly examine their projects,
+providing a safe playground to test and deploy their applications before transitioning to the Mainnet.
+
+
+
+All parameters within the Testnet mirror those of the Mainnet,
+ensuring a consistent environment for testing and development.
+The genesis block for the Testnet is available
+here .
+
+Currently, there are four active nodes running the Testnet, accessible at the following addresses:
+
+
+ testnet1.pactus.org
+ testnet2.pactus.org
+ testnet3.pactus.org
+ testnet4.pactus.org
+
+
+The Testnet’s name, Phoenix, was chosen by the Pactus community from various suggestions.
+It embodies the spirit of rebirth and renewal, highlighting the innovative and testing-focused nature of the network.
+Developers can utilize the RoboPAC as a faucet to receive test coins and
+thoroughly test their applications within this environment.
+It’s important to note that the coins within this Testnet hold no monetary value and are only meant for testing purpose.
+
+All addresses within the Phoenix network are prefixed with tpc1...
,
+distinguishing them from Mainnet addresses that start with pc1...
’.
+This clear differentiation streamlines development and ensures seamless integration when transitioning to
+the Mainnet environment.
]]> Pactus 1.0.2 (Istanbul) Released 2024-02-18T00:00:00+00:00 2024-02-18T00:00:00+00:00 https://pactus.org/2024/02/18/release-1-0-2 Overview
+
+Pactus Blockchain Version 1.0.2 (Istanbul)
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+This release is named after the city of Istanbul and it
+was unanimously selected by Pactus community.
+
+
+
+Highlights
+
+This update fixes a major issue that decreases the number of inbound connections of the nodes over time.
+We highly recommend all users to upgrade to the new version for better connectivity.
+
+Download
+
+To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+How to Upgrade
+
+If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version.
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Fix
+
+
+ sync : fix concurrent map read-write crash (#1112 )
+ network : remove disconnected peers from peerMgr (#1110 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Pactus 1.0.1 (Beijing) Released 2024-02-10T00:00:00+00:00 2024-02-10T00:00:00+00:00 https://pactus.org/2024/02/10/release-1-0-1 Overview
+
+Pactus Blockchain Version 1.0.1 (Beijing)
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+This release is named after the city of Beijing and it
+was unanimously selected by Pactus community.
+
+
+
+Highlights
+
+This update fixes several issues identified after the release of
+1.0.0 (Beijing) .
+Specifically, it fixes the missed log file on the Windows GUI application and improves the node connectivity.
+
+Download
+
+To start using Pactus blockchain, download the latest version from the download
+page and join the Mainnet.
+
+How to Upgrade
+
+If you are running an older version, close it first.
+Then uninstall the previous version and install the newer version.
+If you are using the archived version, simply replace it with the new version.
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Feat
+
+
+ gui : add connections and moniker fields to main windows (#1090 )
+
+
+Fix
+
+
+ network : set dial and accept limit in connection gater (#1089 )
+ gui stderr logger in windows os (#1081 )
+ sync : improve syncing process (#1087 )
+ network : redefine resource limits (#1086 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Pactus 1.0.0 (Beijing) Released 2024-01-31T00:00:00+00:00 2024-01-31T00:00:00+00:00 https://pactus.org/2024/01/31/release-1-0-0 Overview
+
+Pactus Blockchain Version 1.0.0 (Beijing)
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+
+
+Highlights
+
+Mainnet Official Release v1.0.0 (Beijing)
+
+The much-anticipated official software release of Pactus v1.0.0 (Beijing) marks a significant milestone
+for our community.
+This impressive mainnet release represents the culmination of extensive development efforts.
+Pactus v1.0.0 (Beijing) offers a pioneering solution for streamlining the validation of Pactus blockchain,
+enhancing security, and providing a user-friendly experience. We’re excited to unveil the official software
+and welcome users to experience the power of Pactus in revolutionizing the future of blockchain. Join us on
+this exciting journey.
+
+Onboarding validators
+
+On February 1st, a total of 53,494 PAC coins will be distributed among 1,311 validators who participated in
+Testnet-0 ,
+Testnet-1 , and
+Testnet-2 .
+This marks the beginning of a new chapter in the decentralized world.
+
+Download
+
+This version has been implemented for Mainnet
+To start using Pactus Mainnet, download the latest version from the download
+page and join the Mainnet.
+
+These guides can help you to download, install and configure your node:
+
+
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Feat
+
+
+ implement get validator address for grpc (#975 )
+ add bootstrap.json and load in config on build (#964 )
+ add mainnet config and genesis files (#951 )
+ add Consensus-address to network info (#952 )
+ grpc : sign transaction using wallet client (#945 )
+ pactus gui lock support (#947 )
+ consensus : turning consensus to a zero-config module (#942 )
+
+
+Fix
+
+
+ localnet wallet issue (#970 )
+ sync : remove ReachabilityStatus from agent info (#956 )
+ daemon : keeping previous behavior for password flag, linting CLI messages (#950 )
+ consensus : detect if the system time is behind the network (#939 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Mainnet launched 🚀 2024-01-24T20:24:00+00:00 2024-01-24T20:24:00+00:00 https://pactus.org/2024/01/24/mainnet-launched Years to Launch
+
+Pactus Mainnet started creating the first block on 24 January 2024 at 20:24:10 UTC time.
+Pactus Mainnet is the result of years of hard work, research, and innovation.
+It started from one idea:
+
+A low-cost, truly decentralized blockchain, built by the people for the people,
+where anyone could run and be their own validator.
+
+We faced many challenges and obstacles along the way, but we never gave up.
+We overcame them with our determination and perseverance.
+We learned from our mistakes and improved our solutions.
+We grew from a small team to a large community.
+We achieved many milestones and breakthroughs. And we did it.
+We created Pactus, the platform that empowers you.
+
+
+
+We want to thank Pactus community for helping us on the Testnet.
+
+You have been instrumental in testing and improving the Testnet.
+You have given us your honest feedback and constructive suggestions.
+You have reported and help fixed bugs and errors.
+You have challenged and pushed us to do better.
+You have been our partners and friends in this journey.
+
+On the Road
+
+The true journey has just started.
+The Mainnet is not the end, but the beginning.
+The beginning of a new era of blockchain innovation.
+The beginning of a new challenge and opportunity.
+The beginning of a new revolution and evolution!
+
+We welcome you more than ever.
+We need you to join us in this exciting adventure.
+We need you to support us in this ambitious endeavor.
+We need you to be part of Pactus, the platform that empowers you!
+
+We Have a Dream
+
+We have a dream.
+A dream of a world where blockchain technology is not a privilege, but a right for everyone.
+A dream of a world where smart contracts and decentralized applications are fast, secure, and scalable.
+A dream of a world where Pactus is the platform that empowers you.
+
+This dream is not just ours. It is yours too.
+You share our vision and passion for blockchain innovation.
+You believe in our potential and impact.
+You support our goals and values.
+You are part of our dream.
+
+And this dream is not just a fantasy. It is a reality.
+A reality that we have created together.
+A reality that we have launched today. A reality that we can explore and enjoy together.
+A reality that we can shape and improve together.
+A reality that we can make better and brighter together!
]]> Story of Testnet-2 2024-01-22T00:00:00+00:00 2024-01-22T00:00:00+00:00 https://pactus.org/2024/01/22/testnet-2-concluded What is Testnet?
+
+Testnet is a testing environment where developers and users can try out the functionality of a blockchain project,
+without putting real assets or data at risk.
+It helps to ensure that the final product is reliable and secure for users to use.
+If you like to read more about the Testnet you can check out our post on
+“What is Testnet? ”.
+
+Summary
+
+In October 2023, we launched Testnet-2 .
+The main purpose of this Testnet was to closely monitor the new consensus mechanism and the stability of the P2P network.
+
+The committee for Testnet-2 was set to 51 validators,
+and 2084 validators joined during the Testnet period.
+More than 1500 computers and servers joined the network, and we experienced a high volume of data transmission in the network.
+More than 800,000 blocks were created, and about 2 million transactions were processed during this time.
+The size of the blockchain is about 450 megabytes.
+
+About 500,000 coins were staked during this period, almost 60% of the total generated coins.
+It shows that users, even in Testnet, tend to stake their coins.
+
+Stability of Consensus
+
+In Testnet-1, we had one consensus failure that caused us to
+conclude the Testnet-1 .
+During Testnet-2, there were no issues with the consensus mechanism, and
+we had no case of failure during the testing period,
+although the number of validators and nodes significantly increased on Testnet-2 compared to its predecessor.
+It proved that the consensus mechanism is in a stable situation.
+
+Networking issues
+
+In Testnet-2, the blockchain stopped twice, and each time it took more than 24 hours to fix the problem.
+In the second blockage, we had no choice but to ask active validators inside the committee to
+update their nodes to overcome the networking issue.
+The development team faced a difficult situation and had to make the proper decision to fix the networking issues.
+On one hand, the networking traffic increased significantly, and on the other hand, we had to
+make sure normal users with limited internet bandwidth could still participate in the consensus mechanism without any problems.
+After examining different scenarios, the networking issues were resolved, and
+no major problems were reported till the end of Testnet.
+
+Major updates
+
+During Testnet-2, we introduced several updates, including versions
+0.15.0 ,
+0.16.0 ,
+0.17.0 ,
+0.18.0 ,
+0.19.0 , and
+0.20.0 .
+The update process went smoothly, and with the stability of Version 0.20.0 confirmed,
+the development team shifted its focus to the Mainnet launch.
+
+
+
+This Testnet was important for us.
+It helped us learn what we need to do to make Pactus work even better.
+Without the community that supports us and dedicates their time and resources to testing and feedback,
+we wouldn’t have been able to progress as we have.
+
+We thank all of them for their valuable contributions.
+As promised, participants in Testnets will be given priority as validators for the MainNet , and
+will receive bounty PAC coins to set up their validators.
+
+We are grateful to all those who participated in Testnets, and we encourage them to join the Mainnet.
+As a community-based project, we rely on the support of our community members, and we value any help we receive.
]]> Pactus 0.20.0 Released 2024-01-11T00:00:00+00:00 2024-01-11T00:00:00+00:00 https://pactus.org/2024/01/11/release-0-20-0 Overview
+
+Pactus Blockchain Version 0.20.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+Highlights
+
+Validator Stake Management
+
+The new GUI application enables users to easily Unbond and Withdraw their validator’s stake.
+
+
+
+Improving Network Connectivity
+
+Some users have reported that UDP packets are being dropped by their Internet Service Providers.
+Therefore, the UDP protocol is disabled by default.
+Users can still activate the UDP protocol by configuring the settings in the file if necessary.
+
+Also, the experimental Node Gossip feature has been removed in this version.
+Node gossip could cause some validators to become isolated from the rest of the network.
+
+Relay service
+
+This version enables users to turn their node into a relay service.
+A relay service node can help users behind NAT to communicate with each other.
+It is disabled by default and can be enabled inside the config file.
+Please note that it is still in an experimental state.
+
+Download
+
+This version has been implemented for Testnet-2 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-2, download the latest version from the
+download page and join the Testnet.
+
+These guides can help you to download, install and configure your node:
+
+
+
+How to Upgrade
+
+If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Feat
+
+
+ implement relay service (#931 )
+ HTTP : Integrate AddRowDouble and update tests (#926 )
+ network : making listen address private in config (#921 )
+ http : adding AvailabilityScore to http module (#917 )
+ network : adding ‘enable_udp’ config (#918 )
+ network : removing gossip node service (#916 )
+ gRPC : adding AvailabilityScore to gRPC (#910 )
+ GUI : unbond and withdraw transaction dialogs (#908 )
+
+
+Fix
+
+
+ gRPC : adding missing get raw transaction APIs to gRPC gateway (#925 )
+ network : preventing self dial (#924 )
+ fixing time lag on starting node (#923 )
+ network : fixing network deadlock on linux arm64 (#922 )
+ GUI : updating unbond and withdraw dialogs (#911 )
+ fixing gRPC node info issue (#906 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]> Mainnet announcement 2024-01-08T00:00:00+00:00 2024-01-08T00:00:00+00:00 https://pactus.org/2024/01/08/mainnet-announcement The much-awaited Mainnet Launch of The Pactus Blockchain is finally here!
+On January 24, 2024, at 20:24:00 UTC, the first block, known as the Genesis block ,
+will be minted by four Bootstrap validators.
+After that, every 10 seconds, a new block will be added to the blockchain.
+Each block contains the committed transactions in the network.
+The block finality in the Pactus blockchain is immediate.
+It means that there is no need to wait for block confirmation to ensure a transaction is committed.
+
+Later, more than 2000 community validators will secure the blockchain and make it decentralized.
+These validators are Testnet participants who helped test Pactus during our testing period.
+The community validators will receive the initial staking coins from a Discord Bot named RoboPac.
+
+To ensure everything works smoothly on the Mainnet, three different Testnets (
+Testnet0 ,
+Testnet1 , and
+Testnet2 ) have been run.
+
+The Mainnet will never be stopped or interrupted by the core developers of Pactus,
+and validators should primarily participate in and maintain the security of the blockchain.
]]> Pactus 0.19.0 Released 2024-01-04T00:00:00+00:00 2024-01-04T00:00:00+00:00 https://pactus.org/2024/01/04/release-0-19-0 Overview
+
+Pactus Blockchain Version 0.19.0
+is now available for download.
+This release includes a graphical user interface (GUI) that
+is suitable for both beginners and experienced users.
+It also includes a command-line interface (CLI) for advanced users and wallet software
+that allows users to interact with the blockchain without the need to sync the entire blockchain.
+
+Highlights
+
+This version has improved the overall performance of the blockchain by implementing
+PIP-15 .
+PIP-15 suggests to add caching algorithms to the database for the most frequently used items.
+
+Additionally, this version has enhanced the connectivity of the nodes in the P2P network.
+
+Availability Score
+
+This version comes with the implementation of PIP-19 .
+PIP-19 suggests assigning the “Availability Score” to each validator based on their activities in the
+committee .
+Validators with a score less than 0.8 won’t receive the block reward,
+as their proposals will be rejected by other validators.
+The main reason behind this PIP is to prevent users from downgrading
+their node specifications and running Pactus on machines with low resources.
+
+Breaking change
+
+The Docker container now contains both daemon and wallet binary files.
+Users who use Docker to run Pacts now need to add the entry point to run Pactus.
+
+Download
+
+This version has been implemented for Testnet-2 and
+is being prepared for the upcoming Mainnet launch.
+To start using Pactus Blockchain Testnet-2, download the latest version from the
+download page and join the Testnet.
+
+These guides can help you to download, install and configure your node:
+
+
+
+How to Upgrade
+
+If you are running an older version, shut it down.
+Uninstall the previous version and install the newer version.
+If you are using the archived version, simply use the new version.
+
+Change log
+
+This version includes several changes and improvements, such as:
+
+Feat
+
+
+ gRPC : defining network and peers info response’s properly (#898 )
+ implementing pip-19 (#899 )
+ network : disabling GosipSub, only FloodSub (#895 )
+ www : adding change proposer round and value to consensus info votes (#892 )
+ network : adding relay service to dial relay nodes (#887 )
+ implementing pip-15 (#843 )
+ check already running by lock file (#871 )
+
+
+Fix
+
+
+ store : use cache to check if public key exists (#902 )
+ executor : not rejecting bond transaction for bootstrap validator (#901 )
+ GUI : removing unnecessary tags in transaction confirm dialog (#893 )
+ network : close relay connection for public node (#891 )
+ network : refining GossipSubParams for Gossiper node (#882 )
+ sync : adding sequence number to the bundle (#881 )
+ network : turn off mesh for gossiper node (#880 )
+ consensus : check voteset for CP strong termination (#879 )
+ adding querier to query messages (#878 )
+ execution : fixing issue #869 (#870 )
+ fixing logger issue on rotating log file (#859 )
+
+
+You can find the full list of changes on Github ,
+as well as the source code
]]>
\ No newline at end of file
diff --git a/ar/index.html b/ar/index.html
new file mode 100644
index 000000000..deeb87f30
--- /dev/null
+++ b/ar/index.html
@@ -0,0 +1,739 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ الصفحة الرئيسية | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
بلوكشين بكتوس
+
Building decentralized future together!
+
+
+
+
+
+
+
+
+
+
تشغيل عقدة
+ قم بتنزيل أحدث إصدار من بلوكشين بكتوس، وقم بإنشاء محفظتك وابدأ في المزامنة مع الشبكة. تم تصميم بكتوس ليكون خفيف الوزن وسهل الاستخدام، مما يجعل التشغيل بسيطًا.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
احصل على بعض العملات
+ بمجرد تشغيل عقدتك وبدء تشغيلها، ستحتاج إلى الحصول على بعض العملات لتصبح مُصدِّق. يمكنك الانضمام إلى مجتمعنا واستلام بعض عملات الحصة مجانًا.
+
+
+
+
+
+
+
+
كن مُصدِّق
+ من خلال تعيين بعض العملات، ستتحول عقدتك إلى مصدق وبالتالي، في كل مرة تقترح فيها كتلة، ستتم مكافأتك بعملة جديدة كمكافأة للكتلة.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
جعل بكتوس أفضل
+ هناك العديد من الطرق التي يمكنك من خلالها دعم بكتوس ومساعدته في النمو. لنعمل معًا لجعل بكتوس أفضل!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Subscribe to the Pactus Newsletter
+
+
+
+
+
+
Dive into the latest updates and insights from the Pactus Blockchain.
+ Receive crucial information on new developments, enhancements, and partnerships
+ directly to your inbox. Stay connected and informed, whether you're an investor, developer,
+ or blockchain enthusiast.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ar/mstile-150x150.png b/ar/mstile-150x150.png
new file mode 100644
index 000000000..187b08cc8
Binary files /dev/null and b/ar/mstile-150x150.png differ
diff --git a/ar/robots.txt b/ar/robots.txt
new file mode 100644
index 000000000..0097513b3
--- /dev/null
+++ b/ar/robots.txt
@@ -0,0 +1 @@
+Sitemap: https://pactus.org/sitemap.xml
diff --git a/ar/safari-pinned-tab.svg b/ar/safari-pinned-tab.svg
new file mode 100644
index 000000000..43c436d31
--- /dev/null
+++ b/ar/safari-pinned-tab.svg
@@ -0,0 +1,27 @@
+
+
+
+
+Created by potrace 1.14, written by Peter Selinger 2001-2017
+
+
+
+
+
diff --git a/ar/site.webmanifest b/ar/site.webmanifest
new file mode 100644
index 000000000..c00b17332
--- /dev/null
+++ b/ar/site.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "",
+ "short_name": "",
+ "icons": [
+ {
+ "src": "/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/android-chrome-256x256.png",
+ "sizes": "256x256",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "background_color": "#ffffff",
+ "display": "standalone"
+}
diff --git a/ar/sitemap.xml b/ar/sitemap.xml
new file mode 100644
index 000000000..db14b4a0f
--- /dev/null
+++ b/ar/sitemap.xml
@@ -0,0 +1,214 @@
+
+
+
+https://pactus.org/2022/08/29/dev-meeting.html
+2022-08-29T00:00:00+00:00
+
+
+https://pactus.org/2022/09/04/dev-meeting.html
+2022-09-04T00:00:00+00:00
+
+
+https://pactus.org/2022/09/18/dev-meeting.html
+2022-09-18T00:00:00+00:00
+
+
+https://pactus.org/2022/09/20/release-0-9-0.html
+2022-09-20T00:00:00+00:00
+
+
+https://pactus.org/2022/09/24/testnet-0-launched.html
+2022-09-24T00:00:00+00:00
+
+
+https://pactus.org/2022/10/30/dev-meeting.html
+2022-10-30T00:00:00+00:00
+
+
+https://pactus.org/2022/11/24/release-0-9-1.html
+2022-11-24T00:00:00+00:00
+
+
+https://pactus.org/2023/03/01/what-is-testnet.html
+2023-03-01T00:00:00+00:00
+
+
+https://pactus.org/2023/04/21/testnet-0-concluded.html
+2023-04-21T00:00:00+00:00
+
+
+https://pactus.org/2023/05/08/release-0-10-0.html
+2023-05-08T00:00:00+00:00
+
+
+https://pactus.org/2023/05/09/testnet-1-launched.html
+2023-05-09T00:00:00+00:00
+
+
+https://pactus.org/2023/05/29/release-0-11-0.html
+2023-05-29T00:00:00+00:00
+
+
+https://pactus.org/2023/06/19/release-0-12-0.html
+2023-06-19T00:00:00+00:00
+
+
+https://pactus.org/2023/07/01/release-0-13-0.html
+2023-07-01T00:00:00+00:00
+
+
+https://pactus.org/2023/07/05/testnet-500-validators.html
+2023-07-05T00:00:00+00:00
+
+
+https://pactus.org/2023/07/09/dev-meeting.html
+2023-07-09T00:00:00+00:00
+
+
+https://pactus.org/2023/08/01/testnet-1-concluded.html
+2023-08-01T00:00:00+00:00
+
+
+https://pactus.org/2023/08/22/dev-report.html
+2023-08-22T00:00:00+00:00
+
+
+https://pactus.org/2023/09/04/introduction-to-pips.html
+2023-09-04T00:00:00+00:00
+
+
+https://pactus.org/2023/09/24/dev-report-pre-testnet-2.html
+2023-09-24T00:00:00+00:00
+
+
+https://pactus.org/2023/09/28/how-sspos-works-in-simple-word.html
+2023-09-28T00:00:00+00:00
+
+
+https://pactus.org/2023/10/15/release-0-15-0.html
+2023-10-15T00:00:00+00:00
+
+
+https://pactus.org/2023/10/15/testnet-2-launched.html
+2023-10-15T00:00:00+00:00
+
+
+https://pactus.org/2023/10/29/release-0-16-0.html
+2023-10-29T00:00:00+00:00
+
+
+https://pactus.org/2023/11/12/release-0-17-0.html
+2023-11-12T00:00:00+00:00
+
+
+https://pactus.org/2023/12/12/release-0-18-0.html
+2023-12-12T00:00:00+00:00
+
+
+https://pactus.org/2024/01/04/release-0-19-0.html
+2024-01-04T00:00:00+00:00
+
+
+https://pactus.org/2024/01/08/mainnet-announcement.html
+2024-01-08T00:00:00+00:00
+
+
+https://pactus.org/2024/01/11/release-0-20-0.html
+2024-01-11T00:00:00+00:00
+
+
+https://pactus.org/2024/01/22/testnet-2-concluded.html
+2024-01-22T00:00:00+00:00
+
+
+https://pactus.org/2024/01/24/mainnet-launched.html
+2024-01-24T20:24:00+00:00
+
+
+https://pactus.org/2024/01/31/release-1-0-0.html
+2024-01-31T00:00:00+00:00
+
+
+https://pactus.org/2024/02/10/release-1-0-1.html
+2024-02-10T00:00:00+00:00
+
+
+https://pactus.org/2024/02/18/release-1-0-2.html
+2024-02-18T00:00:00+00:00
+
+
+https://pactus.org/2024/03/16/testnet-phoenix-launched.html
+2024-03-16T00:00:00+00:00
+
+
+https://pactus.org/2024/04/14/release-1-1-0.html
+2024-04-14T00:00:00+00:00
+
+
+https://pactus.org/2024/04/18/release-1-1-1.html
+2024-04-18T00:00:00+00:00
+
+
+https://pactus.org/2024/04/25/release-1-1-3.html
+2024-04-25T00:00:00+00:00
+
+
+https://pactus.org/2024/05/07/release-1-1-4.html
+2024-05-07T00:00:00+00:00
+
+
+https://pactus.org/2024/05/30/release-1-1-5.html
+2024-05-30T00:00:00+00:00
+
+
+https://pactus.org/2024/05/31/release-1-1-6.html
+2024-05-31T00:00:00+00:00
+
+
+https://pactus.org/2024/06/02/release-1-1-7.html
+2024-06-02T00:00:00+00:00
+
+
+https://pactus.org/2024/06/02/release-1-1-8.html
+2024-06-02T00:00:00+00:00
+
+
+https://pactus.org/2024/06/20/release-1-2-0.html
+2024-06-20T00:00:00+00:00
+
+
+https://pactus.org/2024/06/27/release-1-3-0.html
+2024-06-27T00:00:00+00:00
+
+
+https://pactus.org/2024/08/01/release-1-4-0.html
+2024-08-01T00:00:00+00:00
+
+
+https://pactus.org/blog/
+
+
+https://pactus.org/
+
+
+https://pactus.org/community/
+
+
+https://pactus.org/term-of-use/
+
+
+https://pactus.org/about/what-is-pactus/
+
+
+https://pactus.org/about/faq/
+
+
+https://pactus.org/about/roadmap/
+
+
+https://pactus.org/download/
+
+
+https://pactus.org/contributing/
+
+
diff --git a/ar/term-of-use/index.html b/ar/term-of-use/index.html
new file mode 100644
index 000000000..09117a8c3
--- /dev/null
+++ b/ar/term-of-use/index.html
@@ -0,0 +1,607 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Term of Use | بلوكشين بكتوس
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Fresh New Look is Coming Soon! Stay Tuned! 🌟
+
+
+
+
+
+
+
+
+
Terms of Use
+
+
Welcome to Pactus.
+
+
By using our website or services, you agree to these Terms of Use (“Terms”).
+Please review them carefully.
+If you do not accept the Terms, please do not use our website or services.
+
+
We may update the Terms occasionally.
+Your continued use of our website or services after any changes means you accept the updates.
+If you do not agree to the updates, please stop using our website and services.
+
+
“We,” “us,” “our,” and “Pactus” refer to the Pactus Blockchain Project. “You” refers to each user of our
+website or services.
+
+
Website Access and Modifications
+
+
We strive to provide continuous website access but cannot guarantee uninterrupted or error-free service.
+Pactus is not liable for any inaccessible features or website unavailability.
+
+
We may modify, expand, limit, or discontinue any part of the website or
+services at any time to accommodate users or for other reasons, without notice.
+We reserve the right to suspend website access temporarily or permanently, at our discretion, without notice.
+
+
Users may need to update their computer hardware or software to access some website content or features.
+Pactus is not responsible for any inability to access the website or services due to user systems,
+internet networks, or other causes.
+
+
Age Limit
+
+
Our website and services are not intended for those under 18.
+If you are under 18, you may only use this website with the supervision of a parent, guardian, or other responsible adult.
+
+
No Personalized Advice
+
+
This website does not provide individualized legal, tax, financial, or investment advice.
+Since everyone’s situation is different, we recommend consulting a qualified professional for financial decisions.
+
+
PAC coin is meant to be used as a medium of exchange.
+Nothing on this website should be considered investment advice or a solicitation to
+buy, hold, invest in, own, or use PAC coin.
+
+
No Content Guarantees
+
+
We cannot guarantee the accuracy, completeness, or quality of the information on this website.
+All content is provided on an “as is” and “as available” basis, and use is at your own risk.
+
+
The content may be sourced from third parties.
+Pactus is not responsible for any errors, omissions, or inaccuracies.
+The information may not suit everyone and may only apply to certain regions.
+
+
It is your responsibility to evaluate if the information and services are technically and legally suitable for
+your intended use and comply with applicable laws.
+Always verify any information before using it for personal, financial, or business purposes.
+
+
We may modify website content and services at any time without notice.
+We are not obligated to inform you of any changes or corrections.
+
+
External Content
+
+
Any testimonials, opinions, advice, offers, or other third party content on this website reflect the views
+and intentions of those parties/people only.
+They do not represent the views of Pactus.
+
+
We do not guarantee the accuracy, completeness, reliability, or usefulness of external content.
+Users are responsible for assessing external content.
+Pactus is not liable for any damage or loss from relying on or using third party content.
+
+
User Generated Content
+
+
By posting or submitting any material to this website, including the forum, you grant Pactus a
+worldwide, fully paid-up, non-exclusive license to edit and display your materials on our website and
+social media platforms as we deem appropriate.
+
+
You agree to indemnify and hold harmless Pactus and its Users from any third-party claims arising from
+your materials.
+You also represent that you own or have the right to post the materials, that they are
+accurate, their use on the Pactus website complies with laws, and they will not cause harm to any
+person.
+
+
Pactus has the right to remove any materials we deem objectionable, offensive, illegal, harmful, or in
+violation of these Terms.
+We may disclose user information if legally required.
+
+
Please contact info@pactus.org to request the removal of your posted content for reasons such as
+privacy concerns, copyright issues, or no longer wanting your content to appear publicly.
+We will review removal requests on a case-by-case basis.
+
+
File Safety and Security
+
+
Pactus implements measures to protect downloadable files on our website but cannot guarantee they
+are free of infections, viruses, or harmful code.
+
+
We are also not responsible if users’ devices are infected by visiting our website or downloading files in
+the event of a security breach.
+
+
If uncertain, users should consider compiling Pactus from the provided source code.
+Users are responsible for meeting their own security requirements.
+
+
+
+
Pactus works with reputable partners, but does not endorse or take responsibility for sponsored content claims.
+We do not review, recommend, or endorse any products or services promoted on our site.
+
+
Pactus is not liable for damages from misuse of personal information given to sponsors.
+We are also not responsible for losses from using sponsor links or services on our site.
+
+
External Links
+
+
For user convenience, our website may contain links to external sites and resources.
+However, we do not control these external sites and are not responsible for
+their content, products, services, or information.
+
+
Link inclusion does not imply Pactus endorsement or affiliation.
+Users should be aware they may leave our website by clicking links.
+External site terms of use may differ from ours.Pactus is not responsible for
+losses from users following links to external sites.
+We encourage caution and reviewing external sites’ terms and policies before transacting or engaging.
+
+
Electronic Communications
+
+
Our website responses and email communications will be delivered electronically.
+Pactus reserves the right to disclose any user emails or objectionable material
+to comply with legal processes or protect the
+rights and property of Pactus, its customers, suppliers, and users.
+
+
No Financial Services
+
+
This website does not engage in storing, selling, buying, sending, or receiving Pactus coins.
+All activities related to owning and transferring Pactus coins occur on the DEX/CEX/decentralized Pactus network.
+This website does not actively participate in that network.
+
+
No Liability
+
+
Pactus assumes no liability for any damages, claims, or losses related to using Pactus.
+This includes third party actions or inactions and events.
+
+
It includes but is not limited to: security issues when using Pactus software/services, technical problems
+when using Pactus software/services, software or data corruption when using Pactus software/services,
+or user errors when using Pactus software/services.
+
+
Disclaimer of Warranties
+
+
Pactus expressly disclaims all warranties, representations, and conditions, whether express or implied,
+including but not limited to the implied warranties and conditions of merchantability, fitness for a
+particular purpose, and non-infringement.
+
+
This disclaimer extends to the use of this website and its services, as well as the accuracy, completeness,
+timeliness, or currentness of its content, in any manner and for any purpose.
+
+
No Consequential Damages
+
+
Under no circumstances will Pactus be liable for any incidental, special, consequential, exemplary,
+indirect, or other damages arising from use of this website, its services, or content.
+This includes but is not limited to data loss, even if advised of such damage possibilities.
+
+
This disclaimer applies whether based on contract, tort, negligence, product liability, strict liability, or otherwise.
+It extends to all potential scenarios and circumstances.
+
+
General
+
+
These Terms of Use (TOU) and any applicable Terms of Service are the full agreement for website use by
+users and Pactus. They replace previous agreements.
+
+
If Pactus or a user does not exercise a TOU right, this does not waive the right. If a TOU provision is
+invalid, the rest remain valid.
+
+
The TOU and Terms of Service are intentionally in English, the governing language for Pactus and users.
+
+
Copyright
+
+
Attributed Content
+
+
Logos for operating systems, platforms, and sponsors we support are copyrighted by their respective owners.
+Pactus does not own these copyrights but uses the logos with permission or in a clear, non- harmful way.
+
+
Privacy Policy
+
+
Data Collection and Use
+
+
We collect standard server logs from our website.
+This data helps provide site statistics, improve content and information flow, analyze errors, and diagnose dead links.
+A segment of server logs gathers download statistics to better understand user needs.
+
+
+ Last update: 25 January 2024
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/css/custom.css b/assets/css/custom.css
new file mode 100644
index 000000000..00e05b42d
--- /dev/null
+++ b/assets/css/custom.css
@@ -0,0 +1 @@
+:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}:root,[data-bs-theme=light]{--pa-blue: #0d6efd;--pa-indigo: #6610f2;--pa-purple: #6f42c1;--pa-pink: #d63384;--pa-red: #dc3545;--pa-orange: #fd7e14;--pa-yellow: #ffc107;--pa-green: #198754;--pa-teal: #20c997;--pa-cyan: #0dcaf0;--pa-black: #000;--pa-white: #fff;--pa-gray: #6c757d;--pa-gray-dark: #343a40;--pa-gray-100: #f8f9fa;--pa-gray-200: #e9ecef;--pa-gray-300: #dee2e6;--pa-gray-400: #ced4da;--pa-gray-500: #adb5bd;--pa-gray-600: #6c757d;--pa-gray-700: #495057;--pa-gray-800: #343a40;--pa-gray-900: #212529;--pa-primary: #021a34;--pa-secondary: #075f94;--pa-success: #198754;--pa-info: #0dcaf0;--pa-warning: #ffc107;--pa-danger: #dc3545;--pa-light: #f8f9fa;--pa-dark: #212529;--pa-primary-rgb: 2, 26, 52;--pa-secondary-rgb: 7, 95, 148;--pa-success-rgb: 25, 135, 84;--pa-info-rgb: 13, 202, 240;--pa-warning-rgb: 255, 193, 7;--pa-danger-rgb: 220, 53, 69;--pa-light-rgb: 248, 249, 250;--pa-dark-rgb: 33, 37, 41;--pa-primary-text-emphasis: #010a15;--pa-secondary-text-emphasis: #03263b;--pa-success-text-emphasis: #0a3622;--pa-info-text-emphasis: #055160;--pa-warning-text-emphasis: #664d03;--pa-danger-text-emphasis: #58151c;--pa-light-text-emphasis: #495057;--pa-dark-text-emphasis: #495057;--pa-primary-bg-subtle: #ccd1d6;--pa-secondary-bg-subtle: #cddfea;--pa-success-bg-subtle: #d1e7dd;--pa-info-bg-subtle: #cff4fc;--pa-warning-bg-subtle: #fff3cd;--pa-danger-bg-subtle: #f8d7da;--pa-light-bg-subtle: #fcfcfd;--pa-dark-bg-subtle: #ced4da;--pa-primary-border-subtle: #9aa3ae;--pa-secondary-border-subtle: #9cbfd4;--pa-success-border-subtle: #a3cfbb;--pa-info-border-subtle: #9eeaf9;--pa-warning-border-subtle: #ffe69c;--pa-danger-border-subtle: #f1aeb5;--pa-light-border-subtle: #e9ecef;--pa-dark-border-subtle: #adb5bd;--pa-white-rgb: 255, 255, 255;--pa-black-rgb: 0, 0, 0;--pa-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--pa-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--pa-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--pa-body-font-family: var(--pa-font-sans-serif);--pa-body-font-size:1rem;--pa-body-font-weight: 400;--pa-body-line-height: 1.5;--pa-body-color: #212529;--pa-body-color-rgb: 33, 37, 41;--pa-body-bg: #fff;--pa-body-bg-rgb: 255, 255, 255;--pa-emphasis-color: #000;--pa-emphasis-color-rgb: 0, 0, 0;--pa-secondary-color: rgba(33, 37, 41, 0.75);--pa-secondary-color-rgb: 33, 37, 41;--pa-secondary-bg: #e9ecef;--pa-secondary-bg-rgb: 233, 236, 239;--pa-tertiary-color: rgba(33, 37, 41, 0.5);--pa-tertiary-color-rgb: 33, 37, 41;--pa-tertiary-bg: #f8f9fa;--pa-tertiary-bg-rgb: 248, 249, 250;--pa-heading-color: inherit;--pa-link-color: #021a34;--pa-link-color-rgb: 2, 26, 52;--pa-link-decoration: underline;--pa-link-hover-color: #02152a;--pa-link-hover-color-rgb: 2, 21, 42;--pa-code-color: #d63384;--pa-highlight-color: #212529;--pa-highlight-bg: #fff3cd;--pa-border-width: 1px;--pa-border-style: solid;--pa-border-color: #dee2e6;--pa-border-color-translucent: rgba(0, 0, 0, 0.175);--pa-border-radius: 0.375rem;--pa-border-radius-sm: 0.25rem;--pa-border-radius-lg: 0.5rem;--pa-border-radius-xl: 1rem;--pa-border-radius-xxl: 2rem;--pa-border-radius-2xl: var(--pa-border-radius-xxl);--pa-border-radius-pill: 50rem;--pa-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--pa-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--pa-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--pa-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--pa-focus-ring-width: 0.25rem;--pa-focus-ring-opacity: 0.25;--pa-focus-ring-color: rgba(2, 26, 52, 0.25);--pa-form-valid-color: #198754;--pa-form-valid-border-color: #198754;--pa-form-invalid-color: #dc3545;--pa-form-invalid-border-color: #dc3545}[data-bs-theme=dark]{color-scheme:dark;--pa-body-color: #dee2e6;--pa-body-color-rgb: 222, 226, 230;--pa-body-bg: #212529;--pa-body-bg-rgb: 33, 37, 41;--pa-emphasis-color: #fff;--pa-emphasis-color-rgb: 255, 255, 255;--pa-secondary-color: rgba(222, 226, 230, 0.75);--pa-secondary-color-rgb: 222, 226, 230;--pa-secondary-bg: #343a40;--pa-secondary-bg-rgb: 52, 58, 64;--pa-tertiary-color: rgba(222, 226, 230, 0.5);--pa-tertiary-color-rgb: 222, 226, 230;--pa-tertiary-bg: #2b3035;--pa-tertiary-bg-rgb: 43, 48, 53;--pa-primary-text-emphasis: #677685;--pa-secondary-text-emphasis: #6a9fbf;--pa-success-text-emphasis: #75b798;--pa-info-text-emphasis: #6edff6;--pa-warning-text-emphasis: #ffda6a;--pa-danger-text-emphasis: #ea868f;--pa-light-text-emphasis: #f8f9fa;--pa-dark-text-emphasis: #dee2e6;--pa-primary-bg-subtle: #00050a;--pa-secondary-bg-subtle: #01131e;--pa-success-bg-subtle: #051b11;--pa-info-bg-subtle: #032830;--pa-warning-bg-subtle: #332701;--pa-danger-bg-subtle: #2c0b0e;--pa-light-bg-subtle: #343a40;--pa-dark-bg-subtle: #1a1d20;--pa-primary-border-subtle: #01101f;--pa-secondary-border-subtle: #043959;--pa-success-border-subtle: #0f5132;--pa-info-border-subtle: #087990;--pa-warning-border-subtle: #997404;--pa-danger-border-subtle: #842029;--pa-light-border-subtle: #495057;--pa-dark-border-subtle: #343a40;--pa-heading-color: inherit;--pa-link-color: #677685;--pa-link-hover-color: #85919d;--pa-link-color-rgb: 103, 118, 133;--pa-link-hover-color-rgb: 133, 145, 157;--pa-code-color: #e685b5;--pa-highlight-color: #dee2e6;--pa-highlight-bg: #664d03;--pa-border-color: #495057;--pa-border-color-translucent: rgba(255, 255, 255, 0.15);--pa-form-valid-color: #75b798;--pa-form-valid-border-color: #75b798;--pa-form-invalid-color: #ea868f;--pa-form-invalid-border-color: #ea868f}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--pa-body-font-family);font-size:var(--pa-body-font-size);font-weight:var(--pa-body-font-weight);line-height:var(--pa-body-line-height);color:var(--pa-body-color);text-align:var(--pa-body-text-align);background-color:var(--pa-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--pa-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--pa-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;color:var(--pa-highlight-color);background-color:var(--pa-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(--pa-link-color-rgb), var(--pa-link-opacity, 1));text-decoration:underline}a:hover{--pa-link-color-rgb: var(--pa-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--pa-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--pa-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:0.875em;color:var(--pa-body-bg);background-color:var(--pa-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--pa-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 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:var(--pa-body-bg);border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-sm);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:var(--pa-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--pa-gutter-x: 1.5rem;--pa-gutter-y: 0;width:100%;padding-right:calc(var(--pa-gutter-x)*.5);padding-left:calc(var(--pa-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{--pa-breakpoint-xs: 0;--pa-breakpoint-sm: 576px;--pa-breakpoint-md: 768px;--pa-breakpoint-lg: 992px;--pa-breakpoint-xl: 1200px;--pa-breakpoint-xxl: 1400px}.row{--pa-gutter-x: 1.5rem;--pa-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--pa-gutter-y));margin-right:calc(-0.5*var(--pa-gutter-x));margin-left:calc(-0.5*var(--pa-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--pa-gutter-x)*.5);padding-left:calc(var(--pa-gutter-x)*.5);margin-top:var(--pa-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--pa-gutter-x: 0}.g-0,.gy-0{--pa-gutter-y: 0}.g-1,.gx-1{--pa-gutter-x: 0.25rem}.g-1,.gy-1{--pa-gutter-y: 0.25rem}.g-2,.gx-2{--pa-gutter-x: 0.5rem}.g-2,.gy-2{--pa-gutter-y: 0.5rem}.g-3,.gx-3{--pa-gutter-x: 1rem}.g-3,.gy-3{--pa-gutter-y: 1rem}.g-4,.gx-4{--pa-gutter-x: 1.5rem}.g-4,.gy-4{--pa-gutter-y: 1.5rem}.g-5,.gx-5{--pa-gutter-x: 3rem}.g-5,.gy-5{--pa-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--pa-gutter-x: 0}.g-sm-0,.gy-sm-0{--pa-gutter-y: 0}.g-sm-1,.gx-sm-1{--pa-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--pa-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--pa-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--pa-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--pa-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--pa-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--pa-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--pa-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--pa-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--pa-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--pa-gutter-x: 0}.g-md-0,.gy-md-0{--pa-gutter-y: 0}.g-md-1,.gx-md-1{--pa-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--pa-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--pa-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--pa-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--pa-gutter-x: 1rem}.g-md-3,.gy-md-3{--pa-gutter-y: 1rem}.g-md-4,.gx-md-4{--pa-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--pa-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--pa-gutter-x: 3rem}.g-md-5,.gy-md-5{--pa-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--pa-gutter-x: 0}.g-lg-0,.gy-lg-0{--pa-gutter-y: 0}.g-lg-1,.gx-lg-1{--pa-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--pa-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--pa-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--pa-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--pa-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--pa-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--pa-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--pa-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--pa-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--pa-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--pa-gutter-x: 0}.g-xl-0,.gy-xl-0{--pa-gutter-y: 0}.g-xl-1,.gx-xl-1{--pa-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--pa-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--pa-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--pa-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--pa-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--pa-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--pa-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--pa-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--pa-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--pa-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--pa-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--pa-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--pa-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--pa-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--pa-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--pa-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--pa-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--pa-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--pa-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--pa-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--pa-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--pa-gutter-y: 3rem}}.table{--pa-table-color-type: initial;--pa-table-bg-type: initial;--pa-table-color-state: initial;--pa-table-bg-state: initial;--pa-table-color: var(--pa-emphasis-color);--pa-table-bg: var(--pa-body-bg);--pa-table-border-color: var(--pa-border-color);--pa-table-accent-bg: transparent;--pa-table-striped-color: var(--pa-emphasis-color);--pa-table-striped-bg: rgba(var(--pa-emphasis-color-rgb), 0.05);--pa-table-active-color: var(--pa-emphasis-color);--pa-table-active-bg: rgba(var(--pa-emphasis-color-rgb), 0.1);--pa-table-hover-color: var(--pa-emphasis-color);--pa-table-hover-bg: rgba(var(--pa-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--pa-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--pa-table-color-state, var(--pa-table-color-type, var(--pa-table-color)));background-color:var(--pa-table-bg);border-bottom-width:var(--pa-border-width);box-shadow:inset 0 0 0 9999px var(--pa-table-bg-state, var(--pa-table-bg-type, var(--pa-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--pa-border-width)*2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--pa-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--pa-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--pa-table-color-type: var(--pa-table-striped-color);--pa-table-bg-type: var(--pa-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--pa-table-color-type: var(--pa-table-striped-color);--pa-table-bg-type: var(--pa-table-striped-bg)}.table-active{--pa-table-color-state: var(--pa-table-active-color);--pa-table-bg-state: var(--pa-table-active-bg)}.table-hover>tbody>tr:hover>*{--pa-table-color-state: var(--pa-table-hover-color);--pa-table-bg-state: var(--pa-table-hover-bg)}.table-primary{--pa-table-color: #000;--pa-table-bg: #ccd1d6;--pa-table-border-color: #a3a7ab;--pa-table-striped-bg: #c2c7cb;--pa-table-striped-color: #000;--pa-table-active-bg: #b8bcc1;--pa-table-active-color: #000;--pa-table-hover-bg: #bdc1c6;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-secondary{--pa-table-color: #000;--pa-table-bg: #cddfea;--pa-table-border-color: #a4b2bb;--pa-table-striped-bg: #c3d4de;--pa-table-striped-color: #000;--pa-table-active-bg: #b9c9d3;--pa-table-active-color: #000;--pa-table-hover-bg: #beced8;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-success{--pa-table-color: #000;--pa-table-bg: #d1e7dd;--pa-table-border-color: #a7b9b1;--pa-table-striped-bg: #c7dbd2;--pa-table-striped-color: #000;--pa-table-active-bg: #bcd0c7;--pa-table-active-color: #000;--pa-table-hover-bg: #c1d6cc;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-info{--pa-table-color: #000;--pa-table-bg: #cff4fc;--pa-table-border-color: #a6c3ca;--pa-table-striped-bg: #c5e8ef;--pa-table-striped-color: #000;--pa-table-active-bg: #badce3;--pa-table-active-color: #000;--pa-table-hover-bg: #bfe2e9;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-warning{--pa-table-color: #000;--pa-table-bg: #fff3cd;--pa-table-border-color: #ccc2a4;--pa-table-striped-bg: #f2e7c3;--pa-table-striped-color: #000;--pa-table-active-bg: #e6dbb9;--pa-table-active-color: #000;--pa-table-hover-bg: #ece1be;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-danger{--pa-table-color: #000;--pa-table-bg: #f8d7da;--pa-table-border-color: #c6acae;--pa-table-striped-bg: #eccccf;--pa-table-striped-color: #000;--pa-table-active-bg: #dfc2c4;--pa-table-active-color: #000;--pa-table-hover-bg: #e5c7ca;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-light{--pa-table-color: #000;--pa-table-bg: #f8f9fa;--pa-table-border-color: #c6c7c8;--pa-table-striped-bg: #ecedee;--pa-table-striped-color: #000;--pa-table-active-bg: #dfe0e1;--pa-table-active-color: #000;--pa-table-hover-bg: #e5e6e7;--pa-table-hover-color: #000;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-dark{--pa-table-color: #fff;--pa-table-bg: #212529;--pa-table-border-color: #4d5154;--pa-table-striped-bg: #2c3034;--pa-table-striped-color: #fff;--pa-table-active-bg: #373b3e;--pa-table-active-color: #fff;--pa-table-hover-bg: #323539;--pa-table-hover-color: #fff;color:var(--pa-table-color);border-color:var(--pa-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + var(--pa-border-width));padding-bottom:calc(0.375rem + var(--pa-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + var(--pa-border-width));padding-bottom:calc(0.5rem + var(--pa-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + var(--pa-border-width));padding-bottom:calc(0.25rem + var(--pa-border-width));font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:var(--pa-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);appearance:none;background-color:var(--pa-body-bg);background-clip:padding-box;border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-inset);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--pa-body-color);background-color:var(--pa-body-bg);border-color:#818d9a;outline:0;box-shadow:var(--pa-box-shadow-inset),0 0 0 .25rem rgba(2,26,52,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--pa-secondary-color);opacity:1}.form-control:disabled{background-color:var(--pa-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:var(--pa-body-color);background-color:var(--pa-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--pa-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--pa-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--pa-body-color);background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:var(--pa-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2));padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.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(var(--pa-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}.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(var(--pa-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--pa-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(var(--pa-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--pa-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--pa-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(var(--pa-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--pa-border-width) * 2))}.form-select{--pa-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);appearance:none;background-color:var(--pa-body-bg);background-image:var(--pa-form-select-bg-img),var(--pa-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius);box-shadow:var(--pa-box-shadow-inset);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:#818d9a;outline:0;box-shadow:var(--pa-box-shadow-inset),0 0 0 .25rem rgba(2,26,52,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--pa-secondary-bg)}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 var(--pa-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}[data-bs-theme=dark] .form-select{--pa-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--pa-form-check-bg: var(--pa-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;background-color:var(--pa-form-check-bg);background-image:var(--pa-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--pa-border-width) solid var(--pa-border-color);print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#818d9a;outline:0;box-shadow:0 0 0 .25rem rgba(2,26,52,.25)}.form-check-input:checked{background-color:#021a34;border-color:#021a34}.form-check-input:checked[type=checkbox]{--pa-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]{--pa-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#021a34;border-color:#021a34;--pa-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--pa-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(--pa-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--pa-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='%23818d9a'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--pa-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){--pa-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;background-color: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(2,26,52,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(2,26,52,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;background-color:#021a34;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);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:#b3bac2}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--pa-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem;box-shadow:var(--pa-box-shadow-inset)}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;background-color:#021a34;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);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:#b3bac2}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--pa-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem;box-shadow:var(--pa-box-shadow-inset)}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--pa-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--pa-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--pa-border-width) * 2));min-height:calc(3.5rem + calc(var(--pa-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--pa-border-width) 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(--pa-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:var(--pa-body-bg);border-radius:var(--pa-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--pa-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--pa-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:var(--pa-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--pa-body-color);text-align:center;white-space:nowrap;background-color:var(--pa-tertiary-bg);border:var(--pa-border-width) solid var(--pa-border-color);border-radius:var(--pa-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--pa-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--pa-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--pa-border-width)*-1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--pa-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--pa-success);border-radius:var(--pa-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--pa-form-valid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--pa-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--pa-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--pa-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--pa-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--pa-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--pa-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--pa-success-rgb), 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--pa-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--pa-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--pa-danger);border-radius:var(--pa-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--pa-form-invalid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--pa-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--pa-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--pa-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--pa-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--pa-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--pa-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--pa-danger-rgb), 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--pa-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--pa-btn-padding-x: 0.75rem;--pa-btn-padding-y: 0.375rem;--pa-btn-font-family: ;--pa-btn-font-size:1rem;--pa-btn-font-weight: 400;--pa-btn-line-height: 1.5;--pa-btn-color: var(--pa-body-color);--pa-btn-bg: transparent;--pa-btn-border-width: var(--pa-border-width);--pa-btn-border-color: transparent;--pa-btn-border-radius: var(--pa-border-radius);--pa-btn-hover-border-color: transparent;--pa-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--pa-btn-disabled-opacity: 0.65;--pa-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--pa-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--pa-btn-padding-y) var(--pa-btn-padding-x);font-family:var(--pa-btn-font-family);font-size:var(--pa-btn-font-size);font-weight:var(--pa-btn-font-weight);line-height:var(--pa-btn-line-height);color:var(--pa-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;border:var(--pa-btn-border-width) solid var(--pa-btn-border-color);border-radius:var(--pa-btn-border-radius);background-color:var(--pa-btn-bg);box-shadow:var(--pa-btn-box-shadow);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(--pa-btn-hover-color);background-color:var(--pa-btn-hover-bg);border-color:var(--pa-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--pa-btn-color);background-color:var(--pa-btn-bg);border-color:var(--pa-btn-border-color)}.btn:focus-visible{color:var(--pa-btn-hover-color);background-color:var(--pa-btn-hover-bg);border-color:var(--pa-btn-hover-border-color);outline:0;box-shadow:var(--pa-btn-box-shadow),var(--pa-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--pa-btn-hover-border-color);outline:0;box-shadow:var(--pa-btn-box-shadow),var(--pa-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--pa-btn-active-color);background-color:var(--pa-btn-active-bg);border-color:var(--pa-btn-active-border-color);box-shadow:var(--pa-btn-active-shadow)}.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(--pa-btn-active-shadow),var(--pa-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--pa-btn-disabled-color);pointer-events:none;background-color:var(--pa-btn-disabled-bg);border-color:var(--pa-btn-disabled-border-color);opacity:var(--pa-btn-disabled-opacity);box-shadow:none}.btn-primary{--pa-btn-color: #fff;--pa-btn-bg: #021a34;--pa-btn-border-color: #021a34;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #02162c;--pa-btn-hover-border-color: #02152a;--pa-btn-focus-shadow-rgb: 40, 60, 82;--pa-btn-active-color: #fff;--pa-btn-active-bg: #02152a;--pa-btn-active-border-color: #021427;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #021a34;--pa-btn-disabled-border-color: #021a34}.btn-secondary{--pa-btn-color: #fff;--pa-btn-bg: #075f94;--pa-btn-border-color: #075f94;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #06517e;--pa-btn-hover-border-color: #064c76;--pa-btn-focus-shadow-rgb: 44, 119, 164;--pa-btn-active-color: #fff;--pa-btn-active-bg: #064c76;--pa-btn-active-border-color: #05476f;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #075f94;--pa-btn-disabled-border-color: #075f94}.btn-success{--pa-btn-color: #fff;--pa-btn-bg: #198754;--pa-btn-border-color: #198754;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #157347;--pa-btn-hover-border-color: #146c43;--pa-btn-focus-shadow-rgb: 60, 153, 110;--pa-btn-active-color: #fff;--pa-btn-active-bg: #146c43;--pa-btn-active-border-color: #13653f;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #198754;--pa-btn-disabled-border-color: #198754}.btn-info{--pa-btn-color: #000;--pa-btn-bg: #0dcaf0;--pa-btn-border-color: #0dcaf0;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #31d2f2;--pa-btn-hover-border-color: #25cff2;--pa-btn-focus-shadow-rgb: 11, 172, 204;--pa-btn-active-color: #000;--pa-btn-active-bg: #3dd5f3;--pa-btn-active-border-color: #25cff2;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #0dcaf0;--pa-btn-disabled-border-color: #0dcaf0}.btn-warning{--pa-btn-color: #000;--pa-btn-bg: #ffc107;--pa-btn-border-color: #ffc107;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #ffca2c;--pa-btn-hover-border-color: #ffc720;--pa-btn-focus-shadow-rgb: 217, 164, 6;--pa-btn-active-color: #000;--pa-btn-active-bg: #ffcd39;--pa-btn-active-border-color: #ffc720;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #ffc107;--pa-btn-disabled-border-color: #ffc107}.btn-danger{--pa-btn-color: #fff;--pa-btn-bg: #dc3545;--pa-btn-border-color: #dc3545;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #bb2d3b;--pa-btn-hover-border-color: #b02a37;--pa-btn-focus-shadow-rgb: 225, 83, 97;--pa-btn-active-color: #fff;--pa-btn-active-bg: #b02a37;--pa-btn-active-border-color: #a52834;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #dc3545;--pa-btn-disabled-border-color: #dc3545}.btn-light{--pa-btn-color: #000;--pa-btn-bg: #f8f9fa;--pa-btn-border-color: #f8f9fa;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #d3d4d5;--pa-btn-hover-border-color: #c6c7c8;--pa-btn-focus-shadow-rgb: 211, 212, 213;--pa-btn-active-color: #000;--pa-btn-active-bg: #c6c7c8;--pa-btn-active-border-color: #babbbc;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #000;--pa-btn-disabled-bg: #f8f9fa;--pa-btn-disabled-border-color: #f8f9fa}.btn-dark{--pa-btn-color: #fff;--pa-btn-bg: #212529;--pa-btn-border-color: #212529;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #424649;--pa-btn-hover-border-color: #373b3e;--pa-btn-focus-shadow-rgb: 66, 70, 73;--pa-btn-active-color: #fff;--pa-btn-active-bg: #4d5154;--pa-btn-active-border-color: #373b3e;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #fff;--pa-btn-disabled-bg: #212529;--pa-btn-disabled-border-color: #212529}.btn-outline-primary{--pa-btn-color: #021a34;--pa-btn-border-color: #021a34;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #021a34;--pa-btn-hover-border-color: #021a34;--pa-btn-focus-shadow-rgb: 2, 26, 52;--pa-btn-active-color: #fff;--pa-btn-active-bg: #021a34;--pa-btn-active-border-color: #021a34;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #021a34;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #021a34;--pa-gradient: none}.btn-outline-secondary{--pa-btn-color: #075f94;--pa-btn-border-color: #075f94;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #075f94;--pa-btn-hover-border-color: #075f94;--pa-btn-focus-shadow-rgb: 7, 95, 148;--pa-btn-active-color: #fff;--pa-btn-active-bg: #075f94;--pa-btn-active-border-color: #075f94;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #075f94;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #075f94;--pa-gradient: none}.btn-outline-success{--pa-btn-color: #198754;--pa-btn-border-color: #198754;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #198754;--pa-btn-hover-border-color: #198754;--pa-btn-focus-shadow-rgb: 25, 135, 84;--pa-btn-active-color: #fff;--pa-btn-active-bg: #198754;--pa-btn-active-border-color: #198754;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #198754;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #198754;--pa-gradient: none}.btn-outline-info{--pa-btn-color: #0dcaf0;--pa-btn-border-color: #0dcaf0;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #0dcaf0;--pa-btn-hover-border-color: #0dcaf0;--pa-btn-focus-shadow-rgb: 13, 202, 240;--pa-btn-active-color: #000;--pa-btn-active-bg: #0dcaf0;--pa-btn-active-border-color: #0dcaf0;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #0dcaf0;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #0dcaf0;--pa-gradient: none}.btn-outline-warning{--pa-btn-color: #ffc107;--pa-btn-border-color: #ffc107;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #ffc107;--pa-btn-hover-border-color: #ffc107;--pa-btn-focus-shadow-rgb: 255, 193, 7;--pa-btn-active-color: #000;--pa-btn-active-bg: #ffc107;--pa-btn-active-border-color: #ffc107;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #ffc107;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #ffc107;--pa-gradient: none}.btn-outline-danger{--pa-btn-color: #dc3545;--pa-btn-border-color: #dc3545;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #dc3545;--pa-btn-hover-border-color: #dc3545;--pa-btn-focus-shadow-rgb: 220, 53, 69;--pa-btn-active-color: #fff;--pa-btn-active-bg: #dc3545;--pa-btn-active-border-color: #dc3545;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #dc3545;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #dc3545;--pa-gradient: none}.btn-outline-light{--pa-btn-color: #f8f9fa;--pa-btn-border-color: #f8f9fa;--pa-btn-hover-color: #000;--pa-btn-hover-bg: #f8f9fa;--pa-btn-hover-border-color: #f8f9fa;--pa-btn-focus-shadow-rgb: 248, 249, 250;--pa-btn-active-color: #000;--pa-btn-active-bg: #f8f9fa;--pa-btn-active-border-color: #f8f9fa;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #f8f9fa;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #f8f9fa;--pa-gradient: none}.btn-outline-dark{--pa-btn-color: #212529;--pa-btn-border-color: #212529;--pa-btn-hover-color: #fff;--pa-btn-hover-bg: #212529;--pa-btn-hover-border-color: #212529;--pa-btn-focus-shadow-rgb: 33, 37, 41;--pa-btn-active-color: #fff;--pa-btn-active-bg: #212529;--pa-btn-active-border-color: #212529;--pa-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--pa-btn-disabled-color: #212529;--pa-btn-disabled-bg: transparent;--pa-btn-disabled-border-color: #212529;--pa-gradient: none}.btn-link{--pa-btn-font-weight: 400;--pa-btn-color: var(--pa-link-color);--pa-btn-bg: transparent;--pa-btn-border-color: transparent;--pa-btn-hover-color: var(--pa-link-hover-color);--pa-btn-hover-border-color: transparent;--pa-btn-active-color: var(--pa-link-hover-color);--pa-btn-active-border-color: transparent;--pa-btn-disabled-color: #6c757d;--pa-btn-disabled-border-color: transparent;--pa-btn-box-shadow: 0 0 0 #000;--pa-btn-focus-shadow-rgb: 40, 60, 82;text-decoration:underline}.btn-link:focus-visible{color:var(--pa-btn-color)}.btn-link:hover{color:var(--pa-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--pa-btn-padding-y: 0.5rem;--pa-btn-padding-x: 1rem;--pa-btn-font-size:1.25rem;--pa-btn-border-radius: var(--pa-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--pa-btn-padding-y: 0.25rem;--pa-btn-padding-x: 0.5rem;--pa-btn-font-size:0.875rem;--pa-btn-border-radius: var(--pa-border-radius-sm)}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.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{--pa-dropdown-zindex: 1000;--pa-dropdown-min-width: 10rem;--pa-dropdown-padding-x: 0;--pa-dropdown-padding-y: 0.5rem;--pa-dropdown-spacer: 0.125rem;--pa-dropdown-font-size:1rem;--pa-dropdown-color: var(--pa-body-color);--pa-dropdown-bg: var(--pa-body-bg);--pa-dropdown-border-color: var(--pa-border-color-translucent);--pa-dropdown-border-radius: var(--pa-border-radius);--pa-dropdown-border-width: var(--pa-border-width);--pa-dropdown-inner-border-radius: calc(var(--pa-border-radius) - var(--pa-border-width));--pa-dropdown-divider-bg: var(--pa-border-color-translucent);--pa-dropdown-divider-margin-y: 0.5rem;--pa-dropdown-box-shadow: var(--pa-box-shadow);--pa-dropdown-link-color: var(--pa-body-color);--pa-dropdown-link-hover-color: var(--pa-body-color);--pa-dropdown-link-hover-bg: var(--pa-tertiary-bg);--pa-dropdown-link-active-color: #fff;--pa-dropdown-link-active-bg: #021a34;--pa-dropdown-link-disabled-color: var(--pa-tertiary-color);--pa-dropdown-item-padding-x: 1rem;--pa-dropdown-item-padding-y: 0.25rem;--pa-dropdown-header-color: #6c757d;--pa-dropdown-header-padding-x: 1rem;--pa-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--pa-dropdown-zindex);display:none;min-width:var(--pa-dropdown-min-width);padding:var(--pa-dropdown-padding-y) var(--pa-dropdown-padding-x);margin:0;font-size:var(--pa-dropdown-font-size);color:var(--pa-dropdown-color);text-align:left;list-style:none;background-color:var(--pa-dropdown-bg);background-clip:padding-box;border:var(--pa-dropdown-border-width) solid var(--pa-dropdown-border-color);border-radius:var(--pa-dropdown-border-radius);box-shadow:var(--pa-dropdown-box-shadow)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--pa-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(--pa-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(--pa-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(--pa-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(--pa-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--pa-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--pa-dropdown-item-padding-y) var(--pa-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--pa-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0;border-radius:var(--pa-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--pa-dropdown-link-hover-color);background-color:var(--pa-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--pa-dropdown-link-active-color);text-decoration:none;background-color:var(--pa-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--pa-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(--pa-dropdown-header-padding-y) var(--pa-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--pa-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--pa-dropdown-item-padding-y) var(--pa-dropdown-item-padding-x);color:var(--pa-dropdown-link-color)}.dropdown-menu-dark{--pa-dropdown-color: #dee2e6;--pa-dropdown-bg: #343a40;--pa-dropdown-border-color: var(--pa-border-color-translucent);--pa-dropdown-box-shadow: ;--pa-dropdown-link-color: #dee2e6;--pa-dropdown-link-hover-color: #fff;--pa-dropdown-divider-bg: var(--pa-border-color-translucent);--pa-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--pa-dropdown-link-active-color: #fff;--pa-dropdown-link-active-bg: #021a34;--pa-dropdown-link-disabled-color: #adb5bd;--pa-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--pa-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--pa-border-width)*-1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group.show .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--pa-border-width)*-1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--pa-nav-link-padding-x: 1rem;--pa-nav-link-padding-y: 0.5rem;--pa-nav-link-font-weight: ;--pa-nav-link-color: var(--pa-link-color);--pa-nav-link-hover-color: var(--pa-link-hover-color);--pa-nav-link-disabled-color: var(--pa-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--pa-nav-link-padding-y) var(--pa-nav-link-padding-x);font-size:var(--pa-nav-link-font-size);font-weight:var(--pa-nav-link-font-weight);color:var(--pa-nav-link-color);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(--pa-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(2,26,52,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--pa-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--pa-nav-tabs-border-width: var(--pa-border-width);--pa-nav-tabs-border-color: var(--pa-border-color);--pa-nav-tabs-border-radius: var(--pa-border-radius);--pa-nav-tabs-link-hover-border-color: var(--pa-secondary-bg) var(--pa-secondary-bg) var(--pa-border-color);--pa-nav-tabs-link-active-color: var(--pa-emphasis-color);--pa-nav-tabs-link-active-bg: var(--pa-body-bg);--pa-nav-tabs-link-active-border-color: var(--pa-border-color) var(--pa-border-color) var(--pa-body-bg);border-bottom:var(--pa-nav-tabs-border-width) solid var(--pa-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--pa-nav-tabs-border-width));border:var(--pa-nav-tabs-border-width) solid rgba(0,0,0,0);border-top-left-radius:var(--pa-nav-tabs-border-radius);border-top-right-radius:var(--pa-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--pa-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--pa-nav-tabs-link-active-color);background-color:var(--pa-nav-tabs-link-active-bg);border-color:var(--pa-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--pa-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--pa-nav-pills-border-radius: var(--pa-border-radius);--pa-nav-pills-link-active-color: #fff;--pa-nav-pills-link-active-bg: #021a34}.nav-pills .nav-link{border-radius:var(--pa-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--pa-nav-pills-link-active-color);background-color:var(--pa-nav-pills-link-active-bg)}.nav-underline{--pa-nav-underline-gap: 1rem;--pa-nav-underline-border-width: 0.125rem;--pa-nav-underline-link-active-color: var(--pa-emphasis-color);gap:var(--pa-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--pa-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(--pa-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--pa-navbar-padding-x: 0;--pa-navbar-padding-y: 0.5rem;--pa-navbar-color: rgba(var(--pa-emphasis-color-rgb), 0.65);--pa-navbar-hover-color: rgba(var(--pa-emphasis-color-rgb), 0.8);--pa-navbar-disabled-color: rgba(var(--pa-emphasis-color-rgb), 0.3);--pa-navbar-active-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-brand-padding-y: 0.3125rem;--pa-navbar-brand-margin-end: 1rem;--pa-navbar-brand-font-size: 1.25rem;--pa-navbar-brand-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-brand-hover-color: rgba(var(--pa-emphasis-color-rgb), 1);--pa-navbar-nav-link-padding-x: 0.5rem;--pa-navbar-toggler-padding-y: 0.25rem;--pa-navbar-toggler-padding-x: 0.75rem;--pa-navbar-toggler-font-size: 1.25rem;--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--pa-navbar-toggler-border-color: rgba(var(--pa-emphasis-color-rgb), 0.15);--pa-navbar-toggler-border-radius: var(--pa-border-radius);--pa-navbar-toggler-focus-width: 0.25rem;--pa-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--pa-navbar-padding-y) var(--pa-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--pa-navbar-brand-padding-y);padding-bottom:var(--pa-navbar-brand-padding-y);margin-right:var(--pa-navbar-brand-margin-end);font-size:var(--pa-navbar-brand-font-size);color:var(--pa-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--pa-navbar-brand-hover-color)}.navbar-nav{--pa-nav-link-padding-x: 0;--pa-nav-link-padding-y: 0.5rem;--pa-nav-link-font-weight: ;--pa-nav-link-color: var(--pa-navbar-color);--pa-nav-link-hover-color: var(--pa-navbar-hover-color);--pa-nav-link-disabled-color: var(--pa-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--pa-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--pa-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--pa-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--pa-navbar-toggler-padding-y) var(--pa-navbar-toggler-padding-x);font-size:var(--pa-navbar-toggler-font-size);line-height:1;color:var(--pa-navbar-color);background-color:rgba(0,0,0,0);border:var(--pa-border-width) solid var(--pa-navbar-toggler-border-color);border-radius:var(--pa-navbar-toggler-border-radius);transition:var(--pa-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(--pa-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--pa-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--pa-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--pa-navbar-nav-link-padding-x);padding-left:var(--pa-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;box-shadow:none;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--pa-navbar-color: rgba(255, 255, 255, 0.55);--pa-navbar-hover-color: rgba(255, 255, 255, 0.75);--pa-navbar-disabled-color: rgba(255, 255, 255, 0.25);--pa-navbar-active-color: #fff;--pa-navbar-brand-color: #fff;--pa-navbar-brand-hover-color: #fff;--pa-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--pa-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.badge{--pa-badge-padding-x: 0.65em;--pa-badge-padding-y: 0.35em;--pa-badge-font-size:0.75em;--pa-badge-font-weight: 700;--pa-badge-color: #fff;--pa-badge-border-radius: var(--pa-border-radius);display:inline-block;padding:var(--pa-badge-padding-y) var(--pa-badge-padding-x);font-size:var(--pa-badge-font-size);font-weight:var(--pa-badge-font-weight);line-height:1;color:var(--pa-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--pa-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--pa-alert-bg: transparent;--pa-alert-padding-x: 1rem;--pa-alert-padding-y: 1rem;--pa-alert-margin-bottom: 1rem;--pa-alert-color: inherit;--pa-alert-border-color: transparent;--pa-alert-border: var(--pa-border-width) solid var(--pa-alert-border-color);--pa-alert-border-radius: var(--pa-border-radius);--pa-alert-link-color: inherit;position:relative;padding:var(--pa-alert-padding-y) var(--pa-alert-padding-x);margin-bottom:var(--pa-alert-margin-bottom);color:var(--pa-alert-color);background-color:var(--pa-alert-bg);border:var(--pa-alert-border);border-radius:var(--pa-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--pa-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--pa-alert-color: var(--pa-primary-text-emphasis);--pa-alert-bg: var(--pa-primary-bg-subtle);--pa-alert-border-color: var(--pa-primary-border-subtle);--pa-alert-link-color: var(--pa-primary-text-emphasis)}.alert-secondary{--pa-alert-color: var(--pa-secondary-text-emphasis);--pa-alert-bg: var(--pa-secondary-bg-subtle);--pa-alert-border-color: var(--pa-secondary-border-subtle);--pa-alert-link-color: var(--pa-secondary-text-emphasis)}.alert-success{--pa-alert-color: var(--pa-success-text-emphasis);--pa-alert-bg: var(--pa-success-bg-subtle);--pa-alert-border-color: var(--pa-success-border-subtle);--pa-alert-link-color: var(--pa-success-text-emphasis)}.alert-info{--pa-alert-color: var(--pa-info-text-emphasis);--pa-alert-bg: var(--pa-info-bg-subtle);--pa-alert-border-color: var(--pa-info-border-subtle);--pa-alert-link-color: var(--pa-info-text-emphasis)}.alert-warning{--pa-alert-color: var(--pa-warning-text-emphasis);--pa-alert-bg: var(--pa-warning-bg-subtle);--pa-alert-border-color: var(--pa-warning-border-subtle);--pa-alert-link-color: var(--pa-warning-text-emphasis)}.alert-danger{--pa-alert-color: var(--pa-danger-text-emphasis);--pa-alert-bg: var(--pa-danger-bg-subtle);--pa-alert-border-color: var(--pa-danger-border-subtle);--pa-alert-link-color: var(--pa-danger-text-emphasis)}.alert-light{--pa-alert-color: var(--pa-light-text-emphasis);--pa-alert-bg: var(--pa-light-bg-subtle);--pa-alert-border-color: var(--pa-light-border-subtle);--pa-alert-link-color: var(--pa-light-text-emphasis)}.alert-dark{--pa-alert-color: var(--pa-dark-text-emphasis);--pa-alert-bg: var(--pa-dark-bg-subtle);--pa-alert-border-color: var(--pa-dark-border-subtle);--pa-alert-link-color: var(--pa-dark-text-emphasis)}.btn-close{--pa-btn-close-color: #000;--pa-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");--pa-btn-close-opacity: 0.5;--pa-btn-close-hover-opacity: 0.75;--pa-btn-close-focus-shadow: 0 0 0 0.25rem rgba(2, 26, 52, 0.25);--pa-btn-close-focus-opacity: 1;--pa-btn-close-disabled-opacity: 0.25;--pa-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--pa-btn-close-color);background:rgba(0,0,0,0) var(--pa-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--pa-btn-close-opacity)}.btn-close:hover{color:var(--pa-btn-close-color);text-decoration:none;opacity:var(--pa-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--pa-btn-close-focus-shadow);opacity:var(--pa-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;opacity:var(--pa-btn-close-disabled-opacity)}.btn-close-white{filter:var(--pa-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--pa-btn-close-white-filter)}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--pa-primary-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--pa-secondary-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--pa-success-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--pa-info-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--pa-warning-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--pa-danger-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--pa-light-rgb), var(--pa-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--pa-dark-rgb), var(--pa-bg-opacity, 1)) !important}.link-primary{color:RGBA(var(--pa-primary-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-primary-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(2, 21, 42, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(2, 21, 42, var(--pa-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--pa-secondary-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-secondary-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(6, 76, 118, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(6, 76, 118, var(--pa-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--pa-success-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-success-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20, 108, 67, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(20, 108, 67, var(--pa-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--pa-info-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-info-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61, 213, 243, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(61, 213, 243, var(--pa-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--pa-warning-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-warning-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255, 205, 57, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 205, 57, var(--pa-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--pa-danger-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-danger-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176, 42, 55, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(176, 42, 55, var(--pa-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--pa-light-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-light-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--pa-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--pa-dark-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-dark-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, var(--pa-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--pa-emphasis-color-rgb), var(--pa-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--pa-focus-ring-x, 0) var(--pa-focus-ring-y, 0) var(--pa-focus-ring-blur, 0) var(--pa-focus-ring-width) var(--pa-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;text-decoration-color:rgba(var(--pa-link-color-rgb), var(--pa-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--pa-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--pa-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--pa-aspect-ratio: 100%}.ratio-4x3{--pa-aspect-ratio: 75%}.ratio-16x9{--pa-aspect-ratio: 56.25%}.ratio-21x9{--pa-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--pa-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:var(--pa-box-shadow) !important}.shadow-sm{box-shadow:var(--pa-box-shadow-sm) !important}.shadow-lg{box-shadow:var(--pa-box-shadow-lg) !important}.shadow-none{box-shadow:none !important}.focus-ring-primary{--pa-focus-ring-color: rgba(var(--pa-primary-rgb), var(--pa-focus-ring-opacity))}.focus-ring-secondary{--pa-focus-ring-color: rgba(var(--pa-secondary-rgb), var(--pa-focus-ring-opacity))}.focus-ring-success{--pa-focus-ring-color: rgba(var(--pa-success-rgb), var(--pa-focus-ring-opacity))}.focus-ring-info{--pa-focus-ring-color: rgba(var(--pa-info-rgb), var(--pa-focus-ring-opacity))}.focus-ring-warning{--pa-focus-ring-color: rgba(var(--pa-warning-rgb), var(--pa-focus-ring-opacity))}.focus-ring-danger{--pa-focus-ring-color: rgba(var(--pa-danger-rgb), var(--pa-focus-ring-opacity))}.focus-ring-light{--pa-focus-ring-color: rgba(var(--pa-light-rgb), var(--pa-focus-ring-opacity))}.focus-ring-dark{--pa-focus-ring-color: rgba(var(--pa-dark-rgb), var(--pa-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(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--pa-border-width) var(--pa-border-style) var(--pa-border-color) !important}.border-start-0{border-left:0 !important}.border-primary{--pa-border-opacity: 1;border-color:rgba(var(--pa-primary-rgb), var(--pa-border-opacity)) !important}.border-secondary{--pa-border-opacity: 1;border-color:rgba(var(--pa-secondary-rgb), var(--pa-border-opacity)) !important}.border-success{--pa-border-opacity: 1;border-color:rgba(var(--pa-success-rgb), var(--pa-border-opacity)) !important}.border-info{--pa-border-opacity: 1;border-color:rgba(var(--pa-info-rgb), var(--pa-border-opacity)) !important}.border-warning{--pa-border-opacity: 1;border-color:rgba(var(--pa-warning-rgb), var(--pa-border-opacity)) !important}.border-danger{--pa-border-opacity: 1;border-color:rgba(var(--pa-danger-rgb), var(--pa-border-opacity)) !important}.border-light{--pa-border-opacity: 1;border-color:rgba(var(--pa-light-rgb), var(--pa-border-opacity)) !important}.border-dark{--pa-border-opacity: 1;border-color:rgba(var(--pa-dark-rgb), var(--pa-border-opacity)) !important}.border-black{--pa-border-opacity: 1;border-color:rgba(var(--pa-black-rgb), var(--pa-border-opacity)) !important}.border-white{--pa-border-opacity: 1;border-color:rgba(var(--pa-white-rgb), var(--pa-border-opacity)) !important}.border-primary-subtle{border-color:var(--pa-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--pa-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--pa-success-border-subtle) !important}.border-info-subtle{border-color:var(--pa-info-border-subtle) !important}.border-warning-subtle{border-color:var(--pa-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--pa-danger-border-subtle) !important}.border-light-subtle{border-color:var(--pa-light-border-subtle) !important}.border-dark-subtle{border-color:var(--pa-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{--pa-border-opacity: 0.1}.border-opacity-25{--pa-border-opacity: 0.25}.border-opacity-50{--pa-border-opacity: 0.5}.border-opacity-75{--pa-border-opacity: 0.75}.border-opacity-100{--pa-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(--pa-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--pa-text-opacity: 1;color:rgba(var(--pa-primary-rgb), var(--pa-text-opacity)) !important}.text-secondary{--pa-text-opacity: 1;color:rgba(var(--pa-secondary-rgb), var(--pa-text-opacity)) !important}.text-success{--pa-text-opacity: 1;color:rgba(var(--pa-success-rgb), var(--pa-text-opacity)) !important}.text-info{--pa-text-opacity: 1;color:rgba(var(--pa-info-rgb), var(--pa-text-opacity)) !important}.text-warning{--pa-text-opacity: 1;color:rgba(var(--pa-warning-rgb), var(--pa-text-opacity)) !important}.text-danger{--pa-text-opacity: 1;color:rgba(var(--pa-danger-rgb), var(--pa-text-opacity)) !important}.text-light{--pa-text-opacity: 1;color:rgba(var(--pa-light-rgb), var(--pa-text-opacity)) !important}.text-dark{--pa-text-opacity: 1;color:rgba(var(--pa-dark-rgb), var(--pa-text-opacity)) !important}.text-black{--pa-text-opacity: 1;color:rgba(var(--pa-black-rgb), var(--pa-text-opacity)) !important}.text-white{--pa-text-opacity: 1;color:rgba(var(--pa-white-rgb), var(--pa-text-opacity)) !important}.text-body{--pa-text-opacity: 1;color:rgba(var(--pa-body-color-rgb), var(--pa-text-opacity)) !important}.text-muted{--pa-text-opacity: 1;color:var(--pa-secondary-color) !important}.text-black-50{--pa-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--pa-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-body-secondary{--pa-text-opacity: 1;color:var(--pa-secondary-color) !important}.text-body-tertiary{--pa-text-opacity: 1;color:var(--pa-tertiary-color) !important}.text-body-emphasis{--pa-text-opacity: 1;color:var(--pa-emphasis-color) !important}.text-reset{--pa-text-opacity: 1;color:inherit !important}.text-opacity-25{--pa-text-opacity: 0.25}.text-opacity-50{--pa-text-opacity: 0.5}.text-opacity-75{--pa-text-opacity: 0.75}.text-opacity-100{--pa-text-opacity: 1}.text-primary-emphasis{color:var(--pa-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--pa-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--pa-success-text-emphasis) !important}.text-info-emphasis{color:var(--pa-info-text-emphasis) !important}.text-warning-emphasis{color:var(--pa-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--pa-danger-text-emphasis) !important}.text-light-emphasis{color:var(--pa-light-text-emphasis) !important}.text-dark-emphasis{color:var(--pa-dark-text-emphasis) !important}.link-opacity-10{--pa-link-opacity: 0.1}.link-opacity-10-hover:hover{--pa-link-opacity: 0.1}.link-opacity-25{--pa-link-opacity: 0.25}.link-opacity-25-hover:hover{--pa-link-opacity: 0.25}.link-opacity-50{--pa-link-opacity: 0.5}.link-opacity-50-hover:hover{--pa-link-opacity: 0.5}.link-opacity-75{--pa-link-opacity: 0.75}.link-opacity-75-hover:hover{--pa-link-opacity: 0.75}.link-opacity-100{--pa-link-opacity: 1}.link-opacity-100-hover:hover{--pa-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-primary{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-primary-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-secondary{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-secondary-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-success{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-success-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-info{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-info-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-warning{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-warning-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-danger{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-danger-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-light{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-light-rgb), var(--pa-link-underline-opacity)) !important}.link-underline-dark{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-dark-rgb), var(--pa-link-underline-opacity)) !important}.link-underline{--pa-link-underline-opacity: 1;text-decoration-color:rgba(var(--pa-link-color-rgb), var(--pa-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--pa-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--pa-link-underline-opacity: 0}.link-underline-opacity-10{--pa-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--pa-link-underline-opacity: 0.1}.link-underline-opacity-25{--pa-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--pa-link-underline-opacity: 0.25}.link-underline-opacity-50{--pa-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--pa-link-underline-opacity: 0.5}.link-underline-opacity-75{--pa-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--pa-link-underline-opacity: 0.75}.link-underline-opacity-100{--pa-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--pa-link-underline-opacity: 1}.bg-primary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-primary-rgb), var(--pa-bg-opacity)) !important}.bg-secondary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-secondary-rgb), var(--pa-bg-opacity)) !important}.bg-success{--pa-bg-opacity: 1;background-color:rgba(var(--pa-success-rgb), var(--pa-bg-opacity)) !important}.bg-info{--pa-bg-opacity: 1;background-color:rgba(var(--pa-info-rgb), var(--pa-bg-opacity)) !important}.bg-warning{--pa-bg-opacity: 1;background-color:rgba(var(--pa-warning-rgb), var(--pa-bg-opacity)) !important}.bg-danger{--pa-bg-opacity: 1;background-color:rgba(var(--pa-danger-rgb), var(--pa-bg-opacity)) !important}.bg-light{--pa-bg-opacity: 1;background-color:rgba(var(--pa-light-rgb), var(--pa-bg-opacity)) !important}.bg-dark{--pa-bg-opacity: 1;background-color:rgba(var(--pa-dark-rgb), var(--pa-bg-opacity)) !important}.bg-black{--pa-bg-opacity: 1;background-color:rgba(var(--pa-black-rgb), var(--pa-bg-opacity)) !important}.bg-white{--pa-bg-opacity: 1;background-color:rgba(var(--pa-white-rgb), var(--pa-bg-opacity)) !important}.bg-body{--pa-bg-opacity: 1;background-color:rgba(var(--pa-body-bg-rgb), var(--pa-bg-opacity)) !important}.bg-transparent{--pa-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-secondary-bg-rgb), var(--pa-bg-opacity)) !important}.bg-body-tertiary{--pa-bg-opacity: 1;background-color:rgba(var(--pa-tertiary-bg-rgb), var(--pa-bg-opacity)) !important}.bg-opacity-10{--pa-bg-opacity: 0.1}.bg-opacity-25{--pa-bg-opacity: 0.25}.bg-opacity-50{--pa-bg-opacity: 0.5}.bg-opacity-75{--pa-bg-opacity: 0.75}.bg-opacity-100{--pa-bg-opacity: 1}.bg-primary-subtle{background-color:var(--pa-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--pa-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--pa-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--pa-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--pa-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--pa-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--pa-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--pa-dark-bg-subtle) !important}.bg-gradient{background-image:var(--pa-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(--pa-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--pa-border-radius-sm) !important}.rounded-2{border-radius:var(--pa-border-radius) !important}.rounded-3{border-radius:var(--pa-border-radius-lg) !important}.rounded-4{border-radius:var(--pa-border-radius-xl) !important}.rounded-5{border-radius:var(--pa-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--pa-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--pa-border-radius) !important;border-top-right-radius:var(--pa-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(--pa-border-radius-sm) !important;border-top-right-radius:var(--pa-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--pa-border-radius) !important;border-top-right-radius:var(--pa-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--pa-border-radius-lg) !important;border-top-right-radius:var(--pa-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--pa-border-radius-xl) !important;border-top-right-radius:var(--pa-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--pa-border-radius-xxl) !important;border-top-right-radius:var(--pa-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(--pa-border-radius-pill) !important;border-top-right-radius:var(--pa-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--pa-border-radius) !important;border-bottom-right-radius:var(--pa-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(--pa-border-radius-sm) !important;border-bottom-right-radius:var(--pa-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--pa-border-radius) !important;border-bottom-right-radius:var(--pa-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--pa-border-radius-lg) !important;border-bottom-right-radius:var(--pa-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--pa-border-radius-xl) !important;border-bottom-right-radius:var(--pa-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--pa-border-radius-xxl) !important;border-bottom-right-radius:var(--pa-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(--pa-border-radius-pill) !important;border-bottom-right-radius:var(--pa-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--pa-border-radius) !important;border-bottom-left-radius:var(--pa-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(--pa-border-radius-sm) !important;border-bottom-left-radius:var(--pa-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--pa-border-radius) !important;border-bottom-left-radius:var(--pa-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--pa-border-radius-lg) !important;border-bottom-left-radius:var(--pa-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--pa-border-radius-xl) !important;border-bottom-left-radius:var(--pa-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--pa-border-radius-xxl) !important;border-bottom-left-radius:var(--pa-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(--pa-border-radius-pill) !important;border-bottom-left-radius:var(--pa-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--pa-border-radius) !important;border-top-left-radius:var(--pa-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(--pa-border-radius-sm) !important;border-top-left-radius:var(--pa-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--pa-border-radius) !important;border-top-left-radius:var(--pa-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--pa-border-radius-lg) !important;border-top-left-radius:var(--pa-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--pa-border-radius-xl) !important;border-top-left-radius:var(--pa-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--pa-border-radius-xxl) !important;border-top-left-radius:var(--pa-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(--pa-border-radius-pill) !important;border-top-left-radius:var(--pa-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}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}body{font-family:"Open Sans",sans-serif;font-weight:400;color:var(--text-color);background-color:var(--bg-color);max-width:1200px;margin:0 auto}.btn-primary{color:var(--text-color-reverse);background-color:var(--primary-color);border-color:var(--primary-color)}.btn-outline-primary{color:var(--primary-color);background:none;border-color:var(--primary-color)}.btn-outline-primary:hover{background-color:var(--primary-color);color:var(--text-color-reverse)}.btn-secondary{color:#fff;background-color:var(--secondary-color);border-color:var(--secondary-color)}.navbar .nav-top{height:86px}.navbar .fixed-menu{width:220px}.navbar .logo img{width:200px}a{text-decoration:underline;color:var(--link-color)}a:hover{color:var(--link-hover-color)}a:active{color:var(--link-color)}h1,.h1,h2,.h2{font-weight:500;line-height:1.25;padding-bottom:12px;padding-top:14px}h1,.h1{font-weight:600}h3,.h3{padding-top:16px}.motto .title{font-weight:600;font-size:32px;padding-top:36px}.motto .motto{font-weight:500;font-size:20px}.motto .short{font-weight:500;font-size:12px}.btn-fixed{border-width:2px;border-style:solid;width:220px;height:46px;text-transform:uppercase;font-weight:700;border-radius:5px 5px 5px 5px;vertical-align:middle;line-height:42px;padding:0;margin:16px;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)}.pactus-video video{max-width:100%;width:100%;margin-left:auto;margin-right:auto;display:block}.highlighter-rouge .highlight pre{background-color:#0d1117;padding:32px 12px 12px 12px;color:#ccc;position:relative;overflow:auto;direction:ltr}.highlighter-rouge .highlight pre button{position:absolute;top:6px;right:8px;padding:2px;background-color:gray;color:#404040;border-radius:5px;border:ridge 1px gray}.highlighter-rouge .highlight pre button:hover{cursor:pointer;background-color:#bcbabb}.nav-tabs{border-color:#0d1117 !important}.nav-tabs .nav-link{border-width:0 !important}.nav-tabs .nav-link:not(.active):hover{color:#fff !important;background-color:gray !important}.nav-tabs .active{color:#fff !important;background-color:#0d1117 !important}.table thead tr th{font-weight:700;background-color:var(--bg-color) !important}blockquote{background:#eee;border-left:10px solid #ccc;padding:16px;quotes:"“" "”" "‘" "’"}blockquote:before{color:#ccc;content:open-quote;font-size:64px;line-height:.1em;vertical-align:-0.4em}blockquote p{margin-top:16px}blockquote p:first-child{display:inline;padding-bottom:160px;margin-bottom:160px}.footer{background-color:var(--primary-color);color:var(--text-color-reverse)}.footer .section{font-size:1.75rem;font-weight:500;line-height:1.25;padding-bottom:20px}.footer li{padding-bottom:8px}.footer.anchor a{color:var(--text-color-reverse)}.footer.anchor a:link{color:var(--text-color-reverse);background-color:rgba(0,0,0,0);text-decoration:none}.footer.anchor a:hover{color:var(--text-color-reverse)}.footer .legal{color:var(--text-color-reverse);font-size:12px}.community img{margin:4px}.community_ran img{margin:4px}#btn-back-to-top{background-color:var(--primary-color);color:var(--bg-color);position:fixed;bottom:20px;right:20px;display:none}.edit-bar{padding-top:30px}.edit-bar .edit-btn,.edit-bar .edit-btn>a:hover{color:var(--text-color);text-decoration:none}.all-posts .post-link{padding-bottom:8px}.blog-post .post-date{padding-bottom:10px;color:gray}.blog-post .content{padding-top:22px;min-height:600px}.partners img{padding-top:24px}.sensifai{max-width:300px}.hexdump{font-family:monospace;font-size:12px;padding-bottom:1rem}.hexdump .offset{border-right:2px solid #708090;color:#789}.hexdump .ascii{color:dimgray}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.faq h3,.faq .h3{margin-top:20px;padding-top:16px;border-top:1px solid var(--primary-color)}.faq a{text-decoration:none}.faq .group{padding-top:16px}.faq .group .col{font-weight:600;padding-bottom:10px}.faq .separator{padding-top:12px;padding-bottom:12px}.faq .read_more{padding-top:12px}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.toc .btn,.toc a{color:var(--text-color)}.toc .btn-section{padding:.25rem .5rem;font-weight:600;background-color:rgba(0,0,0,0)}.toc .btn-section:hover,.toc .btn-section:focus{background-color:var(--bg-color)}.toc .btn-page a{padding:.1875rem .5rem;margin-top:.125rem;margin-left:1.25rem}.toc .btn-page a:hover,.toc .btn-page a:focus,.toc .btn-page .selected{background-color:var(--bg-color)}.timeline{position:relative}.timeline::after{content:"";position:absolute;width:6px;background-color:#939597;top:0;bottom:0;left:50%;margin-left:-3px}.timeline-card{position:relative;width:50%}.timeline-card .card{border:1px solid rgba(0,0,0,.175);border-radius:5px;background-color:#eee;color:#4c4c4c}.timeline-card .card a{color:#4c4c4c}.timeline-card .card .text-muted{color:#898b8d !important}.timeline-card .card-title{padding-bottom:12px;font-size:1.1rem;font-weight:500}.timeline-card::after{line-height:38px;font-size:24px;position:absolute;text-align:center;width:48px;height:48px;right:-24px;top:15px;border-radius:50%;z-index:1}.timeline-card.completed::after{content:"✅";background-color:#eee;border:5px solid #77b255}.timeline-card.ongoing::after{content:"🚧";background-color:#eee;border:5px solid #ffcb4b}.timeline-card.upcoming::after{content:"⏳";background-color:#eee;border:5px solid #478ec2}.timeline-card.left{padding:0px 50px 20px 0px;left:0}.timeline-card.right{padding:0px 0px 20px 50px;left:50%}.timeline-card.left::before{content:"";position:absolute;height:20px;width:20px;background-color:#eee;box-sizing:border-box;transform:rotate(45deg) translate(-50%);top:34px;z-index:0;right:33px;border-right:1px solid rgba(0,0,0,.175);border-top:1px solid rgba(0,0,0,.175)}.timeline-card.right::before{content:"";position:absolute;height:20px;width:20px;background-color:#eee !important;box-sizing:border-box;transform:rotate(45deg) translate(-50%);top:33px;z-index:0;left:48px;border-left:1px solid rgba(0,0,0,.175);border-bottom:1px solid rgba(0,0,0,.175)}.timeline-card.right::after{left:-24px}@media screen and (max-width: 600px){.timeline::after{left:31px}.timeline-card{width:100%;padding-left:80px !important;padding-right:25px !important}.timeline-card::before{left:77px !important}.timeline-card.left::after,.timeline-card.right::after{left:8px !important}.timeline-card.left::before{border-right:none;border-top:none;border-left:1px solid rgba(0,0,0,.175);border-bottom:1px solid rgba(0,0,0,.175)}.timeline-card.right::before{right:auto}.timeline-card.right{left:0%}}:root{--primary-color-light: #021a34;--secondary-color-light: #075f94;--bg-color-light: #edeef0;--bg-color-reverse-light: #021a34;--bg-color-tinted-light: #b0b2b4;--text-color-light: #4c4c4c;--text-color-reverse-light: #edeef0;--text-muted-color-light: #4c4c4c;--link-color-light: #4c4c4c;--link-hover-color-light: #6c6c6c;--primary-color-dark: #edeef0;--secondary-color-dark: #075f94;--bg-color-dark: #14171c;--bg-color-reverse-dark: #edeef0;--bg-color-tinted-dark: #627191;--text-color-dark: #edeef0;--text-color-reverse-dark: #14171c;--text-muted-color-dark: #edeef0;--link-color-dark: #edeef0;--link-hover-color-dark: #ffffff}[data-bs-theme=light]{--primary-color: var(--primary-color-light);--secondary-color: var(--secondary-color-light);--bg-color-tinted: var(--bg-color-tinted-light);--bg-color: var(--bg-color-light);--bg-color-reverse: var(--bg-color-reverse-light);--text-color: var(--text-color-light);--text-color-reverse: var(--text-color-reverse-light);--text-muted-color: var(--text-muted-color-light);--link-color: var(--link-color-light);--link-hover-color: var(--link-hover-color-light)}[data-bs-theme=dark]{--primary-color: var(--primary-color-dark);--secondary-color: var(--secondary-color-dark);--bg-color: var(--bg-color-dark);--bg-color-reverse: var(--bg-color-reverse-dark);--bg-color-tinted: var(--bg-color-tinted-dark);--text-color: var(--text-color-dark);--text-color-reverse: var(--text-color-reverse-dark);--text-muted-color: var(--text-muted-color-dark);--link-color: var(--link-color-dark);--link-hover-color: var(--link-hover-color-dark)}.learn h2,.learn .h2{border-top:1px solid var(--primary-color)}[data-bs-theme=dark] blockquote{background:#14171c}[data-bs-theme=dark] .toc .btn-section::before{--svg-color: var(--text)}[data-bs-theme=dark] .fa-linux{color:#fff}/*# sourceMappingURL=custom.css.map */
\ No newline at end of file
diff --git a/assets/css/custom.css.map b/assets/css/custom.css.map
new file mode 100644
index 000000000..e0c48830b
--- /dev/null
+++ b/assets/css/custom.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../../_sass/_vars.scss","../../../node_modules/bootstrap/scss/_root.scss","../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../node_modules/bootstrap/scss/_reboot.scss","../../../node_modules/bootstrap/scss/_variables.scss","../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../node_modules/bootstrap/scss/_type.scss","../../../node_modules/bootstrap/scss/mixins/_lists.scss","../../../node_modules/bootstrap/scss/_images.scss","../../../node_modules/bootstrap/scss/mixins/_image.scss","../../../node_modules/bootstrap/scss/mixins/_box-shadow.scss","../../../node_modules/bootstrap/scss/_containers.scss","../../../node_modules/bootstrap/scss/mixins/_container.scss","../../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../../node_modules/bootstrap/scss/_grid.scss","../../../node_modules/bootstrap/scss/mixins/_grid.scss","../../../node_modules/bootstrap/scss/_tables.scss","../../../node_modules/bootstrap/scss/mixins/_table-variants.scss","../../../node_modules/bootstrap/scss/forms/_labels.scss","../../../node_modules/bootstrap/scss/forms/_form-text.scss","../../../node_modules/bootstrap/scss/forms/_form-control.scss","../../../node_modules/bootstrap/scss/mixins/_transition.scss","../../../node_modules/bootstrap/scss/mixins/_gradients.scss","../../../node_modules/bootstrap/scss/forms/_form-select.scss","../../../node_modules/bootstrap/scss/forms/_form-check.scss","../../../node_modules/bootstrap/scss/forms/_form-range.scss","../../../node_modules/bootstrap/scss/forms/_floating-labels.scss","../../../node_modules/bootstrap/scss/forms/_input-group.scss","../../../node_modules/bootstrap/scss/mixins/_forms.scss","../../../node_modules/bootstrap/scss/_buttons.scss","../../../node_modules/bootstrap/scss/mixins/_buttons.scss","../../../node_modules/bootstrap/scss/_transitions.scss","../../../node_modules/bootstrap/scss/_dropdown.scss","../../../node_modules/bootstrap/scss/mixins/_caret.scss","../../../node_modules/bootstrap/scss/_button-group.scss","../../../node_modules/bootstrap/scss/_nav.scss","../../../node_modules/bootstrap/scss/_navbar.scss","../../../node_modules/bootstrap/scss/_badge.scss","../../../node_modules/bootstrap/scss/_alert.scss","../../../node_modules/bootstrap/scss/_close.scss","../../../node_modules/bootstrap/scss/mixins/_clearfix.scss","../../../node_modules/bootstrap/scss/helpers/_color-bg.scss","../../../node_modules/bootstrap/scss/helpers/_colored-links.scss","../../../node_modules/bootstrap/scss/helpers/_focus-ring.scss","../../../node_modules/bootstrap/scss/helpers/_icon-link.scss","../../../node_modules/bootstrap/scss/helpers/_ratio.scss","../../../node_modules/bootstrap/scss/helpers/_position.scss","../../../node_modules/bootstrap/scss/helpers/_stacks.scss","../../../node_modules/bootstrap/scss/helpers/_visually-hidden.scss","../../../node_modules/bootstrap/scss/mixins/_visually-hidden.scss","../../../node_modules/bootstrap/scss/helpers/_stretched-link.scss","../../../node_modules/bootstrap/scss/helpers/_text-truncation.scss","../../../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../../../node_modules/bootstrap/scss/helpers/_vr.scss","../../../node_modules/bootstrap/scss/mixins/_utilities.scss","../../../node_modules/bootstrap/scss/utilities/_api.scss","../../_sass/_styles.scss","../../_sass/_hexdump.scss","../../_sass/_faq.scss","../../_sass/_toc.scss","../../_sass/_roadmap.scss","../../_sass/_learn.scss","../../_sass/dark_mode.scss"],"names":[],"mappings":"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,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,gBKvQN,WLgQM,iCK5PJ,YFynBkB,IExnBlB,YFwmB0B,IHzgB1B,0BKpGF,WLuQM,kBK/OR,eCvDE,eACA,gBD2DF,aC5DE,eACA,gBD8DF,kBACE,qBAEA,mCACE,aFsoB0B,ME5nB9B,YL8MM,UALI,QKvMR,yBAIF,YACE,cFiUO,KH1HH,UALI,QK/LR,wBACE,gBAIJ,mBACE,iBACA,cFuTO,KH1HH,UALI,QKtLR,MFtFS,QEwFT,2BACE,aEhGJ,WCIE,eAGA,YDDF,eACE,QJ6jDkC,OI5jDlC,iBJ6jDkC,kBI5jDlC,2DHGE,sCKLE,WARW,wBDKf,eAGA,YDcF,QAEE,qBAGF,YACE,oBACA,cAGF,gBPyPM,UALI,QOlPR,MJgjDkC,0BOllDlC,mGCHA,sBACA,iBACA,WACA,0CACA,yCACA,kBACA,iBCsDE,yBF5CE,yBACE,UPkee,OSvbnB,yBF5CE,uCACE,UPkee,OSvbnB,yBF5CE,qDACE,UPkee,OSvbnB,0BF5CE,mEACE,UPkee,QSvbnB,0BF5CE,kFACE,UPkee,QUlfvB,MAEI,2JAKF,KCNA,sBACA,iBACA,aACA,eAEA,uCACA,2CACA,0CDEE,OCOF,cACA,WACA,eACA,0CACA,yCACA,8BA+CI,KACE,YAGF,iBApCJ,cACA,WAcA,cACE,cACA,WAFF,cACE,cACA,UAFF,cACE,cACA,mBAFF,cACE,cACA,UAFF,cACE,cACA,UAFF,cACE,cACA,mBA+BE,UAhDJ,cACA,WAqDQ,OAhEN,cACA,kBA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,UA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,mBA+DM,OAhEN,cACA,UA+DM,OAhE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AEE,sBAPF,mBAEE,oBAGF,mBAEE,oBAPF,mBAEE,sBAGF,mBAEE,sBAPF,mBAEE,oBAGF,mBAEE,qBCrHV,OAEE,+BACA,4BACA,gCACA,6BAEA,2CACA,iCACA,gDACA,kCACA,mDACA,gEACA,kDACA,8DACA,iDACA,+DAEA,WACA,cZkYO,KYjYP,eZusB4B,IYtsB5B,0CAOA,yBACE,oBAEA,qFACA,oCACA,oBZ+sB0B,uBY9sB1B,2GAGF,aACE,uBAGF,aACE,sBAIJ,qBACE,6DAOF,aACE,iBAUA,4BACE,sBAeF,gCACE,sCAGA,kCACE,sCAOJ,oCACE,sBAGF,qCACE,mBAUF,2CACE,qDACA,+CAMF,yDACE,qDACA,+CAQJ,cACE,qDACA,+CAQA,8BACE,oDACA,8CC5IF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,iBAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,YAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,eAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,cAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,aAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CAlBF,YAOE,uBACA,uBACA,iCACA,+BACA,+BACA,8BACA,8BACA,6BACA,6BAEA,4BACA,0CDiJA,kBACE,gBACA,iCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,4BGyFA,qBACE,gBACA,kCH3FF,6BGyFA,qBACE,gBACA,kCH3FF,6BGyFA,sBACE,gBACA,kCEnKN,YACE,cdu2BsC,Mc91BxC,gBACE,oDACA,uDACA,gBjB8QI,UALI,QiBrQR,Yd+lB4B,Ic3lB9B,mBACE,kDACA,qDjBoQI,UALI,QiB3PV,mBACE,mDACA,sDjB8PI,UALI,SkBtRV,WACE,Wf+1BsC,OHrkBlC,UALI,QkBjRR,Mf+1BsC,0BgBp2BxC,cACE,cACA,WACA,uBnBwRI,UALI,KmBhRR,YhBkmB4B,IgBjmB5B,YhBymB4B,IgBxmB5B,MhB43BsC,qBgB33BtC,gBACA,iBhBq3BsC,kBgBp3BtC,4BACA,2DfGE,sCKLE,WARW,2BWUX,WDMJ,0DCFI,uCDhBN,cCiBQ,iBDGN,yBACE,gBAEA,wDACE,eAKJ,oBACE,MhBs2BoC,qBgBr2BpC,iBhBg2BoC,kBgB/1BpC,ahB82BoC,QgB72BpC,UVvBE,WARW,0DUwCf,2CAME,eAMA,aAKA,SAKF,qCACE,cACA,UAIF,2BACE,MhB40BoC,0BgB10BpC,UAQF,uBAEE,iBhB8yBoC,uBgB3yBpC,UAIF,oCACE,uBACA,0BACA,kBhBorB0B,OgBnrB1B,MhBsyBoC,qBkBp4BtC,iBlBqiCgC,sBgBr8B9B,oBACA,qBACA,mBACA,eACA,wBhBgsB0B,uBgB/rB1B,gBCzFE,WD0FF,mHCtFE,uCD0EJ,oCCzEM,iBDwFN,yEACE,iBhB47B8B,uBgBn7BlC,wBACE,cACA,WACA,kBACA,gBACA,YhBwf4B,IgBvf5B,MhB2xBsC,qBgB1xBtC,+BACA,2BACA,sCAEA,8BACE,UAGF,gFAEE,gBACA,eAWJ,iBACE,WhB4wBsC,wDgB3wBtC,qBnByII,UALI,SIvQN,yCeuIF,uCACE,qBACA,wBACA,kBhBooB0B,MgBhoB9B,iBACE,WhBgwBsC,sDgB/vBtC,mBnB4HI,UALI,QIvQN,yCeoJF,uCACE,mBACA,qBACA,kBhB2nB0B,KgBnnB5B,sBACE,WhB6uBoC,yDgB1uBtC,yBACE,WhB0uBoC,wDgBvuBtC,yBACE,WhBuuBoC,sDgBluBxC,oBACE,MhBquBsC,KgBpuBtC,OhB8tBsC,yDgB7tBtC,QhBilB4B,QgB/kB5B,mDACE,eAGF,uCACE,oBfvLA,sCe2LF,0CACE,oBf5LA,sCegMF,2ChB8sBsC,wDgB7sBtC,2ChB8sBsC,sDmB75BxC,aACE,yPAEA,cACA,WACA,uCtBqRI,UALI,KsB7QR,YnB+lB4B,ImB9lB5B,YnBsmB4B,ImBrmB5B,MnBy3BsC,qBmBx3BtC,gBACA,iBnBk3BsC,kBmBj3BtC,kFACA,4BACA,oBnB+9BkC,oBmB99BlC,gBnB+9BkC,UmB99BlC,2DlBHE,sCKLE,WARW,2BWUX,WESJ,0DFLI,uCEfN,aFgBQ,iBEMN,mBACE,anBs3BoC,QmBr3BpC,UbfE,WARW,0DagCf,0DAEE,cnB6uB0B,OmB5uB1B,sBAGF,sBAEE,iBnBu1BoC,uBmBl1BtC,4BACE,oBACA,uCAIJ,gBACE,YnBsuB4B,OmBruB5B,enBquB4B,OmBpuB5B,anBquB4B,MHlgBxB,UALI,SIvQN,yCkB8CJ,gBACE,YnBkuB4B,MmBjuB5B,enBiuB4B,MmBhuB5B,anBiuB4B,KHtgBxB,UALI,QIvQN,yCkBwDA,kCACE,yPCxEN,YACE,cACA,WpBq6BwC,OoBp6BxC,apBq6BwC,MoBp6BxC,cpBq6BwC,QoBn6BxC,8BACE,WACA,mBAIJ,oBACE,cpB25BwC,MoB15BxC,eACA,iBAEA,sCACE,YACA,oBACA,cAIJ,kBACE,sCAEA,cACA,MpB04BwC,IoBz4BxC,OpBy4BwC,IoBx4BxC,iBACA,mBACA,gBACA,yCACA,+CACA,4BACA,2BACA,wBACA,OpB24BwC,oDoB14BxC,yBAGA,iCnB3BE,oBmB+BF,8BAEE,cpBm4BsC,IoBh4BxC,yBACE,OpB03BsC,gBoBv3BxC,wBACE,apBs1BoC,QoBr1BpC,UACA,WpB8foB,+BoB3ftB,0BACE,iBzBlEY,QyBmEZ,azBnEY,QyBqEZ,yCAII,wPAIJ,sCAII,gKAKN,+CACE,iBzBvFY,QyBwFZ,azBxFY,QyB6FV,kPAIJ,2BACE,oBACA,YACA,QpBk2BuC,GoB31BvC,2FACE,eACA,QpBy1BqC,GoB30B3C,aACE,apBo1BgC,MoBl1BhC,+BACE,4KAEA,MpB80B8B,IoB70B9B,mBACA,0CACA,gCnBjHA,kBgBHE,WGsHF,qCHlHE,uCG0GJ,+BHzGM,iBGmHJ,qCACE,8JAGF,uCACE,oBpB60B4B,aoBx0B1B,2JAKN,gCACE,cpBwzB8B,MoBvzB9B,eAEA,kDACE,oBACA,cAKN,mBACE,qBACA,apBsyBgC,KoBnyBlC,WACE,kBACA,sBACA,oBAIE,mDACE,oBACA,YACA,QpBspBwB,IoB/oB1B,8EACE,kLCnLN,YACE,WACA,cACA,UACA,gBACA,+BAEA,kBACE,UAIA,mDrB8gCuC,8CqB7gCvC,+CrB6gCuC,8CqB1gCzC,8BACE,SAGF,kCACE,MrB+/BuC,KqB9/BvC,OrB8/BuC,KqB7/BvC,oBACA,gBH1BF,iBvBJc,Q0BgCZ,OrB6/BuC,EC1gCvC,mBKLE,WARW,8BWUX,WImBF,4FJfE,uCIMJ,kCJLM,iBIgBJ,yCHjCF,iBlB8hCyC,QqBx/BzC,2CACE,MrBw+B8B,KqBv+B9B,OrBw+B8B,MqBv+B9B,oBACA,OrBu+B8B,QqBt+B9B,iBrBu+B8B,uBqBt+B9B,2BpB7BA,mBKLE,WARW,2Be+Cf,8BACE,MrBo+BuC,KqBn+BvC,OrBm+BuC,KqBl+BvC,gBHpDF,iBvBJc,Q0B0DZ,OrBm+BuC,EC1gCvC,mBKLE,WARW,8BWUX,WI6CF,4FJzCE,uCIiCJ,8BJhCM,iBI0CJ,qCH3DF,iBlB8hCyC,QqB99BzC,8BACE,MrB88B8B,KqB78B9B,OrB88B8B,MqB78B9B,oBACA,OrB68B8B,QqB58B9B,iBrB68B8B,uBqB58B9B,2BpBvDA,mBKLE,WARW,2BeyEf,qBACE,oBAEA,2CACE,iBrBg9BqC,0BqB78BvC,uCACE,iBrB48BqC,0BsBniC3C,eACE,kBAEA,gGAGE,OtBwiCoC,gDsBviCpC,WtBuiCoC,gDsBtiCpC,YtBuiCoC,KsBpiCtC,qBACE,kBACA,MACA,OACA,UACA,YACA,oBACA,gBACA,iBACA,uBACA,mBACA,oBACA,kDACA,qBLRE,WKSF,kDLLE,uCKTJ,qBLUM,iBKON,oEAEE,oBAEA,8FACE,oBAGF,oMAEE,YtB4gCkC,SsB3gClC,etB4gCkC,QsBzgCpC,sGACE,YtBugCkC,SsBtgClC,etBugCkC,QsBngCtC,4BACE,YtBigCoC,SsBhgCpC,etBigCo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ACA,6DACA,8BACA,8BACA,wCDyFA,aCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,UCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,aCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,YCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,WCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,yCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDyFA,UCtGA,qBACA,qBACA,+BACA,2BACA,2BACA,qCACA,sCACA,4BACA,4BACA,sCACA,6DACA,8BACA,8BACA,wCDmHA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,qCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,uBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,sCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,kBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,wCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,qBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,oBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,uCACA,4BACA,4BACA,sCACA,6DACA,iCACA,kCACA,wCACA,oBD0FA,mBCvGA,wBACA,+BACA,2BACA,2BACA,qCACA,yCACA,4BACA,4BACA,sCACA,6DACA,iCACA,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UACA,sDAMJ,qBACE,qBACA,YACA,aACA,sBACA,kDACA,4BACA,2BACA,qBAGF,mBACE,yCACA,gBvB1HE,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,yBuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,0BuBsIA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,kDACA,iDAIJ,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,6BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,+CACE,aAGF,6CACE,aACA,YACA,UACA,oBvB5LR,0BuBsIA,mBAEI,iBACA,2BAEA,+BACE,mBAEA,8CACE,kBAGF,yCACE,kDACA,iDAIJ,sCACE,iBAGF,oCACE,wBACA,gBAGF,mCACE,aAGF,8BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,gDACE,aAGF,8CACE,aACA,YACA,UACA,oBAtDR,eAEI,iBACA,2BAEA,2BACE,mBAEA,0CACE,kBAGF,qCACE,kDACA,iDAIJ,kCACE,iBAGF,gCACE,wBACA,gBAGF,+BACE,aAGF,0BAEE,gBACA,aACA,YACA,sBACA,uBACA,8BACA,0CACA,oBACA,0B1BhOJ,WARW,KWUX,WegOI,KAGA,4CACE,aAGF,0CACE,aACA,YACA,UACA,mBAiBZ,yCAGE,6CACA,mDACA,sDACA,+BACA,8BACA,oCACA,2DACA,+QAME,0CACE,+QCxRN,OAEE,6BACA,6BpCuRI,qBALI,OoChRR,4BACA,uBACA,kDAGA,qBACA,4DpC+QI,UALI,0BoCxQR,wCACA,cACA,4BACA,kBACA,mBACA,wBhCJE,4CgCSF,aACE,aAKJ,YACE,kBACA,SChCF,OAEE,2BACA,2BACA,2BACA,+BACA,0BACA,qCACA,6EACA,kDACA,+BAGA,kBACA,4DACA,4CACA,4BACA,oCACA,8BjCHE,4CiCQJ,eAEE,cAIF,YACE,YlC6kB4B,IkC5kB5B,iCAQF,mBACE,clCo+C8B,KkCj+C9B,8BACE,kBACA,MACA,QACA,UACA,qBAQF,eACE,kDACA,2CACA,yDACA,uDAJF,iBACE,oDACA,6CACA,2DACA,yDAJF,eACE,kDACA,2CACA,yDACA,uDAJF,YACE,+CACA,wCACA,sDACA,oDAJF,eACE,kDACA,2CACA,yDACA,uDAJF,cACE,iDACA,0CACA,wDACA,sDAJF,aACE,gDACA,yCACA,uDACA,qDAJF,YACE,+CACA,wCACA,sDACA,oDC3DJ,WAEE,2BACA,qVACA,4BACA,mCACA,iEACA,gCACA,sCACA,wEAGA,uBACA,MnCmpD2B,ImClpD3B,OnCkpD2B,ImCjpD3B,oBACA,gCACA,0EACA,SlCJE,sBkCMF,oCAGA,iBACE,gCACA,qBACA,0CAGF,iBACE,UACA,4CACA,0CAGF,wCAEE,oBACA,iBACA,6CAQJ,iBAHE,wCASE,gCATF,wCC/CA,iBACE,cACA,WACA,WCHF,iBACE,sBACA,iFAFF,mBACE,sBACA,mFAFF,iBACE,sBACA,iFAFF,cACE,sBACA,8EAFF,iBACE,sBACA,iFAFF,gBACE,sBACA,gFAFF,eACE,sBACA,+EAFF,cACE,sBACA,8ECFF,cACE,wEACA,kGAGE,wCAGE,4DACA,sFATN,gBACE,0EACA,oGAGE,4CAGE,6DACA,uFATN,cACE,wEACA,kGAGE,wCAGE,8DACA,wFATN,WACE,qEACA,+FAGE,kCAGE,+DACA,yFATN,cACE,wEACA,kGAGE,wCAGE,+DACA,yFATN,aACE,uEACA,iGAGE,sCAGE,8DACA,wFATN,YACE,sEACA,gGAGE,oCAGE,gEACA,0FATN,WACE,qEACA,+FAGE,kCAGE,6DACA,uFAOR,oBACE,+EACA,yGAGE,oDAEE,kFACA,4GC1BN,kBACE,UAEA,kJCHF,WACE,oBACA,IxC6c4B,QwC5c5B,mBACA,kFACA,sBxC2c4B,MwC1c5B,2BAEA,eACE,cACA,MxCuc0B,IwCtc1B,OxCsc0B,IwCrc1B,kBvBIE,WuBHF,0BvBOE,uCuBZJ,evBaM,iBuBDJ,8DACE,mECnBN,OACE,kBACA,WAEA,eACE,cACA,mCACA,WAGF,SACE,kBACA,MACA,OACA,WACA,YAKF,WACE,wBADF,WACE,uBADF,YACE,0BADF,YACE,kCCrBJ,WACE,eACA,MACA,QACA,OACA,Q1CumCkC,K0CpmCpC,cACE,eACA,QACA,SACA,OACA,Q1C+lCkC,K0CvlChC,YACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,eACE,gBACA,SACA,Q1C6kC8B,KS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,yBiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,0BiCxCA,eACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,kBACE,gBACA,SACA,Q1C6kC8B,MS9iChC,0BiCxCA,gBACE,gBACA,MACA,Q1CmlC8B,K0ChlChC,mBACE,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aAGF,UACE,iBAEA,gDAEE,wBACA,qBAKF,sBACE,mBAKF,sBACE,oBACA,WAGF,oBACE,iBACA,iBAKF,cACE,iBAIJ,UACE,gBC3VF,SACE,sBACA,eACA,oBAGF,iBACE,+BACA,WAEF,gBACE,c1DRF,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD2D7DA,iBACE,gBACA,iBACA,0CAGF,OACE,qBAGF,YACE,iBAEA,iBACE,gBACA,oBAIJ,gBACE,iBACA,oBAGF,gBACE,iB3DzBJ,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD4D5DA,iBAEE,wBAGF,kBACE,qBACA,gBACA,+BAGF,gDAEE,iCAGF,iBACE,uBACA,mBACA,oBAGF,uEAGE,iCC1BJ,UACE,kBAGA,iBACE,WACA,kBACA,UACA,iBAXS,QAYT,MACA,SACA,SACA,iBAKJ,eACE,kBACA,UAEA,qBACE,kCACA,kBACA,sBACA,cAEA,uBACE,cAGF,iCACE,yBAIJ,2BACE,oBACA,iBACA,gBAIF,sBACE,iBACA,eACA,kBACA,kBACA,WACA,YACA,YACA,SACA,kBACA,UAGF,gCACE,YACA,sBACA,yBAGF,8BACE,aACA,sBACA,yBAGF,+BACE,YACA,sBACA,yBAIF,oBACE,0BACA,OAIF,qBACE,0BACA,SAIF,4BACE,WACA,kBACA,YACA,WACA,sBACA,sBACA,wCACA,SACA,UACA,WACA,wCACA,sCAIF,6BACE,WACA,kBACA,YACA,WACA,iCACA,sBACA,wCACA,SACA,UACA,UACA,uCACA,yCAIF,4BACE,WAKJ,qCAGE,iBACE,UAIF,eACE,WACA,6BACA,8BAGA,uBACE,qBAIF,uDAEE,oBAGF,4BACE,kBACA,gBACA,uCACA,yCAGF,6BACE,WAIF,qBACE,S7DlKN,MAEE,+BACA,iCAEA,0BACA,kCACA,iCAEA,4BACA,oCACA,kCAEA,4BACA,kCAGA,8BACA,gCAEA,yBACA,iCACA,gCAEA,2BACA,mCACA,iCAEA,2BACA,iCAGF,sBACE,4CACA,gDACA,gDAEA,kCACA,kDACA,sCAEA,sDACA,kDAEA,sCACA,kDAGF,qBACE,2CACA,+CAEA,iCACA,iDACA,+CAEA,qCACA,qDACA,iDAEA,qCACA,iD8D7DA,qBACE,0CCHF,gCACE,mBAKA,+CACE,yBAIJ,+BACE","sourcesContent":["$primary-color: #021a34;\n$secondary-color: #075f94;\n\n:root {\n // -- Light\n --primary-color-light: #021a34;\n --secondary-color-light: #075f94;\n\n --bg-color-light: #edeef0;\n --bg-color-reverse-light: #021a34;\n --bg-color-tinted-light: #b0b2b4;\n\n --text-color-light: #4c4c4c;\n --text-color-reverse-light: #edeef0;\n --text-muted-color-light: #4c4c4c;\n\n --link-color-light: #4c4c4c;\n --link-hover-color-light: #6c6c6c;\n\n // -- Dark\n --primary-color-dark: #edeef0;\n --secondary-color-dark: #075f94;\n\n --bg-color-dark: #14171c;\n --bg-color-reverse-dark: #edeef0;\n --bg-color-tinted-dark: #627191;\n\n --text-color-dark: #edeef0;\n --text-color-reverse-dark: #14171c;\n --text-muted-color-dark: #edeef0;\n\n --link-color-dark: #edeef0;\n --link-hover-color-dark: #ffffff;\n}\n\n[data-bs-theme=\"light\"] {\n --primary-color: var(--primary-color-light);\n --secondary-color: var(--secondary-color-light);\n --bg-color-tinted: var(--bg-color-tinted-light);\n\n --bg-color: var(--bg-color-light);\n --bg-color-reverse: var(--bg-color-reverse-light);\n --text-color: var(--text-color-light);\n\n --text-color-reverse: var(--text-color-reverse-light);\n --text-muted-color: var(--text-muted-color-light);\n\n --link-color: var(--link-color-light);\n --link-hover-color: var(--link-hover-color-light);\n}\n\n[data-bs-theme=\"dark\"] {\n --primary-color: var(--primary-color-dark);\n --secondary-color: var(--secondary-color-dark);\n\n --bg-color: var(--bg-color-dark);\n --bg-color-reverse: var(--bg-color-reverse-dark);\n --bg-color-tinted: var(--bg-color-tinted-dark);\n\n --text-color: var(--text-color-dark);\n --text-color-reverse: var(--text-color-reverse-dark);\n --text-muted-color: var(--text-muted-color-dark);\n\n --link-color: var(--link-color-dark);\n --link-hover-color: var(--link-hover-color-dark);\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n\n --#{$prefix}body-color: #{$body-color};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n // scss-docs-end root-body-variables\n\n --#{$prefix}heading-color: #{$headings-color};\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-color: #{$mark-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n // Focus styles\n // scss-docs-start root-focus-variables\n --#{$prefix}focus-ring-width: #{$focus-ring-width};\n --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n --#{$prefix}focus-ring-color: #{$focus-ring-color};\n // scss-docs-end root-focus-variables\n\n // scss-docs-start root-form-validation-variables\n --#{$prefix}form-valid-color: #{$form-valid-color};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n --#{$prefix}form-invalid-color: #{$form-invalid-color};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n color-scheme: dark;\n\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n @each $color, $value in $theme-colors-text-dark {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle-dark {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle-dark {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n --#{$prefix}highlight-color: #{$mark-color-dark};\n --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query () {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query () {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + \" \" + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n } @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + \" \" + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n } @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + \" \" + $value;\n } @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + \" calc(\" + $min-width + if($value < 0, \" - \", \" + \") + $variable-width + \")\";\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluid-val: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluid-val {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule () {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule () {\n #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, ``-`` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on ` `s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `
` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. ``s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n// 2. Correct the outline style in Safari.\n\n[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n outline-offset: -2px; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// scss-docs-start theme-text-variables\n$primary-text-emphasis: shade-color($primary, 60%) !default;\n$secondary-text-emphasis: shade-color($secondary, 60%) !default;\n$success-text-emphasis: shade-color($success, 60%) !default;\n$info-text-emphasis: shade-color($info, 60%) !default;\n$warning-text-emphasis: shade-color($warning, 60%) !default;\n$danger-text-emphasis: shade-color($danger, 60%) !default;\n$light-text-emphasis: $gray-700 !default;\n$dark-text-emphasis: $gray-700 !default;\n// scss-docs-end theme-text-variables\n\n// scss-docs-start theme-bg-subtle-variables\n$primary-bg-subtle: tint-color($primary, 80%) !default;\n$secondary-bg-subtle: tint-color($secondary, 80%) !default;\n$success-bg-subtle: tint-color($success, 80%) !default;\n$info-bg-subtle: tint-color($info, 80%) !default;\n$warning-bg-subtle: tint-color($warning, 80%) !default;\n$danger-bg-subtle: tint-color($danger, 80%) !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n// scss-docs-end theme-bg-subtle-variables\n\n// scss-docs-start theme-border-subtle-variables\n$primary-border-subtle: tint-color($primary, 60%) !default;\n$secondary-border-subtle: tint-color($secondary, 60%) !default;\n$success-border-subtle: tint-color($success, 60%) !default;\n$info-border-subtle: tint-color($info, 60%) !default;\n$warning-border-subtle: tint-color($warning, 60%) !default;\n$danger-border-subtle: tint-color($danger, 60%) !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n// scss-docs-end theme-border-subtle-variables\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `` element.\n\n$body-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-secondary-color: rgba($body-color, .75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, .5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$body-emphasis-color: $black !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Icon links\n// scss-docs-start icon-link-variables\n$icon-link-gap: .375rem !default;\n$icon-link-underline-offset: .25em !default;\n$icon-link-icon-size: 1em !default;\n$icon-link-icon-transition: .2s ease-in-out transform !default;\n$icon-link-icon-transform: translate3d(.25em, 0, 0) !default;\n// scss-docs-end icon-link-variables\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-xxl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n// fusv-disable\n$border-radius-2xl: $border-radius-xxl !default; // Deprecated in v5.3.0\n// fusv-enable\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start focus-ring-variables\n$focus-ring-width: .25rem !default;\n$focus-ring-opacity: .25 !default;\n$focus-ring-color: rgba($primary, $focus-ring-opacity) !default;\n$focus-ring-blur: 0 !default;\n$focus-ring-box-shadow: 0 0 $focus-ring-blur $focus-ring-width $focus-ring-color !default;\n// scss-docs-end focus-ring-variables\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-medium: 500 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n// fusv-disable\n$text-muted: var(--#{$prefix}secondary-color) !default; // Deprecated in 5.3.0\n// fusv-enable\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: .25 !default;\n\n// scss-docs-start vr-variables\n$vr-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end vr-variables\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-color: $body-color !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}emphasis-color) !default;\n$table-bg: var(--#{$prefix}body-bg) !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-hover-bg-factor) !default;\n\n$table-border-factor: .2 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: var(--#{$prefix}secondary-color) !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: $focus-ring-width !default;\n$input-btn-focus-color-opacity: $focus-ring-opacity !default;\n$input-btn-focus-color: $focus-ring-color !default;\n$input-btn-focus-blur: $focus-ring-blur !default;\n$input-btn-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-color: var(--#{$prefix}body-color) !default;\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n$btn-link-focus-shadow-rgb: to-rgb(mix(color-contrast($link-color), $link-color, 15%)) !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: var(--#{$prefix}border-radius) !default;\n$btn-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$btn-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: var(--#{$prefix}body-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$input-border-radius: var(--#{$prefix}border-radius) !default;\n$input-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$input-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc(#{$input-border-width} * 2) !default; // stylelint-disable-line function-disallowed-list\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,
\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,
\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,
\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,
\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,
\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,
\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $input-disabled-bg !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,
\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: var(--#{$prefix}secondary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-height: 1.5em !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,
\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,
\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-colors\n$form-valid-color: $form-feedback-valid-color !default;\n$form-valid-border-color: $form-feedback-valid-color !default;\n$form-invalid-color: $form-feedback-invalid-color !default;\n$form-invalid-border-color: $form-feedback-invalid-color !default;\n// scss-docs-end form-validation-colors\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": var(--#{$prefix}form-valid-color),\n \"icon\": $form-feedback-icon-valid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}success),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}form-valid-border-color),\n ),\n \"invalid\": (\n \"color\": var(--#{$prefix}form-invalid-color),\n \"icon\": $form-feedback-icon-invalid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}danger),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}form-invalid-border-color),\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n n1: -1,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3\n) !default;\n// scss-docs-end zindex-levels-map\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default;\n$nav-link-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-underline-gap: 1rem !default;\n$nav-underline-border-width: .125rem !default;\n$nav-underline-link-active-color: var(--#{$prefix}emphasis-color) !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;\n$navbar-light-icon-color: rgba($body-color, .75) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,
\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-icon-color: $navbar-dark-color !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,
\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: var(--#{$prefix}border-radius) !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: var(--#{$prefix}box-shadow) !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: var(--#{$prefix}tertiary-color) !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc(#{$pagination-border-width} * -1) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $focus-ring-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$pagination-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}border-radius) !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: var(--#{$prefix}body-color) !default;\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}border-radius) !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text-emphasis) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text-emphasis !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,
\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,
\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}border-radius) !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc(#{$popover-border-radius} - #{$popover-border-width}) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: var(--#{$prefix}box-shadow) !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: var(--#{$prefix}body-color) !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-header-border-color: $toast-border-color !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: var(--#{$prefix}border-radius) !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: var(--#{$prefix}box-shadow-sm) !default;\n$modal-content-box-shadow-sm-up: var(--#{$prefix}box-shadow) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: var(--#{$prefix}border-radius) !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,
\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,
\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,
\") !default;\n$btn-close-focus-shadow: $focus-ring-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-color) !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","//\n// Headings\n//\n.h1 {\n @extend h1;\n}\n\n.h2 {\n @extend h2;\n}\n\n.h3 {\n @extend h3;\n}\n\n.h4 {\n @extend h4;\n}\n\n.h5 {\n @extend h5;\n}\n\n.h6 {\n @extend h6;\n}\n\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n .display-#{$display} {\n @include font-size($font-size);\n font-family: $display-font-family;\n font-style: $display-font-style;\n font-weight: $display-font-weight;\n line-height: $display-line-height;\n }\n}\n\n//\n// Emphasis\n//\n.small {\n @extend small;\n}\n\n.mark {\n @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size($initialism-font-size);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-font-size);\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n.blockquote-footer {\n margin-top: -$blockquote-margin-y;\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-footer-font-size);\n color: $blockquote-footer-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `
`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer * .5;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n","@mixin box-shadow($shadow...) {\n @if $enable-shadows {\n $result: ();\n\n @each $value in $shadow {\n @if $value != null {\n $result: append($result, $value, \"comma\");\n }\n @if $value == none and length($shadow) > 1 {\n @warn \"The keyword 'none' must be used as a single argument.\";\n }\n }\n\n @if (length($result) > 0) {\n box-shadow: $result;\n }\n }\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n:root {\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: percentage(divide(1, $count));\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n // Reset needed for nesting tables\n --#{$prefix}table-color-type: initial;\n --#{$prefix}table-bg-type: initial;\n --#{$prefix}table-color-state: initial;\n --#{$prefix}table-bg-state: initial;\n // End of reset\n --#{$prefix}table-color: #{$table-color};\n --#{$prefix}table-bg: #{$table-bg};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-accent-bg: #{$table-accent-bg};\n --#{$prefix}table-striped-color: #{$table-striped-color};\n --#{$prefix}table-striped-bg: #{$table-striped-bg};\n --#{$prefix}table-active-color: #{$table-active-color};\n --#{$prefix}table-active-bg: #{$table-active-bg};\n --#{$prefix}table-hover-color: #{$table-hover-color};\n --#{$prefix}table-hover-bg: #{$table-hover-bg};\n\n width: 100%;\n margin-bottom: $spacer;\n vertical-align: $table-cell-vertical-align;\n border-color: var(--#{$prefix}table-border-color);\n\n // Target th & td\n // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y $table-cell-padding-x;\n // Following the precept of cascades: https://codepen.io/miriamsuzanne/full/vYNgodb\n color: var(--#{$prefix}table-color-state, var(--#{$prefix}table-color-type, var(--#{$prefix}table-color)));\n background-color: var(--#{$prefix}table-bg);\n border-bottom-width: $table-border-width;\n box-shadow: inset 0 0 0 9999px var(--#{$prefix}table-bg-state, var(--#{$prefix}table-bg-type, var(--#{$prefix}table-accent-bg)));\n }\n\n > tbody {\n vertical-align: inherit;\n }\n\n > thead {\n vertical-align: bottom;\n }\n}\n\n.table-group-divider {\n border-top: calc(#{$table-border-width} * 2) solid $table-group-separator-color; // stylelint-disable-line function-disallowed-list\n}\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n caption-side: top;\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefor we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n > :not(caption) > * {\n border-width: $table-border-width 0;\n\n // stylelint-disable-next-line selector-max-universal\n > * {\n border-width: 0 $table-border-width;\n }\n }\n}\n\n.table-borderless {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n border-bottom-width: 0;\n }\n\n > :not(:first-child) {\n border-top-width: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n// For rows\n.table-striped {\n > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n --#{$prefix}table-color-type: var(--#{$prefix}table-striped-color);\n --#{$prefix}table-bg-type: var(--#{$prefix}table-striped-bg);\n }\n}\n\n// For columns\n.table-striped-columns {\n > :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {\n --#{$prefix}table-color-type: var(--#{$prefix}table-striped-color);\n --#{$prefix}table-bg-type: var(--#{$prefix}table-striped-bg);\n }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n --#{$prefix}table-color-state: var(--#{$prefix}table-active-color);\n --#{$prefix}table-bg-state: var(--#{$prefix}table-active-bg);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover > * {\n --#{$prefix}table-color-state: var(--#{$prefix}table-hover-color);\n --#{$prefix}table-bg-state: var(--#{$prefix}table-hover-bg);\n }\n}\n\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @include media-breakpoint-down($breakpoint) {\n .table-responsive#{$infix} {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n }\n}\n","// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n .table-#{$state} {\n $color: color-contrast(opaque($body-bg, $background));\n $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n $table-border-color: mix($color, $background, percentage($table-border-factor));\n\n --#{$prefix}table-color: #{$color};\n --#{$prefix}table-bg: #{$background};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-striped-bg: #{$striped-bg};\n --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};\n --#{$prefix}table-active-bg: #{$active-bg};\n --#{$prefix}table-active-color: #{color-contrast($active-bg)};\n --#{$prefix}table-hover-bg: #{$hover-bg};\n --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n color: var(--#{$prefix}table-color);\n border-color: var(--#{$prefix}table-border-color);\n }\n}\n// scss-docs-end table-variant\n","//\n// Labels\n//\n\n.form-label {\n margin-bottom: $form-label-margin-bottom;\n @include font-size($form-label-font-size);\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `
` default\n @include font-size(inherit); // Override the `` default\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n line-height: $input-line-height;\n color: $form-label-color;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n}\n","//\n// Form text\n//\n\n.form-text {\n margin-top: $form-text-margin-top;\n @include font-size($form-text-font-size);\n font-style: $form-text-font-style;\n font-weight: $form-text-font-weight;\n color: $form-text-color;\n}\n","//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n appearance: none; // Fix appearance for date inputs in Safari\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on s in some browsers, due to the limited stylability of ``s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n &[type=\"file\"] {\n overflow: hidden; // prevent pseudo element button overlap\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n\n &::-webkit-date-and-time-value {\n // On Android Chrome, form-control's \"width: 100%\" makes the input width too small\n // Tested under Android 11 / Chrome 89, Android 12 / Chrome 100, Android 13 / Chrome 109\n //\n // On iOS Safari, form-control's \"appearance: none\" + \"width: 100%\" makes the input width too small\n // Tested under iOS 16.2 / Safari 16.2\n min-width: 85px; // Seems to be a good minimum safe width\n\n // Add some height to date inputs on iOS\n // https://github.com/twbs/bootstrap/issues/23307\n // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n // Multiply line-height by 1em if it has no unit\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n\n // Android Chrome type=\"date\" is taller than the other inputs\n // because of \"margin: 1px 24px 1px 4px\" inside the shadow DOM\n // Tested under Android 11 / Chrome 89, Android 12 / Chrome 100, Android 13 / Chrome 109\n margin: 0;\n }\n\n // Prevent excessive date input height in Webkit\n // https://github.com/twbs/bootstrap/issues/34433\n &::-webkit-datetime-edit {\n display: block;\n padding: 0;\n }\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled {\n color: $input-disabled-color;\n background-color: $input-disabled-bg;\n border-color: $input-disabled-border-color;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n\n // File input buttons theming\n &::file-selector-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: $form-file-button-hover-bg;\n }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &:focus {\n outline: 0;\n }\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n min-height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n\n &::file-selector-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n}\n\n.form-control-lg {\n min-height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n\n &::file-selector-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n}\n\n// Make sure textareas don't shrink too much when resized\n// https://github.com/twbs/bootstrap/pull/29124\n// stylelint-disable selector-no-qualifying-type\ntextarea {\n &.form-control {\n min-height: $input-height;\n }\n\n &.form-control-sm {\n min-height: $input-height-sm;\n }\n\n &.form-control-lg {\n min-height: $input-height-lg;\n }\n}\n// stylelint-enable selector-no-qualifying-type\n\n.form-control-color {\n width: $form-color-width;\n height: $input-height;\n padding: $input-padding-y;\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n\n &::-moz-color-swatch {\n border: 0 !important; // stylelint-disable-line declaration-no-important\n @include border-radius($input-border-radius);\n }\n\n &::-webkit-color-swatch {\n border: 0 !important; // stylelint-disable-line declaration-no-important\n @include border-radius($input-border-radius);\n }\n\n &.form-control-sm { height: $input-height-sm; }\n &.form-control-lg { height: $input-height-lg; }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n background-color: $color;\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n// scss-docs-end gradient-mixins\n","// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator)};\n\n display: block;\n width: 100%;\n padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;\n font-family: $form-select-font-family;\n @include font-size($form-select-font-size);\n font-weight: $form-select-font-weight;\n line-height: $form-select-line-height;\n color: $form-select-color;\n appearance: none;\n background-color: $form-select-bg;\n background-image: var(--#{$prefix}form-select-bg-img), var(--#{$prefix}form-select-bg-icon, none);\n background-repeat: no-repeat;\n background-position: $form-select-bg-position;\n background-size: $form-select-bg-size;\n border: $form-select-border-width solid $form-select-border-color;\n @include border-radius($form-select-border-radius, 0);\n @include box-shadow($form-select-box-shadow);\n @include transition($form-select-transition);\n\n &:focus {\n border-color: $form-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $form-select-focus-box-shadow;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n padding-right: $form-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $form-select-disabled-color;\n background-color: $form-select-disabled-bg;\n border-color: $form-select-disabled-border-color;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $form-select-color;\n }\n}\n\n.form-select-sm {\n padding-top: $form-select-padding-y-sm;\n padding-bottom: $form-select-padding-y-sm;\n padding-left: $form-select-padding-x-sm;\n @include font-size($form-select-font-size-sm);\n @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: $form-select-padding-y-lg;\n padding-bottom: $form-select-padding-y-lg;\n padding-left: $form-select-padding-x-lg;\n @include font-size($form-select-font-size-lg);\n @include border-radius($form-select-border-radius-lg);\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .form-select {\n --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator-dark)};\n }\n }\n}\n","//\n// Check/radio\n//\n\n.form-check {\n display: block;\n min-height: $form-check-min-height;\n padding-left: $form-check-padding-start;\n margin-bottom: $form-check-margin-bottom;\n\n .form-check-input {\n float: left;\n margin-left: $form-check-padding-start * -1;\n }\n}\n\n.form-check-reverse {\n padding-right: $form-check-padding-start;\n padding-left: 0;\n text-align: right;\n\n .form-check-input {\n float: right;\n margin-right: $form-check-padding-start * -1;\n margin-left: 0;\n }\n}\n\n.form-check-input {\n --#{$prefix}form-check-bg: #{$form-check-input-bg};\n\n flex-shrink: 0;\n width: $form-check-input-width;\n height: $form-check-input-width;\n margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height\n vertical-align: top;\n appearance: none;\n background-color: var(--#{$prefix}form-check-bg);\n background-image: var(--#{$prefix}form-check-bg-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: $form-check-input-border;\n print-color-adjust: exact; // Keep themed appearance for print\n @include transition($form-check-transition);\n\n &[type=\"checkbox\"] {\n @include border-radius($form-check-input-border-radius);\n }\n\n &[type=\"radio\"] {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $form-check-radio-border-radius;\n }\n\n &:active {\n filter: $form-check-input-active-filter;\n }\n\n &:focus {\n border-color: $form-check-input-focus-border;\n outline: 0;\n box-shadow: $form-check-input-focus-box-shadow;\n }\n\n &:checked {\n background-color: $form-check-input-checked-bg-color;\n border-color: $form-check-input-checked-border-color;\n\n &[type=\"checkbox\"] {\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)};\n }\n }\n\n &[type=\"radio\"] {\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)};\n }\n }\n }\n\n &[type=\"checkbox\"]:indeterminate {\n background-color: $form-check-input-indeterminate-bg-color;\n border-color: $form-check-input-indeterminate-border-color;\n\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)};\n }\n }\n\n &:disabled {\n pointer-events: none;\n filter: none;\n opacity: $form-check-input-disabled-opacity;\n }\n\n // Use disabled attribute in addition of :disabled pseudo-class\n // See: https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .form-check-label {\n cursor: default;\n opacity: $form-check-label-disabled-opacity;\n }\n }\n}\n\n.form-check-label {\n color: $form-check-label-color;\n cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n padding-left: $form-switch-padding-start;\n\n .form-check-input {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image)};\n\n width: $form-switch-width;\n margin-left: $form-switch-padding-start * -1;\n background-image: var(--#{$prefix}form-switch-bg);\n background-position: left center;\n @include border-radius($form-switch-border-radius);\n @include transition($form-switch-transition);\n\n &:focus {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-focus-bg-image)};\n }\n\n &:checked {\n background-position: $form-switch-checked-bg-position;\n\n @if $enable-gradients {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)};\n }\n }\n }\n\n &.form-check-reverse {\n padding-right: $form-switch-padding-start;\n padding-left: 0;\n\n .form-check-input {\n margin-right: $form-switch-padding-start * -1;\n margin-left: 0;\n }\n }\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n\n &[disabled],\n &:disabled {\n + .btn {\n pointer-events: none;\n filter: none;\n opacity: $form-check-btn-check-disabled-opacity;\n }\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .form-switch .form-check-input:not(:checked):not(:focus) {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image-dark)};\n }\n }\n}\n","// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n width: 100%;\n height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n appearance: none;\n background-color: transparent;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific\n appearance: none;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent; // Why?\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent;\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n appearance: none;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent;\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &:disabled {\n pointer-events: none;\n\n &::-webkit-slider-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n\n &::-moz-range-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n }\n}\n",".form-floating {\n position: relative;\n\n > .form-control,\n > .form-control-plaintext,\n > .form-select {\n height: $form-floating-height;\n min-height: $form-floating-height;\n line-height: $form-floating-line-height;\n }\n\n > label {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2;\n height: 100%; // allow textareas\n padding: $form-floating-padding-y $form-floating-padding-x;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n transform-origin: 0 0;\n @include transition($form-floating-transition);\n }\n\n > .form-control,\n > .form-control-plaintext {\n padding: $form-floating-padding-y $form-floating-padding-x;\n\n &::placeholder {\n color: transparent;\n }\n\n &:focus,\n &:not(:placeholder-shown) {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n &:-webkit-autofill {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n }\n\n > .form-select {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n\n > .form-control:focus,\n > .form-control:not(:placeholder-shown),\n > .form-control-plaintext,\n > .form-select {\n ~ label {\n color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity});\n transform: $form-floating-label-transform;\n\n &::after {\n position: absolute;\n inset: $form-floating-padding-y ($form-floating-padding-x * .5);\n z-index: -1;\n height: $form-floating-label-height;\n content: \"\";\n background-color: $input-bg;\n @include border-radius($input-border-radius);\n }\n }\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n > .form-control:-webkit-autofill {\n ~ label {\n color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity});\n transform: $form-floating-label-transform;\n }\n }\n\n > .form-control-plaintext {\n ~ label {\n border-width: $input-border-width 0; // Required to properly position label text - as explained above\n }\n }\n\n > :disabled ~ label,\n > .form-control:disabled ~ label { // Required for `.form-control`s because of specificity\n color: $form-floating-label-disabled-color;\n\n &::after {\n background-color: $input-disabled-bg;\n }\n }\n}\n","//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-select,\n > .form-floating {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .form-select:focus,\n > .form-floating:focus-within {\n z-index: 5;\n }\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 5;\n }\n }\n}\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n @include font-size($input-font-size); // Match inputs\n font-weight: $input-group-addon-font-weight;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n &:not(.has-validation) {\n > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 3),\n > .form-floating:not(:last-child) > .form-control,\n > .form-floating:not(:last-child) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n &.has-validation {\n > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 4),\n > .form-floating:nth-last-child(n + 3) > .form-control,\n > .form-floating:nth-last-child(n + 3) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n $validation-messages: \"\";\n @each $state in map-keys($form-validation-states) {\n $validation-messages: $validation-messages + \":not(.\" + unquote($state) + \"-tooltip)\" + \":not(.\" + unquote($state) + \"-feedback)\";\n }\n\n > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n margin-left: calc(#{$input-border-width} * -1); // stylelint-disable-line function-disallowed-list\n @include border-start-radius(0);\n }\n\n > .form-floating:not(:first-child) > .form-control,\n > .form-floating:not(:first-child) > .form-select {\n @include border-start-radius(0);\n }\n}\n","// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state(\n $state,\n $color,\n $icon,\n $tooltip-color: color-contrast($color),\n $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity),\n $border-color: $color\n) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n font-style: $form-feedback-font-style;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: $tooltip-color;\n background-color: $tooltip-bg-color;\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $border-color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .form-select {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n @if $enable-validation-icons {\n &:not([multiple]):not([size]),\n &:not([multiple])[size=\"1\"] {\n --#{$prefix}form-select-bg-icon: #{escape-svg($icon)};\n padding-right: $form-select-feedback-icon-padding-end;\n background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n }\n }\n\n &:focus {\n border-color: $border-color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n .form-control-color {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n width: add($form-color-width, $input-height-inner);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n &:checked {\n background-color: $color;\n }\n\n &:focus {\n box-shadow: $focus-box-shadow;\n }\n\n ~ .form-check-label {\n color: $color;\n }\n }\n }\n .form-check-inline .form-check-input {\n ~ .#{$state}-feedback {\n margin-left: .5em;\n }\n }\n\n .input-group {\n > .form-control:not(:focus),\n > .form-select:not(:focus),\n > .form-floating:not(:focus-within) {\n @include form-validation-state-selector($state) {\n @if $state == \"valid\" {\n z-index: 3;\n } @else if $state == \"invalid\" {\n z-index: 4;\n }\n }\n }\n }\n}\n// scss-docs-end form-validation-mixins\n","//\n// Base styles\n//\n\n.btn {\n // scss-docs-start btn-css-vars\n --#{$prefix}btn-padding-x: #{$btn-padding-x};\n --#{$prefix}btn-padding-y: #{$btn-padding-y};\n --#{$prefix}btn-font-family: #{$btn-font-family};\n @include rfs($btn-font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-font-weight: #{$btn-font-weight};\n --#{$prefix}btn-line-height: #{$btn-line-height};\n --#{$prefix}btn-color: #{$btn-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-width: #{$btn-border-width};\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-border-radius: #{$btn-border-radius};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};\n --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5);\n // scss-docs-end btn-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x);\n font-family: var(--#{$prefix}btn-font-family);\n @include font-size(var(--#{$prefix}btn-font-size));\n font-weight: var(--#{$prefix}btn-font-weight);\n line-height: var(--#{$prefix}btn-line-height);\n color: var(--#{$prefix}btn-color);\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n cursor: if($enable-button-pointers, pointer, null);\n user-select: none;\n border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color);\n @include border-radius(var(--#{$prefix}btn-border-radius));\n @include gradient-bg(var(--#{$prefix}btn-bg));\n @include box-shadow(var(--#{$prefix}btn-box-shadow));\n @include transition($btn-transition);\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}btn-hover-bg);\n border-color: var(--#{$prefix}btn-hover-border-color);\n }\n\n .btn-check + &:hover {\n // override for the checkbox/radio buttons\n color: var(--#{$prefix}btn-color);\n background-color: var(--#{$prefix}btn-bg);\n border-color: var(--#{$prefix}btn-border-color);\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-hover-color);\n @include gradient-bg(var(--#{$prefix}btn-hover-bg));\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:focus-visible + & {\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:checked + &,\n :not(.btn-check) + &:active,\n &:first-child:active,\n &.active,\n &.show {\n color: var(--#{$prefix}btn-active-color);\n background-color: var(--#{$prefix}btn-active-bg);\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-active-border-color);\n @include box-shadow(var(--#{$prefix}btn-active-shadow));\n\n &:focus-visible {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n }\n\n &:disabled,\n &.disabled,\n fieldset:disabled & {\n color: var(--#{$prefix}btn-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}btn-disabled-bg);\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-disabled-border-color);\n opacity: var(--#{$prefix}btn-disabled-opacity);\n @include box-shadow(none);\n }\n}\n\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @if $color == \"light\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: shade-color($value, $btn-hover-bg-shade-amount),\n $hover-border: shade-color($value, $btn-hover-border-shade-amount),\n $active-background: shade-color($value, $btn-active-bg-shade-amount),\n $active-border: shade-color($value, $btn-active-border-shade-amount)\n );\n } @else if $color == \"dark\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: tint-color($value, $btn-hover-bg-tint-amount),\n $hover-border: tint-color($value, $btn-hover-border-tint-amount),\n $active-background: tint-color($value, $btn-active-bg-tint-amount),\n $active-border: tint-color($value, $btn-active-border-tint-amount)\n );\n } @else {\n @include button-variant($value, $value);\n }\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n// scss-docs-end btn-variant-loops\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n --#{$prefix}btn-font-weight: #{$font-weight-normal};\n --#{$prefix}btn-color: #{$btn-link-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-hover-color: #{$btn-link-hover-color};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-active-color: #{$btn-link-hover-color};\n --#{$prefix}btn-active-border-color: transparent;\n --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};\n --#{$prefix}btn-disabled-border-color: transparent;\n --#{$prefix}btn-box-shadow: 0 0 0 #000; // Can't use `none` as keyword negates all values when used with multiple shadows\n --#{$prefix}btn-focus-shadow-rgb: #{$btn-link-focus-shadow-rgb};\n\n text-decoration: $link-decoration;\n @if $enable-gradients {\n background-image: none;\n }\n\n &:hover,\n &:focus-visible {\n text-decoration: $link-hover-decoration;\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-color);\n }\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm);\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n $background,\n $border,\n $color: color-contrast($background),\n $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),\n $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),\n $hover-color: color-contrast($hover-background),\n $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),\n $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),\n $active-color: color-contrast($active-background),\n $disabled-background: $background,\n $disabled-border: $border,\n $disabled-color: color-contrast($disabled-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-bg: #{$background};\n --#{$prefix}btn-border-color: #{$border};\n --#{$prefix}btn-hover-color: #{$hover-color};\n --#{$prefix}btn-hover-bg: #{$hover-background};\n --#{$prefix}btn-hover-border-color: #{$hover-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$disabled-color};\n --#{$prefix}btn-disabled-bg: #{$disabled-background};\n --#{$prefix}btn-disabled-border-color: #{$disabled-border};\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n $color,\n $color-hover: color-contrast($color),\n $active-background: $color,\n $active-border: $color,\n $active-color: color-contrast($active-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-border-color: #{$color};\n --#{$prefix}btn-hover-color: #{$color-hover};\n --#{$prefix}btn-hover-bg: #{$active-background};\n --#{$prefix}btn-hover-border-color: #{$active-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$color};\n --#{$prefix}btn-disabled-bg: transparent;\n --#{$prefix}btn-disabled-border-color: #{$color};\n --#{$prefix}gradient: none;\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}btn-padding-y: #{$padding-y};\n --#{$prefix}btn-padding-x: #{$padding-x};\n @include rfs($font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-border-radius: #{$border-radius};\n}\n// scss-docs-end btn-size-mixin\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n\n &.collapse-horizontal {\n width: 0;\n height: auto;\n @include transition($transition-collapse-width);\n }\n}\n// scss-docs-end collapse-classes\n","// The dropdown wrapper (`