Use the östgötatrafiken website or the östgötatrafiken app for bus services around Linköping. The easiest way to by tickets is through the app, but you can by a travel card in advance which you can load with tickets.
-
-
-
-
-
-
Contact
-
This workshop is run by the National Bioinformatics Infrastructure Sweden (NBIS) in collaboration with National Genomics Infrastructure (NGI). Both, NGI and NBIS are platforms at SciLifeLab.
-
If you would like to get in touch with us regarding this workshop, please contact us at edu.intro-ngs [at] nbis.se.
These are steps to be completed before the workshop
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
You will have to have 3 different accounts to complete the labs in this course; one in SUPR to handle the two other accounts, and one each at the compute centers PDC in Stockholm and UPPMAX in Uppsala.
-
-
1 SUPR
-
A SUPR/NAISS account is needed to create the accounts for the computers we will be using during the course. SUPR is also the system that you will handle your own projects in if you want to use this kind of resources in your research after the course.
-
If you do not already have one, create an account at SUPR/NAISS. Then, Log in to SUPR/NAISS, preferably using the SWAMID.
-
-
Before proceeding with applying for project membership and user accounts, we have to accept the NAISS User Agreement. Do this by clicking the Personal Information link in the left sidebar menu. The scroll down a bit until you reach the section User Agreements. If you already have accepted it the State will be a green box with the text Accepted in it. If it is anything else, click it to start the accepting process.
-
-
-
-
-
-
-Tip
-
-
-
-
This is where you might run into trouble if you don’t have a SWAMID connected account. You will not be able to accept the user agreement online without it, so you will have to send in your acceptance in paper form together with a copy of your passport. This process can take a week or more, so please make sure you can accept the user agreement in good time.
-
-
-
-
-
2 UPPMAX
-
Remote computing cluster UPPMAX will be use as a fallback cluster, if there should be any problems at PDC. After making sure you have an accepted user agreement, go to the SUPR/NAISS Projects page and request membership to the project ID: naiss2024-22-1375
-
-
Once you are accepted to a project, you should see that project listed under your active projects.
-
-
Finally you need to request a login account to UPPMAX. This will be the account you use to log in to the actual computers, so it is not the same as your SUPR account. Login to SUPR and go to the Accounts page. Under the Possible Resource Account Requests heading click on Request Account on Rackham @ UPPMAX button and confirm it on the next page. If it is missing from this page, it could be because you already have a login account created (only 1 account per person allowed), or that you have not yet gotten your project memberships approved.
-
Checking your request and approving your account requires some manual work, so you might have to wait for some time (up to a working day) before the next step. When the account is ready to be created, you will receive an email to your registered email address (shown in your SUPR contact information) with information on how to proceed. You will get a one-time URL that you use to get the password (within seven days) to login to the cluster with. The link is only valid for 1 visit, so write down the password you get. When that has been done, the account ready for use within 15 minutes and you can then login using your password. Once you have logged into the cluster you can change your password by typing passwd in the terminal and follow the instuctions.
-
-
-
-
-
-
-Note
-
-
-
-
You will get one username & password for the account on UPPMAX, and one username and password for the account on PDC. Please keep track of both, we will tell you when to use which account during the workshop.
-
-
-
-
-
3 PDC
-
Remote computing cluster Dardel at PDC in Stockholm will be use for data analyses. A PDC account is needed to use these resources. Normally you would do this the same way as when you applied for the UPPMAX account above, but PDC handles uses for their courses through another system. If you do not already have a PDC account, please fill in the form at https://blackfish.pdc.kth.se/cgi-bin/accounts/request.pyat least 2 weeks before the course start and use the same email that you applied to the course with. Fill in your personal information, as well as this information about which course it is:
-
-
-
-
Lecturer/ Project Leader:
-
Martin Dahlö
-
-
-
Course / Project Title:
-
naiss2024-22-1375
-
-
-
-
We have notified PDC who the students for our course is and they will create the account needed to login to their computers. Follow the instructions you get from them to complete your account creation. The morning session on the Monday of the course will cover how to connect to PDC, a bunch of steps that might not be trivial for novice users.
-
-
-
4 Install tools
-
-
4.1 Eduroam
-
Please make sure you have a working Eduroam wifi connection setup before the course, since we will only have wifi internet access in the computer room where we have the course. The instructions on how to get it working could differ university to university, so please refere to you home university’s instructions on how to do that. Try searching for “eduroam” and your home university, e.g. eduroam uppsala university, to find it.
-
-
-
4.2 ThinLinc
-
-
ThinLinc allows graphical connection to UPPMAX. Download and install from https://www.cendio.com/thinlinc/download. It can be used directly from the browser but it is recommended to download and install the client for better copy/paste operation.
-
-
-
4.3 XQuartz
-
-
Mac users will need to download and install XQuartz for X11 forwarding. ie; to forward remotely opened windows to local machine.
-
-
-
4.4 MobaXterm (Optional)
-
-
If you are on a Windows system, and you want to open graphical applications from the terminal, we recommend MobaXterm. It is recommended that you INSTALL the program and not use the portable version. MobaXterm also has an integrated SFTP file browser.
-
-
-
4.5 Filezilla (Optional)
-
-
When you need to transfer data between the remote cluster and your computer, you can use the tools SCP or SFTP through the terminal. Windows users can use the SFTP browser available with MobaXterm. If you prefer a GUI to upload and download files from the remote cluster, we recommend installing FileZilla.
If you want to get a primer on using the terminal, you can get started with the following Tutorial One at this link Unix tutorial for beginners. You can use https://scilifelab.github.io/courses/ngsintro/common/emu/(or this mirror) to try the commands in the tutorial, so that you don’t mess up any real world system. If you have any questions regarding this tutorial contact: martin.dahlo [at] scilifelab.uu.se.
-
-
-
-
-
6 Create a user folder
-
-
-
-
-
-
-Note
-
-
-
-
Where username is mentioned, change to your user name.
-
-
-
Once you have logged in to UPPMAX, run the following command.
-
-
-
-
-
bash
-
-
mkdir /proj/naiss2024-22-1375/nobackup/username
-
-
-
-
This creates a directory with your user name. You will work inside this directory for the workshop. If you cannot write to the folder, the most likely reason is that you have not requested access to the workshop project via SUPR. This is described in step 1 above.
-
-
-
-
-
-
-Note
-
-
-
-
It may take an hour or so from request approval, before you can actually write to the folder. We will check before the workshop that all students have logged in and done this, so do not forget!
Command line navigation and related commands: cd, mkdir, rm, rmdir
-
Commonly used linux tools: cp, mv, tar, less, more, head, tail, nano, grep, top, man
-
Wildcards
-
Ownership and permissions
-
Symbolic links
-
Piping commands
-
-
Working on remote computing cluster
-
-
Logging on to UPPMAX
-
Booking resources
-
Job templates, submission and queues
-
Modules
-
-
Commonly used bioinformatic tools and pipelines
-
Working with integrated genome viewer
-
Variant-calling workflow
-
-
Mapping reads to the reference genome
-
Variant detection
-
VCF file format
-
-
RNA-Seq workflow
-
-
RNA-Seq experimental design and considerations
-
QC, mapping and gene expression counts
-
Differential gene expression analyses
-
-
Current advances in NGS technologies
-
-
-
-
After this workshop you should be able to:
-
-
Describe the basic principles of next generation sequencing.
-
Use the Linux command line interface to manage simple file processing operations, and organise directory structures.
-
Connect to and work on a remote compute cluster.
-
Apply programs in Linux for analysis of NGS data.
-
Summarise the applications of current NGS technologies, including the weakness and strengths of the approaches and when it is appropriate to use which one of them.
-
Explain common NGS file formats.
-
Interpret quality control of NGS reads.
-
Explain the steps involved in variant calling using whole genome sequencing data.
-
Independently perform a basic variant calling workflow on example data.
-
Explain the steps involved in a differential gene expression workflow using RNA seq data.
-
Hands-on experience with handling of raw RNA sequencing data, QC and quantification of gene expression.
-
Conceptual understanding of differential gene expression analysis.
-
-
-
-
-
This is a national course open to PhD students, postdocs, group leaders and core facility staff.
-
A background in genetics, cell biology, biomedicine, biochemistry, bioinformatics or comparable is desirable. To get the maximum benefit from the workshop we would like you to
-
Have a research project where you are currently using next generation sequencing or are planning to use next generation sequencing. It is beneficial if you are directly performing analyses or if you have a support role and will be able to participate in a wide range of projects and transfer your knowledge to others.
-
Selection criteria include correct entry requirements, motivation to attend the workshop as well as gender and geographical balance. Applicants affiliated to a Swedish institution are prioritized. International applicants are considered only if/when seats are available. Further prioritization: PhD scholars > Post-Docs, PIs, Healthcare staff > Master’s students).
-
Please note that NBIS training events do not provide any formal university credits. The training content is estimated to correspond to a certain number of credits, however the estimated credits are just guidelines. If formal credits are crucial, the student needs to confer with the home department before submitting a course application in order to establish whether the course is valid for formal credits or not.
Working on the Linux command line
-Sequence data formats and QC
-DNA variant calling workflow
-RNA sequence analyses workflow
-
-
-
Updated: 28-10-2024 at 14:26:39.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/2411/robots.txt b/2411/robots.txt
deleted file mode 100644
index 1706ae089..000000000
--- a/2411/robots.txt
+++ /dev/null
@@ -1 +0,0 @@
-Sitemap: https://nbisweden.github.io/workshop-ngsintro/sitemap.xml
diff --git a/2411/search.json b/2411/search.json
deleted file mode 100644
index 514defb4f..000000000
--- a/2411/search.json
+++ /dev/null
@@ -1,1325 +0,0 @@
-[
- {
- "objectID": "troubleshooting.html",
- "href": "troubleshooting.html",
- "title": "Status & Troubleshooting",
- "section": "",
- "text": "Useful commands for monitoring status and user activity on UPPMAX.\n\n\nList all jobs running an a project\n\n\nsqueue -A | sort -k 4\n\n\nSample output\n 23186770 core _interac analopez R 2:15:00 1 r55\n 23175660 core (null) anitav R 6:52:28 1 r480\n 23188713 core (null) annha R 1:42:59 1 r480\n 23185442 core (null) annha R 2:47:11 1 r480\n 23185433 core (null) inene424 R 2:47:42 1 r479\n 23185391 core (null) inene424 R 2:50:04 1 r479\n 23185540 core (null) shengyz R 2:46:20 1 r480\n JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)\n 23185119 core (null) wingf R 2:53:40 1 r479\n\n\n\nSorted list of jobs per user\n\n\nsqueue -A | tr -s ' ' | cut -d' ' -f5 | sort | uniq -c | sort -k1\n\n\nSample output\n 1 tami\n 1 tommal\n 1 USER\n 1 valeriia\n 1 vioww\n 1 vishnupk\n 1 ylvafr\n 2 mehran96\n 2 miika\n 3 mariasve\n\n\n\n\nTotal number of cores used on a project\n\n\nsqueue -A -o %C | awk '{total += $0} END{print total}'\n\n\n\n\n\nAmount of storage space used per project\n\n\nuquota | grep \n\n\nSample output\nYour project Your File Area Unit Usage Quota Limit Over Quota\n--------------- --------------------- -------- ------ ----------- ----------\nsnic2022-22-123 /proj/snic2022-22-123 GBytes 4.6 128\n\n\n\nList last activity in a directory for all users\n\n\nbash /sw/courses/utils/list_modification_times.sh /proj//nobackup/\n\n\nSample output\nhkyle 2021-11-22 13:59:59 (/proj/snic2021-22-644/nobackup/hkyle/uppmax_tutorial/job_template)\nmalinh 2021-11-22 14:12:10 (/proj/snic2021-22-644/nobackup/malinh/slurm-23182638.out)\naliraz 2021-11-22 14:23:16 (/proj/snic2021-22-644/nobackup/aliraz/slurm-23184022.out)\nkristaps 2021-11-22 14:25:08 (/proj/snic2021-22-644/nobackup/kristaps/uppmax_tutorial/jobData.sam)\nanapin 2021-11-22 14:56:14 (/proj/snic2021-22-644/nobackup/anapin/uppmax_tutorial/uppmax_tutorial/jobData.sam)\nanalopez 2021-11-22 14:56:16 (/proj/snic2021-22-644/nobackup/analopez/uppmax_tutorial/jobData.sam)\nprivate Not available ()\n\n\n\n\n\nscontrol show res | grep \n\n\nSample output\nReservationName=snic2021-22-644_wed StartTime=2021-11-24T12:00:00 EndTime=2021-11-24T18:00:00 Duration=06:00:00\n Users=(null) Accounts=snic2021-22-644 Licenses=(null) State=INACTIVE BurstBuffer=(null) Watts=n/a\nReservationName=snic2021-22-644_thu StartTime=2021-11-25T08:30:00 EndTime=2021-11-25T17:30:00 Duration=09:00:00\n Users=(null) Accounts=snic2021-22-644 Licenses=(null) State=INACTIVE BurstBuffer=(null) Watts=n/a\nReservationName=snic2021-22-644_fri StartTime=2021-11-26T08:30:00 EndTime=2021-11-26T13:30:00 Duration=05:00:00\n Users=(null) Accounts=snic2021-22-644 Licenses=(null) State=INACTIVE BurstBuffer=(null) Watts=n/a\n\n\n\n\n\nprojmembers \n\n\nSample output\nsnic2022-22-123 abusiddi Abu Bakar Siddique\nsnic2022-22-123 afifac Afifa Enam Chowdhury\nsnic2022-22-123 asve0014 Ashish Verma\nsnic2022-22-123 berka Berkay Paylar\nsnic2022-22-123 btleren Betül Eren Keskin\n\n\n\nFetch user information from username\n\nfinger username"
- },
- {
- "objectID": "troubleshooting.html#status",
- "href": "troubleshooting.html#status",
- "title": "Status & Troubleshooting",
- "section": "",
- "text": "Useful commands for monitoring status and user activity on UPPMAX.\n\n\nList all jobs running an a project\n\n\nsqueue -A | sort -k 4\n\n\nSample output\n 23186770 core _interac analopez R 2:15:00 1 r55\n 23175660 core (null) anitav R 6:52:28 1 r480\n 23188713 core (null) annha R 1:42:59 1 r480\n 23185442 core (null) annha R 2:47:11 1 r480\n 23185433 core (null) inene424 R 2:47:42 1 r479\n 23185391 core (null) inene424 R 2:50:04 1 r479\n 23185540 core (null) shengyz R 2:46:20 1 r480\n JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)\n 23185119 core (null) wingf R 2:53:40 1 r479\n\n\n\nSorted list of jobs per user\n\n\nsqueue -A | tr -s ' ' | cut -d' ' -f5 | sort | uniq -c | sort -k1\n\n\nSample output\n 1 tami\n 1 tommal\n 1 USER\n 1 valeriia\n 1 vioww\n 1 vishnupk\n 1 ylvafr\n 2 mehran96\n 2 miika\n 3 mariasve\n\n\n\n\nTotal number of cores used on a project\n\n\nsqueue -A -o %C | awk '{total += $0} END{print total}'\n\n\n\n\n\nAmount of storage space used per project\n\n\nuquota | grep \n\n\nSample output\nYour project Your File Area Unit Usage Quota Limit Over Quota\n--------------- --------------------- -------- ------ ----------- ----------\nsnic2022-22-123 /proj/snic2022-22-123 GBytes 4.6 128\n\n\n\nList last activity in a directory for all users\n\n\nbash /sw/courses/utils/list_modification_times.sh /proj//nobackup/\n\n\nSample output\nhkyle 2021-11-22 13:59:59 (/proj/snic2021-22-644/nobackup/hkyle/uppmax_tutorial/job_template)\nmalinh 2021-11-22 14:12:10 (/proj/snic2021-22-644/nobackup/malinh/slurm-23182638.out)\naliraz 2021-11-22 14:23:16 (/proj/snic2021-22-644/nobackup/aliraz/slurm-23184022.out)\nkristaps 2021-11-22 14:25:08 (/proj/snic2021-22-644/nobackup/kristaps/uppmax_tutorial/jobData.sam)\nanapin 2021-11-22 14:56:14 (/proj/snic2021-22-644/nobackup/anapin/uppmax_tutorial/uppmax_tutorial/jobData.sam)\nanalopez 2021-11-22 14:56:16 (/proj/snic2021-22-644/nobackup/analopez/uppmax_tutorial/jobData.sam)\nprivate Not available ()\n\n\n\n\n\nscontrol show res | grep \n\n\nSample output\nReservationName=snic2021-22-644_wed StartTime=2021-11-24T12:00:00 EndTime=2021-11-24T18:00:00 Duration=06:00:00\n Users=(null) Accounts=snic2021-22-644 Licenses=(null) State=INACTIVE BurstBuffer=(null) Watts=n/a\nReservationName=snic2021-22-644_thu StartTime=2021-11-25T08:30:00 EndTime=2021-11-25T17:30:00 Duration=09:00:00\n Users=(null) Accounts=snic2021-22-644 Licenses=(null) State=INACTIVE BurstBuffer=(null) Watts=n/a\nReservationName=snic2021-22-644_fri StartTime=2021-11-26T08:30:00 EndTime=2021-11-26T13:30:00 Duration=05:00:00\n Users=(null) Accounts=snic2021-22-644 Licenses=(null) State=INACTIVE BurstBuffer=(null) Watts=n/a\n\n\n\n\n\nprojmembers \n\n\nSample output\nsnic2022-22-123 abusiddi Abu Bakar Siddique\nsnic2022-22-123 afifac Afifa Enam Chowdhury\nsnic2022-22-123 asve0014 Ashish Verma\nsnic2022-22-123 berka Berkay Paylar\nsnic2022-22-123 btleren Betül Eren Keskin\n\n\n\nFetch user information from username\n\nfinger username"
- },
- {
- "objectID": "troubleshooting.html#troubleshooting",
- "href": "troubleshooting.html#troubleshooting",
- "title": "Status & Troubleshooting",
- "section": "2 Troubleshooting",
- "text": "2 Troubleshooting\n\n2.1 X-forwarding\n\n2.1.1 Setup\nMac users\n\nInstall Xquartz and restart computer\nOpen the Xquartz terminal and connect to Uppmax\nIn my recent macos (10.xxx) , x-forwarding only works if I explicitly run the Xquartz terminal\n\nssh -XY username@rackham.uppmax.uu.se\nAlso use this when logging in to the compute node!\nssh -XY username@node\nWindows users\nIn MobaXTerm, go to settings and make sure that X-forwarding is checked.\n\n\n2.1.2 Testing X-forwarding\nType xeyes in the terminal.\n\n\n\n2.2 Open .html documents on Rackham\nFirst ensure X-forwarding works, then run firefox --no-remote filename.html\n\n\n2.3 SCP fails with *\nSometimes students have problems to download files with SCP when there is a * in the end of the line. For example; scp user@rackham.uppmax.uu.se:/proj/bla/HG00097.bam* .. It needs to be changed to scp user@rackham.uppmax.uu.se:/proj/bla/HG00097.bam\\* ..\n\n\n2.4 Thinlinc\n\n2.4.1 Login\nWhen logging in through an installed client, username/password seems to work. When logging in through the browser, username/password+2FA may be required.\n\n\n2.4.2 Minimize the ThinLinc window\nOn a Mac, press Fn + F8, then select: Minimize window.\n\n\n2.4.3 Gedit opening issues\nWhen opening it from the terminal (gedit &), it was not able to connect to a display to show the graphics. The DISPLAY variable was empty. This was when using ThinLinc, so it should have worked. The issue was solved by opening gedit from the menu. Gedit could be labelled Text Editor.\n\n\n\n2.5 Set persistent home directory in MobaXTerm\nThis is to specify where the home directory in MobaXTerm is located in the computer’s file system. In Settings > Configuration, set the persistent home directory to a suitable folder. Restart MobaXTerm.\n\n\n2.6 Typing $ on a Swedish keyboard\nPress AltGr + 4.\n\n\n2.7 Black background for XQuartz windows on M1 Mac\nAs documented here, run:\n\ndefaults write org.xquartz.X11 enable_render_extension 0"
- },
- {
- "objectID": "topics/vc/lab_vc_answers.html",
- "href": "topics/vc/lab_vc_answers.html",
- "title": "Variant Calling Answers",
- "section": "",
- "text": "Unable to display PDF file. Download instead."
- },
- {
- "objectID": "topics/uppmax/pipeline/lab_uppmax_pipeline.html",
- "href": "topics/uppmax/pipeline/lab_uppmax_pipeline.html",
- "title": "Uppmax Pipeline",
- "section": "",
- "text": "Note\n\n\n\nIn code blocks, the dollar sign ($) is not to be printed. The dollar sign is usually an indicator that the text following it should be typed in a terminal window."
- },
- {
- "objectID": "topics/uppmax/pipeline/lab_uppmax_pipeline.html#load-the-module",
- "href": "topics/uppmax/pipeline/lab_uppmax_pipeline.html#load-the-module",
- "title": "Uppmax Pipeline",
- "section": "4.1 Load the module",
- "text": "4.1 Load the module\nIn this exercise, we’ll pretend that we are running analyses. This will give you a peek at what running programs in linux is like, and get you ready for the real stuff during the week!\nThe first thing you usually do is to load the modules for the programs you want to run. During this exercise we’ll only run my dummy scripts that don’t actually do any analysis, so they don’t have a module of their own. What we can do instead is to manually do what module loading usually does: to modify the $PATH variable.\nThe $PATH variable specifies directories where the computer should look for programs whenever you type a command. For instance, when you type\nnano\nhow does the computer know which program to start? You gave it the name nano, but that could refer to any file named nano in the computer, yet it starts the correct one every time. The answer is that it looks in the directories stored in the $PATH variable and start the first program it finds that is named nano.\nTo see which directories that are available by default, type\necho $PATH\nIt should give you something like this, a list of directories, separated by colon signs:\necho $PATH\n/home/dahlo/perl//bin/:/home/dahlo/.pyenv/shims:/home/dahlo/.pyenv/bin:\n/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:\n/sbin:/opt/thinlinc/bin:/sw/uppmax/bin:/home/dahlo/usr/bin\nTry loading a module, and then look at the $PATH variable again. You’ll see that there are a few extra directories there now, after the module has been loaded.\nmodule load bioinfo-tools samtools/1.6\necho $PATH\n/sw/apps/bioinfo/samtools/1.6/rackham/bin:/home/dahlo/perl/bin:/home/dahlo/.pyenv/shims:\n/home/dahlo/.pyenv/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:\n/usr/sbin:/sbin:/opt/thinlinc/bin:/sw/uppmax/bin:/home/dahlo/usr/bin\nTo pretend that we are loading a module, instead of actually loading a module for them, we’ll manually do what the module system would have done. We will just add a the directory containing my dummy scripts to the $PATH variable, and it will be like we loaded the module for them. Now, when we type the name of one of my scripts, the computer will look in all the directories specified in the $PATH variable, which now includes the location where i keep my scripts. The computer will now find programs named as my scripts are and it will run them.\nexport PATH=$PATH:/sw/courses/ngsintro/linux/uppmax_pipeline_exercise/dummy_scripts\nThis will set the $PATH variable to whatever it is at the moment, and add a directory at the end of it. Note the lack of a dollar sign infront of the variable name directly after export. You don’t use dollar signs when assigning values to variables, and you always use dollar signs when getting values from variables.\n\n Important\nThe export command affects only the terminal you type it in. If you have 2 terminals open, only the terminal you typed it in will have a modified path. If you close that terminal and open a new one, it will not have the modified path.\n\nEnough with variables now. Let’s try the scripts out!"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#what-is-rna",
- "href": "topics/rnaseq/slide_rnaseq.html#what-is-rna",
- "title": "Bulk RNASeq Analysis",
- "section": "What is RNA?",
- "text": "What is RNA?\n\n\nThe transcriptome is spatially and temporally dynamic\nData comes from functional units (coding regions)\nOnly a tiny fraction of the genome\n\n\n\nCentral dogma of molecular biology. DNA -> RNA -> Protein.\nWe have gene models to describe the organisation of a genome into functional units.\nVery tiny portion of the genome is transcribed into RNA.\nThere are many types of RNA. Commonly protein coding RNA, also called mRNA. There are tRNA, sRNA, miRNA, siRNA, lincRNA, piRNA, snRNA etc.\nWhat is the most abundant RNA? rRNA.\nWhile DNA is mostly considered constant in all cells for an organism, expressed RNA varies from cell to cell and from time to time.\nWhen we say RNA sequencing, we are not sequencing RNA molecules directly. RNA is first converted to DNA through reverse transcription followed by regular DNA sequencing."
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#applications",
- "href": "topics/rnaseq/slide_rnaseq.html#applications",
- "title": "Bulk RNASeq Analysis",
- "section": "Applications",
- "text": "Applications\n\nIdentify gene sequences in genomes (annotation)\nLearn about gene function\nDifferential gene expression\nExplore isoform and allelic expression\nUnderstand co-expression, pathways and networks\nGene fusion\nRNA editing"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#workflow",
- "href": "topics/rnaseq/slide_rnaseq.html#workflow",
- "title": "Bulk RNASeq Analysis",
- "section": "Workflow",
- "text": "Workflow\n\n\n\n\n\n\n\nConesa et al. (2016)"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#de-novo-assembly",
- "href": "topics/rnaseq/slide_rnaseq.html#de-novo-assembly",
- "title": "Bulk RNASeq Analysis",
- "section": "De-Novo assembly",
- "text": "De-Novo assembly\n\nWhen no reference genome available\nTo identify novel genes/transcripts/isoforms\nIdentify fusion genes\nAssemble transcriptome from short reads\nAccess quality of assembly and refine\nMap reads back to assembled transcriptome\n\n\nTrinity, Hsieh et al. (2019), Wang & Gribskov (2017)"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#experimental-design",
- "href": "topics/rnaseq/slide_rnaseq.html#experimental-design",
- "title": "Bulk RNASeq Analysis",
- "section": "Experimental design",
- "text": "Experimental design\n\n\n\nBiological replicates: 6 - 12 Schurch et al. (2016)\nSample size estimation Hart et al. (2013)\nPower analysis rnaseq-power web app, Zhao et al. (2018)\nBalanced design to avoid batch effects\nRIN values have strong effect Gallego Romero et al. (2014)\n\n\n\n\n\n\n\nTechnical replicates are not necessary Marioni et al. (2008)\nPrevious publications can be useful in experimental planning to avoid repeating the same mistakes"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#library-sequencing",
- "href": "topics/rnaseq/slide_rnaseq.html#library-sequencing",
- "title": "Bulk RNASeq Analysis",
- "section": "Library & Sequencing",
- "text": "Library & Sequencing\n\n\n\n\n\n\npolyA selection / Ribosomal RNA depletion\nSingle-end / Paired-end"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#library-prep",
- "href": "topics/rnaseq/slide_rnaseq.html#library-prep",
- "title": "Bulk RNASeq Analysis",
- "section": "Library prep",
- "text": "Library prep\n\n80% of the RNA in a cell is ribosomal RNA (rRNA)\nrRNA can be eliminated using polyA selection or rRNA depletion\n\nPolyA selection mostly captures only protein-coding genes / mRNA but gives cleaner results\nDepletion of rRNA is the solution if it’s important to retain all RNA species\n\nsmallRNAs are purified through size selection\nPCR amplification may be needed for low quantity input (See section PCR duplicates)\nUse stranded (directional) libraries Zhao et al. (2015), Levin et al. (2010)\n\nAccurately identify sense/antisense transcript\nResolve overlapping genes\n\nExome capture\nLibrary normalisation to concentrate specific transcripts\nLibraries should have high complexity / low duplication. Daley & Smith (2013)"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#sequencing",
- "href": "topics/rnaseq/slide_rnaseq.html#sequencing",
- "title": "Bulk RNASeq Analysis",
- "section": "Sequencing",
- "text": "Sequencing\n\nShort reads vs long reads (Illumina/PacBio)\nRead length Chhangawala et al. (2015)\n\nGreater than 50bp does not improve DGE\nLonger reads are better for isoforms\n\nPooling samples\nSequencing depth (Coverage / Reads per sample)\nSingle-end reads (Cheaper?)\nUse paired-end reads\n\nIncreased mappable reads\nIncreased power in assemblies\nBetter for structural variation and isoforms\nDecreased false-positives for DGE\n\nMore replicates are better than more depth Liu et al. (2014)\n\nCorley et al. (2017)"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#workflow-dge",
- "href": "topics/rnaseq/slide_rnaseq.html#workflow-dge",
- "title": "Bulk RNASeq Analysis",
- "section": "Workflow • DGE",
- "text": "Workflow • DGE"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#read-qc",
- "href": "topics/rnaseq/slide_rnaseq.html#read-qc",
- "title": "Bulk RNASeq Analysis",
- "section": "Read QC",
- "text": "Read QC\n\n\n\nNumber of reads\nPer base sequence quality\nPer sequence quality score\nPer base sequence content\nPer sequence GC content\nPer base N content\nSequence length distribution\nSequence duplication levels\nOverrepresented sequences\nAdapter content\nKmer content\n\nFastQC, MultiQC, https://sequencing.qcfail.com/"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#fastqc",
- "href": "topics/rnaseq/slide_rnaseq.html#fastqc",
- "title": "Bulk RNASeq Analysis",
- "section": "FastQC",
- "text": "FastQC\n\n\nGood quality\n\n\nPoor quality"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#read-qc-pbsq-psqs",
- "href": "topics/rnaseq/slide_rnaseq.html#read-qc-pbsq-psqs",
- "title": "Bulk RNASeq Analysis",
- "section": "Read QC • PBSQ, PSQS",
- "text": "Read QC • PBSQ, PSQS\nPer base sequence quality\n\nPer sequence quality scores"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#read-qc-pbsc-psgc",
- "href": "topics/rnaseq/slide_rnaseq.html#read-qc-pbsc-psgc",
- "title": "Bulk RNASeq Analysis",
- "section": "Read QC • PBSC, PSGC",
- "text": "Read QC • PBSC, PSGC\nPer base sequence content\n\nPer sequence GC content"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#read-qc-sdl-ac",
- "href": "topics/rnaseq/slide_rnaseq.html#read-qc-sdl-ac",
- "title": "Bulk RNASeq Analysis",
- "section": "Read QC • SDL, AC",
- "text": "Read QC • SDL, AC\nSequence duplication level\n\nAdapter content"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#trimming",
- "href": "topics/rnaseq/slide_rnaseq.html#trimming",
- "title": "Bulk RNASeq Analysis",
- "section": "Trimming",
- "text": "Trimming\n\n\n\nTrimming reads to remove adapter/readthrough or low quality bases\nRelated options are hard clipping, filtering reads\nSliding window trimming\nFilter by min/max read length\n\nRemove reads less than ~18nt\n\nDemultiplexing/Splitting\n\nWhen to avoid trimming?\n\nRead trimming may not always be necessary Liao & Shi (2020)\nFixed read length may sometimes be more important\nExpected insert size distribution may be more important for assemblers\n\nCutadapt, fastp, Prinseq"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#mapping",
- "href": "topics/rnaseq/slide_rnaseq.html#mapping",
- "title": "Bulk RNASeq Analysis",
- "section": "Mapping",
- "text": "Mapping\n\n\nAligning reads back to a reference sequence\nMapping to genome vs transcriptome\nSplice-aware alignment (genome) (STAR, HISAT2 etc)\n\nSTAR, HiSat2, Baruzzo et al. (2017)"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#aligners-metrics",
- "href": "topics/rnaseq/slide_rnaseq.html#aligners-metrics",
- "title": "Bulk RNASeq Analysis",
- "section": "Aligners • Metrics",
- "text": "Aligners • Metrics\n\n\n\nBaruzzo et al. (2017)"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#aligners-time-and-ram",
- "href": "topics/rnaseq/slide_rnaseq.html#aligners-time-and-ram",
- "title": "Bulk RNASeq Analysis",
- "section": "Aligners time and RAM",
- "text": "Aligners time and RAM\n\n\n\nProgram\nTime_Min\nMemory_GB\n\n\n\n\nHISATx1\n22.7\n4.3\n\n\nHISATx2\n47.7\n4.3\n\n\nHISAT\n26.7\n4.3\n\n\nSTAR\n25\n28\n\n\nSTARx2\n50.5\n28\n\n\nGSNAP\n291.9\n20.2\n\n\nTopHat2\n1170\n4.3"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#section",
- "href": "topics/rnaseq/slide_rnaseq.html#section",
- "title": "Bulk RNASeq Analysis",
- "section": "",
- "text": "Reads (FASTQ)\n\n@ST-E00274:179:HHYMLALXX:8:1101:1641:1309 1:N:0:NGATGT\nNCATCGTGGTATTTGCACATCTTTTCTTATCAAATAAAAAGTTTAACCTACTCAGTTATGCGCATACGTTTTTTGATGGCATTTCCATAAACCGATTTTTTTTTTATGCACGTACCCAAAACGTGCAGAAAAATACGCTGCTAGAAATGTA\n+\n#AAAFAFA<-AFFJJJAFA-FFJJJJFFFAJJJJ-<FFJJJ-A-F-7--FA7F7-----FFFJFA<FFFFJ<AJ--FF-A<A-<JJ-7-7-<FF-FFFJAFFAA--A--7FJ-7----77-A--7F7)---7F-A----7)7-----7<<-\n@instrument:runid:flowcellid:lane:tile:xpos:ypos read:isfiltered:controlnumber:sampleid\n\nReference Genome/Transcriptome (FASTA)\n\n>1 dna:chromosome chromosome:GRCz10:1:1:58871917:1 REF\nGATCTTAAACATTTATTCCCCCTGCAAACATTTTCAATCATTACATTGTCATTTCCCCTC\n\nAnnotation (GTF/GFF)\n\n#!genome-build GRCz10\n4 ensembl_havana gene 6732 52059 . - . gene_id \"ENSDARG00000104632\"; gene_version \"2\"; gene_name \"rerg\"; gene_source \"ensembl_havana\"; gene_biotype \"protein_coding\"; havana_gene \"OTTDARG00000044080\"; havana_gene_version \"1\";\nseq source feature start end score strand frame attribute\nIllumina FASTQ format, GTF format"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#alignment",
- "href": "topics/rnaseq/slide_rnaseq.html#alignment",
- "title": "Bulk RNASeq Analysis",
- "section": "Alignment",
- "text": "Alignment\n\nSAM/BAM (Sequence Alignment Map format)\n\nST-E00274:188:H3JWNCCXY:4:1102:32431:49900 163 1 1 60 8S139M4S = 385 535 TATTTAGAGATCTTAAACATCCATTCCCCCTGCAAACATTTTCAATCATTACATTGTCATTTTCCCTCCAAATTAAATTTAGCCAGAGGCGCACAACATACGACCTCTAAAAAAGGTGCTGGAACATGTACCTATATGCAGCACCACCATC AAAFAFFAFFFFJ7FFFFJ<JAFA7F-<AJ7JJ<FFFJ--<FAJF<7<7FAFJ-<AFA<-JJJ-AF-AJ-FF<F--A<FF<-7777-7JA-77A---F-7AAFF-FJA--77FJ<--77)))7<JJA<J77<-------<7--))7)))7- NM:i:4 MD:Z:12T0T40C58T25 AS:i:119 XS:i:102 XA:Z:17,-53287490,4S33M4D114M,11; MQ:i:60 MC:Z:151M RG:Z:ST-E00274_188_H3JWNCCXY_4\nquery flag ref pos mapq cigar mrnm mpos tlen seq qual opt\nNever store alignment files in raw SAM format. Always compress it! SAM format\n\n\n\nFormat\nSize_GB\n\n\n\n\nSAM\n7.4\n\n\nBAM\n1.9\n\n\nCRAM lossless Q\n1.4\n\n\nCRAM 8 bins Q\n0.8\n\n\nCRAM no Q\n0.26"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#visualisation-igv",
- "href": "topics/rnaseq/slide_rnaseq.html#visualisation-igv",
- "title": "Bulk RNASeq Analysis",
- "section": "Visualisation • IGV",
- "text": "Visualisation • IGV\n\nIGV, UCSC Genome Browser, SeqMonk, More"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#visualisation-tview",
- "href": "topics/rnaseq/slide_rnaseq.html#visualisation-tview",
- "title": "Bulk RNASeq Analysis",
- "section": "Visualisation • tview",
- "text": "Visualisation • tview\nsamtools tview alignment.bam genome.fasta"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#visualisation-seqmonk",
- "href": "topics/rnaseq/slide_rnaseq.html#visualisation-seqmonk",
- "title": "Bulk RNASeq Analysis",
- "section": "Visualisation • SeqMonk",
- "text": "Visualisation • SeqMonk\n\nSeqMonk"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#alignment-qc",
- "href": "topics/rnaseq/slide_rnaseq.html#alignment-qc",
- "title": "Bulk RNASeq Analysis",
- "section": "Alignment QC",
- "text": "Alignment QC\n\nNumber of reads mapped/unmapped/paired etc\nUniquely mapped\nInsert size distribution\nCoverage\nGene body coverage\nBiotype counts / Chromosome counts\nCounts by region: gene/intron/non-genic\nSequencing saturation\nStrand specificity\n\nSTAR (final log file), samtools stats, bamtools stats, QoRTs, RSeQC, Qualimap"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#alignment-qc-star-log",
- "href": "topics/rnaseq/slide_rnaseq.html#alignment-qc-star-log",
- "title": "Bulk RNASeq Analysis",
- "section": "Alignment QC • STAR Log",
- "text": "Alignment QC • STAR Log\nMultiQC can be used to summarise and plot STAR log files."
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#alignment-qc-features",
- "href": "topics/rnaseq/slide_rnaseq.html#alignment-qc-features",
- "title": "Bulk RNASeq Analysis",
- "section": "Alignment QC • Features",
- "text": "Alignment QC • Features\nQoRTs was run on all samples and summarised using MultiQC."
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#alignment-qc-qorts",
- "href": "topics/rnaseq/slide_rnaseq.html#alignment-qc-qorts",
- "title": "Bulk RNASeq Analysis",
- "section": "Alignment QC • QoRTs",
- "text": "Alignment QC • QoRTs"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#alignment-qc-examples",
- "href": "topics/rnaseq/slide_rnaseq.html#alignment-qc-examples",
- "title": "Bulk RNASeq Analysis",
- "section": "Alignment QC • Examples",
- "text": "Alignment QC • Examples\n\n\nRead mapping profile \n\nGene body coverage \nSigurgeirsson et al. (2014)\n\n\n\nThe read mapping profile shows how well bases along a read mapped to the reference for all reads. Mapability usually decreases towards the 5’ and 3’ ends due to soft-clipping. This is is more pronounced in untrimmed reads.\nGene body coverage shows read coverage over the gene for all genes. An even coverage is ideally expected. A bias in either direction could be indicative of library quality. A bias toward the 3’ end is usually seen in polyA selected libraries."
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#alignment-qc-examples-1",
- "href": "topics/rnaseq/slide_rnaseq.html#alignment-qc-examples-1",
- "title": "Bulk RNASeq Analysis",
- "section": "Alignment QC • Examples",
- "text": "Alignment QC • Examples\n\n\nInsert size\n\n\nSaturation curve\n\nFrancis et al. (2013)\n\n\n\nNegative insert size implies overlapping mate pairs.\nConserved genes in the mouse transcriptome. Saturation curves of discovery of genes in the mouse heart from a set of a subset of 248 conserved orthologs; genes which have any blast hit are shown in circles; genes which the translated protein was within the expected size range of the conserved gene are in squares; proteins which are 100% identical to a canonical protein in Uniprot/Swissprot mouse database are shown in triangles."
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#quantification-counts",
- "href": "topics/rnaseq/slide_rnaseq.html#quantification-counts",
- "title": "Bulk RNASeq Analysis",
- "section": "Quantification • Counts",
- "text": "Quantification • Counts\n\n\n\nRead counts = gene expression\nIntersection on gene models\nReads can be quantified on any feature (gene, transcript, exon etc)\n\n\nfeatureCounts, HTSeq"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#quantification",
- "href": "topics/rnaseq/slide_rnaseq.html#quantification",
- "title": "Bulk RNASeq Analysis",
- "section": "Quantification",
- "text": "Quantification\n\n\nPCR duplicates\n\nComputational deduplication not recommended Klepikova et al. (2017), Parekh et al. (2016)\nUse PCR-free library-prep kits\nUse UMIs during library-prep Fu et al. (2018)\n\nMulti-mapping\n\nAdded (BEDTools multicov)\nDiscard (featureCounts, HTSeq)\nDistribute counts (Cufflinks, featureCounts)\nRescue\n\nProbabilistic assignment (Rcount, Cufflinks)\nPrioritise features (Rcount)\nProbabilistic assignment with EM (RSEM)\n\n\n\n\n\n\n\nTools that detect duplicate reads (like Picard MarkDuplicates) is looking for reads that start and end at the same coordinates. Such reads are expected to be PCR derived and can be collapsed down to 1 read. This makes sense in whole genome sequencing, but in RNA-Seq, this is naturally expected since highly expressed genes create huge number of identical transcripts which may fragment at hotspots leading to fragmentation bias Roberts et al. (2011). Therefore, removing PCR duplicates may remove real duplicates as well."
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#quantification-abundance",
- "href": "topics/rnaseq/slide_rnaseq.html#quantification-abundance",
- "title": "Bulk RNASeq Analysis",
- "section": "Quantification • Abundance",
- "text": "Quantification • Abundance\n\nCount methods\n\nProvide no inference on isoforms\nCannot accurately measure fold change\n\n\n\n\nProbabilistic assignment\n\nDeconvolute ambiguous mappings\nTranscript-level\ncDNA reference\n\n\nKallisto, Salmon\n\nUltra-fast & alignment-free\nBootstrapping & quantification confidence\nTranscript-level counts\nTranscript-level estimates improves gene-level estimates Soneson et al. (2015), tximport\nEvaluation and comparison of isoform quantification tools Zhang et al. (2017)\n\nRSEM, Kallisto, Salmon\n\nGene expression counts may be literal counts (reads overlapping to gene models) or probabilistically estimated based on the data. Proponents of probabilistically estimation claims that it is a better estimate that corrects for sampling biases.\nTools such as RSEM, Kallisto and Salmon produce probabilistic abundance estimates. Soneson et al. (2015) claims that estimating abundance using Kallisto at the transcript levels and then summarising down to gene-level counts results in improved estimates of gene expression.\nKallisto/Salmon -> transcript-counts -> tximport() -> gene-counts"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#quantification-qc",
- "href": "topics/rnaseq/slide_rnaseq.html#quantification-qc",
- "title": "Bulk RNASeq Analysis",
- "section": "Quantification QC",
- "text": "Quantification QC\nENSG00000000003 140 242 188 143 287 344 438 280 253\nENSG00000000005 0 0 0 0 0 0 0 0 0\nENSG00000000419 69 98 77 55 52 94 116 79 69\nENSG00000000457 56 75 104 79 157 205 183 178 153\nENSG00000000460 33 27 23 19 27 42 69 44 40\n\nPairwise correlation between samples must be high (>0.9)"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#multiqc",
- "href": "topics/rnaseq/slide_rnaseq.html#multiqc",
- "title": "Bulk RNASeq Analysis",
- "section": "MultiQC",
- "text": "MultiQC"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#normalization",
- "href": "topics/rnaseq/slide_rnaseq.html#normalization",
- "title": "Bulk RNASeq Analysis",
- "section": "Normalization",
- "text": "Normalization\n\n\n\nControl for Sequencing depth, compositional bias and more\nMedian of Ratios (DESeq2) and TMM (edgeR) perform the best\n\n\n\nFor DGE using DGE packages, use raw counts\nFor clustering, heatmaps etc use VST, VOOM or RLOG\nFor own analysis, plots etc, use TPM\nOther solutions: spike-ins/house-keeping genes\n\nDillies et al. (2013), Evans et al. (2018), Wagner et al. (2012)"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#exploratory",
- "href": "topics/rnaseq/slide_rnaseq.html#exploratory",
- "title": "Bulk RNASeq Analysis",
- "section": "Exploratory",
- "text": "Exploratory\n\n\n\nRemove lowly expressed genes\nHeatmaps, MDS, PCA etc.\n\n\npheatmap\n\n\nTransform raw counts to VST, VOOM, RLOG, TPM etc"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#batch-correction",
- "href": "topics/rnaseq/slide_rnaseq.html#batch-correction",
- "title": "Bulk RNASeq Analysis",
- "section": "Batch correction",
- "text": "Batch correction\n\nEstimate variation explained by variables (PVCA)\n\n\n\nFind confounding effects as surrogate variables (SVA)\nModel known batches in the LM/GLM model\nCorrect known batches (ComBat from SVA)(Can overcorrect! Zindler et al. (2020))\nInteractively evaluate batch effects and correction (BatchQC) Manimaran et al. (2016)"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#differential-expression",
- "href": "topics/rnaseq/slide_rnaseq.html#differential-expression",
- "title": "Bulk RNASeq Analysis",
- "section": "Differential expression",
- "text": "Differential expression\n\n\n\n\nUnivariate testing gene-by-gene\nMore descriptive, less predictive"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#differential-expression-1",
- "href": "topics/rnaseq/slide_rnaseq.html#differential-expression-1",
- "title": "Bulk RNASeq Analysis",
- "section": "Differential expression",
- "text": "Differential expression\n\nDESeq2, edgeR (Neg-binom > GLM > Test)\nLimma-Voom (Neg-binom > Voom-transform > LM > Test)\nDESeq2 ~age+condition\n\nEstimate size factors estimateSizeFactors()\nEstimate gene-wise dispersion estimateDispersions()\nFit curve to gene-wise dispersion estimates\nShrink gene-wise dispersion estimates\nGLM fit for each gene\nWald test nbinomWaldTest()\n\n\n\nDESeq2, edgeR, limma, Seyednasrollah et al. (2015)"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#dge",
- "href": "topics/rnaseq/slide_rnaseq.html#dge",
- "title": "Bulk RNASeq Analysis",
- "section": "DGE",
- "text": "DGE\n\nResults results()\n\nlog2 fold change (MLE): type type2 vs control\nWald test p-value: type type2 vs control\nDataFrame with 1 row and 6 columns\n baseMean log2FoldChange lfcSE\n <numeric> <numeric> <numeric>\nENSG00000000003 242.307796723287 -0.932926089608546 0.114285150312285\n stat pvalue padj\n <numeric> <numeric> <numeric>\nENSG00000000003 -8.16314356729037 3.26416150242775e-16 1.36240609998527e-14\n\nSummary summary()\n\nout of 17889 with nonzero total read count\nadjusted p-value < 0.1\nLFC > 0 (up) : 4526, 25%\nLFC < 0 (down) : 5062, 28%\noutliers [1] : 25, 0.14%\nlow counts [2] : 0, 0%\n(mean count < 3)"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#section-1",
- "href": "topics/rnaseq/slide_rnaseq.html#section-1",
- "title": "Bulk RNASeq Analysis",
- "section": "",
- "text": "MA plot plotMA()\n\n\n\nVolcano plot\n\n\n\n\nNormalised counts plotCounts()"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#functional-analysis-gene-ontology",
- "href": "topics/rnaseq/slide_rnaseq.html#functional-analysis-gene-ontology",
- "title": "Bulk RNASeq Analysis",
- "section": "Functional analysis • Gene Ontology",
- "text": "Functional analysis • Gene Ontology\n\n\n\nGene set analysis (GSA)\nGene set enrichment analysis (GSEA)\nGene ontology / Reactome databases"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#functional-analysis-kegg",
- "href": "topics/rnaseq/slide_rnaseq.html#functional-analysis-kegg",
- "title": "Bulk RNASeq Analysis",
- "section": "Functional analysis • Kegg",
- "text": "Functional analysis • Kegg\n\nPathway analysis (Kegg)\n\n\nWebgestalt, EnrichR, clusterProfiler, ClueGO, pathview"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#summary",
- "href": "topics/rnaseq/slide_rnaseq.html#summary",
- "title": "Bulk RNASeq Analysis",
- "section": "Summary",
- "text": "Summary\n\nSound experimental design to avoid confounding\nPlan carefully about lib prep, sequencing etc based on experimental objective\nFor DGE, biological replicates may be more important than other considerations (paired-end, sequencing depth, long reads etc)\nDiscard low quality bases, reads, genes and samples\nVerify that tools and methods align with data assumptions\nExperiment with multiple pipelines and tools\nQC! QC everything at every step\n\n\nConesa, A., Madrigal, P., Tarazona, S., Gomez-Cabrero, D., Cervera, A., McPherson, A., … & Mortazavi, A. (2016). A survey of best practices for RNA-seq data analysis. Genome biology, 17(1), 1-19."
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#further-learning",
- "href": "topics/rnaseq/slide_rnaseq.html#further-learning",
- "title": "Bulk RNASeq Analysis",
- "section": "Further learning",
- "text": "Further learning\n\n\n\nGriffith lab RNA-Seq using HiSat & StringTie tutorial\nHBC Training DGE using DeSeq2 tutorial\nRNA-Seq Blog\nSciLifeLab courses"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#section-2",
- "href": "topics/rnaseq/slide_rnaseq.html#section-2",
- "title": "Bulk RNASeq Analysis",
- "section": "",
- "text": "Thank you. Questions?"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#references",
- "href": "topics/rnaseq/slide_rnaseq.html#references",
- "title": "Bulk RNASeq Analysis",
- "section": "References",
- "text": "References\n\n\nBaruzzo, G., Hayer, K. E., Kim, E. J., Di Camillo, B., FitzGerald, G. A., & Grant, G. R. (2017). Simulation-based comprehensive benchmarking of RNA-seq aligners. Nature Methods, 14(2), 135–139. https://www.nature.com/articles/nmeth.4106\n\n\nChhangawala, S., Rudy, G., Mason, C. E., & Rosenfeld, J. A. (2015). The impact of read length on quantification of differentially expressed genes and splice junction detection. Genome Biology, 16(1), 1–10. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4531809/\n\n\nConesa, A., Madrigal, P., Tarazona, S., Gomez-Cabrero, D., Cervera, A., McPherson, A., Szcześniak, M. W., Gaffney, D. J., Elo, L. L., Zhang, X., et al. (2016). A survey of best practices for RNA-seq data analysis. Genome Biology, 17(1), 1–19.\n\n\nCorley, S. M., MacKenzie, K. L., Beverdam, A., Roddam, L. F., & Wilkins, M. R. (2017). Differentially expressed genes from RNA-seq and functional enrichment results are affected by the choice of single-end versus paired-end reads and stranded versus non-stranded protocols. BMC Genomics, 18(1), 1–13. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5442695/\n\n\nDaley, T., & Smith, A. D. (2013). Predicting the molecular complexity of sequencing libraries. Nature Methods, 10(4), 325–327. https://www.nature.com/articles/nmeth.2375\n\n\nDillies, M.-A., Rau, A., Aubert, J., Hennequet-Antier, C., Jeanmougin, M., Servant, N., Keime, C., Marot, G., Castel, D., Estelle, J., et al. (2013). A comprehensive evaluation of normalization methods for illumina high-throughput RNA sequencing data analysis. Briefings in Bioinformatics, 14(6), 671–683.\n\n\nEvans, C., Hardin, J., & Stoebel, D. M. (2018). Selecting between-sample RNA-seq normalization methods from the perspective of their assumptions. Briefings in Bioinformatics, 19(5), 776–792.\n\n\nFrancis, W. R., Christianson, L. M., Kiko, R., Powers, M. L., Shaner, N. C., & D Haddock, S. H. (2013). A comparison across non-model animals suggests an optimal sequencing depth for de novotranscriptome assembly. BMC Genomics, 14(1), 1–12. https://bmcgenomics.biomedcentral.com/articles/10.1186/1471-2164-14-167\n\n\nFu, Y., Wu, P.-H., Beane, T., Zamore, P. D., & Weng, Z. (2018). Elimination of PCR duplicates in RNA-seq and small RNA-seq using unique molecular identifiers. Bmc Genomics, 19, 1–14.\n\n\nGallego Romero, I., Pai, A. A., Tung, J., & Gilad, Y. (2014). RNA-seq: Impact of RNA degradation on transcript quantification. BMC Biology, 12(1), 1–13. https://bmcbiol.biomedcentral.com/articles/10.1186/1741-7007-12-42\n\n\nHart, S. N., Therneau, T. M., Zhang, Y., Poland, G. A., & Kocher, J.-P. (2013). Calculating sample size estimates for RNA sequencing data. Journal of Computational Biology, 20(12), 970–978. https://www.liebertpub.com/doi/10.1089/cmb.2012.0283\n\n\nHsieh, P.-H., Oyang, Y.-J., & Chen, C.-Y. (2019). Effect of de novo transcriptome assembly on transcript quantification. Scientific Reports, 9(1), 8304. https://www.nature.com/articles/s41598-019-44499-3\n\n\nKlepikova, A. V., Kasianov, A. S., Chesnokov, M. S., Lazarevich, N. L., Penin, A. A., & Logacheva, M. (2017). Effect of method of deduplication on estimation of differential gene expression using RNA-seq. PeerJ, 5, e3091. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5357343/\n\n\nLevin, J. Z., Yassour, M., Adiconis, X., Nusbaum, C., Thompson, D. A., Friedman, N., Gnirke, A., & Regev, A. (2010). Comprehensive comparative analysis of strand-specific RNA sequencing methods. Nature Methods, 7(9), 709–715. https://www.nature.com/articles/nmeth.1491\n\n\nLiao, Y., & Shi, W. (2020). Read trimming is not required for mapping and quantification of RNA-seq reads at the gene level. NAR Genomics and Bioinformatics, 2(3), lqaa068. https://pubmed.ncbi.nlm.nih.gov/33575617/\n\n\nLiu, Y., Zhou, J., & White, K. P. (2014). RNA-seq differential expression studies: More sequence or more replication? Bioinformatics, 30(3), 301–304. https://academic.oup.com/bioinformatics/article/30/3/301/228651\n\n\nManimaran, S., Selby, H. M., Okrah, K., Ruberman, C., Leek, J. T., Quackenbush, J., Haibe-Kains, B., Bravo, H. C., & Johnson, W. E. (2016). BatchQC: Interactive software for evaluating sample and batch effects in genomic data. Bioinformatics, 32(24), 3836–3838.\n\n\nMarioni, J. C., Mason, C. E., Mane, S. M., Stephens, M., & Gilad, Y. (2008). RNA-seq: An assessment of technical reproducibility and comparison with gene expression arrays. Genome Research, 18(9), 1509–1517. https://genome.cshlp.org/content/18/9/1509.long\n\n\nParekh, S., Ziegenhain, C., Vieth, B., Enard, W., & Hellmann, I. (2016). The impact of amplification on differential expression analyses by RNA-seq. Scientific Reports, 6(1), 25533. https://www.nature.com/articles/srep25533\n\n\nRoberts, A., Trapnell, C., Donaghey, J., Rinn, J. L., & Pachter, L. (2011). Improving RNA-seq expression estimates by correcting for fragment bias. Genome Biology, 12(3), 1–14.\n\n\nSchurch, N. J., Schofield, P., Gierliński, M., Cole, C., Sherstnev, A., Singh, V., Wrobel, N., Gharbi, K., Simpson, G. G., Owen-Hughes, T., et al. (2016). How many biological replicates are needed in an RNA-seq experiment and which differential expression tool should you use? Rna, 22(6), 839–851. https://rnajournal.cshlp.org/content/early/2016/03/30/rna.053959.115.abstract\n\n\nSeyednasrollah, F., Laiho, A., & Elo, L. L. (2015). Comparison of software packages for detecting differential expression in RNA-seq studies. Briefings in Bioinformatics, 16(1), 59–70.\n\n\nSigurgeirsson, B., Emanuelsson, O., & Lundeberg, J. (2014). Sequencing degraded RNA addressed by 3’tag counting. PloS One, 9(3), e91851. https://pubmed.ncbi.nlm.nih.gov/24632678/\n\n\nSoneson, C., Love, M. I., & Robinson, M. D. (2015). Differential analyses for RNA-seq: Transcript-level estimates improve gene-level inferences. F1000Research, 4.\n\n\nWagner, G. P., Kin, K., & Lynch, V. J. (2012). Measurement of mRNA abundance using RNA-seq data: RPKM measure is inconsistent among samples. Theory in Biosciences, 131, 281–285.\n\n\nWang, S., & Gribskov, M. (2017). Comprehensive evaluation of de novo transcriptome assembly programs and their effects on differential gene expression analysis. Bioinformatics, 33(3), 327–333. https://academic.oup.com/bioinformatics/article/33/3/327/2580374\n\n\nZhang, C., Zhang, B., Lin, L.-L., & Zhao, S. (2017). Evaluation and comparison of computational tools for RNA-seq isoform quantification. BMC Genomics, 18(1), 1–11.\n\n\nZhao, S., Li, C.-I., Guo, Y., Sheng, Q., & Shyr, Y. (2018). RnaSeqSampleSize: Real data based sample size estimation for RNA sequencing. BMC Bioinformatics, 19(1), 1–8. https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-018-2191-5\n\n\nZhao, S., Zhang, Y., Gordon, W., Quan, J., Xi, H., Du, S., Schack, D. von, & Zhang, B. (2015). Comparison of stranded and non-stranded RNA-seq transcriptome profiling and investigation of gene overlap. BMC Genomics, 16(1), 1–14. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4559181/\n\n\nZindler, T., Frieling, H., Neyazi, A., Bleich, S., & Friedel, E. (2020). Simulating ComBat: How batch correction can lead to the systematic introduction of false positive results in DNA methylation microarray studies. BMC Bioinformatics, 21, 1–15."
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#hands-on-tutorial",
- "href": "topics/rnaseq/slide_rnaseq.html#hands-on-tutorial",
- "title": "Bulk RNASeq Analysis",
- "section": "Hands-On tutorial",
- "text": "Hands-On tutorial\nMain exercise\n\n01 Check the quality of the raw reads with FastQC\n02 Map the reads to the reference genome using HISAT2\n03 Assess the post-alignment quality using QualiMap\n04 Count the reads overlapping with genes using featureCounts\n05 Find differentially expressed genes using DESeq2 in R\n\nBonus exercises\n\n01 Functional annotation of DE genes using GO/Reactome/Kegg databases\n02 RNA-Seq figures and plots using R\n03 Visualisation of RNA-seq BAM files using IGV genome browser\n\nData: /sw/courses/ngsintro/rnaseq/\nWork: /proj//nobackup/user/rnaseq/"
- },
- {
- "objectID": "topics/rnaseq/slide_rnaseq.html#hands-on-tutorial-1",
- "href": "topics/rnaseq/slide_rnaseq.html#hands-on-tutorial-1",
- "title": "Bulk RNASeq Analysis",
- "section": "Hands-On tutorial",
- "text": "Hands-On tutorial\n\n\n\nCourse data directory\n\n/sw/courses/ngsintro/rnaseq/\nrnaseq/\n+-- bonus/\n| +-- assembly/\n| +-- exon/\n| +-- funannot/\n| +-- plots/\n+-- documents/\n+-- main/\n +-- 1_raw/\n +-- 2_fastqc/\n +-- 3_mapping/\n +-- 4_qualimap/\n +-- 5_dge/\n +-- 6_multiqc/\n +-- reference/\n | +-- mouse_chr19_hisat2/\n +-- scripts/\n\n\nYour work directory\n\n/proj//nobackup/user/rnaseq/\n[user]/\nrnaseq/\n +-- 1_raw/\n +-- 2_fastqc/\n +-- 3_mapping/\n +-- 4_qualimap/\n +-- 5_dge/\n +-- 6_multiqc/\n +-- reference/\n | +-- mouse_chr19_hisat2/\n +-- scripts/\n +-- funannot/\n +-- plots/"
- },
- {
- "objectID": "topics/other/lab_tetralith.html",
- "href": "topics/other/lab_tetralith.html",
- "title": "Working on Tetralith cluster",
- "section": "",
- "text": "The ThinLinc client can be downloaded for free from http://www.cendio.com/downloads/clients/. It is available for Windows, Mac OS X, Linux and Solaris.\nTo use ThinLinc to connect to Tetralith:\n\nIf you haven’t already done so, download the ThinLinc client matching your local computer (i.e Windows, Linux, MacOS X or Solaris) and install it.\nStart the client.\nChange the “Server” setting to “tetralith.nsc.liu.se”.\nChange the “Name” setting to your Tetralith username (e.g x_abcde).\nYou do not need to change any other settings.\nEnter your cluster Tetralith password in the “Password” box.\nPress the “Connect” button.\nEnter the 6-digit code generated by the two-factor authentication app on your phone.\nIf you connect for the first time, you will see the “The server’s host key is not cached …” dialog. Verify that the fingerprint shown on your screen matches the one listed below! If it does not match, press Abort and then contact NSC Support!\n\nTetralith SSH server host key fingerprint: 20:19:f4:6b:38:d6:e7:ac:e6:7c:8e:38:0a:7f:34:dc\nAfter a few seconds, a window with a simple desktop session in it will appear. From the Applications menu, start a Terminal Window."
- },
- {
- "objectID": "topics/other/lab_tetralith.html#connect-to-nsc-via-thinlinc",
- "href": "topics/other/lab_tetralith.html#connect-to-nsc-via-thinlinc",
- "title": "Working on Tetralith cluster",
- "section": "",
- "text": "The ThinLinc client can be downloaded for free from http://www.cendio.com/downloads/clients/. It is available for Windows, Mac OS X, Linux and Solaris.\nTo use ThinLinc to connect to Tetralith:\n\nIf you haven’t already done so, download the ThinLinc client matching your local computer (i.e Windows, Linux, MacOS X or Solaris) and install it.\nStart the client.\nChange the “Server” setting to “tetralith.nsc.liu.se”.\nChange the “Name” setting to your Tetralith username (e.g x_abcde).\nYou do not need to change any other settings.\nEnter your cluster Tetralith password in the “Password” box.\nPress the “Connect” button.\nEnter the 6-digit code generated by the two-factor authentication app on your phone.\nIf you connect for the first time, you will see the “The server’s host key is not cached …” dialog. Verify that the fingerprint shown on your screen matches the one listed below! If it does not match, press Abort and then contact NSC Support!\n\nTetralith SSH server host key fingerprint: 20:19:f4:6b:38:d6:e7:ac:e6:7c:8e:38:0a:7f:34:dc\nAfter a few seconds, a window with a simple desktop session in it will appear. From the Applications menu, start a Terminal Window."
- },
- {
- "objectID": "topics/other/lab_tetralith.html#interactive-session",
- "href": "topics/other/lab_tetralith.html#interactive-session",
- "title": "Working on Tetralith cluster",
- "section": "2 Interactive session",
- "text": "2 Interactive session\nStart an interactive session with three compute cores for todays lab:\n\n\ninteractive -A -t 04:00:00 -n 3\n\n\nPlease adjust the requested time depending on what lab you will be working on. After a minute or so you should have gotten your interactive job.\n\n\n\n\n\n\nTip\n\n\n\nNote that your terminal prompt changed from <nsc_username>@tetralith$ to something like <nsc_username>@n424$ (or another node name), which means that you are now running on one of the compute nodes."
- },
- {
- "objectID": "topics/other/lab_tetralith.html#uppmax-singularity-container",
- "href": "topics/other/lab_tetralith.html#uppmax-singularity-container",
- "title": "Working on Tetralith cluster",
- "section": "3 UPPMAX singularity container",
- "text": "3 UPPMAX singularity container\nWe will use a singularity container (a virtual computer) that mimics the UPPMAX computing environment. Once you have started the singularity container your environment will look exactly as on UPPMAX, and the software used in this workshop will be available through the module system inside the container. Use this command to start the singularity container:\n\n\nsingularity shell -B /proj/ -B /proj//users:/proj//nobackup /proj//ngsintro.sif\n\n\n\n\n\n\n\n\nTip\n\n\n\nYour terminal prompt changed to something like <nsc_username>@offline-uppmax$. This means that you have moved into a “virtual computer” that mimics the UPPMAX environment.\n\n\nIn the singularity container type this to make the module system behave properly:\n\n\nsource /uppmax_init\n\n\nEverything from this point and onwards should be identical to running the exercise on UPPMAX. To close the singularity container later on just type exitin the terminal, but don’t do that now.\n\n\n\n\n\n\nNote\n\n\n\nNote: Since this is not actually running on uppmax, none of the queue system commands (squeue, sbatch, jobinfo etc) will work."
- },
- {
- "objectID": "topics/other/lab_tetralith.html#cluster-workspace",
- "href": "topics/other/lab_tetralith.html#cluster-workspace",
- "title": "Working on Tetralith cluster",
- "section": "4 Cluster workspace",
- "text": "4 Cluster workspace\nWhile running the UPPMAX singularity container, create a workspace for this exercise. This will be the “cluster workspace” in which you should perform the analyses, as if you would have worked on UPPMAX.\nThe name of the workspace depends on what lab you are working on. For example, if you are working on the introduction to Linux lab then call the workspace “linux_tutorial”. Once the workspace is created you should go into it.\n\n\nmkdir /proj//nobackup/<nsc_username>/linux_tutorial\ncd /proj//nobackup/<nsc_username>/linux_tutorial\n\n\nWhen you have the UPPMAX singularity container up and running you can follow regular lab instructions, except that you should not connect to UPPMAX or book a node, and you should work in the cluster workspace defined here. Also, IGV is started with a special command,see below."
- },
- {
- "objectID": "topics/other/lab_tetralith.html#igv",
- "href": "topics/other/lab_tetralith.html#igv",
- "title": "Working on Tetralith cluster",
- "section": "5 IGV",
- "text": "5 IGV\nTo start IGV at NSC type this in the command:\n\n\n/proj//igv/igv.sh\n\n\nYou can use the same command both when running the UPPMAX singularity container and from a normal terminal window at NSC."
- },
- {
- "objectID": "topics/other/lab_tetralith.html#exit-the-uppmax-singularity-container",
- "href": "topics/other/lab_tetralith.html#exit-the-uppmax-singularity-container",
- "title": "Working on Tetralith cluster",
- "section": "6 Exit the UPPMAX singularity container",
- "text": "6 Exit the UPPMAX singularity container\nWhen you are done with the lab just type exit to close the singularity container:\n\n\noffline-uppmax$ exit\n\n\nAll files and folders that you create in /proj//nobackup/nsc_username/ while running the singularity container can be reached also from outside of the container, in this folder on Tetralith:\n\n\n/proj//users/<nsc_username>/"
- },
- {
- "objectID": "topics/other/lab_open_session.html",
- "href": "topics/other/lab_open_session.html",
- "title": "Open session",
- "section": "",
- "text": "0.1 Friday at 13:15\n\n\n\n\n\n\nRoom\nTopic\nStaff\n\n\n\n\nRoom 1\nWhole genome sequencing, variant calling\nMalin Larsson, Diana Ekman\n\n\nRoom 2\nRNA-Seq, scRNA-Seq\nJulie Lorent, Juliana Assis, Prasoon Agarwal, Roy Francis\n\n\nRoom 3\nBash, Uppmax, Computing\nMartin Dahlö\n\n\nRoom 4\nEpigenetics, Chip-Seq, RNA-Seq, scRNASeq, small RNA\nAgata Smialowska, Vincent van Hoef\n\n\nRoom 5\nNGI, Assembly, Long read sequencing\nAdam Ameur, Estelle Proux\n\n\nRoom 6\nMetagenomics, Prokaryots, RNA-Seq\nDag Ahrén, Lokesh Manoharan, John Sundh"
- },
- {
- "objectID": "topics/other/lab_download_files.html",
- "href": "topics/other/lab_download_files.html",
- "title": "Uppmax IO",
- "section": "",
- "text": "Note\n\n\n\nIn code blocks, the dollar sign ($) is not to be printed. The dollar sign is usually an indicator that the text following it should be typed in a terminal window."
- },
- {
- "objectID": "topics/other/lab_download_files.html#local-workspace",
- "href": "topics/other/lab_download_files.html#local-workspace",
- "title": "Uppmax IO",
- "section": "1 Local workspace",
- "text": "1 Local workspace\nStart by creating a folder on your laptop where the files that you will download should end up. You need to have write permission in this folder. This folder will be referred to as your local workspace throughout these instructions.\nOpen a terminal window on your laptop and move into your local workspace."
- },
- {
- "objectID": "topics/other/lab_download_files.html#download-a-file-from-uppmax",
- "href": "topics/other/lab_download_files.html#download-a-file-from-uppmax",
- "title": "Uppmax IO",
- "section": "2 Download a file from UPPMAX",
- "text": "2 Download a file from UPPMAX\nLets assume that you have a file “results.txt” in the following folder on UPPMAX:\n\n\n/proj//nobackup/username/somefolder/\n\n\n\n\n\n\n\n\nNote\n\n\n\nusername and somefolder should be replaced with your real username and a real folder name.\n\n\nTo download the file to your local workspace type:\n\n\nLocal Terminal\n\nscp username@rackham.uppmax.uu.se:/proj//nobackup/username/somefolder/results.txt .\n\nNote that the last . means that the file will keep the original name."
- },
- {
- "objectID": "topics/other/lab_download_files.html#upload-a-file-to-uppmax",
- "href": "topics/other/lab_download_files.html#upload-a-file-to-uppmax",
- "title": "Uppmax IO",
- "section": "3 Upload a file to UPPMAX",
- "text": "3 Upload a file to UPPMAX\nNow lets imagine that you have developed a script on your laptop and want to upload it to UPPMAX. The script is stored in your local workspace and is called “script.sh”. Type this in your local workspace to upload the file to UPPMAX:\n\n\n\n\n\n\nNote\n\n\n\nusername and somefolder should be replaced with your real username and a real folder name.\n\n\n\n\nLocal Terminal\n\nscp script.sh username@rackham.uppmax.uu.se:/proj//nobackup/username/somefolder/."
- },
- {
- "objectID": "topics/other/lab_connect_pdc.html",
- "href": "topics/other/lab_connect_pdc.html",
- "title": "Connecting to PDC",
- "section": "",
- "text": "We will teach you two different ways to connect to PDC. From PDC point of view it doesn’t matter which one you use, and you can change whenever you want to or even use both ways simultaiously. The first one is a text-based SSH connection, and the other one is a graphical remote desktop. The latter one is useful if you need to view images or documents in GUI programs without having to first download the image/document to your own computer first. Since it is using graphics, it will require you to have an internet connection that is good and stable.\nThe reason we will teach you two ways is that some parts of this course will require you to view plots and images, and adding an additional download step would just unneccesarily complicate things."
- },
- {
- "objectID": "topics/other/lab_connect_pdc.html#ssh-connection",
- "href": "topics/other/lab_connect_pdc.html#ssh-connection",
- "title": "Connecting to PDC",
- "section": "1 SSH connection",
- "text": "1 SSH connection\nLet’s look at the text-based SSH approach first. This type of connection work just fine even on slow internet connections since it only transmitts small amounts of text when you work with it. You will need a terminal and an SSH program to do this, which fortunately is included in most major operating systems:\n\n Linux: Use Terminal (Included by default)\n OSX: Use Terminal (Included by default)\n Windows: Use Powershell or Command prompt, both should be installed by default\n\n\n1.1 Setting up SSH keys\n(If you already have done this once, please proceed to the next section instead.)\nBefore you can connect to PDC you will have to create SSH keys and tell PDC which key they should allow you to login with, and which computer it should be allowed to be used from. You will only have to create and register SSH keys once. Start by opening your terminal program (see list above) and follow these steps:\n\nGenerate a key pair.\n\nssh-keygen\nand accept the default names it suggests by just pressing enter on the question about file in which to save the key. When it asks for a password, provide the password you will use to unlock the key each time you use it. Repeat the password when asked to in the next question. Once that is done it will say something like\nuser@computerName ~ $ ssh-keygen \nGenerating public/private ed25519 key pair.\nEnter file in which to save the key (/home/user/.ssh/id_ed25519):\nEnter passphrase (empty for no passphrase): \nEnter same passphrase again: \nYour identification has been saved in /home/user/.ssh/id_ed25519\nYour public key has been saved in /home/user/.ssh/id_ed25519.pub\nThe key fingerprint is:\nSHA256:6T19rVfxVndEpmHHY0vZc8/Xu03iDBYjS04//rOOvks user@computerName\nThe key's randomart image is:\n+--[ED25519 256]--+\n| oo*|\n| . @=|\n| +oB|\n| .+ o oO|\n| S+ + o O|\n| . .o.= .o=|\n| . ooE=.+=|\n| o.o+oo|\n| .===+ |\n+----[SHA256]-----+\nThe cool thing with SSH keys (public-key cryptography) like this is that they consist of two parts. One is the public key, which you can publish on the internet for everyone to see. The other part is the private part, which should be kept hidden from everyone, like a password. The public key is given to, in this case, PDC and they will let anyone who has the private key in. Print your public key to the terminal and copy the text so that you can use it in the next step.\ncat ~/.ssh/id_ed25519.pub\nTo register our public key we will go to PDCs login portal. Following a link from that page, you will login by first logging in to your SUPR account and then validating your identity to PDC through SUPR.\n\nPress Add new key\n\nPaste the public key content you printed to the terminal with cat before into the SSH public key field in the form, and give a Key name of your choosing, then press Save.\n\nYou have now added your public key and told PDC that it should be allowed to login using this key when you are connecting form the IP (385.142.529.933 in the screenshot above) you have at the moment. Since you might get new IPs for your computer each time you connect to the internet, we will have to add a broader list of allowed IPs for this key. Press Add address on the entry for the key you just added.\n\nAdd *.liu.se to the field define one yourself. This will allow you to use this key as long as you are connecting from anywhere at Linköping university. If you want to use this key from your home university in the future you can add a similar pattern that matches your home university’s (or internet provider) hostname (e.g. *.uu.se, *.kth.se or *.telia.com).\n\n\n\n1.2 Connecting to PDC using SSH\n\n\n\n\n\n\nNote\n\n\n\nWhere username is mentioned, change to your PDC user name.\n\n\nFire up the available SSH program and enter the following:\n$ ssh username@dardel.pdc.kth.se\nEnter your password when prompted. As you type, nothing will show on the screen. No stars, no dots. It is supposed to be that way. Just type the password and press enter, it will be fine.\nNow your screen should look something like this:\nuser@computerName ~ $ ssh username@dardel.pdc.kth.se\nEnter passphrase for key '/home/user/.ssh/id_ed25519':\nLast login: Mon Oct 23 21:11:35 2024 from 385-142-529-933.bredband.obe.net\n\n --== Welcome to Dardel! ==--\n\nusername@login1 ~ $\nNow you are connected to PDC and can start working."
- },
- {
- "objectID": "topics/other/lab_connect_pdc.html#remote-desktop",
- "href": "topics/other/lab_connect_pdc.html#remote-desktop",
- "title": "Connecting to PDC",
- "section": "2 Remote desktop",
- "text": "2 Remote desktop\nYou can work on PDC interactively through a graphical-user-interface (GUI) desktop environment using ThinLinc.\nWe have a ThinLinc server running at one of the login nodes which allows users to run a remote desktop. It can be reached using the ThinLink App. For more details please look here: https://intra.kth.se/en/2.79567/support/documents/login/interactive_hpc.html"
- },
- {
- "objectID": "topics/linux/lab_linux_intro.html",
- "href": "topics/linux/lab_linux_intro.html",
- "title": "Introduction To Linux",
- "section": "",
- "text": "Note\n\n\n\nIn code blocks, the dollar sign ($) is not to be printed. The dollar sign is usually an indicator that the text following it should be typed in a terminal window."
- },
- {
- "objectID": "topics/linux/lab_linux_intro.html#connect-to-uppmax",
- "href": "topics/linux/lab_linux_intro.html#connect-to-uppmax",
- "title": "Introduction To Linux",
- "section": "1 Connect to UPPMAX",
- "text": "1 Connect to UPPMAX\nThe first step of this lab is to open a ssh connection to UPPMAX. Please refer to Connecting to UPPMAX for instructions. Once connected to UPPMAX, return here and continue reading the instructions below."
- },
- {
- "objectID": "topics/linux/lab_linux_intro.html#logon-to-a-node",
- "href": "topics/linux/lab_linux_intro.html#logon-to-a-node",
- "title": "Introduction To Linux",
- "section": "2 Logon to a node",
- "text": "2 Logon to a node\nUsually you would do most of the work in this lab directly on one of the login nodes at UPPMAX, but we have arranged for you to have one core each for better performance. This was covered briefly in the lecture notes.\n\n\nsalloc -A -t 07:00:00 -p core -n 1 --no-shell &\n\n\ncheck which node you got (replace username with your UPPMAX username)\nsqueue -u username\nshould look something like this\ndahlo@rackham2 work $ squeue -u dahlo\n JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)\n 3132376 core sh dahlo R 0:04 1 r292\ndahlo@rackham2 work $\nwhere r292 is the name of the node I got (yours will probably be different). Note the numbers in the Time column. They show for how long the job has been running. When it reaches the time limit you requested (7 hours in this case) the session will shut down, and you will lose all unsaved data. Connect to this node from within UPPMAX.\nssh -Y r292\n There is a UPPMAX specific tool called jobinfo that supplies the same kind of information as squeue that you can use as well ($ jobinfo -u username)."
- },
- {
- "objectID": "topics/linux/lab_linux_intro.html#navigation",
- "href": "topics/linux/lab_linux_intro.html#navigation",
- "title": "Introduction To Linux",
- "section": "3 Navigation",
- "text": "3 Navigation\nIt is good to know how to move around in the file system. I’m sure you all have experienced this using a graphical user interface (GUI) before, Windows Explorer in Windows and Finder in OSX. Using the command line can be confusing at first, but the more your do it, the easier it gets.\nWhen you connect to UPPMAX, you will start out in your home folder. The absolute path to your home folder is usually /home/username\nStart with looking at what you have in your home folder. The command for this ls, and it stand for LiSt (list).\nls -l\nThis is how my home folder looks like, and yours should look somewhat similar:\n[12:56:32] dahlo@rackham1 ~ $ ls -l\ntotal 4384\ndrwxr-xr-x 3 dahlo b2014068 2048 Apr 27 2017 archive\n-rw-rw-r-- 1 dahlo dahlo 49042 Sep 23 2016 bad.png\ndrwxr-xr-x 2 dahlo dahlo 2048 Mar 18 2016 data\n-rw-rw-r-- 1 dahlo dahlo 60944 Sep 23 2016 good.png\ndrwxr-xr-x 4 dahlo b2014209 2048 Oct 30 2014 igv\ndrwxrwxr-x 5 dahlo dahlo 2048 Sep 20 2016 ngsintro\ndrwx--S--- 2 dahlo dahlo 2048 May 4 2010 private\ndrwxr-xr-x 26 dahlo dahlo 4096 May 18 10:43 uppmaxScripts\ndrwxrwxr-x 5 dahlo dahlo 2201600 May 14 14:02 work\n[12:57:36] dahlo@rackham1 ~ $\nWe can start off with moving to this workshop’s project folder. Each project has its own proj folder and nobackup folder that contains all the files that belong to the project. The proj folder is backed-up, so if a file is deleted by mistake it can be retrieved from the backups, and this is where only compressed raw data and scripts are usually stored. The nobackup folder is as the name implies not backed-up, and this is where all the other files belonging to the project is kept, like everything that is created by programs that you run. Backup is expensive, so we don’t want to waste it on temporary files generated by your analysis programs, which could be re-run. The nobackup folder is the folder you will keep most of your files in.\nAs seen in the lecture, the command for moving around is cd. The command stands for Change Directory and does exactly that. It is the equivalent of double clicking a folder in a GUI.\nTo enter the course project’s proj folder, simply type cd /proj/.\nHave a look around and see which folders there are. This is the folder where all the non-replacable files belonging to a project would go, like the raw sequencing data that is delivered by the sequencing platforms. Since we’ll be creating a bunch of temporary files during these labs, we will have to do that in the nobackup folder.\nGo there using the cd command.\ncd nobackup\nWe can easily see that this is a relative path, since it does not start with a /. That means that this command will only work when you are standing in your project folder. If you are standing somewhere else and say that you want to enter a folder named nobackup, the computer will tell you that there is no folder named nobackup where you are located at the moment.\nThe absolute path to the course’s nobackup folder would be /proj//nobackup\nIt is the exact same thing as if you are using a GUI. If you are standing on your desktop, you can double click a folder which is located on your desktop. But if you are standing in another folder, you can’t double click on that same folder, because it is just not located there. You have to move to your desktop first, and then double click it.\nIf you look around in the nobackup folder, you probably only have a folder called private. This is how every nobackup folder looks before you start putting files there.\nTyping ls -l all the time is.. more annoying than one would think, so someone came up with the good idea to add a shortcut here. If you type ll, it is the same as typing ls -l. Use it from now on.\nNow we have practised moving around and looking at what we have in folders. The next step will show you how to do the same thing, but without the moving around part.\nIf we want to look at what we have in our home folder, while standing in the course’s project folder, we type ll /home/username/ and remember to substitute <username> with your own user name.\nll /home/username\nSince most programmers are lazy (efficient), there is a shortcut to your home folder so that you don’t have to write it all the time. If you write ~/ it means the same as if you would write /home/<username>/\nTry using it with ls:\nll /home/username\nor\nll ~/"
- },
- {
- "objectID": "topics/linux/lab_linux_intro.html#copy-lab-files",
- "href": "topics/linux/lab_linux_intro.html#copy-lab-files",
- "title": "Introduction To Linux",
- "section": "4 Copy lab files",
- "text": "4 Copy lab files\nNow you will need some files. To avoid all the course participants editing the same file all at once, undoing each other’s edits, each participant will get their own copy of the needed files.\nThe files are located in the folder /sw/courses/ngsintro/linux/linux_tutorial\nor they can be downloaded if you are not on UPPMAX at the moment, files.tar.gz (instruction on how to download further down)\nFor structures sake, first create a folder with your username in the nobackup folder, and a folder called linux_tutorial inside that folder, where you can put all your lab files.\nThis can be done in 2 ways:\n\n\nmkdir /proj//nobackup/username\nmkdir /proj//nobackup/username/linux_tutorial\n\n\nor\n\n\nmkdir -p /proj//nobackup/username/linux_tutorial\n\n\nThe reason for this is that Linux will not like it if you try to create the folder linux_tutorial inside a folder (the one named like your username) that does not exist yet. Then, you have the choice to either first create the one named like your username (the first way), or to tell Linux to create it for you by giving it the -p option (the second way).\nNext, copy the lab files to this folder.\ncp -r <source-folder> <destination-folder>\n\n\ncp -r /sw/courses/ngsintro/linux/linux_tutorial/* /proj//nobackup/username/linux_tutorial\n\n\n-r denotes recursively, which means all the files including sub-folders of the source folder. Without it, only files directly in the source folder would be copied, NOT sub-folders and files in sub-folders.\n Remember to tab-complete to avoid typos and too much writing.\nIf you are unable to copy the files on UPPMAX, you can download the files from this link instead of copying them. This is done with the command wget (web get). It works kind of the same way as the cp command, but you give it a source URL instead of a source file, and you specify the destination by giving it a prefix, a path that will be appended in front on the file name when it’s downloaded.\ni.e; if you want to download the file http://somewhere.com/my.file and you give it the prefix ~/analysis/, the downloaded file will be saved as ~/analysis/my.file.\nEx: wget -P <destination prefix> <source URL>"
- },
- {
- "objectID": "topics/linux/lab_linux_intro.html#unpack-files",
- "href": "topics/linux/lab_linux_intro.html#unpack-files",
- "title": "Introduction To Linux",
- "section": "5 Unpack files",
- "text": "5 Unpack files\nGo to the folder you just copied and see what is in it.\n Remember to tab-complete to avoid typos and too much writing.\n\n\ncd /proj//nobackup/username/linux_tutorial\nll\n\n\ntar.gz is a file ending given to compressed files, something you will encounter quite often. Compression decreases the size of the files which is good when downloading, and it can take thousands of files and compress them all into a single compressed file. This is both convenient for the person downloading and speeds up the transfer more than you would think.\nTo unpack the files.tar.gz file use the following line while standing in the newly copied linux_tutorial folder.\ntar -xzvf files.tar.gz\nThe command will always be the same for all tar.gz files you want to unpack. -xzvf means eXtract from a Zipped file, Verbose (prints the name of the file being unpacked), from the specified File (f must always be the last of the letters).\nLook in the folder again and see what we just unpacked:\n[user@milou2 linux_tutorial]$ ls -la\ntotal 512\ndrwxrwsr-x 12 user g20XXXXX 2048 Sep 24 13:19 .\ndrwxrwsr-x 6 user g20XXXXX 2048 Sep 24 13:19 ..\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 a_strange_name\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 backed_up_proj_folder\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 external_hdd\n-rwxrwxr-x 1 user g20XXXXX 17198 Sep 24 13:19 files.tar.gz\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 important_results\ndrwxrwsr-x 2 user g20XXXXX 129024 Sep 19 2012 many_files\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 old_project\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 24 13:19 other_file.old\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 part_1\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 part_2\ndrwxrwsr-x 2 user g20XXXXX 2048 Jan 28 2012 this_has_a_file\ndrwxrwsr-x 2 user g20XXXXX 2048 Jan 28 2012 this_is_empty\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 useless_file"
- },
- {
- "objectID": "topics/linux/lab_linux_intro.html#copying-and-moving-files",
- "href": "topics/linux/lab_linux_intro.html#copying-and-moving-files",
- "title": "Introduction To Linux",
- "section": "6 Copying and moving files",
- "text": "6 Copying and moving files\nLet’s move some files. Moving files might be one of the more common things you do, after cd and ls. You might want to organize your files in a better way, or move important result files to the project folder, who knows?\nWe will start with moving our important result to a backed-up folder. When months of analysis is done, the last thing you want is to lose your files. Typically this would mean that you move the final results to your project folder.\nIn this example, we want to move the result files only, located in the folder important_results, to our fake project folder, called backed_up_proj_folder.\nThe syntax for the move command is:\nmv <source> <destination>\nFirst, take a look inside the important_results folder:\n[user@milou2 linux_tutorial]$ ll important_results/\ntotal 0\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 dna_data_analysis_result_file_that_is_important-you_should_really_use_tab_completion_for_file_names.bam\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 temp_file-1\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 temp_file-2\nYou see that there are some unimportant temporary files that you have no interest in. Just to demonstrate the move command, I will show you how to move one of these temporary files to your backed-up project folder:\nmv important_results/temp_file-1 backed_up_proj_folder/\n Now do the same, but move the important DNA data file!\nLook in the backed-up project folder to make sure you moved the file correctly.\n[user@milou2 linux_tutorial]$ ll backed_up_proj_folder/\ntotal 0\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 dna_data_analysis_result_file_that_is_important-you_should_really_use_tab_completion_for_file_names.bam\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 last_years_data\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 temp_file-1\nAnother use for the move command is to rename things. When you think of it, renaming is just a special case of moving. You move the file to a location and give the file a new name in the process. The location you move the file to can very well be the same folder the file already is in. To give this a try, we will rename the folder a_strange_name to a better name.\nmv a_strange_name a_better_name\nLook around to see that the name change worked.\n[user@milou2 linux_tutorial]$ mv a_strange_name a_better_name\n[user@milou2 linux_tutorial]$ ll\ntotal 448\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 a_better_name\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 24 13:40 backed_up_proj_folder\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 external_hdd\n-rwxrwxr-x 1 user g20XXXXX 17198 Sep 24 13:36 files.tar.gz\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 24 13:40 important_results\ndrwxrwsr-x 2 user g20XXXXX 129024 Sep 19 2012 many_files\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 old_project\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 24 13:36 other_file.old\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 part_1\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 part_2\ndrwxrwsr-x 2 user g20XXXXX 2048 Jan 28 2012 this_has_a_file\ndrwxrwsr-x 2 user g20XXXXX 2048 Jan 28 2012 this_is_empty\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 useless_file\nSometimes you don’t want to move things, you want to copy them. Moving a file will remove the original file, whereas copying the file will leave the original untouched. An example when you want to do this could be that you want to give a copy of a file to a friend. Imagine that you have a external hard drive that you want to place the file on. The file you want to give to your friend is data from last years project, which is located in your backed_up_project_folder, backed_up_proj_folder/last_years_data\nAs with the move command, the syntax is\ncp <source> <destination>\ncp backed_up_proj_folder/last_years_data external_hdd/\nTake a look in the external_hdd to make sure the file got copied.\n[user@milou2 linux_tutorial]$ cp backed_up_proj_folder/last_years_data external_hdd/\n[user@milou2 linux_tutorial]$ ll external_hdd/\ntotal 0\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 24 13:46 last_years_data"
- },
- {
- "objectID": "topics/linux/lab_linux_intro.html#deleting-files",
- "href": "topics/linux/lab_linux_intro.html#deleting-files",
- "title": "Introduction To Linux",
- "section": "7 Deleting files",
- "text": "7 Deleting files\nSometimes you will delete files. Usually this is when you know that the file or files are useless to you, and they only take up space on your hard drive or UPPMAX account.\nTo delete a file, we use the ReMove command, rm. Syntax:\nrm <file to remove>\nIf you want, you can also specify multiple files at once, as many as you want!\nrm <file to remove> <file to remove> <file to remove> <file to remove> <file to remove>\n\n Danger\nThere is no trash bin in Linux. If you delete a file, it is gone. So be careful when deleting stuff.\n\nTry it out by deleting the useless file in the folder you are standing in. First, look around in the folder to see the file.\n[user@milou2 linux_tutorial]$ ll\ntotal 448\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 a_better_name\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 24 13:40 backed_up_proj_folder\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 24 13:46 external_hdd\n-rwxrwxr-x 1 user g20XXXXX 17198 Sep 24 13:36 files.tar.gz\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 24 13:40 important_results\ndrwxrwsr-x 2 user g20XXXXX 129024 Sep 19 2012 many_files\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 old_project\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 24 13:36 other_file.old\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 part_1\ndrwxrwsr-x 2 user g20XXXXX 2048 Sep 19 2012 part_2\ndrwxrwsr-x 2 user g20XXXXX 2048 Jan 28 2012 this_has_a_file\ndrwxrwsr-x 2 user g20XXXXX 2048 Jan 28 2012 this_is_empty\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 useless_file\nNow remove it.\nrm useless_file\nSimilarly, folders can be removed too. There is even a special command for removing folders, rmdir. They work similar to rm, except that they can’t remove files. There are two folders, this_is_empty and this_has_a_file, that we now will delete.\nrmdir this_is_empty\nrmdir this_has_a_file\nIf you look inside this_has_a_file,\n[user@milou2 linux_tutorial]$ ll this_has_a_file\ntotal 0\n-rwxrwxr-x 1 user g20XXXXX 0 Jan 28 2012 file\nyou see that there is a file in there! Only directories that are completely empty can be deleted using rmdir. To be able to delete this_has_a_file, either delete the file manually and then remove the folder\nrm this_has_a_file/file\nrmdir this_has_a_file\nor delete the directory recursively, which will remove this_has_a_file and everything inside:\nrm -r this_has_a_file"
- },
- {
- "objectID": "topics/linux/lab_linux_intro.html#open-files",
- "href": "topics/linux/lab_linux_intro.html#open-files",
- "title": "Introduction To Linux",
- "section": "8 Open files",
- "text": "8 Open files\nSo what happens if you give your files bad names like file1 or results? You take a break in a project and return to it 4 months later, and all those short names you gave your files doesn’t tell you at all what the files actually contain.\nOf course, this never happens because you ALWAYS name your files so that you definitely know what they contain. But let’s say it did happen. Then the only way out is to look at the contents of the files and try to figure out if it is the file you are looking for.\n Now, we are looking for that really good script we wrote a couple of months ago in that other project. Look in the project’s folder, old_project and find the script.\n[user@milou2 linux_tutorial]$ ll old_project/\ntotal 96\n-rwxrwxr-x 1 user g20XXXXX 39904 Sep 19 2012 a\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 stuff_1\n-rwxrwxr-x 1 user g20XXXXX 1008 Sep 19 2012 the_best\nNot so easy with those names.. We will have to use less to look at the files and figure out which is which.\nless <filename>\n Press q to close it down, use arrows keys to scroll up/down.\nHave a look at the_best, that must be our script, right?\nless old_project/the_best\nI guess not. Carrot cakes might be the bomb, but they won’t solve bioinformatic problems. Have a look at the file a instead.\nThat’s more like it!\nNow imagine that you had hundreds of files with weird names, and you really needed to find it. Lesson learned: name your files so that you know what they are! And don’t be afraid to create folders to organise files.\nAnother thing to think about when opening files in Linux is which program should you open the file in? The programs we covered during the lectures are nano and less. The main difference between these programs in that less can’t edit files, only view them. Another difference is that less doesn’t load the whole file into the RAM memory when opening it.\nSo, why care about how the program works? I’ll show you why. This time we will be opening a larger file, located in the course’s project folder. It’s 65 megabytes, so it is a tiny file compared with bio-data. Normal sequencing files can easily be 100-1000 times larger than this.\nFirst, open the file with nano.\nnano <filename>\nnano /sw/courses/ngsintro/linux/linux_additional-files/large_file\n Press Ctrl+X to close it down, use arrows to scroll up/down).\nIs the file loaded yet? Now take that waiting time and multiply it with 100-1000. Now open the file with less. Notice the difference?\nhead and tail works the same was as less in this regard. They don’t load the whole file into RAM, they just take what they need.\nTo view the first rows of the large file, use head.\nhead <filename>\nhead /sw/courses/ngsintro/linux/linux_additional-files/large_file\nRemember how to view an arbitrary number of first rows in a file?\nhead -n <number of rows to view> <filename>\nhead -n 23 /sw/courses/ngsintro/linux/linux_additional-files/large_file\nThe same syntax for viewing the last rows of a file with tail:\ntail <filename>\ntail /sw/courses/ngsintro/linux/linux_additional-files/large_file\ntail -n <number of rows to view> <filename>\ntail -n 23 /sw/courses/ngsintro/linux/linux_additional-files/large_file"
- },
- {
- "objectID": "topics/linux/lab_linux_intro.html#wildcards",
- "href": "topics/linux/lab_linux_intro.html#wildcards",
- "title": "Introduction To Linux",
- "section": "9 Wildcards",
- "text": "9 Wildcards\nSometimes (most of the time really) you have many files. So many that it would take you a day just to type all their names. This is where wildcards saves the day. The wildcard symbol in Linux is the star sign, * , and it means literally anything. Say that you want to move all the files which has names starting with sample_1_ and the rest of the name doesn’t matter. You want all the files belonging to sample_1. Then you could use the wildcard to represent the rest of the name.\n DO NOT run this command, it’s just an example.\nmv sample_1_* my_other_folder\nWe can try it out on the example files I have prepared. There are two folders called part_1 and part_2. We want to collect all the .txt files from both these folders in one of the folders. Look around in both the folders to see what they contain.\n[user@milou2 linux_tutorial]$ ll part_1/\ntotal 0\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 file_1.txt\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 file_2.txt\n[user@milou2 linux_tutorial]$ ll part_2\ntotal 0\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 file_3.txt\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 file_4.txt\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 garbage.tmp\n-rwxrwxr-x 1 user g20XXXXX 0 Sep 19 2012 incomplete_datasets.dat\nWe see that part_1 only contains .txt files, and that part_2 contains some other files as well. The best option seems to be to move all .txt files from part_2 info part_1.\nmv part_2/*.txt part_1/\nThe wildcard works with most, if not all, Linux commands. We can try using wildcards with ls. Look in the folder many_files. Yes, there are hundreds of .docx files in there. But, there are a couple of .txt files in there as well. Find out how many .docx and .txt files exist.\n Try to figure out the solution on your own. Then check the answer below.\n\n\nll many_files/*.docx\nll many_files/*.txt"
- },
- {
- "objectID": "topics/linux/lab_linux_intro.html#utility-commands",
- "href": "topics/linux/lab_linux_intro.html#utility-commands",
- "title": "Introduction To Linux",
- "section": "10 Utility commands",
- "text": "10 Utility commands\nOk, the last 2 commands for now are top and man.\ntop can be useful when you want to look at which programs are being run on the computer, and how hard the computer is working. Type top and have a look.\ntop\n Press q to exit.\nTasks: 376 total, 2 running, 290 sleeping, 0 stopped, 0 zombie\n%Cpu(s): 2.7 us, 1.3 sy, 0.0 ni, 95.3 id, 0.1 wa, 0.0 hi, 0.6 si, 0.0 st\nKiB Mem : 32590776 total, 16233548 free, 8394804 used, 7962424 buff/cache\nKiB Swap: 99999744 total, 99999744 free, 0 used. 22658832 avail Mem\n\n PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND \n 3286 roy 20 0 4557248 522400 170808 R 12.3 1.6 62:49.20 gnome-shell \n 3113 roy 20 0 1282356 385012 290540 S 8.0 1.2 42:00.49 Xorg \n22213 roy 20 0 5474576 544848 101592 S 5.6 1.7 102:55.33 zoom \n 6186 roy 20 0 710140 60504 35836 S 3.0 0.2 0:00.62 terminator \n 4248 roy 20 0 2737604 556212 140580 S 2.7 1.7 54:51.48 QtWebEngineProc \n 4632 roy 20 0 4866068 0.993g 281532 S 2.7 3.2 69:18.68 firefox \n 6548 roy 20 0 3703060 509340 189452 S 2.7 1.6 15:26.80 Web Content \n 9338 roy 20 0 4407324 846700 213324 S 2.7 2.6 15:53.71 Web Content \n 4776 roy 20 0 3310524 318364 102700 S 2.0 1.0 8:53.07 WebExtensions \n 6595 roy 20 0 4133152 992224 187540 S 1.3 3.0 18:51.05 Web Content \n 952 root -51 0 0 0 0 S 1.0 0.0 2:40.89 irq/51-SYNA2393 \n 7800 roy 20 0 1213744 238536 129392 S 1.0 0.7 11:15.74 atom \n 1 root 20 0 226080 9836 6692 S 0.7 0.0 2:07.87 systemd \n 6690 roy 20 0 3492596 560304 166588 S 0.7 1.7 8:08.77 Web Content \n12895 roy 20 0 3320332 294820 172212 S 0.7 0.9 7:05.93 Web Content \n 10 root 20 0 0 0 0 I 0.3 0.0 2:43.21 rcu_sched \n 1052 root 20 0 2505296 36228 22444 S 0.3 0.1 3:45.16 containerd \n 2631 gdm 20 0 4044492 198480 142328 S 0.3 0.6 1:55.32 gnome-shell\nEach row in top corresponds to one program running on the computer, and the column describe various information about the program. The right-most column shows you which program the row is about.\nThere are mainly 2 things that are interesting when looking in top. The column %CPU describes how much cpu is used by each program. If you are doing calculations, which is what bioinformatics is mostly about, the cpu usage should be high. The numbers in the column is how many percent of a core the program is running. If you have a computer with 8 cores, like the UPPMAX computers, you can have 8 programs using 100% of a core each running at the same time without anything slowing down. As soon as you start a 9th program, it will have to share a core with another program and those 2 programs will run at half-speed since a core can only work that fast. In the example above, program gnome-shell is using 12.3% of a core.\nThe column %MEM describes how much memory each program uses. The numbers mean how many percent of the total memory a program uses. In the example above, the program firefox is using 3.2% of the total memory.\nThe area in the top describes the overall memory usage. Total tells you how much memory the computer has, used tells you how much of the memory is being used at the moment, and free tells you how much memory is free at the moment.\nTotal = Used + Free\nA warning sign you can look for in top is when you are running an analysis which seems to take forever to complete, and you see that there is almost no cpu usage on the computer. That means that the computer is not doing any calculation, which could be bad. If you look at the memory usage at the same time, and see that it’s maxed out (used 100% of total), you can more or less abort the analysis.\nWhen the memory runs out, the computer more or less stops. Since it can’t fit everything into the RAM memory, it will start using the hard drive to store the things it can’t fit in the RAM. Since the hard drive is ~1000 times slower than the RAM, things will be going in slow-motion. The solution could be to either change the settings of the program you are running to decrease the memory usage (if the program has that functionality), or just get a computer with more memory.\nYou might wonder how the heck am I supposed to be able to remember all these commands, options and flags? The simple answer is that you won’t. Not all of them at least. You might remember ls, but was it -l or -a you should use to see hidden files? You might wish that there was a manual for these things.\nGood news everyone, there is a manual! To get all the nitty-gritty details about ls, you use the man command.\nman <command you want to look at>\nman ls\nLS(1) User Commands LS(1)\n\nNAME\n ls - list directory contents\n\nSYNOPSIS\n ls [OPTION]... [FILE]...\n\nDESCRIPTION\n List information about the FILEs (the current directory by default).\n Sort entries alphabetically if none of -cftuvSUX nor --sort is speci‐\n fied.\n\n Mandatory arguments to long options are mandatory for short options too.\n\n -a, --all\n do not ignore entries starting with .\n\n -A, --almost-all\n do not list implied . and ..\n\n --author\n with -l, print the author of each file\n\n -b, --escape\n print C-style escapes for nongraphic characters\n\n --block-size=SIZE\n scale sizes by SIZE before printing them; e.g., '--block-size=M'\n Manual page ls(1) line 1 (press h for help or q to quit)\nThis will open a less window (remember, q to close it down, arrows to scroll) with the manual page about ls. Here you will be able to read everything about ls. You’ll see which flag does what (-a is to show the hidden files, which in linux are files with a name starting with a dot .), which syntax the program has, etc. If you are unsure about how to use a command, look it up using man.\nThe man pages can be a bit tricky to understand at first, but you get used to it with time. If it is still unclear, try searching for it on the internet. You are bound to find someone with the exact same question as you, that has already asked on a forum, and gotten a good answer. 5 years ago.\n\n\n\n\n\n\nOptional\n\n\n\nIf you still have time left on the lab and you finished early, check out the Linux file permissions lab."
- },
- {
- "objectID": "topics/linux/lab_linux_advanced.html",
- "href": "topics/linux/lab_linux_advanced.html",
- "title": "Advanced Linux",
- "section": "",
- "text": "Note\n\n\n\nIn code blocks, the dollar sign ($) is not to be printed. The dollar sign is usually an indicator that the text following it should be typed in a terminal window."
- },
- {
- "objectID": "topics/linux/lab_linux_advanced.html#connect-to-uppmax",
- "href": "topics/linux/lab_linux_advanced.html#connect-to-uppmax",
- "title": "Advanced Linux",
- "section": "1 Connect to UPPMAX",
- "text": "1 Connect to UPPMAX\nThe first step of this lab is to open a ssh connection to UPPMAX. Please refer to Connecting to UPPMAX for instructions. Once connected to UPPMAX, return here and continue reading the instructions below."
- },
- {
- "objectID": "topics/linux/lab_linux_advanced.html#logon-to-a-node",
- "href": "topics/linux/lab_linux_advanced.html#logon-to-a-node",
- "title": "Advanced Linux",
- "section": "2 Logon to a node",
- "text": "2 Logon to a node\nUsually you would do most of the work in this lab directly on one of the login nodes at UPPMAX, but we have arranged for you to have one core each for better performance. This was covered briefly in the lecture notes.\nCheck which node you got when you booked resources this morning (replace username with your UPPMAX username)\nsqueue -u username\nshould look something like this\ndahlo@rackham2 work $ squeue -u dahlo\n JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)\n 3132376 core sh dahlo R 0:04 1 r292\ndahlo@rackham2 work $\nwhere r292 is the name of the node I got (yours will probably be different). Note the numbers in the Time column. They show for how long the job has been running. When it reaches the time limit you requested (7 hours in this case) the session will shut down, and you will lose all unsaved data. Connect to this node from within UPPMAX.\nssh -Y r292\nIf the list is empty you can run the allocation command again and it should be in the list:\n\n\nsalloc -A -t 03:30:00 -p core -n 1 --no-shell &\n\n\n There is a UPPMAX specific tool called jobinfo that supplies the same kind of information as squeue that you can use as well ($ jobinfo -u username)."
- },
- {
- "objectID": "topics/linux/lab_linux_advanced.html#first-things-first",
- "href": "topics/linux/lab_linux_advanced.html#first-things-first",
- "title": "Advanced Linux",
- "section": "3 First things first",
- "text": "3 First things first\nLet’s make sure nano has syntax highlighting enabled. What that will do is to paint the boring code in pretty colors, making it much easier to read it. See the difference for yourself by first looking at this file before you enable it:\nnano /sw/uppmax/bin/projplot\nClose down nano when you have seen how boing it looks without colors by pressing ctrl+x. Now, let’s enable syntax highlighting. To do this, we will simply tell nano to include the syntax highlighting instructions from a bunch of files that are already installed at uppmax. Run this command to do just that:\nfind /usr/share/nano/ -iname \"*.nanorc\" -exec echo include {} \\; >> ~/.nanorc\nThis command will put one line per language instructions (~30 of them, located in /usr/share/nano), into the nano autostart file (~/.nanorc) and put the word ‘include’ infront of each file name. That will make nano include the instructions from each of those files whenever it starts. Now have a look at the same file as before and enjoy the colors:\nnano /sw/uppmax/bin/projplot\nThen close nano and continue with the lab."
- },
- {
- "objectID": "topics/linux/lab_linux_advanced.html#copy-files-for-lab",
- "href": "topics/linux/lab_linux_advanced.html#copy-files-for-lab",
- "title": "Advanced Linux",
- "section": "4 Copy files for lab",
- "text": "4 Copy files for lab\nNow, you will need some files. To avoid all the course participants editing the same file all at once, undoing each other’s edits, each participant will get their own copy of the needed files. The files are located in the folder /sw/courses/ngsintro/linux/linux_advanced/.\nIf you for some reason have problems copying the files, or if you are not on UPPMAX when running this lab, you can download these files here. You can unpack the file using the command tar -xzvf linux_advanced.tar.gz once you have downloaded it. After unpacking, continue the lab from step 4.\nNext, copy the lab files from this folder. -r means recursively, which means all the files including sub-folders of the source folder. Without it, only files directly in the source folder would be copied, NOT sub-folders and files in sub-folders.\n Remember to use tab-complete to avoid typos and too much writing.\n\n\ncp -r <source> <destination>\ncp -r /sw/courses/ngsintro/linux/linux_advanced /proj//nobackup/username\n\n\nHave a look in /proj//nobackup/username/linux_advanced.\n\n\ncd /proj//nobackup/username/linux_advanced\n\n\nll\nIf you see files, the copying was successful."
- },
- {
- "objectID": "topics/linux/lab_linux_advanced.html#using-variables",
- "href": "topics/linux/lab_linux_advanced.html#using-variables",
- "title": "Advanced Linux",
- "section": "5 Using variables",
- "text": "5 Using variables\nVariables are like small notes you write stuff on. If you want to save the value of something to be able to use it later, variables is the way to go. Let’s try assigning values to some variables and see how we use them.\na=5\nNow the values 5 is stored in the variable named a. To use the variable we have to put a $ sign in front of it so that bash knows we are referring to the variable a and not just typing the letter a. To see the result of using the variable, we can use the program echo, which prints whatever you give it to the terminal.\necho print this text to the terminal\necho \"you can use quotes if you want to\"\nAs you see, all the words you give it are printed just the way they are. Try putting the variable somewhere in the text.\necho Most international flights leave from terminal $a at Arlanda airport\nBash will see that you have a variable there and will replace the variable name with the value the variable have before sending the text to echo. If you change the value of a and run the exact command again you will see that it changes.\na=\"five\"\necho Most international flights leave from terminal $a at Arlanda airport\nSo without changing anything in the echo statement, we can make it output different things, all depending on the value of the variable a. This is one of the main points of using variables, that you don’t have to change the code or script but you can still make it behave differently depending on the values of the variables.\nYou can also do mathematics with variables, but we have to tell bash that we want to do calculations first. We do this by wrapping the calculations inside a dollar sign (telling bash it’s a variable) and double parentheses, i.e. $((5+5)).\na=4\necho $a squared is $(($a*$a))\n Write a echo command that will print out the volume of a rectangular cuboid, with the side lengths specified by variables named x, y, and z. To see that it works correctly, the volume of a rectangular cuboid with sides 5,5,5 is 125, and for 4,5,10 is 200. Give it a couple of tries on your own first. If you get completely stuck you can see a suggested solution below.\n\n\nx=4\ny=5\nz=10\necho The volume of the rectangular cuboid with the sides $x,$y,$z is $(($x*$y*$z))."
- },
- {
- "objectID": "topics/linux/lab_linux_advanced.html#exercises",
- "href": "topics/linux/lab_linux_advanced.html#exercises",
- "title": "Advanced Linux",
- "section": "6 Exercises",
- "text": "6 Exercises\nFirst off, let’s open another terminal to UPPMAX so that you have 2 of them open. Scripting is a lot easier if you have one terminal on the command line ready to run commands and test things, and another one with a text editor where you write the actual code. That way you will never have to close down the text editor when you want to run the script you are writing on, and then open it up again when you want to continue editing the code.\nSo open a new terminal window, connect it to UPPMAX and then connect it to the node you have booked. Make sure both terminals are in the /proj//nobackup/username/linux_advanced directory, and start editing a new file with gedit or nano where you write your script. Name the file whatever you want, but in the examples I will refer to it as loop_01.sh. Write your loops to this file (or create a new file for each new example) and test run it in the other terminal.\nNOTE: If you get error messages like (gedit:27463): dconf-WARNING **: 10:59:00.575: failed to commit changes to dconf: Failed to execute child process “dbus-launch” (No such file or directory), and if you can’t change any preferences, you can try starting gedit through the graphical menu in ThinLic instead. If you are using the Xfce desktop environment you should have a start-menu-like button at the top-left of the screen named Applications, or if you right-click somewhere on the desktop you should find it in the context menu that pops up. In the Applications menu, look in the category Accessories and you should find a program called Text editor which will start gedit *(hopefully without the errors).\nThe most simple loops are the ones that loop over a predefined list. You saw examples of this in the lecture slides, for example:\nfor i in \"Print these words\" one by one;\ndo\n echo $i\ndone\nwhich will print the value of $i in each iteration of the loop. Write this loop in the file you are editing with gedit/nano, save the file, and then run it in the other terminal you have open.\nbash loop_01.sh\nAs you see, the words inside the quotation marks are treated as a single unit, unlike the words after. You can also iterate over numbers, so erase the previous loop you wrote and try this instead:\nfor number in 1 2 3;\ndo\n echo $number\ndone\nIf everything worked correctly you should have gotten the numbers 1 2 3 printed to the screen. As you might guess, this way of writing the list of numbers to iterate over will not be usable once you have more than 10 or so numbers you want to loop over. Fortunately, the creators of bash (and most other computer languages) saw this problem coming a mile away and did something about it. To quickly create a list of numbers in bash, you can use something called a sequence expression to create the list for you.\nfor whatevernameyouwant in {12..72}; \ndo \n echo $whatevernameyouwant \ndone \n\n6.1 Exercise 1\n Let’s say it’s New Year’s Eve and you want to impress your friends with a computerized countdown of the last 10 seconds of the year (don’t we all?).\n\n\n\n\n\n\nTip\n\n\n\nStart off with getting a loop to count down from 10 to 0 first. Notice how fast the computer counts? That won’t do if it’s seconds we want to be counting down. Try looking the man page for the sleep command (man sleep) and figure out how to use it. The point of using sleep is to tell the computer to wait for 1 second after printing the number, instead of rushing to the next iteration in the loop directly. Try to implement this on your own.\n\n\n\n\n# declare the values the loop will loop over\nfor secondsToGo in {10..0};\ndo\n # print out the current number\n echo $secondsToGo\n\n # sleep for 1 second\n sleep 1\n\ndone\n\n# Declare the start of a new year in a festive manner\necho Happy New Year everyone!!\n\n\n\n\n6.2 Exercise 2\nLet’s try to do something similar to the example in the lecture slides, to run the same commands on multiple files. In the Introduction to UPPMAX, we learned how to use samtools to convert BAM files to SAM files so that humans can read them. In real life you will never do this, instead you will most likely always do it the other way around. SAM files take up ~4x more space on the hard drive compared to the same file in BAM format, so as soon as you see a SAM file you should convert it to a BAM file instead to conserve hard drive space. If you have many SAM files that needs converting you don’t want to sit there and type all the commands by hand like a pleb.\n Write a script that converts all the SAM files in a specified directory to BAM files. Incidentally, you can find 50 SAM files in need of conversion in the folder called sam in the folder you copied to your folder earlier in this lab (/proj//nobackup/username/linux_advanced/sam). Bonus points if you make the program take the specified directory as an argument, and another bonus point if you get the program to name the resulting BAM file to the same name as the SAM file but with a .bam ending instead.\n\n\n\n\n\n\nTip\n\n\n\nRemember that you have to load the samtools module to be able to run it. The way you get samtools to convert a SAM file to a BAM file is by typing the following command:\nsamtools view -bS sample_1.sam > sample_1.bam\nThe -b option tells samtools to output BAM format, and the -S option tells samtools that the input is in SAM format.\nRemember, Google is a good place to get help. If you get stuck, google “bash remove file ending” or “bash argument to script” and look for hits from StackOverflow/StackExchange or similar pages. There are always many different way to solve a problem. Try finding one you understand what they do and test if you can get them to work the way you want. If not, look for another solution and try that one instead.\n\n\nBasic, without bonus points:\n\n\n# load the modules needed for samtools\nmodule load bioinfo-tools samtools/1.3\n\n# move to the SAM files directory to start with\ncd sam\n\n# use ls to get the list to iterate over\nfor file in *.sam;\ndo\n # do the actual converting, just slapping on .bam at the end of the name\n samtools view -bS $file > $file.bam\ndone\n\n\nAdvanced, with bonus points:\n\n\n# load the modules needed for samtools\nmodule load bioinfo-tools samtools/1.3\n\n# move to the SAM files directory to start with.\n# $1 contains the first argument given to the program\ncd $1\n\n# use ls to get the list to iterate over.\nfor file in *.sam;\ndo\n\n # print a message to the screen so that the user knows what is happening.\n # $(basename $file .sam) means that it will take the file name and remove .sam\n # at the end of the name.\n echo \"Converting $file to $(basename $file .sam).bam\"\n\n # do the actual converting\n samtools view -bS $file > $(basename $file .sam).bam\ndone\n\n\n\n\n6.3 Exercise 3\nLet’s add a small thing to the exercise we just did. If there already exists a BAM file with the same name as the SAM file it’s not necessary to convert it again. Let’s use an if statement to check if the file already exists before we do the conversion.\nThe following if statement will check if a given filename exists, and prints a message depending on if it exists or not.\nFILE=$1\n\nif [ -f $FILE ];\nthen\n echo \"File $FILE exists.\"\nelse\n echo \"File $FILE does not exist.\"\nfi\nWhat we want to do is to check if the file doesn’t exists. The way to do that is to invert the answer of the check if the file does exist. To do that in bash, and many other languages, is to use the exclamation mark, !, which in these kinds of logical situations means NOT or the opposite of.\nFILE=$1\n\nif [ ! -f $FILE ];\nthen\n echo \"File $FILE does not exist.\"\nfi\n Now, modify the previous exercise to only do the conversion if a file with the intended name of the BAM file doesn’t already exists. i.e; if you have a.sam and want to create a BAM file named a.bam, first check if a.bam already exists and only do the conversion if it does not exist.\nBasic:\n\n\n# load the modules needed for samtools\nmodule load bioinfo-tools samtools/1.3\n\n# move to the SAM files directory to start with.\ncd sam\n\n# use ls to get the list to iterate over.\nfor file in *.sam;\ndo\n # check if the intended output file does not already exists\n if [ ! -f $file.bam ];\n then\n # do the actual converting, just slapping on .bam at the end of the name\n samtools view -bS $file > $file.bam\n fi\ndone\n\n\nAdvanced:\n\n\n# load the modules needed for samtools\nmodule load bioinfo-tools samtools/1.3\n\ncd $1\n\n# use ls to get the list to iterate over.\n# $1 contains the first argument given to the program\nfor file in *.sam;\ndo\n\n # basename will remove the path information to the file, and will also remove the .sam ending\n filename_bam=$(basename $file .sam)\n\n # add the .bam file ending to the filename\n filename_bam=$filename_bam.bam\n\n # check if the intended output file does not already exists.\n if [ ! -f $filename_bam ];\n then\n\n # print a message to the screen so that the user knows what is happening.\n echo \"Converting $file to $filename_bam\"\n\n # do the actual converting\n samtools view -bS $file > $filename_bam\n\n else\n # inform the user that the conversion is skipped\n echo \"Skipping conversion of $file as $filename_bam already exist\"\n fi\ndone\n\n\n\n\n6.4 Bonus exercise 1\nMaths and programming are usually a very good combination, so many of the examples of programming you’ll see involve some kind of maths. Now we will write a loop that will calculate the factorial of a number. As wikipedia will tell you, “the factorial of a non-negative integer n, denoted by n!, is the product of all positive integers less than or equal to n”, i.e. multiply all the integers, starting from 1, leading up to and including a number with each other.\nThe factorial of 5, written 5!, would be 1*2*3*4*5=120. Doing this by hand would start taking its time even after a couple of steps, but since we know how to loop that should not be a problem anymore.\n Write a loop that will calculate the factorial of a given number stored in the variable $n.\n\n\n\n\n\n\nTip\n\n\n\nA problem that you will encounter is that the sequence expression, {1..10}, from the previous exercise doesn’t handle variables. This is because of the way bash is built. The sequence expressions are handled before handling the variables so when bash tries to generate the sequence, the variable names have not yet been replaced with the values they contain. This leads to bash trying to create a sequence from 1 to $n, which of course doesn’t mean anything.\nTo get around this we can use a different way of generating sequences (there are always alternatives). There is a program called seq that does pretty much the same thing as the sequence expression, and since it is a program it will be executed after the variables have been handled. It’s as easy to use as the sequence expressions; instead of writing {1..10} just write $( seq 1 10 ).\nThe $() tells bash to run something in a subshell, which pretty much means it will run the command within the paratheses and then take whatever that command printed to the screen and replace the parantheses e xpression:\necho $(seq 1 5)\nbecomes\necho 1 2 3 4 5\n\n\n\n\n# set the number you want to calculate the factorial of\nn=10\n\n# you have to initialize a variable before you can start using it.\n# Leaving this empty would lead to the first iteration of the loop trying\n# to use a variable that has no value, which would cause it to crash\nfactorial=1\n\n# declare the values the loop will loop over (1 to whatever $n is)\nfor i in $( seq 1 $n );\ndo\n\n # set factorial to whatever factorial is at the moment, multiplied with the variable $i\n factorial=$(( $factorial * $i ))\n\n # an alternative solution which gives exactly the same result, but makes it a bit more readable maybe\n # temporary_sum=$(( $factorial * $i ))\n # factorial=$temporary_sum\n\ndone\n\n# print the result\necho The factorial of $n is $factorial\n\n\n\n\n6.5 Bonus exercise 2\nNow, let’s combine everything you’ve learned so far in this course.\n Write a script that runs the pipeline from the Bioinformatics filetypes lab for each fastq file in a specified directory, using the same reference genome as in the file type exercise. Navigate to the Linux 2: File types in Bioinformatics lab on the Contents page.\nIf that sounds too easy, make the script submit a slurm job for each sample that will run the pipeline for that sample on a calculation node (1 core, 5 minutes each). And if that is too easy, add that the pipeline will use the local hard drive on the calculation node for all files used in the analysis.\nWhen the analysis is done, only fastq files and sorted and indexed BAM files should be in your folder.\n Read more about the $SNIC_TMP variable in the disk storage guide on the UPPMAX homepage.\nThere is a bunch of fastq files in the directory /proj//nobackup/username/linux_advanced/fastq/ that is to be used for this exercise.\nBasic solution:\n\n\n# make the dummy pipeline available\nexport PATH=$PATH:/sw/courses/ngsintro/linux/uppmax_pipeline_exercise/dummy_scripts\n\n# index the reference genome\nreference_indexer -r /proj//nobackup/username/filetypes/0_ref/ad2.fa\n\n# go to the input files\ncd $1\n\n# loop over all the fastq files\nfor file in *.fastq;\ndo\n\n # align the reads\n align_reads -r /proj//nobackup/username/filetypes/0_ref/ad2.fa -i $file -o $file.sam\n\n # convert the sam file to a bam file\n sambam_tool -f bam -i $file.sam -o $file.bam\n\n # sort the bam file\n sambam_tool -f sort -i $file.bam -o $file.sorted.bam\n\n # index the bam file\n sambam_tool -f index -i $file.sorted.bam\n\ndone\n\n\nAdvanced solution:\n\n\n# make the dummy pipeline available in this script\nexport PATH=$PATH:/sw/courses/ngsintro/linux/uppmax_pipeline_exercise/dummy_scripts\n\n# index the reference genome once, only if needed\nif [ ! -f /proj//nobackup/username/filetypes/0_ref/ad2.fa.idx ];\nthen\n reference_indexer -r /proj//nobackup/username/filetypes/0_ref/ad2.fa\nfi\n\n\n# find out the absolute path to the input files\ncd $1\ninput_absolute_path=$(pwd)\n\n# go back to the previous directory now that the absolute path has been saved\ncd -\n\n\n\n# loop over all the fastq files\nfor file in $input_absolute_path/*.fastq;\ndo\n\n # print status report\n echo Processing $file\n\n # save the file name without the path information for convenience\n file_basename=$(basename $file)\n\n # save the file name without the file ending for convenience\n file_prefix=$(basename $file .fastq)\n\n # print a temporary script file that will be submitted to slurm\n echo \"#!/bin/bash -l\n\n #SBATCH -A \n #SBATCH -p core\n #SBATCH -n 1\n #SBATCH -t 00:05:00\n #SBATCH -J $file_basename\n\n # make the dummy pipeline available on the calculation node\n echo \"Loading modules\"\n export PATH=$PATH:/sw/courses/ngsintro/linux/uppmax_pipeline_exercise/dummy_scripts\n\n # copy the reference genome, index and sample file to the nodes local hard drive.\n # You have to escape the dollar sign in SNIC_TMP to keep bash from resolving\n # it to its value in the submitter script already.\n echo \"Copying data to node local hard drive\"\n cp /proj//nobackup/username/filetypes/0_ref/ad2.fa* $file $SNIC_TMP/\n\n # go the the nodes local hard drive\n echo \"Changing directory to node local hard drive\"\n cd $SNIC_TMP\n\n # align the reads\n echo \"Aligning the reads\"\n align_reads -r ad2.fa -i $file_basename -o $file_prefix.sam\n\n # convert the SAM file to a BAM file\n echo \"Converting sam to bam\"\n sambam_tool -f bam -i $file_prefix.sam -o $file_prefix.bam\n\n # sort the BAM file\n echo \"Sorting the bam file\"\n sambam_tool -f sort -i $file_prefix.bam -o $file_prefix.sorted.bam\n\n # index the BAM file\n echo \"Indexing the sorted bam file\"\n sambam_tool -f index -i $file_prefix.sorted.bam\n\n # copy back the files you want to keep\n echo \"Copying results back to network storage\"\n cp $file_prefix.sorted.bam $input_absolute_path/\n cp $file_prefix.sorted.bam.bai $input_absolute_path/$file_prefix.sorted.bai\n\n echo \"Finished\"\n \" > tmp.sbatch\n\n # submit the temporary script file\n sbatch tmp.sbatch\n\ndone\n\n# remove the temporary file now that everything has been submitted\nrm tmp.sbatch"
- },
- {
- "objectID": "home_syllabus.html",
- "href": "home_syllabus.html",
- "title": "Syllabus",
- "section": "",
- "text": "SyllabusLearning outcomesEntry requirements\n\n\nThe syllabus for this workshop are as follows.\n\nWorking on the unix/linux command line\n\nCommand line navigation and related commands: cd, mkdir, rm, rmdir\nCommonly used linux tools: cp, mv, tar, less, more, head, tail, nano, grep, top, man\nWildcards\nOwnership and permissions\nSymbolic links\nPiping commands\n\nWorking on remote computing cluster\n\nLogging on to UPPMAX\nBooking resources\nJob templates, submission and queues\nModules\n\nCommonly used bioinformatic tools and pipelines\nWorking with integrated genome viewer\nVariant-calling workflow\n\nMapping reads to the reference genome\nVariant detection\nVCF file format\n\nRNA-Seq workflow\n\nRNA-Seq experimental design and considerations\nQC, mapping and gene expression counts\nDifferential gene expression analyses\n\nCurrent advances in NGS technologies\n\n\n\nAfter this workshop you should be able to:\n\nDescribe the basic principles of next generation sequencing.\nUse the Linux command line interface to manage simple file processing operations, and organise directory structures.\nConnect to and work on a remote compute cluster.\nApply programs in Linux for analysis of NGS data.\nSummarise the applications of current NGS technologies, including the weakness and strengths of the approaches and when it is appropriate to use which one of them.\nExplain common NGS file formats.\nInterpret quality control of NGS reads.\nExplain the steps involved in variant calling using whole genome sequencing data.\nIndependently perform a basic variant calling workflow on example data.\nExplain the steps involved in a differential gene expression workflow using RNA seq data.\nHands-on experience with handling of raw RNA sequencing data, QC and quantification of gene expression.\nConceptual understanding of differential gene expression analysis.\n\n\n\n\nThis is a national course open to PhD students, postdocs, group leaders and core facility staff.\nA background in genetics, cell biology, biomedicine, biochemistry, bioinformatics or comparable is desirable. To get the maximum benefit from the workshop we would like you to\nHave a research project where you are currently using next generation sequencing or are planning to use next generation sequencing. It is beneficial if you are directly performing analyses or if you have a support role and will be able to participate in a wide range of projects and transfer your knowledge to others.\nSelection criteria include correct entry requirements, motivation to attend the workshop as well as gender and geographical balance. Applicants affiliated to a Swedish institution are prioritized. International applicants are considered only if/when seats are available. Further prioritization: PhD scholars > Post-Docs, PIs, Healthcare staff > Master’s students).\nPlease note that NBIS training events do not provide any formal university credits. The training content is estimated to correspond to a certain number of credits, however the estimated credits are just guidelines. If formal credits are crucial, the student needs to confer with the home department before submitting a course application in order to establish whether the course is valid for formal credits or not."
- },
- {
- "objectID": "home_precourse.html",
- "href": "home_precourse.html",
- "title": "Precourse",
- "section": "",
- "text": "You will have to have 3 different accounts to complete the labs in this course; one in SUPR to handle the two other accounts, and one each at the compute centers PDC in Stockholm and UPPMAX in Uppsala."
- },
- {
- "objectID": "home_precourse.html#supr",
- "href": "home_precourse.html#supr",
- "title": "Precourse",
- "section": "1 SUPR",
- "text": "1 SUPR\nA SUPR/NAISS account is needed to create the accounts for the computers we will be using during the course. SUPR is also the system that you will handle your own projects in if you want to use this kind of resources in your research after the course.\nIf you do not already have one, create an account at SUPR/NAISS. Then, Log in to SUPR/NAISS, preferably using the SWAMID.\n\nBefore proceeding with applying for project membership and user accounts, we have to accept the NAISS User Agreement. Do this by clicking the Personal Information link in the left sidebar menu. The scroll down a bit until you reach the section User Agreements. If you already have accepted it the State will be a green box with the text Accepted in it. If it is anything else, click it to start the accepting process.\n\n\n\n\n\n\nTip\n\n\n\nThis is where you might run into trouble if you don’t have a SWAMID connected account. You will not be able to accept the user agreement online without it, so you will have to send in your acceptance in paper form together with a copy of your passport. This process can take a week or more, so please make sure you can accept the user agreement in good time."
- },
- {
- "objectID": "home_precourse.html#uppmax",
- "href": "home_precourse.html#uppmax",
- "title": "Precourse",
- "section": "2 UPPMAX",
- "text": "2 UPPMAX\nRemote computing cluster UPPMAX will be use as a fallback cluster, if there should be any problems at PDC. After making sure you have an accepted user agreement, go to the SUPR/NAISS Projects page and request membership to the project ID: naiss2024-22-1375\n\nOnce you are accepted to a project, you should see that project listed under your active projects.\n\nFinally you need to request a login account to UPPMAX. This will be the account you use to log in to the actual computers, so it is not the same as your SUPR account. Login to SUPR and go to the Accounts page. Under the Possible Resource Account Requests heading click on Request Account on Rackham @ UPPMAX button and confirm it on the next page. If it is missing from this page, it could be because you already have a login account created (only 1 account per person allowed), or that you have not yet gotten your project memberships approved.\nChecking your request and approving your account requires some manual work, so you might have to wait for some time (up to a working day) before the next step. When the account is ready to be created, you will receive an email to your registered email address (shown in your SUPR contact information) with information on how to proceed. You will get a one-time URL that you use to get the password (within seven days) to login to the cluster with. The link is only valid for 1 visit, so write down the password you get. When that has been done, the account ready for use within 15 minutes and you can then login using your password. Once you have logged into the cluster you can change your password by typing passwd in the terminal and follow the instuctions.\n\n\n\n\n\n\nNote\n\n\n\nYou will get one username & password for the account on UPPMAX, and one username and password for the account on PDC. Please keep track of both, we will tell you when to use which account during the workshop."
- },
- {
- "objectID": "home_precourse.html#pdc",
- "href": "home_precourse.html#pdc",
- "title": "Precourse",
- "section": "3 PDC",
- "text": "3 PDC\nRemote computing cluster Dardel at PDC in Stockholm will be use for data analyses. A PDC account is needed to use these resources. Normally you would do this the same way as when you applied for the UPPMAX account above, but PDC handles uses for their courses through another system. If you do not already have a PDC account, please fill in the form at https://blackfish.pdc.kth.se/cgi-bin/accounts/request.py at least 2 weeks before the course start and use the same email that you applied to the course with. Fill in your personal information, as well as this information about which course it is:\n\n\n\nLecturer/ Project Leader:\nMartin Dahlö\n\n\nCourse / Project Title:\nnaiss2024-22-1375\n\n\n\nWe have notified PDC who the students for our course is and they will create the account needed to login to their computers. Follow the instructions you get from them to complete your account creation. The morning session on the Monday of the course will cover how to connect to PDC, a bunch of steps that might not be trivial for novice users."
- },
- {
- "objectID": "home_precourse.html#install-tools",
- "href": "home_precourse.html#install-tools",
- "title": "Precourse",
- "section": "4 Install tools",
- "text": "4 Install tools\n\n4.1 Eduroam\nPlease make sure you have a working Eduroam wifi connection setup before the course, since we will only have wifi internet access in the computer room where we have the course. The instructions on how to get it working could differ university to university, so please refere to you home university’s instructions on how to do that. Try searching for “eduroam” and your home university, e.g. eduroam uppsala university, to find it.\n\n\n4.2 ThinLinc\n\nThinLinc allows graphical connection to UPPMAX. Download and install from https://www.cendio.com/thinlinc/download. It can be used directly from the browser but it is recommended to download and install the client for better copy/paste operation.\n\n\n4.3 XQuartz\n\nMac users will need to download and install XQuartz for X11 forwarding. ie; to forward remotely opened windows to local machine.\n\n\n4.4 MobaXterm (Optional)\n\nIf you are on a Windows system, and you want to open graphical applications from the terminal, we recommend MobaXterm. It is recommended that you INSTALL the program and not use the portable version. MobaXterm also has an integrated SFTP file browser.\n\n\n4.5 Filezilla (Optional)\n\nWhen you need to transfer data between the remote cluster and your computer, you can use the tools SCP or SFTP through the terminal. Windows users can use the SFTP browser available with MobaXterm. If you prefer a GUI to upload and download files from the remote cluster, we recommend installing FileZilla."
- },
- {
- "objectID": "home_precourse.html#connect-to-uppmax",
- "href": "home_precourse.html#connect-to-uppmax",
- "title": "Precourse",
- "section": "5 Connect to UPPMAX",
- "text": "5 Connect to UPPMAX\nSee Connecting to UPPMAX instructions listed on the Contents page.\n\n\n\n\n\n\nTip\n\n\n\nIf you want to get a primer on using the terminal, you can get started with the following Tutorial One at this link Unix tutorial for beginners. You can use https://scilifelab.github.io/courses/ngsintro/common/emu/ (or this mirror) to try the commands in the tutorial, so that you don’t mess up any real world system. If you have any questions regarding this tutorial contact: martin.dahlo [at] scilifelab.uu.se."
- },
- {
- "objectID": "home_precourse.html#create-a-user-folder",
- "href": "home_precourse.html#create-a-user-folder",
- "title": "Precourse",
- "section": "6 Create a user folder",
- "text": "6 Create a user folder\n\n\n\n\n\n\nNote\n\n\n\nWhere username is mentioned, change to your user name.\n\n\nOnce you have logged in to UPPMAX, run the following command.\n\n\n\n\nbash\n\nmkdir /proj/naiss2024-22-1375/nobackup/username\n\n\n\nThis creates a directory with your user name. You will work inside this directory for the workshop. If you cannot write to the folder, the most likely reason is that you have not requested access to the workshop project via SUPR. This is described in step 1 above.\n\n\n\n\n\n\nNote\n\n\n\nIt may take an hour or so from request approval, before you can actually write to the folder. We will check before the workshop that all students have logged in and done this, so do not forget!"
- },
- {
- "objectID": "home_contents.html",
- "href": "home_contents.html",
- "title": "Contents",
- "section": "",
- "text": "Introduction to Linux\n\nIntroduction to Linux \n\n\n\nFile types in Linux\n\nFile types in Bioinformatics \n\nLinux file permissions \n\n\n\nUppmax\n\nIntroduction to UPPMAX \n\nUPPMAX Pipelines \n\n\n\nAdvanced Linux\n\nBetter terminal experience \nAdvanced Linux \n\n\n\nVariant-calling workflow\n\nVariant-calling \n\n\n\nRNA-Seq workflow\n\nRNA-Seq workflow \nSimon’s report \n\n\n\nNGS technologies\n\nNGS technologies and challenges \nNGS Pipelines \n\n\n\nOther\n\nQC of FastQ reads \nData management \n\n\n\nUseful resources\n\nConnecting to Uppmax \nUploading & downloading files from Uppmax \nWorking on Tetralith: The backup cluster \nLinux cheatsheet \nBash cheat sheet 1 \nBash cheat sheet 2 \nBash cheat sheet 3 \nUppmax cheatsheet \nMac keyboard"
- },
- {
- "objectID": "home_info.html",
- "href": "home_info.html",
- "title": "Practical Info",
- "section": "",
- "text": "Linkoping\n\n\n\n\n\n\n\n\n\n\nLiU Campus Universitetssjukhuset58225 LinköpingSweden Monday-Tuesday: Room Papaver, Hus 511/001 Wednesday-Thursday: Room Dolomit, Hus 440 Friday: Room Antracit, Hus 440\nUse the östgötatrafiken website or the östgötatrafiken app for bus services around Linköping. The easiest way to by tickets is through the app, but you can by a travel card in advance which you can load with tickets."
- },
- {
- "objectID": "home_info.html#location",
- "href": "home_info.html#location",
- "title": "Practical Info",
- "section": "",
- "text": "Linkoping\n\n\n\n\n\n\n\n\n\n\nLiU Campus Universitetssjukhuset58225 LinköpingSweden Monday-Tuesday: Room Papaver, Hus 511/001 Wednesday-Thursday: Room Dolomit, Hus 440 Friday: Room Antracit, Hus 440\nUse the östgötatrafiken website or the östgötatrafiken app for bus services around Linköping. The easiest way to by tickets is through the app, but you can by a travel card in advance which you can load with tickets."
- },
- {
- "objectID": "home_info.html#contact",
- "href": "home_info.html#contact",
- "title": "Practical Info",
- "section": "Contact",
- "text": "Contact\nThis workshop is run by the National Bioinformatics Infrastructure Sweden (NBIS) in collaboration with National Genomics Infrastructure (NGI). Both, NGI and NBIS are platforms at SciLifeLab.\nIf you would like to get in touch with us regarding this workshop, please contact us at edu.intro-ngs [at] nbis.se."
- },
- {
- "objectID": "home_schedule.html",
- "href": "home_schedule.html",
- "title": "Schedule",
- "section": "",
- "text": "Note\n\n\n\nCoffee breaks are planned for approximately 10:00 and 14:30 every day.\n\n\n\n\n\n\n\n\nTime\nTopic\nInstructor\n\n\n \n25-Nov-2024MonRoom Papaver, Hus 511/001, LiU\n\n09:00 - 09:30\nWelcome\nMartin Dahlö\n\n\n09:30 - 10:30\nIntro to Linux\nMartin Dahlö\n\n\n10:30 - 12:00\nIntro to Linux\nMartin Dahlö\n\n\n12:00 - 13:00\nLunch\n\n\n\n13:00 - 14:00\nIntro to Uppmax\nMartin Dahlö\n\n\n14:00 - 17:00\nIntro to Uppmax\nMartin Dahlö\n \n26-Nov-2024TueRoom Papaver, Hus 511/001, LiU\n\n09:00 - 09:30\nFile types in Bioinformatics\nMartin Dahlö\n\n\n09:30 - 11:00\nFile types in Bioinformatics\nMartin Dahlö\n\n\n11:00 - 12:00\nBetter terminal experience\nMartin Dahlö\n\n\n12:00 - 13:00\nLunch\n\n\n\n13:00 - 14:00\nQuality control\nMalin Larsson\n\n\n14:00 - 15:00\nAdvanced Bash\nMartin Dahlö\n\n\n15:00 - 17:00\nAdvanced Bash\nMartin Dahlö\n \n27-Nov-2024WedRoom Dolomit, Hus 440, LiU\n\n09:00 - 12:00\nNGS tech & challenges\nAdam Ameur & Johanna Lagensjö\n\n\n12:00 - 13:00\nLunch\n\n\n\n13:00 - 14:00\nVariant-calling workflow\nMalin Larsson\n\n\n14:00 - 17:00\nVariant-calling workflow\nMalin Larsson\n \n28-Nov-2024ThuRoom Dolomit, Hus 440, LiU\n\n09:00 - 09:30\nGATK best practices\nMalin Larsson\n\n\n09:30 - 12:00\nVariant-calling workflow\nMalin Larsson\n\n\n12:00 - 13:00\nLunch\n\n\n\n13:00 - 14:00\nRNA-Seq workflow\nRoy Francis\n\n\n14:00 - 17:00\nRNA-Seq workflow\nRoy Francis\n\n\n18:00 - 20:00\nCourse Dinner\n\n \n29-Nov-2024FriRoom Antracit, Hus 440, LiU\n\n09:00 - 12:00\nRNA-Seq workflow\nRoy Francis\n\n\n12:00 - 13:00\nLunch\n\n\n\n13:00 - 14:00\nData management practices\nElin Kronander / Stephan Nylinder\n\n\n14:00 - 14:15\nNBIS\nMalin Larsson\n\n\n\n\n\n\n\n Date Venue Slides Lab Video"
- },
- {
- "objectID": "index.html",
- "href": "index.html",
- "title": "",
- "section": "",
- "text": "Working on the Linux command line\nSequence data formats and QC\nDNA variant calling workflow\nRNA sequence analyses workflow\n\n\nUpdated: 28-10-2024 at 14:26:39."
- },
- {
- "objectID": "index.html#introduction-to-bioinformatics-using-ngs-data",
- "href": "index.html#introduction-to-bioinformatics-using-ngs-data",
- "title": "",
- "section": "",
- "text": "Working on the Linux command line\nSequence data formats and QC\nDNA variant calling workflow\nRNA sequence analyses workflow\n\n\nUpdated: 28-10-2024 at 14:26:39."
- },
- {
- "objectID": "topics/linux/lab_linux_filetypes.html",
- "href": "topics/linux/lab_linux_filetypes.html",
- "title": "Filetypes",
- "section": "",
- "text": "Note\n\n\n\nIn code blocks, the dollar sign ($) is not to be printed. The dollar sign is usually an indicator that the text following it should be typed in a terminal window."
- },
- {
- "objectID": "topics/linux/lab_linux_filetypes.html#connect-to-uppmax",
- "href": "topics/linux/lab_linux_filetypes.html#connect-to-uppmax",
- "title": "Filetypes",
- "section": "1 Connect to UPPMAX",
- "text": "1 Connect to UPPMAX\nThe first step of this lab is to open a ssh connection to UPPMAX. Please refer to Connecting to UPPMAX for instructions. Once connected to UPPMAX, return here and continue reading the instructions below."
- },
- {
- "objectID": "topics/linux/lab_linux_filetypes.html#logon-to-a-node",
- "href": "topics/linux/lab_linux_filetypes.html#logon-to-a-node",
- "title": "Filetypes",
- "section": "2 Logon to a node",
- "text": "2 Logon to a node\nUsually you would do most of the work in this lab directly on one of the login nodes at UPPMAX, but we have arranged for you to have one core each for better performance. This was covered briefly in the lecture notes.\n\n\nsalloc -A -t 07:00:00 -p core -n 1 --no-shell &\n\n\ncheck which node you got (replace username with your UPPMAX username)\nsqueue -u username\nshould look something like this\ndahlo@rackham2 work $ squeue -u dahlo\n JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)\n 3132376 core sh dahlo R 0:04 1 r292\ndahlo@rackham2 work $\nwhere r292 is the name of the node I got (yours will probably be different). Note the numbers in the Time column. They show for how long the job has been running. When it reaches the time limit you requested (7 hours in this case) the session will shut down, and you will lose all unsaved data. Connect to this node from within UPPMAX.\nssh -Y r292\n There is a UPPMAX specific tool called jobinfo that supplies the same kind of information as squeue that you can use as well ($ jobinfo -u username)."
- },
- {
- "objectID": "topics/linux/lab_linux_filetypes.html#copy-lab-files",
- "href": "topics/linux/lab_linux_filetypes.html#copy-lab-files",
- "title": "Filetypes",
- "section": "3 Copy lab files",
- "text": "3 Copy lab files\nNow you will need some files. To avoid all the course participants editing the same file all at once, undoing each other’s edits, each participant will get their own copy of the needed files. The files are located in the folder /sw/courses/ngsintro/linux/filetypes\nNext, copy the lab files from this folder. -r means recursively, which means all the files including sub-folders of the source folder. Without it, only files directly in the source folder would be copied, NOT sub-folders and files in sub-folders.\n Remember to use tab-complete to avoid typos and too much writing.\n\n\ncp -r <source> <destination>\ncp -r /sw/courses/ngsintro/linux/filetypes /proj//nobackup/username/\n\n\nHave a look in /proj//nobackup/username/.\n\n\ncd /proj//nobackup/username/filetypes\ntree\n\n\nThis will print a file tree, which gives you a nice overview of the folders where you are standing in. As you can see, you have a couple of files and a couple of empty folders. In the 0_ref folder you have a reference genome in fasta format and annotations for the genome in GTF format. In 0_seq you have a fastq file containing the reads we will align."
- },
- {
- "objectID": "topics/linux/lab_linux_filetypes.html#run-pipeline",
- "href": "topics/linux/lab_linux_filetypes.html#run-pipeline",
- "title": "Filetypes",
- "section": "4 Run pipeline",
- "text": "4 Run pipeline\nThe best way to see all the different file formats is to run a small pipeline and see which files we encounter along the way. The pipeline is roughly the same steps you’ll do in the variant-calling part of the course, so for now we’ll stick with the dummy pipeline which some of you might have encoutered in the extra material for the UPPMAX exercise.\nThe programs in the dummy pipeline does not actually do any analysis but they work the same way as the real deal, although slightly simplified, to get you familiar with how to work with analysis programs. The data is from a sequencing of the adenovirus genome, which is tiny compared to the human genome (36kb vs 3gb).\nThe starting point of the pipeline are fresh reads from the sequencing machine in fastq format, and a reference genome in fasta format. The goal of the exercise is to look at our aligned reads in a genome viewer together with the annotations of the adenovirus genome.\nFirst, let’s go through the steps of the pipeline:\n\nBuild an index for the reference genome. This will speed up the alignment process. Not possible to do the analysis without it.\nAlign the reads.\nConvert the SAM file to a BAM file. We want to use the space efficiently.\nSort the BAM file. We have to sort it to be able to index it.\nIndex the BAM file. We have to index it to make it fast to access the data in the file.\nView the aligned data together with the annotations.\n\nThe first thing you usually do is to load the modules for the programs you want to run. During this exercise we’ll only run my dummy scripts that don’t actually do any analysis, so they don’t have a module of their own. What we can do instead is to manually do what module loading usually does: to modify the $PATH variable.\nThe $PATH variable specifies directories where the computer should look for programs. For instance, when you type nano, how does the computer know which program to start? You gave it the name nano, but that could refer to any file named nano in the computer, yet it starts the correct one every time. The answer is that it looks in the directories stored in the $PATH variable.\nTo see which directories that are available by default, type\necho $PATH\nIt should give you something like this, a list of directories, separated by colon signs:\ndahlo@rackham2 work $ echo $PATH\n/home/dahlo/perl//bin/:/home/dahlo/.pyenv/shims:/home/dahlo/.pyenv/bin:\n/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:\n/sbin:/opt/thinlinc/bin:/sw/uppmax/bin:/home/dahlo/usr/bin\nTry loading a module, and then look at the $PATH variable again. You’ll see that there are a few extra directories there now, after the module has been loaded.\ndahlo@rackham2 work $ module load bioinfo-tools samtools/1.10\ndahlo@rackham2 work $ echo $PATH\n/sw/apps/bioinfo/samtools/1.10/rackham/bin:/home/dahlo/perl/bin:/home/dahlo/.pyenv/shims:\n/home/dahlo/.pyenv/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:\n/usr/sbin:/sbin:/opt/thinlinc/bin:/sw/uppmax/bin:/home/dahlo/usr/bin\nTo pretend that we are loading a module, we will just add a the directory containing my dummy scripts to the $PATH variable, and it will be like we loaded the module for them.\nexport PATH=$PATH:/sw/courses/ngsintro/linux/uppmax_pipeline_exercise/dummy_scripts\nThis will set the $PATH variable to whatever it is at the moment, and add a directory at the end of it. Note the lack of a dollar sign in front of the variable name directly after export. You don’t use dollar sign when assigning values to variables, and you always use dollar signs when getting values from variables.\n\n Important\nThe export command affects only the terminal you type it in. If you have 2 terminals open, only the terminal you typed it in will have a modified path. If you close that terminal and open a new one, it will not have the modified path.\n\n\n4.1 Build index\n\nBuild an index for the reference genome.\nAlign the reads.\nConvert the SAM file to a BAM file.\nSort the BAM file.\nIndex the BAM file.\nView the aligned data together with the annotations.\n\nAll aligners will have to index the reference genome you are aligning your data against. This is only done once per reference genome, and then you reuse that index whenever you need it. All aligners have their own kind of index unfortunately, so you will have to build one index for each aligner you want to use. In this lab, we will use the dummy aligher called align_reads, and we will build a index using it’s indexing progam, called reference_indexer.\nFirst, have a look in the 0_ref folder\nll 0_ref\nYou should see 2 files: the fasta file, the gtf file. Have a look at each of them with less, just to see how they look inside. To do the actual indexing of the genome:\n Run reference_indexer.\nSyntax: reference_indexer -r <name of the fasta file you want to index>\n\n\n$ reference_indexer -r 0_ref/ad2.fa\n\n\nSince the genome is so small this should only take a second or so. The human genome will probably take a couple of hours. Look in the 0_ref folder again and see if anything has changed.\nll 0_ref\nThe new file you see is the index file created by reference_indexer. This index is in the same format as you would get from the real program samtools. Try viewing the index file with less and see how it looks. The samtools type of index contains one row per fasta record in the reference file. In this case, there is only one record for the adenovirus genome, and it’s called ad2 in the fasta file. The human reference genome typically have one record per chromosome, so a index of the human genome would then have 24 rows.\nThe numbers after the record name specifies how many bases the record has, how far into the file (in bytes) the record starts, the number of bases on each line in the record, and how many bytes each line takes up in the file. Using this information the program can quickly jump to the start location of each record, without having to read the file from the first row every time.\nOther aligners might use more complex indexing of the file to speed up the alignment process even further, e.g. creating an index over where it can find all possible “words” that you can form with 5 or so bases, making it easier to find possible matching sites for reads. If the read starts with ATGTT you can quickly look in the index and see all places in the geonome that contains this word and start looking if the rest of the read matches the area around the word.\nThis greatly decreases the number of places you have to look when looking for a match. These types of indexes usually take a long time to create (5+ hours maybe), but since you only have to do it once per reference genome it’s easily worth it, seeing how the alignment process probably would take 100s of hours without the index, instead of 6-12 hours.\nWe are now ready to align our reads.\n\n\n4.2 Align reads\n\nBuild an index for the reference genome.\nAlign the reads.\nConvert the SAM file to a BAM file.\nSort the BAM file.\nIndex the BAM file.\nView the aligned data together with the annotations.\n\n Align reads using align_reads, naming the output file ad2.sam, placed in the 1_alignment folder.\nSyntax: align_reads -r <reference genome> -i <fastq file with reads> -o <name of the output file>\n\n\n$ align_reads -r 0_ref/ad2.fa -i 0_seq/ad2.fq -o 1_alignment/ad2.sam\n\n\nThis will create a SAM file in 1_alignment called ad2.sam. Have a look at it with less. If you think the file looks messy, add a -S after less to make it stop wrapping long lines, less -S 1_alignment/ad2.sam and scroll sideways using the arrow keys. As you can see there is one row per aligned read in this file. Each row contains information about the read, like the name of the read, where in the reference genome it aligned, and also a copy of the reads sequence and quality score, among other things.\n\n\n4.3 SAM to BAM\n\nBuild an index for the reference genome.\nAlign the reads.\nConvert the SAM file to a BAM file.\nSort the BAM file.\nIndex the BAM file.\nView the aligned data together with the annotations.\n\n The next step is to convert the SAM file to a BAM file. This is more or less just compressing the file, like creating a zip file. To do that we will use the dummy program sambam_tools, telling it we want to convert a file to BAM (-f bam), which file we want to convert (-i), where it should save the resulting BAM file (-o). Save the BAM file in the 2_bam folder and name it ad2.bam.\nSyntax: sambam_tool -f bam -i <sam file> -o <bam>\n\n\n$ sambam_tool -f bam -i 1_alignment/ad2.sam -o 2_bam/ad2.bam\n\n\nHave a look in the 2_bam folder.\nll 2_bam\nThe created BAM file is an exact copy of the SAM file, but stored in a much more efficient format. Aligners usually have an option to output BAM format directly, saving you the trouble to convert it yourself, but not all tools can do this (they really should though). Have a look at the difference in file size, though in this example it’s quite an extreme difference (2.9 MB vs 0.3 MB). The quality score of all reads is the same (BBBBBBBBB..), and files with less differences are easier to compress. Usually the BAM file is about 25% of the size of the SAM file.\nSince the BAM format is a binary format we can’t look at it with less. We would have to use a tool, like samtools which you will probably see later in the week, to first convert the file back to a SAM file before we can read it. In that case we can just look at the SAM file before converting it since they will be the same.\n\n\n4.4 Sort & index BAM\n\nBuild an index for the reference genome.\nAlign the reads.\nConvert the SAM file to a BAM file.\nSort the BAM file.\nIndex the BAM file.\nView the aligned data together with the annotations.\n\nA BAM file is taking up much less space than the SAM file, but we can still improve performance. An indexed BAM file is infinitely faster for programs to work with, but before we can index it, we have to sort it since it’s not possible to index an unsorted file in any meaningful way.\n To sort the BAM file we’ll use the sambam_tool again, but specifying a different function, -f sort instead. Tell it to store the sorted BAM file in the 3_sorted folder and name the file ad2.sorted.bam\nSyntax: sambam_tool -f sort -i <unsorted bam file> -o <sorted bam file>\n\n\n$ sambam_tool -f sort -i 2_bam/ad2.bam -o 3_sorted/ad2.sorted.bam\n\n\nThis will sort the ad2.bam file and create a new BAM file which is sorted, called ad2.sorted.bam.\n Now when we have a sorted BAM file, we can index it. Use the command\nSyntax: sambam_tool -f index -i <sorted bam file>\n\n\n$ sambam_tool -f index -i 3_sorted/ad2.sorted.bam\n\n\nThis will create an index named ad2.sorted.bam.bai in the same folder as the ad2.sorted.bam file is located. It’s nicer to have the .bam and .bai named to the same “prefix”, so rename the .bai file to not have the .bam in its name.\nmv 3_sorted/ad2.sorted.bam.bai 3_sorted/ad2.sorted.bai\n\n\n4.5 View in a genome viewer\n\nBuild an index for the reference genome.\nAlign the reads.\nConvert the SAM file to a BAM file.\nSort the BAM file.\nIndex the BAM file.\nView the aligned data together with the annotations.\n\nNow that we have to data aligned and prepared for easy access, we will view it in a genome viewer together with the annotations for the genome. Have a look at the annotations file with less.\nless -S 0_ref/ad2.gtf\nThe -S will tell less to not wrap the lines, and instead show one line per line. If the line is longer than the window, you can user the left and right arrow to scroll to the left and right. Many tabular files are much more readable when using the -S option. Try viewing the file without it and see the difference.\nTo view the file, we will use the program IGV (Integrated Genome Viewer). Before we can do this, we have to load the module for IGV.\nNOTE: Many Mac users are getting only black background when running IGV using XQuartz. There is a command you can run on your computer to fix this.\n# open a terminal on your mac and run this command:\ndefaults write org.xquartz.X11 enable_render_extension 0\n\nNow you have to quit and reinstall [XQuartz](https://www.xquartz.org/), then reconnect to uppmax and it should now look the way it should.\n If you are using a Mac you might have to install the program XQuartz, if you have not already installed that program. By using -Y in your ssh command you enable graphical transfer over ssh, but you will also have to have a program able to receive the graphics in order to display it.\nmodule load bioinfo-tools IGV/2.4.2\nStart it by typing the following command (now we’ll find out if you used -Y in all your ssh connections!):\nigv.sh\n\n\n\n\n\n\nTip\n\n\n\nIf you notice that IGV over Xforwarding is excruciatingly slow, you can try to use the web based ThinLinc client instead. Unfortunately this requires you to have set up a two factor authentification (2FA) with UPPMAX, so it’s something you can try on your own. Instructions for setting up the 2FA at UPPMAX. When you are all set up, go to the address https://rackham-gui.uppmax.uu.se and login with your normal UPPMAX username and password together with your 2FA (described at the login screen). This will get you a remote desktop on one of the login nodes, and you can open a terminal and run IGV there instead. Once IGV is started, either using Xforwarding or the remote desktop in your web browser, we are ready to go.\n\n\nThere are 3 files we have to load in IGV.\nThe first is the reference genome. Press the menu button located at “Genomes - Load Genome from File…” and find your reference genome in 0_ref/ad2.fa. If you are having trouble finding your files, note that IGV always starts in your home directory. Use the dropdown menu at the top to navigate to /proj//nobackup/….\nThe second file you have to load is the reads. Press the menu button “File - Load from File…” and select your 3_sorted/ad2.sorted.bam.\nThe last file you have to load is the annotation data. Press “File - Load from File…” again and select you annotation file in 0_ref/ad2.gtf.\nThis will show you the reference genome, how all the reads are aligned to it, and all the annotation data. Try zooming in on an area and have a look at the reads and annotations. The figures you see in the picture are all derived from the data in the files you have given it.\nAt the top of the window you have the overview of the current chromosome you are looking at, which tells you the scale you are zoomed at for the moment. When you zoom in you will see a red rectangle apper which shows you which portion of the chromosome you are looking at. Just below the scale you’ll see the coverage graph, which tells you how many reads cover each position along the reference genome. The colored bands you see here and there are SNPs, i.e. positions where the reads of your sample does not match the reference genome.\nAll the reads, the larger area in the middle of the window, are drawn from the data in the BAM file using the chromosome name, the starting position and the ending position of each read. When you zoom in more you will be able to see individual reads and how they are aligned. The annotation in GTF format are all plotted using the data in the GTF file, visible just under all the reads, are shown as blue rectangles.\nThe reference genome, a fasta file containing the DNA sequence of the reference genome, is visible at the bottom of the window if you zoom to the smallest level so you can see the bases of the genome."
- },
- {
- "objectID": "topics/linux/lab_linux_filetypes.html#create-a-cram-file",
- "href": "topics/linux/lab_linux_filetypes.html#create-a-cram-file",
- "title": "Filetypes",
- "section": "5 Create a CRAM file",
- "text": "5 Create a CRAM file\nThe CRAM format is even more efficient than the BAM format. To create a CRAM file we’ll have to use samtools, so we will load the module for it.\nmodule load bioinfo-tools samtools/1.10\n Tell samtools that you want CRAM output (-C) and specify which reference genome it should use to do the CRAM conversion (-T)\nSyntax: samtools view -C -T <reference genome> -o <name of cram file> <bam file to convert>\n\n\n$ samtools view -C -T 0_ref/ad2.fa -o 4_cram/ad2.cram 3_sorted/ad2.sorted.bam\n\n\nCompare the sizes of the convered BAM file and the newly created CRAM file:\nll -h 3_sorted/ad2.sorted.bam 4_cram/ad2.cram\nThis will list both the files, and print the file size in a human readable format (-h). The CRAM file is roughly 1/3 of the size of the BAM file. This is probably because all the reads in the simulated data has the same quality value (BBBBBBBBBB). Fewer types of quality values are easier to compress, hence this amazing compression ratio. Real data will have much more diverse quality scores, and the CRAM file would be pethaps 70-80% of the original BAM file.\n\n\n\n\n\n\nOptional\n\n\n\nIf you have been fast to finish this lab and you still have time left (or just can’t get enough of linux stuff), please have a look at the advanced linux tutorial where you can learn the basics in bash programming using variables, loops and control statements."
- },
- {
- "objectID": "topics/linux/lab_linux_permissions.html",
- "href": "topics/linux/lab_linux_permissions.html",
- "title": "File permissions",
- "section": "",
- "text": "Note\n\n\n\nIn code blocks, the dollar sign ($) is not to be printed. The dollar sign is usually an indicator that the text following it should be typed in a terminal window."
- },
- {
- "objectID": "topics/linux/lab_linux_permissions.html#ownership-permissions",
- "href": "topics/linux/lab_linux_permissions.html#ownership-permissions",
- "title": "File permissions",
- "section": "1 Ownership & Permissions",
- "text": "1 Ownership & Permissions\nAs Linux can be a multi-user environment it is important that files and directories can have different owners and permissions to keep people from editing or executing your files.\n\n1.1 Owners\nThe permissions are defined separately for users, groups and others.\nThe user is the username of the person who owns the file. By default the user who creates a file will become its owner. The group is a group of users that co-own the file. They will all have the same permissions to the file. This is useful in any project where a group of people are working together. The others is quite simply everyone else’s permissions.\n\n\n1.2 Permissions\nThere are four permissions that a file or directory can have. Note the one character designations/flags, r,w,x and -.\nIn all cases, if the file or directory has the flag it means that it is enabled.\nRead: r\nFile: Whether the file can be opened and read.\nDirectory: Whether the contents of the directory can be listed.\nWrite: w\nFile: Whether the file can be modified. (Note that for renaming or deleting a file you need additional directory permissions.)\nDirectory: Whether the files in the directory can be renamed or deleted.\nExecute: x\nFile: Whether the file can be executed as a program or shell script.\nDirectory: Whether the directory can be entered using cd.\nNo permissions: -"
- },
- {
- "objectID": "topics/linux/lab_linux_permissions.html#interpreting-permissions",
- "href": "topics/linux/lab_linux_permissions.html#interpreting-permissions",
- "title": "File permissions",
- "section": "2 Interpreting permissions",
- "text": "2 Interpreting permissions\nMake an empty directory we can work in and make a file.\n\n\ncd /proj//nobackup/username\nmkdir advlinux\ncd advlinux\ntouch filename\nls -lh\ntotal 0\n -rw-r--r-- 1 S_D staff 0B Sep 21 13:54 filename\n\n\n(-lh means long and human readable, displaying more information about the files or directories in a human understandable format)\nThis shows us a cryptic line for each file/folder, where the columns are as following:\n-rw-rw-r-- : permissions\n1 : number of linked hard-links\nS_D : owner of the file\nstaff : to which group this file belongs to\n0 : file size\nSep 21 13:54 : modification/creation date and time\nfilename : file/directory name\nThe first segment, -rw-r--r--, describes the ownerships and permissions of our newly created file. The very first character, in this case -, shows the file’s type. It can be any of these:\nd = directory - = regular file l = symbolic link s = Unix domain socket p = named pipe c = character device file b = block device file\nAs expected the file we have just created is a regular file. Ignore the types other than directory, regular and symbolic link as they are outside the scope of this course.\nThe next nine characters, in our case rw-r--r--, can be divided into three groups consisting of three characters in order from left to right. In our case rw-, r-- and r--. The first group designates the users permissions, the second the groups permissions and the third the others permissions. As you may have guessed the within group permissions are ordered, the first always designates read permissions, the second write and the third executability.\nThis translates our files permissions to say this -rw-r--r--:\n- It is a regular file.\n- The user has read & write permission, but not execute.\n- The group has read permission but not write and execute.\n- Everyone else (other), have read permission but not write and execute.\nAs another example, lets create a directory.\nmkdir directoryname\nls -lh\n\ntotal 0\ndrwxr-xr-x 2 S_D staff 68B Sep 21 14:41 directoryname\n-rw-r--r-- 1 S_D staff 0B Sep 21 13:54 filename\nAs you can see the first character correctly identifies it as d, a directory, and all user groups have x, execute permissions, to enter the directory by default."
- },
- {
- "objectID": "topics/linux/lab_linux_permissions.html#editing-ownership-permissions",
- "href": "topics/linux/lab_linux_permissions.html#editing-ownership-permissions",
- "title": "File permissions",
- "section": "3 Editing Ownership & Permissions",
- "text": "3 Editing Ownership & Permissions\nThe command to set file permission is chmod which means CHange MODe. Only the owner can set file permissions.\n\nFirst you decide which group you want to set permissions for. User, u, group, g, other, o, or all three, a.\nNext you either add, +, remove, -, or wipe out previous and add new, =, permissions.\nThen you specify the kind of permission: r,w,x, or -.\n\nLets revisit our example file and directory to test this.\nls -lh\n\ntotal 0\ndrwxr-xr-x 2 S_D staff 68B Sep 21 14:41 directoryname\n-rw-r--r-- 1 S_D staff 0B Sep 21 13:54 filename\n\nchmod a=x filename\nls -lh\n\ntotal 0\ndrwxr-xr-x 2 S_D staff 68B Sep 21 14:41 directoryname\n---x--x--x 1 S_D staff 0B Sep 21 13:54 filename\nAs you can see this affected all three, a, it wiped the previous permissions, =, and added an executable permission, x, to all three groups.\nTry some others both on the file and directory to get the hang of it.\nchmod g+r filename\nchmod u-x filename\nchmod ug=rx filename\nchmod a=- filename\nchmod a+w directoryname\n In no more than two commands, change the file permissions from\n----------\nto\n-rw-rw--wx\nNotice also that we here gave everyone writing permission to the file, that means that ANYONE can write to the file. Not very safe.\n\n\nchmod ug+rw filename\nchmod o=wx filename"
- },
- {
- "objectID": "topics/linux/lab_linux_permissions.html#symbolic-links",
- "href": "topics/linux/lab_linux_permissions.html#symbolic-links",
- "title": "File permissions",
- "section": "4 Symbolic links",
- "text": "4 Symbolic links\n\n4.1 Files\nMuch like a windows user has a shortcut on his desktop to WorldOfWarcraft.exe, being able to create links to files or directories is good to know in Linux. An important thing to remember about symbolic links is that they are not updated, so if you or someone else moves or removes the original file/directory the link will stop working.\nMake sure you are standing in the directory /proj//nobackup/username/advlinux. Then remove our old file and directory.\n\n Danger\nrm -r * permanently removes all folder and subfolders from where you are standing. Be extremely careful when using this. Always double check current working directory or path.\n\nrm -r *\nNow that the directory is empty, let’s make a new folder and a new file in that folder.\nmkdir stuff\ntouch stuff/linkfile\nLets put some information into the file, just put some text, anything, like “slartibartfast” or something.\nnano stuff/linkfile\nNow let’s create a link to this file in our original folder. ln stands for link and -s makes it symbolic. The other options are not in the scope of this course, but feel free to read about them on your own, https://stackoverflow.com/a/29786294\nln -s stuff/linkfile\nls -l\n\ntotal 8\nlrwxr-xr-x 1 S_D staff 14B Sep 21 15:38 linkfile -> stuff/linkfile\ndrwxr-xr-x 3 S_D staff 102B Sep 21 15:36 stuff\nNotice that we see the type of the file is l, for symbolic link, and that we have a pointer after the links name for where the link goes, -> stuff/linkfile.\nIf want you to change the information in the file using the link file, then you should change the information in the original file.\n Change the information using the original file, then check the link. Has the information changed in the original file and the linked file?\n Now move or delete the original file. What happens to the link? What information is there now if you open the link?\n Now create a new file in stuff/ with exactly the same name that your link file is pointing too with new information in it. What happens now? Is the link still broken? What is the content of the linked file now?\n\n\n4.2 Directories\nNow let’s create a link to a directory. Lets clean our workspace.\nrm -r *\nAnd create a directory three, arbitrarily, two directories away. The -p option to mkdir will make it create all 3 directories as needed. Without it, it would crash saying it can’t create three because the directory two does not exist.\nmkdir -p one/two/three\nNow let’s enter the directory and create some files there.\ncd one/two/three\ntouch a b c d e\nls -lh\n\ntotal 0\n-rw-r--r-- 1 S_D staff 0B Sep 21 16:11 a\n-rw-r--r-- 1 S_D staff 0B Sep 21 16:11 b\n-rw-r--r-- 1 S_D staff 0B Sep 21 16:11 c\n-rw-r--r-- 1 S_D staff 0B Sep 21 16:11 d\n-rw-r--r-- 1 S_D staff 0B Sep 21 16:11 e\nReturn to our starting folder and create a symbolic link to folder three.\ncd ../../..\nln -s one/two/three\nls -lh\n\ntotal 8\ndrwxr-xr-x 3 S_D staff 102B Sep 21 16:11 one\nlrwxr-xr-x 1 S_D staff 13B Sep 21 16:13 three -> one/two/three\nOnce again, we see that it is correctly identified as a symbolic link, l, that it’s default name is the same as the directory it is pointing to, same as the files link had the same name as the file by default previously, and that we have the additional pointer after the links name showing us where it’s going.\n Run ls and cd on the link. Does it act just as if you were standing in directory two/ performing the very same actions on three/?\n After entering the link directory using cd, go back one step using cd .., where do you end up?\nMoving, deleting or renaming the directory would, just like in the case with the file, break the link."
- },
- {
- "objectID": "topics/linux/lab_linux_permissions.html#grep",
- "href": "topics/linux/lab_linux_permissions.html#grep",
- "title": "File permissions",
- "section": "5 Grep",
- "text": "5 Grep\nSome files can be so large that opening it in a program would be very hard on your computer. It could be a file containing biological data, it could be a log file of a transfer where we want check for any errors. No matter the reason, a handy tool to know is the grep command.\ngrep searches for a specific string in one or more files. Case sensitive/insensitive or regular expressions work as well.\nLet’s start, as always, by cleaning our directory.\nrm -r *\nThen let’s create a file with some text in it that we can work with. I have supplied some great text below.\nnano textfile\n\nCats sleep anywhere, any table, any chair.\nTop of piano, window-ledge, in the middle, on the edge.\nOpen draw, empty shoe, anybody's lap will do.\nFitted in a cardboard box, in the cupboard with your frocks.\nAnywhere! They don't care! Cats sleep anywhere.\nNow let’s see how the grep command works. The syntax is:\ngrep \"string\" filename/filepattern\nSome examples for you to try and think about:\ngrep \"Cat\" textfile\ngrep \"cat\" textfile\nAs you can see the last one did not return any results. Add a -i for case insensitive search.\ngrep -i \"cat\" textfile\nNow let’s copy the file and check both of them together by matching a pattern for the filenames.\ncp textfile textcopy\ngrep \"Cat\" text*\nThe * will ensure that any file starting with text and then anything following will be searched. This example would perhaps be more real if we had several text files with different texts and we were looking for a specific string in any of them.\nCopy the file sample_1.sam to your folder using the command below\ncp /sw/courses/ngsintro/linux/linux_additional-files/sample_1.sam .\n Use grep to search in the file for a specific string of nucleotides, for example:\ngrep \"TACCACCGAAATCTGTGCAGAGGAGAACGCAGCTCCGCCCTCGCGGTGCTCTCCGGGTCTGTGCTGAGGAG\" sample_1.sam\n Try with shorter sequences. When do you start getting lots of hits? This file is only a fraction of a genome, you would have gotten many times more hits doing this to a complete many GB large sam file.\n Use grep to find all lines with chr1 in them. This output is too much to be meaningful. Send it to a file (>) where you have now effectively stored all the chromosome 1 information."
- },
- {
- "objectID": "topics/linux/lab_linux_permissions.html#piping",
- "href": "topics/linux/lab_linux_permissions.html#piping",
- "title": "File permissions",
- "section": "6 Piping",
- "text": "6 Piping\nA useful tool in linux environment is the use of pipes. What they essentially do is connect the first command to the second command and the second command to the third command etc for as many commands as you want or need.\nThis is often used in UPPMAX jobs and other analysis as there are three major benefits. The first is that you do not have to stand in line to get a core or a node twice. The second is that you do not generate intermediary data which will clog your storage, you go from start file to result. The third is that it may actually be faster.\nThe pipe command has this syntax\ncommand 1 | command 2\nThe | is the pipe symbol (on mac keyboard alt+7), signifying that whatever output usually comes out of command 1 should instead be directly sent to command 2 and output in the manner that command 2 inputs.\nIn a hypothetical situation you have a folder with hundreds of files and you know the file you are looking for is very large but you can’t remember its name.\nLet’s do a ls -l in the /etc directory and pipe the output to be sorted by file size. -n means we are sorting numerically and not alphabetically, -k 5 says look at the fifth column of output, which happens to be the file size of ls command.\nls -l /etc | sort -k 5 -n\nAn example use would be to align a file and directly send the now aligned file to be converted into a different format that may be required for another part of the analysis.\nThe next step requires us to use a bioinformatics software called samtools. To be able to use this program we first have to load the module for it. We will cover this in the UPPMAX lectures, so if you are a bit too fast for you own good, you will just have to type this command:\nmodule load bioinfo-tools samtools\nHere is an example where we convert the samfile to a bamfile (-Sb literally means the input is Sam and to output in bam) and pipe it to immediately get sorted, not even creating the unsorted bamfile intermediary. Notice that samtools is made to take the single - after samtools sort as the position of the piped data from samtools view.\nsamtools view -bS sample_1.sam | samtools sort - -o outbam\nThis should have generated a file called outbam.bam in your current folder. We will have some more examples of pipes in the next section."
- },
- {
- "objectID": "topics/linux/lab_linux_permissions.html#word-count",
- "href": "topics/linux/lab_linux_permissions.html#word-count",
- "title": "File permissions",
- "section": "7 Word Count",
- "text": "7 Word Count\nwc for Word Count is a useful command for counting the number of occurrences of a word in a file. This is easiest explained with an example.\nLet’s return to our sample_1.sam.\nwc sample_1.sam\n233288 3666760 58105794 sample_1.sam\nThis can be interpreted like this:\nNumber of lines = 233288\nNumber of words = 3666760\nNumber of characters = 58105794\nTo make this more meaningful, let’s use the pipes and grep command seen previously to see how many lines and how many times the string of nucleotides CATCATCAT exist in this file.\ngrep \"CATCATCAT\" sample_1.sam | wc\n60 957 15074\nTo see only the line count you can add -l after wc and to count only characters -m.\n Output only the amount of lines that have chr1 in them from sample_1.sam.\n\n\ngrep \"chr1\" sample_1.sam | wc -l\n\n\n Count the lines containing CATCATCAT in the outbam.bam file.\n\n\nsamtools view outbam.bam | grep \"CATCATCAT\" | wc -l"
- },
- {
- "objectID": "topics/linux/lab_linux_permissions.html#bonus-exercise-1",
- "href": "topics/linux/lab_linux_permissions.html#bonus-exercise-1",
- "title": "File permissions",
- "section": "8 Bonus exercise 1",
- "text": "8 Bonus exercise 1\nThese are some harder assignments, so don’t worry about it if you didn’t have time to do it.\nLets look at grep and use some regular expressions http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/\n From file sample_1.sam find all lines that start with @ and put them in a file called at.txt.\n\n\ngrep \"^@\" sample_1.sam > at.txt\n\n\n Find all the lines that end with at least 3 numbers from at.txt. Sometimes, you have to escape {} with \\{\\})\n\n\ngrep \"[0-9]\\{3\\}$\" sample_1.sam"
- },
- {
- "objectID": "topics/linux/lab_linux_permissions.html#bonus-exercise-2",
- "href": "topics/linux/lab_linux_permissions.html#bonus-exercise-2",
- "title": "File permissions",
- "section": "9 Bonus exercise 2",
- "text": "9 Bonus exercise 2\n[sed](http://www.grymoire.com/Unix/Sed.html) is a handy tool to replace strings in files.\n You have realized that all the chromosomes have been misnamed as chr3 when they should be chr4. Use sed to replace chr3 with chr4 in sample_1.sam and output it to sample_2.sam.\n The solution to this replaces the first instance on each line of chr3. What if we have multiple instances? What if we had wanted to replace chr1? This would effect chr10-19 as well! There are many things to consider :).\n\n\nsed \"s/chr1/chr2/\" sample_1.sam > sample_2.sam"
- },
- {
- "objectID": "topics/linux/lab_linux_permissions.html#bonus-exercise-3",
- "href": "topics/linux/lab_linux_permissions.html#bonus-exercise-3",
- "title": "File permissions",
- "section": "10 Bonus exercise 3",
- "text": "10 Bonus exercise 3\nBash loops are great for moving or renaming multiple files as well as many many other uses.\nCreate a couple of files as seen below\ntouch one.bam two.sam three.bam four.sam five.bam six.sam\n All the files are actually in bam format. What a crazy mistake! Create a bash loop that changes all files ending in .sam to end with .bam instead.\n The bash loop syntax is this:\nfor _variable_ in _pattern_; do _command with $variable_; done\n To rename file1 to file2 you write this:\nmv file1 file2\nwhich effectively is the same thing as\ncp file1 file2\nrm file1\n Ponder how this can be used to your advantage:\ni=filename\necho ${i/name}stuff\nfilestuff\n\n\nfor f in *.sam\ndo\n mv $f ${f/.sam}.bam;\ndone"
- },
- {
- "objectID": "topics/other/lab_connect_uppmax.html",
- "href": "topics/other/lab_connect_uppmax.html",
- "title": "Connecting to UPPMAX",
- "section": "",
- "text": "We will teach you two different ways to connect to UPPMAX. From UPPMAX point of view it doesn’t matter which one you use, and you can change whenever you want to or even use both ways simultaiously. The first one is a text-based SSH connection, and the other one is a graphical remote desktop. The latter one is useful if you need to view images or documents in GUI programs without having to first download the image/document to your own computer first. Since it is using graphics, it will require you to have an internet connection that is good and stable.\nThe reason we will teach you two ways is that some parts of this course will require you to view plots and images, and adding an additional download step would just unneccesarily complicate things."
- },
- {
- "objectID": "topics/other/lab_connect_uppmax.html#ssh-connection",
- "href": "topics/other/lab_connect_uppmax.html#ssh-connection",
- "title": "Connecting to UPPMAX",
- "section": "1 SSH connection",
- "text": "1 SSH connection\nLet’s look at the text-based SSH approach first. This type of connection work just fine even on slow internet connections since it only transmitts small amounts of text when you work with it. You will need an SSH program to do this, which fortunately is included in most major operating systems:\n\n Linux: Use Terminal (Included by default)\n OSX: Use Terminal (Included by default)\n Windows: Use Powershell or Command prompt, both should be installed by default\n\n\n\n\n\n\n\nNote\n\n\n\nWhere username is mentioned, change to your user name.\n\n\nFire up the available SSH program and enter the following:\n$ ssh username@rackham.uppmax.uu.se\nEnter your password when prompted. As you type, nothing will show on the screen. No stars, no dots. It is supposed to be that way. Just type the password and press enter, it will be fine.\nNow your screen should look something like this:\ndahlo@dahlo-xps ~ $ ssh dahlo@rackham.uppmax.uu.se\nLast login: Fri May 18 15:03:59 2018 from mi04.icm.uu.se\n _ _ ____ ____ __ __ _ __ __\n| | | | _ \\| _ \\| \\/ | / \\ \\ \\/ / | System: rackham4\n| | | | |_) | |_) | |\\/| | / _ \\ \\ / | User: dahlo\n| |_| | __/| __/| | | |/ ___ \\ / \\ |\n \\___/|_| |_| |_| |_/_/ \\_\\/_/\\_\\ |\n\n###############################################################################\n\n User Guides: http://www.uppmax.uu.se/support/user-guides\n FAQ: http://www.uppmax.uu.se/support/faq\n\n Write to support@uppmax.uu.se, if you have questions or comments.\n\n\ndahlo@rackham4 ~ $\nNow you are connected to UPPMAX and can start working."
- },
- {
- "objectID": "topics/other/lab_connect_uppmax.html#remote-desktop",
- "href": "topics/other/lab_connect_uppmax.html#remote-desktop",
- "title": "Connecting to UPPMAX",
- "section": "2 Remote desktop",
- "text": "2 Remote desktop\nYou can work on UPPMAX interactively through a graphical-user-interface (GUI) desktop environment using ThinLinc.\nWe have a ThinLinc server running at one of the login nodes which allows users to run a remote desktop. It can be reached from a web browser (Chrome and Firefox are the recommended web browsers) or from the ThinLink App. For more details please look here: https://docs.uppmax.uu.se/getting_started/login_rackham_remote_desktop_local_thinlinc_client/\n\n2.1 Web browser\nTo be able to login via a web browser you will have to set up two-factor authentication first. Follow the instructions at the UPPMAX homepage, and once you are done you can continue below.\n\nGo to the login page, https://rackham-gui.uppmax.uu.se/\nEnter your UPPMAX username.\nEnter your UPPMAX password, followed by your current two-factor authentication code. Eg. if your password is hunter2 and your current two-factor authentication code is 123456 you will enter hunter2123456 as your password.\n\nIt will ask you which profile you want to use, so first press the Forward button. Then you can choose which desktop environment you want to use. Xfce is pretty straight-forward and easy to use, but feel free to try either of them. You get to choose every time you login so it’s not a permanent choice.\n\nOnce your desktop has been loaded, start a terminal either by clicking the black terminal icon at the bottom of the screen, or by pressing the Applications button in the top left corner and select Terminal Emulator.\n\n\n\n\n2.2 ThinLink App\n\nIf you haven’t already done so, download the ThinLinc client matching your local computer (i.e Windows, Linux, MacOS X or Solaris) from https://www.cendio.com/thinlinc/download and install it.\nLaunch the ThinLinc client. You should see a form where you can enter your username and password, and possibly a server name. If you only see this simple form as shown below, you can click Advanced to be able to set the server name.\n\nChange the Server setting to rackham-gui.uppmax.uu.se.\nChange the Name setting to your UPPMAX username.\nSet the Password setting to your UPPMAX password.\nYou do not need to change any other settings.\nYou will first come to the ThinLinc profile chooser. Press the Forward button to continue. Then you can choose which desktop environment you want to use. Xfce is pretty straight-forward and easy to use, but feel free to try either of them. You get to choose every time you login so it’s not a permanent choice.\nPress the Connect button.\nIf you connect for the first time you will see the “The server’s host key is not cached …” dialog.\n\nOnce your desktop has been loaded, start a terminal either by clicking the black terminal icon at the bottom of the screen, or by pressing the Applications button in the top left corner and select Terminal Emulator.\n\n\n\nTwo factor authentication: The ThinLinc client connects over SSH which means it may be required to present a two factor authentication code. If you need to use this when logging in with SSH you also need to use it when logging in with ThinLinc (it depends on where you connect from). The ThinLinc client does not know how to ask for the two factor code, so you will need to use the grace time feature. To do this, first you have to connect with regular SSH and present the required two factor code. Once you have logged in over SSH you can safely exit again. The login server will remember that you just logged in for a few minutes and will not ask for two factor authentication again, so make sure you do not wait too long to connect with the ThinLinc client."
- },
- {
- "objectID": "topics/other/lab_connect_uppmax.html#after-connection-to-uppmax",
- "href": "topics/other/lab_connect_uppmax.html#after-connection-to-uppmax",
- "title": "Connecting to UPPMAX",
- "section": "3 After connection to UPPMAX",
- "text": "3 After connection to UPPMAX\nFrom this point forward there is no difference between the two different ways of connection to UPPMAX. Both ways result in you having a terminal running on UPPMAX and from UPPMAX point of view they are the same."
- },
- {
- "objectID": "topics/other/lab_mac_keyboard.html",
- "href": "topics/other/lab_mac_keyboard.html",
- "title": "Keyboard Guide",
- "section": "",
- "text": "Normal\n\nHolding shift\n\nHolding alt\n\nHolding alt+shift"
- },
- {
- "objectID": "topics/other/lab_qc.html",
- "href": "topics/other/lab_qc.html",
- "title": "Read quality",
- "section": "",
- "text": "FastQC performes a series of quality control analyses, called modules. The output is a HTML report with one section for each module, and a summary evaluation of the results in the top. Entirely normal results are marked with a green tick, slightly abnormal results raise warnings (orange exclamation mark), and very unusual results raise failures (red cross).\nIt is important to stress that although the analyses appear to give a pass/fail result, these evaluations must be taken in the context of what you expect from your library. A ‘normal’ sample as far as FastQC is concerned is random and diverse. Some experiments may be expected to produce libraries which are biased in particular ways. You should treat the summary evaluations therefore as pointers to where you should concentrate your attention and understand why your library may not look random and diverse."
- },
- {
- "objectID": "topics/other/lab_qc.html#fastqc",
- "href": "topics/other/lab_qc.html#fastqc",
- "title": "Read quality",
- "section": "",
- "text": "FastQC performes a series of quality control analyses, called modules. The output is a HTML report with one section for each module, and a summary evaluation of the results in the top. Entirely normal results are marked with a green tick, slightly abnormal results raise warnings (orange exclamation mark), and very unusual results raise failures (red cross).\nIt is important to stress that although the analyses appear to give a pass/fail result, these evaluations must be taken in the context of what you expect from your library. A ‘normal’ sample as far as FastQC is concerned is random and diverse. Some experiments may be expected to produce libraries which are biased in particular ways. You should treat the summary evaluations therefore as pointers to where you should concentrate your attention and understand why your library may not look random and diverse."
- },
- {
- "objectID": "topics/other/lab_qc.html#data",
- "href": "topics/other/lab_qc.html#data",
- "title": "Read quality",
- "section": "2 Data",
- "text": "2 Data\nWe will run FastQC on three low-coverage whole genome sequencing (WGS) samples from the public 1000 Genomes project. To speed up the analysis we will only use data from a small genomic region. These are the exact same samples as will be used in the variant-calling workflow lab on Wednesday.\n\n\n\nSample\nDescription\n\n\n\n\nHG00097\nLow coverage WGS\n\n\nHG00100\nLow coverage WGS\n\n\nHG00101\nLow coverage WGS"
- },
- {
- "objectID": "topics/other/lab_qc.html#run-fastqc",
- "href": "topics/other/lab_qc.html#run-fastqc",
- "title": "Read quality",
- "section": "3 Run FastQC",
- "text": "3 Run FastQC\n\n3.1 Connect to Uppmax\nDuring this lab it is best to connect to UPPMAX via a remote desktop (ThinLinc). Instructions for this is available in Canvas under Workshop > Contents > Useful resources > Connecting to UPPMAX. Please follow the instructions in section 2 Remote desktop connection.\n\n\n3.2 Book a node\nTo be able to run analyses in the terminal you should book a compute node (or in this case just one core of a node). Make sure you only do this once each day because we have reserved one core per student for the course. If you haven’t already reserved a core today please use this command:\n\n\nsalloc -A -t 04:00:00 -p core -n 1 --no-shell &\n\n\nOnce your job allocation has been granted (should not take long) you can connect to the node using ssh. To find out the name of your node, use:\nsqueue -u username\nThe node name is found under nodelist header, you should only see one. Connect to that node:\nssh -Y <nodename>\n\n\n3.3 Create a workspace\nYou should work in your folder under the course’s nobackup folder, just like you have done during the previous labs. Start by creating a workspace for this exercise in your folder, and then move into it.\n\n\nmkdir /proj//nobackup/username/qc\ncd /proj//nobackup/username/qc\n\n\n\n\n3.4 Symbolic links to data\nThe raw data files are located in\n\n\n/sw/courses/ngsintro/reseq/data/fastq\n\n\nInstead of copying the files to your workspace you should create symbolic links (soft-links) to them. Soft-linking files and folders allows you to work with them as if they were in your current directory, but without multiplying them. Create symbolic links to the fastq files in your workspace:\n\n\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00097_1.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00097_2.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00100_1.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00100_2.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00101_1.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00101_2.fq\n\n\n\n\n3.5 Accessing FastQC\nFastQC is installed in the module system on UPPMAX. Modules must be loaded every time you login to Rackham, or when you connect to a new compute node.\nFirst load the bioinfo-tools module:\nmodule load bioinfo-tools\nThis makes it possible to load FastQC:\nmodule load FastQC/0.11.8\n\n\n3.6 Run FastQC\nRun FastQC on all fastq files:\nfastqc -q *.fq\nThe output is .html documents that shows quality scores along the reads, and other information. Please check what new files were generated with the command:\nls -lrt"
- },
- {
- "objectID": "topics/other/lab_qc.html#check-the-results",
- "href": "topics/other/lab_qc.html#check-the-results",
- "title": "Read quality",
- "section": "4 Check the results",
- "text": "4 Check the results\nThe output from FastQC is a HTML report that should be opened in a web browser. When you have connected to Uppmax via ThinLinc you can open it on Rackham with this command:\nfirefox --no-remote filename.html &\nWe have made the output files that you just created available through the links below, so that you can look at them via your local web-browser:\n\n\n\nSample\nRead 1\nRead 2\n\n\n\n\nHG00097\nHG00097_1.fq\nHG00097_2.fq\n\n\nHG00100\nHG00100_1.fq\nHG00100_2.fq\n\n\nHG00101\nHG00101_1.fq\nHG00101_2.fq\n\n\n\n\n4.1 Per Base Sequence Quality\nThis module shows the distribution of the quality scores at each position in the reads. The quality scores are represented by a Box and Whisker plot with the following elements:\n\nThe central red line is the median value.\nThe yellow box represents the inter-quartile range (25-75%).\nThe upper and lower whiskers represent the 10% and 90% points\nThe blue line represents the mean quality\n\nThe background of the graph divides the y axis into very good quality calls (green), calls of reasonable quality (orange), and calls of poor quality (red).\n\n4.1.1 Questions\n\nWhich positions in the reads have a median phred-score above 28 (very good quality calls) in each sample?\n\nDo any of the samples have warnings or failures in the Per Base Sequence Quality module?\nWhy? Please look in the documentation of this module.\n\n\n\n\n4.2 Sequence Length Distribution\nThis module shows the length distribution of the reads in the file.\n\n4.2.1 Questions\n\nHow long are the reads?\nDo any of the samples have warnings or failures in the Sequence Length Distribution module?\nWhy? Please look in the documentation of this module"
- },
- {
- "objectID": "topics/other/lab_qc.html#answers",
- "href": "topics/other/lab_qc.html#answers",
- "title": "Read quality",
- "section": "5 Answers",
- "text": "5 Answers\nWhen you have finished the exercise, please have a look at this document with answers to questions, and compare them with your answers."
- },
- {
- "objectID": "topics/other/lab_qc.html#documentation",
- "href": "topics/other/lab_qc.html#documentation",
- "title": "Read quality",
- "section": "6 Documentation",
- "text": "6 Documentation\n\nFastQC\nIf you want to learn more details about FastQC please have a look at this video by the Babraham Bioinformatics Institute."
- },
- {
- "objectID": "topics/rnaseq/lab_rnaseq.html",
- "href": "topics/rnaseq/lab_rnaseq.html",
- "title": "RNASeq Workflow",
- "section": "",
- "text": "RNA-seq has become a powerful approach to study the continually changing cellular transcriptome. Here, one of the most common questions is to identify genes that are differentially expressed between two conditions, e.g. controls and treatment. The main exercise in this tutorial will take you through a basic bioinformatic analysis pipeline to answer just that, it will show you how to find differentially expressed (DE) genes.\nMain exercise\n\n01 Check the quality of the raw reads with FastQC\n02 Map the reads to the reference genome using HISAT2\n03 Assess the post-alignment quality using QualiMap\n04 Count the reads overlapping with genes using featureCounts\n05 Find DE genes using DESeq2 in R\n\nRNA-seq experiment does not necessarily end with a list of DE genes. If you have time after completing the main exercise, try one (or more) of the bonus exercises. The bonus exercises can be run independently of each other, so choose the one that matches your interest. Bonus sections are listed below.\nBonus exercises\n\n01 Functional annotation of DE genes using GO/Reactome databases\n02 RNA-Seq figures and plots using R\n03 Visualisation of RNA-seq BAM files using IGV genome browser\n\n\n\n\n\n\n\nGeneral guide\n\n\n\n\nIn paths, remember to change username with your actual UPPMAX username.\nYou are welcome to try your own solutions to the problems, before checking the solution. Click the button to see the suggested solution. There is more than one way to complete a task. Discuss with person next to you and ask us when in doubt.\nInput code blocks are displayed like shown below.\n\n\ncommand"
- },
- {
- "objectID": "topics/rnaseq/lab_rnaseq.html#introduction",
- "href": "topics/rnaseq/lab_rnaseq.html#introduction",
- "title": "RNASeq Workflow",
- "section": "",
- "text": "RNA-seq has become a powerful approach to study the continually changing cellular transcriptome. Here, one of the most common questions is to identify genes that are differentially expressed between two conditions, e.g. controls and treatment. The main exercise in this tutorial will take you through a basic bioinformatic analysis pipeline to answer just that, it will show you how to find differentially expressed (DE) genes.\nMain exercise\n\n01 Check the quality of the raw reads with FastQC\n02 Map the reads to the reference genome using HISAT2\n03 Assess the post-alignment quality using QualiMap\n04 Count the reads overlapping with genes using featureCounts\n05 Find DE genes using DESeq2 in R\n\nRNA-seq experiment does not necessarily end with a list of DE genes. If you have time after completing the main exercise, try one (or more) of the bonus exercises. The bonus exercises can be run independently of each other, so choose the one that matches your interest. Bonus sections are listed below.\nBonus exercises\n\n01 Functional annotation of DE genes using GO/Reactome databases\n02 RNA-Seq figures and plots using R\n03 Visualisation of RNA-seq BAM files using IGV genome browser\n\n\n\n\n\n\n\nGeneral guide\n\n\n\n\nIn paths, remember to change username with your actual UPPMAX username.\nYou are welcome to try your own solutions to the problems, before checking the solution. Click the button to see the suggested solution. There is more than one way to complete a task. Discuss with person next to you and ask us when in doubt.\nInput code blocks are displayed like shown below.\n\n\ncommand"
- },
- {
- "objectID": "topics/rnaseq/lab_rnaseq.html#data-description",
- "href": "topics/rnaseq/lab_rnaseq.html#data-description",
- "title": "RNASeq Workflow",
- "section": "2 Data description",
- "text": "2 Data description\nThe data used in this exercise is from the paper: Poitelon, Yannick, et al. YAP and TAZ control peripheral myelination and the expression of laminin receptors in Schwann cells. Nature neuroscience 19.7 (2016): 879. In this study, YAP and TAZ genes were knocked-down in Schwann cells to study myelination, using mice as a model.\nMyelination is essential for nervous system function. Schwann cells are a type of glial cell that interact with neurons and the basal lamina to myelinate axons. Myelinated axons transfer signals up to 10x faster. Hippo pathway is a conserved pathway involved in cell contact inhibition, and it acts to promote cell proliferation and inhibits apoptosis. Transcription co-activators YAP and TAZ are two major downstream effectors of the Hippo pathway, and have redundant roles in transcriptional activation. TAZ and YAP genes were knocked-down to study their effect on neurons.\nThe material for RNA-seq was collected from 2 conditions (Wt and KO), each with 3 biological replicates.\n\n\n\n\n\n\nAccession\nCondition\nReplicate\n\n\n\n\nSRR3222409\nKO\n1\n\n\nSRR3222410\nKO\n2\n\n\nSRR3222411\nKO\n3\n\n\nSRR3222412\nWt\n1\n\n\nSRR3222413\nWt\n2\n\n\nSRR3222414\nWt\n3\n\n\n\n\n\n\n\n\n\n\nNote\n\n\n\nFor the purpose of this tutorial, to shorten the time needed to run various bioinformatics steps, we have picked reads for a single chromosome (Chr 19) and downsampled the reads. We randomly sampled, without replacement, 25% reads from each sample, using fastq-sample from the toolset fastq-tools."
- },
- {
- "objectID": "topics/rnaseq/lab_rnaseq.html#main-exercise",
- "href": "topics/rnaseq/lab_rnaseq.html#main-exercise",
- "title": "RNASeq Workflow",
- "section": "3 Main exercise",
- "text": "3 Main exercise\nThe main exercise covers Differential Gene Expression (DGE) workflow from raw reads to a list of differentially expressed genes.\n\n3.1 Using Uppmax\n\n\n\n\n\n\nUse ThinLinc\n\n\n\nIf you have issues opening GUI windows from UPPMAX through the terminal, it is recommended to use ThinLinc.\n\n\nIf you are not on ThinLinc, connect to UPPMAX first. Remember to replace username.\n\nssh -Y username@rackham.uppmax.uu.se\n\nBook a node.\nFor the RNA-Seq part of the course, we will work on the Rackham cluster. A standard compute node on cluster Rackham has 128 GB of RAM and 20 cores. We will use 1 core per person for this session. Therefore, each core gives you 6.4 GB of RAM. The code below is valid to run at the start of the day. If you are running it in the middle of a day, you need to decrease the time (-t). Do not run this twice and also make sure you are not running computations on a login node.\nBook compute resources for RNA-Seq lab.\n\n\nsalloc -A -t 03:00:00 -p core -n 1 --no-shell\n\n\nCheck allocation. Remember to replace username.\nsqueue -u username\nOnce allocation is granted, log on to the compute node. Remember to replace nodename.\nssh -Y nodename\n\n3.1.1 Set-up directory\nSetting up the directory structure is an important step as it helps to keep our raw data, intermediate data and results in an organised manner. All work must be carried out at this location /proj//nobackup/username/ where username is your user name.\nCreate a directory named rnaseq. All RNA-Seq related activities must be carried out in this sub-directory named rnaseq.\n\nmkdir rnaseq\n\n Create the directory structure as shown below.\nusername/\nrnaseq/\n +-- 1_raw/\n +-- 2_fastqc/\n +-- 3_mapping/\n +-- 4_qualimap/\n +-- 5_dge/\n +-- 6_multiqc/\n +-- reference/\n | +-- mouse_chr19_hisat2/\n +-- scripts/\n +-- funannot/\n +-- plots\n\n\ncd rnaseq\nmkdir 1_raw 2_fastqc 3_mapping 4_qualimap 5_dge 6_multiqc reference scripts funannot plots\ncd reference\nmkdir mouse_chr19_hisat2\ncd ..\n\n\nThe 1_raw directory will hold the raw fastq files (soft-links). 2_fastqc will hold FastQC outputs. 3_mapping will hold the mapping output files. 4_qualimap will hold the QualiMap output files. 5_dge will hold the counts from featureCounts and all differential gene expression related files. 6_multiqc will hold MultiQC outputs. reference directory will hold the reference genome, annotations and aligner indices. The funannot and plots directory are optional for bonus steps.\n It might be a good idea to open an additional terminal window. One to navigate through directories and another for scripting in the scripts directory.\n\n\n3.1.2 Create symbolic links\nWe have the raw fastq files in this remote directory: /sw/courses/ngsintro/rnaseq/main/1_raw/. We are going to create symbolic links (soft-links) for these files from our 1_raw directory to the remote directory. We do this because fastq files tend to be large files and simply copying them would use up a lot of storage space. Soft-linking files and folders allows us to work with those files as if they were actually there.\nChange to 1_raw directory. Use pwd to check if you are standing in the correct directory.\n\n\ncd 1_raw\npwd\n\n\n\n\n/proj//nobackup/username/rnaseq/1_raw\n\n\nRun below to create softlinks. Note that the command ends in a space followed by a period.\n\n\nln -s /sw/courses/ngsintro/rnaseq/main/1_raw/*.gz .\n\n\nCheck if your files have linked correctly. You should be able to see as below.\n\nls -l\n\n\nSRR3222409-19_1.fq.gz -> /sw/courses/ngsintro/rnaseq/main/1_raw/SRR3222409-19_1.fq.gz\nSRR3222409-19_2.fq.gz -> /sw/courses/ngsintro/rnaseq/main/1_raw/SRR3222409-19_2.fq.gz\nSRR3222410-19_1.fq.gz -> /sw/courses/ngsintro/rnaseq/main/1_raw/SRR3222410-19_1.fq.gz\nSRR3222410-19_2.fq.gz -> /sw/courses/ngsintro/rnaseq/main/1_raw/SRR3222410-19_2.fq.gz\nSRR3222411-19_1.fq.gz -> /sw/courses/ngsintro/rnaseq/main/1_raw/SRR3222411-19_1.fq.gz\nSRR3222411-19_2.fq.gz -> /sw/courses/ngsintro/rnaseq/main/1_raw/SRR3222411-19_2.fq.gz\nSRR3222412-19_1.fq.gz -> /sw/courses/ngsintro/rnaseq/main/1_raw/SRR3222412-19_1.fq.gz\nSRR3222412-19_2.fq.gz -> /sw/courses/ngsintro/rnaseq/main/1_raw/SRR3222412-19_2.fq.gz\nSRR3222413-19_1.fq.gz -> /sw/courses/ngsintro/rnaseq/main/1_raw/SRR3222413-19_1.fq.gz\nSRR3222413-19_2.fq.gz -> /sw/courses/ngsintro/rnaseq/main/1_raw/SRR3222413-19_2.fq.gz\nSRR3222414-19_1.fq.gz -> /sw/courses/ngsintro/rnaseq/main/1_raw/SRR3222414-19_1.fq.gz\nSRR3222414-19_2.fq.gz -> /sw/courses/ngsintro/rnaseq/main/1_raw/SRR3222414-19_2.fq.gz\n\n\n\n\n3.2 FastQC\nQuality check using FastQC\nAfter receiving raw reads from a high throughput sequencing centre it is essential to check their quality. FastQC provides a simple way to do some quality control check on raw sequence data. It provides a modular set of analyses which you can use to get a quick impression of whether your data has any problems of which you should be aware before doing any further analysis.\n Change into the 2_fastqc directory. Use pwd to check if you are standing in the correct directory.\n\n\ncd ../2_fastqc\npwd\n\n\n\n\n/proj//nobackup/username/rnaseq/2_fastqc\n\n\nLoad Uppmax modules bioinfo-tools and FastQC FastQC/0.11.9.\n\nmodule load bioinfo-tools\nmodule load FastQC/0.11.9\n\nOnce the module is loaded, FastQC program is available through the command fastqc. Use fastqc --help to see the various parameters available to the program. We will use -o to specify the output directory path and finally, the name of the input fastq file to analyse. The syntax to run one file will look like below.\n Don’t run this. It’s just a template.\n\nfastqc -o . ../1_raw/filename.fq.gz\n\nBased on the above command, we will write a bash loop script to process all fastq files in the directory. Writing multi-line commands through the terminal can be a pain. Therefore, we will run larger scripts from a bash script file. Move to your scripts directory and create a new file named fastqc.sh.\n\n\ncd ../scripts\npwd\n\n\n\n\n/proj//nobackup/username/rnaseq/scripts\n\n\nThe command below creates a new file in the current directory.\n\ntouch fastqc.sh\n\nUse a text editor (nano,Emacs,gedit etc.) to edit fastqc.sh.\n gedit behaves like a regular text editor with a standard graphical interface.\n\ngedit fastqc.sh &\n\n Adding & at the end sends that process to the background, so that the console is free to accept new commands.\nThen add the lines below and save the file.\n\n#!/bin/bash\n\nmodule load bioinfo-tools\nmodule load FastQC/0.11.9\n\nfor i in ../1_raw/*.gz\ndo\n echo \"Running $i ...\"\n fastqc -o . \"$i\"\ndone\n\nThis script loops through all files ending in .gz. In each iteration of the loop, it executes fastqc on the file. The -o . flag to fastqc indicates that the output must be exported in this current directory (ie; the directory where this script is run).\nChange to the 2_fastqc directory. Use pwd to check if you are standing in the correct directory. Run the script file fastqc.sh\n\n\ncd ../2_fastqc\npwd\n\n\n\n\n/proj//nobackup/username/rnaseq/2_fastqc\n\n\n\nbash ../scripts/fastqc.sh\n\nAfter the fastqc run, there should be a .zip file and a .html file for every fastq file. The .html file is the report that you need. Download the .html files to your computer and open them in a web browser. You do not need to necessarily look at all files now. We will do a comparison with all samples when using the MultiQC tool.\n Run this step in a LOCAL terminal and NOT on Uppmax. Open a terminal locally on your computer, move to a suitable download directory and run the command below to download one html report.\n Remember to replace username (twice).\n\n\nscp username@rackham.uppmax.uu.se:/proj//nobackup/username/rnaseq/2_fastqc/SRR3222409-19_1_fastqc.html .\n\n\nor download the whole directory.\n\n\nscp -r username@rackham.uppmax.uu.se:/proj//nobackup/username/rnaseq/2_fastqc .\n\n\n\n\n\n\n\n\nDownloading using a GUI\n\n\n\nYou can optionally use an SFTP browser like Filezilla or Cyberduck for a GUI interface. Those using MobaXterm, it has an embedded SFTP file browser to drag and drop.\n\n\n Go back to the FastQC website and compare your report with the sample report for Good Illumina data and Bad Illumina data.\n Discuss based on your reports, whether your data is of good enough quality and/or what steps are needed to fix it.\n\n\n3.3 HISAT2\nMapping reads using HISAT2\nAfter verifying that the quality of the raw sequencing reads is acceptable, we will map the reads to the reference genome. There are many mappers/aligners available, so it may be good to choose one that is adequate for your type of data. Here, we will use a software called HISAT2 (Hierarchical Indexing for Spliced Alignment of Transcripts) as it is a good general purpose splice-aware aligner. It is fast and does not require a lot of RAM. Before we begin mapping, we need to obtain genome reference sequence (.fasta file) and build an aligner index. Due to time constraints, we will build an index only on chromosome 19.\n\n3.3.1 Get reference\nIt is best if the reference genome (.fasta) and annotation (.gtf) files come from the same source to avoid potential naming conventions problems. It is also good to check in the manual of the aligner you use for hints on what type of files are needed to do the mapping. We will not be using the annotation (.gtf) during mapping, but we will use it during quantification.\n What is the idea behind building an aligner index? What files are needed to build one? Where do we take them from? Could one use an index that was generated for another project? Check out the HISAT2 manual indexer section for answers. Browse through Ensembl and try to find the files needed. Note that we are working with Mouse (Mus musculus).\n Move into the reference directory and download the Chr 19 genome (.fasta) file and the genome-wide annotation file (.gtf) from Ensembl.\nYou should be standing here to run this:\n\n\n/proj//nobackup/username/rnaseq/reference\n\n\nYou are most likely to use the latest version of ensembl release genome and annotations when starting a new analysis. For this exercise, we will choose ensembl version 99.\n\nwget ftp://ftp.ensembl.org/pub/release-99/fasta/mus_musculus/dna/Mus_musculus.GRCm38.dna.chromosome.19.fa.gz\nwget ftp://ftp.ensembl.org/pub/release-99/gtf/mus_musculus/Mus_musculus.GRCm38.99.gtf.gz\n\nDecompress the files for use.\n\ngunzip Mus_musculus.GRCm38.dna.chromosome.19.fa.gz\ngunzip Mus_musculus.GRCm38.99.gtf.gz\n\nFrom the full gtf file, we will also extract chr 19 alone to create a new gtf file for use later.\n\ncat Mus_musculus.GRCm38.99.gtf | grep -E \"^#|^19\" > Mus_musculus.GRCm38.99-19.gtf\n\n The grep command is set to use regular expression with the -E argument. And it’s looking for lines starting with # or 19. # fetches the header and comments while 19 denotes all rows with annotations for chromosome 19.\nCheck what you have in your directory.\n\nls -l\n\n\ndrwxrwsr-x 2 user gXXXXXXX 4.0K Jan 22 21:59 mouse_chr19_hisat2\n-rw-rw-r-- 1 user gXXXXXXX 26M Jan 22 22:46 Mus_musculus.GRCm38.99-19.gtf\n-rw-rw-r-- 1 user gXXXXXXX 771M Jan 22 22:10 Mus_musculus.GRCm38.99.gtf\n-rw-rw-r-- 1 user gXXXXXXX 60M Jan 22 22:10 Mus_musculus.GRCm38.dna.chromosome.19.fa\n\n\n\n3.3.2 Build index\nMove into the reference directory if not already there. Load module HISAT2. Remember to load bioinfo-tools if you haven’t done so already.\n\nmodule load bioinfo-tools\nmodule load HISAT2/2.2.1\n\n To search for the tool or other versions of a tool, use module spider hisat.\nCreate a new bash script in your scripts directory named hisat2_index.sh and add the following lines:\n\n#!/bin/bash\n\n# load module\nmodule load bioinfo-tools\nmodule load HISAT2/2.2.1\n\nhisat2-build \\\n -p 1 \\\n Mus_musculus.GRCm38.dna.chromosome.19.fa \\\n mouse_chr19_hisat2/mouse_chr19_hisat2\n\nThe above script builds a HISAT2 index using the command hisat2-build. It should use 1 core for computation. The paths to the FASTA (.fa) genome file is specified. And the output path is specified. The output describes the output directory and the prefix for output files. The output directory must be present before running this script. Check hisat2-build --help for the arguments and descriptions.\nUse pwd to check if you are standing in the correct directory. Then, run the script from the reference directory.\n\nbash ../scripts/hisat2_index.sh\n\nOnce the indexing is complete, move into the mouse_chr19_hisat2 directory and make sure you have all the files.\n\nls -l mouse_chr19_hisat2/\n\n\n-rw-rw-r-- 1 user gXXXXXXX 23M Sep 19 12:30 mouse_chr19_hisat2.1.ht2\n-rw-rw-r-- 1 user gXXXXXXX 14M Sep 19 12:30 mouse_chr19_hisat2.2.ht2\n-rw-rw-r-- 1 user gXXXXXXX 53 Sep 19 12:29 mouse_chr19_hisat2.3.ht2\n-rw-rw-r-- 1 user gXXXXXXX 14M Sep 19 12:29 mouse_chr19_hisat2.4.ht2\n-rw-rw-r-- 1 user gXXXXXXX 25M Sep 19 12:30 mouse_chr19_hisat2.5.ht2\n-rw-rw-r-- 1 user gXXXXXXX 15M Sep 19 12:30 mouse_chr19_hisat2.6.ht2\n-rw-rw-r-- 1 user gXXXXXXX 12 Sep 19 12:29 mouse_chr19_hisat2.7.ht2\n-rw-rw-r-- 1 user gXXXXXXX 8 Sep 19 12:29 mouse_chr19_hisat2.8.ht2\n\nThe index for the whole genome would be created in a similar manner. It just requires more time to run.\n\n\n3.3.3 Map reads\nNow that we have the index ready, we are ready to map reads. Move to the directory 3_mapping. Use pwd to check if you are standing in the correct directory.\nYou should be standing here to run this:\n\n\n/proj//nobackup/username/rnaseq/3_mapping\n\n\nWe will create softlinks to the fastq files from here to make things easier.\n\ncd 3_mapping\nln -s ../1_raw/* .\n\nThese are the parameters that we want to specify for the mapping run:\n\nSpecify the number of threads\nSpecify the full genome index path\nSpecify a summary file\nIndicate read1 and read2 since we have paired-end reads\nDirect the output (SAM) to a file\n\nHISAT2 aligner arguments can be obtained by running hisat2 --help. We should end with a script that looks like below to run one of the samples.\n\nhisat2 \\\n -p 1 \\\n -x ../reference/mouse_chr19_hisat2/mouse_chr19_hisat2 \\\n --summary-file \"SRR3222409-19.summary\" \\\n -1 SRR3222409-19_1.fq.gz \\\n -2 SRR3222409-19_2.fq.gz \\\n -S SRR3222409-19.sam\n\nLet’s break this down a bit. -p options denotes that it will use 1 thread. In a real world scenario, we might want to use 8 to 12 threads. -x denotes the full path (with prefix) to the aligner index we built in the previous step. --summary-file specifies a summary file to write alignments metrics such as mapping rate etc. -1 and -2 specifies the input fastq files. Both are used here because this is a paired-end sequencing. -S denotes the output SAM file.\nBut, we will not run it as above. We will make some more changes to it. We want to make the following changes:\n\nRather than writing the output as a SAM file, we want to direct the output to another tool samtools to order alignments by coordinate and to export in BAM format\nGeneralise the above script to be used as a bash script to read any two input files and to automatically create the output filename.\n\n Now create a new bash script file named hisat2_align.sh in your scripts directory and add the script below to it.\n\n#!/bin/bash\n\nmodule load bioinfo-tools\nmodule load HISAT2/2.2.1\nmodule load samtools/1.19\n\n# get output filename prefix\nprefix=$( basename $1 | sed -E 's/_.+$//' )\n\nhisat2 \\\n -p 1 \\\n -x ../reference/mouse_chr19_hisat2/mouse_chr19_hisat2 \\\n --summary-file \"${prefix}.summary\" \\\n -1 $1 \\\n -2 $2 | samtools sort -O BAM > \"${prefix}.bam\"\n\nIn the above script, the two input fasta files are not hard coded, rather we use $1 and $2 because they will be passed in as arguments.\nThe output filename prefix is automatically created using this line prefix=$( basename $1 | sed -E 's/_.+$//' ) from input filename of $1. For example, a file with path /bla/bla/sample_1.fq.gz will have the directory stripped off using the function basename to get sample_1.fq.gz. This is piped (|) to sed where all text starting from _ to end of string (specified by this regular expression _.+$ matching _1.fq.gz) is removed and the prefix will be just sample. This approach will work only if your filenames are labelled suitably.\nLastly, the SAM output is piped (|) to the tool samtools for sorting and written in BAM format.\nNow we can run the bash script like below while standing in the 3_mapping directory.\n\nbash ../scripts/hisat2_align.sh sample_1.fq.gz sample_2.fq.gz\n\n Similarly run the other samples.\n\n\n\n\n\n\nOptional\n\n\n\nTry to create a new bash loop script (hisat2_align_batch.sh) to iterate over all fastq files in the directory and run the mapping using the hisat2_align.sh script. Note that there is a bit of a tricky issue here. You need to use two fastq files (_1 and _2) per run rather than one file. There are many ways to do this and here is one.\n\n## find only files for read 1 and extract the sample name\nlines=$(find *_1.fq.gz | sed \"s/_1.fq.gz//\")\n\nfor i in ${lines}\ndo\n ## use the sample name and add suffix (_1.fq.gz or _2.fq.gz)\n echo \"Mapping ${i}_1.fq.gz and ${i}_2.fq.gz ...\"\n bash ../scripts/hisat2_align.sh ${i}_1.fq.gz ${i}_2.fq.gz\ndone\n\nRun the hisat2_align_batch.sh script in the 3_mapping directory.\n\nbash ../scripts/hisat2_align_batch.sh\n\n\n\nAt the end of the mapping jobs, you should have the following list of output files for every sample:\n\nls -l\n\n\n-rw-rw-r-- 1 user gXXXXXXX 16M Sep 19 12:30 SRR3222409-19.bam\n-rw-rw-r-- 1 user gXXXXXXX 604 Sep 19 12:30 SRR3222409-19.summary\n\nThe .bam file contains the alignment of all reads to the reference genome in binary format. BAM files are not human readable directly. To view a BAM file in text format, you can use samtools view functionality.\n\nmodule load samtools/1.19\nsamtools view SRR3222409-19.bam | head\n\n\nSRR3222409.13658290 163 19 3084385 60 95M3S = 3084404 120 CTTTAAGATAAGTGCCGGTTGCAGCCAGCTGTGAGAGCTGCACTCCCTTCTCTGCTCTAAAGTTCCCTCTTCTCAGAAGGTGGCACCACCCTGAGCTG DB@D@GCHHHEFHIIG<CHHHIHHIIIIHHHIIIIGHIIIIIFHIGHIHIHIIHIIHIHIIHHHHIIIIIIHFFHHIIIGCCCHHHH1GHHIIHHIII AS:i:-3 ZS:i:-18 XN:i:0 XM:i:0 XO:i:0 XG:i:0 NM:i:0 MD:Z:95 YS:i:-6 YT:Z:CP NH:i:1\nSRR3222409.13658290 83 19 3084404 60 101M = 3084385 -120 TGCAGCCAGCTGTGAGAGCTGCACTCCCTTCTCTGCTCTAAAGTTCCCTCTTCTCAGAAGGTGGCACCACCCTGAGCTGCTGGCAGTGAGTCTGTTCCAAG IIIIHECHHH?IHHHIIIHIHIIIHEHHHCHHHIHIIIHHIHIIIHHHHHHIHEHIIHIIHHIIHHIHHIGHIGIIIIIIIHHIIIHHIHEHCHHG@<<BD AS:i:-6 ZS:i:-16 XN:i:0 XM:i:1 XO:i:0 XG:i:0 NM:i:1 MD:Z:76T24 YS:i:-3 YT:Z:CP NH:i:1\nSRR3222409.13741570 163 19 3085066 60 15M2I84M = 3085166 201 ATAGTACCTGGCAACAAAAAAAAAAAAGCTTTTGGCTAAAGACCAATGTGTTTAAGAGATAAAAAAAGGGGTGCTAATACAGAAGCTGAGGCCTTAGAAGA 0B@DB@HCCH1<<CGECCCGCHHIDD?01<<G1</<1<FH1F11<1111<<<<11<CGC1<G1<F//DHHI0/01<<1FG11111111<111<1D1<1D1< AS:i:-20 XN:i:0 XM:i:3 XO:i:1 XG:i:2 NM:i:5 MD:Z:40T19C27T10 YS:i:0 YT:Z:CP NH:i:1\n\n Can you identify what some of these columns are? SAM format description is available here. SAM output specifically from HISAT is described here, especially the tags.\n The summary file gives a summary of the mapping run. This file is used by MultiQC later to collect mapping statistics. Inspect one of the mapping log files to identify the number of uniquely mapped reads and multi-mapped reads.\n\ncat SRR3222409-19.summary\n\n\n156992 reads; of these:\n 156992 (100.00%) were paired; of these:\n 7984 (5.09%) aligned concordantly 0 times\n 147178 (93.75%) aligned concordantly exactly 1 time\n 1830 (1.17%) aligned concordantly >1 times\n ----\n 7984 pairs aligned concordantly 0 times; of these:\n 690 (8.64%) aligned discordantly 1 time\n ----\n 7294 pairs aligned 0 times concordantly or discordantly; of these:\n 14588 mates make up the pairs; of these:\n 5987 (41.04%) aligned 0 times\n 4085 (28.00%) aligned exactly 1 time\n 4516 (30.96%) aligned >1 times\n98.09% overall alignment rate\n\nNext, we need to index these BAM files. Indexing creates .bam.bai files which are required by many downstream programs to quickly and efficiently locate reads anywhere in the BAM file.\n Index all BAM files. Write a for-loop to index all BAM files using the command samtools index file.bam.\n\nmodule load samtools/1.19\n\nfor i in *.bam\n do\n echo \"Indexing $i ...\"\n samtools index $i\n done\n\nNow, we should have .bai index files for all BAM files.\n\nls -l\n\n\n-rw-rw-r-- 1 user gXXXXXXX 16M Sep 19 12:30 SRR3222409-19.bam\n-rw-rw-r-- 1 user gXXXXXXX 43K Sep 19 12:32 SRR3222409-19.bam.bai\n\n If you are running short of time or unable to run the mapping, you can copy over results for all samples that have been prepared for you before class. They are available at this location: /sw/courses/ngsintro/rnaseq/main/3_mapping/.\n\n\ncp -r /sw/courses/ngsintro/rnaseq/main/3_mapping/* /proj//nobackup/username/rnaseq/3_mapping/\n\n\n\n\n\n\n3.4 QualiMap\nPost-alignment QC using QualiMap\nSome important quality aspects, such as saturation of sequencing depth, read distribution between different genomic features or coverage uniformity along transcripts, can be measured only after mapping reads to the reference genome. One of the tools to perform this post-alignment quality control is QualiMap. QualiMap examines sequencing alignment data in SAM/BAM files according to the features of the mapped reads and provides an overall view of the data that helps to the detect biases in the sequencing and/or mapping of the data and eases decision-making for further analysis.\nThere are other tools with similar functionality such as RNASeqQC or QoRTs.\n Read through QualiMap documentation and see if you can figure it out how to run it to assess post-alignment quality on the RNA-seq mapped samples.\n Load the QualiMap module version 2.2.1 and create a bash script named qualimap.sh in your scripts directory.\nAdd the following script to it. Note that we are using the smaller GTF file with chr19 only.\n\n#!/bin/bash\n\n# load modules\nmodule load bioinfo-tools\nmodule load QualiMap/2.2.1\n\n# get output filename prefix\nprefix=$( basename \"$1\" .bam)\n\nunset DISPLAY\n\nqualimap rnaseq -pe \\\n -bam $1 \\\n -gtf \"../reference/Mus_musculus.GRCm38.99-19.gtf\" \\\n -outdir \"../4_qualimap/${prefix}/\" \\\n -outfile \"$prefix\" \\\n -outformat \"HTML\" \\\n --java-mem-size=6G >& \"${prefix}-qualimap.log\"\n\nThe line prefix=$( basename \"$1\" .bam) is used to remove directory path and .bam from the input filename and create a prefix which will be used to label output. The export unset DISPLAY forces a ‘headless mode’ on the JAVA application, which would otherwise throw an error about X11 display. If that doesn’t work, one can also try export DISPLAY=:0 or export DISPLAY=\"\". The last part >& \"${prefix}-qualimap.log\" saves the standard-out as a log file.\n Create a new bash loop script named qualimap_batch.sh with a bash loop to run the qualimap script over all BAM files. The loop should look like below.\n\nfor i in ../3_mapping/*.bam\ndo\n echo \"Running QualiMap on $i ...\"\n bash ../scripts/qualimap.sh $i\ndone\n\nRun the loop script qualimap_batch.sh in the directory 4_qualimap.\n\nbash ../scripts/qualimap_batch.sh\n\nQualimap should have created a directory for every BAM file.\n\ndrwxrwsr-x 5 user gXXXXXXX 4.0K Jan 22 22:53 SRR3222409-19\n-rw-rw-r-- 1 user gXXXXXXX 669 Jan 22 22:53 SRR3222409-19-qualimap.log\n\nInside every directory, you should see:\n\nls -l\n\n\ndrwxrwsr-x 2 user gXXXXXXX 4.0K Jan 22 22:53 css\ndrwxrwsr-x 2 user gXXXXXXX 4.0K Jan 22 22:53 images_qualimapReport\n-rw-rw-r-- 1 user gXXXXXXX 12K Jan 22 22:53 qualimapReport.html\ndrwxrwsr-x 2 user gXXXXXXX 4.0K Jan 22 22:53 raw_data_qualimapReport\n-rw-rw-r-- 1 user gXXXXXXX 1.2K Jan 22 22:53 rnaseq_qc_results.txt\n\n Download the results.\n When downloading the HTML files, note that you MUST also download the dependency files (ie; css folder and images_qualimapReport folder), otherwise the HTML file may not render correctly. Remember to replace username (twice).\n\n\nscp -r username@rackham.uppmax.uu.se:/proj//nobackup/username/rnaseq/4_qualimap .\n\n\n Check the QualiMap report for one sample and discuss if the sample is of good quality. You only need to do this for one file now. We will do a comparison with all samples when using the MultiQC tool.\n If you are running out of time or were unable to run QualiMap, you can also copy pre-run QualiMap output from this location: /sw/courses/ngsintro/rnaseq/main/4_qualimap/.\n\n\ncp -r /sw/courses/ngsintro/rnaseq/main/4_qualimap/* /proj//nobackup/username/rnaseq/4_qualimap/\n\n\n\n\n\n3.5 featureCounts\nCounting mapped reads using featureCounts\nAfter ensuring mapping quality, we can move on to enumerating reads mapping to genomic features of interest. Here we will use featureCounts, an ultrafast and accurate read summarisation program, that can count mapped reads for genomic features such as genes, exons, promoter, gene bodies, genomic bins and chromosomal locations.\n Read featureCounts documentation and see if you can figure it out how to use paired-end reads using an unstranded library to count fragments overlapping with exonic regions and summarise over genes.\n Load the subread module on Uppmax. Create a bash script named featurecounts.sh in the directory scripts.\nWe could run featureCounts on each BAM file, produce a text output for each sample and combine the output. But the easier way is to provide a list of all BAM files and featureCounts will combine counts for all samples into one text file.\nBelow is the script that we will use:\n\n#!/bin/bash\n\n# load modules\nmodule load bioinfo-tools\nmodule load subread/2.0.3\n\nfeatureCounts \\\n -a \"../reference/Mus_musculus.GRCm38.99.gtf\" \\\n -o \"counts.txt\" \\\n -F \"GTF\" \\\n -t \"exon\" \\\n -g \"gene_id\" \\\n -p \\\n -s 0 \\\n -T 1 \\\n ../3_mapping/*.bam\n\nIn the above script, we indicate the path of the annotation file (-a \"../reference/Mus_musculus.GRCm38.99.gtf\"), specify the output file name (-o \"counts.txt\"), specify that that annotation file is in GTF format (-F \"GTF\"), specify that reads are to be counted over exonic features (-t \"exon\") and summarised to the gene level (-g \"gene_id\"). We also specify that the reads are paired-end (-p), the library is unstranded (-s 0) and the number of threads to use (-T 1).\nRun the featurecounts bash script in the directory 5_dge. Use pwd to check if you are standing in the correct directory.\nYou should be standing here to run this:\n\n\n/proj//nobackup/username/rnaseq/5_dge\n\n\n\nbash ../scripts/featurecounts.sh\n\nYou should have two output files:\n\nls -l\n\n\n-rw-rw-r-- 1 user gXXXXXXX 2.8M Sep 15 11:05 counts.txt\n-rw-rw-r-- 1 user gXXXXXXX 658 Sep 15 11:05 counts.txt.summary\n\n Inspect the files and try to make sense of them.\n\n\n\n\n\n\nImportant\n\n\n\nFor downstream steps, we will NOT use this counts.txt file. Instead we will use counts_full.txt from the back-up folder. This contains counts across all chromosomes. This is located here: /sw/courses/ngsintro/rnaseq/main/5_dge/. Copy this file to your 5_dge directory.\n Remember to replace username.\n\n\ncp /sw/courses/ngsintro/rnaseq/main/5_dge/counts_full.txt /proj//nobackup/username/rnaseq/5_dge/\n\n\n\n\n\n\n\n3.6 MultiQC\nCombined QC report using MultiQC\nWe will use the tool MultiQC to crawl through the output, log files etc from FastQC, HISAT2, QualiMap and featureCounts to create a combined QC report.\nMove to the 6_multiqc directory. You should be standing here to run this:\n\n\n/proj//nobackup/username/rnaseq/6_multiqc\n\n\nAnd run this in the terminal.\n\nmodule load bioinfo-tools\nmodule load MultiQC/1.12\n\nmultiqc --interactive ../\n\n\n /// MultiQC 🔍 | v1.11\n\n| multiqc | Search path : /crex/proj/XXXXXXX/nobackup/username/rnaseq\n| searching | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 298/298 \n| qualimap | Found 6 RNASeq reports\n| feature_counts | Found 6 reports\n| bowtie2 | Found 6 reports\n| fastqc | Found 12 reports\n| multiqc | Compressing plot data\n| multiqc | Report : multiqc_report.html\n| multiqc | Data : multiqc_data\n| multiqc | MultiQC complete\n\nThe output should look like below:\n\nls -l\n\n\ndrwxrwsr-x 2 user gXXXXXXX 4.0K Sep 6 22:33 multiqc_data\n-rw-rw-r-- 1 user gXXXXXXX 1.3M Sep 6 22:33 multiqc_report.html\n\n Download the MultiQC HTML report to your computer and inspect the report.\n Run this step in a LOCAL terminal and NOT on Uppmax. Remember to replace username (twice).\n\n\nscp username@rackham.uppmax.uu.se:/proj//nobackup/username/rnaseq/6_multiqc/multiqc_report.html .\n\n\n\n\n\n3.7 DESeq2\nDifferential gene expression using DESeq2\nThe easiest way to perform differential expression is to use one of the statistical packages, within R environment, that were specifically designed for analyses of read counts arising from RNA-seq, SAGE and similar technologies. Here, we will use one such package called DESeq2. Learning R is beyond the scope of this course so we prepared basic ready to run R scripts to find DE genes between conditions KO and Wt.\nMove to the 5_dge directory and load R modules for use.\n\nmodule load R/4.3.1\nmodule load R_packages/4.3.1\n\nUse pwd to check if you are standing in the correct directory. Copy the following file to the 5_dge directory: /sw/courses/ngsintro/rnaseq/main/5_dge/dge.R\nMake sure you have the counts_full.txt. If not, you can copy this file too: /sw/courses/ngsintro/rnaseq/main/5_dge/counts_full.txt\n\n\ncp /sw/courses/ngsintro/rnaseq/main/5_dge/dge.R .\ncp /sw/courses/ngsintro/rnaseq/main/5_dge/counts_full.txt .\n\n\nNow, run the R script from the shell in 5_dge directory.\n\nRscript dge.R\n\nIf you are curious what’s inside dge.R, you are welcome to explore it using a text editor.\nThis should have produced the following output files:\n\nls -l\n\n\n-rw-rw-r-- 1 user gXXXXXXX 282K Jan 22 23:16 counts_vst_full.Rds\n-rw-rw-r-- 1 user gXXXXXXX 1.7M Jan 22 23:16 counts_vst_full.txt\n-rw-rw-r-- 1 user gXXXXXXX 727K Jan 22 23:16 dge_results_full.Rds\n-rw-rw-r-- 1 user gXXXXXXX 1.7M Jan 22 23:16 dge_results_full.txt\n\nEssentially, we have two outputs: dge_results_full and counts_vst_full. dge_results_full is the list of differentially expressed genes. This is available in human readable tab-delimited .txt file and R readable binary .Rds file. The counts_vst_full is variance-stabilised normalised counts, useful for exploratory analyses.\n Copy the results text file (dge_results_full.txt) to your computer and inspect the results. What are the columns? How many differentially expressed genes are present after adjusted p-value of 0.05? How many genes are upregulated and how many are down-regulated? How does this change if we set a fold-change cut-off of 1?\n Open in a spreadsheet editor like Microsoft Excel or LibreOffice Calc.\n If you do not have the results or were unable to run the DGE step, you can copy these two here which will be required for functional annotation (optional).\n\n\ncp /sw/courses/ngsintro/rnaseq/main/5_dge/dge_results_full.txt .\ncp /sw/courses/ngsintro/rnaseq/main/5_dge/dge_results_full.Rds .\ncp /sw/courses/ngsintro/rnaseq/main/5_dge/counts_vst_full.txt .\ncp /sw/courses/ngsintro/rnaseq/main/5_dge/counts_vst_full.Rds ."
- },
- {
- "objectID": "topics/rnaseq/lab_rnaseq.html#bonus-exercises",
- "href": "topics/rnaseq/lab_rnaseq.html#bonus-exercises",
- "title": "RNASeq Workflow",
- "section": "4 Bonus exercises",
- "text": "4 Bonus exercises\n\n\n\n\n\n\nOptional\n\n\n\nThese exercises are optional and to be run only if you have time and you want to explore this topic further.\n\n\n\n4.1 Functional annotation\nIn this part of the exercise we will address the question which biological processes are affected in the experiment; in other words we will functionally annotate the results of the analysis of differential gene expression (performed in the main part of the exercise). We will use Gene Ontology (GO) and Reactome databases.\nWhen performing this type of analysis, one has to keep in mind that the analysis is only as accurate as the annotation available for your organism. So, if working with non-model organisms which do have experimentally-validated annotations (computationally inferred), the results may not be fully reflecting the actual situation.\nThere are many methods to approach the question as to which biological processes and pathways are over-represented amongst the differentially expressed genes, compared to all the genes included in the DE analysis. They use several types of statistical tests (e.g. hypergeometric test, Fisher’s exact test etc.), and many have been developed with microarray data in mind. Not all of these methods are appropriate for RNA-seq data, which as you remember from the lecture, exhibit length bias in power of detection of differentially expressed genes (i.e. longer genes, which tend to gather more reads, are more likely to be detected as differentially expressed than shorter genes, solely because of the length).\nWe will use the R / Bioconductor package goseq, specifically designed to work with RNA-seq data. This package provides methods for performing Gene Ontology and pathway analysis of RNA-seq data, taking length bias into account.\nIn this part, we will use the same data as in the main workflow. The starting point of the exercise is the file with results of the differential expression produced in the main part of the exercise.\n\n4.1.1 Preparation\nChange to the funannot directory in your rnaseq directory.\n\ncd funannot\n\nCopy this file /sw/courses/ngsintro/rnaseq/bonus/funannot/annotate_de_results.R to your rnaseq/funannot directory.\n Remember to replace username.\n\n\ncp /sw/courses/ngsintro/rnaseq/bonus/funannot/annotate_de_results.R /proj//nobackup/username/rnaseq/funannot/\n\n\nWe need some annotation information, so we will copy this file /sw/courses/ngsintro/rnaseq/main/reference/mm-biomart99-genes.txt.gz to your rnaseq/reference directory.\n\n\ncp /sw/courses/ngsintro/rnaseq/main/reference/mm-biomart99-genes.txt.gz /proj//nobackup/username/rnaseq/reference/\n\n\nThen uncompress the file. gunzip ../reference/mm-biomart99-genes.txt.gz\nLoad R module and R packages\n\nmodule load R/4.3.1\nmodule load R_packages/4.3.1\n\nRun the functional annotation script from the linux terminal.\n\nRscript annotate_de_results.R\n\nIt will fetch dge_results_full.Rds from 5_dge/ and annotation files from reference/. When completed, you should find a directory named funannot_results.\n\nls -l\n\n\n-rw-rw-r-- 1 user gXXXXXXX 44K Jan 22 23:37 go_down.txt\n-rw-rw-r-- 1 user gXXXXXXX 15K Jan 22 23:37 go_up.txt\n-rw-rw-r-- 1 user gXXXXXXX 800 Jan 22 23:37 reactome_down.txt\n-rw-rw-r-- 1 user gXXXXXXX 794 Jan 22 23:37 reactome_up.txt\n\n\n\n4.1.2 Interpretation\nThe results are saved as tables in the directory funannot_results. There are four tables: GO terms for up-regulated genes (go_up.txt), GO terms for down-regulated genes (go_down.txt) and similarily, Reactome pathways for up-regulated genes (reactome_up.txt) and Reactome pathways for down-regulated genes (reactome_down.txt).\n Take a quick look at some of these files.\n\nhead go_up.txt\n\ncategory over_represented_pvalue under_represented_pvalue numDEInCat numInCat term ontology\nGO:0030016 2.23312435908185e-45 1 78 176 myofibril CC\nGO:0061061 5.40265910772947e-45 1 135 543 muscle structure development BP\nGO:0043292 1.59611882901076e-44 1 80 189 contractile fiber CC\nGO:0030017 3.08095203872545e-43 1 72 157 sarcomere CC\nGO:0044449 2.27198318958789e-41 1 73 170 contractile fiber part CC\nGO:0031674 3.81511780088805e-32 1 53 117 I band CC\nGO:0003012 7.14173605862631e-32 1 84 301 muscle system process BP\nGO:0007517 9.77789997472468e-32 1 88 329 muscle organ development BP\nGO:0014706 1.99267634186987e-31 1 90 349 striated muscle tissue development BP\nThe columns of the results tables are:\n\n# go\ncategory over_represented_pvalue under_represented_pvalue numDEInCat numInCat term ontology\n# reactome\ncategory over_represented_pvalue under_represented_pvalue numDEInCat numInCat path_name\n\nYou can view the tables in a text editor (nano,gedit etc), and try to find GO terms and pathways relevant to the experiment using a word search functionality. You could download these files to your computer and import them into a spreadsheet program like MS Excel or LibreOffice Calc.\n Try to use grep to find a match using a keyword, say phosphorylation.\n\ncat go_down.txt | grep \"phosphorylation\"\n\n Have a look at the GO terms and see if you think the functional annotation reflects the biology of the experiments we have just analysed?\n\n\n\n4.2 RNA-Seq plots\nCreating high quality plots of RNA-seq analysis are most easily done using R. Depending on your proficiency in reading R code and using R, you can in this section either just call scripts from the command lines with a set of arguments or you can open the R script in a text editor, and run the code step by step from an interactive R session.\nCopy the R script files from the following directory: /sw/courses/ngsintro/rnaseq/bonus/plots/ to your plots directory.\n Remember to replace username.\n\n\ncp /sw/courses/ngsintro/rnaseq/bonus/plots/*.R /proj//nobackup/username/rnaseq/plots/\n\n\nYou should have the following files:\n\nls -l\n\n\n-rw-rw-r-- 1 user gXXXXXXX 2.0K Sep 20 2016 gene.R\n-rw-rw-r-- 1 user gXXXXXXX 842 Sep 22 2016 heatmap.R\n-rw-rw-r-- 1 user gXXXXXXX 282 Sep 22 2016 ma.R\n-rw-rw-r-- 1 user gXXXXXXX 340 Sep 22 2016 pca.R\n-rw-rw-r-- 1 user gXXXXXXX 669 Sep 22 2016 volcano.R\n\nIt is important that you load module R and R_packages.\n\nmodule load R/4.3.1\nmodule load R_packages/4.3.1\n\n\n4.2.1 PCA plot\nA popular way to visualise general patterns of gene expression in your data is to produce either PCA (Principal Component Analysis) or MDS (Multi Dimensional Scaling) plots. These methods aim at summarising the main patterns of expression in the data and display them on a two-dimensional space and still retain as much information as possible. To properly evaluate these kind of results is non-trivial, but in the case of RNA-seq data we often use them to get an idea of the difference in expression between treatments and also to get an idea of the similarity among replicates. If the plots shows clear clusters of samples that corresponds to treatment it is an indication of treatment actually having an effect on gene expression. If the distance between replicates from a single treatment is very large it suggests large variance within the treatment, something that will influence the detection of differentially expressed genes between treatments.\nMove to the plots/ directory. Then run the pca.R script like below.\n\nRscript pca.R\n\nThis generates a file named pca.png in the plots folder. To view it, use eog pca.png & or copy it to your local disk.\n\n\n\n\n\n\n\n\n\n Do samples cluster as expected? Are there any odd or mislabelled samples? Based on these results, would you expect to find a large number of significant DE genes?\n\n\n4.2.2 MA plot\nAn MA-plot plots the mean expression and estimated log-fold-change for all genes in an analysis.\nRun the ma.R script in the plots directory.\n\nRscript ma.R\n\nThis generates a file named ma.png in the plots folder. To view it, use eog ma.png & or copy it to your local disk.\n\n\n\n\n\n\n\n\n\n What do you think the blue dots represent?\n\n\n4.2.3 Volcano plot\nA related type of figure will instead plot fold change (on log2 scale) on the x-axis and -log10 p-value on the y-axis. Scaling like this means that genes with lowest p-value will be found at the top of the plot. In this example we will highlight (in blue) the genes that are significant (p-val 0.05 after correction for multiple testing).\nRun the script named volcano.R in the plots directory.\n\nRscript volcano.R\n\nThis generates a file named volcano.png in the plots folder. To view it, use eog volcano.png & or copy it to your local disk.\n\n\n\n\n\n\n\n\n\n Anything noteworthy about the patterns in the plot? Is there a general trend in the direction of change in gene expression as a consequence of the experiment?\n\n\n4.2.4 Heatmap\nAnother popular plots for genome-wide expression patterns is heatmap for a set of genes. If you run the script called heatmap.R, it will extract the top 50 genes that have the lowest p-value in the experiment and create a heatmap from these. In addition to color-coding the expression levels over samples for the genes it also clusters the samples and genes based on inferred distance between them.\nRun the script named heatmap.R in the plots directory.\n\nRscript heatmap.R\n\nThis generates a file named heatmap.png in the plots folder. To view it, use eog heatmap.png & or copy it to your local disk.\n\n\n\n\n\n\n\n\n\n Compare this plot to a similar plot in the paper behind the data.\n\n\n\n4.3 IGV browser\nData visualisation is important to be able to clearly convey results, but can also be very helpful as tool for identifying issues and note-worthy patterns in the data. In this part you will use the BAM files you created earlier in the RNA-seq lab and use IGV (Integrated Genomic Viewer) to visualise the mapped reads and genome annotations. In addition we will produce high quality plots of both the mapped read data and the results from differential gene expression.\nIf you are already familiar with IGV you can load the mouse genome and at least one BAM file from each of the treatments that you created earlier. The functionality of IGV is the same as if you look at genomic data, but there are a few of the features that are more interesting to use for RNA-seq data.\nIntegrated genomics viewer from Broad Institute is a nice graphical interface to view bam files and genome annotations. It also has tools to export data and some functionality to look at splicing patterns in RNA-seq data sets. Even though it allows for some basic types of analysis it should be used more as a nice way to look at your mapped data. Looking at data in this way might seem like a daunting approach as you can not check more than a few regions, but in in many cases it can reveal mapping patterns that are hard to catch with just summary statistics.\nFor this tutorial you can chose to run IGV directly on your own computer or on Uppmax . If you chose to run it on your own computer you will have to download some of the BAM files (and the corresponding index files) from Uppmax. If you have not yet installed IGV you also have to download the program.\n\n\n\n\n\n\nLocal \n\n\n\nCopy two BAM files (one from each experimental group, for example; SRR3222409-19 and SRR3222412-19) and the associated index (.bam.bai) files to your computer by running the below command in a LOCAL terminal and NOT on Uppmax.\n Remember to replace username.\n\n\nscp username@rackham.uppmax.uu.se:/proj//nobackup/username/rnaseq/3_mapping/SRR3222409-19.bam ./\nscp username@rackham.uppmax.uu.se:/proj//nobackup/username/rnaseq/3_mapping/SRR3222409-19.bam.bai ./\nscp username@rackham.uppmax.uu.se:/proj//nobackup/username/rnaseq/3_mapping/SRR3222412-19.bam ./\nscp username@rackham.uppmax.uu.se:/proj//nobackup/username/rnaseq/3_mapping/SRR3222412-19.bam.bai ./\n\n\nAlternatively, you can use an SFTP browser like Filezilla or Cyberduck for a GUI interface. Windows users can also use the MobaXterm SFTP file browser to drag and drop.\n\n\n\n\n\n\n\n\nUppmax \n\n\n\nFor Linux and Mac users, Log in to Uppmax in a way so that the generated graphics are exported via the network to your screen. This will allow any graphical interface that you start on your compute node to be exported to your computer. However, as the graphics are exported over the network, it can be fairly slow in redrawing windows and the experience can be fairly poor.\nLogin in to Uppmax with X-forwarding enabled:\n\nssh -Y username@rackham.uppmax.uu.se\nssh -Y computenode\n\nAn alternative method is to login through Rackham-GUI. Once you log into this interface you will have a linux desktop interface in a browser window. This interface is running on the login node, so if you want to do any heavy lifting you need to login to your reserved compute node also here. This is done by opening a terminal in the running linux environment and log on to your compute node as before. NB! If you have no active reservation you have to do that first.\nLoad necessary modules and start IGV\n\nmodule load bioinfo-tools\nmodule load IGV/2.16.0\nigv-core\n\nThis should start the IGV so that it is visible on your screen. If not please try to reconnect to Uppmax or consider running IGV locally as that is often the fastest and most convenient solution.\n\n\nOnce we have the program running, you select the genome that you would like to load. Choose Mouse mm10. Note that if you are working with a genome that are not part of the available genomes in IGV, one can create genome files from within IGV. Please check the manual of IGV for more information on that.\nTo open your BAM files, go to File > Load from file... and select your BAM file and make sure that you have a .bai index for that BAM file in the same folder. You can repeat this and open multiple BAM files in the same window, which makes it easy to compare samples. Then select Chr19 since we only have data for that one chromosome.\nFor every file you open a number of panels are opened that visualise the data in different ways. The first panel named Coverage summarises the coverage of base-pairs in the window you have zoomed to. The second panel shows the reads as they are mapped to the genome. If one right click with the mouse on the read panel there many options to group and color reads. The bottom panel named Refseq genes shows the gene models from the annotation.\nTo see actual reads you have to zoom in until the reads are drawn on screen. If you have a gene of interest you can also use the search box to directly go to that gene.\nHere is the list of top 30 differentially expressed genes on Chr19 ordered by absolute fold change. The adjusted p value is shown as padj, the average expression of the gene is shown as baseMean.\n ensembl_gene_id external_gene_name baseMean log2FoldChange padj gene_biotype\n1 ENSMUSG00000117896 AA387883 59.94083 -2.7846887 1.943690e-17 lncRNA\n2 ENSMUSG00000024799 Tm7sf2 947.63388 -2.0385744 1.677171e-44 protein_coding\n3 ENSMUSG00000025172 Ankrd2 59.28633 1.7519899 1.261004e-08 protein_coding\n4 ENSMUSG00000049134 Nrap 220.59983 1.6993887 1.067822e-08 protein_coding\n5 ENSMUSG00000024935 Slc1a1 63.82987 1.6821634 1.652208e-09 protein_coding\n6 ENSMUSG00000037071 Scd1 6678.59981 -1.4473717 2.961722e-14 protein_coding\n7 ENSMUSG00000024665 Fads2 3269.79425 -1.4152150 3.134559e-29 protein_coding\n8 ENSMUSG00000024747 Aldh1a7 65.81205 -1.3544431 1.002599e-06 protein_coding\n9 ENSMUSG00000025216 Lbx1 26.03640 1.3356124 1.328372e-04 protein_coding\n10 ENSMUSG00000056290 Ms4a4b 23.27050 1.3299845 5.015617e-05 protein_coding\n11 ENSMUSG00000025221 Kcnip2 34.13675 -1.3165310 1.463369e-04 protein_coding\n12 ENSMUSG00000032648 Pygm 1129.47092 1.2452572 2.736196e-04 protein_coding\n13 ENSMUSG00000043639 Rbm20 51.36261 1.1816554 7.774718e-04 protein_coding\n14 ENSMUSG00000118032 Gm50147 39.53043 -1.1797580 3.794393e-04 lncRNA\n15 ENSMUSG00000036278 Macrod1 244.02353 1.0824415 4.984802e-07 protein_coding\n16 ENSMUSG00000025203 Scd2 44054.03491 -1.0504733 1.874759e-11 protein_coding\n17 ENSMUSG00000010663 Fads1 4074.38868 -1.0503935 1.470460e-18 protein_coding\n18 ENSMUSG00000060675 Plaat3 5284.36470 -1.0462725 2.114719e-13 protein_coding\n19 ENSMUSG00000016496 Cd274 35.91671 1.0175443 5.632932e-03 protein_coding\n20 ENSMUSG00000024673 Ms4a1 25.80723 1.0130356 6.294275e-03 protein_coding\n21 ENSMUSG00000032773 Chrm1 76.11444 0.9262597 7.665519e-04 protein_coding\n22 ENSMUSG00000067279 Ppp1r3c 162.14777 0.9018589 3.672613e-04 protein_coding\n23 ENSMUSG00000025013 Tll2 108.20333 -0.9012959 1.249858e-03 protein_coding\n24 ENSMUSG00000006457 Actn3 1322.01659 0.8988003 1.352229e-02 protein_coding\n25 ENSMUSG00000075289 Carns1 1003.91026 -0.8819988 4.982949e-10 protein_coding\n26 ENSMUSG00000075010 AW112010 56.94897 0.8128744 4.027595e-02 lncRNA\n27 ENSMUSG00000025227 Mfsd13a 107.55434 -0.8126676 1.107050e-03 protein_coding\n28 ENSMUSG00000067242 Lgi1 506.42577 -0.7842945 2.570293e-06 protein_coding\n29 ENSMUSG00000024812 Tjp2 1478.96029 -0.7627251 9.004722e-07 protein_coding\n30 ENSMUSG00000047368 Abhd17b 1562.07350 -0.7625545 5.750875e-07 protein_coding\nHave a look at few of the interesting genes on Chr19 using the external_gene_name identifier. Look into gene Tm7sf2 or Ankrd2. You might have to right-click and change option to Squished to see more reads.\n Do you expect these genes to be differentially expressed?\nTo see some genes with large number of reads, see Scd1 or Scd2.\n IGV view of gene Tm7sf2 across 6 samples.\n\nIGV view of gene Ankrd2 across 6 samples.\n\nIGV view of gene Scd1 across 6 samples.\nFor more detailed information on the splice reads you can instead of just looking at the splice panel right click on the read panel and select Sashimi plots. This will open a new window showing in an easy readable fashion how reads are spliced in mapping and you will also be able to see that there are differences in between what locations reads are spliced. This hence gives some indication on the isoform usage of the gene.\n Do you think the reads are from a stranded or unstranded library?\n One can visualise all genes in a given pathway using the gene list option under Regions in the menu. If you need hints for how to proceed, see Gene List tutorial at Broad. But, we only have data from one chromosome, so this is not that useful now."
- },
- {
- "objectID": "topics/rnaseq/lab_rnaseq.html#sbatch",
- "href": "topics/rnaseq/lab_rnaseq.html#sbatch",
- "title": "RNASeq Workflow",
- "section": "5 sbatch",
- "text": "5 sbatch\n\n\n\n\n\n\nNote\n\n\n\nYou are not required to run anything practically in this section. This is just to read and understand.\n\n\nWe have throughout this tutorial written bash scripts and run them from the terminal directly. Remember that we are not running on the login node. We have pre-allocated resources, then logged in to a compute node to run tasks. This is called working interactively on Uppmax. This is fine for tutorials and testing purposes. But, if you were to actually work on Uppmax, you would follow a slightly different approach.\nThe standard workflow on Uppmax is to login to the login node and then submit tasks as jobs to something called a Slurm queue. We haven’t used this option, because it involves waiting for an unpredictable amount of time for your submitted job to execute. In this section, we will take a look at how to modify a standard bash script to work with Slurm job submission.\nThis is how our standard bash script for mapping looks like:\n\n#!/bin/bash\n\n# load modules\nmodule load bioinfo-tools\nmodule load HISAT2/2.2.1\nmodule load samtools/1.19\n\n# create output filename prefix\nprefix=$( basename \"$1\" | sed -E 's/_.+$//' )\n\nhisat2 \\\n-p 8 \\\n-x ../reference/mouse_chr19_hisat2/mouse_chr19_hisat2 \\\n--summary-file \"${prefix}.summary\" \\\n-1 $1 \\\n-2 $2 | samtools sort -O BAM > \"${prefix}.bam\"\n\nWe add SBATCH commands to the above script. The new script looks like this:\n\n\n#!/bin/bash\n#SBATCH -A \n#SBATCH -p core\n#SBATCH -n 8\n#SBATCH -t 3:00:00\n#SBATCH -J hisat2-align\n\n# load modules\nmodule load bioinfo-tools\nmodule load HISAT2/2.2.1\nmodule load samtools/1.19\n\n# create output filename prefix\nprefix=$( basename \"$1\" | sed -E \"s/_.+$//\" )\n\nhisat2 \\\n -p 8 \\\n -x ../reference/mouse_chr19_hisat2/mouse_chr19_hisat2 \\\n --summary-file \"${prefix}-summary.txt\" \\\n -1 $1 \\\n -2 $2 | samtools sort -O BAM > \"${prefix}.bam\"\n\n\nThe SBATCH commands in the above script is specifying the account name to use resources from, the required number of cores, the time required for the job and a job name.\n If you run this as a normal bash script like this ./hisat2_align.sh ... or bash ./hisat2_align.sh ..., the SBATCH comments have no effect (they are treated as comments) and the contents of the script will immediately start executing. But if you run this as script as sbatch ./hisat2_align.sh ..., the script is submitted as a job to the Uppmax Slurm queue. In this case, the SBATCH lines are interpreted and used by Slurm. At some point, your submitted job will reach the top of the queue and then the script will start to be executed.\nYou can check your jobs in the queue by running the following command.\n\njobinfo -u user\n\nAnd this gives a list like this:\n\nCLUSTER: rackham\nRunning jobs:\n JOBID PARTITION NAME USER ACCOUNT ST START_TIME TIME_LEFT NODES CPUS NODELIST(REASON)\n 5006225 core (null) user gXXXXXXX R 2018-09-12T14:00:03 44:31 1 1 r169\n 5006229 core (null) user gXXXXXXX R 2018-09-12T14:00:03 44:31 1 1 r169\n 5006352 core (null) user gXXXXXXX R 2018-09-12T14:04:14 48:42 1 1 r178\n 5006355 core (null) user gXXXXXXX R 2018-09-12T14:05:17 49:45 1 1 r169\n 5006356 core (null) user gXXXXXXX R 2018-09-12T14:06:08 50:36 1 5 r179\n\nIf the job is pending, then you will see PD in the ST column. If your job is running, you should see R. Once your job starts running, you will see a file named slurm-XXXX.out in the directory in which you submitted the job. This is the standard-out from that job. ie; everything that you would normally see printed to your screen when running locally, is printed to this file when running as a job. Once the job is over, one would inspect the slurm output file.\n\nhead slurm-XXXX.out\ntail slurm-XXXX.out\ncat slurm-XXXX.out"
- },
- {
- "objectID": "topics/rnaseq/lab_rnaseq.html#nextflow",
- "href": "topics/rnaseq/lab_rnaseq.html#nextflow",
- "title": "RNASeq Workflow",
- "section": "6 Nextflow",
- "text": "6 Nextflow\n\n\n\n\n\n\nNote\n\n\n\nYou are not required to run anything practically in this section. This is just to read and understand.\n\n\nEverything you have done today and more is easily done using structured pipelines. Nextflow is a popular framework for creating bioinformatic pipelines and nf-core is a collection of curated analyses pipelines. Here, we will discuss the steps for analysing our current dataset using the nf-core rnaseq pipeline for bulk RNA-Seq. The nf-core website and pipeline specific pages are good sources of information on what the pipeline does and what parameters can be changed.\n\nWe need a samplesheet.csv to define our samples. In this case, the full size samples are used. For single-end reads, fastq_2 column is left empty.\nsample,fastq_1,fastq_2,strandedness\nko_1,/crex/course_data/ngsintro/rnaseq/main_full/1_raw/SRR3222409_1.fq.gz,/crex/course_data/ngsintro/rnaseq/main_full/1_raw/SRR3222409_2.fq.gz,unstranded\nko_2,/crex/course_data/ngsintro/rnaseq/main_full/1_raw/SRR3222410_1.fq.gz,/crex/course_data/ngsintro/rnaseq/main_full/1_raw/SRR3222410_2.fq.gz,unstranded\nko_3,/crex/course_data/ngsintro/rnaseq/main_full/1_raw/SRR3222411_1.fq.gz,/crex/course_data/ngsintro/rnaseq/main_full/1_raw/SRR3222411_2.fq.gz,unstranded\nwt_1,/crex/course_data/ngsintro/rnaseq/main_full/1_raw/SRR3222412_1.fq.gz,/crex/course_data/ngsintro/rnaseq/main_full/1_raw/SRR3222412_2.fq.gz,unstranded\nwt_2,/crex/course_data/ngsintro/rnaseq/main_full/1_raw/SRR3222413_1.fq.gz,/crex/course_data/ngsintro/rnaseq/main_full/1_raw/SRR3222413_2.fq.gz,unstranded\nwt_3,/crex/course_data/ngsintro/rnaseq/main_full/1_raw/SRR3222414_1.fq.gz,/crex/course_data/ngsintro/rnaseq/main_full/1_raw/SRR3222414_2.fq.gz,unstranded\nWe need a params.config file to define parameters such as input, output, genome, annotation etc.\nparams.input = \"samplesheet.csv\"\nparams.outdir = \"results\"\nparams.aligner = \"star_salmon\"\n\nparams.fasta = \"/sw/data/igenomes/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa\"\nparams.gtf = \"/sw/data/igenomes/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf\"\ngene_bed = \"/sw/data/igenomes/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed\"\nstar_index = \"/sw/data/igenomes/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/version2.7.x/\"\nAnd lastly we have a nextflow.sh which will be our bash script for launching the job.\n\n\n#!/bin/bash\n\n#SBATCH -A \n#SBATCH -p core\n#SBATCH -n 1\n#SBATCH -t 4:00:00\n#SBATCH -J nf-core\n\nmodule load bioinfo-tools\nmodule load Nextflow/22.10.1\nmodule load nf-core/2.6\nNXF_HOME=.\n\nnextflow run nf-core/rnaseq -r 3.7 -c params.config -profile uppmax --project -resume\n\n\nNotice that we use -profile uppmax since this is run on Uppmax. The job is then submitted by simply running sbatch nextflow.sh.\nThe slurm output from this job looks like this:\nNote that NXF_HOME is set to $HOME/.nextflow\nPlease change NXF_HOME to a place in your project directory (export NXF_HOME=yourprojectfolder)\n\nN E X T F L O W ~ version 21.10.6\nLaunching `nf-core/rnaseq` [happy_sammet] - revision: e0dfce9af5 [3.7]\n\n\n------------------------------------------------------\n ,--./,-.\n ___ __ __ __ ___ /,-._.--~'\n |\\ | |__ __ / ` / \\ |__) |__ } {\n | \\| | \\__, \\__/ | \\ |___ \\`-._,-`-,\n `._,._,'\n nf-core/rnaseq v3.7\n------------------------------------------------------\nCore Nextflow options\n revision : 3.7\n runName : happy_sammet\n containerEngine : singularity\n launchDir : /crex/course_data/ngsintro/rnaseq/main_full/nextflow\n workDir : /crex/course_data/ngsintro/rnaseq/main_full/nextflow/work\n projectDir : ./assets/nf-core/rnaseq\n userName : royfranc\n profile : uppmax\n configFiles : /crex/course_data/ngsintro/rnaseq/main_full/nextflow/assets/nf-core/rnaseq/nextflow.config, /crex/course_data/ngsintro/rnaseq/main_full/nextflow/params.config\n\nInput/output options\n input : samplesheet.csv\n outdir : results\n\nReference genome options\n fasta : /sw/data/igenomes/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa\n gtf : /sw/data/igenomes/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf\n save_reference : true\n igenomes_base : /sw/data/igenomes/\n\nInstitutional config options\n config_profile_description: UPPMAX (Rackham) cluster profile provided by nf-core/configs.\n config_profile_contact : Phil Ewels (@ewels)\n config_profile_url : https://www.uppmax.uu.se/\n\nMax job request options\n max_cpus : 20\n max_memory : 970 GB\n max_time : 10d\n\nGeneric options\n tracedir : null/pipeline_info\n\n!! Only displaying parameters that differ from the pipeline defaults !!\n------------------------------------------------------\nIf you use nf-core/rnaseq for your analysis please cite:\n\n* The pipeline\n https://doi.org/10.5281/zenodo.1400710\n\n* The nf-core framework\n https://doi.org/10.1038/s41587-020-0439-x\n\n* Software dependencies\n https://github.com/nf-core/rnaseq/blob/master/CITATIONS.md\n------------------------------------------------------\n[- ] process > NFCORE_RNASEQ:RNASEQ:PREPAR... -\n\n[- ] process > NFCORE_RNASEQ:RNASEQ:PREPAR... -\n[- ] process > NFCORE_RNASEQ:RNASEQ:PREPAR... -\n[- ] process > NFCORE_RNASEQ:RNASEQ:PREPAR... -\n[- ] process > NFCORE_RNASEQ:RNASEQ:PREPAR... -\n[- ] process > NFCORE_RNASEQ:RNASEQ:PREPAR... -\n[- ] process > NFCORE_RNASEQ:RNASEQ:INPUT_... -\n[- ] process > NFCORE_RNASEQ:RNASEQ:CAT_FASTQ -\n[- ] process > NFCORE_RNASEQ:RNASEQ:FASTQC... -\n[- ] process > NFCORE_RNASEQ:RNASEQ:FASTQC... -\n[- ] process > NFCORE_RNASEQ:RNASEQ:ALIGN_... -\n[- ] process > NFCORE_RNASEQ:RNASEQ:ALIGN_... -\n\n...\nskipping many lines here\n...\n\n[3d/d294eb] process > NFCORE_RNASEQ:RNASEQ:CUSTOM... [100%] 1 of 1 ✔\n[de/a03037] process > NFCORE_RNASEQ:RNASEQ:MULTIQ... [100%] 1 of 1 ✔\n-[nf-core/rnaseq] 6/6 samples passed STAR 5% mapped threshold:\n 90.41%: ko_2\n 89.8%: ko_3\n 87.15%: ko_1\n 89.7%: wt_2\n 90.29%: wt_3\n 91.02%: wt_1\n ..see pipeline reports for full list\n-\n-[nf-core/rnaseq] Pipeline completed successfully-\nCompleted at: 13-Jan-2023 14:39:08\nDuration : 1h 45m 30s\nCPU hours : 90.4\nSucceeded : 207\nThe output results directory looks like this:\nresults/\n├── fastqc\n├── genome\n│ ├── genes.bed\n│ ├── genome.fa.fai\n│ ├── genome.fa.sizes\n│ ├── genome_genes.gtf\n│ ├── genome.transcripts.fa\n│ ├── index\n│ └── rsem\n├── multiqc\n│ └── star_salmon\n├── pipeline_info\n│ ├── samplesheet.valid.csv\n│ └── software_versions.yml\n├── star_salmon\n│ ├── bigwig\n│ ├── deseq2_qc\n│ ├── dupradar\n│ ├── featurecounts\n│ ├── ko_1\n│ ├── ko_1.markdup.sorted.bam\n│ ├── ko_1.markdup.sorted.bam.bai\n│ ├── ko_2\n│ ├── ko_2.markdup.sorted.bam\n│ ├── ko_2.markdup.sorted.bam.bai\n│ ├── ko_3\n│ ├── ko_3.markdup.sorted.bam\n│ ├── ko_3.markdup.sorted.bam.bai\n│ ├── log\n│ ├── picard_metrics\n│ ├── preseq\n│ ├── qualimap\n│ ├── rseqc\n│ ├── salmon.merged.gene_counts_length_scaled.rds\n│ ├── salmon.merged.gene_counts_length_scaled.tsv\n│ ├── salmon.merged.gene_counts.rds\n│ ├── salmon.merged.gene_counts_scaled.rds\n│ ├── salmon.merged.gene_counts_scaled.tsv\n│ ├── salmon.merged.gene_counts.tsv\n│ ├── salmon.merged.gene_tpm.tsv\n│ ├── salmon.merged.transcript_counts.rds\n│ ├── salmon.merged.transcript_counts.tsv\n│ ├── salmon.merged.transcript_tpm.tsv\n│ ├── salmon_tx2gene.tsv\n│ ├── samtools_stats\n│ ├── stringtie\n│ ├── wt_1\n│ ├── wt_1.markdup.sorted.bam\n│ ├── wt_1.markdup.sorted.bam.bai\n│ ├── wt_2\n│ ├── wt_2.markdup.sorted.bam\n│ ├── wt_2.markdup.sorted.bam.bai\n│ ├── wt_3\n│ ├── wt_3.markdup.sorted.bam\n│ └── wt_3.markdup.sorted.bam.bai\n└── trimgalore\nIf you want to look into the nextflow results yourself, you can check them out here: /crex/course_data/ngsintro/rnaseq/main_full/nextflow.\nThis pipeline takes you from raw reads to counts including read QC, mapping, mapping QC and quantification as well as a complete collated overview of all steps as a MultiQC report (multiqc/star_salmon/multiqc_report.html). The star_salmon/salmon.merged.gene_counts.tsv is the counts file that you would use for downstream differential gene expression using DESeq2.\nFor standard analyses steps, it is recommended to use a pipeline as the tools are up-to-date and the analyses steps are reproducible using exactly the same versions of tools."
- },
- {
- "objectID": "topics/rnaseq/lab_rnaseq.html#simons-analysis",
- "href": "topics/rnaseq/lab_rnaseq.html#simons-analysis",
- "title": "RNASeq Workflow",
- "section": "7 Simon’s analysis",
- "text": "7 Simon’s analysis\nWe had Simon Andrews from the Babraham institute with us on one of the workshops and he did his own exploration into the dataset from this paper using his tool SeqMonk. It’s an excellent read and highly recommended. His report is available here."
- },
- {
- "objectID": "topics/rnaseq/lab_rnaseq.html#conclusion",
- "href": "topics/rnaseq/lab_rnaseq.html#conclusion",
- "title": "RNASeq Workflow",
- "section": "8 Conclusion",
- "text": "8 Conclusion\nWe hope that you enjoyed getting your hands wet working on some real-ish data. In this tutorial, we have covered the most important data processing steps that may be enough when the libraries are good. If not, there are plenty of troubleshooting procedures to try before discarding the data. And once the count table are in place, the biostatistics and data mining begins. There are no well-defined solutions here, all depends on the experiment and questions to be asked, but we strongly advise learning R. Not only to use the specifically designed statistical packages to analyse NGS count data, but also to be able to handle the data and results as well as to generate high-quality plots. There are many available tools and well-written tutorials with examples to learn from.\nFor those interested in RNA-Seq analysis, SciLifeLab offers a more advanced course in RNA-Seq analysis each semester. For more information, see SciLifeLab events."
- },
- {
- "objectID": "topics/uppmax/intro/lab_uppmax_intro.html",
- "href": "topics/uppmax/intro/lab_uppmax_intro.html",
- "title": "Uppmax Introduction",
- "section": "",
- "text": "Note\n\n\n\nIn code blocks, the dollar sign ($) is not to be printed. The dollar sign is usually an indicator that the text following it should be typed in a terminal window."
- },
- {
- "objectID": "topics/uppmax/intro/lab_uppmax_intro.html#the-devel-queue",
- "href": "topics/uppmax/intro/lab_uppmax_intro.html#the-devel-queue",
- "title": "Uppmax Introduction",
- "section": "9.1 The devel queue",
- "text": "9.1 The devel queue\nIf it is a really big job, it might be in the queue for a day or two before it starts, so it is important to know that the first thing it does is not crashing because you made a typo on line 7. One way to test this is to open a new connection to UPPMAX, and line by line try your code. Copy-paste (Ctrl+Shift+c and Ctrl+Shift+v in the terminal window) to make sure it’s really the code in the script you are trying.\nIf your script is longer than a couple of lines, this approach can be tiring. There are 12 nodes at UPPMAX that are dedicated to do quick test runs, which have a separate queue called devel. They are available for use more or less all the time since not very many are using them. To avoid people abusing the free nodes for their analysis, there is a 1 hour time limit for jobs on them. To submit jobs to this short testing queue, change -p to devel instead of node or core, and make sure -t is set to maximum 01:00:00. Try submitting the samtools sbatch file we used earlier to the devel queue and run it again."
- },
- {
- "objectID": "topics/uppmax/intro/lab_uppmax_intro.html#info-about-finished-jobs",
- "href": "topics/uppmax/intro/lab_uppmax_intro.html#info-about-finished-jobs",
- "title": "Uppmax Introduction",
- "section": "9.2 Info about finished jobs",
- "text": "9.2 Info about finished jobs\nIf you want information about jobs you have run in the past, you can use the tool finishedjobinfo. It will print information about the jobs you have run lately.\nFun things to look for in this information is jobstate which will tell you if the program reported any error while running. If so, jobstate will be FAILED and you could suspect that something didn’t go according to the plan, and you should check the output from that job run (the slurm-.out file) and see if you can solve the error.\nOther good things to look for could be:\n\nmaxmemory_in_GiB: tells you how much memory the program used at most.\nruntime: tells you how long time the program ran before it finished/failed"
- },
- {
- "objectID": "topics/uppmax/intro/lab_uppmax_intro.html#time-and-space",
- "href": "topics/uppmax/intro/lab_uppmax_intro.html#time-and-space",
- "title": "Uppmax Introduction",
- "section": "9.3 Time and space",
- "text": "9.3 Time and space\nRemember the commands uquota (show how much of your storage space you are using) and projinfo (shows you how much of your allocated time you have used) from the lecture? Try running them and see how you are doing.\n\n\n\n\n\n\nOptional\n\n\n\nThis optional material on uppmax pipelines will teach you the basics in creating pipelines. Continue with this if you finish the current lab ahead of time. Navigate to the exercise Uppmax Pipelines lab."
- },
- {
- "objectID": "topics/vc/lab_vc.html",
- "href": "topics/vc/lab_vc.html",
- "title": "Variant Calling",
- "section": "",
- "text": "Whole genome sequencing (WGS) is a comprehensive method for analyzing entire genomes. This workshop will take you through the process of calling germline short variants (SNVs and INDELs) in WGS data from three human samples.\n\nThe first part of the workshop will guide you through a basic variant calling workflow in one sample. The goals are that you should get familiar with the bam and vcf file formats, and be able to interpret vcf files in Integrative Genomics Viewer (IGV).\nIf you have time, the next part of the workshop will show you how to perform joint variant calling in three samples. The goals here are that you should be able to interpret multi-sample vcf files and explain the differences between the g.vcf and vcf file formats.\nIf you have time, the last part of the workshop will take you through the GATK best practices for germline short variant detection in three samples. The goal here is that you should learn how to use GATK’s documentation so that you can analyze your own samples in the future.\n\n\n\n\n\n\n\nGeneral guide\n\n\n\n\nYou will work on the computing cluster Dardel at PCD\nIf you change the node you are working on you will need to reload the tool modules.\nPlease type commands in the terminal instead of copying and pasting them which often result in formatting errors.\nUse tab completion.\nIn paths, please replace username with your actual PDC username.\nIn commands, please replace parameter with the correct parameter, for example your input file name, output file name, directory name, etc.\nA line starting with # is a comment\nRunning a command without parameters will often return a help message on how to run the command.\nAfter a command is completed, please check that the desired output file was generated and that it has a reasonable size (use ls -l).\nGoogle errors, someone in the world has run into EXACTLY the same problem you had and asked about it on a forum somewhere."
- },
- {
- "objectID": "topics/vc/lab_vc.html#samples",
- "href": "topics/vc/lab_vc.html#samples",
- "title": "Variant Calling",
- "section": "Samples",
- "text": "Samples\nThe 1000 Genomes Project ran between 2008 and 2015, creating the largest public catalogue of human variation and genotype data. In this workshop we will use low coverage whole genome sequence data from three individuals, generated in the first phase of the 1000 Genomes Project.\n\n\n\nSample\nPopulation\nSequencing technology\n\n\n\n\nHG00097\nBritish in England and Scotland\nLow coverage WGS\n\n\nHG00100\nBritish in England and Scotland\nLow coverage WGS\n\n\nHG00101\nBritish in England and Scotland\nLow coverage WGS"
- },
- {
- "objectID": "topics/vc/lab_vc.html#Genomicregion",
- "href": "topics/vc/lab_vc.html#Genomicregion",
- "title": "Variant Calling",
- "section": "Genomic region",
- "text": "Genomic region\nThe LCT gene on chromosome 2 encodes the enzyme lactase, which is responsible for the metabolism of lactose in mammals. Most mammals can not digest lactose as adults, but some humans can. Genetic variants upstream of the LCT gene causes lactase persistence, which means that lactase is expressed also in adulthood and the carrier can continue to digest lactose. The variant rs4988235, located at position chr2:136608646 in the GRCh37 reference genome, has been shown to lead to lactose persistence. The alternative allele (A on the forward strand and T on the reverse strand) creates a new transcription factor binding site that enables continued expression of the gene after weaning.\nIn this workshop we will detect genetic variants in the region chr2:136545000-136617000 in the three samples listed above, and check if they carry the allele for lactase persistence.\nFor those interested in the details of the genetic bases for lactose tolerance, please read the first three pages of Lactose intolerance: diagnosis, genetic, and clinical factors by Mattar et al. The variant rs4988235 is here referred to as LCT-13910C>T."
- },
- {
- "objectID": "topics/vc/lab_vc.html#Data",
- "href": "topics/vc/lab_vc.html#Data",
- "title": "Variant Calling",
- "section": "Data folder",
- "text": "Data folder\nAll input data for this exercise is located in this folder on Dardel:\n\n\n/sw/courses/ngsintro/reseq/data\n\n\nThe fastq files are located in this folder:\n\n\n/sw/courses/ngsintro/reseq/data/fastq\n\n\nReference files, such as the reference genome in fasta format, are located in this folder:\n\n\n/sw/courses/ngsintro/reseq/data/ref"
- },
- {
- "objectID": "topics/vc/lab_vc.html#preparelaptop",
- "href": "topics/vc/lab_vc.html#preparelaptop",
- "title": "Variant Calling",
- "section": "Laptop",
- "text": "Laptop\nThis lab will be done completely on Dardel and the instructions assume that you connect via ThinLinc. However, if you prefer to connect to Dardel via ssh you can instead copy some of the resulting files to your laptop and work on them there. , install IGV, and run all the IGV steps on your laptop. If so, please create a local workspace on your laptop, for example a folder called ngsworkflow on your desktop. You need to have write permission in this folder. If you connect to Dardel via ThinLinc you don’t have to create a local workspace."
- },
- {
- "objectID": "topics/vc/lab_vc.html#dardel",
- "href": "topics/vc/lab_vc.html#dardel",
- "title": "Variant Calling",
- "section": "Dardel",
- "text": "Dardel\n\nConnect to Dardel\nDuring this lab it is best to connect to Dardel with ThinLinc, which gives you a graphical remote desktop. Instructions for this is available at Connecting to Dardel. Please follow the instructions in section 1.2 Remote desktop connection.\n\n\nLogon to a node\nThis lab should be done on a compute node (not the login node). First check if you already have an active job allocation using this command:\nsqueue -u username\nWhere username should be replaced with your username. If no jobs are listed you should allocate a job for this lab. If you already have an active job allocation please proceed to Connect to the node below.\nUse this code to allocate a job on day 1 of variant-calling:\n\n\nsalloc -A -t 04:00:00 -p shared --mem=6Gb --no-shell\n\n\nUse this code to allocate a job on day 2 of variant-calling:\n\n\nsalloc -A -t 04:00:00 -p shared --mem=6Gb --no-shell\n\n\nOnce your job allocation has been granted (should not take long) please check the allocation again using:\nsqueue -u username\nYou should now see that you have an active job allocation. The node name for your job is listed under the nodelist header.\nConnect to the node:\nssh -Y nodename\n\n\nWorkspace on Dardel\nYou should work in your folder under the course’s project folder, just like you have done during the previous labs.\nStart by going there using this command:\n\n\ncd /cfs/klemming/projects/supr//username/ngsworkflow\n\n\nWhere username should be replaced with your real username. Create a folder for this exercise and move into it:\nmkdir ngsworkflow\ncd ngsworkflow\nMake sure you are located in\n\n\n/cfs/klemming/projects/supr//username/ngsworkflow\n\n\nfor the rest of this lab.\n\n\nSymbolic links to data\nThe raw data files are located in the Data folder described above.\nCreate a symbolic link to the reference genome (in this case chromosome 2 in GRCh37) in your workspace:\n\n\nln -s /sw/courses/ngsintro/reseq/data/ref/human_g1k_v37_chr2.fasta\n\n\nDo the same with the fastq files:\n\n\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00097_1.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00097_2.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00100_1.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00100_2.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00101_1.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00101_2.fq\n\n\n\n\nAccessing programs\nLoad the modules that are needed during this workshop. Remember that these modules must be loaded every time you login to Dardel, or when you connect to a new compute node.\nFirst load the bioinfo-tools module:\nmodule load bioinfo-tools\nThis makes it possible to load the individual programs:\nmodule load bwa/0.7.17\nmodule load samtools/1.20\nmodule load GATK/4.3.0.0\nAlthough you don’t have to specify which versions of the tools to use, it is recommended to do so for reproducibility if you want to rerun the exact same analyses later."
- },
- {
- "objectID": "topics/vc/lab_vc.html#index-the-genome",
- "href": "topics/vc/lab_vc.html#index-the-genome",
- "title": "Variant Calling",
- "section": "Index the genome",
- "text": "Index the genome\nTools that compare short reads with a large reference genome needs indexes of the reference genome to work efficiently. You therefore need to create index files for each tool.\nFirst check if you are standing in the correct directory:\npwd\nShould return\n\n\n/cfs/klemming/projects/supr//username/ngsworkflow\n\n\nGenerate BWA index files:\nbwa index -a bwtsw human_g1k_v37_chr2.fasta\nCheck that several new files have been created using ls -l. Then Generate a samtools index:\nsamtools faidx human_g1k_v37_chr2.fasta\nCheck to see what file(s) were created using ls -lrt. Then Generate a GATK sequence dictionary:\ngatk --java-options -Xmx5g CreateSequenceDictionary -R human_g1k_v37_chr2.fasta -O human_g1k_v37_chr2.dict\nAgain, check what file(s) were created using ls -lrt."
- },
- {
- "objectID": "topics/vc/lab_vc.html#aligning-reads",
- "href": "topics/vc/lab_vc.html#aligning-reads",
- "title": "Variant Calling",
- "section": "1.1 Aligning reads",
- "text": "1.1 Aligning reads\n\n1.1.1 BWA mem\nYou should use BWA mem to align the reads to the reference genome.\nIn the call to BWA mem you need to add something called a read group, which contains information about how the reads were generated. This is required by HaplotypeCaller. Since we don’t know exactly how the reads in the 1000 Genomes Project were generated we will assume that each pair of fastq files was generated from one library preparation (libraryx), derived from one biological sample (HG00097), and run on one lane (lanex) of a flowcell (flowcellx) on the Illumina machine, and define a toy read group with this information. The code for adding this read group is\n-R “(RG?)\\tID:HG00097\\tPU:lanex_flowcellx\\tSM:HG00097\\tLB:libraryx\\tPL:illumina”.\n\n\n\n\n\n\nNote\n\n\n\nWhen running BWA for another sample later on you have to replace HG00097 in the read group with the new sample name. To learn more about read groups please read this article at GATK forum.\n\n\nYou also need to specify how many threads the program should use, which should be the same as the number of cores you have access. As we have asked for –mem=6Gb, which corresponds to 14 cores on Dardel, we can specify -t 14 below. You also need to specify what reference genome file to use. The output from BWA should be parsed to samtools sort, which sorts the sam file according to chromosome position and then converts the sam file to the binary bam format. Finally, use a file redirect > so that the output ends up in a file and not on your screen.\nFirst make sure that you are standing in the workspace you created on Dardel for this lab:\npwd\nShould return\n\n\n/cfs/klemming/projects/supr//username/ngsworkflow\n\n\nThen use this command to align the reads, add the read group, sort the reads and write them to a bam file:\nbwa mem \\\n-R \"@RG\\tID:readgroup_HG00097\\tPU:lanex_flowcellx\\tSM:HG00097\\tLB:libraryx\\tPL:illumina\" \\\n-t 14 human_g1k_v37_chr2.fasta HG00097_1.fq HG00097_2.fq | samtools sort > HG00097.bam\nPlease check that the expected output file was generated and that it has content using ls -lrt.\nNext you need to index the generated bam file so that programs can randomly access the sorted data without reading the whole file. This command creates an index file with the same name as the input bam file, except with a .bai extension:\nsamtools index HG00097.bam\nPlease check what output file was generated this time.\n\n\n1.1.2 Check bam with samtools\nThe bam file is binary so we cannot read it directly, but we can view it with the program samtools view. The header section of the bam file can be viewed separately with the -H flag:\nsamtools view -H HG00097.bam\n\nQuestion\n\nThe (SQ?) tag of the bam header contains information about reference sequence. What do you think SN:2 and LN:243199373 in this tag means?\n\nThe aligned reads can be viewed with samtools view without the -H. This will display the entire bam file which is quite large, so if you just want to look at the first 5 lines (for example) you can combine samtools view with head:\nsamtools view HG00097.bam | head -n 5\n\n\nQuestion\n\nWhat is the leftmost mapping position of the first read in the bamfile?\n\nPlease have a look at the Sequence Alignment/Map Format Specification for more information about bam files.\n\n\n\n1.1.3 Check bam in IGV\nTo use IGV on Dardel we recommend that you are connected via ThinLinc. Alternatively you can install IGV on your local computer, download the files using scp, and look at them locally. The instructions below assume that you have logged in to Dardel via ThinLinc.\nFirst use pwd to check if you are standing in the correct directory:\npwd\nShould return\n\n\n/cfs/klemming/projects/supr//username/ngsworkflow\n\n\nTo start IGV please type this in the terminal:\nmodule load IGV\nigv.sh &\nIn IGV:\nIn the upper left dropdown menu choose Human hg19 (which is the same as GRCh37).\nIn the File menu, select Load from File and select HG00097.bam, which should then appear in the tracks window.\nZoom in to see the reads. You can either select a region by click and drag, or by typing a region or a gene name in the text box at the top. Remember that we have data for the region chr2:136545000-136617000.\nIGV can be closed by selecting exit in the File menu or by clicking x in the upper right corner of the IGV window, but you can keep it open for the rest of the lab.\n\nQuestions\n\nWhat is the read length?\nApproximately how many reads cover an arbitrary position in the genomic region we are looking at?\nWhich RefSeq Genes are located within the region chr2:136545000-136617000?"
- },
- {
- "objectID": "topics/vc/lab_vc.html#variant-calling",
- "href": "topics/vc/lab_vc.html#variant-calling",
- "title": "Variant Calling",
- "section": "1.2 Variant Calling",
- "text": "1.2 Variant Calling\n\n1.2.1 HaplotypeCaller\nNow we will detect short variants in the bam file using GATK’s HaplotypeCaller. First use pwd to check if you are standing in the correct directory:\npwd\nShould return\n\n\n/cfs/klemming/projects/supr//username/ngsworkflow\n\n\nThen run:\ngatk --java-options -Xmx4g HaplotypeCaller \\\n-R human_g1k_v37_chr2.fasta \\\n-I HG00097.bam \\\n-O HG00097.vcf\nCheck what new files were generated with ls -lrt.\n\n\n1.2.2 Explore the vcf file\nNow you have your first vcf file containing the raw variants in the region chr2:136545000-136617000 in sample HG00097. Please look at the vcf file with less and try to understand its structure.\nVcf files contains meta-information lines starting with ##, a header line starting with #CHROM, and then data lines each containing information about one variant position in the genome. The header line defines the columns of the data lines, and to view the header line you can type this command:\ngrep '#CHROM' HG00097.vcf\n\nQuestion\n\nWhat column of the VCF file contains genotype information for the sample HG00097?\n\nThe meta-information lines starting with ##INFO defines how the data in the INFO column is encoded, and the meta-information lines starting with ##FORMAT defines how the data in the FORMAT column is encoded.\nTo view the meta-information lines describing the INFO column use:\ngrep '##INFO' HG00097.vcf\nTo view the meta-information lines describing the FORMAT column use:\ngrep '##FORMAT' HG00097.vcf\n\n\nQuestion\n\nWhat does GT in the FORMAT column of the data lines mean?\nWhat does AD in the FORMAT column of the data lines mean?\n\nTo look at the details of one specific genetic variant at position 2:136545844 use:\ngrep '136545844' HG00097.vcf\n\n\nQuestions\n\nWhat genotype does the sample HG00097 have at position 2:136545844?\nWhat are the allelic depths for the reference and alternative alles in sample HG00097 at position 2:136545844?\n\nThe following command can be used to count the data lines (i.e. number of lines that don’t start with “#”) in the vcf file:\ngrep -v \"#\" HG00097.vcf | wc -l\n\n\nQuestion\n\nHow many genetic variants was detected in HG00097?\n\nFor more detailed information about vcf files please have a look at The Variant Call Format specification.\n\n\n\n1.2.3 Check vcf in IGV\nWe assume that you have logged in to Dardel via ThinLinc.\nIf you have closed IGV please open it again as described above.\nLoad the file HG00097.vcf into tracks window of IGV as you did with the HG00097.bam file earlier (load the bam file as well if it is not already loaded). You will now see all the variants called in HG00097.\nYou can view variants in the LCT gene by typing the gene name in the search box, and you can look specifically at the variant at position chr2:136545844 by typing that position in the search box.\nPlease use IGV to answer the questions below.\n\nQuestions\n\nHover the mouse over the upper row of the vcf track. What is the reference and alternative alleles of the variant at position chr2:136545844?\nHover the mouse over the lower row of the vcf track and look under “Genotype Information”. What genotype does HG00097 have at position chr2:136545844? Is this the same as you found by looking directly in the vcf file in question 10?\nLook in the bam track and count the number of reads that have “G” and “C”, respectively, at position chr2:136545844. How is this information captured under “Genotype Attributes”? (Again, hoover the mouse over the lower row of the vcf track.)"
- },
- {
- "objectID": "topics/vc/lab_vc.html#bwa_joint",
- "href": "topics/vc/lab_vc.html#bwa_joint",
- "title": "Variant Calling",
- "section": "2.1 BWA mem",
- "text": "2.1 BWA mem\nRun BWA mem for all three samples in the data set. BWA mem should be run exactly as above, but with the new sample names. You also need to adjust the read group information so that it matches each new sample name. \nFirst use pwd to check if you are standing in the correct directory:\npwd\nShould return\n\n\n/cfs/klemming/projects/supr//username/ngsworkflow\n\n\nThen use this command for every sample to align the reads, add the read group, sort the reads and write them to a bam file:\nbwa mem -R \"@RG\\tID:readgroup_<sample>\\tPU:lanex_flowcellx\\tSM:<sample>\\tLB:libraryx\\tPL:illumina\" \\\n-t 14 human_g1k_v37_chr2.fasta sample_1.fq sample_2.fq | samtools sort > sample.bam\nWhere sample should be replaced with the real samples name, i.e. HG00097, HG00100 and HG00101. Please check that the expected output files were generated and have content using ls -lrt. You also need to index each output bam file:\nsamtools index <sample>.bam\nPlease check what output file was generated this time. If you run out of time you can click below to get paths to precomputed bam files.\n\n\n/sw/courses/ngsintro/reseq/data/bam/HG00097.bam\n/sw/courses/ngsintro/reseq/data/bam/HG00100.bam\n/sw/courses/ngsintro/reseq/data/bam/HG00101.bam"
- },
- {
- "objectID": "topics/vc/lab_vc.html#generategvcf",
- "href": "topics/vc/lab_vc.html#generategvcf",
- "title": "Variant Calling",
- "section": "2.2 Generate g.vcf files",
- "text": "2.2 Generate g.vcf files\nHaplotypeCaller should also be run for all three samples, but this time the output for each sample needs to be in g.vcf format. This is accomplished with a small change in the HaploteypCaller command. First use pwd to check if you are standing in the correct directory:\npwd\nShould return\n\n\n/cfs/klemming/projects/supr//username/ngsworkflow\n\n\nThen:\ngatk --java-options -Xmx4g HaplotypeCaller \\\n-R human_g1k_v37_chr2.fasta \\\n-ERC GVCF \\\n-I sample.bam \\\n-O sample.g.vcf\nPlease replace sample with the real sample names.\nIf you run out of time you can click below to get paths to the precomputed g.vcf files.\n\n\n/sw/courses/ngsintro/reseq/data/vcf/HG00097.g.vcf\n/sw/courses/ngsintro/reseq/data/vcf/HG00100.g.vcf\n/sw/courses/ngsintro/reseq/data/vcf/HG00101.g.vcf"
- },
- {
- "objectID": "topics/vc/lab_vc.html#jointgenotyping",
- "href": "topics/vc/lab_vc.html#jointgenotyping",
- "title": "Variant Calling",
- "section": "2.3 Joint genotyping",
- "text": "2.3 Joint genotyping\nOnce you have the g.vcf files for all samples you should perform joint genotype calling. To do this you first need to combine all individual .g.vcf files to one file using CombineGVCFs.\nFirst use pwd to check if you are standing in the correct directory:\npwd\nShould return\n\n\n/cfs/klemming/projects/supr//username/ngsworkflow\n\n\nThen:\ngatk --java-options -Xmx7g CombineGVCFs \\\n-R human_g1k_v37_chr2.fasta \\\n-V sample1.g.vcf \\\n-V sample2.g.vcf \\\n-V sample3.g.vcf \\\n-O cohort.g.vcf\nPlease replace sample1, sample2, sample3 with the real sample names. Then run GATK’s GenoteypeGVC to generate a vcf file:\ngatk --java-options -Xmx7g GenotypeGVCFs \\\n-R human_g1k_v37_chr2.fasta \\\n-V cohort.g.vcf \\\n-O cohort.vcf\nIf you run out of time you can click below to get paths to the precomputed cohort.g.vcf and cohort.vcf files.\n\n\n/sw/courses/ngsintro/reseq/data/vcf/cohort.g.vcf\n/sw/courses/ngsintro/reseq/data/vcf/cohort.vcf\n\n\n\nQuestions\n\nHow many data lines do the cohort.g.vcf file have? You can use the Linux command grep -v \"#\" cohort.g.vcf to extract all lines in “cohort.g.vcf” that don’t start with “#”, then |, and then wc -l to count those lines.\nHow many data lines do the cohort.vcf file have?\nExplain the difference in number of data lines.\nLook at the header line of the cohort.vcf file. What columns does it have?\nWhat is encoded in the last three columns of the data lines?"
- },
- {
- "objectID": "topics/vc/lab_vc.html#check-combined-vcf-file-in-igv",
- "href": "topics/vc/lab_vc.html#check-combined-vcf-file-in-igv",
- "title": "Variant Calling",
- "section": "2.4 Check combined vcf file in IGV",
- "text": "2.4 Check combined vcf file in IGV\nAgain we assume that you have logged in to Dardel via ThinLinc.\nIf you have closed IGV please open it again as described above.\nLoad the files cohort.vcf, HG00097.bam, HG00100.bam and HG00101.bam into IGV as described earlier.\nThis time lets look closer at the variant rs4988235, located at position chr2:136608646 in the HG19 reference genome. This is the variant that has been shown to lead to lactase persistence.\nPlease use IGV to answer the questions below.\n\nQuestions\n\nWhat is the reference and alternative alleles at chr2:136608646?\nWhat genotype do the three samples have at chr2:136608646? Note how genotypes are color coded in IGV.\nShould any of the individuals avoid drinking milk?\nNow compare the data shown in IGV with the data in the VCF file. Extract the row for the chr2:136608646 variant in the cohort.vcf file, for example using grep '136608646' cohort.vcf. What columns of the vcf file contain the information shown in the upper part of the vcf track in IGV?\nWhat columns of the vcf file contain the information shown in the lower part of the vcf track?\nZoom out so that you can see the MCM6 and LCT genes. Is the variant at chr2:136608646 locate within the LCT gene?\n\nIf you are interested in how this variant affects lactose tolerance please read the article by Mattar et al presented above, or in OMIM."
- },
- {
- "objectID": "topics/vc/lab_vc.html#bwa-mem",
- "href": "topics/vc/lab_vc.html#bwa-mem",
- "title": "Variant Calling",
- "section": "3.1 BWA mem",
- "text": "3.1 BWA mem\nThe first step in GATK’s best pracice variant calling workflow is to run BWA mem for each sample exactly as you did in Variant calling in cohort. You have already done this step, so please use the bam files that you generated in step 2.1 for the steps below."
- },
- {
- "objectID": "topics/vc/lab_vc.html#mark-duplicates",
- "href": "topics/vc/lab_vc.html#mark-duplicates",
- "title": "Variant Calling",
- "section": "3.2 Mark Duplicates",
- "text": "3.2 Mark Duplicates\nSometimes the same DNA fragment is sequenced multiple times, which leads to multiple reads from the same fragment in the fastq file. This can occur due to PCR amplification in the library preparation, or if one read cluster is incorrectly detected as multiple clusters by the sequencing instrument. If a duplicated read contains a genetic variant, the ratio of the two alleles might be obscured, which can lead to incorrect genotyping. It is therefore recommended (in most cases) to mark duplicate reads so that they are counted as one during genotyping.\nPlease read about Picard’s MarkDuplicates here. Picard’s MarkDuplicates has recently been incorporated into the GATK suite, but the usage example in GATKs documentation describes how to call it via the stand alone Picard program. To learn how to use it as part of the GATK module, please call MarkDuplicates without input parameters like this:\ngatk --java-options -Xmx4g MarkDuplicates\nPlease run MarkDuplicates on all three bam files generated in step 2.1. Here is the code for running MarkDuplicates on the sample HG00097:\ngatk --java-options -Xmx4g MarkDuplicates \\\n -I HG00097.bam \\\n -O HG00097.md.bam \\\n -M HG00097_mdmetrics.txt"
- },
- {
- "objectID": "topics/vc/lab_vc.html#recalibrate-base-quality-scores",
- "href": "topics/vc/lab_vc.html#recalibrate-base-quality-scores",
- "title": "Variant Calling",
- "section": "3.3 Recalibrate Base Quality Scores",
- "text": "3.3 Recalibrate Base Quality Scores\nAnother source of error is systematic biases in the assignment of base quality scores by the sequencing instrument. This can be corrected by GATK’s Base Quality Score Recalibration. In short, you first use BaseRecalibrator to build a recalibration model, and then ApplyBQSR to recalibrate the base qualities in your bam file.\nBaseRecalibrator requires a file with known SNPs as input. This file is available in the data folder on Dardel:\n\n\n/sw/courses/ngsintro/reseq/data/ref/1000G_phase1.snps.high_confidence.b37.chr2.vcf\n\n\nPlease recalibrate the base quality scores in all the bam files generated in the previous step. Below is our example solution for sample HG00097. First run BaseRecalibrator:\n\n\ngatk --java-options -Xmx4g BaseRecalibrator \\\n -R human_g1k_v37_chr2.fasta \\\n -I HG00097.md.bam \\\n --known-sites /sw/courses/ngsintro/reseq/data/ref/1000G_phase1.snps.high_confidence.b37.chr2.vcf \\\n -O HG00097.recal.table\n\n\nThen run ApplyBQSR:\ngatk --java-options -Xmx4g ApplyBQSR \\\n -R human_g1k_v37_chr2.fasta \\\n -I HG00097.md.bam \\\n --bqsr-recal-file HG00097.recal.table \\\n -O HG00097.recal.bam"
- },
- {
- "objectID": "topics/vc/lab_vc.html#generate-g.vcf-files",
- "href": "topics/vc/lab_vc.html#generate-g.vcf-files",
- "title": "Variant Calling",
- "section": "3.4 Generate g.vcf files",
- "text": "3.4 Generate g.vcf files\nHaplotypeCaller should also be run for all three samples, and the output should be in g.vcf exactly as described above. This time use recalibrated bam files as input."
- },
- {
- "objectID": "topics/vc/lab_vc.html#joint-genotyping",
- "href": "topics/vc/lab_vc.html#joint-genotyping",
- "title": "Variant Calling",
- "section": "3.5 Joint genotyping",
- "text": "3.5 Joint genotyping\nOnce you have the g.vcf files for all samples you should perform joint genotype calling. This should be done with the commands CombineGVCFs and GenotypeGVCFs exactly as described above, but you should use the g.vcf files generated from the recalibrated bam files as input."
- },
- {
- "objectID": "topics/vc/lab_vc.html#variant-filtering",
- "href": "topics/vc/lab_vc.html#variant-filtering",
- "title": "Variant Calling",
- "section": "3.6 Variant Filtering",
- "text": "3.6 Variant Filtering\nHaplotypeCaller is designed to be very sensitive, which is good because it minimizes the chance of missing real variants. However, it means that the number of false positives can be quite large, so we need to filter the raw callset. GATK offers two ways to filter variants:\n\nThe variant quality score recalibration (VQSR) method uses machine learning to identify variants that are likely to be real. This is the best method if you have a lot of data, for example one whole genome sequence sample or several whole exome samples.\n\nIf you have less data you can use hard filters as described here.\n\nSince we have very little data we will use hard filters. The parameters are slightly different for SNVs and INDELs, so you need to first select all SNVs using SelectVariants and filter them using VariantFiltration with the parameters suggested for SNVs. Then select all INDELs and filter them with the parameters suggested for INDELs. Finally merge the SNVs and INDELs to get all variants in one file using MergeVCFs.\nAn explanation of what the hard filters do can be found here.\nExample solution for filtering SNVs:\ngatk --java-options -Xmx4g SelectVariants \\\n -R human_g1k_v37_chr2.fasta \\\n -V cohort.vcf \\\n --select-type-to-include SNP \\\n -O cohort.snvs.vcf\n\ngatk --java-options -Xmx4g VariantFiltration \\\n -R human_g1k_v37_chr2.fasta \\\n -V cohort.snvs.vcf \\\n -O cohort.snvs.filtered.vcf \\\n --filter-name QDfilter --filter-expression \"QD < 2.0\" \\\n --filter-name MQfilter --filter-expression \"MQ < 40.0\" \\\n --filter-name FSfilter --filter-expression \"FS > 60.0\"\nExample solution for filtering INDELs:\ngatk --java-options -Xmx4g SelectVariants \\\n -R human_g1k_v37_chr2.fasta \\\n -V cohort.vcf \\\n --select-type-to-include INDEL \\\n -O cohort.indels.vcf\n\ngatk --java-options -Xmx4g VariantFiltration \\\n -R human_g1k_v37_chr2.fasta \\\n -V cohort.indels.vcf \\\n -O cohort.indels.filtered.vcf \\\n --filter-name QDfilter --filter-expression \"QD < 2.0\" \\\n --filter-name FSfilter --filter-expression \"FS > 200.0\"\nExample solution for merging filtered SNVs and INDELs:\ngatk --java-options -Xmx4g MergeVcfs \\\n -I cohort.snvs.filtered.vcf \\\n -I cohort.indels.filtered.vcf \\\n -O cohort.filtered.vcf\nOpen your filtered vcf with less and page through it. It still has all the variant lines, but the FILTER column that was blank before is now filled in, with PASS or a list of the filters it failed. Note also that the filters that were run are described in the header section.\n\nPrecomputed files\nIf you run out of time, please click below to get the path to precomputed bam and vcf files for the GATK’s best practices section.\n\n\nPath to intermediary and final bam files: /sw/courses/ngsintro/reseq/data/best_practise_bam\nPath to intermediary and final vcf files: /sw/courses/ngsintro/reseq/data/best_practise_vcf\n\n\n\n\nQuestions\n\nCheck how many variants in total that are present in the cohort.filtered.vcf file and how many that have passed the filters. Is the difference big?\nLook at the variants that did not pass the filters using grep -v 'PASS' cohort.filtered.vcf. Try to understand why these variants didn’t pass the filter."
- },
- {
- "objectID": "topics/vc/lab_vc.html#variant-calling-in-cohort",
- "href": "topics/vc/lab_vc.html#variant-calling-in-cohort",
- "title": "Variant Calling",
- "section": "Variant calling in cohort",
- "text": "Variant calling in cohort\nBelow is a skeleton script that can be used as a template for running variant calling in a cohort. Please modify it to run all the steps in part two of this workshop.\n#!/bin/bash\n#SBATCH -A sens2022-22-123\n#SBATCH -p shared\n#SBATCH --mem=6Gb\n#SBATCH -t 1:00:00\n#SBATCH -J JointVariantCalling\n\nmodule load bioinfo-tools\nmodule load bwa/0.7.17\nmodule load samtools/1.20\nmodule load GATK/4.3.0.0\n\n## loop through the samples:\nfor sample in HG00097 HG00100 HG00101;\ndo\n echo \"Now analyzing: \"${sample}\n #Fill in the code for running bwa-mem for each sample here\n #Fill in the code for samtools index for each sample here\n #Fill in the code for HaplotypeCaller for each sample here\ndone\n#Fill in the code for CombineGVCFs for all samples here\n#Fill in the code for GenotypeGVCFs here\nPlease save the sbatch script in your Dardel folder and call it “joint_genotyping.sbatch” or similar. Make the script executable by this command:\nchmod u+x joint_genotyping.sbatch\nTo run the sbatch script in the SLURM queue, use this command:\nsbatch joint_genotyping.sbatch\nIf you have an active node reservation you can run the script as a normal bash script:\n./joint_genotyping.sbatch\nIf you would like more help with creating the sbatch script, please look at our example solution:\n\n\n#!/bin/bash\n#SBATCH -A \n#SBATCH -p shared\n#SBATCH --mem=6Gb\n#SBATCH -t 2:00:00\n#SBATCH -J JointVariantCalling\n\nmodule load bioinfo-tools\nmodule load bwa/0.7.17\nmodule load samtools/1.20\nmodule load GATK/4.3.0.0\n\nfor sample in HG00097 HG00100 HG00101;\ndo\n echo \"Now analyzing: \"${sample}\n bwa mem -R \\\n \"@RG\\tID:${sample}\\tPU:flowcellx_lanex\\tSM:${sample}\\tLB:libraryx\\tPL:illumina\" \\\n -t 14 human_g1k_v37_chr2.fasta \"${sample}_1.fq\" \"${sample}_2.fq\" | samtools sort > \"${sample}.bam\"\n\n samtools index \"${sample}.bam\"\n\n gatk --java-options -Xmx4g HaplotypeCaller \\\n -R human_g1k_v37_chr2.fasta \\\n -ERC GVCF -I \"${sample}.bam\" \\\n -O \"${sample}.g.vcf\"\n\ndone\n\ngatk --java-options -Xmx4g CombineGVCFs \\\n-R human_g1k_v37_chr2.fasta \\\n-V HG00097.g.vcf \\\n-V HG00100.g.vcf \\\n-V HG00101.g.vcf \\\n-O cohort.g.vcf\n\ngatk --java-options -Xmx4g GenotypeGVCFs \\\n-R human_g1k_v37_chr2.fasta \\\n-V cohort.g.vcf \\\n-O cohort.vcf"
- },
- {
- "objectID": "topics/vc/lab_vc.html#gatk-best-practices",
- "href": "topics/vc/lab_vc.html#gatk-best-practices",
- "title": "Variant Calling",
- "section": "GATK best practices",
- "text": "GATK best practices\nNow please try to incorporate the additional steps from GATK’s best practices into the workflow. If you run out of time you can sneak peek at our example solution below.\n\n\n#!/bin/bash\n#SBATCH -A \n#SBATCH -p shared\n#SBATCH --mem=6Gb\n#SBATCH -t 2:00:00\n#SBATCH -J BestPractise\n\n## load modules\nmodule load bioinfo-tools\nmodule load bwa/0.7.17\nmodule load samtools/1.20\nmodule load GATK/4.3.0.0\n\n# define path to reference genome\nref=\"/sw/courses/ngsintro/reseq/data/ref\"\n\n# make symbolic links\nln -s /sw/courses/ngsintro/reseq/data/ref/human_g1k_v37_chr2.fasta\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00097_1.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00097_2.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00100_1.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00100_2.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00101_1.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00101_2.fq\n\n# index reference genome\nbwa index -a bwtsw human_g1k_v37_chr2.fasta\nsamtools faidx human_g1k_v37_chr2.fasta\ngatk --java-options -Xmx4g CreateSequenceDictionary \\\n-R human_g1k_v37_chr2.fasta \\\n-O human_g1k_v37_chr2.dict\n\n## loop through the samples:\nfor sample in HG00097 HG00100 HG00101;\ndo\n echo \"Now analyzing: ${sample}\"\n # map the reads\n bwa mem \\\n -R \"@RG\\tID:${sample}\\tPU:flowcellx_lanex\\tSM:${sample}\\tLB:libraryx\\tPL:illumina\" \\\n -t 14 human_g1k_v37_chr2.fasta \\\n \"${sample}_1.fq\" \"${sample}_2.fq\" | samtools sort > \"${sample}.bam\"\n\n samtools index $sample\".bam\"\n # mark duplicates\n gatk --java-options -Xmx4g MarkDuplicates \\\n -I \"${sample}.bam\" \\\n -O \"${sample}.md.bam\" \\\n -M \"${sample}_mdmetrics.txt\"\n\n # base quality score recalibration\n gatk --java-options -Xmx4g BaseRecalibrator \\\n -R human_g1k_v37_chr2.fasta \\\n -I \"${sample}.md.bam\" \\\n --known-sites \"${ref}/1000G_phase1.snps.high_confidence.b37.chr2.vcf\" \\\n -O \"${sample}.recal.table\"\n\n gatk --java-options -Xmx4g ApplyBQSR \\\n -R human_g1k_v37_chr2.fasta \\\n -I \"${sample}.md.bam\" \\\n --bqsr-recal-file \"${sample}.recal.table\" \\\n -O \"${sample}.recal.bam\"\n\n # haplotypeCaller in -ERC mode\n gatk --java-options -Xmx4g HaplotypeCaller \\\n -R human_g1k_v37_chr2.fasta \\\n -ERC GVCF \\\n -I \"${sample}.bam\" \\\n -O \"${sample}.g.vcf\"\ndone\n\n# joint genotyping\ngatk --java-options -Xmx4g CombineGVCFs \\\n-R human_g1k_v37_chr2.fasta \\\n-V HG00097.g.vcf \\\n-V HG00100.g.vcf \\\n-V HG00101.g.vcf \\\n-O cohort.g.vcf\n\ngatk --java-options -Xmx4g GenotypeGVCFs \\\n-R human_g1k_v37_chr2.fasta \\\n-V cohort.g.vcf \\\n-O cohort.vcf\n\n# variant filtration SNPs\ngatk --java-options -Xmx4g SelectVariants \\\n-R human_g1k_v37_chr2.fasta \\\n-V cohort.vcf \\\n--select-type-to-include SNP \\\n-O cohort.snvs.vcf\n\ngatk --java-options -Xmx4g VariantFiltration \\\n-R human_g1k_v37_chr2.fasta \\\n-V cohort.snvs.vcf \\\n--filter-name QDfilter --filter-expression \"QD < 2.0\" \\\n--filter-name MQfilter --filter-expression \"MQ < 40.0\" \\\n--filter-name FSfilter --filter-expression \"FS > 60.0\" \\\n-O cohort.snvs.filtered.vcf\n\n# variant filtration indels\ngatk --java-options -Xmx4g SelectVariants \\\n-R human_g1k_v37_chr2.fasta \\\n-V cohort.vcf \\\n--select-type-to-include INDEL \\\n-O cohort.indels.vcf\n\ngatk --java-options -Xmx4g VariantFiltration \\\n-R human_g1k_v37_chr2.fasta \\\n-V cohort.indels.vcf \\\n--filter-name QDfilter --filter-expression \"QD < 2.0\" \\\n--filter-name FSfilter --filter-expression \"FS > 200.0\" \\\n-O cohort.indels.filtered.vcf\n\n# merge filtered SNPs and indels\ngatk --java-options -Xmx4g MergeVcfs \\\n-I cohort.snvs.filtered.vcf \\\n-I cohort.indels.filtered.vcf \\\n-O cohort.filtered.vcf"
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html",
- "href": "topics/vc/lab_vc_tetralith.html",
- "title": "Variant Calling Workflow",
- "section": "",
- "text": "Whole genome sequencing (WGS) is a comprehensive method for analyzing entire genomes. This workshop will take you through the process of calling germline short variants (SNVs and INDELs) in WGS data from three human samples.\n\nThe first part of the workshop will guide you through a basic variant calling workflow in one sample. The goals are that you should get familiar with the bam and vcf file formats, and learn how to interpret the results of variant calling in Integrative Genomics Viewer (IGV).\nIf you have time, the next part of the workshop will show you how to perform joint variant calling in three samples. The goals here is that you should be able to interpret multi-sample vcf files and explain the differences between the g.vcf and vcf file formats. Also, if you are interested in programming, another goal is that you should learn to combine individual Linux commands into an SBATCH script.\n\nIf you have time, the last part of the workshop will take you through the GATK best practices for germline short variant detection in three samples. The goal here is that you should learn how to use GATK’s documentation so that you can analyze your own samples in the future.\n\nGeneral guide\n\n\n\n\n\n\nNote\n\n\n\n\nIn this workshop you will work on the computing cluster Tetralith at NSC.\nYou will use a singularity container (a virtual computer) that mimics the UPPMAX environment.\nIn paths, please replace <nsc_username> with your NSC username.\nIn commands, please replace <parameter> with the correct parameter, for example your input file name, output file name, directory name, etc.\nDo not copy and paste commands from the exercise to terminal, as this can result in formatting errors.\nUse tab completion.\nA line starting with # is a comment\nRunning a command without parameters will often return a help message on how to run the command.\nAfter a command is completed, please check that the desired output file was generated and that it has a reasonable size (use ls -l).\nA common mistake is to attempt to load input files that do not exist, or create output files where you don’t have permission to write.\nUse output file names that describes what was done in the command.\nIf you change the node you are working on you will need to reload the tool modules.\nGoogle errors, someone in the world has run into EXACTLY the same problem you had and asked about it on a forum somewhere."
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#samples",
- "href": "topics/vc/lab_vc_tetralith.html#samples",
- "title": "Variant Calling Workflow",
- "section": "Samples",
- "text": "Samples\nThe 1000 Genomes Project ran between 2008 and 2015, creating the largest public catalogue of human variation and genotype data. In this workshop we will use low coverage whole genome sequence data from three individuals, generated in the first phase of the 1000 Genomes Project.\n\n\n\nSample\nPopulation\nSequencing technology\n\n\n\n\nHG00097\nBritish in England and Scotland\nLow coverage WGS\n\n\nHG00100\nBritish in England and Scotland\nLow coverage WGS\n\n\nHG00101\nBritish in England and Scotland\nLow coverage WGS"
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#Genomicregion",
- "href": "topics/vc/lab_vc_tetralith.html#Genomicregion",
- "title": "Variant Calling Workflow",
- "section": "Genomic region",
- "text": "Genomic region\nThe LCT gene on chromosome 2 encodes the enzyme lactase, which is responsible for the metabolism of lactose in mammals. Most mammals can not digest lactose as adults, but some humans can. Genetic variants upstream of the LCT gene lead to lactase persistence, which means that lactase is expressed also in adulthood and the carrier can continue to digest lactose. The variant rs4988235, located at position chr2:136608646 in the HG19 reference genome, has been shown to lead to lactose persistence. The alternative allele (A on the forward strand and T on the reverse strand) creates a new transcription factor binding site that enables continued expression of the gene after weaning.\nIn this workshop we will use sequencing data for the region chr2:136545000-136617000 chr2:136,039,147-136,662,073 in the 3 samples listed above to illustrate variant calling in NGS data. We will use chromosome 2 from hg19 as reference genome.\nFor those interested in the details of the genetic bases for lactose tolerance, please read the first three pages of Lactose intolerance: diagnosis, genetic, and clinical factors by Mattar et al. The variant rs4988235 is here referred to as LCT-13910C>T."
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#Data",
- "href": "topics/vc/lab_vc_tetralith.html#Data",
- "title": "Variant Calling Workflow",
- "section": "Data folder on UPPMAX",
- "text": "Data folder on UPPMAX\nAll input data for this exercise is located in this folder:\n\n\n/sw/courses/ngsintro/reseq/data\n\n\nThe fastq files are located in this folder:\n\n\n/sw/courses/ngsintro/reseq/data/fastq\n\n\nReference files, such as the reference genome in fasta format, are located in this folder:\n\n\n/sw/courses/ngsintro/reseq/data/ref"
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#preparelaptop",
- "href": "topics/vc/lab_vc_tetralith.html#preparelaptop",
- "title": "Variant Calling Workflow",
- "section": "Local workspace",
- "text": "Local workspace\nThe majority of the analyses in this workshop will be done on the computing cluster, but you will copy some of the resulting files to your laptop. Therefore, please start by creating a folder for this workshop on your laptop. It is up to you where you want to put this, but it can for example be a folder called ngsworkflow on Desktop. You need to have write permission in this folder. The folder you create here will be referred to as local workspace throughout this workshop."
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#the-nsc-cluster",
- "href": "topics/vc/lab_vc_tetralith.html#the-nsc-cluster",
- "title": "Variant Calling Workflow",
- "section": "The NSC cluster",
- "text": "The NSC cluster\nPlease connect to the Tetralith cluster at NSC using ssh:\n$ ssh -Y nsc_username@tetralith.nsc.liu.se\n\n\n\n\n\n\nNote\n\n\n\nNote that your terminal prompt changed to something like nsc_username@tetralith1 $ which means that you have entered Tetralith.\n\n\n\nInteractive session\nOn Tetralith you enter the login node, which is not intended for compute intensive tasks. You should therefore book a compute node, or in this case three cores:\n\n\ntetralith1$ interactive -A -t 04:00:00 -n 3\n\n\n\n\n\n\n\n\nNote\n\n\n\nYour terminal prompt changed to something like <nsc_username>@n424 $ (or another node name), which means that you are now running on one of the compute nodes.\n\n\n\n\nUPPMAX singularity container\nWe will use a singularity container (a virtual computer) that mimics the UPPMAX computing environment. Once you have started the singularity container your environment will look exactly as on UPPMAX, and the software used in this workshop will be available through the module system.\nUse this command to start the singularity container:\n\n\nn424$ singularity shell -B /proj//users:/proj//nobackup /proj//ngsintro.sif\n\n\n\n\n\n\n\n\nNote\n\n\n\nNote that your terminal prompt changed to something like <nsc_username>@offline-uppmax$. This means that you have moved into a “virtual computer” that mimics the UPPMAX environment.\n\n\nIn the singularity container type this to make modules based on Java to load properly:\n\n\nsource /uppmax_init\n\n\nTo close the singularity container later on just type exit in the terminal, but don’t do that now.\n\n\nCluster workspace\nWhile running the UPPMAX singularity container, create a workspace folder for this exercise and move into it:\n\n\noffline-uppmax$ mkdir /proj//nobackup/<nsc_username>/ngsworkflow\noffline-uppmax$ cd /proj//nobackup/<nsc_username>/ngsworkflow\n\n\nThe folder you just created will be referred to as your cluster workspace throughout this workshop.\nThe cluster workspace can be reached also from outside of the UPPMAX singularity container, in this folder on Tetralith:\n\n\ntetralith$ /proj//users/<nsc_username>/ngsworkflow\n\n\nThis is the path you must use when downloading files to your local workspace later on.\n\n\n\n\n\n\n\nNote\n\n\n\nNote: The rest of the instructions assumes that you are running the UPPMAX singularity container from an interactive session on Tetralith, and that you are located in your cluster workspace, unless noted otherwise.\n\n\n\n\nSymbolic links to data\nThe raw data files are located in the Data folder described above. Instead of copying the files to your workspace you should create symbolic links (soft-links) to them. Soft-linking files and folders allows you to work with them as if they were in your current directory, but without multiplying them.\nCreate a symbolic link to the reference genome in your workspace:\n\n\noffline-uppmax$ ln -s /sw/courses/ngsintro/reseq/data/ref/human_g1k_v37_chr2.fasta\n\n\nDo the same with the fastq files:\n\n\noffline-uppmax$ ln -s /sw/courses/ngsintro/reseq/data/fastq/HG00097_1.fq\noffline-uppmax$ ln -s /sw/courses/ngsintro/reseq/data/fastq/HG00097_2.fq\noffline-uppmax$ ln -s /sw/courses/ngsintro/reseq/data/fastq/HG00100_1.fq\noffline-uppmax$ ln -s /sw/courses/ngsintro/reseq/data/fastq/HG00100_2.fq\noffline-uppmax$ ln -s /sw/courses/ngsintro/reseq/data/fastq/HG00101_1.fq\noffline-uppmax$ ln -s /sw/courses/ngsintro/reseq/data/fastq/HG00101_2.fq\n\n\n\n\nAccessing programs\nWe will use several programs that are installed in the module system on UPPMAX. These modules must be loaded every time you start the singularity container.\nFirst load the bioinfo-tools module:\noffline-uppmax$ module load bioinfo-tools\nThis makes it possible to load the individual programs:\noffline-uppmax$ module load FastQC/0.11.8\noffline-uppmax$ module load bwa/0.7.17\noffline-uppmax$ module load samtools/1.10\noffline-uppmax$ module load GATK/4.1.4.1\n\n\n\n\n\n\nNote\n\n\n\nYou don’t have to specify which versions of the tools to use, but is recommended to do so for reproducibility if you want to rerun the exact same analyses later.\n\n\nWhen loading the module GATK/4.1.4.1 you may get a warning message about the fact that GATK commands have been updated since the previous version of GATK. This is fine and you don’t have to do anything about it."
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#index-the-genome",
- "href": "topics/vc/lab_vc_tetralith.html#index-the-genome",
- "title": "Variant Calling Workflow",
- "section": "Index the genome",
- "text": "Index the genome\nTools that compare short reads with a large reference genome needs indexes of the reference genome to work efficiently. You therefore need to create index files for each tool.\nGenerate BWA index files:\noffline-uppmax$ bwa index -a bwtsw human_g1k_v37_chr2.fasta\nCheck to see that several new files have been created using ls -l.\nGenerate a samtools index:\noffline-uppmax$ samtools faidx human_g1k_v37_chr2.fasta\nCheck to see what file(s) were created using ls -lrt.\nGenerate a GATK sequence dictionary:\noffline-uppmax$ gatk --java-options -Xmx7g CreateSequenceDictionary -R human_g1k_v37_chr2.fasta -O human_g1k_v37_chr2.dict\nAgain, check what file(s) were created using ls -lrt."
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#aligning-reads",
- "href": "topics/vc/lab_vc_tetralith.html#aligning-reads",
- "title": "Variant Calling Workflow",
- "section": "1.1 Aligning reads",
- "text": "1.1 Aligning reads\n\n1.1.1 BWA mem\nIn the Cluster workspace you should now use BWA mem to align the reads to the reference genome.\nAt the same time, you should add something called read groups to the reads in the fastq files. Read groups allow us to trace various technical features, such as which flow cell was used to generate the reads, and this is needed in order to perform variant calling with HaplotypeCaller. You are not expected to learn all the details of read groups here, but if you are interested in more information please read this article at GATK-forum. The samples in this workshop come from the 1000 Genomes project, and we don’t know how these reads were generated. Let’s assume that each fastq file was generated from one library preparation (called libraryx), derived from one biological sample (called HG00097), that was run on one lane of a flow cell (called lanex_flowcellx) in the Illumina machine, and create a read group with id readgroupx that contains this information.\nThe output from BWA should be parsed to samtools sort, which sorts the sam file according to chromosome position and then converts the sam file to the binary bam format. This saves space since no intermediary sam file is created.\nPlease use this command for all of this:\noffline-uppmax$ bwa mem -R \"@RG\\\\tID:readgroupx\\\\tPU:lanex_flowcellx\\\\tSM:HG00097\\\\tLB:libraryx\\\\tPL:illumina\" -t 1 human_g1k_v37_chr2.fasta HG00097_1.fq HG00097_2.fq | samtools sort > HG00097.bam\nWhere -t 1 is the number of threads, which should be equal to the number of cores you booked. If you would have analysed the entire genome more threads would have been necessary.\nYou have to use a file redirect > for the output, otherwise it will be written to stdout (your screen).\nPlease check that the expected output file was generated and that it has content using ls -lrt.\nNext you need to index the output bam file so that programs can randomly access the sorted data without reading the whole file. This command creates an index file with the same name as the input bam file, except with a .bai extension:\noffline-uppmax$ samtools index HG00097.bam\nPlease check what output file was generated this time.\n\n\n1.1.2 Check bam with samtools\nThe bam file is binary so we cannot read it, but we can view it with samtools view. The header section of the bam file can be viewed separately with the -H flag:\noffline-uppmax$ samtools view -H HG00097.bam \nTo look at the reads in the bam file just use samtools view without the -H. This will display the entire bam file which is quite large, so if you just want to look at the first 5 lines (for example) you can combine samtools view with head:\noffline-uppmax$ samtools view HG00097.bam | head -n 5 \nFor help with interpreting the bam file, please look at the sam/bam format definition at Sequence Alignment/Map Format Specification.\n\n\n1.1.3 Questions\n\nWhat does “SO:coordinate” in the “(HD?)” tag on the first line of the bam file mean?\n\nWhat does “SN:2” and “LN:243199373” in the “(SQ?) tag mean?\nWhat is encoded in the (RG?) tag?\n\nWhat is the leftmost mapping position of the first read in the bamfile?\n\n\n\n1.1.4 Check bam in IGV\nInstall IGV\nIntegrated Genomics Viewer (IGV) provides an interactive visualisation of the reads in a bam file. Here we will show you how to run IGV on your laptop. If you have not used IGV on your laptop before, then go to the IGV download page, and follow the instructions to download it. It will prompt you to fill in some information and agree to license. Launch the viewer through web start. The 1.2 Gb version should be sufficient for our data.\nDownload the bam file\nOpen a new terminal window on your laptop and navigate to your local workspace, but do not log in to NSC. Download the .bam and .bam.bai files you just generated with this command:\n\n\nscp <nsc_username>@tetralith.nsc.uu.se:/proj//users/<nsc_username>/ngsworkflow/HG00097.bam* .\n\n\nCheck that the files are now present in your local workspace using ls -lrt.\nLook at the bam file in IGV\n\nIn IGV, go to the popup menu in the upper left and set it to Human hg19.\n\nIn the Tools menu, select Run igvtools. Choose the command Count and then use the Browse button next to the Input File line to select the bam file (not the bai) that you just downloaded. It will autofill the output file. Hit the Run button. This generates a .tdf file that allows you to see the coverage value for our bam file even at zoomed out views. Close the igvtools window.\n\nIn the File menu, select Load from File and select your BAMs (not the .bai or the .tdf), which should appear in the tracks window. You will have to zoom in before you can see any reads. You can either select a region by click and drag, or by typing a region or a gene name in the text box at the top. Remember that we have data for the region chr2:136545000-136617000.\n\n\n\n1.1.5 Questions\n\nWhat is the read length?\n\nHow can you estimate the coverage at a specific position in IGV?\nWhich RefSeq Genes are located within the region chr2:136545000-136617000?"
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#variant-calling",
- "href": "topics/vc/lab_vc_tetralith.html#variant-calling",
- "title": "Variant Calling Workflow",
- "section": "1.2 Variant Calling",
- "text": "1.2 Variant Calling\n\n1.2.1 HaplotypeCaller\nNow we will detect short variants in the bam file using GATK’s HaplotypeCaller. Go to your Cluster workspace and run:\noffline-uppmax$ gatk --java-options -Xmx7g HaplotypeCaller -R human_g1k_v37_chr2.fasta -I HG00097.bam -O HG00097.vcf \nCheck what new files were generated with ls -lrt.\n\n\n1.2.2 Explore the vcf file\nNow you have your first vcf file containing the raw variants in the region chr2:136545000-136617000 in sample HG00097. Please look at the vcf file with less and try to understand its structure.\nVCF files contains meta-information lines starting with ##, a header line starting with #CHROM, and then data lines each containing information about one variant position in the genome. The header line defines the columns of the data lines, and to view the header line you can type this command:\noffline-uppmax$ grep '#CHROM' HG00097.vcf\nThe meta-information lines starting with ##INFO defines how the data in the INFO column is encoded, and the meta-information lines starting with ##FORMAT defines how the data in the FORMAT column is encoded. To view the meta-information lines describing the INFO column use:\noffline-uppmax$ grep '##INFO' HG00097.vcf\nTo view the meta-information lines describing the FORMAT column use:\noffline-uppmax$ grep '##FORMAT' HG00097.vcf\nNow lets look at the details of one specific genetic variant at position 2:136545844:\noffline-uppmax$ grep '136545844' HG00097.vcf\nFor more detailed information about vcf files please have a look at The Variant Call Format specification.\n\n\n1.2.3 Questions\n\nWhat column of the VCF file contains genotype information for the sample HG00097?\nWhat does GT in the FORMAT column of the data lines mean?\nWhat genotype does the sample HG00097 have at position 2:136545844?\nWhat does AD in the FORMAT column of the data lines mean?\nWhat are the allelic depths for the reference and alternative alles in sample HG00097 at position 2:136545844?\nHow many genetic variants was detected in the sample? The linux command grep -v \"#\" HG00097.vcf | wc -l extracts all lines in HG00097.vcf that don’t start with “#”, and counts these lines.\n\n\n\n1.2.4 Check vcf in IGV\nDownload the vcf file and its index to the local workspace on your laptop, just like you did with the bam file and its index earlier. Open a new terminal window on your laptop and navigate to your local workspace, but do not log in to NSC. Download the files that you just generated with:\n\n\nscp <nsc_username>@tetralith.nsc.uu.se:/proj//users/<nsc_username>/ngsworkflow/HG00097.vcf* .\n\n\nPlease replace <nsc_nsc_username> with your NSC user name.\nNote that the * in the end of the file name means that you will download all files that start with HG00097.vcf, so you will also download the vcf index.\nCheck that the files were properly downloaded to your local workspace using ls -lrt.\nIn IGV, in the File menu, select Load from File and select your vcf file (not the .idx file) and the bam file (not the .bai file) that you downloaded earlier. The vcf and bam files should appear in the tracks window. You will now see all the variants called in HG00097. You can view all variants in the LCT gene by typing the gene name in the search box, and you can look specifically at the variant at position chr2:136545844 by typing that position in the search box.\n\n\n1.2.5 Questions\n\nHover the mouse over the upper row of the vcf track. What is the reference and alternative alleles of the variant at position chr2:136545844?\nHover the mouse over the lower row of the vcf track and look under “Genotype Information”. What genotype does HG00097 have at position chr2:136545844? Is this the same as you found by looking directly in the vcf file in question 10?\nLook in the bam track and count the number of reads that have “T” and “C”, respectively, at position chr2:136545844. How is this information captured under “Genotype Attributes”? (Again, hoover the mouse over the lower row of the vcf track.)"
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#bwa-mem",
- "href": "topics/vc/lab_vc_tetralith.html#bwa-mem",
- "title": "Variant Calling Workflow",
- "section": "2.1 BWA mem",
- "text": "2.1 BWA mem\nRun BWA mem for all three samples in the data set. BWA mem should be run exactly as above but with the new sample names. Please note that you also need to adjust the SM field in the read group so that it matches the new sample name, otherwise the joint genotyping step will not work properly.\nIf you run out of time, please click below to get paths to precomputed bam files.\n\n\n/sw/courses/ngsintro/reseq/data/bam/HG00097.bam\n/sw/courses/ngsintro/reseq/data/bam/HG00100.bam\n/sw/courses/ngsintro/reseq/data/bam/HG00101.bam"
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#generategvcf",
- "href": "topics/vc/lab_vc_tetralith.html#generategvcf",
- "title": "Variant Calling Workflow",
- "section": "2.2 Generate g.vcf files",
- "text": "2.2 Generate g.vcf files\nHaplotypeCaller should also be run for all three samples, but this time the output for each sample needs to be in g.vcf format. This is accomplished with a small change in the HaploteypCaller command:\noffline-uppmax$ gatk --java-options -Xmx7g HaplotypeCaller -R human_g1k_v37_chr2.fasta -ERC GVCF -I <sample.bam> -O <sample>.g.vcf \nPlease replace with the real sample names.\nIf you run out of time, please click below to get paths to the precomputed g.vcf files.\n\n\n/sw/courses/ngsintro/reseq/data/vcf/HG00097.g.vcf\n/sw/courses/ngsintro/reseq/data/vcf/HG00100.g.vcf\n/sw/courses/ngsintro/reseq/data/vcf/HG00101.g.vcf"
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#jointgenotyping",
- "href": "topics/vc/lab_vc_tetralith.html#jointgenotyping",
- "title": "Variant Calling Workflow",
- "section": "2.3 Joint genotyping",
- "text": "2.3 Joint genotyping\nOnce you have the g.vcf files for all samples you should perform joint genotype calling. To do this you first need to combine all individual .g.vcf files to one file using CombineGVCFs:\noffline-uppmax$ gatk --java-options -Xmx7g CombineGVCFs -R human_g1k_v37_chr2.fasta -V <sample1>.g.vcf -V <sample2>.g.vcf -V <sample3>.g.vcf -O cohort.g.vcf\nPlease replace <sample1>, <sample2>, <sample3> with the real sample names.\nThen run GATK’s GenoteypeGVC to generate a vcf file:\noffline-uppmax$ gatk --java-options -Xmx7g GenotypeGVCFs -R human_g1k_v37_chr2.fasta -V cohort.g.vcf -O cohort.vcf\nIf you run out of time, please click below to get paths to the precomputed cohort.g.vcf and cohort.vcf files.\n\n\n/sw/courses/ngsintro/reseq/data/vcf/cohort.g.vcf\n/sw/courses/ngsintro/reseq/data/vcf/cohort.vcf\n\n\n\n2.3.1 Questions\n\nHow many data lines do the cohort.g.vcf file have? You can use the Linux command grep -v \"#\" cohort.g.vcf to extract all lines in “cohort.g.vcf” that don’t start with “#”, then |, and then wc -l to count those lines.\n\nHow many data lines do the cohort.vcf file have?\n\nExplain the difference in number of data lines.\n\nLook at the header line of the cohort.vcf file. What columns does it have?\nWhat is encoded in the last three columns of the data lines?"
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#sbatchscript",
- "href": "topics/vc/lab_vc_tetralith.html#sbatchscript",
- "title": "Variant Calling Workflow",
- "section": "2.4 SBATCH script",
- "text": "2.4 SBATCH script\n\n\n\n\n\n\nOptional\n\n\n\nThis section is only for those of you who want to try to run all steps automatically in bash scripts. Below is a skeleton script that can be used as a template. Please modify it to run all the steps in part two of this workshop. You might find it helpful to try each step for one sample in the interactive terminal, so that you know that a particular command is working, before you incorporate it in the script.\n#!/bin/bash\nmodule load bioinfo-tools\nmodule load bwa/0.7.17\nmodule load samtools/1.10\nmodule load GATK/4.1.4.1\n## loop through the samples:\nfor sample in HG00097 HG00100 HG00101;\ndo\n echo \"Now analyzing: \"$sample\n #Fill in the code for running bwa-mem for each sample here\n #Fill in the code for samtools index for each sample here \n #Fill in the code for HaplotypeCaller for each sample here\ndone\n#Fill in the code for CombineGVCFs for all samples here\n#Fill in the code for GenotypeGVCFs here\nPlease save the sbatch script in your cluster folder and call it “joint_genotyping.sh” or similar. Make the script executable by this command:\nchmod u+x joint_genotyping.sh\nUse this command to run the script in the singularity container:\n./joint_genotyping.sh\nIf you would like more help with creating the bash script, please look at our example solution:\n\n\n#!/bin/bash\n\nmodule load bioinfo-tools\nmodule load bwa/0.7.17\nmodule load samtools/1.10\nmodule load GATK/4.1.4.1\n\nfor sample in HG00097 HG00100 HG00101;\ndo\n echo \"Now analyzing: \"$sample\n bwa mem -R \"@RG\\tID:readgroupx\\tPU:flowcellx_lanex\\tSM:\"$sample\"\\tLB:libraryx\\tPL:illumina\" -t 1 human_g1k_v37_chr2.fasta $sample\"_1.fq\" $sample\"_2.fq\" | samtools sort > $sample\".bam\"\n samtools index $sample\".bam\"\n gatk --java-options -Xmx7g HaplotypeCaller -R human_g1k_v37_chr2.fasta -ERC GVCF -I $sample\".bam\" -O $sample\".g.vcf\"\ndone\ngatk --java-options -Xmx7g CombineGVCFs -R human_g1k_v37_chr2.fasta -V HG00097.g.vcf -V HG00100.g.vcf -V HG00101.g.vcf -O cohort.g.vcf\ngatk --java-options -Xmx7g GenotypeGVCFs -R human_g1k_v37_chr2.fasta -V cohort.g.vcf -O cohort.vcf\n\n\nPlease answer the questions above."
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#check-combined-vcf-file-in-igv",
- "href": "topics/vc/lab_vc_tetralith.html#check-combined-vcf-file-in-igv",
- "title": "Variant Calling Workflow",
- "section": "2.5 Check combined vcf file in IGV",
- "text": "2.5 Check combined vcf file in IGV\nDownload the file cohort.vcf and its index, as well as HG00100.bam and HG00101.bam and their indexes to your local workspace as described above. Then open cohort.vcf, HG00097.bam, HG00100.bam and HG00101.bam in IGV as described above. This time lets look at the variant rs4988235, located at position chr2:136608646 in the HG19 reference genome, that has been shown to lead to lactose persistence.\n\n2.5.1 Questions\n\nWhat is the reference and alternative alleles at chr2:136608646?\nWhat genotype do the three samples have at chr2:136608646? Note how genotypes are color coded in IGV.\nShould any of the individuals avoid drinking milk?\n\nNow compare the data shown in IGV with the data in the VCF file. Extract the row for the chr2:136608646 variant in the cohort.vcf file, for example using grep '136608646' cohort.vcf. What columns of the vcf file contain the information shown in the upper part of the vcf track in IGV?\nWhat columns of the vcf file contain the information shown in the lower part of the vcf track?\nZoom out so that you can see the MCM6 and LCT genes. Is the variant at chr2:136608646 locate within the LCT gene?\nIf you are interested in how this variant affects lactose tolerance please read the article by Mattar et al presented above, or in OMIM."
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#bwa-mem-1",
- "href": "topics/vc/lab_vc_tetralith.html#bwa-mem-1",
- "title": "Variant Calling Workflow",
- "section": "3.1 BWA mem",
- "text": "3.1 BWA mem\nRun BWA mem for all three samples in the data set. BWA mem should be run exactly as above but with the new sample names. Please note that you also need to adjust the SM field in the read group so that it matches the new sample name."
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#mark-duplicates",
- "href": "topics/vc/lab_vc_tetralith.html#mark-duplicates",
- "title": "Variant Calling Workflow",
- "section": "3.2 Mark Duplicates",
- "text": "3.2 Mark Duplicates\nSometimes the same DNA fragment is sequenced multiple times, which leads to multiple reads from the same fragment in the fastq file. This can occur due to PCR amplification in the library preparation, or if one read cluster is incorrectly detected as multiple clusters by the sequencing instrument. If a duplicated read contains a genetic variant, the ratio of the two alleles might be obscured, which can lead to incorrect genotyping. It is therefore recommended (in most cases) to mark duplicate reads so that they are counted as one during genotyping.\nPlease read about Picard’s MarkDuplicates here. Picard’s MarkDuplicates has recently been incorporated into the GATK suite, but the usage example in GATKs documentation still describes how to call it via the stand alone Picard program. A usage example for the version of MarkDuplicates that is incorporated in GATK is (with this you don’t have to load the Picard module):\noffline-uppmax$ gatk --java-options -Xmx7g MarkDuplicates \\\n -I input.bam \\\n -O marked_duplicates.bam \\\n -M marked_dup_metrics.txt\nIf you would like more help you can sneak peek at our example solution for HG00097 below.\n\n\noffline-uppmax$ gatk --java-options -Xmx7g MarkDuplicates -I HG00097.bam -O HG00097.md.bam -M HG00097_mdmetrics.txt"
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#recalibrate-base-quality-scores",
- "href": "topics/vc/lab_vc_tetralith.html#recalibrate-base-quality-scores",
- "title": "Variant Calling Workflow",
- "section": "3.3 Recalibrate Base Quality Scores",
- "text": "3.3 Recalibrate Base Quality Scores\nAnother source of error is systematic biases in the assignment of base quality scores by the sequencing instrument. This can be corrected by GATK’s Base Quality Score Recalibration. In short, you first use BaseRecalibrator to build a recalibration model, and then ApplyBQSR to recalibrate the base qualities in your bam file.\nBaseRecalibrator requires a file with known SNPs as input. This file is available in the data folder on UPPMAX:\n\n\n/sw/courses/ngsintro/reseq/data/ref/1000G_phase1.snps.high_confidence.b37.chr2.vcf\n\n\nPlease use GATK’s documentation to recalibrate the base quality scores in your data. If you would like more help you can sneak peek at our example solution for HG00097 below.\n\n\noffline-uppmax$ gatk --java-options -Xmx7g BaseRecalibrator -R human_g1k_v37_chr2.fasta -I HG00097.md.bam> --known-sites /sw/courses/ngsintro/reseq/data/ref/1000G_phase1.snps.high_confidence.b37.chr2.vcf -O HG00097.recal.table\noffline-uppmax$ gatk --java-options -Xmx7g ApplyBQSR -R human_g1k_v37_chr2.fasta -I HG00097.md.bam --bqsr-recal-file HG00097.recal.table -O HG00097.recal.bam"
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#generate-g.vcf-files",
- "href": "topics/vc/lab_vc_tetralith.html#generate-g.vcf-files",
- "title": "Variant Calling Workflow",
- "section": "3.4 Generate g.vcf files",
- "text": "3.4 Generate g.vcf files\nHaplotypeCaller should also be run for all three samples, and the output should be in g.vcf exactly as described above. This time use recalibrated bam files as input."
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#joint-genotyping",
- "href": "topics/vc/lab_vc_tetralith.html#joint-genotyping",
- "title": "Variant Calling Workflow",
- "section": "3.5 Joint genotyping",
- "text": "3.5 Joint genotyping\nOnce you have the g.vcf files for all samples you should perform joint genotype calling. This should be done with the commands CombineGVCFs and GenotypeGVCFs exactly as described above, but you should use the g.vcf files generated from the recalibrated bam files as input."
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#variant-filtering",
- "href": "topics/vc/lab_vc_tetralith.html#variant-filtering",
- "title": "Variant Calling Workflow",
- "section": "3.6 Variant Filtering",
- "text": "3.6 Variant Filtering\nHaplotypeCaller is designed to be very sensitive, which is good because it minimises the chance of missing real variants. However, it means that the number of false positives can be quite large, so we need to filter the raw callset. GATK offers two ways to filter variants:\n\nThe variant quality score recalibration (VQSR) method uses machine learning to identify variants that are likely to be real. This is the best method if you have a lot of data, for example one whole genome sequence sample or several whole exome samples.\nIf you have less data you can use hard filters as described here.\n\nSince we have very little data we will use hard filters. The parameters are slightly different for SNVs and INDELs, so you need to first select all SNVs using SelectVariants and filter them using VariantFiltration with the parameters suggested for SNVs. Then select all INDELs and filter them with the parameters suggested for INDELs. Finally merge the SNVs and INDELs to get all variants in one file using MergeVCFs. If you would like more help you can sneak peek at our example solution for HG00097 below.\nFilter SNVs:\n\n\noffline-uppmax$ gatk --java-options -Xmx7g SelectVariants \n -R human_g1k_v37_chr2.fasta \n -V cohort.vcf \n --select-type-to-include SNP \n -O cohort.snvs.vcf\n \noffline-uppmax$ gatk --java-options -Xmx7g VariantFiltration \n -R human_g1k_v37_chr2.fasta \n -V cohort.snvs.vcf \n -O cohort.snvs.filtered.vcf \n --filter-name QDfilter --filter-expression \"QD < 2.0\" \n --filter-name MQfilter --filter-expression \"MQ < 40.0\" \n --filter-name FSfilter --filter-expression \"FS > 60.0\"\n\n\nFilter INDELs:\n\n\noffline-uppmax$ gatk --java-options -Xmx7g SelectVariants \n -R human_g1k_v37_chr2.fasta \n -V cohort.vcf \n --select-type-to-include INDEL \n -o cohort.indels.vcf\n\noffline-uppmax$ gatk --java-options -Xmx7g VariantFiltration \n -R human_g1k_v37_chr2.fasta \n -V cohort.indels.vcf \n -O cohort.indels.filtered.vcf \n --filter-name QDfilter --filter-expression \"QD < 2.0\" \n --filter-name FSfilter --filter-expression \"FS > 200.0\"\n\n\nMerge filtered SNVs and INDELs:\n\n\noffline-uppmax$ gatk --java-options -Xmx7g MergeVcfs -I cohort.snvs.filtered.vcf -I cohort.indels.filtered.vcf -O cohort.filtered.vcf\n\n\nOpen your filtered vcf with less and page through it. It still has all the variant lines, but the FILTER column that was blank before is now filled in, with PASS or a list of the filters it failed. Note also that the filters that were run are described in the header section."
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#precomputed-files",
- "href": "topics/vc/lab_vc_tetralith.html#precomputed-files",
- "title": "Variant Calling Workflow",
- "section": "3.7 Precomputed files",
- "text": "3.7 Precomputed files\nIf you run out of time, please click below to get the path to precomputed bam and vcf files for the GATK’s best practices section.\n\n\nPath to intermediary and final bam files: /sw/courses/ngsintro/reseq/data/best_practise_bam\nPath to intermediary and final vcf files: /sw/courses/ngsintro/reseq/data/best_practise_vcf"
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#bpscript",
- "href": "topics/vc/lab_vc_tetralith.html#bpscript",
- "title": "Variant Calling Workflow",
- "section": "3.8 SBATCH script",
- "text": "3.8 SBATCH script\nWe recommend you to incorporate the new steps into an SBATCH script similar to the one you created above for joint variant calling. Please try to complete the script for GATK’s best practices workflow. If you run out of time you can sneak peek at our example solution below.\n\n\n#!/bin/bash\n\n## load modules\nmodule load bioinfo-tools\nmodule load bwa/0.7.17\nmodule load samtools/1.10\nmodule load GATK/4.1.4.1\n\n# define path to reference genome\nref=\"/sw/courses/ngsintro/reseq/data/ref\"\n\n# make symbolic links\nln -s /sw/courses/ngsintro/reseq/data/ref/human_g1k_v37_chr2.fasta\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00097_1.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00097_2.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00100_1.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00100_2.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00101_1.fq\nln -s /sw/courses/ngsintro/reseq/data/fastq/HG00101_2.fq\n\n# index reference genome\nbwa index -a bwtsw human_g1k_v37_chr2.fasta\nsamtools faidx human_g1k_v37_chr2.fasta\ngatk --java-options -Xmx7g CreateSequenceDictionary -R human_g1k_v37_chr2.fasta -O human_g1k_v37_chr2.dict\n\n## loop through the samples:\nfor sample in HG00097 HG00100 HG00101;\ndo\n echo \"Now analyzing: ${sample}\"\n # map the reads\n bwa mem -R \"@RG\\tID:readgroupx\\tPU:flowcellx_lanex\\tSM:\"$sample\"\\tLB:libraryx\\tPL:illumina\" -t 1 human_g1k_v37_chr2.fasta $sample\"_1.fq\" $sample\"_2.fq\" | samtools sort > $sample\".bam\"\n samtools index $sample\".bam\"\n # mark duplicates\n gatk --java-options -Xmx7g MarkDuplicates -I $sample\".bam\" -O $sample\".md.bam\" -M $sample\"_mdmetrics.txt\"\n # base quality score recalibration\n gatk --java-options -Xmx7g BaseRecalibrator -R human_g1k_v37_chr2.fasta -I $sample\".md.bam\" --known-sites $ref\"/1000G_phase1.snps.high_confidence.b37.chr2.vcf\" -O $sample\".recal.table\"\n gatk --java-options -Xmx7g ApplyBQSR -R human_g1k_v37_chr2.fasta -I $sample\".md.bam\" --bqsr-recal-file $sample\".recal.table\" -O $sample\".recal.bam\"\n # haplotypeCaller in -ERC mode\n gatk --java-options -Xmx7g HaplotypeCaller -R human_g1k_v37_chr2.fasta -ERC GVCF -I $sample\".bam\" -O $sample\".g.vcf\" \ndone\n\n# joint genotyping\ngatk --java-options -Xmx7g CombineGVCFs -R human_g1k_v37_chr2.fasta -V HG00097.g.vcf -V HG00100.g.vcf -V HG00101.g.vcf -O cohort.g.vcf\ngatk --java-options -Xmx7g GenotypeGVCFs -R human_g1k_v37_chr2.fasta -V cohort.g.vcf -O cohort.vcf\n# variant filtration SNPs\ngatk --java-options -Xmx7g SelectVariants -R human_g1k_v37_chr2.fasta -V cohort.vcf --select-type-to-include SNP -O cohort.snvs.vcf\ngatk --java-options -Xmx7g VariantFiltration -R human_g1k_v37_chr2.fasta -V cohort.snvs.vcf -O cohort.snvs.filtered.vcf --filter-name QDfilter --filter-expression \"QD < 2.0\" --filter-name MQfilter --filter-expression \"MQ < 40.0\" --filter-name FSfilter --filter-expression \"FS > 60.0\"\n# variant filtration indels\ngatk --java-options -Xmx7g SelectVariants -R human_g1k_v37_chr2.fasta -V cohort.vcf --select-type-to-include INDEL -O cohort.indels.vcf\ngatk --java-options -Xmx7g VariantFiltration -R human_g1k_v37_chr2.fasta -V cohort.indels.vcf -O cohort.indels.filtered.vcf --filter-name QDfilter --filter-expression \"QD < 2.0\" --filter-name FSfilter --filter-expression \"FS > 200.0\"\n# merge filtered SNPs and indels\ngatk --java-options -Xmx7g MergeVcfs -I cohort.snvs.filtered.vcf -I cohort.indels.filtered.vcf -O cohort.filtered.vcf"
- },
- {
- "objectID": "topics/vc/lab_vc_tetralith.html#questions-5",
- "href": "topics/vc/lab_vc_tetralith.html#questions-5",
- "title": "Variant Calling Workflow",
- "section": "3.9 Questions",
- "text": "3.9 Questions\n\nHow many variants are present in the cohort.filtered.vcf file?\n\nHow many variants have passed the filters?\n\nLook at the variants that did not pass the filters using grep -v 'PASS' cohort.filtered.vcf. Try to understand why these variants didn’t pass the filter."
- }
-]
\ No newline at end of file
diff --git a/2411/site_libs/Proj4Leaflet-1.0.1/proj4leaflet.js b/2411/site_libs/Proj4Leaflet-1.0.1/proj4leaflet.js
deleted file mode 100644
index eaa650c1b..000000000
--- a/2411/site_libs/Proj4Leaflet-1.0.1/proj4leaflet.js
+++ /dev/null
@@ -1,272 +0,0 @@
-(function (factory) {
- var L, proj4;
- if (typeof define === 'function' && define.amd) {
- // AMD
- define(['leaflet', 'proj4'], factory);
- } else if (typeof module === 'object' && typeof module.exports === "object") {
- // Node/CommonJS
- L = require('leaflet');
- proj4 = require('proj4');
- module.exports = factory(L, proj4);
- } else {
- // Browser globals
- if (typeof window.L === 'undefined' || typeof window.proj4 === 'undefined')
- throw 'Leaflet and proj4 must be loaded first';
- factory(window.L, window.proj4);
- }
-}(function (L, proj4) {
- if (proj4.__esModule && proj4.default) {
- // If proj4 was bundled as an ES6 module, unwrap it to get
- // to the actual main proj4 object.
- // See discussion in https://github.com/kartena/Proj4Leaflet/pull/147
- proj4 = proj4.default;
- }
-
- L.Proj = {};
-
- L.Proj._isProj4Obj = function(a) {
- return (typeof a.inverse !== 'undefined' &&
- typeof a.forward !== 'undefined');
- };
-
- L.Proj.Projection = L.Class.extend({
- initialize: function(code, def, bounds) {
- var isP4 = L.Proj._isProj4Obj(code);
- this._proj = isP4 ? code : this._projFromCodeDef(code, def);
- this.bounds = isP4 ? def : bounds;
- },
-
- project: function (latlng) {
- var point = this._proj.forward([latlng.lng, latlng.lat]);
- return new L.Point(point[0], point[1]);
- },
-
- unproject: function (point, unbounded) {
- var point2 = this._proj.inverse([point.x, point.y]);
- return new L.LatLng(point2[1], point2[0], unbounded);
- },
-
- _projFromCodeDef: function(code, def) {
- if (def) {
- proj4.defs(code, def);
- } else if (proj4.defs[code] === undefined) {
- var urn = code.split(':');
- if (urn.length > 3) {
- code = urn[urn.length - 3] + ':' + urn[urn.length - 1];
- }
- if (proj4.defs[code] === undefined) {
- throw 'No projection definition for code ' + code;
- }
- }
-
- return proj4(code);
- }
- });
-
- L.Proj.CRS = L.Class.extend({
- includes: L.CRS,
-
- options: {
- transformation: new L.Transformation(1, 0, -1, 0)
- },
-
- initialize: function(a, b, c) {
- var code,
- proj,
- def,
- options;
-
- if (L.Proj._isProj4Obj(a)) {
- proj = a;
- code = proj.srsCode;
- options = b || {};
-
- this.projection = new L.Proj.Projection(proj, options.bounds);
- } else {
- code = a;
- def = b;
- options = c || {};
- this.projection = new L.Proj.Projection(code, def, options.bounds);
- }
-
- L.Util.setOptions(this, options);
- this.code = code;
- this.transformation = this.options.transformation;
-
- if (this.options.origin) {
- this.transformation =
- new L.Transformation(1, -this.options.origin[0],
- -1, this.options.origin[1]);
- }
-
- if (this.options.scales) {
- this._scales = this.options.scales;
- } else if (this.options.resolutions) {
- this._scales = [];
- for (var i = this.options.resolutions.length - 1; i >= 0; i--) {
- if (this.options.resolutions[i]) {
- this._scales[i] = 1 / this.options.resolutions[i];
- }
- }
- }
-
- this.infinite = !this.options.bounds;
-
- },
-
- scale: function(zoom) {
- var iZoom = Math.floor(zoom),
- baseScale,
- nextScale,
- scaleDiff,
- zDiff;
- if (zoom === iZoom) {
- return this._scales[zoom];
- } else {
- // Non-integer zoom, interpolate
- baseScale = this._scales[iZoom];
- nextScale = this._scales[iZoom + 1];
- scaleDiff = nextScale - baseScale;
- zDiff = (zoom - iZoom);
- return baseScale + scaleDiff * zDiff;
- }
- },
-
- zoom: function(scale) {
- // Find closest number in this._scales, down
- var downScale = this._closestElement(this._scales, scale),
- downZoom = this._scales.indexOf(downScale),
- nextScale,
- nextZoom,
- scaleDiff;
- // Check if scale is downScale => return array index
- if (scale === downScale) {
- return downZoom;
- }
- if (downScale === undefined) {
- return -Infinity;
- }
- // Interpolate
- nextZoom = downZoom + 1;
- nextScale = this._scales[nextZoom];
- if (nextScale === undefined) {
- return Infinity;
- }
- scaleDiff = nextScale - downScale;
- return (scale - downScale) / scaleDiff + downZoom;
- },
-
- distance: L.CRS.Earth.distance,
-
- R: L.CRS.Earth.R,
-
- /* Get the closest lowest element in an array */
- _closestElement: function(array, element) {
- var low;
- for (var i = array.length; i--;) {
- if (array[i] <= element && (low === undefined || low < array[i])) {
- low = array[i];
- }
- }
- return low;
- }
- });
-
- L.Proj.GeoJSON = L.GeoJSON.extend({
- initialize: function(geojson, options) {
- this._callLevel = 0;
- L.GeoJSON.prototype.initialize.call(this, geojson, options);
- },
-
- addData: function(geojson) {
- var crs;
-
- if (geojson) {
- if (geojson.crs && geojson.crs.type === 'name') {
- crs = new L.Proj.CRS(geojson.crs.properties.name);
- } else if (geojson.crs && geojson.crs.type) {
- crs = new L.Proj.CRS(geojson.crs.type + ':' + geojson.crs.properties.code);
- }
-
- if (crs !== undefined) {
- this.options.coordsToLatLng = function(coords) {
- var point = L.point(coords[0], coords[1]);
- return crs.projection.unproject(point);
- };
- }
- }
-
- // Base class' addData might call us recursively, but
- // CRS shouldn't be cleared in that case, since CRS applies
- // to the whole GeoJSON, inluding sub-features.
- this._callLevel++;
- try {
- L.GeoJSON.prototype.addData.call(this, geojson);
- } finally {
- this._callLevel--;
- if (this._callLevel === 0) {
- delete this.options.coordsToLatLng;
- }
- }
- }
- });
-
- L.Proj.geoJson = function(geojson, options) {
- return new L.Proj.GeoJSON(geojson, options);
- };
-
- L.Proj.ImageOverlay = L.ImageOverlay.extend({
- initialize: function (url, bounds, options) {
- L.ImageOverlay.prototype.initialize.call(this, url, null, options);
- this._projectedBounds = bounds;
- },
-
- // Danger ahead: Overriding internal methods in Leaflet.
- // Decided to do this rather than making a copy of L.ImageOverlay
- // and doing very tiny modifications to it.
- // Future will tell if this was wise or not.
- _animateZoom: function (event) {
- var scale = this._map.getZoomScale(event.zoom);
- var northWest = L.point(this._projectedBounds.min.x, this._projectedBounds.max.y);
- var offset = this._projectedToNewLayerPoint(northWest, event.zoom, event.center);
-
- L.DomUtil.setTransform(this._image, offset, scale);
- },
-
- _reset: function () {
- var zoom = this._map.getZoom();
- var pixelOrigin = this._map.getPixelOrigin();
- var bounds = L.bounds(
- this._transform(this._projectedBounds.min, zoom)._subtract(pixelOrigin),
- this._transform(this._projectedBounds.max, zoom)._subtract(pixelOrigin)
- );
- var size = bounds.getSize();
-
- L.DomUtil.setPosition(this._image, bounds.min);
- this._image.style.width = size.x + 'px';
- this._image.style.height = size.y + 'px';
- },
-
- _projectedToNewLayerPoint: function (point, zoom, center) {
- var viewHalf = this._map.getSize()._divideBy(2);
- var newTopLeft = this._map.project(center, zoom)._subtract(viewHalf)._round();
- var topLeft = newTopLeft.add(this._map._getMapPanePos());
-
- return this._transform(point, zoom)._subtract(topLeft);
- },
-
- _transform: function (point, zoom) {
- var crs = this._map.options.crs;
- var transformation = crs.transformation;
- var scale = crs.scale(zoom);
-
- return transformation.transform(point, scale);
- }
- });
-
- L.Proj.imageOverlay = function (url, bounds, options) {
- return new L.Proj.ImageOverlay(url, bounds, options);
- };
-
- return L.Proj;
-}));
diff --git a/2411/site_libs/bootstrap/bootstrap-icons.css b/2411/site_libs/bootstrap/bootstrap-icons.css
deleted file mode 100644
index 285e4448f..000000000
--- a/2411/site_libs/bootstrap/bootstrap-icons.css
+++ /dev/null
@@ -1,2078 +0,0 @@
-/*!
- * Bootstrap Icons v1.11.1 (https://icons.getbootstrap.com/)
- * Copyright 2019-2023 The Bootstrap Authors
- * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE)
- */
-
-@font-face {
- font-display: block;
- font-family: "bootstrap-icons";
- src:
-url("./bootstrap-icons.woff?2820a3852bdb9a5832199cc61cec4e65") format("woff");
-}
-
-.bi::before,
-[class^="bi-"]::before,
-[class*=" bi-"]::before {
- display: inline-block;
- font-family: bootstrap-icons !important;
- font-style: normal;
- font-weight: normal !important;
- font-variant: normal;
- text-transform: none;
- line-height: 1;
- vertical-align: -.125em;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.bi-123::before { content: "\f67f"; }
-.bi-alarm-fill::before { content: "\f101"; }
-.bi-alarm::before { content: "\f102"; }
-.bi-align-bottom::before { content: "\f103"; }
-.bi-align-center::before { content: "\f104"; }
-.bi-align-end::before { content: "\f105"; }
-.bi-align-middle::before { content: "\f106"; }
-.bi-align-start::before { content: "\f107"; }
-.bi-align-top::before { content: "\f108"; }
-.bi-alt::before { content: "\f109"; }
-.bi-app-indicator::before { content: "\f10a"; }
-.bi-app::before { content: "\f10b"; }
-.bi-archive-fill::before { content: "\f10c"; }
-.bi-archive::before { content: "\f10d"; }
-.bi-arrow-90deg-down::before { content: "\f10e"; }
-.bi-arrow-90deg-left::before { content: "\f10f"; }
-.bi-arrow-90deg-right::before { content: "\f110"; }
-.bi-arrow-90deg-up::before { content: "\f111"; }
-.bi-arrow-bar-down::before { content: "\f112"; }
-.bi-arrow-bar-left::before { content: "\f113"; }
-.bi-arrow-bar-right::before { content: "\f114"; }
-.bi-arrow-bar-up::before { content: "\f115"; }
-.bi-arrow-clockwise::before { content: "\f116"; }
-.bi-arrow-counterclockwise::before { content: "\f117"; }
-.bi-arrow-down-circle-fill::before { content: "\f118"; }
-.bi-arrow-down-circle::before { content: "\f119"; }
-.bi-arrow-down-left-circle-fill::before { content: "\f11a"; }
-.bi-arrow-down-left-circle::before { content: "\f11b"; }
-.bi-arrow-down-left-square-fill::before { content: "\f11c"; }
-.bi-arrow-down-left-square::before { content: "\f11d"; }
-.bi-arrow-down-left::before { content: "\f11e"; }
-.bi-arrow-down-right-circle-fill::before { content: "\f11f"; }
-.bi-arrow-down-right-circle::before { content: "\f120"; }
-.bi-arrow-down-right-square-fill::before { content: "\f121"; }
-.bi-arrow-down-right-square::before { content: "\f122"; }
-.bi-arrow-down-right::before { content: "\f123"; }
-.bi-arrow-down-short::before { content: "\f124"; }
-.bi-arrow-down-square-fill::before { content: "\f125"; }
-.bi-arrow-down-square::before { content: "\f126"; }
-.bi-arrow-down-up::before { content: "\f127"; }
-.bi-arrow-down::before { content: "\f128"; }
-.bi-arrow-left-circle-fill::before { content: "\f129"; }
-.bi-arrow-left-circle::before { content: "\f12a"; }
-.bi-arrow-left-right::before { content: "\f12b"; }
-.bi-arrow-left-short::before { content: "\f12c"; }
-.bi-arrow-left-square-fill::before { content: "\f12d"; }
-.bi-arrow-left-square::before { content: "\f12e"; }
-.bi-arrow-left::before { content: "\f12f"; }
-.bi-arrow-repeat::before { content: "\f130"; }
-.bi-arrow-return-left::before { content: "\f131"; }
-.bi-arrow-return-right::before { content: "\f132"; }
-.bi-arrow-right-circle-fill::before { content: "\f133"; }
-.bi-arrow-right-circle::before { content: "\f134"; }
-.bi-arrow-right-short::before { content: "\f135"; }
-.bi-arrow-right-square-fill::before { content: "\f136"; }
-.bi-arrow-right-square::before { content: "\f137"; }
-.bi-arrow-right::before { content: "\f138"; }
-.bi-arrow-up-circle-fill::before { content: "\f139"; }
-.bi-arrow-up-circle::before { content: "\f13a"; }
-.bi-arrow-up-left-circle-fill::before { content: "\f13b"; }
-.bi-arrow-up-left-circle::before { content: "\f13c"; }
-.bi-arrow-up-left-square-fill::before { content: "\f13d"; }
-.bi-arrow-up-left-square::before { content: "\f13e"; }
-.bi-arrow-up-left::before { content: "\f13f"; }
-.bi-arrow-up-right-circle-fill::before { content: "\f140"; }
-.bi-arrow-up-right-circle::before { content: "\f141"; }
-.bi-arrow-up-right-square-fill::before { content: "\f142"; }
-.bi-arrow-up-right-square::before { content: "\f143"; }
-.bi-arrow-up-right::before { content: "\f144"; }
-.bi-arrow-up-short::before { content: "\f145"; }
-.bi-arrow-up-square-fill::before { content: "\f146"; }
-.bi-arrow-up-square::before { content: "\f147"; }
-.bi-arrow-up::before { content: "\f148"; }
-.bi-arrows-angle-contract::before { content: "\f149"; }
-.bi-arrows-angle-expand::before { content: "\f14a"; }
-.bi-arrows-collapse::before { content: "\f14b"; }
-.bi-arrows-expand::before { content: "\f14c"; }
-.bi-arrows-fullscreen::before { content: "\f14d"; }
-.bi-arrows-move::before { content: "\f14e"; }
-.bi-aspect-ratio-fill::before { content: "\f14f"; }
-.bi-aspect-ratio::before { content: "\f150"; }
-.bi-asterisk::before { content: "\f151"; }
-.bi-at::before { content: "\f152"; }
-.bi-award-fill::before { content: "\f153"; }
-.bi-award::before { content: "\f154"; }
-.bi-back::before { content: "\f155"; }
-.bi-backspace-fill::before { content: "\f156"; }
-.bi-backspace-reverse-fill::before { content: "\f157"; }
-.bi-backspace-reverse::before { content: "\f158"; }
-.bi-backspace::before { content: "\f159"; }
-.bi-badge-3d-fill::before { content: "\f15a"; }
-.bi-badge-3d::before { content: "\f15b"; }
-.bi-badge-4k-fill::before { content: "\f15c"; }
-.bi-badge-4k::before { content: "\f15d"; }
-.bi-badge-8k-fill::before { content: "\f15e"; }
-.bi-badge-8k::before { content: "\f15f"; }
-.bi-badge-ad-fill::before { content: "\f160"; }
-.bi-badge-ad::before { content: "\f161"; }
-.bi-badge-ar-fill::before { content: "\f162"; }
-.bi-badge-ar::before { content: "\f163"; }
-.bi-badge-cc-fill::before { content: "\f164"; }
-.bi-badge-cc::before { content: "\f165"; }
-.bi-badge-hd-fill::before { content: "\f166"; }
-.bi-badge-hd::before { content: "\f167"; }
-.bi-badge-tm-fill::before { content: "\f168"; }
-.bi-badge-tm::before { content: "\f169"; }
-.bi-badge-vo-fill::before { content: "\f16a"; }
-.bi-badge-vo::before { content: "\f16b"; }
-.bi-badge-vr-fill::before { content: "\f16c"; }
-.bi-badge-vr::before { content: "\f16d"; }
-.bi-badge-wc-fill::before { content: "\f16e"; }
-.bi-badge-wc::before { content: "\f16f"; }
-.bi-bag-check-fill::before { content: "\f170"; }
-.bi-bag-check::before { content: "\f171"; }
-.bi-bag-dash-fill::before { content: "\f172"; }
-.bi-bag-dash::before { content: "\f173"; }
-.bi-bag-fill::before { content: "\f174"; }
-.bi-bag-plus-fill::before { content: "\f175"; }
-.bi-bag-plus::before { content: "\f176"; }
-.bi-bag-x-fill::before { content: "\f177"; }
-.bi-bag-x::before { content: "\f178"; }
-.bi-bag::before { content: "\f179"; }
-.bi-bar-chart-fill::before { content: "\f17a"; }
-.bi-bar-chart-line-fill::before { content: "\f17b"; }
-.bi-bar-chart-line::before { content: "\f17c"; }
-.bi-bar-chart-steps::before { content: "\f17d"; }
-.bi-bar-chart::before { content: "\f17e"; }
-.bi-basket-fill::before { content: "\f17f"; }
-.bi-basket::before { content: "\f180"; }
-.bi-basket2-fill::before { content: "\f181"; }
-.bi-basket2::before { content: "\f182"; }
-.bi-basket3-fill::before { content: "\f183"; }
-.bi-basket3::before { content: "\f184"; }
-.bi-battery-charging::before { content: "\f185"; }
-.bi-battery-full::before { content: "\f186"; }
-.bi-battery-half::before { content: "\f187"; }
-.bi-battery::before { content: "\f188"; }
-.bi-bell-fill::before { content: "\f189"; }
-.bi-bell::before { content: "\f18a"; }
-.bi-bezier::before { content: "\f18b"; }
-.bi-bezier2::before { content: "\f18c"; }
-.bi-bicycle::before { content: "\f18d"; }
-.bi-binoculars-fill::before { content: "\f18e"; }
-.bi-binoculars::before { content: "\f18f"; }
-.bi-blockquote-left::before { content: "\f190"; }
-.bi-blockquote-right::before { content: "\f191"; }
-.bi-book-fill::before { content: "\f192"; }
-.bi-book-half::before { content: "\f193"; }
-.bi-book::before { content: "\f194"; }
-.bi-bookmark-check-fill::before { content: "\f195"; }
-.bi-bookmark-check::before { content: "\f196"; }
-.bi-bookmark-dash-fill::before { content: "\f197"; }
-.bi-bookmark-dash::before { content: "\f198"; }
-.bi-bookmark-fill::before { content: "\f199"; }
-.bi-bookmark-heart-fill::before { content: "\f19a"; }
-.bi-bookmark-heart::before { content: "\f19b"; }
-.bi-bookmark-plus-fill::before { content: "\f19c"; }
-.bi-bookmark-plus::before { content: "\f19d"; }
-.bi-bookmark-star-fill::before { content: "\f19e"; }
-.bi-bookmark-star::before { content: "\f19f"; }
-.bi-bookmark-x-fill::before { content: "\f1a0"; }
-.bi-bookmark-x::before { content: "\f1a1"; }
-.bi-bookmark::before { content: "\f1a2"; }
-.bi-bookmarks-fill::before { content: "\f1a3"; }
-.bi-bookmarks::before { content: "\f1a4"; }
-.bi-bookshelf::before { content: "\f1a5"; }
-.bi-bootstrap-fill::before { content: "\f1a6"; }
-.bi-bootstrap-reboot::before { content: "\f1a7"; }
-.bi-bootstrap::before { content: "\f1a8"; }
-.bi-border-all::before { content: "\f1a9"; }
-.bi-border-bottom::before { content: "\f1aa"; }
-.bi-border-center::before { content: "\f1ab"; }
-.bi-border-inner::before { content: "\f1ac"; }
-.bi-border-left::before { content: "\f1ad"; }
-.bi-border-middle::before { content: "\f1ae"; }
-.bi-border-outer::before { content: "\f1af"; }
-.bi-border-right::before { content: "\f1b0"; }
-.bi-border-style::before { content: "\f1b1"; }
-.bi-border-top::before { content: "\f1b2"; }
-.bi-border-width::before { content: "\f1b3"; }
-.bi-border::before { content: "\f1b4"; }
-.bi-bounding-box-circles::before { content: "\f1b5"; }
-.bi-bounding-box::before { content: "\f1b6"; }
-.bi-box-arrow-down-left::before { content: "\f1b7"; }
-.bi-box-arrow-down-right::before { content: "\f1b8"; }
-.bi-box-arrow-down::before { content: "\f1b9"; }
-.bi-box-arrow-in-down-left::before { content: "\f1ba"; }
-.bi-box-arrow-in-down-right::before { content: "\f1bb"; }
-.bi-box-arrow-in-down::before { content: "\f1bc"; }
-.bi-box-arrow-in-left::before { content: "\f1bd"; }
-.bi-box-arrow-in-right::before { content: "\f1be"; }
-.bi-box-arrow-in-up-left::before { content: "\f1bf"; }
-.bi-box-arrow-in-up-right::before { content: "\f1c0"; }
-.bi-box-arrow-in-up::before { content: "\f1c1"; }
-.bi-box-arrow-left::before { content: "\f1c2"; }
-.bi-box-arrow-right::before { content: "\f1c3"; }
-.bi-box-arrow-up-left::before { content: "\f1c4"; }
-.bi-box-arrow-up-right::before { content: "\f1c5"; }
-.bi-box-arrow-up::before { content: "\f1c6"; }
-.bi-box-seam::before { content: "\f1c7"; }
-.bi-box::before { content: "\f1c8"; }
-.bi-braces::before { content: "\f1c9"; }
-.bi-bricks::before { content: "\f1ca"; }
-.bi-briefcase-fill::before { content: "\f1cb"; }
-.bi-briefcase::before { content: "\f1cc"; }
-.bi-brightness-alt-high-fill::before { content: "\f1cd"; }
-.bi-brightness-alt-high::before { content: "\f1ce"; }
-.bi-brightness-alt-low-fill::before { content: "\f1cf"; }
-.bi-brightness-alt-low::before { content: "\f1d0"; }
-.bi-brightness-high-fill::before { content: "\f1d1"; }
-.bi-brightness-high::before { content: "\f1d2"; }
-.bi-brightness-low-fill::before { content: "\f1d3"; }
-.bi-brightness-low::before { content: "\f1d4"; }
-.bi-broadcast-pin::before { content: "\f1d5"; }
-.bi-broadcast::before { content: "\f1d6"; }
-.bi-brush-fill::before { content: "\f1d7"; }
-.bi-brush::before { content: "\f1d8"; }
-.bi-bucket-fill::before { content: "\f1d9"; }
-.bi-bucket::before { content: "\f1da"; }
-.bi-bug-fill::before { content: "\f1db"; }
-.bi-bug::before { content: "\f1dc"; }
-.bi-building::before { content: "\f1dd"; }
-.bi-bullseye::before { content: "\f1de"; }
-.bi-calculator-fill::before { content: "\f1df"; }
-.bi-calculator::before { content: "\f1e0"; }
-.bi-calendar-check-fill::before { content: "\f1e1"; }
-.bi-calendar-check::before { content: "\f1e2"; }
-.bi-calendar-date-fill::before { content: "\f1e3"; }
-.bi-calendar-date::before { content: "\f1e4"; }
-.bi-calendar-day-fill::before { content: "\f1e5"; }
-.bi-calendar-day::before { content: "\f1e6"; }
-.bi-calendar-event-fill::before { content: "\f1e7"; }
-.bi-calendar-event::before { content: "\f1e8"; }
-.bi-calendar-fill::before { content: "\f1e9"; }
-.bi-calendar-minus-fill::before { content: "\f1ea"; }
-.bi-calendar-minus::before { content: "\f1eb"; }
-.bi-calendar-month-fill::before { content: "\f1ec"; }
-.bi-calendar-month::before { content: "\f1ed"; }
-.bi-calendar-plus-fill::before { content: "\f1ee"; }
-.bi-calendar-plus::before { content: "\f1ef"; }
-.bi-calendar-range-fill::before { content: "\f1f0"; }
-.bi-calendar-range::before { content: "\f1f1"; }
-.bi-calendar-week-fill::before { content: "\f1f2"; }
-.bi-calendar-week::before { content: "\f1f3"; }
-.bi-calendar-x-fill::before { content: "\f1f4"; }
-.bi-calendar-x::before { content: "\f1f5"; }
-.bi-calendar::before { content: "\f1f6"; }
-.bi-calendar2-check-fill::before { content: "\f1f7"; }
-.bi-calendar2-check::before { content: "\f1f8"; }
-.bi-calendar2-date-fill::before { content: "\f1f9"; }
-.bi-calendar2-date::before { content: "\f1fa"; }
-.bi-calendar2-day-fill::before { content: "\f1fb"; }
-.bi-calendar2-day::before { content: "\f1fc"; }
-.bi-calendar2-event-fill::before { content: "\f1fd"; }
-.bi-calendar2-event::before { content: "\f1fe"; }
-.bi-calendar2-fill::before { content: "\f1ff"; }
-.bi-calendar2-minus-fill::before { content: "\f200"; }
-.bi-calendar2-minus::before { content: "\f201"; }
-.bi-calendar2-month-fill::before { content: "\f202"; }
-.bi-calendar2-month::before { content: "\f203"; }
-.bi-calendar2-plus-fill::before { content: "\f204"; }
-.bi-calendar2-plus::before { content: "\f205"; }
-.bi-calendar2-range-fill::before { content: "\f206"; }
-.bi-calendar2-range::before { content: "\f207"; }
-.bi-calendar2-week-fill::before { content: "\f208"; }
-.bi-calendar2-week::before { content: "\f209"; }
-.bi-calendar2-x-fill::before { content: "\f20a"; }
-.bi-calendar2-x::before { content: "\f20b"; }
-.bi-calendar2::before { content: "\f20c"; }
-.bi-calendar3-event-fill::before { content: "\f20d"; }
-.bi-calendar3-event::before { content: "\f20e"; }
-.bi-calendar3-fill::before { content: "\f20f"; }
-.bi-calendar3-range-fill::before { content: "\f210"; }
-.bi-calendar3-range::before { content: "\f211"; }
-.bi-calendar3-week-fill::before { content: "\f212"; }
-.bi-calendar3-week::before { content: "\f213"; }
-.bi-calendar3::before { content: "\f214"; }
-.bi-calendar4-event::before { content: "\f215"; }
-.bi-calendar4-range::before { content: "\f216"; }
-.bi-calendar4-week::before { content: "\f217"; }
-.bi-calendar4::before { content: "\f218"; }
-.bi-camera-fill::before { content: "\f219"; }
-.bi-camera-reels-fill::before { content: "\f21a"; }
-.bi-camera-reels::before { content: "\f21b"; }
-.bi-camera-video-fill::before { content: "\f21c"; }
-.bi-camera-video-off-fill::before { content: "\f21d"; }
-.bi-camera-video-off::before { content: "\f21e"; }
-.bi-camera-video::before { content: "\f21f"; }
-.bi-camera::before { content: "\f220"; }
-.bi-camera2::before { content: "\f221"; }
-.bi-capslock-fill::before { content: "\f222"; }
-.bi-capslock::before { content: "\f223"; }
-.bi-card-checklist::before { content: "\f224"; }
-.bi-card-heading::before { content: "\f225"; }
-.bi-card-image::before { content: "\f226"; }
-.bi-card-list::before { content: "\f227"; }
-.bi-card-text::before { content: "\f228"; }
-.bi-caret-down-fill::before { content: "\f229"; }
-.bi-caret-down-square-fill::before { content: "\f22a"; }
-.bi-caret-down-square::before { content: "\f22b"; }
-.bi-caret-down::before { content: "\f22c"; }
-.bi-caret-left-fill::before { content: "\f22d"; }
-.bi-caret-left-square-fill::before { content: "\f22e"; }
-.bi-caret-left-square::before { content: "\f22f"; }
-.bi-caret-left::before { content: "\f230"; }
-.bi-caret-right-fill::before { content: "\f231"; }
-.bi-caret-right-square-fill::before { content: "\f232"; }
-.bi-caret-right-square::before { content: "\f233"; }
-.bi-caret-right::before { content: "\f234"; }
-.bi-caret-up-fill::before { content: "\f235"; }
-.bi-caret-up-square-fill::before { content: "\f236"; }
-.bi-caret-up-square::before { content: "\f237"; }
-.bi-caret-up::before { content: "\f238"; }
-.bi-cart-check-fill::before { content: "\f239"; }
-.bi-cart-check::before { content: "\f23a"; }
-.bi-cart-dash-fill::before { content: "\f23b"; }
-.bi-cart-dash::before { content: "\f23c"; }
-.bi-cart-fill::before { content: "\f23d"; }
-.bi-cart-plus-fill::before { content: "\f23e"; }
-.bi-cart-plus::before { content: "\f23f"; }
-.bi-cart-x-fill::before { content: "\f240"; }
-.bi-cart-x::before { content: "\f241"; }
-.bi-cart::before { content: "\f242"; }
-.bi-cart2::before { content: "\f243"; }
-.bi-cart3::before { content: "\f244"; }
-.bi-cart4::before { content: "\f245"; }
-.bi-cash-stack::before { content: "\f246"; }
-.bi-cash::before { content: "\f247"; }
-.bi-cast::before { content: "\f248"; }
-.bi-chat-dots-fill::before { content: "\f249"; }
-.bi-chat-dots::before { content: "\f24a"; }
-.bi-chat-fill::before { content: "\f24b"; }
-.bi-chat-left-dots-fill::before { content: "\f24c"; }
-.bi-chat-left-dots::before { content: "\f24d"; }
-.bi-chat-left-fill::before { content: "\f24e"; }
-.bi-chat-left-quote-fill::before { content: "\f24f"; }
-.bi-chat-left-quote::before { content: "\f250"; }
-.bi-chat-left-text-fill::before { content: "\f251"; }
-.bi-chat-left-text::before { content: "\f252"; }
-.bi-chat-left::before { content: "\f253"; }
-.bi-chat-quote-fill::before { content: "\f254"; }
-.bi-chat-quote::before { content: "\f255"; }
-.bi-chat-right-dots-fill::before { content: "\f256"; }
-.bi-chat-right-dots::before { content: "\f257"; }
-.bi-chat-right-fill::before { content: "\f258"; }
-.bi-chat-right-quote-fill::before { content: "\f259"; }
-.bi-chat-right-quote::before { content: "\f25a"; }
-.bi-chat-right-text-fill::before { content: "\f25b"; }
-.bi-chat-right-text::before { content: "\f25c"; }
-.bi-chat-right::before { content: "\f25d"; }
-.bi-chat-square-dots-fill::before { content: "\f25e"; }
-.bi-chat-square-dots::before { content: "\f25f"; }
-.bi-chat-square-fill::before { content: "\f260"; }
-.bi-chat-square-quote-fill::before { content: "\f261"; }
-.bi-chat-square-quote::before { content: "\f262"; }
-.bi-chat-square-text-fill::before { content: "\f263"; }
-.bi-chat-square-text::before { content: "\f264"; }
-.bi-chat-square::before { content: "\f265"; }
-.bi-chat-text-fill::before { content: "\f266"; }
-.bi-chat-text::before { content: "\f267"; }
-.bi-chat::before { content: "\f268"; }
-.bi-check-all::before { content: "\f269"; }
-.bi-check-circle-fill::before { content: "\f26a"; }
-.bi-check-circle::before { content: "\f26b"; }
-.bi-check-square-fill::before { content: "\f26c"; }
-.bi-check-square::before { content: "\f26d"; }
-.bi-check::before { content: "\f26e"; }
-.bi-check2-all::before { content: "\f26f"; }
-.bi-check2-circle::before { content: "\f270"; }
-.bi-check2-square::before { content: "\f271"; }
-.bi-check2::before { content: "\f272"; }
-.bi-chevron-bar-contract::before { content: "\f273"; }
-.bi-chevron-bar-down::before { content: "\f274"; }
-.bi-chevron-bar-expand::before { content: "\f275"; }
-.bi-chevron-bar-left::before { content: "\f276"; }
-.bi-chevron-bar-right::before { content: "\f277"; }
-.bi-chevron-bar-up::before { content: "\f278"; }
-.bi-chevron-compact-down::before { content: "\f279"; }
-.bi-chevron-compact-left::before { content: "\f27a"; }
-.bi-chevron-compact-right::before { content: "\f27b"; }
-.bi-chevron-compact-up::before { content: "\f27c"; }
-.bi-chevron-contract::before { content: "\f27d"; }
-.bi-chevron-double-down::before { content: "\f27e"; }
-.bi-chevron-double-left::before { content: "\f27f"; }
-.bi-chevron-double-right::before { content: "\f280"; }
-.bi-chevron-double-up::before { content: "\f281"; }
-.bi-chevron-down::before { content: "\f282"; }
-.bi-chevron-expand::before { content: "\f283"; }
-.bi-chevron-left::before { content: "\f284"; }
-.bi-chevron-right::before { content: "\f285"; }
-.bi-chevron-up::before { content: "\f286"; }
-.bi-circle-fill::before { content: "\f287"; }
-.bi-circle-half::before { content: "\f288"; }
-.bi-circle-square::before { content: "\f289"; }
-.bi-circle::before { content: "\f28a"; }
-.bi-clipboard-check::before { content: "\f28b"; }
-.bi-clipboard-data::before { content: "\f28c"; }
-.bi-clipboard-minus::before { content: "\f28d"; }
-.bi-clipboard-plus::before { content: "\f28e"; }
-.bi-clipboard-x::before { content: "\f28f"; }
-.bi-clipboard::before { content: "\f290"; }
-.bi-clock-fill::before { content: "\f291"; }
-.bi-clock-history::before { content: "\f292"; }
-.bi-clock::before { content: "\f293"; }
-.bi-cloud-arrow-down-fill::before { content: "\f294"; }
-.bi-cloud-arrow-down::before { content: "\f295"; }
-.bi-cloud-arrow-up-fill::before { content: "\f296"; }
-.bi-cloud-arrow-up::before { content: "\f297"; }
-.bi-cloud-check-fill::before { content: "\f298"; }
-.bi-cloud-check::before { content: "\f299"; }
-.bi-cloud-download-fill::before { content: "\f29a"; }
-.bi-cloud-download::before { content: "\f29b"; }
-.bi-cloud-drizzle-fill::before { content: "\f29c"; }
-.bi-cloud-drizzle::before { content: "\f29d"; }
-.bi-cloud-fill::before { content: "\f29e"; }
-.bi-cloud-fog-fill::before { content: "\f29f"; }
-.bi-cloud-fog::before { content: "\f2a0"; }
-.bi-cloud-fog2-fill::before { content: "\f2a1"; }
-.bi-cloud-fog2::before { content: "\f2a2"; }
-.bi-cloud-hail-fill::before { content: "\f2a3"; }
-.bi-cloud-hail::before { content: "\f2a4"; }
-.bi-cloud-haze-fill::before { content: "\f2a6"; }
-.bi-cloud-haze::before { content: "\f2a7"; }
-.bi-cloud-haze2-fill::before { content: "\f2a8"; }
-.bi-cloud-lightning-fill::before { content: "\f2a9"; }
-.bi-cloud-lightning-rain-fill::before { content: "\f2aa"; }
-.bi-cloud-lightning-rain::before { content: "\f2ab"; }
-.bi-cloud-lightning::before { content: "\f2ac"; }
-.bi-cloud-minus-fill::before { content: "\f2ad"; }
-.bi-cloud-minus::before { content: "\f2ae"; }
-.bi-cloud-moon-fill::before { content: "\f2af"; }
-.bi-cloud-moon::before { content: "\f2b0"; }
-.bi-cloud-plus-fill::before { content: "\f2b1"; }
-.bi-cloud-plus::before { content: "\f2b2"; }
-.bi-cloud-rain-fill::before { content: "\f2b3"; }
-.bi-cloud-rain-heavy-fill::before { content: "\f2b4"; }
-.bi-cloud-rain-heavy::before { content: "\f2b5"; }
-.bi-cloud-rain::before { content: "\f2b6"; }
-.bi-cloud-slash-fill::before { content: "\f2b7"; }
-.bi-cloud-slash::before { content: "\f2b8"; }
-.bi-cloud-sleet-fill::before { content: "\f2b9"; }
-.bi-cloud-sleet::before { content: "\f2ba"; }
-.bi-cloud-snow-fill::before { content: "\f2bb"; }
-.bi-cloud-snow::before { content: "\f2bc"; }
-.bi-cloud-sun-fill::before { content: "\f2bd"; }
-.bi-cloud-sun::before { content: "\f2be"; }
-.bi-cloud-upload-fill::before { content: "\f2bf"; }
-.bi-cloud-upload::before { content: "\f2c0"; }
-.bi-cloud::before { content: "\f2c1"; }
-.bi-clouds-fill::before { content: "\f2c2"; }
-.bi-clouds::before { content: "\f2c3"; }
-.bi-cloudy-fill::before { content: "\f2c4"; }
-.bi-cloudy::before { content: "\f2c5"; }
-.bi-code-slash::before { content: "\f2c6"; }
-.bi-code-square::before { content: "\f2c7"; }
-.bi-code::before { content: "\f2c8"; }
-.bi-collection-fill::before { content: "\f2c9"; }
-.bi-collection-play-fill::before { content: "\f2ca"; }
-.bi-collection-play::before { content: "\f2cb"; }
-.bi-collection::before { content: "\f2cc"; }
-.bi-columns-gap::before { content: "\f2cd"; }
-.bi-columns::before { content: "\f2ce"; }
-.bi-command::before { content: "\f2cf"; }
-.bi-compass-fill::before { content: "\f2d0"; }
-.bi-compass::before { content: "\f2d1"; }
-.bi-cone-striped::before { content: "\f2d2"; }
-.bi-cone::before { content: "\f2d3"; }
-.bi-controller::before { content: "\f2d4"; }
-.bi-cpu-fill::before { content: "\f2d5"; }
-.bi-cpu::before { content: "\f2d6"; }
-.bi-credit-card-2-back-fill::before { content: "\f2d7"; }
-.bi-credit-card-2-back::before { content: "\f2d8"; }
-.bi-credit-card-2-front-fill::before { content: "\f2d9"; }
-.bi-credit-card-2-front::before { content: "\f2da"; }
-.bi-credit-card-fill::before { content: "\f2db"; }
-.bi-credit-card::before { content: "\f2dc"; }
-.bi-crop::before { content: "\f2dd"; }
-.bi-cup-fill::before { content: "\f2de"; }
-.bi-cup-straw::before { content: "\f2df"; }
-.bi-cup::before { content: "\f2e0"; }
-.bi-cursor-fill::before { content: "\f2e1"; }
-.bi-cursor-text::before { content: "\f2e2"; }
-.bi-cursor::before { content: "\f2e3"; }
-.bi-dash-circle-dotted::before { content: "\f2e4"; }
-.bi-dash-circle-fill::before { content: "\f2e5"; }
-.bi-dash-circle::before { content: "\f2e6"; }
-.bi-dash-square-dotted::before { content: "\f2e7"; }
-.bi-dash-square-fill::before { content: "\f2e8"; }
-.bi-dash-square::before { content: "\f2e9"; }
-.bi-dash::before { content: "\f2ea"; }
-.bi-diagram-2-fill::before { content: "\f2eb"; }
-.bi-diagram-2::before { content: "\f2ec"; }
-.bi-diagram-3-fill::before { content: "\f2ed"; }
-.bi-diagram-3::before { content: "\f2ee"; }
-.bi-diamond-fill::before { content: "\f2ef"; }
-.bi-diamond-half::before { content: "\f2f0"; }
-.bi-diamond::before { content: "\f2f1"; }
-.bi-dice-1-fill::before { content: "\f2f2"; }
-.bi-dice-1::before { content: "\f2f3"; }
-.bi-dice-2-fill::before { content: "\f2f4"; }
-.bi-dice-2::before { content: "\f2f5"; }
-.bi-dice-3-fill::before { content: "\f2f6"; }
-.bi-dice-3::before { content: "\f2f7"; }
-.bi-dice-4-fill::before { content: "\f2f8"; }
-.bi-dice-4::before { content: "\f2f9"; }
-.bi-dice-5-fill::before { content: "\f2fa"; }
-.bi-dice-5::before { content: "\f2fb"; }
-.bi-dice-6-fill::before { content: "\f2fc"; }
-.bi-dice-6::before { content: "\f2fd"; }
-.bi-disc-fill::before { content: "\f2fe"; }
-.bi-disc::before { content: "\f2ff"; }
-.bi-discord::before { content: "\f300"; }
-.bi-display-fill::before { content: "\f301"; }
-.bi-display::before { content: "\f302"; }
-.bi-distribute-horizontal::before { content: "\f303"; }
-.bi-distribute-vertical::before { content: "\f304"; }
-.bi-door-closed-fill::before { content: "\f305"; }
-.bi-door-closed::before { content: "\f306"; }
-.bi-door-open-fill::before { content: "\f307"; }
-.bi-door-open::before { content: "\f308"; }
-.bi-dot::before { content: "\f309"; }
-.bi-download::before { content: "\f30a"; }
-.bi-droplet-fill::before { content: "\f30b"; }
-.bi-droplet-half::before { content: "\f30c"; }
-.bi-droplet::before { content: "\f30d"; }
-.bi-earbuds::before { content: "\f30e"; }
-.bi-easel-fill::before { content: "\f30f"; }
-.bi-easel::before { content: "\f310"; }
-.bi-egg-fill::before { content: "\f311"; }
-.bi-egg-fried::before { content: "\f312"; }
-.bi-egg::before { content: "\f313"; }
-.bi-eject-fill::before { content: "\f314"; }
-.bi-eject::before { content: "\f315"; }
-.bi-emoji-angry-fill::before { content: "\f316"; }
-.bi-emoji-angry::before { content: "\f317"; }
-.bi-emoji-dizzy-fill::before { content: "\f318"; }
-.bi-emoji-dizzy::before { content: "\f319"; }
-.bi-emoji-expressionless-fill::before { content: "\f31a"; }
-.bi-emoji-expressionless::before { content: "\f31b"; }
-.bi-emoji-frown-fill::before { content: "\f31c"; }
-.bi-emoji-frown::before { content: "\f31d"; }
-.bi-emoji-heart-eyes-fill::before { content: "\f31e"; }
-.bi-emoji-heart-eyes::before { content: "\f31f"; }
-.bi-emoji-laughing-fill::before { content: "\f320"; }
-.bi-emoji-laughing::before { content: "\f321"; }
-.bi-emoji-neutral-fill::before { content: "\f322"; }
-.bi-emoji-neutral::before { content: "\f323"; }
-.bi-emoji-smile-fill::before { content: "\f324"; }
-.bi-emoji-smile-upside-down-fill::before { content: "\f325"; }
-.bi-emoji-smile-upside-down::before { content: "\f326"; }
-.bi-emoji-smile::before { content: "\f327"; }
-.bi-emoji-sunglasses-fill::before { content: "\f328"; }
-.bi-emoji-sunglasses::before { content: "\f329"; }
-.bi-emoji-wink-fill::before { content: "\f32a"; }
-.bi-emoji-wink::before { content: "\f32b"; }
-.bi-envelope-fill::before { content: "\f32c"; }
-.bi-envelope-open-fill::before { content: "\f32d"; }
-.bi-envelope-open::before { content: "\f32e"; }
-.bi-envelope::before { content: "\f32f"; }
-.bi-eraser-fill::before { content: "\f330"; }
-.bi-eraser::before { content: "\f331"; }
-.bi-exclamation-circle-fill::before { content: "\f332"; }
-.bi-exclamation-circle::before { content: "\f333"; }
-.bi-exclamation-diamond-fill::before { content: "\f334"; }
-.bi-exclamation-diamond::before { content: "\f335"; }
-.bi-exclamation-octagon-fill::before { content: "\f336"; }
-.bi-exclamation-octagon::before { content: "\f337"; }
-.bi-exclamation-square-fill::before { content: "\f338"; }
-.bi-exclamation-square::before { content: "\f339"; }
-.bi-exclamation-triangle-fill::before { content: "\f33a"; }
-.bi-exclamation-triangle::before { content: "\f33b"; }
-.bi-exclamation::before { content: "\f33c"; }
-.bi-exclude::before { content: "\f33d"; }
-.bi-eye-fill::before { content: "\f33e"; }
-.bi-eye-slash-fill::before { content: "\f33f"; }
-.bi-eye-slash::before { content: "\f340"; }
-.bi-eye::before { content: "\f341"; }
-.bi-eyedropper::before { content: "\f342"; }
-.bi-eyeglasses::before { content: "\f343"; }
-.bi-facebook::before { content: "\f344"; }
-.bi-file-arrow-down-fill::before { content: "\f345"; }
-.bi-file-arrow-down::before { content: "\f346"; }
-.bi-file-arrow-up-fill::before { content: "\f347"; }
-.bi-file-arrow-up::before { content: "\f348"; }
-.bi-file-bar-graph-fill::before { content: "\f349"; }
-.bi-file-bar-graph::before { content: "\f34a"; }
-.bi-file-binary-fill::before { content: "\f34b"; }
-.bi-file-binary::before { content: "\f34c"; }
-.bi-file-break-fill::before { content: "\f34d"; }
-.bi-file-break::before { content: "\f34e"; }
-.bi-file-check-fill::before { content: "\f34f"; }
-.bi-file-check::before { content: "\f350"; }
-.bi-file-code-fill::before { content: "\f351"; }
-.bi-file-code::before { content: "\f352"; }
-.bi-file-diff-fill::before { content: "\f353"; }
-.bi-file-diff::before { content: "\f354"; }
-.bi-file-earmark-arrow-down-fill::before { content: "\f355"; }
-.bi-file-earmark-arrow-down::before { content: "\f356"; }
-.bi-file-earmark-arrow-up-fill::before { content: "\f357"; }
-.bi-file-earmark-arrow-up::before { content: "\f358"; }
-.bi-file-earmark-bar-graph-fill::before { content: "\f359"; }
-.bi-file-earmark-bar-graph::before { content: "\f35a"; }
-.bi-file-earmark-binary-fill::before { content: "\f35b"; }
-.bi-file-earmark-binary::before { content: "\f35c"; }
-.bi-file-earmark-break-fill::before { content: "\f35d"; }
-.bi-file-earmark-break::before { content: "\f35e"; }
-.bi-file-earmark-check-fill::before { content: "\f35f"; }
-.bi-file-earmark-check::before { content: "\f360"; }
-.bi-file-earmark-code-fill::before { content: "\f361"; }
-.bi-file-earmark-code::before { content: "\f362"; }
-.bi-file-earmark-diff-fill::before { content: "\f363"; }
-.bi-file-earmark-diff::before { content: "\f364"; }
-.bi-file-earmark-easel-fill::before { content: "\f365"; }
-.bi-file-earmark-easel::before { content: "\f366"; }
-.bi-file-earmark-excel-fill::before { content: "\f367"; }
-.bi-file-earmark-excel::before { content: "\f368"; }
-.bi-file-earmark-fill::before { content: "\f369"; }
-.bi-file-earmark-font-fill::before { content: "\f36a"; }
-.bi-file-earmark-font::before { content: "\f36b"; }
-.bi-file-earmark-image-fill::before { content: "\f36c"; }
-.bi-file-earmark-image::before { content: "\f36d"; }
-.bi-file-earmark-lock-fill::before { content: "\f36e"; }
-.bi-file-earmark-lock::before { content: "\f36f"; }
-.bi-file-earmark-lock2-fill::before { content: "\f370"; }
-.bi-file-earmark-lock2::before { content: "\f371"; }
-.bi-file-earmark-medical-fill::before { content: "\f372"; }
-.bi-file-earmark-medical::before { content: "\f373"; }
-.bi-file-earmark-minus-fill::before { content: "\f374"; }
-.bi-file-earmark-minus::before { content: "\f375"; }
-.bi-file-earmark-music-fill::before { content: "\f376"; }
-.bi-file-earmark-music::before { content: "\f377"; }
-.bi-file-earmark-person-fill::before { content: "\f378"; }
-.bi-file-earmark-person::before { content: "\f379"; }
-.bi-file-earmark-play-fill::before { content: "\f37a"; }
-.bi-file-earmark-play::before { content: "\f37b"; }
-.bi-file-earmark-plus-fill::before { content: "\f37c"; }
-.bi-file-earmark-plus::before { content: "\f37d"; }
-.bi-file-earmark-post-fill::before { content: "\f37e"; }
-.bi-file-earmark-post::before { content: "\f37f"; }
-.bi-file-earmark-ppt-fill::before { content: "\f380"; }
-.bi-file-earmark-ppt::before { content: "\f381"; }
-.bi-file-earmark-richtext-fill::before { content: "\f382"; }
-.bi-file-earmark-richtext::before { content: "\f383"; }
-.bi-file-earmark-ruled-fill::before { content: "\f384"; }
-.bi-file-earmark-ruled::before { content: "\f385"; }
-.bi-file-earmark-slides-fill::before { content: "\f386"; }
-.bi-file-earmark-slides::before { content: "\f387"; }
-.bi-file-earmark-spreadsheet-fill::before { content: "\f388"; }
-.bi-file-earmark-spreadsheet::before { content: "\f389"; }
-.bi-file-earmark-text-fill::before { content: "\f38a"; }
-.bi-file-earmark-text::before { content: "\f38b"; }
-.bi-file-earmark-word-fill::before { content: "\f38c"; }
-.bi-file-earmark-word::before { content: "\f38d"; }
-.bi-file-earmark-x-fill::before { content: "\f38e"; }
-.bi-file-earmark-x::before { content: "\f38f"; }
-.bi-file-earmark-zip-fill::before { content: "\f390"; }
-.bi-file-earmark-zip::before { content: "\f391"; }
-.bi-file-earmark::before { content: "\f392"; }
-.bi-file-easel-fill::before { content: "\f393"; }
-.bi-file-easel::before { content: "\f394"; }
-.bi-file-excel-fill::before { content: "\f395"; }
-.bi-file-excel::before { content: "\f396"; }
-.bi-file-fill::before { content: "\f397"; }
-.bi-file-font-fill::before { content: "\f398"; }
-.bi-file-font::before { content: "\f399"; }
-.bi-file-image-fill::before { content: "\f39a"; }
-.bi-file-image::before { content: "\f39b"; }
-.bi-file-lock-fill::before { content: "\f39c"; }
-.bi-file-lock::before { content: "\f39d"; }
-.bi-file-lock2-fill::before { content: "\f39e"; }
-.bi-file-lock2::before { content: "\f39f"; }
-.bi-file-medical-fill::before { content: "\f3a0"; }
-.bi-file-medical::before { content: "\f3a1"; }
-.bi-file-minus-fill::before { content: "\f3a2"; }
-.bi-file-minus::before { content: "\f3a3"; }
-.bi-file-music-fill::before { content: "\f3a4"; }
-.bi-file-music::before { content: "\f3a5"; }
-.bi-file-person-fill::before { content: "\f3a6"; }
-.bi-file-person::before { content: "\f3a7"; }
-.bi-file-play-fill::before { content: "\f3a8"; }
-.bi-file-play::before { content: "\f3a9"; }
-.bi-file-plus-fill::before { content: "\f3aa"; }
-.bi-file-plus::before { content: "\f3ab"; }
-.bi-file-post-fill::before { content: "\f3ac"; }
-.bi-file-post::before { content: "\f3ad"; }
-.bi-file-ppt-fill::before { content: "\f3ae"; }
-.bi-file-ppt::before { content: "\f3af"; }
-.bi-file-richtext-fill::before { content: "\f3b0"; }
-.bi-file-richtext::before { content: "\f3b1"; }
-.bi-file-ruled-fill::before { content: "\f3b2"; }
-.bi-file-ruled::before { content: "\f3b3"; }
-.bi-file-slides-fill::before { content: "\f3b4"; }
-.bi-file-slides::before { content: "\f3b5"; }
-.bi-file-spreadsheet-fill::before { content: "\f3b6"; }
-.bi-file-spreadsheet::before { content: "\f3b7"; }
-.bi-file-text-fill::before { content: "\f3b8"; }
-.bi-file-text::before { content: "\f3b9"; }
-.bi-file-word-fill::before { content: "\f3ba"; }
-.bi-file-word::before { content: "\f3bb"; }
-.bi-file-x-fill::before { content: "\f3bc"; }
-.bi-file-x::before { content: "\f3bd"; }
-.bi-file-zip-fill::before { content: "\f3be"; }
-.bi-file-zip::before { content: "\f3bf"; }
-.bi-file::before { content: "\f3c0"; }
-.bi-files-alt::before { content: "\f3c1"; }
-.bi-files::before { content: "\f3c2"; }
-.bi-film::before { content: "\f3c3"; }
-.bi-filter-circle-fill::before { content: "\f3c4"; }
-.bi-filter-circle::before { content: "\f3c5"; }
-.bi-filter-left::before { content: "\f3c6"; }
-.bi-filter-right::before { content: "\f3c7"; }
-.bi-filter-square-fill::before { content: "\f3c8"; }
-.bi-filter-square::before { content: "\f3c9"; }
-.bi-filter::before { content: "\f3ca"; }
-.bi-flag-fill::before { content: "\f3cb"; }
-.bi-flag::before { content: "\f3cc"; }
-.bi-flower1::before { content: "\f3cd"; }
-.bi-flower2::before { content: "\f3ce"; }
-.bi-flower3::before { content: "\f3cf"; }
-.bi-folder-check::before { content: "\f3d0"; }
-.bi-folder-fill::before { content: "\f3d1"; }
-.bi-folder-minus::before { content: "\f3d2"; }
-.bi-folder-plus::before { content: "\f3d3"; }
-.bi-folder-symlink-fill::before { content: "\f3d4"; }
-.bi-folder-symlink::before { content: "\f3d5"; }
-.bi-folder-x::before { content: "\f3d6"; }
-.bi-folder::before { content: "\f3d7"; }
-.bi-folder2-open::before { content: "\f3d8"; }
-.bi-folder2::before { content: "\f3d9"; }
-.bi-fonts::before { content: "\f3da"; }
-.bi-forward-fill::before { content: "\f3db"; }
-.bi-forward::before { content: "\f3dc"; }
-.bi-front::before { content: "\f3dd"; }
-.bi-fullscreen-exit::before { content: "\f3de"; }
-.bi-fullscreen::before { content: "\f3df"; }
-.bi-funnel-fill::before { content: "\f3e0"; }
-.bi-funnel::before { content: "\f3e1"; }
-.bi-gear-fill::before { content: "\f3e2"; }
-.bi-gear-wide-connected::before { content: "\f3e3"; }
-.bi-gear-wide::before { content: "\f3e4"; }
-.bi-gear::before { content: "\f3e5"; }
-.bi-gem::before { content: "\f3e6"; }
-.bi-geo-alt-fill::before { content: "\f3e7"; }
-.bi-geo-alt::before { content: "\f3e8"; }
-.bi-geo-fill::before { content: "\f3e9"; }
-.bi-geo::before { content: "\f3ea"; }
-.bi-gift-fill::before { content: "\f3eb"; }
-.bi-gift::before { content: "\f3ec"; }
-.bi-github::before { content: "\f3ed"; }
-.bi-globe::before { content: "\f3ee"; }
-.bi-globe2::before { content: "\f3ef"; }
-.bi-google::before { content: "\f3f0"; }
-.bi-graph-down::before { content: "\f3f1"; }
-.bi-graph-up::before { content: "\f3f2"; }
-.bi-grid-1x2-fill::before { content: "\f3f3"; }
-.bi-grid-1x2::before { content: "\f3f4"; }
-.bi-grid-3x2-gap-fill::before { content: "\f3f5"; }
-.bi-grid-3x2-gap::before { content: "\f3f6"; }
-.bi-grid-3x2::before { content: "\f3f7"; }
-.bi-grid-3x3-gap-fill::before { content: "\f3f8"; }
-.bi-grid-3x3-gap::before { content: "\f3f9"; }
-.bi-grid-3x3::before { content: "\f3fa"; }
-.bi-grid-fill::before { content: "\f3fb"; }
-.bi-grid::before { content: "\f3fc"; }
-.bi-grip-horizontal::before { content: "\f3fd"; }
-.bi-grip-vertical::before { content: "\f3fe"; }
-.bi-hammer::before { content: "\f3ff"; }
-.bi-hand-index-fill::before { content: "\f400"; }
-.bi-hand-index-thumb-fill::before { content: "\f401"; }
-.bi-hand-index-thumb::before { content: "\f402"; }
-.bi-hand-index::before { content: "\f403"; }
-.bi-hand-thumbs-down-fill::before { content: "\f404"; }
-.bi-hand-thumbs-down::before { content: "\f405"; }
-.bi-hand-thumbs-up-fill::before { content: "\f406"; }
-.bi-hand-thumbs-up::before { content: "\f407"; }
-.bi-handbag-fill::before { content: "\f408"; }
-.bi-handbag::before { content: "\f409"; }
-.bi-hash::before { content: "\f40a"; }
-.bi-hdd-fill::before { content: "\f40b"; }
-.bi-hdd-network-fill::before { content: "\f40c"; }
-.bi-hdd-network::before { content: "\f40d"; }
-.bi-hdd-rack-fill::before { content: "\f40e"; }
-.bi-hdd-rack::before { content: "\f40f"; }
-.bi-hdd-stack-fill::before { content: "\f410"; }
-.bi-hdd-stack::before { content: "\f411"; }
-.bi-hdd::before { content: "\f412"; }
-.bi-headphones::before { content: "\f413"; }
-.bi-headset::before { content: "\f414"; }
-.bi-heart-fill::before { content: "\f415"; }
-.bi-heart-half::before { content: "\f416"; }
-.bi-heart::before { content: "\f417"; }
-.bi-heptagon-fill::before { content: "\f418"; }
-.bi-heptagon-half::before { content: "\f419"; }
-.bi-heptagon::before { content: "\f41a"; }
-.bi-hexagon-fill::before { content: "\f41b"; }
-.bi-hexagon-half::before { content: "\f41c"; }
-.bi-hexagon::before { content: "\f41d"; }
-.bi-hourglass-bottom::before { content: "\f41e"; }
-.bi-hourglass-split::before { content: "\f41f"; }
-.bi-hourglass-top::before { content: "\f420"; }
-.bi-hourglass::before { content: "\f421"; }
-.bi-house-door-fill::before { content: "\f422"; }
-.bi-house-door::before { content: "\f423"; }
-.bi-house-fill::before { content: "\f424"; }
-.bi-house::before { content: "\f425"; }
-.bi-hr::before { content: "\f426"; }
-.bi-hurricane::before { content: "\f427"; }
-.bi-image-alt::before { content: "\f428"; }
-.bi-image-fill::before { content: "\f429"; }
-.bi-image::before { content: "\f42a"; }
-.bi-images::before { content: "\f42b"; }
-.bi-inbox-fill::before { content: "\f42c"; }
-.bi-inbox::before { content: "\f42d"; }
-.bi-inboxes-fill::before { content: "\f42e"; }
-.bi-inboxes::before { content: "\f42f"; }
-.bi-info-circle-fill::before { content: "\f430"; }
-.bi-info-circle::before { content: "\f431"; }
-.bi-info-square-fill::before { content: "\f432"; }
-.bi-info-square::before { content: "\f433"; }
-.bi-info::before { content: "\f434"; }
-.bi-input-cursor-text::before { content: "\f435"; }
-.bi-input-cursor::before { content: "\f436"; }
-.bi-instagram::before { content: "\f437"; }
-.bi-intersect::before { content: "\f438"; }
-.bi-journal-album::before { content: "\f439"; }
-.bi-journal-arrow-down::before { content: "\f43a"; }
-.bi-journal-arrow-up::before { content: "\f43b"; }
-.bi-journal-bookmark-fill::before { content: "\f43c"; }
-.bi-journal-bookmark::before { content: "\f43d"; }
-.bi-journal-check::before { content: "\f43e"; }
-.bi-journal-code::before { content: "\f43f"; }
-.bi-journal-medical::before { content: "\f440"; }
-.bi-journal-minus::before { content: "\f441"; }
-.bi-journal-plus::before { content: "\f442"; }
-.bi-journal-richtext::before { content: "\f443"; }
-.bi-journal-text::before { content: "\f444"; }
-.bi-journal-x::before { content: "\f445"; }
-.bi-journal::before { content: "\f446"; }
-.bi-journals::before { content: "\f447"; }
-.bi-joystick::before { content: "\f448"; }
-.bi-justify-left::before { content: "\f449"; }
-.bi-justify-right::before { content: "\f44a"; }
-.bi-justify::before { content: "\f44b"; }
-.bi-kanban-fill::before { content: "\f44c"; }
-.bi-kanban::before { content: "\f44d"; }
-.bi-key-fill::before { content: "\f44e"; }
-.bi-key::before { content: "\f44f"; }
-.bi-keyboard-fill::before { content: "\f450"; }
-.bi-keyboard::before { content: "\f451"; }
-.bi-ladder::before { content: "\f452"; }
-.bi-lamp-fill::before { content: "\f453"; }
-.bi-lamp::before { content: "\f454"; }
-.bi-laptop-fill::before { content: "\f455"; }
-.bi-laptop::before { content: "\f456"; }
-.bi-layer-backward::before { content: "\f457"; }
-.bi-layer-forward::before { content: "\f458"; }
-.bi-layers-fill::before { content: "\f459"; }
-.bi-layers-half::before { content: "\f45a"; }
-.bi-layers::before { content: "\f45b"; }
-.bi-layout-sidebar-inset-reverse::before { content: "\f45c"; }
-.bi-layout-sidebar-inset::before { content: "\f45d"; }
-.bi-layout-sidebar-reverse::before { content: "\f45e"; }
-.bi-layout-sidebar::before { content: "\f45f"; }
-.bi-layout-split::before { content: "\f460"; }
-.bi-layout-text-sidebar-reverse::before { content: "\f461"; }
-.bi-layout-text-sidebar::before { content: "\f462"; }
-.bi-layout-text-window-reverse::before { content: "\f463"; }
-.bi-layout-text-window::before { content: "\f464"; }
-.bi-layout-three-columns::before { content: "\f465"; }
-.bi-layout-wtf::before { content: "\f466"; }
-.bi-life-preserver::before { content: "\f467"; }
-.bi-lightbulb-fill::before { content: "\f468"; }
-.bi-lightbulb-off-fill::before { content: "\f469"; }
-.bi-lightbulb-off::before { content: "\f46a"; }
-.bi-lightbulb::before { content: "\f46b"; }
-.bi-lightning-charge-fill::before { content: "\f46c"; }
-.bi-lightning-charge::before { content: "\f46d"; }
-.bi-lightning-fill::before { content: "\f46e"; }
-.bi-lightning::before { content: "\f46f"; }
-.bi-link-45deg::before { content: "\f470"; }
-.bi-link::before { content: "\f471"; }
-.bi-linkedin::before { content: "\f472"; }
-.bi-list-check::before { content: "\f473"; }
-.bi-list-nested::before { content: "\f474"; }
-.bi-list-ol::before { content: "\f475"; }
-.bi-list-stars::before { content: "\f476"; }
-.bi-list-task::before { content: "\f477"; }
-.bi-list-ul::before { content: "\f478"; }
-.bi-list::before { content: "\f479"; }
-.bi-lock-fill::before { content: "\f47a"; }
-.bi-lock::before { content: "\f47b"; }
-.bi-mailbox::before { content: "\f47c"; }
-.bi-mailbox2::before { content: "\f47d"; }
-.bi-map-fill::before { content: "\f47e"; }
-.bi-map::before { content: "\f47f"; }
-.bi-markdown-fill::before { content: "\f480"; }
-.bi-markdown::before { content: "\f481"; }
-.bi-mask::before { content: "\f482"; }
-.bi-megaphone-fill::before { content: "\f483"; }
-.bi-megaphone::before { content: "\f484"; }
-.bi-menu-app-fill::before { content: "\f485"; }
-.bi-menu-app::before { content: "\f486"; }
-.bi-menu-button-fill::before { content: "\f487"; }
-.bi-menu-button-wide-fill::before { content: "\f488"; }
-.bi-menu-button-wide::before { content: "\f489"; }
-.bi-menu-button::before { content: "\f48a"; }
-.bi-menu-down::before { content: "\f48b"; }
-.bi-menu-up::before { content: "\f48c"; }
-.bi-mic-fill::before { content: "\f48d"; }
-.bi-mic-mute-fill::before { content: "\f48e"; }
-.bi-mic-mute::before { content: "\f48f"; }
-.bi-mic::before { content: "\f490"; }
-.bi-minecart-loaded::before { content: "\f491"; }
-.bi-minecart::before { content: "\f492"; }
-.bi-moisture::before { content: "\f493"; }
-.bi-moon-fill::before { content: "\f494"; }
-.bi-moon-stars-fill::before { content: "\f495"; }
-.bi-moon-stars::before { content: "\f496"; }
-.bi-moon::before { content: "\f497"; }
-.bi-mouse-fill::before { content: "\f498"; }
-.bi-mouse::before { content: "\f499"; }
-.bi-mouse2-fill::before { content: "\f49a"; }
-.bi-mouse2::before { content: "\f49b"; }
-.bi-mouse3-fill::before { content: "\f49c"; }
-.bi-mouse3::before { content: "\f49d"; }
-.bi-music-note-beamed::before { content: "\f49e"; }
-.bi-music-note-list::before { content: "\f49f"; }
-.bi-music-note::before { content: "\f4a0"; }
-.bi-music-player-fill::before { content: "\f4a1"; }
-.bi-music-player::before { content: "\f4a2"; }
-.bi-newspaper::before { content: "\f4a3"; }
-.bi-node-minus-fill::before { content: "\f4a4"; }
-.bi-node-minus::before { content: "\f4a5"; }
-.bi-node-plus-fill::before { content: "\f4a6"; }
-.bi-node-plus::before { content: "\f4a7"; }
-.bi-nut-fill::before { content: "\f4a8"; }
-.bi-nut::before { content: "\f4a9"; }
-.bi-octagon-fill::before { content: "\f4aa"; }
-.bi-octagon-half::before { content: "\f4ab"; }
-.bi-octagon::before { content: "\f4ac"; }
-.bi-option::before { content: "\f4ad"; }
-.bi-outlet::before { content: "\f4ae"; }
-.bi-paint-bucket::before { content: "\f4af"; }
-.bi-palette-fill::before { content: "\f4b0"; }
-.bi-palette::before { content: "\f4b1"; }
-.bi-palette2::before { content: "\f4b2"; }
-.bi-paperclip::before { content: "\f4b3"; }
-.bi-paragraph::before { content: "\f4b4"; }
-.bi-patch-check-fill::before { content: "\f4b5"; }
-.bi-patch-check::before { content: "\f4b6"; }
-.bi-patch-exclamation-fill::before { content: "\f4b7"; }
-.bi-patch-exclamation::before { content: "\f4b8"; }
-.bi-patch-minus-fill::before { content: "\f4b9"; }
-.bi-patch-minus::before { content: "\f4ba"; }
-.bi-patch-plus-fill::before { content: "\f4bb"; }
-.bi-patch-plus::before { content: "\f4bc"; }
-.bi-patch-question-fill::before { content: "\f4bd"; }
-.bi-patch-question::before { content: "\f4be"; }
-.bi-pause-btn-fill::before { content: "\f4bf"; }
-.bi-pause-btn::before { content: "\f4c0"; }
-.bi-pause-circle-fill::before { content: "\f4c1"; }
-.bi-pause-circle::before { content: "\f4c2"; }
-.bi-pause-fill::before { content: "\f4c3"; }
-.bi-pause::before { content: "\f4c4"; }
-.bi-peace-fill::before { content: "\f4c5"; }
-.bi-peace::before { content: "\f4c6"; }
-.bi-pen-fill::before { content: "\f4c7"; }
-.bi-pen::before { content: "\f4c8"; }
-.bi-pencil-fill::before { content: "\f4c9"; }
-.bi-pencil-square::before { content: "\f4ca"; }
-.bi-pencil::before { content: "\f4cb"; }
-.bi-pentagon-fill::before { content: "\f4cc"; }
-.bi-pentagon-half::before { content: "\f4cd"; }
-.bi-pentagon::before { content: "\f4ce"; }
-.bi-people-fill::before { content: "\f4cf"; }
-.bi-people::before { content: "\f4d0"; }
-.bi-percent::before { content: "\f4d1"; }
-.bi-person-badge-fill::before { content: "\f4d2"; }
-.bi-person-badge::before { content: "\f4d3"; }
-.bi-person-bounding-box::before { content: "\f4d4"; }
-.bi-person-check-fill::before { content: "\f4d5"; }
-.bi-person-check::before { content: "\f4d6"; }
-.bi-person-circle::before { content: "\f4d7"; }
-.bi-person-dash-fill::before { content: "\f4d8"; }
-.bi-person-dash::before { content: "\f4d9"; }
-.bi-person-fill::before { content: "\f4da"; }
-.bi-person-lines-fill::before { content: "\f4db"; }
-.bi-person-plus-fill::before { content: "\f4dc"; }
-.bi-person-plus::before { content: "\f4dd"; }
-.bi-person-square::before { content: "\f4de"; }
-.bi-person-x-fill::before { content: "\f4df"; }
-.bi-person-x::before { content: "\f4e0"; }
-.bi-person::before { content: "\f4e1"; }
-.bi-phone-fill::before { content: "\f4e2"; }
-.bi-phone-landscape-fill::before { content: "\f4e3"; }
-.bi-phone-landscape::before { content: "\f4e4"; }
-.bi-phone-vibrate-fill::before { content: "\f4e5"; }
-.bi-phone-vibrate::before { content: "\f4e6"; }
-.bi-phone::before { content: "\f4e7"; }
-.bi-pie-chart-fill::before { content: "\f4e8"; }
-.bi-pie-chart::before { content: "\f4e9"; }
-.bi-pin-angle-fill::before { content: "\f4ea"; }
-.bi-pin-angle::before { content: "\f4eb"; }
-.bi-pin-fill::before { content: "\f4ec"; }
-.bi-pin::before { content: "\f4ed"; }
-.bi-pip-fill::before { content: "\f4ee"; }
-.bi-pip::before { content: "\f4ef"; }
-.bi-play-btn-fill::before { content: "\f4f0"; }
-.bi-play-btn::before { content: "\f4f1"; }
-.bi-play-circle-fill::before { content: "\f4f2"; }
-.bi-play-circle::before { content: "\f4f3"; }
-.bi-play-fill::before { content: "\f4f4"; }
-.bi-play::before { content: "\f4f5"; }
-.bi-plug-fill::before { content: "\f4f6"; }
-.bi-plug::before { content: "\f4f7"; }
-.bi-plus-circle-dotted::before { content: "\f4f8"; }
-.bi-plus-circle-fill::before { content: "\f4f9"; }
-.bi-plus-circle::before { content: "\f4fa"; }
-.bi-plus-square-dotted::before { content: "\f4fb"; }
-.bi-plus-square-fill::before { content: "\f4fc"; }
-.bi-plus-square::before { content: "\f4fd"; }
-.bi-plus::before { content: "\f4fe"; }
-.bi-power::before { content: "\f4ff"; }
-.bi-printer-fill::before { content: "\f500"; }
-.bi-printer::before { content: "\f501"; }
-.bi-puzzle-fill::before { content: "\f502"; }
-.bi-puzzle::before { content: "\f503"; }
-.bi-question-circle-fill::before { content: "\f504"; }
-.bi-question-circle::before { content: "\f505"; }
-.bi-question-diamond-fill::before { content: "\f506"; }
-.bi-question-diamond::before { content: "\f507"; }
-.bi-question-octagon-fill::before { content: "\f508"; }
-.bi-question-octagon::before { content: "\f509"; }
-.bi-question-square-fill::before { content: "\f50a"; }
-.bi-question-square::before { content: "\f50b"; }
-.bi-question::before { content: "\f50c"; }
-.bi-rainbow::before { content: "\f50d"; }
-.bi-receipt-cutoff::before { content: "\f50e"; }
-.bi-receipt::before { content: "\f50f"; }
-.bi-reception-0::before { content: "\f510"; }
-.bi-reception-1::before { content: "\f511"; }
-.bi-reception-2::before { content: "\f512"; }
-.bi-reception-3::before { content: "\f513"; }
-.bi-reception-4::before { content: "\f514"; }
-.bi-record-btn-fill::before { content: "\f515"; }
-.bi-record-btn::before { content: "\f516"; }
-.bi-record-circle-fill::before { content: "\f517"; }
-.bi-record-circle::before { content: "\f518"; }
-.bi-record-fill::before { content: "\f519"; }
-.bi-record::before { content: "\f51a"; }
-.bi-record2-fill::before { content: "\f51b"; }
-.bi-record2::before { content: "\f51c"; }
-.bi-reply-all-fill::before { content: "\f51d"; }
-.bi-reply-all::before { content: "\f51e"; }
-.bi-reply-fill::before { content: "\f51f"; }
-.bi-reply::before { content: "\f520"; }
-.bi-rss-fill::before { content: "\f521"; }
-.bi-rss::before { content: "\f522"; }
-.bi-rulers::before { content: "\f523"; }
-.bi-save-fill::before { content: "\f524"; }
-.bi-save::before { content: "\f525"; }
-.bi-save2-fill::before { content: "\f526"; }
-.bi-save2::before { content: "\f527"; }
-.bi-scissors::before { content: "\f528"; }
-.bi-screwdriver::before { content: "\f529"; }
-.bi-search::before { content: "\f52a"; }
-.bi-segmented-nav::before { content: "\f52b"; }
-.bi-server::before { content: "\f52c"; }
-.bi-share-fill::before { content: "\f52d"; }
-.bi-share::before { content: "\f52e"; }
-.bi-shield-check::before { content: "\f52f"; }
-.bi-shield-exclamation::before { content: "\f530"; }
-.bi-shield-fill-check::before { content: "\f531"; }
-.bi-shield-fill-exclamation::before { content: "\f532"; }
-.bi-shield-fill-minus::before { content: "\f533"; }
-.bi-shield-fill-plus::before { content: "\f534"; }
-.bi-shield-fill-x::before { content: "\f535"; }
-.bi-shield-fill::before { content: "\f536"; }
-.bi-shield-lock-fill::before { content: "\f537"; }
-.bi-shield-lock::before { content: "\f538"; }
-.bi-shield-minus::before { content: "\f539"; }
-.bi-shield-plus::before { content: "\f53a"; }
-.bi-shield-shaded::before { content: "\f53b"; }
-.bi-shield-slash-fill::before { content: "\f53c"; }
-.bi-shield-slash::before { content: "\f53d"; }
-.bi-shield-x::before { content: "\f53e"; }
-.bi-shield::before { content: "\f53f"; }
-.bi-shift-fill::before { content: "\f540"; }
-.bi-shift::before { content: "\f541"; }
-.bi-shop-window::before { content: "\f542"; }
-.bi-shop::before { content: "\f543"; }
-.bi-shuffle::before { content: "\f544"; }
-.bi-signpost-2-fill::before { content: "\f545"; }
-.bi-signpost-2::before { content: "\f546"; }
-.bi-signpost-fill::before { content: "\f547"; }
-.bi-signpost-split-fill::before { content: "\f548"; }
-.bi-signpost-split::before { content: "\f549"; }
-.bi-signpost::before { content: "\f54a"; }
-.bi-sim-fill::before { content: "\f54b"; }
-.bi-sim::before { content: "\f54c"; }
-.bi-skip-backward-btn-fill::before { content: "\f54d"; }
-.bi-skip-backward-btn::before { content: "\f54e"; }
-.bi-skip-backward-circle-fill::before { content: "\f54f"; }
-.bi-skip-backward-circle::before { content: "\f550"; }
-.bi-skip-backward-fill::before { content: "\f551"; }
-.bi-skip-backward::before { content: "\f552"; }
-.bi-skip-end-btn-fill::before { content: "\f553"; }
-.bi-skip-end-btn::before { content: "\f554"; }
-.bi-skip-end-circle-fill::before { content: "\f555"; }
-.bi-skip-end-circle::before { content: "\f556"; }
-.bi-skip-end-fill::before { content: "\f557"; }
-.bi-skip-end::before { content: "\f558"; }
-.bi-skip-forward-btn-fill::before { content: "\f559"; }
-.bi-skip-forward-btn::before { content: "\f55a"; }
-.bi-skip-forward-circle-fill::before { content: "\f55b"; }
-.bi-skip-forward-circle::before { content: "\f55c"; }
-.bi-skip-forward-fill::before { content: "\f55d"; }
-.bi-skip-forward::before { content: "\f55e"; }
-.bi-skip-start-btn-fill::before { content: "\f55f"; }
-.bi-skip-start-btn::before { content: "\f560"; }
-.bi-skip-start-circle-fill::before { content: "\f561"; }
-.bi-skip-start-circle::before { content: "\f562"; }
-.bi-skip-start-fill::before { content: "\f563"; }
-.bi-skip-start::before { content: "\f564"; }
-.bi-slack::before { content: "\f565"; }
-.bi-slash-circle-fill::before { content: "\f566"; }
-.bi-slash-circle::before { content: "\f567"; }
-.bi-slash-square-fill::before { content: "\f568"; }
-.bi-slash-square::before { content: "\f569"; }
-.bi-slash::before { content: "\f56a"; }
-.bi-sliders::before { content: "\f56b"; }
-.bi-smartwatch::before { content: "\f56c"; }
-.bi-snow::before { content: "\f56d"; }
-.bi-snow2::before { content: "\f56e"; }
-.bi-snow3::before { content: "\f56f"; }
-.bi-sort-alpha-down-alt::before { content: "\f570"; }
-.bi-sort-alpha-down::before { content: "\f571"; }
-.bi-sort-alpha-up-alt::before { content: "\f572"; }
-.bi-sort-alpha-up::before { content: "\f573"; }
-.bi-sort-down-alt::before { content: "\f574"; }
-.bi-sort-down::before { content: "\f575"; }
-.bi-sort-numeric-down-alt::before { content: "\f576"; }
-.bi-sort-numeric-down::before { content: "\f577"; }
-.bi-sort-numeric-up-alt::before { content: "\f578"; }
-.bi-sort-numeric-up::before { content: "\f579"; }
-.bi-sort-up-alt::before { content: "\f57a"; }
-.bi-sort-up::before { content: "\f57b"; }
-.bi-soundwave::before { content: "\f57c"; }
-.bi-speaker-fill::before { content: "\f57d"; }
-.bi-speaker::before { content: "\f57e"; }
-.bi-speedometer::before { content: "\f57f"; }
-.bi-speedometer2::before { content: "\f580"; }
-.bi-spellcheck::before { content: "\f581"; }
-.bi-square-fill::before { content: "\f582"; }
-.bi-square-half::before { content: "\f583"; }
-.bi-square::before { content: "\f584"; }
-.bi-stack::before { content: "\f585"; }
-.bi-star-fill::before { content: "\f586"; }
-.bi-star-half::before { content: "\f587"; }
-.bi-star::before { content: "\f588"; }
-.bi-stars::before { content: "\f589"; }
-.bi-stickies-fill::before { content: "\f58a"; }
-.bi-stickies::before { content: "\f58b"; }
-.bi-sticky-fill::before { content: "\f58c"; }
-.bi-sticky::before { content: "\f58d"; }
-.bi-stop-btn-fill::before { content: "\f58e"; }
-.bi-stop-btn::before { content: "\f58f"; }
-.bi-stop-circle-fill::before { content: "\f590"; }
-.bi-stop-circle::before { content: "\f591"; }
-.bi-stop-fill::before { content: "\f592"; }
-.bi-stop::before { content: "\f593"; }
-.bi-stoplights-fill::before { content: "\f594"; }
-.bi-stoplights::before { content: "\f595"; }
-.bi-stopwatch-fill::before { content: "\f596"; }
-.bi-stopwatch::before { content: "\f597"; }
-.bi-subtract::before { content: "\f598"; }
-.bi-suit-club-fill::before { content: "\f599"; }
-.bi-suit-club::before { content: "\f59a"; }
-.bi-suit-diamond-fill::before { content: "\f59b"; }
-.bi-suit-diamond::before { content: "\f59c"; }
-.bi-suit-heart-fill::before { content: "\f59d"; }
-.bi-suit-heart::before { content: "\f59e"; }
-.bi-suit-spade-fill::before { content: "\f59f"; }
-.bi-suit-spade::before { content: "\f5a0"; }
-.bi-sun-fill::before { content: "\f5a1"; }
-.bi-sun::before { content: "\f5a2"; }
-.bi-sunglasses::before { content: "\f5a3"; }
-.bi-sunrise-fill::before { content: "\f5a4"; }
-.bi-sunrise::before { content: "\f5a5"; }
-.bi-sunset-fill::before { content: "\f5a6"; }
-.bi-sunset::before { content: "\f5a7"; }
-.bi-symmetry-horizontal::before { content: "\f5a8"; }
-.bi-symmetry-vertical::before { content: "\f5a9"; }
-.bi-table::before { content: "\f5aa"; }
-.bi-tablet-fill::before { content: "\f5ab"; }
-.bi-tablet-landscape-fill::before { content: "\f5ac"; }
-.bi-tablet-landscape::before { content: "\f5ad"; }
-.bi-tablet::before { content: "\f5ae"; }
-.bi-tag-fill::before { content: "\f5af"; }
-.bi-tag::before { content: "\f5b0"; }
-.bi-tags-fill::before { content: "\f5b1"; }
-.bi-tags::before { content: "\f5b2"; }
-.bi-telegram::before { content: "\f5b3"; }
-.bi-telephone-fill::before { content: "\f5b4"; }
-.bi-telephone-forward-fill::before { content: "\f5b5"; }
-.bi-telephone-forward::before { content: "\f5b6"; }
-.bi-telephone-inbound-fill::before { content: "\f5b7"; }
-.bi-telephone-inbound::before { content: "\f5b8"; }
-.bi-telephone-minus-fill::before { content: "\f5b9"; }
-.bi-telephone-minus::before { content: "\f5ba"; }
-.bi-telephone-outbound-fill::before { content: "\f5bb"; }
-.bi-telephone-outbound::before { content: "\f5bc"; }
-.bi-telephone-plus-fill::before { content: "\f5bd"; }
-.bi-telephone-plus::before { content: "\f5be"; }
-.bi-telephone-x-fill::before { content: "\f5bf"; }
-.bi-telephone-x::before { content: "\f5c0"; }
-.bi-telephone::before { content: "\f5c1"; }
-.bi-terminal-fill::before { content: "\f5c2"; }
-.bi-terminal::before { content: "\f5c3"; }
-.bi-text-center::before { content: "\f5c4"; }
-.bi-text-indent-left::before { content: "\f5c5"; }
-.bi-text-indent-right::before { content: "\f5c6"; }
-.bi-text-left::before { content: "\f5c7"; }
-.bi-text-paragraph::before { content: "\f5c8"; }
-.bi-text-right::before { content: "\f5c9"; }
-.bi-textarea-resize::before { content: "\f5ca"; }
-.bi-textarea-t::before { content: "\f5cb"; }
-.bi-textarea::before { content: "\f5cc"; }
-.bi-thermometer-half::before { content: "\f5cd"; }
-.bi-thermometer-high::before { content: "\f5ce"; }
-.bi-thermometer-low::before { content: "\f5cf"; }
-.bi-thermometer-snow::before { content: "\f5d0"; }
-.bi-thermometer-sun::before { content: "\f5d1"; }
-.bi-thermometer::before { content: "\f5d2"; }
-.bi-three-dots-vertical::before { content: "\f5d3"; }
-.bi-three-dots::before { content: "\f5d4"; }
-.bi-toggle-off::before { content: "\f5d5"; }
-.bi-toggle-on::before { content: "\f5d6"; }
-.bi-toggle2-off::before { content: "\f5d7"; }
-.bi-toggle2-on::before { content: "\f5d8"; }
-.bi-toggles::before { content: "\f5d9"; }
-.bi-toggles2::before { content: "\f5da"; }
-.bi-tools::before { content: "\f5db"; }
-.bi-tornado::before { content: "\f5dc"; }
-.bi-trash-fill::before { content: "\f5dd"; }
-.bi-trash::before { content: "\f5de"; }
-.bi-trash2-fill::before { content: "\f5df"; }
-.bi-trash2::before { content: "\f5e0"; }
-.bi-tree-fill::before { content: "\f5e1"; }
-.bi-tree::before { content: "\f5e2"; }
-.bi-triangle-fill::before { content: "\f5e3"; }
-.bi-triangle-half::before { content: "\f5e4"; }
-.bi-triangle::before { content: "\f5e5"; }
-.bi-trophy-fill::before { content: "\f5e6"; }
-.bi-trophy::before { content: "\f5e7"; }
-.bi-tropical-storm::before { content: "\f5e8"; }
-.bi-truck-flatbed::before { content: "\f5e9"; }
-.bi-truck::before { content: "\f5ea"; }
-.bi-tsunami::before { content: "\f5eb"; }
-.bi-tv-fill::before { content: "\f5ec"; }
-.bi-tv::before { content: "\f5ed"; }
-.bi-twitch::before { content: "\f5ee"; }
-.bi-twitter::before { content: "\f5ef"; }
-.bi-type-bold::before { content: "\f5f0"; }
-.bi-type-h1::before { content: "\f5f1"; }
-.bi-type-h2::before { content: "\f5f2"; }
-.bi-type-h3::before { content: "\f5f3"; }
-.bi-type-italic::before { content: "\f5f4"; }
-.bi-type-strikethrough::before { content: "\f5f5"; }
-.bi-type-underline::before { content: "\f5f6"; }
-.bi-type::before { content: "\f5f7"; }
-.bi-ui-checks-grid::before { content: "\f5f8"; }
-.bi-ui-checks::before { content: "\f5f9"; }
-.bi-ui-radios-grid::before { content: "\f5fa"; }
-.bi-ui-radios::before { content: "\f5fb"; }
-.bi-umbrella-fill::before { content: "\f5fc"; }
-.bi-umbrella::before { content: "\f5fd"; }
-.bi-union::before { content: "\f5fe"; }
-.bi-unlock-fill::before { content: "\f5ff"; }
-.bi-unlock::before { content: "\f600"; }
-.bi-upc-scan::before { content: "\f601"; }
-.bi-upc::before { content: "\f602"; }
-.bi-upload::before { content: "\f603"; }
-.bi-vector-pen::before { content: "\f604"; }
-.bi-view-list::before { content: "\f605"; }
-.bi-view-stacked::before { content: "\f606"; }
-.bi-vinyl-fill::before { content: "\f607"; }
-.bi-vinyl::before { content: "\f608"; }
-.bi-voicemail::before { content: "\f609"; }
-.bi-volume-down-fill::before { content: "\f60a"; }
-.bi-volume-down::before { content: "\f60b"; }
-.bi-volume-mute-fill::before { content: "\f60c"; }
-.bi-volume-mute::before { content: "\f60d"; }
-.bi-volume-off-fill::before { content: "\f60e"; }
-.bi-volume-off::before { content: "\f60f"; }
-.bi-volume-up-fill::before { content: "\f610"; }
-.bi-volume-up::before { content: "\f611"; }
-.bi-vr::before { content: "\f612"; }
-.bi-wallet-fill::before { content: "\f613"; }
-.bi-wallet::before { content: "\f614"; }
-.bi-wallet2::before { content: "\f615"; }
-.bi-watch::before { content: "\f616"; }
-.bi-water::before { content: "\f617"; }
-.bi-whatsapp::before { content: "\f618"; }
-.bi-wifi-1::before { content: "\f619"; }
-.bi-wifi-2::before { content: "\f61a"; }
-.bi-wifi-off::before { content: "\f61b"; }
-.bi-wifi::before { content: "\f61c"; }
-.bi-wind::before { content: "\f61d"; }
-.bi-window-dock::before { content: "\f61e"; }
-.bi-window-sidebar::before { content: "\f61f"; }
-.bi-window::before { content: "\f620"; }
-.bi-wrench::before { content: "\f621"; }
-.bi-x-circle-fill::before { content: "\f622"; }
-.bi-x-circle::before { content: "\f623"; }
-.bi-x-diamond-fill::before { content: "\f624"; }
-.bi-x-diamond::before { content: "\f625"; }
-.bi-x-octagon-fill::before { content: "\f626"; }
-.bi-x-octagon::before { content: "\f627"; }
-.bi-x-square-fill::before { content: "\f628"; }
-.bi-x-square::before { content: "\f629"; }
-.bi-x::before { content: "\f62a"; }
-.bi-youtube::before { content: "\f62b"; }
-.bi-zoom-in::before { content: "\f62c"; }
-.bi-zoom-out::before { content: "\f62d"; }
-.bi-bank::before { content: "\f62e"; }
-.bi-bank2::before { content: "\f62f"; }
-.bi-bell-slash-fill::before { content: "\f630"; }
-.bi-bell-slash::before { content: "\f631"; }
-.bi-cash-coin::before { content: "\f632"; }
-.bi-check-lg::before { content: "\f633"; }
-.bi-coin::before { content: "\f634"; }
-.bi-currency-bitcoin::before { content: "\f635"; }
-.bi-currency-dollar::before { content: "\f636"; }
-.bi-currency-euro::before { content: "\f637"; }
-.bi-currency-exchange::before { content: "\f638"; }
-.bi-currency-pound::before { content: "\f639"; }
-.bi-currency-yen::before { content: "\f63a"; }
-.bi-dash-lg::before { content: "\f63b"; }
-.bi-exclamation-lg::before { content: "\f63c"; }
-.bi-file-earmark-pdf-fill::before { content: "\f63d"; }
-.bi-file-earmark-pdf::before { content: "\f63e"; }
-.bi-file-pdf-fill::before { content: "\f63f"; }
-.bi-file-pdf::before { content: "\f640"; }
-.bi-gender-ambiguous::before { content: "\f641"; }
-.bi-gender-female::before { content: "\f642"; }
-.bi-gender-male::before { content: "\f643"; }
-.bi-gender-trans::before { content: "\f644"; }
-.bi-headset-vr::before { content: "\f645"; }
-.bi-info-lg::before { content: "\f646"; }
-.bi-mastodon::before { content: "\f647"; }
-.bi-messenger::before { content: "\f648"; }
-.bi-piggy-bank-fill::before { content: "\f649"; }
-.bi-piggy-bank::before { content: "\f64a"; }
-.bi-pin-map-fill::before { content: "\f64b"; }
-.bi-pin-map::before { content: "\f64c"; }
-.bi-plus-lg::before { content: "\f64d"; }
-.bi-question-lg::before { content: "\f64e"; }
-.bi-recycle::before { content: "\f64f"; }
-.bi-reddit::before { content: "\f650"; }
-.bi-safe-fill::before { content: "\f651"; }
-.bi-safe2-fill::before { content: "\f652"; }
-.bi-safe2::before { content: "\f653"; }
-.bi-sd-card-fill::before { content: "\f654"; }
-.bi-sd-card::before { content: "\f655"; }
-.bi-skype::before { content: "\f656"; }
-.bi-slash-lg::before { content: "\f657"; }
-.bi-translate::before { content: "\f658"; }
-.bi-x-lg::before { content: "\f659"; }
-.bi-safe::before { content: "\f65a"; }
-.bi-apple::before { content: "\f65b"; }
-.bi-microsoft::before { content: "\f65d"; }
-.bi-windows::before { content: "\f65e"; }
-.bi-behance::before { content: "\f65c"; }
-.bi-dribbble::before { content: "\f65f"; }
-.bi-line::before { content: "\f660"; }
-.bi-medium::before { content: "\f661"; }
-.bi-paypal::before { content: "\f662"; }
-.bi-pinterest::before { content: "\f663"; }
-.bi-signal::before { content: "\f664"; }
-.bi-snapchat::before { content: "\f665"; }
-.bi-spotify::before { content: "\f666"; }
-.bi-stack-overflow::before { content: "\f667"; }
-.bi-strava::before { content: "\f668"; }
-.bi-wordpress::before { content: "\f669"; }
-.bi-vimeo::before { content: "\f66a"; }
-.bi-activity::before { content: "\f66b"; }
-.bi-easel2-fill::before { content: "\f66c"; }
-.bi-easel2::before { content: "\f66d"; }
-.bi-easel3-fill::before { content: "\f66e"; }
-.bi-easel3::before { content: "\f66f"; }
-.bi-fan::before { content: "\f670"; }
-.bi-fingerprint::before { content: "\f671"; }
-.bi-graph-down-arrow::before { content: "\f672"; }
-.bi-graph-up-arrow::before { content: "\f673"; }
-.bi-hypnotize::before { content: "\f674"; }
-.bi-magic::before { content: "\f675"; }
-.bi-person-rolodex::before { content: "\f676"; }
-.bi-person-video::before { content: "\f677"; }
-.bi-person-video2::before { content: "\f678"; }
-.bi-person-video3::before { content: "\f679"; }
-.bi-person-workspace::before { content: "\f67a"; }
-.bi-radioactive::before { content: "\f67b"; }
-.bi-webcam-fill::before { content: "\f67c"; }
-.bi-webcam::before { content: "\f67d"; }
-.bi-yin-yang::before { content: "\f67e"; }
-.bi-bandaid-fill::before { content: "\f680"; }
-.bi-bandaid::before { content: "\f681"; }
-.bi-bluetooth::before { content: "\f682"; }
-.bi-body-text::before { content: "\f683"; }
-.bi-boombox::before { content: "\f684"; }
-.bi-boxes::before { content: "\f685"; }
-.bi-dpad-fill::before { content: "\f686"; }
-.bi-dpad::before { content: "\f687"; }
-.bi-ear-fill::before { content: "\f688"; }
-.bi-ear::before { content: "\f689"; }
-.bi-envelope-check-fill::before { content: "\f68b"; }
-.bi-envelope-check::before { content: "\f68c"; }
-.bi-envelope-dash-fill::before { content: "\f68e"; }
-.bi-envelope-dash::before { content: "\f68f"; }
-.bi-envelope-exclamation-fill::before { content: "\f691"; }
-.bi-envelope-exclamation::before { content: "\f692"; }
-.bi-envelope-plus-fill::before { content: "\f693"; }
-.bi-envelope-plus::before { content: "\f694"; }
-.bi-envelope-slash-fill::before { content: "\f696"; }
-.bi-envelope-slash::before { content: "\f697"; }
-.bi-envelope-x-fill::before { content: "\f699"; }
-.bi-envelope-x::before { content: "\f69a"; }
-.bi-explicit-fill::before { content: "\f69b"; }
-.bi-explicit::before { content: "\f69c"; }
-.bi-git::before { content: "\f69d"; }
-.bi-infinity::before { content: "\f69e"; }
-.bi-list-columns-reverse::before { content: "\f69f"; }
-.bi-list-columns::before { content: "\f6a0"; }
-.bi-meta::before { content: "\f6a1"; }
-.bi-nintendo-switch::before { content: "\f6a4"; }
-.bi-pc-display-horizontal::before { content: "\f6a5"; }
-.bi-pc-display::before { content: "\f6a6"; }
-.bi-pc-horizontal::before { content: "\f6a7"; }
-.bi-pc::before { content: "\f6a8"; }
-.bi-playstation::before { content: "\f6a9"; }
-.bi-plus-slash-minus::before { content: "\f6aa"; }
-.bi-projector-fill::before { content: "\f6ab"; }
-.bi-projector::before { content: "\f6ac"; }
-.bi-qr-code-scan::before { content: "\f6ad"; }
-.bi-qr-code::before { content: "\f6ae"; }
-.bi-quora::before { content: "\f6af"; }
-.bi-quote::before { content: "\f6b0"; }
-.bi-robot::before { content: "\f6b1"; }
-.bi-send-check-fill::before { content: "\f6b2"; }
-.bi-send-check::before { content: "\f6b3"; }
-.bi-send-dash-fill::before { content: "\f6b4"; }
-.bi-send-dash::before { content: "\f6b5"; }
-.bi-send-exclamation-fill::before { content: "\f6b7"; }
-.bi-send-exclamation::before { content: "\f6b8"; }
-.bi-send-fill::before { content: "\f6b9"; }
-.bi-send-plus-fill::before { content: "\f6ba"; }
-.bi-send-plus::before { content: "\f6bb"; }
-.bi-send-slash-fill::before { content: "\f6bc"; }
-.bi-send-slash::before { content: "\f6bd"; }
-.bi-send-x-fill::before { content: "\f6be"; }
-.bi-send-x::before { content: "\f6bf"; }
-.bi-send::before { content: "\f6c0"; }
-.bi-steam::before { content: "\f6c1"; }
-.bi-terminal-dash::before { content: "\f6c3"; }
-.bi-terminal-plus::before { content: "\f6c4"; }
-.bi-terminal-split::before { content: "\f6c5"; }
-.bi-ticket-detailed-fill::before { content: "\f6c6"; }
-.bi-ticket-detailed::before { content: "\f6c7"; }
-.bi-ticket-fill::before { content: "\f6c8"; }
-.bi-ticket-perforated-fill::before { content: "\f6c9"; }
-.bi-ticket-perforated::before { content: "\f6ca"; }
-.bi-ticket::before { content: "\f6cb"; }
-.bi-tiktok::before { content: "\f6cc"; }
-.bi-window-dash::before { content: "\f6cd"; }
-.bi-window-desktop::before { content: "\f6ce"; }
-.bi-window-fullscreen::before { content: "\f6cf"; }
-.bi-window-plus::before { content: "\f6d0"; }
-.bi-window-split::before { content: "\f6d1"; }
-.bi-window-stack::before { content: "\f6d2"; }
-.bi-window-x::before { content: "\f6d3"; }
-.bi-xbox::before { content: "\f6d4"; }
-.bi-ethernet::before { content: "\f6d5"; }
-.bi-hdmi-fill::before { content: "\f6d6"; }
-.bi-hdmi::before { content: "\f6d7"; }
-.bi-usb-c-fill::before { content: "\f6d8"; }
-.bi-usb-c::before { content: "\f6d9"; }
-.bi-usb-fill::before { content: "\f6da"; }
-.bi-usb-plug-fill::before { content: "\f6db"; }
-.bi-usb-plug::before { content: "\f6dc"; }
-.bi-usb-symbol::before { content: "\f6dd"; }
-.bi-usb::before { content: "\f6de"; }
-.bi-boombox-fill::before { content: "\f6df"; }
-.bi-displayport::before { content: "\f6e1"; }
-.bi-gpu-card::before { content: "\f6e2"; }
-.bi-memory::before { content: "\f6e3"; }
-.bi-modem-fill::before { content: "\f6e4"; }
-.bi-modem::before { content: "\f6e5"; }
-.bi-motherboard-fill::before { content: "\f6e6"; }
-.bi-motherboard::before { content: "\f6e7"; }
-.bi-optical-audio-fill::before { content: "\f6e8"; }
-.bi-optical-audio::before { content: "\f6e9"; }
-.bi-pci-card::before { content: "\f6ea"; }
-.bi-router-fill::before { content: "\f6eb"; }
-.bi-router::before { content: "\f6ec"; }
-.bi-thunderbolt-fill::before { content: "\f6ef"; }
-.bi-thunderbolt::before { content: "\f6f0"; }
-.bi-usb-drive-fill::before { content: "\f6f1"; }
-.bi-usb-drive::before { content: "\f6f2"; }
-.bi-usb-micro-fill::before { content: "\f6f3"; }
-.bi-usb-micro::before { content: "\f6f4"; }
-.bi-usb-mini-fill::before { content: "\f6f5"; }
-.bi-usb-mini::before { content: "\f6f6"; }
-.bi-cloud-haze2::before { content: "\f6f7"; }
-.bi-device-hdd-fill::before { content: "\f6f8"; }
-.bi-device-hdd::before { content: "\f6f9"; }
-.bi-device-ssd-fill::before { content: "\f6fa"; }
-.bi-device-ssd::before { content: "\f6fb"; }
-.bi-displayport-fill::before { content: "\f6fc"; }
-.bi-mortarboard-fill::before { content: "\f6fd"; }
-.bi-mortarboard::before { content: "\f6fe"; }
-.bi-terminal-x::before { content: "\f6ff"; }
-.bi-arrow-through-heart-fill::before { content: "\f700"; }
-.bi-arrow-through-heart::before { content: "\f701"; }
-.bi-badge-sd-fill::before { content: "\f702"; }
-.bi-badge-sd::before { content: "\f703"; }
-.bi-bag-heart-fill::before { content: "\f704"; }
-.bi-bag-heart::before { content: "\f705"; }
-.bi-balloon-fill::before { content: "\f706"; }
-.bi-balloon-heart-fill::before { content: "\f707"; }
-.bi-balloon-heart::before { content: "\f708"; }
-.bi-balloon::before { content: "\f709"; }
-.bi-box2-fill::before { content: "\f70a"; }
-.bi-box2-heart-fill::before { content: "\f70b"; }
-.bi-box2-heart::before { content: "\f70c"; }
-.bi-box2::before { content: "\f70d"; }
-.bi-braces-asterisk::before { content: "\f70e"; }
-.bi-calendar-heart-fill::before { content: "\f70f"; }
-.bi-calendar-heart::before { content: "\f710"; }
-.bi-calendar2-heart-fill::before { content: "\f711"; }
-.bi-calendar2-heart::before { content: "\f712"; }
-.bi-chat-heart-fill::before { content: "\f713"; }
-.bi-chat-heart::before { content: "\f714"; }
-.bi-chat-left-heart-fill::before { content: "\f715"; }
-.bi-chat-left-heart::before { content: "\f716"; }
-.bi-chat-right-heart-fill::before { content: "\f717"; }
-.bi-chat-right-heart::before { content: "\f718"; }
-.bi-chat-square-heart-fill::before { content: "\f719"; }
-.bi-chat-square-heart::before { content: "\f71a"; }
-.bi-clipboard-check-fill::before { content: "\f71b"; }
-.bi-clipboard-data-fill::before { content: "\f71c"; }
-.bi-clipboard-fill::before { content: "\f71d"; }
-.bi-clipboard-heart-fill::before { content: "\f71e"; }
-.bi-clipboard-heart::before { content: "\f71f"; }
-.bi-clipboard-minus-fill::before { content: "\f720"; }
-.bi-clipboard-plus-fill::before { content: "\f721"; }
-.bi-clipboard-pulse::before { content: "\f722"; }
-.bi-clipboard-x-fill::before { content: "\f723"; }
-.bi-clipboard2-check-fill::before { content: "\f724"; }
-.bi-clipboard2-check::before { content: "\f725"; }
-.bi-clipboard2-data-fill::before { content: "\f726"; }
-.bi-clipboard2-data::before { content: "\f727"; }
-.bi-clipboard2-fill::before { content: "\f728"; }
-.bi-clipboard2-heart-fill::before { content: "\f729"; }
-.bi-clipboard2-heart::before { content: "\f72a"; }
-.bi-clipboard2-minus-fill::before { content: "\f72b"; }
-.bi-clipboard2-minus::before { content: "\f72c"; }
-.bi-clipboard2-plus-fill::before { content: "\f72d"; }
-.bi-clipboard2-plus::before { content: "\f72e"; }
-.bi-clipboard2-pulse-fill::before { content: "\f72f"; }
-.bi-clipboard2-pulse::before { content: "\f730"; }
-.bi-clipboard2-x-fill::before { content: "\f731"; }
-.bi-clipboard2-x::before { content: "\f732"; }
-.bi-clipboard2::before { content: "\f733"; }
-.bi-emoji-kiss-fill::before { content: "\f734"; }
-.bi-emoji-kiss::before { content: "\f735"; }
-.bi-envelope-heart-fill::before { content: "\f736"; }
-.bi-envelope-heart::before { content: "\f737"; }
-.bi-envelope-open-heart-fill::before { content: "\f738"; }
-.bi-envelope-open-heart::before { content: "\f739"; }
-.bi-envelope-paper-fill::before { content: "\f73a"; }
-.bi-envelope-paper-heart-fill::before { content: "\f73b"; }
-.bi-envelope-paper-heart::before { content: "\f73c"; }
-.bi-envelope-paper::before { content: "\f73d"; }
-.bi-filetype-aac::before { content: "\f73e"; }
-.bi-filetype-ai::before { content: "\f73f"; }
-.bi-filetype-bmp::before { content: "\f740"; }
-.bi-filetype-cs::before { content: "\f741"; }
-.bi-filetype-css::before { content: "\f742"; }
-.bi-filetype-csv::before { content: "\f743"; }
-.bi-filetype-doc::before { content: "\f744"; }
-.bi-filetype-docx::before { content: "\f745"; }
-.bi-filetype-exe::before { content: "\f746"; }
-.bi-filetype-gif::before { content: "\f747"; }
-.bi-filetype-heic::before { content: "\f748"; }
-.bi-filetype-html::before { content: "\f749"; }
-.bi-filetype-java::before { content: "\f74a"; }
-.bi-filetype-jpg::before { content: "\f74b"; }
-.bi-filetype-js::before { content: "\f74c"; }
-.bi-filetype-jsx::before { content: "\f74d"; }
-.bi-filetype-key::before { content: "\f74e"; }
-.bi-filetype-m4p::before { content: "\f74f"; }
-.bi-filetype-md::before { content: "\f750"; }
-.bi-filetype-mdx::before { content: "\f751"; }
-.bi-filetype-mov::before { content: "\f752"; }
-.bi-filetype-mp3::before { content: "\f753"; }
-.bi-filetype-mp4::before { content: "\f754"; }
-.bi-filetype-otf::before { content: "\f755"; }
-.bi-filetype-pdf::before { content: "\f756"; }
-.bi-filetype-php::before { content: "\f757"; }
-.bi-filetype-png::before { content: "\f758"; }
-.bi-filetype-ppt::before { content: "\f75a"; }
-.bi-filetype-psd::before { content: "\f75b"; }
-.bi-filetype-py::before { content: "\f75c"; }
-.bi-filetype-raw::before { content: "\f75d"; }
-.bi-filetype-rb::before { content: "\f75e"; }
-.bi-filetype-sass::before { content: "\f75f"; }
-.bi-filetype-scss::before { content: "\f760"; }
-.bi-filetype-sh::before { content: "\f761"; }
-.bi-filetype-svg::before { content: "\f762"; }
-.bi-filetype-tiff::before { content: "\f763"; }
-.bi-filetype-tsx::before { content: "\f764"; }
-.bi-filetype-ttf::before { content: "\f765"; }
-.bi-filetype-txt::before { content: "\f766"; }
-.bi-filetype-wav::before { content: "\f767"; }
-.bi-filetype-woff::before { content: "\f768"; }
-.bi-filetype-xls::before { content: "\f76a"; }
-.bi-filetype-xml::before { content: "\f76b"; }
-.bi-filetype-yml::before { content: "\f76c"; }
-.bi-heart-arrow::before { content: "\f76d"; }
-.bi-heart-pulse-fill::before { content: "\f76e"; }
-.bi-heart-pulse::before { content: "\f76f"; }
-.bi-heartbreak-fill::before { content: "\f770"; }
-.bi-heartbreak::before { content: "\f771"; }
-.bi-hearts::before { content: "\f772"; }
-.bi-hospital-fill::before { content: "\f773"; }
-.bi-hospital::before { content: "\f774"; }
-.bi-house-heart-fill::before { content: "\f775"; }
-.bi-house-heart::before { content: "\f776"; }
-.bi-incognito::before { content: "\f777"; }
-.bi-magnet-fill::before { content: "\f778"; }
-.bi-magnet::before { content: "\f779"; }
-.bi-person-heart::before { content: "\f77a"; }
-.bi-person-hearts::before { content: "\f77b"; }
-.bi-phone-flip::before { content: "\f77c"; }
-.bi-plugin::before { content: "\f77d"; }
-.bi-postage-fill::before { content: "\f77e"; }
-.bi-postage-heart-fill::before { content: "\f77f"; }
-.bi-postage-heart::before { content: "\f780"; }
-.bi-postage::before { content: "\f781"; }
-.bi-postcard-fill::before { content: "\f782"; }
-.bi-postcard-heart-fill::before { content: "\f783"; }
-.bi-postcard-heart::before { content: "\f784"; }
-.bi-postcard::before { content: "\f785"; }
-.bi-search-heart-fill::before { content: "\f786"; }
-.bi-search-heart::before { content: "\f787"; }
-.bi-sliders2-vertical::before { content: "\f788"; }
-.bi-sliders2::before { content: "\f789"; }
-.bi-trash3-fill::before { content: "\f78a"; }
-.bi-trash3::before { content: "\f78b"; }
-.bi-valentine::before { content: "\f78c"; }
-.bi-valentine2::before { content: "\f78d"; }
-.bi-wrench-adjustable-circle-fill::before { content: "\f78e"; }
-.bi-wrench-adjustable-circle::before { content: "\f78f"; }
-.bi-wrench-adjustable::before { content: "\f790"; }
-.bi-filetype-json::before { content: "\f791"; }
-.bi-filetype-pptx::before { content: "\f792"; }
-.bi-filetype-xlsx::before { content: "\f793"; }
-.bi-1-circle-fill::before { content: "\f796"; }
-.bi-1-circle::before { content: "\f797"; }
-.bi-1-square-fill::before { content: "\f798"; }
-.bi-1-square::before { content: "\f799"; }
-.bi-2-circle-fill::before { content: "\f79c"; }
-.bi-2-circle::before { content: "\f79d"; }
-.bi-2-square-fill::before { content: "\f79e"; }
-.bi-2-square::before { content: "\f79f"; }
-.bi-3-circle-fill::before { content: "\f7a2"; }
-.bi-3-circle::before { content: "\f7a3"; }
-.bi-3-square-fill::before { content: "\f7a4"; }
-.bi-3-square::before { content: "\f7a5"; }
-.bi-4-circle-fill::before { content: "\f7a8"; }
-.bi-4-circle::before { content: "\f7a9"; }
-.bi-4-square-fill::before { content: "\f7aa"; }
-.bi-4-square::before { content: "\f7ab"; }
-.bi-5-circle-fill::before { content: "\f7ae"; }
-.bi-5-circle::before { content: "\f7af"; }
-.bi-5-square-fill::before { content: "\f7b0"; }
-.bi-5-square::before { content: "\f7b1"; }
-.bi-6-circle-fill::before { content: "\f7b4"; }
-.bi-6-circle::before { content: "\f7b5"; }
-.bi-6-square-fill::before { content: "\f7b6"; }
-.bi-6-square::before { content: "\f7b7"; }
-.bi-7-circle-fill::before { content: "\f7ba"; }
-.bi-7-circle::before { content: "\f7bb"; }
-.bi-7-square-fill::before { content: "\f7bc"; }
-.bi-7-square::before { content: "\f7bd"; }
-.bi-8-circle-fill::before { content: "\f7c0"; }
-.bi-8-circle::before { content: "\f7c1"; }
-.bi-8-square-fill::before { content: "\f7c2"; }
-.bi-8-square::before { content: "\f7c3"; }
-.bi-9-circle-fill::before { content: "\f7c6"; }
-.bi-9-circle::before { content: "\f7c7"; }
-.bi-9-square-fill::before { content: "\f7c8"; }
-.bi-9-square::before { content: "\f7c9"; }
-.bi-airplane-engines-fill::before { content: "\f7ca"; }
-.bi-airplane-engines::before { content: "\f7cb"; }
-.bi-airplane-fill::before { content: "\f7cc"; }
-.bi-airplane::before { content: "\f7cd"; }
-.bi-alexa::before { content: "\f7ce"; }
-.bi-alipay::before { content: "\f7cf"; }
-.bi-android::before { content: "\f7d0"; }
-.bi-android2::before { content: "\f7d1"; }
-.bi-box-fill::before { content: "\f7d2"; }
-.bi-box-seam-fill::before { content: "\f7d3"; }
-.bi-browser-chrome::before { content: "\f7d4"; }
-.bi-browser-edge::before { content: "\f7d5"; }
-.bi-browser-firefox::before { content: "\f7d6"; }
-.bi-browser-safari::before { content: "\f7d7"; }
-.bi-c-circle-fill::before { content: "\f7da"; }
-.bi-c-circle::before { content: "\f7db"; }
-.bi-c-square-fill::before { content: "\f7dc"; }
-.bi-c-square::before { content: "\f7dd"; }
-.bi-capsule-pill::before { content: "\f7de"; }
-.bi-capsule::before { content: "\f7df"; }
-.bi-car-front-fill::before { content: "\f7e0"; }
-.bi-car-front::before { content: "\f7e1"; }
-.bi-cassette-fill::before { content: "\f7e2"; }
-.bi-cassette::before { content: "\f7e3"; }
-.bi-cc-circle-fill::before { content: "\f7e6"; }
-.bi-cc-circle::before { content: "\f7e7"; }
-.bi-cc-square-fill::before { content: "\f7e8"; }
-.bi-cc-square::before { content: "\f7e9"; }
-.bi-cup-hot-fill::before { content: "\f7ea"; }
-.bi-cup-hot::before { content: "\f7eb"; }
-.bi-currency-rupee::before { content: "\f7ec"; }
-.bi-dropbox::before { content: "\f7ed"; }
-.bi-escape::before { content: "\f7ee"; }
-.bi-fast-forward-btn-fill::before { content: "\f7ef"; }
-.bi-fast-forward-btn::before { content: "\f7f0"; }
-.bi-fast-forward-circle-fill::before { content: "\f7f1"; }
-.bi-fast-forward-circle::before { content: "\f7f2"; }
-.bi-fast-forward-fill::before { content: "\f7f3"; }
-.bi-fast-forward::before { content: "\f7f4"; }
-.bi-filetype-sql::before { content: "\f7f5"; }
-.bi-fire::before { content: "\f7f6"; }
-.bi-google-play::before { content: "\f7f7"; }
-.bi-h-circle-fill::before { content: "\f7fa"; }
-.bi-h-circle::before { content: "\f7fb"; }
-.bi-h-square-fill::before { content: "\f7fc"; }
-.bi-h-square::before { content: "\f7fd"; }
-.bi-indent::before { content: "\f7fe"; }
-.bi-lungs-fill::before { content: "\f7ff"; }
-.bi-lungs::before { content: "\f800"; }
-.bi-microsoft-teams::before { content: "\f801"; }
-.bi-p-circle-fill::before { content: "\f804"; }
-.bi-p-circle::before { content: "\f805"; }
-.bi-p-square-fill::before { content: "\f806"; }
-.bi-p-square::before { content: "\f807"; }
-.bi-pass-fill::before { content: "\f808"; }
-.bi-pass::before { content: "\f809"; }
-.bi-prescription::before { content: "\f80a"; }
-.bi-prescription2::before { content: "\f80b"; }
-.bi-r-circle-fill::before { content: "\f80e"; }
-.bi-r-circle::before { content: "\f80f"; }
-.bi-r-square-fill::before { content: "\f810"; }
-.bi-r-square::before { content: "\f811"; }
-.bi-repeat-1::before { content: "\f812"; }
-.bi-repeat::before { content: "\f813"; }
-.bi-rewind-btn-fill::before { content: "\f814"; }
-.bi-rewind-btn::before { content: "\f815"; }
-.bi-rewind-circle-fill::before { content: "\f816"; }
-.bi-rewind-circle::before { content: "\f817"; }
-.bi-rewind-fill::before { content: "\f818"; }
-.bi-rewind::before { content: "\f819"; }
-.bi-train-freight-front-fill::before { content: "\f81a"; }
-.bi-train-freight-front::before { content: "\f81b"; }
-.bi-train-front-fill::before { content: "\f81c"; }
-.bi-train-front::before { content: "\f81d"; }
-.bi-train-lightrail-front-fill::before { content: "\f81e"; }
-.bi-train-lightrail-front::before { content: "\f81f"; }
-.bi-truck-front-fill::before { content: "\f820"; }
-.bi-truck-front::before { content: "\f821"; }
-.bi-ubuntu::before { content: "\f822"; }
-.bi-unindent::before { content: "\f823"; }
-.bi-unity::before { content: "\f824"; }
-.bi-universal-access-circle::before { content: "\f825"; }
-.bi-universal-access::before { content: "\f826"; }
-.bi-virus::before { content: "\f827"; }
-.bi-virus2::before { content: "\f828"; }
-.bi-wechat::before { content: "\f829"; }
-.bi-yelp::before { content: "\f82a"; }
-.bi-sign-stop-fill::before { content: "\f82b"; }
-.bi-sign-stop-lights-fill::before { content: "\f82c"; }
-.bi-sign-stop-lights::before { content: "\f82d"; }
-.bi-sign-stop::before { content: "\f82e"; }
-.bi-sign-turn-left-fill::before { content: "\f82f"; }
-.bi-sign-turn-left::before { content: "\f830"; }
-.bi-sign-turn-right-fill::before { content: "\f831"; }
-.bi-sign-turn-right::before { content: "\f832"; }
-.bi-sign-turn-slight-left-fill::before { content: "\f833"; }
-.bi-sign-turn-slight-left::before { content: "\f834"; }
-.bi-sign-turn-slight-right-fill::before { content: "\f835"; }
-.bi-sign-turn-slight-right::before { content: "\f836"; }
-.bi-sign-yield-fill::before { content: "\f837"; }
-.bi-sign-yield::before { content: "\f838"; }
-.bi-ev-station-fill::before { content: "\f839"; }
-.bi-ev-station::before { content: "\f83a"; }
-.bi-fuel-pump-diesel-fill::before { content: "\f83b"; }
-.bi-fuel-pump-diesel::before { content: "\f83c"; }
-.bi-fuel-pump-fill::before { content: "\f83d"; }
-.bi-fuel-pump::before { content: "\f83e"; }
-.bi-0-circle-fill::before { content: "\f83f"; }
-.bi-0-circle::before { content: "\f840"; }
-.bi-0-square-fill::before { content: "\f841"; }
-.bi-0-square::before { content: "\f842"; }
-.bi-rocket-fill::before { content: "\f843"; }
-.bi-rocket-takeoff-fill::before { content: "\f844"; }
-.bi-rocket-takeoff::before { content: "\f845"; }
-.bi-rocket::before { content: "\f846"; }
-.bi-stripe::before { content: "\f847"; }
-.bi-subscript::before { content: "\f848"; }
-.bi-superscript::before { content: "\f849"; }
-.bi-trello::before { content: "\f84a"; }
-.bi-envelope-at-fill::before { content: "\f84b"; }
-.bi-envelope-at::before { content: "\f84c"; }
-.bi-regex::before { content: "\f84d"; }
-.bi-text-wrap::before { content: "\f84e"; }
-.bi-sign-dead-end-fill::before { content: "\f84f"; }
-.bi-sign-dead-end::before { content: "\f850"; }
-.bi-sign-do-not-enter-fill::before { content: "\f851"; }
-.bi-sign-do-not-enter::before { content: "\f852"; }
-.bi-sign-intersection-fill::before { content: "\f853"; }
-.bi-sign-intersection-side-fill::before { content: "\f854"; }
-.bi-sign-intersection-side::before { content: "\f855"; }
-.bi-sign-intersection-t-fill::before { content: "\f856"; }
-.bi-sign-intersection-t::before { content: "\f857"; }
-.bi-sign-intersection-y-fill::before { content: "\f858"; }
-.bi-sign-intersection-y::before { content: "\f859"; }
-.bi-sign-intersection::before { content: "\f85a"; }
-.bi-sign-merge-left-fill::before { content: "\f85b"; }
-.bi-sign-merge-left::before { content: "\f85c"; }
-.bi-sign-merge-right-fill::before { content: "\f85d"; }
-.bi-sign-merge-right::before { content: "\f85e"; }
-.bi-sign-no-left-turn-fill::before { content: "\f85f"; }
-.bi-sign-no-left-turn::before { content: "\f860"; }
-.bi-sign-no-parking-fill::before { content: "\f861"; }
-.bi-sign-no-parking::before { content: "\f862"; }
-.bi-sign-no-right-turn-fill::before { content: "\f863"; }
-.bi-sign-no-right-turn::before { content: "\f864"; }
-.bi-sign-railroad-fill::before { content: "\f865"; }
-.bi-sign-railroad::before { content: "\f866"; }
-.bi-building-add::before { content: "\f867"; }
-.bi-building-check::before { content: "\f868"; }
-.bi-building-dash::before { content: "\f869"; }
-.bi-building-down::before { content: "\f86a"; }
-.bi-building-exclamation::before { content: "\f86b"; }
-.bi-building-fill-add::before { content: "\f86c"; }
-.bi-building-fill-check::before { content: "\f86d"; }
-.bi-building-fill-dash::before { content: "\f86e"; }
-.bi-building-fill-down::before { content: "\f86f"; }
-.bi-building-fill-exclamation::before { content: "\f870"; }
-.bi-building-fill-gear::before { content: "\f871"; }
-.bi-building-fill-lock::before { content: "\f872"; }
-.bi-building-fill-slash::before { content: "\f873"; }
-.bi-building-fill-up::before { content: "\f874"; }
-.bi-building-fill-x::before { content: "\f875"; }
-.bi-building-fill::before { content: "\f876"; }
-.bi-building-gear::before { content: "\f877"; }
-.bi-building-lock::before { content: "\f878"; }
-.bi-building-slash::before { content: "\f879"; }
-.bi-building-up::before { content: "\f87a"; }
-.bi-building-x::before { content: "\f87b"; }
-.bi-buildings-fill::before { content: "\f87c"; }
-.bi-buildings::before { content: "\f87d"; }
-.bi-bus-front-fill::before { content: "\f87e"; }
-.bi-bus-front::before { content: "\f87f"; }
-.bi-ev-front-fill::before { content: "\f880"; }
-.bi-ev-front::before { content: "\f881"; }
-.bi-globe-americas::before { content: "\f882"; }
-.bi-globe-asia-australia::before { content: "\f883"; }
-.bi-globe-central-south-asia::before { content: "\f884"; }
-.bi-globe-europe-africa::before { content: "\f885"; }
-.bi-house-add-fill::before { content: "\f886"; }
-.bi-house-add::before { content: "\f887"; }
-.bi-house-check-fill::before { content: "\f888"; }
-.bi-house-check::before { content: "\f889"; }
-.bi-house-dash-fill::before { content: "\f88a"; }
-.bi-house-dash::before { content: "\f88b"; }
-.bi-house-down-fill::before { content: "\f88c"; }
-.bi-house-down::before { content: "\f88d"; }
-.bi-house-exclamation-fill::before { content: "\f88e"; }
-.bi-house-exclamation::before { content: "\f88f"; }
-.bi-house-gear-fill::before { content: "\f890"; }
-.bi-house-gear::before { content: "\f891"; }
-.bi-house-lock-fill::before { content: "\f892"; }
-.bi-house-lock::before { content: "\f893"; }
-.bi-house-slash-fill::before { content: "\f894"; }
-.bi-house-slash::before { content: "\f895"; }
-.bi-house-up-fill::before { content: "\f896"; }
-.bi-house-up::before { content: "\f897"; }
-.bi-house-x-fill::before { content: "\f898"; }
-.bi-house-x::before { content: "\f899"; }
-.bi-person-add::before { content: "\f89a"; }
-.bi-person-down::before { content: "\f89b"; }
-.bi-person-exclamation::before { content: "\f89c"; }
-.bi-person-fill-add::before { content: "\f89d"; }
-.bi-person-fill-check::before { content: "\f89e"; }
-.bi-person-fill-dash::before { content: "\f89f"; }
-.bi-person-fill-down::before { content: "\f8a0"; }
-.bi-person-fill-exclamation::before { content: "\f8a1"; }
-.bi-person-fill-gear::before { content: "\f8a2"; }
-.bi-person-fill-lock::before { content: "\f8a3"; }
-.bi-person-fill-slash::before { content: "\f8a4"; }
-.bi-person-fill-up::before { content: "\f8a5"; }
-.bi-person-fill-x::before { content: "\f8a6"; }
-.bi-person-gear::before { content: "\f8a7"; }
-.bi-person-lock::before { content: "\f8a8"; }
-.bi-person-slash::before { content: "\f8a9"; }
-.bi-person-up::before { content: "\f8aa"; }
-.bi-scooter::before { content: "\f8ab"; }
-.bi-taxi-front-fill::before { content: "\f8ac"; }
-.bi-taxi-front::before { content: "\f8ad"; }
-.bi-amd::before { content: "\f8ae"; }
-.bi-database-add::before { content: "\f8af"; }
-.bi-database-check::before { content: "\f8b0"; }
-.bi-database-dash::before { content: "\f8b1"; }
-.bi-database-down::before { content: "\f8b2"; }
-.bi-database-exclamation::before { content: "\f8b3"; }
-.bi-database-fill-add::before { content: "\f8b4"; }
-.bi-database-fill-check::before { content: "\f8b5"; }
-.bi-database-fill-dash::before { content: "\f8b6"; }
-.bi-database-fill-down::before { content: "\f8b7"; }
-.bi-database-fill-exclamation::before { content: "\f8b8"; }
-.bi-database-fill-gear::before { content: "\f8b9"; }
-.bi-database-fill-lock::before { content: "\f8ba"; }
-.bi-database-fill-slash::before { content: "\f8bb"; }
-.bi-database-fill-up::before { content: "\f8bc"; }
-.bi-database-fill-x::before { content: "\f8bd"; }
-.bi-database-fill::before { content: "\f8be"; }
-.bi-database-gear::before { content: "\f8bf"; }
-.bi-database-lock::before { content: "\f8c0"; }
-.bi-database-slash::before { content: "\f8c1"; }
-.bi-database-up::before { content: "\f8c2"; }
-.bi-database-x::before { content: "\f8c3"; }
-.bi-database::before { content: "\f8c4"; }
-.bi-houses-fill::before { content: "\f8c5"; }
-.bi-houses::before { content: "\f8c6"; }
-.bi-nvidia::before { content: "\f8c7"; }
-.bi-person-vcard-fill::before { content: "\f8c8"; }
-.bi-person-vcard::before { content: "\f8c9"; }
-.bi-sina-weibo::before { content: "\f8ca"; }
-.bi-tencent-qq::before { content: "\f8cb"; }
-.bi-wikipedia::before { content: "\f8cc"; }
-.bi-alphabet-uppercase::before { content: "\f2a5"; }
-.bi-alphabet::before { content: "\f68a"; }
-.bi-amazon::before { content: "\f68d"; }
-.bi-arrows-collapse-vertical::before { content: "\f690"; }
-.bi-arrows-expand-vertical::before { content: "\f695"; }
-.bi-arrows-vertical::before { content: "\f698"; }
-.bi-arrows::before { content: "\f6a2"; }
-.bi-ban-fill::before { content: "\f6a3"; }
-.bi-ban::before { content: "\f6b6"; }
-.bi-bing::before { content: "\f6c2"; }
-.bi-cake::before { content: "\f6e0"; }
-.bi-cake2::before { content: "\f6ed"; }
-.bi-cookie::before { content: "\f6ee"; }
-.bi-copy::before { content: "\f759"; }
-.bi-crosshair::before { content: "\f769"; }
-.bi-crosshair2::before { content: "\f794"; }
-.bi-emoji-astonished-fill::before { content: "\f795"; }
-.bi-emoji-astonished::before { content: "\f79a"; }
-.bi-emoji-grimace-fill::before { content: "\f79b"; }
-.bi-emoji-grimace::before { content: "\f7a0"; }
-.bi-emoji-grin-fill::before { content: "\f7a1"; }
-.bi-emoji-grin::before { content: "\f7a6"; }
-.bi-emoji-surprise-fill::before { content: "\f7a7"; }
-.bi-emoji-surprise::before { content: "\f7ac"; }
-.bi-emoji-tear-fill::before { content: "\f7ad"; }
-.bi-emoji-tear::before { content: "\f7b2"; }
-.bi-envelope-arrow-down-fill::before { content: "\f7b3"; }
-.bi-envelope-arrow-down::before { content: "\f7b8"; }
-.bi-envelope-arrow-up-fill::before { content: "\f7b9"; }
-.bi-envelope-arrow-up::before { content: "\f7be"; }
-.bi-feather::before { content: "\f7bf"; }
-.bi-feather2::before { content: "\f7c4"; }
-.bi-floppy-fill::before { content: "\f7c5"; }
-.bi-floppy::before { content: "\f7d8"; }
-.bi-floppy2-fill::before { content: "\f7d9"; }
-.bi-floppy2::before { content: "\f7e4"; }
-.bi-gitlab::before { content: "\f7e5"; }
-.bi-highlighter::before { content: "\f7f8"; }
-.bi-marker-tip::before { content: "\f802"; }
-.bi-nvme-fill::before { content: "\f803"; }
-.bi-nvme::before { content: "\f80c"; }
-.bi-opencollective::before { content: "\f80d"; }
-.bi-pci-card-network::before { content: "\f8cd"; }
-.bi-pci-card-sound::before { content: "\f8ce"; }
-.bi-radar::before { content: "\f8cf"; }
-.bi-send-arrow-down-fill::before { content: "\f8d0"; }
-.bi-send-arrow-down::before { content: "\f8d1"; }
-.bi-send-arrow-up-fill::before { content: "\f8d2"; }
-.bi-send-arrow-up::before { content: "\f8d3"; }
-.bi-sim-slash-fill::before { content: "\f8d4"; }
-.bi-sim-slash::before { content: "\f8d5"; }
-.bi-sourceforge::before { content: "\f8d6"; }
-.bi-substack::before { content: "\f8d7"; }
-.bi-threads-fill::before { content: "\f8d8"; }
-.bi-threads::before { content: "\f8d9"; }
-.bi-transparency::before { content: "\f8da"; }
-.bi-twitter-x::before { content: "\f8db"; }
-.bi-type-h4::before { content: "\f8dc"; }
-.bi-type-h5::before { content: "\f8dd"; }
-.bi-type-h6::before { content: "\f8de"; }
-.bi-backpack-fill::before { content: "\f8df"; }
-.bi-backpack::before { content: "\f8e0"; }
-.bi-backpack2-fill::before { content: "\f8e1"; }
-.bi-backpack2::before { content: "\f8e2"; }
-.bi-backpack3-fill::before { content: "\f8e3"; }
-.bi-backpack3::before { content: "\f8e4"; }
-.bi-backpack4-fill::before { content: "\f8e5"; }
-.bi-backpack4::before { content: "\f8e6"; }
-.bi-brilliance::before { content: "\f8e7"; }
-.bi-cake-fill::before { content: "\f8e8"; }
-.bi-cake2-fill::before { content: "\f8e9"; }
-.bi-duffle-fill::before { content: "\f8ea"; }
-.bi-duffle::before { content: "\f8eb"; }
-.bi-exposure::before { content: "\f8ec"; }
-.bi-gender-neuter::before { content: "\f8ed"; }
-.bi-highlights::before { content: "\f8ee"; }
-.bi-luggage-fill::before { content: "\f8ef"; }
-.bi-luggage::before { content: "\f8f0"; }
-.bi-mailbox-flag::before { content: "\f8f1"; }
-.bi-mailbox2-flag::before { content: "\f8f2"; }
-.bi-noise-reduction::before { content: "\f8f3"; }
-.bi-passport-fill::before { content: "\f8f4"; }
-.bi-passport::before { content: "\f8f5"; }
-.bi-person-arms-up::before { content: "\f8f6"; }
-.bi-person-raised-hand::before { content: "\f8f7"; }
-.bi-person-standing-dress::before { content: "\f8f8"; }
-.bi-person-standing::before { content: "\f8f9"; }
-.bi-person-walking::before { content: "\f8fa"; }
-.bi-person-wheelchair::before { content: "\f8fb"; }
-.bi-shadows::before { content: "\f8fc"; }
-.bi-suitcase-fill::before { content: "\f8fd"; }
-.bi-suitcase-lg-fill::before { content: "\f8fe"; }
-.bi-suitcase-lg::before { content: "\f8ff"; }
-.bi-suitcase::before { content: "\f900"; }
-.bi-suitcase2-fill::before { content: "\f901"; }
-.bi-suitcase2::before { content: "\f902"; }
-.bi-vignette::before { content: "\f903"; }
diff --git a/2411/site_libs/bootstrap/bootstrap-icons.woff b/2411/site_libs/bootstrap/bootstrap-icons.woff
deleted file mode 100644
index dbeeb0556..000000000
Binary files a/2411/site_libs/bootstrap/bootstrap-icons.woff and /dev/null differ
diff --git a/2411/site_libs/bootstrap/bootstrap.min.css b/2411/site_libs/bootstrap/bootstrap.min.css
deleted file mode 100644
index a4ae3e4ad..000000000
--- a/2411/site_libs/bootstrap/bootstrap.min.css
+++ /dev/null
@@ -1,12 +0,0 @@
-@import"https://fonts.googleapis.com/css2?family=Fira+Mono&family=Nunito:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap";/*!
- * Bootstrap v5.3.1 (https://getbootstrap.com/)
- * Copyright 2011-2023 The Bootstrap Authors
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */:root,[data-bs-theme=light]{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #ffffff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-default: #BDD775;--bs-primary: #95b540;--bs-secondary: #BDD775;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-default-rgb: 189, 215, 117;--bs-primary-rgb: 149, 181, 64;--bs-secondary-rgb: 189, 215, 117;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-primary-text-emphasis: #3c481a;--bs-secondary-text-emphasis: #4c562f;--bs-success-text-emphasis: #0a3622;--bs-info-text-emphasis: #055160;--bs-warning-text-emphasis: #664d03;--bs-danger-text-emphasis: #58151c;--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: #eaf0d9;--bs-secondary-bg-subtle: #f2f7e3;--bs-success-bg-subtle: #d1e7dd;--bs-info-bg-subtle: #cff4fc;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #f8d7da;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #d5e1b3;--bs-secondary-border-subtle: #e5efc8;--bs-success-border-subtle: #a3cfbb;--bs-info-border-subtle: #9eeaf9;--bs-warning-border-subtle: #ffe69c;--bs-danger-border-subtle: #f1aeb5;--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: "Nunito", "Source Sans Pro", "Helvetica", "sans-serif";--bs-font-monospace: "Fira Mono", "Ubuntu Mono", "Liberation Mono", "Lucida Console", "Courier", "monospace";--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-root-font-size: 18px;--bs-body-font-family: "Nunito", "Source Sans Pro", "Helvetica", "sans-serif";--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #1c2833;--bs-body-color-rgb: 28, 40, 51;--bs-body-bg: #ffffff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(28, 40, 51, 0.75);--bs-secondary-color-rgb: 28, 40, 51;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(28, 40, 51, 0.5);--bs-tertiary-color-rgb: 28, 40, 51;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #95b540;--bs-link-color-rgb: 149, 181, 64;--bs-link-decoration: underline;--bs-link-hover-color: #779133;--bs-link-hover-color-rgb: 119, 145, 51;--bs-code-color: #496985;--bs-highlight-bg: #fff3cd;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.25rem;--bs-border-radius-sm: 0.2em;--bs-border-radius-lg: 0.5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(149, 181, 64, 0.25);--bs-form-valid-color: #198754;--bs-form-valid-border-color: #198754;--bs-form-invalid-color: #dc3545;--bs-form-invalid-border-color: #dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33, 37, 41;--bs-emphasis-color: #ffffff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: #2b3035;--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: #bfd38c;--bs-secondary-text-emphasis: #d7e7ac;--bs-success-text-emphasis: #75b798;--bs-info-text-emphasis: #6edff6;--bs-warning-text-emphasis: #ffda6a;--bs-danger-text-emphasis: #ea868f;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #1e240d;--bs-secondary-bg-subtle: #262b17;--bs-success-bg-subtle: #051b11;--bs-info-bg-subtle: #032830;--bs-warning-bg-subtle: #332701;--bs-danger-bg-subtle: #2c0b0e;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #596d26;--bs-secondary-border-subtle: #718146;--bs-success-border-subtle: #0f5132;--bs-info-border-subtle: #087990;--bs-warning-border-subtle: #997404;--bs-danger-border-subtle: #842029;--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #bfd38c;--bs-link-hover-color: #ccdca3;--bs-link-color-rgb: 191, 211, 140;--bs-link-hover-color-rgb: 204, 220, 163;--bs-code-color: white;--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: #75b798;--bs-form-valid-border-color: #75b798;--bs-form-invalid-color: #ea868f;--bs-form-invalid-border-color: #ea868f}*,*::before,*::after{box-sizing:border-box}:root{font-size:var(--bs-root-font-size)}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.3052rem + 0.6624vw)}@media(min-width: 1200px){h1,.h1{font-size:1.802rem}}h2,.h2{font-size:calc(1.2852rem + 0.4224vw)}@media(min-width: 1200px){h2,.h2{font-size:1.602rem}}h3,.h3{font-size:calc(1.2674rem + 0.2088vw)}@media(min-width: 1200px){h3,.h3{font-size:1.424rem}}h4,.h4{font-size:calc(1.2516rem + 0.0192vw)}@media(min-width: 1200px){h4,.h4{font-size:1.266rem}}h5,.h5{font-size:1.125rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:"Fira Mono","Ubuntu Mono","Liberation Mono","Lucida Console","Courier","monospace";font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.9rem;color:#000;background-color:#f5f5f5;padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6);border-radius:.25rem}pre code{background-color:rgba(0,0,0,0);font-size:inherit;color:inherit;word-break:normal}code{font-size:0.9rem;color:var(--bs-code-color);background-color:#f5f5f5;border-radius:.25rem;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.4rem .4rem;font-size:0.9rem;color:#fff;background-color:#1c2833;border-radius:.2em}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:rgba(28,40,51,.75);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:rgba(28,40,51,.75)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media(min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media(min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media(min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media(min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media(min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: #1c2833;--bs-table-bg: #ffffff;--bs-table-border-color: #dee2e6;--bs-table-accent-bg: transparent;--bs-table-striped-color: #1c2833;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #1c2833;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #1c2833;--bs-table-hover-bg: rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(1px*2) solid #8da8c1}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: #eaf0d9;--bs-table-border-color: #d3d8c3;--bs-table-striped-bg: #dee4ce;--bs-table-striped-color: #000;--bs-table-active-bg: #d3d8c3;--bs-table-active-color: #000;--bs-table-hover-bg: #d8dec9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #f2f7e3;--bs-table-border-color: #dadecc;--bs-table-striped-bg: #e6ebd8;--bs-table-striped-color: #000;--bs-table-active-bg: #dadecc;--bs-table-active-color: #000;--bs-table-hover-bg: #e0e4d2;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d1e7dd;--bs-table-border-color: #bcd0c7;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #cff4fc;--bs-table-border-color: #badce3;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #fff3cd;--bs-table-border-color: #e6dbb9;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8d7da;--bs-table-border-color: #dfc2c4;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #dfe0e1;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #ffffff;--bs-table-bg: #212529;--bs-table-border-color: #373b3e;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #ffffff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #ffffff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #ffffff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:rgba(28,40,51,.75)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#1c2833;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-clip:padding-box;border:1px solid #dee2e6;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#1c2833;background-color:#fff;border-color:#cadaa0;outline:0;box-shadow:0 0 0 .25rem rgba(149,181,64,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:rgba(28,40,51,.75);opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:#1c2833;background-color:#f8f9fa;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#e9ecef}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#1c2833;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2));padding:.25rem .5rem;font-size:0.875rem;border-radius:.2em}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(1px * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(1px * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:.25rem}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:.25rem}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(1px * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(1px * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#1c2833;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #dee2e6;border-radius:.25rem;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:#cadaa0;outline:0;box-shadow:0 0 0 .25rem rgba(149,181,64,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #1c2833}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:.2em}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.5rem}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{--bs-form-check-bg: #ffffff;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid #dee2e6;print-color-adjust:exact}.form-check-input[type=checkbox],.shiny-input-container .checkbox input[type=checkbox],.shiny-input-container .checkbox-inline input[type=checkbox],.shiny-input-container .radio input[type=checkbox],.shiny-input-container .radio-inline input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio],.shiny-input-container .checkbox input[type=radio],.shiny-input-container .checkbox-inline input[type=radio],.shiny-input-container .radio input[type=radio],.shiny-input-container .radio-inline input[type=radio]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:#cadaa0;outline:0;box-shadow:0 0 0 .25rem rgba(149,181,64,.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#95b540;border-color:#95b540}.form-check-input:checked[type=checkbox],.shiny-input-container .checkbox input:checked[type=checkbox],.shiny-input-container .checkbox-inline input:checked[type=checkbox],.shiny-input-container .radio input:checked[type=checkbox],.shiny-input-container .radio-inline input:checked[type=checkbox]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio],.shiny-input-container .checkbox input:checked[type=radio],.shiny-input-container .checkbox-inline input:checked[type=radio],.shiny-input-container .radio input:checked[type=radio],.shiny-input-container .radio-inline input:checked[type=radio]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23000'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate,.shiny-input-container .checkbox input[type=checkbox]:indeterminate,.shiny-input-container .checkbox-inline input[type=checkbox]:indeterminate,.shiny-input-container .radio input[type=checkbox]:indeterminate,.shiny-input-container .radio-inline input[type=checkbox]:indeterminate{background-color:#95b540;border-color:#95b540;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23cadaa0'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23000'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(149,181,64,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(149,181,64,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#95b540;border:0;border-radius:1rem;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:#dfe9c6}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#95b540;border:0;border-radius:1rem;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:#dfe9c6}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:rgba(28,40,51,.75)}.form-range:disabled::-moz-range-thumb{background-color:rgba(28,40,51,.75)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(1px * 2));min-height:calc(3.5rem + calc(1px * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:#fff;border-radius:.25rem}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:1px 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:#e9ecef}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#1c2833;text-align:center;white-space:nowrap;background-color:#f8f9fa;border:1px solid #dee2e6;border-radius:.25rem}.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:.5rem}.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:.2em}.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(1px*-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:#198754}.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:#198754;border-radius:.25rem}.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:#198754;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:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.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:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.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:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.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:#dc3545}.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:#dc3545;border-radius:.25rem}.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:#dc3545;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:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.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:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.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:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: 0.75rem;--bs-btn-padding-y: 0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: #1c2833;--bs-btn-bg: transparent;--bs-btn-border-width: 1px;--bs-btn-border-color: transparent;--bs-btn-border-radius: 0.25rem;--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity: 0.65;--bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #000;--bs-btn-bg: #BDD775;--bs-btn-border-color: #BDD775;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #c7dd8a;--bs-btn-hover-border-color: #c4db83;--bs-btn-focus-shadow-rgb: 161, 183, 99;--bs-btn-active-color: #000;--bs-btn-active-bg: #cadf91;--bs-btn-active-border-color: #c4db83;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #BDD775;--bs-btn-disabled-border-color: #BDD775}.btn-primary{--bs-btn-color: #000;--bs-btn-bg: #95b540;--bs-btn-border-color: #95b540;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #a5c05d;--bs-btn-hover-border-color: #a0bc53;--bs-btn-focus-shadow-rgb: 127, 154, 54;--bs-btn-active-color: #000;--bs-btn-active-bg: #aac466;--bs-btn-active-border-color: #a0bc53;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #95b540;--bs-btn-disabled-border-color: #95b540}.btn-secondary{--bs-btn-color: #000;--bs-btn-bg: #BDD775;--bs-btn-border-color: #BDD775;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #c7dd8a;--bs-btn-hover-border-color: #c4db83;--bs-btn-focus-shadow-rgb: 161, 183, 99;--bs-btn-active-color: #000;--bs-btn-active-bg: #cadf91;--bs-btn-active-border-color: #c4db83;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #BDD775;--bs-btn-disabled-border-color: #BDD775}.btn-success{--bs-btn-color: #ffffff;--bs-btn-bg: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #157347;--bs-btn-hover-border-color: #146c43;--bs-btn-focus-shadow-rgb: 60, 153, 110;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #146c43;--bs-btn-active-border-color: #13653f;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffffff;--bs-btn-disabled-bg: #198754;--bs-btn-disabled-border-color: #198754}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #31d2f2;--bs-btn-hover-border-color: #25cff2;--bs-btn-focus-shadow-rgb: 11, 172, 204;--bs-btn-active-color: #000;--bs-btn-active-bg: #3dd5f3;--bs-btn-active-border-color: #25cff2;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #0dcaf0;--bs-btn-disabled-border-color: #0dcaf0}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffca2c;--bs-btn-hover-border-color: #ffc720;--bs-btn-focus-shadow-rgb: 217, 164, 6;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffcd39;--bs-btn-active-border-color: #ffc720;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ffc107;--bs-btn-disabled-border-color: #ffc107}.btn-danger{--bs-btn-color: #ffffff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #bb2d3b;--bs-btn-hover-border-color: #b02a37;--bs-btn-focus-shadow-rgb: 225, 83, 97;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #b02a37;--bs-btn-active-border-color: #a52834;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffffff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #ffffff;--bs-btn-bg: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #424649;--bs-btn-hover-border-color: #373b3e;--bs-btn-focus-shadow-rgb: 66, 70, 73;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #4d5154;--bs-btn-active-border-color: #373b3e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffffff;--bs-btn-disabled-bg: #212529;--bs-btn-disabled-border-color: #212529}.btn-outline-default{--bs-btn-color: #BDD775;--bs-btn-border-color: #BDD775;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #BDD775;--bs-btn-hover-border-color: #BDD775;--bs-btn-focus-shadow-rgb: 189, 215, 117;--bs-btn-active-color: #000;--bs-btn-active-bg: #BDD775;--bs-btn-active-border-color: #BDD775;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #BDD775;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #BDD775;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #95b540;--bs-btn-border-color: #95b540;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #95b540;--bs-btn-hover-border-color: #95b540;--bs-btn-focus-shadow-rgb: 149, 181, 64;--bs-btn-active-color: #000;--bs-btn-active-bg: #95b540;--bs-btn-active-border-color: #95b540;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #95b540;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #95b540;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #BDD775;--bs-btn-border-color: #BDD775;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #BDD775;--bs-btn-hover-border-color: #BDD775;--bs-btn-focus-shadow-rgb: 189, 215, 117;--bs-btn-active-color: #000;--bs-btn-active-bg: #BDD775;--bs-btn-active-border-color: #BDD775;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #BDD775;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #BDD775;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #198754;--bs-btn-hover-border-color: #198754;--bs-btn-focus-shadow-rgb: 25, 135, 84;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #198754;--bs-btn-active-border-color: #198754;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #198754;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #198754;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #0dcaf0;--bs-btn-hover-border-color: #0dcaf0;--bs-btn-focus-shadow-rgb: 13, 202, 240;--bs-btn-active-color: #000;--bs-btn-active-bg: #0dcaf0;--bs-btn-active-border-color: #0dcaf0;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #0dcaf0;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0dcaf0;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffc107;--bs-btn-hover-border-color: #ffc107;--bs-btn-focus-shadow-rgb: 255, 193, 7;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffc107;--bs-btn-active-border-color: #ffc107;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffc107;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ffc107;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220, 53, 69;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #212529;--bs-btn-hover-border-color: #212529;--bs-btn-focus-shadow-rgb: 33, 37, 41;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #212529;--bs-btn-active-border-color: #212529;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #212529;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #212529;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: #95b540;--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: #779133;--bs-btn-hover-border-color: transparent;--bs-btn-active-color: #779133;--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 127, 154, 54;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: 0.5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: 0.5rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: 0.25rem;--bs-btn-padding-x: 0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius: 0.2em}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .2s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: 0.5rem;--bs-dropdown-spacer: 0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: #1c2833;--bs-dropdown-bg: #ffffff;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-border-radius: 0.25rem;--bs-dropdown-border-width: 1px;--bs-dropdown-inner-border-radius: calc(0.25rem - 1px);--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-divider-margin-y: 0.5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-dropdown-link-color: #1c2833;--bs-dropdown-link-hover-color: #1c2833;--bs-dropdown-link-hover-bg: #f8f9fa;--bs-dropdown-link-active-color: #000;--bs-dropdown-link-active-bg: #95b540;--bs-dropdown-link-disabled-color: rgba(28, 40, 51, 0.5);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: 0.25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0;border-radius:var(--bs-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #ffffff;--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color: #000;--bs-dropdown-link-active-bg: #95b540;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:.25rem}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(1px*-1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(1px*-1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: #95b540;--bs-nav-link-hover-color: #779133;--bs-nav-link-disabled-color: rgba(28, 40, 51, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(149,181,64,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: 1px;--bs-nav-tabs-border-color: #dee2e6;--bs-nav-tabs-border-radius: 0.25rem;--bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--bs-nav-tabs-link-active-color: #000;--bs-nav-tabs-link-active-bg: #ffffff;--bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #ffffff;border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid rgba(0,0,0,0);border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: 0.25rem;--bs-nav-pills-link-active-color: #000;--bs-nav-pills-link-active-bg: #95b540}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: 0.125rem;--bs-nav-underline-link-active-color: #000;gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid rgba(0,0,0,0)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 0.5rem;--bs-navbar-color: #4d5045;--bs-navbar-hover-color: rgba(70, 85, 30, 0.8);--bs-navbar-disabled-color: rgba(77, 80, 69, 0.75);--bs-navbar-active-color: #46551e;--bs-navbar-brand-padding-y: 0.3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: #4d5045;--bs-navbar-brand-hover-color: #46551e;--bs-navbar-nav-link-padding-x: 0.5rem;--bs-navbar-toggler-padding-y: 0.25;--bs-navbar-toggler-padding-x: 0;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%234d5045' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(77, 80, 69, 0);--bs-navbar-toggler-border-radius: 0.25rem;--bs-navbar-toggler-focus-width: 0.25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:rgba(0,0,0,0);border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color: #4d5045;--bs-navbar-hover-color: rgba(70, 85, 30, 0.8);--bs-navbar-disabled-color: rgba(77, 80, 69, 0.75);--bs-navbar-active-color: #46551e;--bs-navbar-brand-color: #4d5045;--bs-navbar-brand-hover-color: #46551e;--bs-navbar-toggler-border-color: rgba(77, 80, 69, 0);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%234d5045' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%234d5045' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: 0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: 1px;--bs-card-border-color: rgba(0, 0, 0, 0.175);--bs-card-border-radius: 0.25rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(0.25rem - 1px);--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(52, 58, 64, 0.25);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: #ffffff;--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-0.5*var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-bottom:calc(-1*var(--bs-card-cap-padding-y));margin-left:calc(-0.5*var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-left:calc(-0.5*var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media(min-width: 576px){.card-group{display:flex;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: #1c2833;--bs-accordion-bg: #ffffff;--bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;--bs-accordion-border-color: #dee2e6;--bs-accordion-border-width: 1px;--bs-accordion-border-radius: 0.25rem;--bs-accordion-inner-border-radius: calc(0.25rem - 1px);--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: #1c2833;--bs-accordion-btn-bg: #ffffff;--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%231c2833'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%233c481a'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: #cadaa0;--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(149, 181, 64, 0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: #3c481a;--bs-accordion-active-bg: #eaf0d9}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1*var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;-webkit-flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23bfd38c'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23bfd38c'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: rgba(28, 40, 51, 0.75);--bs-breadcrumb-item-padding-x: 0.5rem;--bs-breadcrumb-item-active-color: rgba(28, 40, 51, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, ">") /* rtl: var(--bs-breadcrumb-divider, ">") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: 0.75rem;--bs-pagination-padding-y: 0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: #95b540;--bs-pagination-bg: #ffffff;--bs-pagination-border-width: 1px;--bs-pagination-border-color: #dee2e6;--bs-pagination-border-radius: 0.25rem;--bs-pagination-hover-color: #779133;--bs-pagination-hover-bg: #f8f9fa;--bs-pagination-hover-border-color: #dee2e6;--bs-pagination-focus-color: #779133;--bs-pagination-focus-bg: #e9ecef;--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(149, 181, 64, 0.25);--bs-pagination-active-color: #000;--bs-pagination-active-bg: #95b540;--bs-pagination-active-border-color: #95b540;--bs-pagination-disabled-color: rgba(28, 40, 51, 0.75);--bs-pagination-disabled-bg: #e9ecef;--bs-pagination-disabled-border-color: #dee2e6;display:flex;display:-webkit-flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(1px*-1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: 0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: 0.5rem}.pagination-sm{--bs-pagination-padding-x: 0.5rem;--bs-pagination-padding-y: 0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius: 0.2em}.badge{--bs-badge-padding-x: 0.65em;--bs-badge-padding-y: 0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight: 700;--bs-badge-color: #ffffff;--bs-badge-border-radius: 0.25rem;display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: 1px solid var(--bs-alert-border-color);--bs-alert-border-radius: 0.25rem;--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-default{--bs-alert-color: var(--bs-default-text-emphasis);--bs-alert-bg: var(--bs-default-bg-subtle);--bs-alert-border-color: var(--bs-default-border-subtle);--bs-alert-link-color: var(--bs-default-text-emphasis)}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: #e9ecef;--bs-progress-border-radius: 0.25rem;--bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-progress-bar-color: #ffffff;--bs-progress-bar-bg: #95b540;--bs-progress-bar-transition: width 0.6s ease;display:flex;display:-webkit-flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: #1c2833;--bs-list-group-bg: #ffffff;--bs-list-group-border-color: #dee2e6;--bs-list-group-border-width: 1px;--bs-list-group-border-radius: 0.25rem;--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: 0.5rem;--bs-list-group-action-color: rgba(28, 40, 51, 0.75);--bs-list-group-action-hover-color: #000;--bs-list-group-action-hover-bg: #f8f9fa;--bs-list-group-action-active-color: #1c2833;--bs-list-group-action-active-bg: #e9ecef;--bs-list-group-disabled-color: rgba(28, 40, 51, 0.75);--bs-list-group-disabled-bg: #ffffff;--bs-list-group-active-color: #000;--bs-list-group-active-bg: #95b540;--bs-list-group-active-border-color: #95b540;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1*var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-default{--bs-list-group-color: var(--bs-default-text-emphasis);--bs-list-group-bg: var(--bs-default-bg-subtle);--bs-list-group-border-color: var(--bs-default-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-default-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-default-border-subtle);--bs-list-group-active-color: var(--bs-default-bg-subtle);--bs-list-group-active-bg: var(--bs-default-text-emphasis);--bs-list-group-active-border-color: var(--bs-default-text-emphasis)}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity: 0.5;--bs-btn-close-hover-opacity: 0.75;--bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(149, 181, 64, 0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: 0.25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:rgba(0,0,0,0) var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: 0.75rem;--bs-toast-padding-y: 0.5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(255, 255, 255, 0.85);--bs-toast-border-width: 1px;--bs-toast-border-color: rgba(0, 0, 0, 0.175);--bs-toast-border-radius: 0.25rem;--bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-toast-header-color: rgba(28, 40, 51, 0.75);--bs-toast-header-bg: rgba(255, 255, 255, 0.85);--bs-toast-header-border-color: rgba(0, 0, 0, 0.175);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-0.5*var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: 0.5rem;--bs-modal-color: ;--bs-modal-bg: #ffffff;--bs-modal-border-color: rgba(0, 0, 0, 0.175);--bs-modal-border-width: 1px;--bs-modal-border-radius: 0.5rem;--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-modal-inner-border-radius: calc(0.5rem - 1px);--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: #dee2e6;--bs-modal-header-border-width: 1px;--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: 0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: #dee2e6;--bs-modal-footer-border-width: 1px;position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: 0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5);margin:calc(-0.5*var(--bs-modal-header-padding-y)) calc(-0.5*var(--bs-modal-header-padding-x)) calc(-0.5*var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media(min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media(min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media(min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: 0.5rem;--bs-tooltip-padding-y: 0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color: #ffffff;--bs-tooltip-bg: #000;--bs-tooltip-border-radius: 0.25rem;--bs-tooltip-opacity: 0.9;--bs-tooltip-arrow-width: 0.8rem;--bs-tooltip-arrow-height: 0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:"Nunito","Source Sans Pro","Helvetica","sans-serif";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:rgba(0,0,0,0);border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:0.875rem;--bs-popover-bg: #ffffff;--bs-popover-border-width: 1px;--bs-popover-border-color: rgba(0, 0, 0, 0.175);--bs-popover-border-radius: 0.5rem;--bs-popover-inner-border-radius: calc(0.5rem - 1px);--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: 0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: #e9ecef;--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: #1c2833;--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: 0.5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:"Nunito","Source Sans Pro","Helvetica","sans-serif";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:rgba(0,0,0,0);border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-0.5*var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ffffff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ffffff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-border-width: 0.25em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:rgba(0,0,0,0)}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: 0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: #1c2833;--bs-offcanvas-bg: #ffffff;--bs-offcanvas-border-width: 1px;--bs-offcanvas-border-color: rgba(0, 0, 0, 0.175);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-offcanvas-transition: transform 0.3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media(max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 575.98px)and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media(max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media(min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 767.98px)and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media(max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media(min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 991.98px)and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media(max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media(min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1199.98px)and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media(max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media(min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1399.98px)and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media(max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media(min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media(prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5);margin-top:calc(-0.5*var(--bs-offcanvas-padding-y));margin-right:calc(-0.5*var(--bs-offcanvas-padding-x));margin-bottom:calc(-0.5*var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#000 !important;background-color:RGBA(var(--bs-default-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-primary{color:#000 !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#000 !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-default{color:RGBA(var(--bs-default-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-default-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-default:hover,.link-default:focus{color:RGBA(202, 223, 145, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(202, 223, 145, var(--bs-link-underline-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(170, 196, 102, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(170, 196, 102, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(202, 223, 145, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(202, 223, 145, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;-webkit-flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;-webkit-align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-default{--bs-focus-ring-color: rgba(var(--bs-default-rgb), var(--bs-focus-ring-opacity))}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: 0.1}.border-opacity-25{--bs-border-opacity: 0.25}.border-opacity-50{--bs-border-opacity: 0.5}.border-opacity-75{--bs-border-opacity: 0.75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.3052rem + 0.6624vw) !important}.fs-2{font-size:calc(1.2852rem + 0.4224vw) !important}.fs-3{font-size:calc(1.2674rem + 0.2088vw) !important}.fs-4{font-size:calc(1.2516rem + 0.0192vw) !important}.fs-5{font-size:1.125rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: 0.1}.link-opacity-10-hover:hover{--bs-link-opacity: 0.1}.link-opacity-25{--bs-link-opacity: 0.25}.link-opacity-25-hover:hover{--bs-link-opacity: 0.25}.link-opacity-50{--bs-link-opacity: 0.5}.link-opacity-50-hover:hover{--bs-link-opacity: 0.5}.link-opacity-75{--bs-link-opacity: 0.75}.link-opacity-75-hover:hover{--bs-link-opacity: 0.75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-default{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-default-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: 0.1}.link-underline-opacity-25{--bs-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: 0.25}.link-underline-opacity-50{--bs-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: 0.5}.link-underline-opacity-75{--bs-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: 0.75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}.bg-default{color:#000}.bg-primary{color:#000}.bg-secondary{color:#000}.bg-success{color:#fff}.bg-info{color:#000}.bg-warning{color:#000}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@media(min-width: 1200px){.fs-1{font-size:1.802rem !important}.fs-2{font-size:1.602rem !important}.fs-3{font-size:1.424rem !important}.fs-4{font-size:1.266rem !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}}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.bg-blue{--bslib-color-bg: #0d6efd;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #0d6efd;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #6f42c1;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #6f42c1;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #d63384;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #d63384;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #dc3545;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #dc3545;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #fd7e14;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #fd7e14;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ffc107;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ffc107;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #198754;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #198754;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #0dcaf0;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #BDD775}.bg-default{--bslib-color-bg: #BDD775;--bslib-color-fg: #000}.text-primary{--bslib-color-fg: #95b540}.bg-primary{--bslib-color-bg: #95b540;--bslib-color-fg: #000}.text-secondary{--bslib-color-fg: #BDD775}.bg-secondary{--bslib-color-bg: #BDD775;--bslib-color-fg: #000}.text-success{--bslib-color-fg: #198754}.bg-success{--bslib-color-bg: #198754;--bslib-color-fg: #ffffff}.text-info{--bslib-color-fg: #0dcaf0}.bg-info{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000}.text-warning{--bslib-color-fg: #ffc107}.bg-warning{--bslib-color-bg: #ffc107;--bslib-color-fg: #000}.text-danger{--bslib-color-fg: #dc3545}.bg-danger{--bslib-color-bg: #dc3545;--bslib-color-fg: #ffffff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #212529}.bg-dark{--bslib-color-bg: #212529;--bslib-color-fg: #ffffff}.bg-gradient-blue-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #3148f9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3148f9;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #345ce5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #345ce5;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #5d56cd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d56cd;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #6057b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6057b3;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #6d74a0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6d74a0;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6e8f9b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6e8f9b;color:#000}.bg-gradient-blue-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #1278b9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1278b9;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #000;--bslib-color-bg: #1592d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1592d4;color:#000}.bg-gradient-blue-cyan{--bslib-color-fg: #000;--bslib-color-bg: #0d93f8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #0d93f8;color:#000}.bg-gradient-indigo-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #4236f6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4236f6;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #6a24de;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #6a24de;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #931ec6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #931ec6;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #951fad;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #951fad;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #a23c99;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a23c99;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #ffffff;--bslib-color-bg: #a35794;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a35794;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #4740b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4740b3;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #ffffff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #ffffff;--bslib-color-bg: #425af1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #425af1;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #4854d9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4854d9;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #6b2ed5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #6b2ed5;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #983ca9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #983ca9;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #9b3d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #9b3d8f;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #a85a7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a85a7c;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #000;--bslib-color-bg: #a97577;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a97577;color:#000}.bg-gradient-purple-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #4d5e95;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4d5e95;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #ffffff;--bslib-color-bg: #4f78b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4f78b0;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #000;--bslib-color-bg: #4878d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #4878d4;color:#000}.bg-gradient-pink-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #864bb4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #864bb4;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #a925b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #a925b0;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #ad399c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #ad399c;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #d8346b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #d8346b;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #000;--bslib-color-bg: #e65157;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e65157;color:#000}.bg-gradient-pink-yellow{--bslib-color-fg: #000;--bslib-color-bg: #e66c52;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #e66c52;color:#000}.bg-gradient-pink-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #8a5571;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8a5571;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #000;--bslib-color-bg: #8d6f8c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #8d6f8c;color:#000}.bg-gradient-pink-cyan{--bslib-color-fg: #000;--bslib-color-bg: #866faf;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #866faf;color:#000}.bg-gradient-red-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #894c8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #894c8f;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #ad268a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #ad268a;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #b03a77;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #b03a77;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #da345e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #da345e;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #000;--bslib-color-bg: #e95231;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e95231;color:#000}.bg-gradient-red-yellow{--bslib-color-fg: #000;--bslib-color-bg: #ea6d2c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #ea6d2c;color:#000}.bg-gradient-red-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #8e564b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8e564b;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #000;--bslib-color-bg: #917066;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #917066;color:#000}.bg-gradient-red-cyan{--bslib-color-fg: #000;--bslib-color-bg: #897189;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #897189;color:#000}.bg-gradient-orange-blue{--bslib-color-fg: #000;--bslib-color-bg: #9d7871;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9d7871;color:#000}.bg-gradient-orange-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c1526d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c1526d;color:#000}.bg-gradient-orange-purple{--bslib-color-fg: #000;--bslib-color-bg: #c46659;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c46659;color:#000}.bg-gradient-orange-pink{--bslib-color-fg: #000;--bslib-color-bg: #ed6041;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ed6041;color:#000}.bg-gradient-orange-red{--bslib-color-fg: #000;--bslib-color-bg: #f06128;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f06128;color:#000}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: #fe990f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #fe990f;color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: #a2822e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a2822e;color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: #a59c48;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a59c48;color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9d9c6c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9d9c6c;color:#000}.bg-gradient-yellow-blue{--bslib-color-fg: #000;--bslib-color-bg: #9ea069;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9ea069;color:#000}.bg-gradient-yellow-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c27a65;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c27a65;color:#000}.bg-gradient-yellow-purple{--bslib-color-fg: #000;--bslib-color-bg: #c58e51;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c58e51;color:#000}.bg-gradient-yellow-pink{--bslib-color-fg: #000;--bslib-color-bg: #ef8839;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ef8839;color:#000}.bg-gradient-yellow-red{--bslib-color-fg: #000;--bslib-color-bg: #f18920;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f18920;color:#000}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: #fea60c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #fea60c;color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #000;--bslib-color-bg: #a3aa26;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a3aa26;color:#000}.bg-gradient-yellow-teal{--bslib-color-fg: #000;--bslib-color-bg: #a6c441;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6c441;color:#000}.bg-gradient-yellow-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9ec564;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9ec564;color:#000}.bg-gradient-green-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #147d98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #147d98;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #385793;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #385793;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #3b6b80;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3b6b80;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #656567;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #656567;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #67664e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #67664e;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: #74833a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #74833a;color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #000;--bslib-color-bg: #759e35;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #759e35;color:#000}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: #1ca16f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1ca16f;color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #000;--bslib-color-bg: #14a292;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #14a292;color:#000}.bg-gradient-teal-blue{--bslib-color-fg: #000;--bslib-color-bg: #18a5c0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #18a5c0;color:#000}.bg-gradient-teal-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#000}.bg-gradient-teal-purple{--bslib-color-fg: #000;--bslib-color-bg: #4093a8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #4093a8;color:#000}.bg-gradient-teal-pink{--bslib-color-fg: #000;--bslib-color-bg: #698d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #698d8f;color:#000}.bg-gradient-teal-red{--bslib-color-fg: #000;--bslib-color-bg: #6b8e76;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6b8e76;color:#000}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: #78ab63;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #78ab63;color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #000;--bslib-color-bg: #79c65d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #79c65d;color:#000}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: #1daf7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1daf7c;color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #000;--bslib-color-bg: #18c9bb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #18c9bb;color:#000}.bg-gradient-cyan-blue{--bslib-color-fg: #000;--bslib-color-bg: #0da5f5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #0da5f5;color:#000}.bg-gradient-cyan-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3180f1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3180f1;color:#000}.bg-gradient-cyan-purple{--bslib-color-fg: #000;--bslib-color-bg: #3494dd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3494dd;color:#000}.bg-gradient-cyan-pink{--bslib-color-fg: #000;--bslib-color-bg: #5d8ec5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d8ec5;color:#000}.bg-gradient-cyan-red{--bslib-color-fg: #000;--bslib-color-bg: #608eac;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #608eac;color:#000}.bg-gradient-cyan-orange{--bslib-color-fg: #000;--bslib-color-bg: #6dac98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6dac98;color:#000}.bg-gradient-cyan-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6ec693;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6ec693;color:#000}.bg-gradient-cyan-green{--bslib-color-fg: #000;--bslib-color-bg: #12afb2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #12afb2;color:#000}.bg-gradient-cyan-teal{--bslib-color-fg: #000;--bslib-color-bg: #15cacc;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #15cacc;color:#000}.bg-blue{--bslib-color-bg: #0d6efd;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #0d6efd;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #6f42c1;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #6f42c1;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #d63384;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #d63384;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #dc3545;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #dc3545;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #fd7e14;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #fd7e14;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ffc107;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ffc107;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #198754;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #198754;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #0dcaf0;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #BDD775}.bg-default{--bslib-color-bg: #BDD775;--bslib-color-fg: #000}.text-primary{--bslib-color-fg: #95b540}.bg-primary{--bslib-color-bg: #95b540;--bslib-color-fg: #000}.text-secondary{--bslib-color-fg: #BDD775}.bg-secondary{--bslib-color-bg: #BDD775;--bslib-color-fg: #000}.text-success{--bslib-color-fg: #198754}.bg-success{--bslib-color-bg: #198754;--bslib-color-fg: #ffffff}.text-info{--bslib-color-fg: #0dcaf0}.bg-info{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000}.text-warning{--bslib-color-fg: #ffc107}.bg-warning{--bslib-color-bg: #ffc107;--bslib-color-fg: #000}.text-danger{--bslib-color-fg: #dc3545}.bg-danger{--bslib-color-bg: #dc3545;--bslib-color-fg: #ffffff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #212529}.bg-dark{--bslib-color-bg: #212529;--bslib-color-fg: #ffffff}.bg-gradient-blue-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #3148f9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3148f9;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #345ce5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #345ce5;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #5d56cd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d56cd;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #6057b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6057b3;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #6d74a0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6d74a0;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6e8f9b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6e8f9b;color:#000}.bg-gradient-blue-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #1278b9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1278b9;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #000;--bslib-color-bg: #1592d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1592d4;color:#000}.bg-gradient-blue-cyan{--bslib-color-fg: #000;--bslib-color-bg: #0d93f8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #0d93f8;color:#000}.bg-gradient-indigo-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #4236f6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4236f6;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #6a24de;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #6a24de;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #931ec6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #931ec6;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #951fad;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #951fad;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #a23c99;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a23c99;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #ffffff;--bslib-color-bg: #a35794;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a35794;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #4740b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4740b3;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #ffffff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #ffffff;--bslib-color-bg: #425af1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #425af1;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #4854d9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4854d9;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #6b2ed5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #6b2ed5;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #983ca9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #983ca9;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #9b3d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #9b3d8f;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #a85a7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a85a7c;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #000;--bslib-color-bg: #a97577;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a97577;color:#000}.bg-gradient-purple-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #4d5e95;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4d5e95;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #ffffff;--bslib-color-bg: #4f78b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4f78b0;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #000;--bslib-color-bg: #4878d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #4878d4;color:#000}.bg-gradient-pink-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #864bb4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #864bb4;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #a925b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #a925b0;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #ad399c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #ad399c;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #d8346b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #d8346b;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #000;--bslib-color-bg: #e65157;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e65157;color:#000}.bg-gradient-pink-yellow{--bslib-color-fg: #000;--bslib-color-bg: #e66c52;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #e66c52;color:#000}.bg-gradient-pink-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #8a5571;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8a5571;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #000;--bslib-color-bg: #8d6f8c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #8d6f8c;color:#000}.bg-gradient-pink-cyan{--bslib-color-fg: #000;--bslib-color-bg: #866faf;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #866faf;color:#000}.bg-gradient-red-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #894c8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #894c8f;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #ad268a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #ad268a;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #b03a77;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #b03a77;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #da345e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #da345e;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #000;--bslib-color-bg: #e95231;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e95231;color:#000}.bg-gradient-red-yellow{--bslib-color-fg: #000;--bslib-color-bg: #ea6d2c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #ea6d2c;color:#000}.bg-gradient-red-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #8e564b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8e564b;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #000;--bslib-color-bg: #917066;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #917066;color:#000}.bg-gradient-red-cyan{--bslib-color-fg: #000;--bslib-color-bg: #897189;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #897189;color:#000}.bg-gradient-orange-blue{--bslib-color-fg: #000;--bslib-color-bg: #9d7871;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9d7871;color:#000}.bg-gradient-orange-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c1526d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c1526d;color:#000}.bg-gradient-orange-purple{--bslib-color-fg: #000;--bslib-color-bg: #c46659;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c46659;color:#000}.bg-gradient-orange-pink{--bslib-color-fg: #000;--bslib-color-bg: #ed6041;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ed6041;color:#000}.bg-gradient-orange-red{--bslib-color-fg: #000;--bslib-color-bg: #f06128;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f06128;color:#000}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: #fe990f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #fe990f;color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: #a2822e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a2822e;color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: #a59c48;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a59c48;color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9d9c6c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9d9c6c;color:#000}.bg-gradient-yellow-blue{--bslib-color-fg: #000;--bslib-color-bg: #9ea069;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9ea069;color:#000}.bg-gradient-yellow-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c27a65;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c27a65;color:#000}.bg-gradient-yellow-purple{--bslib-color-fg: #000;--bslib-color-bg: #c58e51;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c58e51;color:#000}.bg-gradient-yellow-pink{--bslib-color-fg: #000;--bslib-color-bg: #ef8839;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ef8839;color:#000}.bg-gradient-yellow-red{--bslib-color-fg: #000;--bslib-color-bg: #f18920;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f18920;color:#000}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: #fea60c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #fea60c;color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #000;--bslib-color-bg: #a3aa26;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a3aa26;color:#000}.bg-gradient-yellow-teal{--bslib-color-fg: #000;--bslib-color-bg: #a6c441;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6c441;color:#000}.bg-gradient-yellow-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9ec564;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9ec564;color:#000}.bg-gradient-green-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #147d98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #147d98;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #385793;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #385793;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #3b6b80;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3b6b80;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #656567;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #656567;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #67664e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #67664e;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: #74833a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #74833a;color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #000;--bslib-color-bg: #759e35;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #759e35;color:#000}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: #1ca16f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1ca16f;color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #000;--bslib-color-bg: #14a292;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #14a292;color:#000}.bg-gradient-teal-blue{--bslib-color-fg: #000;--bslib-color-bg: #18a5c0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #18a5c0;color:#000}.bg-gradient-teal-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#000}.bg-gradient-teal-purple{--bslib-color-fg: #000;--bslib-color-bg: #4093a8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #4093a8;color:#000}.bg-gradient-teal-pink{--bslib-color-fg: #000;--bslib-color-bg: #698d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #698d8f;color:#000}.bg-gradient-teal-red{--bslib-color-fg: #000;--bslib-color-bg: #6b8e76;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6b8e76;color:#000}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: #78ab63;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #78ab63;color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #000;--bslib-color-bg: #79c65d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #79c65d;color:#000}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: #1daf7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1daf7c;color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #000;--bslib-color-bg: #18c9bb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #18c9bb;color:#000}.bg-gradient-cyan-blue{--bslib-color-fg: #000;--bslib-color-bg: #0da5f5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #0da5f5;color:#000}.bg-gradient-cyan-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3180f1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3180f1;color:#000}.bg-gradient-cyan-purple{--bslib-color-fg: #000;--bslib-color-bg: #3494dd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3494dd;color:#000}.bg-gradient-cyan-pink{--bslib-color-fg: #000;--bslib-color-bg: #5d8ec5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d8ec5;color:#000}.bg-gradient-cyan-red{--bslib-color-fg: #000;--bslib-color-bg: #608eac;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #608eac;color:#000}.bg-gradient-cyan-orange{--bslib-color-fg: #000;--bslib-color-bg: #6dac98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6dac98;color:#000}.bg-gradient-cyan-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6ec693;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6ec693;color:#000}.bg-gradient-cyan-green{--bslib-color-fg: #000;--bslib-color-bg: #12afb2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #12afb2;color:#000}.bg-gradient-cyan-teal{--bslib-color-fg: #000;--bslib-color-bg: #15cacc;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #15cacc;color:#000}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}html{height:100%}.bslib-page-fill{width:100%;height:100%;margin:0;padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}@media(max-width: 575.98px){.bslib-page-fill{height:var(--bslib-page-fill-mobile-height, auto)}}.bslib-grid{display:grid !important;gap:var(--bslib-spacer, 1rem);height:var(--bslib-grid-height)}.bslib-grid.grid{grid-template-columns:repeat(var(--bs-columns, 12), minmax(0, 1fr));grid-template-rows:unset;grid-auto-rows:var(--bslib-grid--row-heights);--bslib-grid--row-heights--xs: unset;--bslib-grid--row-heights--sm: unset;--bslib-grid--row-heights--md: unset;--bslib-grid--row-heights--lg: unset;--bslib-grid--row-heights--xl: unset;--bslib-grid--row-heights--xxl: unset}.bslib-grid.grid.bslib-grid--row-heights--xs{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xs)}@media(min-width: 576px){.bslib-grid.grid.bslib-grid--row-heights--sm{--bslib-grid--row-heights: var(--bslib-grid--row-heights--sm)}}@media(min-width: 768px){.bslib-grid.grid.bslib-grid--row-heights--md{--bslib-grid--row-heights: var(--bslib-grid--row-heights--md)}}@media(min-width: 992px){.bslib-grid.grid.bslib-grid--row-heights--lg{--bslib-grid--row-heights: var(--bslib-grid--row-heights--lg)}}@media(min-width: 1200px){.bslib-grid.grid.bslib-grid--row-heights--xl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xl)}}@media(min-width: 1400px){.bslib-grid.grid.bslib-grid--row-heights--xxl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xxl)}}.bslib-grid>*>.shiny-input-container{width:100%}.bslib-grid-item{grid-column:auto/span 1}@media(max-width: 767.98px){.bslib-grid-item{grid-column:1/-1}}@media(max-width: 575.98px){.bslib-grid{grid-template-columns:1fr !important;height:var(--bslib-grid-height-mobile)}.bslib-grid.grid{height:unset !important;grid-auto-rows:var(--bslib-grid--row-heights--xs, auto)}}.navbar+.container-fluid:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-sm:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-md:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-lg:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xl:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xxl:has(>.tab-content>.tab-pane.active.html-fill-container){padding-left:0;padding-right:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container{padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child){padding:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]){border-left:none;border-right:none;border-bottom:none}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]){border-radius:0}.navbar+div>.bslib-sidebar-layout{border-top:var(--bslib-sidebar-border)}.bslib-card{overflow:auto}.bslib-card .card-body+.card-body{padding-top:0}.bslib-card .card-body{overflow:auto}.bslib-card .card-body p{margin-top:0}.bslib-card .card-body p:last-child{margin-bottom:0}.bslib-card .card-body{max-height:var(--bslib-card-body-max-height, none)}.bslib-card[data-full-screen=true]>.card-body{max-height:var(--bslib-card-body-max-height-full-screen, none)}.bslib-card .card-header .form-group{margin-bottom:0}.bslib-card .card-header .selectize-control{margin-bottom:0}.bslib-card .card-header .selectize-control .item{margin-right:1.15rem}.bslib-card .card-footer{margin-top:auto}.bslib-card .bslib-navs-card-title{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.bslib-card .bslib-navs-card-title .nav{margin-left:auto}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border=true]){border:none}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border-radius=true]){border-top-left-radius:0;border-top-right-radius:0}[data-full-screen=true]{position:fixed;inset:3.5rem 1rem 1rem;height:auto !important;max-height:none !important;width:auto !important;z-index:1070}.bslib-full-screen-enter{display:none;position:absolute;bottom:var(--bslib-full-screen-enter-bottom, 0.2rem);right:var(--bslib-full-screen-enter-right, 0);top:var(--bslib-full-screen-enter-top);left:var(--bslib-full-screen-enter-left);color:var(--bslib-color-fg, var(--bs-card-color));background-color:var(--bslib-color-bg, var(--bs-card-bg, var(--bs-body-bg)));border:var(--bs-card-border-width) solid var(--bslib-color-fg, var(--bs-card-border-color));box-shadow:0 2px 4px rgba(0,0,0,.15);margin:.2rem .4rem;padding:.55rem !important;font-size:.8rem;cursor:pointer;opacity:.7;z-index:1070}.bslib-full-screen-enter:hover{opacity:1}.card[data-full-screen=false]:hover>*>.bslib-full-screen-enter{display:block}.bslib-has-full-screen .card:hover>*>.bslib-full-screen-enter{display:none}@media(max-width: 575.98px){.bslib-full-screen-enter{display:none !important}}.bslib-full-screen-exit{position:relative;top:1.35rem;font-size:.9rem;cursor:pointer;text-decoration:none;display:flex;float:right;margin-right:2.15rem;align-items:center;color:rgba(var(--bs-body-bg-rgb), 0.8)}.bslib-full-screen-exit:hover{color:rgba(var(--bs-body-bg-rgb), 1)}.bslib-full-screen-exit svg{margin-left:.5rem;font-size:1.5rem}#bslib-full-screen-overlay{position:fixed;inset:0;background-color:rgba(var(--bs-body-color-rgb), 0.6);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:1069;animation:bslib-full-screen-overlay-enter 400ms cubic-bezier(0.6, 0.02, 0.65, 1) forwards}@keyframes bslib-full-screen-overlay-enter{0%{opacity:0}100%{opacity:1}}.accordion .accordion-header{font-size:calc(1.2852rem + 0.4224vw);margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color);margin-bottom:0}@media(min-width: 1200px){.accordion .accordion-header{font-size:1.602rem}}.accordion .accordion-icon:not(:empty){margin-right:.75rem;display:flex}.accordion .accordion-button:not(.collapsed){box-shadow:none}.accordion .accordion-button:not(.collapsed):focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-sidebar-icon-button-size: calc(var(--bslib-sidebar-icon-size, 1rem) * 2);--bslib-sidebar-padding-icon: calc(var(--bslib-sidebar-icon-button-size, 2rem) * 1.5);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, 0.25rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media(prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.bslib-sidebar-layout[data-bslib-sidebar-border=false]{border:none}.bslib-sidebar-layout[data-bslib-sidebar-border-radius=false]{border-radius:initial}.bslib-sidebar-layout>.main,.bslib-sidebar-layout>.sidebar{grid-row:1/2;border-radius:inherit;overflow:auto}.bslib-sidebar-layout>.main{grid-column:2/3;border-top-left-radius:0;border-bottom-left-radius:0;padding:var(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1/2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout>.sidebar>.sidebar-content>:last-child:not(.sidebar-title){margin-bottom:0}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion{margin-left:calc(-1*var(--bslib-sidebar-padding));margin-right:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child){margin-bottom:1rem}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion .accordion-body{display:flex;flex-direction:column}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:first-child) .accordion-item:first-child{border-top:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child) .accordion-item:last-child{border-bottom:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content.has-accordion>.sidebar-title{border-bottom:none;padding-bottom:0}.bslib-sidebar-layout>.sidebar .shiny-input-container{width:100%}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1/2;grid-column:1/2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem)/2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:var(--bslib-sidebar-icon-button-size, 2rem);width:var(--bslib-sidebar-icon-button-size, 2rem);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover>.collapse-icon{opacity:1}.bslib-sidebar-layout .sidebar-title{font-size:1.25rem;line-height:1.25;margin-top:0;margin-bottom:1rem;padding-bottom:1rem;border-bottom:var(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px))}.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/2;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit}.bslib-sidebar-layout.sidebar-right>.sidebar{grid-column:2/3;border-right:none;border-left:var(--bslib-sidebar-vert-border);border-top-left-radius:0;border-bottom-left-radius:0}.bslib-sidebar-layout.sidebar-right>.collapse-toggle{grid-column:2/3;left:var(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-vert-border: none;grid-template-columns:0 minmax(0, 1fr)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right{grid-template-columns:minmax(0, 1fr) 0}.bslib-sidebar-layout.sidebar-collapsed:not(.transitioning)>.sidebar>*{display:none}.bslib-sidebar-layout.sidebar-collapsed>.main{border-radius:inherit}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc(var(--bslib-sidebar-overlap-counter, 0)*(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding)) + var(--bslib-sidebar-icon-size, 1rem)/2);right:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media(min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media(max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open=desktop]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout>.sidebar,.bslib-sidebar-layout.sidebar-right>.sidebar{border:none}.bslib-sidebar-layout>.main,.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/3}.bslib-sidebar-layout[data-bslib-sidebar-open=always]{display:block !important}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar{max-height:var(--bslib-sidebar-max-height-mobile);overflow-y:auto;border-top:var(--bslib-sidebar-vert-border)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed>.main{opacity:1}}:root{--bslib-value-box-shadow: none;--bslib-value-box-border-width-auto-yes: var(--bslib-value-box-border-width-baseline);--bslib-value-box-border-width-auto-no: 0;--bslib-value-box-border-width-baseline: 1px}.bslib-value-box{border-width:var(--bslib-value-box-border-width-auto-no, var(--bslib-value-box-border-width-baseline));container-name:bslib-value-box;container-type:inline-size}.bslib-value-box.card{box-shadow:var(--bslib-value-box-shadow)}.bslib-value-box.border-auto{border-width:var(--bslib-value-box-border-width-auto-yes, var(--bslib-value-box-border-width-baseline))}.bslib-value-box.default{--bslib-value-box-bg-default: var(--bs-card-bg, #ffffff);--bslib-value-box-border-color-default: var(--bs-card-border-color, rgba(0, 0, 0, 0.175));color:var(--bslib-value-box-color);background-color:var(--bslib-value-box-bg, var(--bslib-value-box-bg-default));border-color:var(--bslib-value-box-border-color, var(--bslib-value-box-border-color-default))}.bslib-value-box .value-box-grid{display:grid;grid-template-areas:"left right";align-items:center;overflow:hidden}.bslib-value-box .value-box-showcase{height:100%;max-height:var(---bslib-value-box-showcase-max-h, 100%)}.bslib-value-box .value-box-showcase,.bslib-value-box .value-box-showcase>.html-fill-item{width:100%}.bslib-value-box[data-full-screen=true] .value-box-showcase{max-height:var(---bslib-value-box-showcase-max-h-fs, 100%)}@media screen and (min-width: 575.98px){@container bslib-value-box (max-width: 300px){.bslib-value-box:not(.showcase-bottom) .value-box-grid{grid-template-columns:1fr !important;grid-template-rows:auto auto;grid-template-areas:"top" "bottom"}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-showcase{grid-area:top !important}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-area{grid-area:bottom !important;justify-content:end}}}.bslib-value-box .value-box-area{justify-content:center;padding:1.5rem 1rem;font-size:.9rem;font-weight:500}.bslib-value-box .value-box-area *{margin-bottom:0;margin-top:0}.bslib-value-box .value-box-title{font-size:1rem;margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.bslib-value-box .value-box-title:empty::after{content:" "}.bslib-value-box .value-box-value{font-size:calc(1.2852rem + 0.4224vw);margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}@media(min-width: 1200px){.bslib-value-box .value-box-value{font-size:1.602rem}}.bslib-value-box .value-box-value:empty::after{content:" "}.bslib-value-box .value-box-showcase{align-items:center;justify-content:center;margin-top:auto;margin-bottom:auto;padding:1rem}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{opacity:.85;min-width:50px;max-width:125%}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{font-size:4rem}.bslib-value-box.showcase-top-right .value-box-grid{grid-template-columns:1fr var(---bslib-value-box-showcase-w, 50%)}.bslib-value-box.showcase-top-right .value-box-grid .value-box-showcase{grid-area:right;margin-left:auto;align-self:start;align-items:end;padding-left:0;padding-bottom:0}.bslib-value-box.showcase-top-right .value-box-grid .value-box-area{grid-area:left;align-self:end}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid{grid-template-columns:auto var(---bslib-value-box-showcase-w-fs, 1fr)}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid>div{align-self:center}.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-showcase{margin-top:0}@container bslib-value-box (max-width: 300px){.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-grid .value-box-showcase{padding-left:1rem}}.bslib-value-box.showcase-left-center .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w, 30%) auto}.bslib-value-box.showcase-left-center[data-full-screen=true] .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w-fs, 1fr) auto}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-showcase{grid-area:left}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-area{grid-area:right}.bslib-value-box.showcase-bottom .value-box-grid{grid-template-columns:1fr;grid-template-rows:1fr var(---bslib-value-box-showcase-h, auto);grid-template-areas:"top" "bottom";overflow:hidden}.bslib-value-box.showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.bslib-value-box.showcase-bottom .value-box-grid .value-box-area{grid-area:top}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid{grid-template-rows:1fr var(---bslib-value-box-showcase-h-fs, 2fr)}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid .value-box-showcase{padding:1rem}[data-bs-theme=dark] .bslib-value-box{--bslib-value-box-shadow: 0 0.5rem 1rem rgb(0 0 0 / 50%)}:root{--bslib-page-sidebar-title-bg: #E9F2D1;--bslib-page-sidebar-title-color: #000}.bslib-page-title{background-color:var(--bslib-page-sidebar-title-bg);color:var(--bslib-page-sidebar-title-color);font-size:1.266rem;font-weight:300;padding:var(--bslib-spacer, 1rem);padding-left:1.5rem;margin-bottom:0;border-bottom:1px solid #dee2e6}@media(min-width: 576px){.nav:not(.nav-hidden){display:flex !important;display:-webkit-flex !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column){float:none !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.bslib-nav-spacer{margin-left:auto !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.form-inline{margin-top:auto;margin-bottom:auto}.nav:not(.nav-hidden).nav-stacked{flex-direction:column;-webkit-flex-direction:column;height:100%}.nav:not(.nav-hidden).nav-stacked>.bslib-nav-spacer{margin-top:auto !important}}.html-fill-container{display:flex;flex-direction:column;min-height:0;min-width:0}.html-fill-container>.html-fill-item{flex:1 1 auto;min-height:0;min-width:0}.html-fill-container>:not(.html-fill-item){flex:0 0 auto}.quarto-container{min-height:calc(100vh - 132px)}body.hypothesis-enabled #quarto-header{margin-right:16px}footer.footer .nav-footer,#quarto-header>nav{padding-left:1em;padding-right:1em}footer.footer div.nav-footer p:first-child{margin-top:0}footer.footer div.nav-footer p:last-child{margin-bottom:0}#quarto-content>*{padding-top:14px}#quarto-content>#quarto-sidebar-glass{padding-top:0px}@media(max-width: 991.98px){#quarto-content>*{padding-top:0}#quarto-content .subtitle{padding-top:14px}#quarto-content section:first-of-type h2:first-of-type,#quarto-content section:first-of-type .h2:first-of-type{margin-top:1rem}}.headroom-target,header.headroom{will-change:transform;transition:position 200ms linear;transition:all 200ms linear}header.headroom--pinned{transform:translateY(0%)}header.headroom--unpinned{transform:translateY(-100%)}.navbar-container{width:100%}.navbar-brand{overflow:hidden;text-overflow:ellipsis}.navbar-brand-container{max-width:calc(100% - 115px);min-width:0;display:flex;align-items:center}@media(min-width: 992px){.navbar-brand-container{margin-right:1em}}.navbar-brand.navbar-brand-logo{margin-right:4px;display:inline-flex}.navbar-toggler{flex-basis:content;flex-shrink:0}.navbar .navbar-brand-container{order:2}.navbar .navbar-toggler{order:1}.navbar .navbar-container>.navbar-nav{order:20}.navbar .navbar-container>.navbar-brand-container{margin-left:0 !important;margin-right:0 !important}.navbar .navbar-collapse{order:20}.navbar #quarto-search{order:4;margin-left:auto}.navbar .navbar-toggler{margin-right:.5em}.navbar-logo{max-height:24px;width:auto;padding-right:4px}nav .nav-item:not(.compact){padding-top:1px}nav .nav-link i,nav .dropdown-item i{padding-right:1px}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.6rem;padding-right:.6rem}nav .nav-item.compact .nav-link{padding-left:.5rem;padding-right:.5rem;font-size:1.1rem}.navbar .quarto-navbar-tools{order:3}.navbar .quarto-navbar-tools div.dropdown{display:inline-block}.navbar .quarto-navbar-tools .quarto-navigation-tool{color:#4d5045}.navbar .quarto-navbar-tools .quarto-navigation-tool:hover{color:#46551e}.navbar-nav .dropdown-menu{min-width:220px;font-size:.9rem}.navbar .navbar-nav .nav-link.dropdown-toggle::after{opacity:.75;vertical-align:.175em}.navbar ul.dropdown-menu{padding-top:0;padding-bottom:0}.navbar .dropdown-header{text-transform:uppercase;font-size:.8rem;padding:0 .5rem}.navbar .dropdown-item{padding:.4rem .5rem}.navbar .dropdown-item>i.bi{margin-left:.1rem;margin-right:.25em}.sidebar #quarto-search{margin-top:-1px}.sidebar #quarto-search svg.aa-SubmitIcon{width:16px;height:16px}.sidebar-navigation a{color:inherit}.sidebar-title{margin-top:.25rem;padding-bottom:.5rem;font-size:1.3rem;line-height:1.6rem;visibility:visible}.sidebar-title>a{font-size:inherit;text-decoration:none}.sidebar-title .sidebar-tools-main{margin-top:-6px}@media(max-width: 991.98px){#quarto-sidebar div.sidebar-header{padding-top:.2em}}.sidebar-header-stacked .sidebar-title{margin-top:.6rem}.sidebar-logo{max-width:90%;padding-bottom:.5rem}.sidebar-logo-link{text-decoration:none}.sidebar-navigation li a{text-decoration:none}.sidebar-navigation .quarto-navigation-tool{opacity:.7;font-size:.875rem}#quarto-sidebar>nav>.sidebar-tools-main{margin-left:14px}.sidebar-tools-main{display:inline-flex;margin-left:0px;order:2}.sidebar-tools-main:not(.tools-wide){vertical-align:middle}.sidebar-navigation .quarto-navigation-tool.dropdown-toggle::after{display:none}.sidebar.sidebar-navigation>*{padding-top:1em}.sidebar-item{margin-bottom:.2em;line-height:1rem;margin-top:.4rem}.sidebar-section{padding-left:.5em;padding-bottom:.2em}.sidebar-item .sidebar-item-container{display:flex;justify-content:space-between;cursor:pointer}.sidebar-item-toggle:hover{cursor:pointer}.sidebar-item .sidebar-item-toggle .bi{font-size:.7rem;text-align:center}.sidebar-item .sidebar-item-toggle .bi-chevron-right::before{transition:transform 200ms ease}.sidebar-item .sidebar-item-toggle[aria-expanded=false] .bi-chevron-right::before{transform:none}.sidebar-item .sidebar-item-toggle[aria-expanded=true] .bi-chevron-right::before{transform:rotate(90deg)}.sidebar-item-text{width:100%}.sidebar-navigation .sidebar-divider{margin-left:0;margin-right:0;margin-top:.5rem;margin-bottom:.5rem}@media(max-width: 991.98px){.quarto-secondary-nav{display:block}.quarto-secondary-nav button.quarto-search-button{padding-right:0em;padding-left:2em}.quarto-secondary-nav button.quarto-btn-toggle{margin-left:-0.75rem;margin-right:.15rem}.quarto-secondary-nav nav.quarto-title-breadcrumbs{display:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs{display:flex;align-items:center;padding-right:1em;margin-left:-0.25em}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{text-decoration:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs ol.breadcrumb{margin-bottom:0}}@media(min-width: 992px){.quarto-secondary-nav{display:none}}.quarto-title-breadcrumbs .breadcrumb{margin-bottom:.5em;font-size:.9rem}.quarto-title-breadcrumbs .breadcrumb li:last-of-type a{color:#6c757d}.quarto-secondary-nav .quarto-btn-toggle{color:#595959}.quarto-secondary-nav[aria-expanded=false] .quarto-btn-toggle .bi-chevron-right::before{transform:none}.quarto-secondary-nav[aria-expanded=true] .quarto-btn-toggle .bi-chevron-right::before{transform:rotate(90deg)}.quarto-secondary-nav .quarto-btn-toggle .bi-chevron-right::before{transition:transform 200ms ease}.quarto-secondary-nav{cursor:pointer}.no-decor{text-decoration:none}.quarto-secondary-nav-title{margin-top:.3em;color:#595959;padding-top:4px}.quarto-secondary-nav nav.quarto-page-breadcrumbs{color:#595959}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{color:#595959}.quarto-secondary-nav nav.quarto-page-breadcrumbs a:hover{color:rgba(77,94,33,.8)}.quarto-secondary-nav nav.quarto-page-breadcrumbs .breadcrumb-item::before{color:#8c8c8c}.breadcrumb-item{line-height:1.2rem}div.sidebar-item-container{color:#595959}div.sidebar-item-container:hover,div.sidebar-item-container:focus{color:rgba(77,94,33,.8)}div.sidebar-item-container.disabled{color:rgba(89,89,89,.75)}div.sidebar-item-container .active,div.sidebar-item-container .show>.nav-link,div.sidebar-item-container .sidebar-link>code{color:#4d5e21}div.sidebar.sidebar-navigation.rollup.quarto-sidebar-toggle-contents,nav.sidebar.sidebar-navigation:not(.rollup){background-color:#fff}@media(max-width: 991.98px){.sidebar-navigation .sidebar-item a,.nav-page .nav-page-text,.sidebar-navigation{font-size:1rem}.sidebar-navigation ul.sidebar-section.depth1 .sidebar-section-item{font-size:1.1rem}.sidebar-logo{display:none}.sidebar.sidebar-navigation{position:static;border-bottom:1px solid #dee2e6}.sidebar.sidebar-navigation.collapsing{position:fixed;z-index:1000}.sidebar.sidebar-navigation.show{position:fixed;z-index:1000}.sidebar.sidebar-navigation{min-height:100%}nav.quarto-secondary-nav{background-color:#fff;border-bottom:1px solid #dee2e6}.quarto-banner nav.quarto-secondary-nav{background-color:#e9f2d1;color:#4d5045;border-top:1px solid #dee2e6}.sidebar .sidebar-footer{visibility:visible;padding-top:1rem;position:inherit}.sidebar-tools-collapse{display:block}}#quarto-sidebar{transition:width .15s ease-in}#quarto-sidebar>*{padding-right:1em}@media(max-width: 991.98px){#quarto-sidebar .sidebar-menu-container{white-space:nowrap;min-width:225px}#quarto-sidebar.show{transition:width .15s ease-out}}@media(min-width: 992px){#quarto-sidebar{display:flex;flex-direction:column}.nav-page .nav-page-text,.sidebar-navigation .sidebar-section .sidebar-item{font-size:.875rem}.sidebar-navigation .sidebar-item{font-size:.925rem}.sidebar.sidebar-navigation{display:block;position:sticky}.sidebar-search{width:100%}.sidebar .sidebar-footer{visibility:visible}}@media(max-width: 991.98px){#quarto-sidebar-glass{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(255,255,255,0);transition:background-color .15s ease-in;z-index:-1}#quarto-sidebar-glass.collapsing{z-index:1000}#quarto-sidebar-glass.show{transition:background-color .15s ease-out;background-color:rgba(102,102,102,.4);z-index:1000}}.sidebar .sidebar-footer{padding:.5rem 1rem;align-self:flex-end;color:#6c757d;width:100%}.quarto-page-breadcrumbs .breadcrumb-item+.breadcrumb-item,.quarto-page-breadcrumbs .breadcrumb-item{padding-right:.33em;padding-left:0}.quarto-page-breadcrumbs .breadcrumb-item::before{padding-right:.33em}.quarto-sidebar-footer{font-size:.875em}.sidebar-section .bi-chevron-right{vertical-align:middle}.sidebar-section .bi-chevron-right::before{font-size:.9em}.notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;transition:none !important}.btn:focus:not(:focus-visible){box-shadow:none}.page-navigation{display:flex;justify-content:space-between}.nav-page{padding-bottom:.75em}.nav-page .bi{font-size:1.8rem;vertical-align:middle}.nav-page .nav-page-text{padding-left:.25em;padding-right:.25em}.nav-page a{color:#6c757d;text-decoration:none;display:flex;align-items:center}.nav-page a:hover{color:#779133}.nav-footer .toc-actions{padding-bottom:.5em;padding-top:.5em}.nav-footer .toc-actions a,.nav-footer .toc-actions a:hover{text-decoration:none}.nav-footer .toc-actions ul{display:flex;list-style:none}.nav-footer .toc-actions ul :first-child{margin-left:auto}.nav-footer .toc-actions ul :last-child{margin-right:auto}.nav-footer .toc-actions ul li{padding-right:1.5em}.nav-footer .toc-actions ul li i.bi{padding-right:.4em}.nav-footer .toc-actions ul li:last-of-type{padding-right:0}.nav-footer{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:baseline;text-align:center;padding-top:.5rem;padding-bottom:.5rem;background-color:#fff}body.nav-fixed{padding-top:64px}.nav-footer-contents{color:#6c757d;margin-top:.25rem}.nav-footer{min-height:3.5em;color:dimgray}.nav-footer a{color:dimgray}.nav-footer .nav-footer-left{font-size:.825em}.nav-footer .nav-footer-center{font-size:.825em}.nav-footer .nav-footer-right{font-size:.825em}.nav-footer-left .footer-items,.nav-footer-center .footer-items,.nav-footer-right .footer-items{display:inline-flex;padding-top:.3em;padding-bottom:.3em;margin-bottom:0em}.nav-footer-left .footer-items .nav-link,.nav-footer-center .footer-items .nav-link,.nav-footer-right .footer-items .nav-link{padding-left:.6em;padding-right:.6em}.nav-footer-left{flex:1 1 0px;text-align:left}.nav-footer-right{flex:1 1 0px;text-align:right}.nav-footer-center{flex:1 1 0px;min-height:3em;text-align:center}.nav-footer-center .footer-items{justify-content:center}@media(max-width: 767.98px){.nav-footer-center{margin-top:3em}}.navbar .quarto-reader-toggle.reader .quarto-reader-toggle-btn{background-color:#4d5045;border-radius:3px}@media(max-width: 991.98px){.quarto-reader-toggle{display:none}}.quarto-reader-toggle.reader.quarto-navigation-tool .quarto-reader-toggle-btn{background-color:#595959;border-radius:3px}.quarto-reader-toggle .quarto-reader-toggle-btn{display:inline-flex;padding-left:.2em;padding-right:.2em;margin-left:-0.2em;margin-right:-0.2em;text-align:center}.navbar .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}#quarto-back-to-top{display:none;position:fixed;bottom:50px;background-color:#fff;border-radius:.25rem;box-shadow:0 .2rem .5rem #6c757d,0 0 .05rem #6c757d;color:#6c757d;text-decoration:none;font-size:.9em;text-align:center;left:50%;padding:.4rem .8rem;transform:translate(-50%, 0)}.aa-DetachedSearchButtonQuery{display:none}.aa-DetachedOverlay ul.aa-List,#quarto-search-results ul.aa-List{list-style:none;padding-left:0}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{background-color:#fff;position:absolute;z-index:2000}#quarto-search-results .aa-Panel{max-width:400px}#quarto-search input{font-size:.925rem}@media(min-width: 992px){.navbar #quarto-search{margin-left:.25rem;order:999}}.navbar.navbar-expand-sm #quarto-search,.navbar.navbar-expand-md #quarto-search{order:999}@media(min-width: 992px){.navbar .quarto-navbar-tools{margin-left:auto;order:900}}@media(max-width: 991.98px){#quarto-sidebar .sidebar-search{display:none}}#quarto-sidebar .sidebar-search .aa-Autocomplete{width:100%}.navbar .aa-Autocomplete .aa-Form{width:180px}.navbar #quarto-search.type-overlay .aa-Autocomplete{width:40px}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form{background-color:inherit;border:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form:focus-within{box-shadow:none;outline:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper{display:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper:focus-within{display:inherit}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-Label svg,.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-LoadingIndicator svg{width:26px;height:26px;color:#4d5045;opacity:1}.navbar #quarto-search.type-overlay .aa-Autocomplete svg.aa-SubmitIcon{width:26px;height:26px;color:#4d5045;opacity:1}.aa-Autocomplete .aa-Form,.aa-DetachedFormContainer .aa-Form{align-items:center;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;color:#1c2833;display:flex;line-height:1em;margin:0;position:relative;width:100%}.aa-Autocomplete .aa-Form:focus-within,.aa-DetachedFormContainer .aa-Form:focus-within{box-shadow:rgba(149,181,64,.6) 0 0 0 1px;outline:currentColor none medium}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix{align-items:center;display:flex;flex-shrink:0;order:1}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{cursor:initial;flex-shrink:0;padding:0;text-align:left}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg{color:#1c2833;opacity:.5}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton{appearance:none;background:none;border:0;margin:0}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{align-items:center;display:flex;justify-content:center}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapper,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper{order:3;position:relative;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input{appearance:none;background:none;border:0;color:#1c2833;font:inherit;height:calc(1.5em + .1rem + 2px);padding:0;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::placeholder,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::placeholder{color:#1c2833;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input:focus{border-color:none;box-shadow:none;outline:none}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix{align-items:center;display:flex;order:4}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton{align-items:center;background:none;border:0;color:#1c2833;opacity:.8;cursor:pointer;display:flex;margin:0;width:calc(1.5em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus{color:#1c2833;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg{width:calc(1.5em + 0.75rem + calc(1px * 2))}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton{border:none;align-items:center;background:none;color:#1c2833;opacity:.4;font-size:.7rem;cursor:pointer;display:none;margin:0;width:calc(1em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus{color:#1c2833;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden]{display:none}.aa-PanelLayout:empty{display:none}.quarto-search-no-results.no-query{display:none}.aa-Source:has(.no-query){display:none}#quarto-search-results .aa-Panel{border:solid #dee2e6 1px}#quarto-search-results .aa-SourceNoResults{width:398px}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{max-height:65vh;overflow-y:auto;font-size:.925rem}.aa-DetachedOverlay .aa-SourceNoResults,#quarto-search-results .aa-SourceNoResults{height:60px;display:flex;justify-content:center;align-items:center}.aa-DetachedOverlay .search-error,#quarto-search-results .search-error{padding-top:10px;padding-left:20px;padding-right:20px;cursor:default}.aa-DetachedOverlay .search-error .search-error-title,#quarto-search-results .search-error .search-error-title{font-size:1.1rem;margin-bottom:.5rem}.aa-DetachedOverlay .search-error .search-error-title .search-error-icon,#quarto-search-results .search-error .search-error-title .search-error-icon{margin-right:8px}.aa-DetachedOverlay .search-error .search-error-text,#quarto-search-results .search-error .search-error-text{font-weight:300}.aa-DetachedOverlay .search-result-text,#quarto-search-results .search-result-text{font-weight:300;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.2rem;max-height:2.4rem}.aa-DetachedOverlay .aa-SourceHeader .search-result-header,#quarto-search-results .aa-SourceHeader .search-result-header{font-size:.875rem;background-color:#f2f2f2;padding-left:14px;padding-bottom:4px;padding-top:4px}.aa-DetachedOverlay .aa-SourceHeader .search-result-header-no-results,#quarto-search-results .aa-SourceHeader .search-result-header-no-results{display:none}.aa-DetachedOverlay .aa-SourceFooter .algolia-search-logo,#quarto-search-results .aa-SourceFooter .algolia-search-logo{width:110px;opacity:.85;margin:8px;float:right}.aa-DetachedOverlay .search-result-section,#quarto-search-results .search-result-section{font-size:.925em}.aa-DetachedOverlay a.search-result-link,#quarto-search-results a.search-result-link{color:inherit;text-decoration:none}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item,#quarto-search-results li.aa-Item[aria-selected=true] .search-item{background-color:#95b540}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text-container{color:#000;background-color:#95b540}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=true] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-match.mark{color:#000;background-color:#a7c459}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item,#quarto-search-results li.aa-Item[aria-selected=false] .search-item{background-color:#fff}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text-container{color:#1c2833}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=false] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-match.mark{color:inherit;background-color:#ebf2d9}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container{background-color:#fff;color:#1c2833}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container{padding-top:0px}.aa-DetachedOverlay li.aa-Item .search-result-doc.document-selectable .search-result-text-container,#quarto-search-results li.aa-Item .search-result-doc.document-selectable .search-result-text-container{margin-top:-4px}.aa-DetachedOverlay .aa-Item,#quarto-search-results .aa-Item{cursor:pointer}.aa-DetachedOverlay .aa-Item .search-item,#quarto-search-results .aa-Item .search-item{border-left:none;border-right:none;border-top:none;background-color:#fff;border-color:#dee2e6;color:#1c2833}.aa-DetachedOverlay .aa-Item .search-item p,#quarto-search-results .aa-Item .search-item p{margin-top:0;margin-bottom:0}.aa-DetachedOverlay .aa-Item .search-item i.bi,#quarto-search-results .aa-Item .search-item i.bi{padding-left:8px;padding-right:8px;font-size:1.3em}.aa-DetachedOverlay .aa-Item .search-item .search-result-title,#quarto-search-results .aa-Item .search-item .search-result-title{margin-top:.3em;margin-bottom:0em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs,#quarto-search-results .aa-Item .search-item .search-result-crumbs{white-space:nowrap;text-overflow:ellipsis;font-size:.8em;font-weight:300;margin-right:1em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap),#quarto-search-results .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap){max-width:30%;margin-left:auto;margin-top:.5em;margin-bottom:.1rem}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap,#quarto-search-results .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap{flex-basis:100%;margin-top:0em;margin-bottom:.2em;margin-left:37px}.aa-DetachedOverlay .aa-Item .search-result-title-container,#quarto-search-results .aa-Item .search-result-title-container{font-size:1em;display:flex;flex-wrap:wrap;padding:6px 4px 6px 4px}.aa-DetachedOverlay .aa-Item .search-result-text-container,#quarto-search-results .aa-Item .search-result-text-container{padding-bottom:8px;padding-right:8px;margin-left:42px}.aa-DetachedOverlay .aa-Item .search-result-doc-section,.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-doc-section,#quarto-search-results .aa-Item .search-result-more{padding-top:8px;padding-bottom:8px;padding-left:44px}.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-more{font-size:.8em;font-weight:400}.aa-DetachedOverlay .aa-Item .search-result-doc,#quarto-search-results .aa-Item .search-result-doc{border-top:1px solid #dee2e6}.aa-DetachedSearchButton{background:none;border:none}.aa-DetachedSearchButton .aa-DetachedSearchButtonPlaceholder{display:none}.navbar .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:#4d5045}.sidebar-tools-collapse #quarto-search,.sidebar-tools-main #quarto-search{display:inline}.sidebar-tools-collapse #quarto-search .aa-Autocomplete,.sidebar-tools-main #quarto-search .aa-Autocomplete{display:inline}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton{padding-left:4px;padding-right:4px}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:#595959}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon{margin-top:-3px}.aa-DetachedContainer{background:rgba(255,255,255,.65);width:90%;bottom:0;box-shadow:rgba(222,226,230,.6) 0 0 0 1px;outline:currentColor none medium;display:flex;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:1101}.aa-DetachedContainer::after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px}.aa-DetachedContainer .aa-Panel{background-color:#fff;border-radius:0;box-shadow:none;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{background-color:#fff;border-bottom:1px solid #dee2e6;display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:.5em}.aa-DetachedCancelButton{background:none;font-size:.8em;border:0;border-radius:3px;color:#1c2833;cursor:pointer;margin:0 0 0 .5em;padding:0 .5em}.aa-DetachedCancelButton:hover,.aa-DetachedCancelButton:focus{box-shadow:rgba(149,181,64,.6) 0 0 0 1px;outline:currentColor none medium}.aa-DetachedContainer--modal{bottom:inherit;height:auto;margin:0 auto;position:absolute;top:100px;border-radius:6px;max-width:850px}@media(max-width: 575.98px){.aa-DetachedContainer--modal{width:100%;top:0px;border-radius:0px;border:none}}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:var(--aa-detached-modal-max-height);padding-bottom:var(--aa-spacing-half);position:static}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:rgba(28,40,51,.4);position:fixed;left:0;right:0;top:0;margin:0;padding:0;height:100vh;z-index:1100}.quarto-dashboard.nav-fixed.dashboard-sidebar #quarto-content.quarto-dashboard-content{padding:0em}.quarto-dashboard #quarto-content.quarto-dashboard-content{padding:1em}.quarto-dashboard #quarto-content.quarto-dashboard-content>*{padding-top:0}@media(min-width: 576px){.quarto-dashboard{height:100%}}.quarto-dashboard .card.valuebox.bslib-card.bg-primary{background-color:#95b540 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-secondary{background-color:#bdd775 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-success{background-color:#198754 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-info{background-color:#0dcaf0 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-warning{background-color:#ffc107 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-danger{background-color:#dc3545 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-light{background-color:#f8f9fa !important}.quarto-dashboard .card.valuebox.bslib-card.bg-dark{background-color:#212529 !important}.quarto-dashboard.dashboard-fill{display:flex;flex-direction:column}.quarto-dashboard #quarto-appendix{display:none}.quarto-dashboard #quarto-header #quarto-dashboard-header{border-top:solid 1px #d6e7a9;border-bottom:solid 1px #d6e7a9}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav{padding-left:1em;padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav .navbar-brand-container{padding-left:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler{margin-right:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler-icon{height:1em;width:1em;background-image:url('data:image/svg+xml,')}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-brand-container{padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-title{font-size:1.1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-nav{font-size:.9em}.quarto-dashboard #quarto-dashboard-header .navbar{padding:0}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-container{padding-left:1em}.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-brand-container .nav-link,.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-nav .nav-link{padding:.7em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-color-scheme-toggle{order:9}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-toggler{margin-left:.5em;order:10}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .nav-link{padding:.5em;height:100%;display:flex;align-items:center}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .active{background-color:#dae9b1}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{padding:.5em .5em .5em 0;display:flex;flex-direction:row;margin-right:2em;align-items:center}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{margin-right:auto}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{align-self:stretch}@media(min-width: 768px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:8}}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:1000;padding-bottom:.5em}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse .navbar-nav{align-self:stretch}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title{font-size:1.25em;line-height:1.1em;display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title .navbar-title-text{margin-right:.4em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title a{text-decoration:none;color:inherit}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-subtitle,.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{font-size:.9rem;margin-right:.5em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{margin-left:auto}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-logo{max-height:48px;min-height:30px;object-fit:cover;margin-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-links{order:9;padding-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link-text{margin-left:.25em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link{padding-right:0em;padding-left:.7em;text-decoration:none;color:#4d5045}.quarto-dashboard .page-layout-custom .tab-content{padding:0;border:none}.quarto-dashboard-img-contain{height:100%;width:100%;object-fit:contain}@media(max-width: 575.98px){.quarto-dashboard .bslib-grid{grid-template-rows:minmax(1em, max-content) !important}.quarto-dashboard .sidebar-content{height:inherit}.quarto-dashboard .page-layout-custom{min-height:100vh}}.quarto-dashboard.dashboard-toolbar>.page-layout-custom,.quarto-dashboard.dashboard-sidebar>.page-layout-custom{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages{padding:0}.quarto-dashboard .callout{margin-bottom:0;margin-top:0}.quarto-dashboard .html-fill-container figure{overflow:hidden}.quarto-dashboard bslib-tooltip .rounded-pill{border:solid #6c757d 1px}.quarto-dashboard bslib-tooltip .rounded-pill .svg{fill:#1c2833}.quarto-dashboard .tabset .dashboard-card-no-title .nav-tabs{margin-left:0;margin-right:auto}.quarto-dashboard .tabset .tab-content{border:none}.quarto-dashboard .tabset .card-header .nav-link[role=tab]{margin-top:-6px;padding-top:6px;padding-bottom:6px}.quarto-dashboard .card.valuebox,.quarto-dashboard .card.bslib-value-box{min-height:3rem}.quarto-dashboard .card.valuebox .card-body,.quarto-dashboard .card.bslib-value-box .card-body{padding:0}.quarto-dashboard .bslib-value-box .value-box-value{font-size:clamp(.1em,15cqw,5em)}.quarto-dashboard .bslib-value-box .value-box-showcase .bi{font-size:clamp(.1em,max(18cqw,5.2cqh),5em);text-align:center;height:1em}.quarto-dashboard .bslib-value-box .value-box-showcase .bi::before{vertical-align:1em}.quarto-dashboard .bslib-value-box .value-box-area{margin-top:auto;margin-bottom:auto}.quarto-dashboard .card figure.quarto-float{display:flex;flex-direction:column;align-items:center}.quarto-dashboard .dashboard-scrolling{padding:1em}.quarto-dashboard .full-height{height:100%}.quarto-dashboard .showcase-bottom .value-box-grid{display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:"top" "bottom"}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase i.bi{font-size:4rem}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-area{grid-area:top}.quarto-dashboard .tab-content{margin-bottom:0}.quarto-dashboard .bslib-card .bslib-navs-card-title{justify-content:stretch;align-items:end}.quarto-dashboard .card-header{display:flex;flex-wrap:wrap;justify-content:space-between}.quarto-dashboard .card-header .card-title{display:flex;flex-direction:column;justify-content:center;margin-bottom:0}.quarto-dashboard .tabset .card-toolbar{margin-bottom:1em}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{border:none;gap:var(--bslib-spacer, 1rem)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{padding:0}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.sidebar{border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.collapse-toggle{display:none}@media(max-width: 767.98px){.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{grid-template-columns:1fr;grid-template-rows:max-content 1fr}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{grid-column:1;grid-row:2}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout .sidebar{grid-column:1;grid-row:1}}.quarto-dashboard .sidebar-right .sidebar{padding-left:2.5em}.quarto-dashboard .sidebar-right .collapse-toggle{left:2px}.quarto-dashboard .quarto-dashboard .sidebar-right button.collapse-toggle:not(.transitioning){left:unset}.quarto-dashboard aside.sidebar{padding-left:1em;padding-right:1em;background-color:rgba(52,58,64,.25);color:#1c2833}.quarto-dashboard .bslib-sidebar-layout>div.main{padding:.7em}.quarto-dashboard .bslib-sidebar-layout button.collapse-toggle{margin-top:.3em}.quarto-dashboard .bslib-sidebar-layout .collapse-toggle{top:0}.quarto-dashboard .bslib-sidebar-layout.sidebar-collapsed:not(.transitioning):not(.sidebar-right) .collapse-toggle{left:2px}.quarto-dashboard .sidebar>section>.h3:first-of-type{margin-top:0em}.quarto-dashboard .sidebar .h3,.quarto-dashboard .sidebar .h4,.quarto-dashboard .sidebar .h5,.quarto-dashboard .sidebar .h6{margin-top:.5em}.quarto-dashboard .sidebar form{flex-direction:column;align-items:start;margin-bottom:1em}.quarto-dashboard .sidebar form div[class*=oi-][class$=-input]{flex-direction:column}.quarto-dashboard .sidebar form[class*=oi-][class$=-toggle]{flex-direction:row-reverse;align-items:center;justify-content:start}.quarto-dashboard .sidebar form input[type=range]{margin-top:.5em;margin-right:.8em;margin-left:1em}.quarto-dashboard .sidebar label{width:fit-content}.quarto-dashboard .sidebar .card-body{margin-bottom:2em}.quarto-dashboard .sidebar .shiny-input-container{margin-bottom:1em}.quarto-dashboard .sidebar .shiny-options-group{margin-top:0}.quarto-dashboard .sidebar .control-label{margin-bottom:.3em}.quarto-dashboard .card .card-body .quarto-layout-row{align-items:stretch}.quarto-dashboard .toolbar{font-size:.9em;display:flex;flex-direction:row;border-top:solid 1px #e0ecbb;padding:1em;flex-wrap:wrap;background-color:rgba(52,58,64,.25)}.quarto-dashboard .toolbar .cell-output-display{display:flex}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar>*:last-child{margin-right:0}.quarto-dashboard .toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .toolbar .input-daterange{width:inherit}.quarto-dashboard .toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar form{width:fit-content}.quarto-dashboard .toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .toolbar form input[type=date]{width:fit-content}.quarto-dashboard .toolbar form input[type=color]{width:3em}.quarto-dashboard .toolbar form button{padding:.4em}.quarto-dashboard .toolbar form select{width:fit-content}.quarto-dashboard .toolbar>*{font-size:.9em;flex-grow:0}.quarto-dashboard .toolbar .shiny-input-container label{margin-bottom:1px}.quarto-dashboard .toolbar-bottom{margin-top:1em;margin-bottom:0 !important;order:2}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>.tab-content>.tab-pane>*:not(.bslib-sidebar-layout){padding:1em}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>*:not(.tab-content){padding:1em}.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page>.dashboard-toolbar-container>.toolbar-content,.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page:not(.dashboard-sidebar-container)>*:not(.dashboard-toolbar-container){padding:1em}.quarto-dashboard .toolbar-content{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages .tab-pane>.dashboard-toolbar-container .toolbar{border-radius:0;margin-bottom:0}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar{border-bottom:1px solid rgba(0,0,0,.175)}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar-bottom{margin-top:0}.quarto-dashboard .dashboard-toolbar-container:not(.toolbar-toplevel) .toolbar{margin-bottom:1em;border-top:none;border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .vega-embed.has-actions details{width:1.7em;height:2em;position:absolute !important;top:0;right:0}.quarto-dashboard .dashboard-toolbar-container{padding:0}.quarto-dashboard .card .card-header p:last-child,.quarto-dashboard .card .card-footer p:last-child{margin-bottom:0}.quarto-dashboard .card .card-body>.h4:first-child{margin-top:0}.quarto-dashboard .card .card-body{z-index:1000}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_length,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_info,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate{text-align:initial}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_filter{text-align:right}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:initial}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;padding-top:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper table{flex-shrink:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons{margin-bottom:.5em;margin-left:auto;width:fit-content;float:right}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons.btn-group{background:#fff;border:none}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn-secondary{background-color:#fff;background-image:none;border:solid #dee2e6 1px;padding:.2em .7em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn span{font-size:.8em;color:#1c2833}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{margin-left:.5em;margin-bottom:.5em;padding-top:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.875em}}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.8em}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter{margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter input[type=search]{padding:1px 5px 1px 5px;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length{flex-basis:1 1 50%;margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length select{padding:.4em 3em .4em .5em;font-size:.875em;margin-left:.2em;margin-right:.2em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{flex-shrink:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{margin-left:auto}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate ul.pagination .paginate_button .page-link{font-size:.8em}.quarto-dashboard .card .card-footer{font-size:.9em}.quarto-dashboard .card .card-toolbar{display:flex;flex-grow:1;flex-direction:row;width:100%;flex-wrap:wrap}.quarto-dashboard .card .card-toolbar>*{font-size:.8em;flex-grow:0}.quarto-dashboard .card .card-toolbar>.card-title{font-size:1em;flex-grow:1;align-self:flex-start;margin-top:.1em}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar form{width:fit-content}.quarto-dashboard .card .card-toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=date]{width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=color]{width:3em}.quarto-dashboard .card .card-toolbar form button{padding:.4em}.quarto-dashboard .card .card-toolbar form select{width:fit-content}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .card .card-toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .card .card-toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .card .card-toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange{width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .card .card-toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .card .card-toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .card .card-toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .card .card-toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card-body>table>thead{border-top:none}.quarto-dashboard .card-body>.table>:not(caption)>*>*{background-color:#fff}.quarto-listing{padding-bottom:1em}.listing-pagination{padding-top:.5em}ul.pagination{float:right;padding-left:8px;padding-top:.5em}ul.pagination li{padding-right:.75em}ul.pagination li.disabled a,ul.pagination li.active a{color:#000;text-decoration:none}ul.pagination li:last-of-type{padding-right:0}.listing-actions-group{display:flex}.quarto-listing-filter{margin-bottom:1em;width:200px;margin-left:auto}.quarto-listing-sort{margin-bottom:1em;margin-right:auto;width:auto}.quarto-listing-sort .input-group-text{font-size:.8em}.input-group-text{border-right:none}.quarto-listing-sort select.form-select{font-size:.8em}.listing-no-matching{text-align:center;padding-top:2em;padding-bottom:3em;font-size:1em}#quarto-margin-sidebar .quarto-listing-category{padding-top:0;font-size:1rem}#quarto-margin-sidebar .quarto-listing-category-title{cursor:pointer;font-weight:600;font-size:1rem}.quarto-listing-category .category{cursor:pointer}.quarto-listing-category .category.active{font-weight:600}.quarto-listing-category.category-cloud{display:flex;flex-wrap:wrap;align-items:baseline}.quarto-listing-category.category-cloud .category{padding-right:5px}.quarto-listing-category.category-cloud .category-cloud-1{font-size:.75em}.quarto-listing-category.category-cloud .category-cloud-2{font-size:.95em}.quarto-listing-category.category-cloud .category-cloud-3{font-size:1.15em}.quarto-listing-category.category-cloud .category-cloud-4{font-size:1.35em}.quarto-listing-category.category-cloud .category-cloud-5{font-size:1.55em}.quarto-listing-category.category-cloud .category-cloud-6{font-size:1.75em}.quarto-listing-category.category-cloud .category-cloud-7{font-size:1.95em}.quarto-listing-category.category-cloud .category-cloud-8{font-size:2.15em}.quarto-listing-category.category-cloud .category-cloud-9{font-size:2.35em}.quarto-listing-category.category-cloud .category-cloud-10{font-size:2.55em}.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-1{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-2{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-3{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-3{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-4{grid-template-columns:repeat(4, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-4{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-4{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-5{grid-template-columns:repeat(5, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-5{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-5{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-6{grid-template-columns:repeat(6, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-6{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-6{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-7{grid-template-columns:repeat(7, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-7{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-7{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-8{grid-template-columns:repeat(8, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-8{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-8{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-9{grid-template-columns:repeat(9, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-9{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-9{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-10{grid-template-columns:repeat(10, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-10{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-10{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-11{grid-template-columns:repeat(11, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-11{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-11{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-12{grid-template-columns:repeat(12, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-12{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-12{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-grid{gap:1.5em}.quarto-grid-item.borderless{border:none}.quarto-grid-item.borderless .listing-categories .listing-category:last-of-type,.quarto-grid-item.borderless .listing-categories .listing-category:first-of-type{padding-left:0}.quarto-grid-item.borderless .listing-categories .listing-category{border:0}.quarto-grid-link{text-decoration:none;color:inherit}.quarto-grid-link:hover{text-decoration:none;color:inherit}.quarto-grid-item h5.title,.quarto-grid-item .title.h5{margin-top:0;margin-bottom:0}.quarto-grid-item .card-footer{display:flex;justify-content:space-between;font-size:.8em}.quarto-grid-item .card-footer p{margin-bottom:0}.quarto-grid-item p.card-img-top{margin-bottom:0}.quarto-grid-item p.card-img-top>img{object-fit:cover}.quarto-grid-item .card-other-values{margin-top:.5em;font-size:.8em}.quarto-grid-item .card-other-values tr{margin-bottom:.5em}.quarto-grid-item .card-other-values tr>td:first-of-type{font-weight:600;padding-right:1em;padding-left:1em;vertical-align:top}.quarto-grid-item div.post-contents{display:flex;flex-direction:column;text-decoration:none;height:100%}.quarto-grid-item .listing-item-img-placeholder{background-color:rgba(52,58,64,.25);flex-shrink:0}.quarto-grid-item .card-attribution{padding-top:1em;display:flex;gap:1em;text-transform:uppercase;color:#6c757d;font-weight:500;flex-grow:10;align-items:flex-end}.quarto-grid-item .description{padding-bottom:1em}.quarto-grid-item .card-attribution .date{align-self:flex-end}.quarto-grid-item .card-attribution.justify{justify-content:space-between}.quarto-grid-item .card-attribution.start{justify-content:flex-start}.quarto-grid-item .card-attribution.end{justify-content:flex-end}.quarto-grid-item .card-title{margin-bottom:.1em}.quarto-grid-item .card-subtitle{padding-top:.25em}.quarto-grid-item .card-text{font-size:.9em}.quarto-grid-item .listing-reading-time{padding-bottom:.25em}.quarto-grid-item .card-text-small{font-size:.8em}.quarto-grid-item .card-subtitle.subtitle{font-size:.9em;font-weight:600;padding-bottom:.5em}.quarto-grid-item .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}.quarto-grid-item .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}.quarto-grid-item.card-right{text-align:right}.quarto-grid-item.card-right .listing-categories{justify-content:flex-end}.quarto-grid-item.card-left{text-align:left}.quarto-grid-item.card-center{text-align:center}.quarto-grid-item.card-center .listing-description{text-align:justify}.quarto-grid-item.card-center .listing-categories{justify-content:center}table.quarto-listing-table td.image{padding:0px}table.quarto-listing-table td.image img{width:100%;max-width:50px;object-fit:contain}table.quarto-listing-table a{text-decoration:none;word-break:keep-all}table.quarto-listing-table th a{color:inherit}table.quarto-listing-table th a.asc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table th a.desc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table.table-hover td{cursor:pointer}.quarto-post.image-left{flex-direction:row}.quarto-post.image-right{flex-direction:row-reverse}@media(max-width: 767.98px){.quarto-post.image-right,.quarto-post.image-left{gap:0em;flex-direction:column}.quarto-post .metadata{padding-bottom:1em;order:2}.quarto-post .body{order:1}.quarto-post .thumbnail{order:3}}.list.quarto-listing-default div:last-of-type{border-bottom:none}@media(min-width: 992px){.quarto-listing-container-default{margin-right:2em}}div.quarto-post{display:flex;gap:2em;margin-bottom:1.5em;border-bottom:1px solid #dee2e6}@media(max-width: 767.98px){div.quarto-post{padding-bottom:1em}}div.quarto-post .metadata{flex-basis:20%;flex-grow:0;margin-top:.2em;flex-shrink:10}div.quarto-post .thumbnail{flex-basis:30%;flex-grow:0;flex-shrink:0}div.quarto-post .thumbnail img{margin-top:.4em;width:100%;object-fit:cover}div.quarto-post .body{flex-basis:45%;flex-grow:1;flex-shrink:0}div.quarto-post .body h3.listing-title,div.quarto-post .body .listing-title.h3{margin-top:0px;margin-bottom:0px;border-bottom:none}div.quarto-post .body .listing-subtitle{font-size:.875em;margin-bottom:.5em;margin-top:.2em}div.quarto-post .body .description{font-size:.9em}div.quarto-post .body pre code{white-space:pre-wrap}div.quarto-post a{color:#1c2833;text-decoration:none}div.quarto-post .metadata{display:flex;flex-direction:column;font-size:.8em;font-family:"Nunito","Source Sans Pro","Helvetica","sans-serif";flex-basis:33%}div.quarto-post .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}div.quarto-post .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}div.quarto-post .listing-description{margin-bottom:.5em}div.quarto-about-jolla{display:flex !important;flex-direction:column;align-items:center;margin-top:10%;padding-bottom:1em}div.quarto-about-jolla .about-image{object-fit:cover;margin-left:auto;margin-right:auto;margin-bottom:1.5em}div.quarto-about-jolla img.round{border-radius:50%}div.quarto-about-jolla img.rounded{border-radius:10px}div.quarto-about-jolla .quarto-title h1.title,div.quarto-about-jolla .quarto-title .title.h1{text-align:center}div.quarto-about-jolla .quarto-title .description{text-align:center}div.quarto-about-jolla h2,div.quarto-about-jolla .h2{border-bottom:none}div.quarto-about-jolla .about-sep{width:60%}div.quarto-about-jolla main{text-align:center}div.quarto-about-jolla .about-links{display:flex}@media(min-width: 992px){div.quarto-about-jolla .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-jolla .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-jolla .about-link{color:#405c75;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-jolla .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-jolla .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-jolla .about-link:hover{color:#95b540}div.quarto-about-jolla .about-link i.bi{margin-right:.15em}div.quarto-about-solana{display:flex !important;flex-direction:column;padding-top:3em !important;padding-bottom:1em}div.quarto-about-solana .about-entity{display:flex !important;align-items:start;justify-content:space-between}@media(min-width: 992px){div.quarto-about-solana .about-entity{flex-direction:row}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity{flex-direction:column-reverse;align-items:center;text-align:center}}div.quarto-about-solana .about-entity .entity-contents{display:flex;flex-direction:column}@media(max-width: 767.98px){div.quarto-about-solana .about-entity .entity-contents{width:100%}}div.quarto-about-solana .about-entity .about-image{object-fit:cover}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-image{margin-bottom:1.5em}}div.quarto-about-solana .about-entity img.round{border-radius:50%}div.quarto-about-solana .about-entity img.rounded{border-radius:10px}div.quarto-about-solana .about-entity .about-links{display:flex;justify-content:left;padding-bottom:1.2em}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-solana .about-entity .about-link{color:#405c75;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-solana .about-entity .about-link:hover{color:#95b540}div.quarto-about-solana .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-solana .about-contents{padding-right:1.5em;flex-basis:0;flex-grow:1}div.quarto-about-solana .about-contents main.content{margin-top:0}div.quarto-about-solana .about-contents h2,div.quarto-about-solana .about-contents .h2{border-bottom:none}div.quarto-about-trestles{display:flex !important;flex-direction:row;padding-top:3em !important;padding-bottom:1em}@media(max-width: 991.98px){div.quarto-about-trestles{flex-direction:column;padding-top:0em !important}}div.quarto-about-trestles .about-entity{display:flex !important;flex-direction:column;align-items:center;text-align:center;padding-right:1em}@media(min-width: 992px){div.quarto-about-trestles .about-entity{flex:0 0 42%}}div.quarto-about-trestles .about-entity .about-image{object-fit:cover;margin-bottom:1.5em}div.quarto-about-trestles .about-entity img.round{border-radius:50%}div.quarto-about-trestles .about-entity img.rounded{border-radius:10px}div.quarto-about-trestles .about-entity .about-links{display:flex;justify-content:center}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-trestles .about-entity .about-link{color:#405c75;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-trestles .about-entity .about-link:hover{color:#95b540}div.quarto-about-trestles .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-trestles .about-contents{flex-basis:0;flex-grow:1}div.quarto-about-trestles .about-contents h2,div.quarto-about-trestles .about-contents .h2{border-bottom:none}@media(min-width: 992px){div.quarto-about-trestles .about-contents{border-left:solid 1px #dee2e6;padding-left:1.5em}}div.quarto-about-trestles .about-contents main.content{margin-top:0}div.quarto-about-marquee{padding-bottom:1em}div.quarto-about-marquee .about-contents{display:flex;flex-direction:column}div.quarto-about-marquee .about-image{max-height:550px;margin-bottom:1.5em;object-fit:cover}div.quarto-about-marquee img.round{border-radius:50%}div.quarto-about-marquee img.rounded{border-radius:10px}div.quarto-about-marquee h2,div.quarto-about-marquee .h2{border-bottom:none}div.quarto-about-marquee .about-links{display:flex;justify-content:center;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-marquee .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-marquee .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-marquee .about-link{color:#405c75;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-marquee .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-marquee .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-marquee .about-link:hover{color:#95b540}div.quarto-about-marquee .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-marquee .about-link{border:none}}div.quarto-about-broadside{display:flex;flex-direction:column;padding-bottom:1em}div.quarto-about-broadside .about-main{display:flex !important;padding-top:0 !important}@media(min-width: 992px){div.quarto-about-broadside .about-main{flex-direction:row;align-items:flex-start}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main{flex-direction:column}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main .about-entity{flex-shrink:0;width:100%;height:450px;margin-bottom:1.5em;background-size:cover;background-repeat:no-repeat}}@media(min-width: 992px){div.quarto-about-broadside .about-main .about-entity{flex:0 10 50%;margin-right:1.5em;width:100%;height:100%;background-size:100%;background-repeat:no-repeat}}div.quarto-about-broadside .about-main .about-contents{padding-top:14px;flex:0 0 50%}div.quarto-about-broadside h2,div.quarto-about-broadside .h2{border-bottom:none}div.quarto-about-broadside .about-sep{margin-top:1.5em;width:60%;align-self:center}div.quarto-about-broadside .about-links{display:flex;justify-content:center;column-gap:20px;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-broadside .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-broadside .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-broadside .about-link{color:#405c75;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-broadside .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-broadside .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-broadside .about-link:hover{color:#95b540}div.quarto-about-broadside .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-broadside .about-link{border:none}}.tippy-box[data-theme~=quarto]{background-color:#fff;border:solid 1px #dee2e6;border-radius:.25rem;color:#1c2833;font-size:.875rem}.tippy-box[data-theme~=quarto]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=quarto]>.tippy-arrow:after,.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{content:"";position:absolute;z-index:-1}.tippy-box[data-theme~=quarto]>.tippy-arrow:after{border-color:rgba(0,0,0,0);border-style:solid}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-6px}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-6px}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-6px}.tippy-box[data-placement^=left]>.tippy-arrow:before{right:-6px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:after{border-top-color:#dee2e6;border-width:7px 7px 0;top:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow>svg{top:16px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow:after{top:17px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff;bottom:16px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:#dee2e6;border-width:0 7px 7px;bottom:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:15px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow:after{bottom:17px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:after{border-left-color:#dee2e6;border-width:7px 0 7px 7px;left:17px;top:1px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow>svg{left:11px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow:after{left:12px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff;right:16px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:after{border-width:7px 7px 7px 0;right:17px;top:1px;border-right-color:#dee2e6}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow>svg{right:11px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow:after{right:12px}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow{fill:#1c2833}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=);background-size:16px 6px;width:16px;height:6px}.top-right{position:absolute;top:1em;right:1em}.visually-hidden{border:0;clip:rect(0 0 0 0);height:auto;margin:0;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none !important}.zindex-bottom{z-index:-1 !important}figure.figure{display:block}.quarto-layout-panel{margin-bottom:1em}.quarto-layout-panel>figure{width:100%}.quarto-layout-panel>figure>figcaption,.quarto-layout-panel>.panel-caption{margin-top:10pt}.quarto-layout-panel>.table-caption{margin-top:0px}.table-caption p{margin-bottom:.5em}.quarto-layout-row{display:flex;flex-direction:row;align-items:flex-start}.quarto-layout-valign-top{align-items:flex-start}.quarto-layout-valign-bottom{align-items:flex-end}.quarto-layout-valign-center{align-items:center}.quarto-layout-cell{position:relative;margin-right:20px}.quarto-layout-cell:last-child{margin-right:0}.quarto-layout-cell figure,.quarto-layout-cell>p{margin:.2em}.quarto-layout-cell img{max-width:100%}.quarto-layout-cell .html-widget{width:100% !important}.quarto-layout-cell div figure p{margin:0}.quarto-layout-cell figure{display:block;margin-inline-start:0;margin-inline-end:0}.quarto-layout-cell table{display:inline-table}.quarto-layout-cell-subref figcaption,figure .quarto-layout-row figure figcaption{text-align:center;font-style:italic}.quarto-figure{position:relative;margin-bottom:1em}.quarto-figure>figure{width:100%;margin-bottom:0}.quarto-figure-left>figure>p,.quarto-figure-left>figure>div{text-align:left}.quarto-figure-center>figure>p,.quarto-figure-center>figure>div{text-align:center}.quarto-figure-right>figure>p,.quarto-figure-right>figure>div{text-align:right}.quarto-figure>figure>div.cell-annotation,.quarto-figure>figure>div code{text-align:left}figure>p:empty{display:none}figure>p:first-child{margin-top:0;margin-bottom:0}figure>figcaption.quarto-float-caption-bottom{margin-bottom:.5em}figure>figcaption.quarto-float-caption-top{margin-top:.5em}div[id^=tbl-]{position:relative}.quarto-figure>.anchorjs-link{position:absolute;top:.6em;right:.5em}div[id^=tbl-]>.anchorjs-link{position:absolute;top:.7em;right:.3em}.quarto-figure:hover>.anchorjs-link,div[id^=tbl-]:hover>.anchorjs-link,h2:hover>.anchorjs-link,.h2:hover>.anchorjs-link,h3:hover>.anchorjs-link,.h3:hover>.anchorjs-link,h4:hover>.anchorjs-link,.h4:hover>.anchorjs-link,h5:hover>.anchorjs-link,.h5:hover>.anchorjs-link,h6:hover>.anchorjs-link,.h6:hover>.anchorjs-link,.reveal-anchorjs-link>.anchorjs-link{opacity:1}#title-block-header{margin-block-end:1rem;position:relative;margin-top:-1px}#title-block-header .abstract{margin-block-start:1rem}#title-block-header .abstract .abstract-title{font-weight:600}#title-block-header a{text-decoration:none}#title-block-header .author,#title-block-header .date,#title-block-header .doi{margin-block-end:.2rem}#title-block-header .quarto-title-block>div{display:flex}#title-block-header .quarto-title-block>div>h1,#title-block-header .quarto-title-block>div>.h1{flex-grow:1}#title-block-header .quarto-title-block>div>button{flex-shrink:0;height:2.25rem;margin-top:0}@media(min-width: 992px){#title-block-header .quarto-title-block>div>button{margin-top:5px}}tr.header>th>p:last-of-type{margin-bottom:0px}table,table.table{margin-top:.5rem;margin-bottom:.5rem}caption,.table-caption{padding-top:.5rem;padding-bottom:.5rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-top{margin-top:.5rem;margin-bottom:.25rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-bottom{padding-top:.25rem;margin-bottom:.5rem;text-align:center}.utterances{max-width:none;margin-left:-8px}iframe{margin-bottom:1em}details{margin-bottom:1em}details[show]{margin-bottom:0}details>summary{color:#6c757d}details>summary>p:only-child{display:inline}pre.sourceCode,code.sourceCode{position:relative}p code:not(.sourceCode){white-space:pre-wrap}code{white-space:pre}@media print{code{white-space:pre-wrap}}pre>code{display:block}pre>code.sourceCode{white-space:pre-wrap}pre>code.sourceCode>span>a:first-child::before{text-decoration:none}pre.code-overflow-wrap>code.sourceCode{white-space:pre-wrap}pre.code-overflow-scroll>code.sourceCode{white-space:pre}code a:any-link{color:inherit;text-decoration:none}code a:hover{color:inherit;text-decoration:underline}ul.task-list{padding-left:1em}[data-tippy-root]{display:inline-block}.tippy-content .footnote-back{display:none}.footnote-back{margin-left:.2em}.tippy-content{overflow-x:auto}.quarto-embedded-source-code{display:none}.quarto-unresolved-ref{font-weight:600}.quarto-cover-image{max-width:35%;float:right;margin-left:30px}.cell-output-display .widget-subarea{margin-bottom:1em}.cell-output-display:not(.no-overflow-x),.knitsql-table:not(.no-overflow-x){overflow-x:auto}.panel-input{margin-bottom:1em}.panel-input>div,.panel-input>div>div{display:inline-block;vertical-align:top;padding-right:12px}.panel-input>p:last-child{margin-bottom:0}.layout-sidebar{margin-bottom:1em}.layout-sidebar .tab-content{border:none}.tab-content>.page-columns.active{display:grid}div.sourceCode>iframe{width:100%;height:300px;margin-bottom:-0.5em}a{text-underline-offset:3px}div.ansi-escaped-output{font-family:monospace;display:block}/*!
-*
-* ansi colors from IPython notebook's
-*
-* we also add `bright-[color]-` synonyms for the `-[color]-intense` classes since
-* that seems to be what ansi_up emits
-*
-*/.ansi-black-fg{color:#3e424d}.ansi-black-bg{background-color:#3e424d}.ansi-black-intense-black,.ansi-bright-black-fg{color:#282c36}.ansi-black-intense-black,.ansi-bright-black-bg{background-color:#282c36}.ansi-red-fg{color:#e75c58}.ansi-red-bg{background-color:#e75c58}.ansi-red-intense-red,.ansi-bright-red-fg{color:#b22b31}.ansi-red-intense-red,.ansi-bright-red-bg{background-color:#b22b31}.ansi-green-fg{color:#00a250}.ansi-green-bg{background-color:#00a250}.ansi-green-intense-green,.ansi-bright-green-fg{color:#007427}.ansi-green-intense-green,.ansi-bright-green-bg{background-color:#007427}.ansi-yellow-fg{color:#ddb62b}.ansi-yellow-bg{background-color:#ddb62b}.ansi-yellow-intense-yellow,.ansi-bright-yellow-fg{color:#b27d12}.ansi-yellow-intense-yellow,.ansi-bright-yellow-bg{background-color:#b27d12}.ansi-blue-fg{color:#208ffb}.ansi-blue-bg{background-color:#208ffb}.ansi-blue-intense-blue,.ansi-bright-blue-fg{color:#0065ca}.ansi-blue-intense-blue,.ansi-bright-blue-bg{background-color:#0065ca}.ansi-magenta-fg{color:#d160c4}.ansi-magenta-bg{background-color:#d160c4}.ansi-magenta-intense-magenta,.ansi-bright-magenta-fg{color:#a03196}.ansi-magenta-intense-magenta,.ansi-bright-magenta-bg{background-color:#a03196}.ansi-cyan-fg{color:#60c6c8}.ansi-cyan-bg{background-color:#60c6c8}.ansi-cyan-intense-cyan,.ansi-bright-cyan-fg{color:#258f8f}.ansi-cyan-intense-cyan,.ansi-bright-cyan-bg{background-color:#258f8f}.ansi-white-fg{color:#c5c1b4}.ansi-white-bg{background-color:#c5c1b4}.ansi-white-intense-white,.ansi-bright-white-fg{color:#a1a6b2}.ansi-white-intense-white,.ansi-bright-white-bg{background-color:#a1a6b2}.ansi-default-inverse-fg{color:#fff}.ansi-default-inverse-bg{background-color:#000}.ansi-bold{font-weight:bold}.ansi-underline{text-decoration:underline}:root{--quarto-body-bg: #ffffff;--quarto-body-color: #1c2833;--quarto-text-muted: #6c757d;--quarto-border-color: #dee2e6;--quarto-border-width: 1px;--quarto-border-radius: 0.25rem}table.gt_table{color:var(--quarto-body-color);font-size:1em;width:100%;background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_column_spanner_outer{color:var(--quarto-body-color);background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_col_heading{color:var(--quarto-body-color);font-weight:bold;background-color:rgba(0,0,0,0)}table.gt_table thead.gt_col_headings{border-bottom:1px solid currentColor;border-top-width:inherit;border-top-color:var(--quarto-border-color)}table.gt_table thead.gt_col_headings:not(:first-child){border-top-width:1px;border-top-color:var(--quarto-border-color)}table.gt_table td.gt_row{border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-width:0px}table.gt_table tbody.gt_table_body{border-top-width:1px;border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-color:currentColor}div.columns{display:initial;gap:initial}div.column{display:inline-block;overflow-x:initial;vertical-align:top;width:50%}.code-annotation-tip-content{word-wrap:break-word}.code-annotation-container-hidden{display:none !important}dl.code-annotation-container-grid{display:grid;grid-template-columns:min-content auto}dl.code-annotation-container-grid dt{grid-column:1}dl.code-annotation-container-grid dd{grid-column:2}pre.sourceCode.code-annotation-code{padding-right:0}code.sourceCode .code-annotation-anchor{z-index:100;position:relative;float:right;background-color:rgba(0,0,0,0)}input[type=checkbox]{margin-right:.5ch}:root{--mermaid-bg-color: #ffffff;--mermaid-edge-color: #BDD775;--mermaid-node-fg-color: #1c2833;--mermaid-fg-color: #1c2833;--mermaid-fg-color--lighter: #2e4254;--mermaid-fg-color--lightest: #405c75;--mermaid-font-family: Nunito, Source Sans Pro, Helvetica, sans-serif;--mermaid-label-bg-color: #ffffff;--mermaid-label-fg-color: #95b540;--mermaid-node-bg-color: rgba(149, 181, 64, 0.1);--mermaid-node-fg-color: #1c2833}@media print{:root{font-size:11pt}#quarto-sidebar,#TOC,.nav-page{display:none}.page-columns .content{grid-column-start:page-start}.fixed-top{position:relative}.panel-caption,.figure-caption,figcaption{color:#666}}.code-copy-button{position:absolute;top:0;right:0;border:0;margin-top:5px;margin-right:5px;background-color:rgba(0,0,0,0);z-index:3}.code-copy-button:focus{outline:none}.code-copy-button-tooltip{font-size:.75em}.code-copy-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}.code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}.code-copy-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}.code-copy-button-checked:hover>.bi::before{background-image:url('data:image/svg+xml,')}main ol ol,main ul ul,main ol ul,main ul ol{margin-bottom:1em}ul>li:not(:has(>p))>ul,ol>li:not(:has(>p))>ul,ul>li:not(:has(>p))>ol,ol>li:not(:has(>p))>ol{margin-bottom:0}ul>li:not(:has(>p))>ul>li:has(>p),ol>li:not(:has(>p))>ul>li:has(>p),ul>li:not(:has(>p))>ol>li:has(>p),ol>li:not(:has(>p))>ol>li:has(>p){margin-top:1rem}body{margin:0}main.page-columns>header>h1.title,main.page-columns>header>.title.h1{margin-bottom:0}@media(min-width: 992px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] 35px [page-end-inset page-end] 5fr [screen-end-inset] 1.5em}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 3em [body-end] 50px [body-end-outset] minmax(0px, 250px) [page-end-inset] minmax(50px, 100px) [page-end] 1fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] minmax(25px, 50px) [body-end-outset] minmax(50px, 150px) [page-end-inset] minmax(25px, 50px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(50px, 100px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(50px, 150px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] minmax(25px, 50px) [body-end-outset] minmax(50px, 150px) [page-end-inset] minmax(25px, 50px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 991.98px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1250px - 3em)) [body-content-end body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1.5em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(75px, 150px) [page-end-inset] 25px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(75px, 150px) [page-end-inset] 25px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 767.98px){body .page-columns,body.fullcontent:not(.floating):not(.docked) .page-columns,body.slimcontent:not(.floating):not(.docked) .page-columns,body.docked .page-columns,body.docked.slimcontent .page-columns,body.docked.fullcontent .page-columns,body.floating .page-columns,body.floating.slimcontent .page-columns,body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}nav[role=doc-toc]{display:none}}body,.page-row-navigation{grid-template-rows:[page-top] max-content [contents-top] max-content [contents-bottom] max-content [page-bottom]}.page-rows-contents{grid-template-rows:[content-top] minmax(max-content, 1fr) [content-bottom] minmax(60px, max-content) [page-bottom]}.page-full{grid-column:screen-start/screen-end !important}.page-columns>*{grid-column:body-content-start/body-content-end}.page-columns.column-page>*{grid-column:page-start/page-end}.page-columns.column-page-left .page-columns.page-full>*,.page-columns.column-page-left>*{grid-column:page-start/body-content-end}.page-columns.column-page-right .page-columns.page-full>*,.page-columns.column-page-right>*{grid-column:body-content-start/page-end}.page-rows{grid-auto-rows:auto}.header{grid-column:screen-start/screen-end;grid-row:page-top/contents-top}#quarto-content{padding:0;grid-column:screen-start/screen-end;grid-row:contents-top/contents-bottom}body.floating .sidebar.sidebar-navigation{grid-column:page-start/body-start;grid-row:content-top/page-bottom}body.docked .sidebar.sidebar-navigation{grid-column:screen-start/body-start;grid-row:content-top/page-bottom}.sidebar.toc-left{grid-column:page-start/body-start;grid-row:content-top/page-bottom}.sidebar.margin-sidebar{grid-column:body-end/page-end;grid-row:content-top/page-bottom}.page-columns .content{grid-column:body-content-start/body-content-end;grid-row:content-top/content-bottom;align-content:flex-start}.page-columns .page-navigation{grid-column:body-content-start/body-content-end;grid-row:content-bottom/page-bottom}.page-columns .footer{grid-column:screen-start/screen-end;grid-row:contents-bottom/page-bottom}.page-columns .column-body{grid-column:body-content-start/body-content-end}.page-columns .column-body-fullbleed{grid-column:body-start/body-end}.page-columns .column-body-outset{grid-column:body-start-outset/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset table{background:#fff}.page-columns .column-body-outset-left{grid-column:body-start-outset/body-content-end;z-index:998;opacity:.999}.page-columns .column-body-outset-left table{background:#fff}.page-columns .column-body-outset-right{grid-column:body-content-start/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset-right table{background:#fff}.page-columns .column-page{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-page table{background:#fff}.page-columns .column-page-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset table{background:#fff}.page-columns .column-page-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-inset-left table{background:#fff}.page-columns .column-page-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset-right figcaption table{background:#fff}.page-columns .column-page-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-left table{background:#fff}.page-columns .column-page-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-page-right figcaption table{background:#fff}#quarto-content.page-columns #quarto-margin-sidebar,#quarto-content.page-columns #quarto-sidebar{z-index:1}@media(max-width: 991.98px){#quarto-content.page-columns #quarto-margin-sidebar.collapse,#quarto-content.page-columns #quarto-sidebar.collapse,#quarto-content.page-columns #quarto-margin-sidebar.collapsing,#quarto-content.page-columns #quarto-sidebar.collapsing{z-index:1055}}#quarto-content.page-columns main.column-page,#quarto-content.page-columns main.column-page-right,#quarto-content.page-columns main.column-page-left{z-index:0}.page-columns .column-screen-inset{grid-column:screen-start-inset/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:screen-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:screen-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:screen-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:screen-start/screen-end;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}.zindex-content{z-index:998;opacity:.999}.zindex-modal{z-index:1055;opacity:.999}.zindex-over-content{z-index:999;opacity:.999}img.img-fluid.column-screen,img.img-fluid.column-screen-inset-shaded,img.img-fluid.column-screen-inset,img.img-fluid.column-screen-inset-left,img.img-fluid.column-screen-inset-right,img.img-fluid.column-screen-left,img.img-fluid.column-screen-right{width:100%}@media(min-width: 992px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.column-sidebar{grid-column:page-start/body-start !important;z-index:998}.column-leftmargin{grid-column:screen-start-inset/body-start !important;z-index:998}.no-row-height{height:1em;overflow:visible}}@media(max-width: 991.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.no-row-height{height:1em;overflow:visible}.page-columns.page-full{overflow:visible}.page-columns.toc-left .margin-caption,.page-columns.toc-left div.aside,.page-columns.toc-left aside:not(.footnotes):not(.sidebar),.page-columns.toc-left .column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.page-columns.toc-left .no-row-height{height:initial;overflow:initial}}@media(max-width: 767.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.no-row-height{height:initial;overflow:initial}#quarto-margin-sidebar{display:none}#quarto-sidebar-toc-left{display:none}.hidden-sm{display:none}}.panel-grid{display:grid;grid-template-rows:repeat(1, 1fr);grid-template-columns:repeat(24, 1fr);gap:1em}.panel-grid .g-col-1{grid-column:auto/span 1}.panel-grid .g-col-2{grid-column:auto/span 2}.panel-grid .g-col-3{grid-column:auto/span 3}.panel-grid .g-col-4{grid-column:auto/span 4}.panel-grid .g-col-5{grid-column:auto/span 5}.panel-grid .g-col-6{grid-column:auto/span 6}.panel-grid .g-col-7{grid-column:auto/span 7}.panel-grid .g-col-8{grid-column:auto/span 8}.panel-grid .g-col-9{grid-column:auto/span 9}.panel-grid .g-col-10{grid-column:auto/span 10}.panel-grid .g-col-11{grid-column:auto/span 11}.panel-grid .g-col-12{grid-column:auto/span 12}.panel-grid .g-col-13{grid-column:auto/span 13}.panel-grid .g-col-14{grid-column:auto/span 14}.panel-grid .g-col-15{grid-column:auto/span 15}.panel-grid .g-col-16{grid-column:auto/span 16}.panel-grid .g-col-17{grid-column:auto/span 17}.panel-grid .g-col-18{grid-column:auto/span 18}.panel-grid .g-col-19{grid-column:auto/span 19}.panel-grid .g-col-20{grid-column:auto/span 20}.panel-grid .g-col-21{grid-column:auto/span 21}.panel-grid .g-col-22{grid-column:auto/span 22}.panel-grid .g-col-23{grid-column:auto/span 23}.panel-grid .g-col-24{grid-column:auto/span 24}.panel-grid .g-start-1{grid-column-start:1}.panel-grid .g-start-2{grid-column-start:2}.panel-grid .g-start-3{grid-column-start:3}.panel-grid .g-start-4{grid-column-start:4}.panel-grid .g-start-5{grid-column-start:5}.panel-grid .g-start-6{grid-column-start:6}.panel-grid .g-start-7{grid-column-start:7}.panel-grid .g-start-8{grid-column-start:8}.panel-grid .g-start-9{grid-column-start:9}.panel-grid .g-start-10{grid-column-start:10}.panel-grid .g-start-11{grid-column-start:11}.panel-grid .g-start-12{grid-column-start:12}.panel-grid .g-start-13{grid-column-start:13}.panel-grid .g-start-14{grid-column-start:14}.panel-grid .g-start-15{grid-column-start:15}.panel-grid .g-start-16{grid-column-start:16}.panel-grid .g-start-17{grid-column-start:17}.panel-grid .g-start-18{grid-column-start:18}.panel-grid .g-start-19{grid-column-start:19}.panel-grid .g-start-20{grid-column-start:20}.panel-grid .g-start-21{grid-column-start:21}.panel-grid .g-start-22{grid-column-start:22}.panel-grid .g-start-23{grid-column-start:23}@media(min-width: 576px){.panel-grid .g-col-sm-1{grid-column:auto/span 1}.panel-grid .g-col-sm-2{grid-column:auto/span 2}.panel-grid .g-col-sm-3{grid-column:auto/span 3}.panel-grid .g-col-sm-4{grid-column:auto/span 4}.panel-grid .g-col-sm-5{grid-column:auto/span 5}.panel-grid .g-col-sm-6{grid-column:auto/span 6}.panel-grid .g-col-sm-7{grid-column:auto/span 7}.panel-grid .g-col-sm-8{grid-column:auto/span 8}.panel-grid .g-col-sm-9{grid-column:auto/span 9}.panel-grid .g-col-sm-10{grid-column:auto/span 10}.panel-grid .g-col-sm-11{grid-column:auto/span 11}.panel-grid .g-col-sm-12{grid-column:auto/span 12}.panel-grid .g-col-sm-13{grid-column:auto/span 13}.panel-grid .g-col-sm-14{grid-column:auto/span 14}.panel-grid .g-col-sm-15{grid-column:auto/span 15}.panel-grid .g-col-sm-16{grid-column:auto/span 16}.panel-grid .g-col-sm-17{grid-column:auto/span 17}.panel-grid .g-col-sm-18{grid-column:auto/span 18}.panel-grid .g-col-sm-19{grid-column:auto/span 19}.panel-grid .g-col-sm-20{grid-column:auto/span 20}.panel-grid .g-col-sm-21{grid-column:auto/span 21}.panel-grid .g-col-sm-22{grid-column:auto/span 22}.panel-grid .g-col-sm-23{grid-column:auto/span 23}.panel-grid .g-col-sm-24{grid-column:auto/span 24}.panel-grid .g-start-sm-1{grid-column-start:1}.panel-grid .g-start-sm-2{grid-column-start:2}.panel-grid .g-start-sm-3{grid-column-start:3}.panel-grid .g-start-sm-4{grid-column-start:4}.panel-grid .g-start-sm-5{grid-column-start:5}.panel-grid .g-start-sm-6{grid-column-start:6}.panel-grid .g-start-sm-7{grid-column-start:7}.panel-grid .g-start-sm-8{grid-column-start:8}.panel-grid .g-start-sm-9{grid-column-start:9}.panel-grid .g-start-sm-10{grid-column-start:10}.panel-grid .g-start-sm-11{grid-column-start:11}.panel-grid .g-start-sm-12{grid-column-start:12}.panel-grid .g-start-sm-13{grid-column-start:13}.panel-grid .g-start-sm-14{grid-column-start:14}.panel-grid .g-start-sm-15{grid-column-start:15}.panel-grid .g-start-sm-16{grid-column-start:16}.panel-grid .g-start-sm-17{grid-column-start:17}.panel-grid .g-start-sm-18{grid-column-start:18}.panel-grid .g-start-sm-19{grid-column-start:19}.panel-grid .g-start-sm-20{grid-column-start:20}.panel-grid .g-start-sm-21{grid-column-start:21}.panel-grid .g-start-sm-22{grid-column-start:22}.panel-grid .g-start-sm-23{grid-column-start:23}}@media(min-width: 768px){.panel-grid .g-col-md-1{grid-column:auto/span 1}.panel-grid .g-col-md-2{grid-column:auto/span 2}.panel-grid .g-col-md-3{grid-column:auto/span 3}.panel-grid .g-col-md-4{grid-column:auto/span 4}.panel-grid .g-col-md-5{grid-column:auto/span 5}.panel-grid .g-col-md-6{grid-column:auto/span 6}.panel-grid .g-col-md-7{grid-column:auto/span 7}.panel-grid .g-col-md-8{grid-column:auto/span 8}.panel-grid .g-col-md-9{grid-column:auto/span 9}.panel-grid .g-col-md-10{grid-column:auto/span 10}.panel-grid .g-col-md-11{grid-column:auto/span 11}.panel-grid .g-col-md-12{grid-column:auto/span 12}.panel-grid .g-col-md-13{grid-column:auto/span 13}.panel-grid .g-col-md-14{grid-column:auto/span 14}.panel-grid .g-col-md-15{grid-column:auto/span 15}.panel-grid .g-col-md-16{grid-column:auto/span 16}.panel-grid .g-col-md-17{grid-column:auto/span 17}.panel-grid .g-col-md-18{grid-column:auto/span 18}.panel-grid .g-col-md-19{grid-column:auto/span 19}.panel-grid .g-col-md-20{grid-column:auto/span 20}.panel-grid .g-col-md-21{grid-column:auto/span 21}.panel-grid .g-col-md-22{grid-column:auto/span 22}.panel-grid .g-col-md-23{grid-column:auto/span 23}.panel-grid .g-col-md-24{grid-column:auto/span 24}.panel-grid .g-start-md-1{grid-column-start:1}.panel-grid .g-start-md-2{grid-column-start:2}.panel-grid .g-start-md-3{grid-column-start:3}.panel-grid .g-start-md-4{grid-column-start:4}.panel-grid .g-start-md-5{grid-column-start:5}.panel-grid .g-start-md-6{grid-column-start:6}.panel-grid .g-start-md-7{grid-column-start:7}.panel-grid .g-start-md-8{grid-column-start:8}.panel-grid .g-start-md-9{grid-column-start:9}.panel-grid .g-start-md-10{grid-column-start:10}.panel-grid .g-start-md-11{grid-column-start:11}.panel-grid .g-start-md-12{grid-column-start:12}.panel-grid .g-start-md-13{grid-column-start:13}.panel-grid .g-start-md-14{grid-column-start:14}.panel-grid .g-start-md-15{grid-column-start:15}.panel-grid .g-start-md-16{grid-column-start:16}.panel-grid .g-start-md-17{grid-column-start:17}.panel-grid .g-start-md-18{grid-column-start:18}.panel-grid .g-start-md-19{grid-column-start:19}.panel-grid .g-start-md-20{grid-column-start:20}.panel-grid .g-start-md-21{grid-column-start:21}.panel-grid .g-start-md-22{grid-column-start:22}.panel-grid .g-start-md-23{grid-column-start:23}}@media(min-width: 992px){.panel-grid .g-col-lg-1{grid-column:auto/span 1}.panel-grid .g-col-lg-2{grid-column:auto/span 2}.panel-grid .g-col-lg-3{grid-column:auto/span 3}.panel-grid .g-col-lg-4{grid-column:auto/span 4}.panel-grid .g-col-lg-5{grid-column:auto/span 5}.panel-grid .g-col-lg-6{grid-column:auto/span 6}.panel-grid .g-col-lg-7{grid-column:auto/span 7}.panel-grid .g-col-lg-8{grid-column:auto/span 8}.panel-grid .g-col-lg-9{grid-column:auto/span 9}.panel-grid .g-col-lg-10{grid-column:auto/span 10}.panel-grid .g-col-lg-11{grid-column:auto/span 11}.panel-grid .g-col-lg-12{grid-column:auto/span 12}.panel-grid .g-col-lg-13{grid-column:auto/span 13}.panel-grid .g-col-lg-14{grid-column:auto/span 14}.panel-grid .g-col-lg-15{grid-column:auto/span 15}.panel-grid .g-col-lg-16{grid-column:auto/span 16}.panel-grid .g-col-lg-17{grid-column:auto/span 17}.panel-grid .g-col-lg-18{grid-column:auto/span 18}.panel-grid .g-col-lg-19{grid-column:auto/span 19}.panel-grid .g-col-lg-20{grid-column:auto/span 20}.panel-grid .g-col-lg-21{grid-column:auto/span 21}.panel-grid .g-col-lg-22{grid-column:auto/span 22}.panel-grid .g-col-lg-23{grid-column:auto/span 23}.panel-grid .g-col-lg-24{grid-column:auto/span 24}.panel-grid .g-start-lg-1{grid-column-start:1}.panel-grid .g-start-lg-2{grid-column-start:2}.panel-grid .g-start-lg-3{grid-column-start:3}.panel-grid .g-start-lg-4{grid-column-start:4}.panel-grid .g-start-lg-5{grid-column-start:5}.panel-grid .g-start-lg-6{grid-column-start:6}.panel-grid .g-start-lg-7{grid-column-start:7}.panel-grid .g-start-lg-8{grid-column-start:8}.panel-grid .g-start-lg-9{grid-column-start:9}.panel-grid .g-start-lg-10{grid-column-start:10}.panel-grid .g-start-lg-11{grid-column-start:11}.panel-grid .g-start-lg-12{grid-column-start:12}.panel-grid .g-start-lg-13{grid-column-start:13}.panel-grid .g-start-lg-14{grid-column-start:14}.panel-grid .g-start-lg-15{grid-column-start:15}.panel-grid .g-start-lg-16{grid-column-start:16}.panel-grid .g-start-lg-17{grid-column-start:17}.panel-grid .g-start-lg-18{grid-column-start:18}.panel-grid .g-start-lg-19{grid-column-start:19}.panel-grid .g-start-lg-20{grid-column-start:20}.panel-grid .g-start-lg-21{grid-column-start:21}.panel-grid .g-start-lg-22{grid-column-start:22}.panel-grid .g-start-lg-23{grid-column-start:23}}@media(min-width: 1200px){.panel-grid .g-col-xl-1{grid-column:auto/span 1}.panel-grid .g-col-xl-2{grid-column:auto/span 2}.panel-grid .g-col-xl-3{grid-column:auto/span 3}.panel-grid .g-col-xl-4{grid-column:auto/span 4}.panel-grid .g-col-xl-5{grid-column:auto/span 5}.panel-grid .g-col-xl-6{grid-column:auto/span 6}.panel-grid .g-col-xl-7{grid-column:auto/span 7}.panel-grid .g-col-xl-8{grid-column:auto/span 8}.panel-grid .g-col-xl-9{grid-column:auto/span 9}.panel-grid .g-col-xl-10{grid-column:auto/span 10}.panel-grid .g-col-xl-11{grid-column:auto/span 11}.panel-grid .g-col-xl-12{grid-column:auto/span 12}.panel-grid .g-col-xl-13{grid-column:auto/span 13}.panel-grid .g-col-xl-14{grid-column:auto/span 14}.panel-grid .g-col-xl-15{grid-column:auto/span 15}.panel-grid .g-col-xl-16{grid-column:auto/span 16}.panel-grid .g-col-xl-17{grid-column:auto/span 17}.panel-grid .g-col-xl-18{grid-column:auto/span 18}.panel-grid .g-col-xl-19{grid-column:auto/span 19}.panel-grid .g-col-xl-20{grid-column:auto/span 20}.panel-grid .g-col-xl-21{grid-column:auto/span 21}.panel-grid .g-col-xl-22{grid-column:auto/span 22}.panel-grid .g-col-xl-23{grid-column:auto/span 23}.panel-grid .g-col-xl-24{grid-column:auto/span 24}.panel-grid .g-start-xl-1{grid-column-start:1}.panel-grid .g-start-xl-2{grid-column-start:2}.panel-grid .g-start-xl-3{grid-column-start:3}.panel-grid .g-start-xl-4{grid-column-start:4}.panel-grid .g-start-xl-5{grid-column-start:5}.panel-grid .g-start-xl-6{grid-column-start:6}.panel-grid .g-start-xl-7{grid-column-start:7}.panel-grid .g-start-xl-8{grid-column-start:8}.panel-grid .g-start-xl-9{grid-column-start:9}.panel-grid .g-start-xl-10{grid-column-start:10}.panel-grid .g-start-xl-11{grid-column-start:11}.panel-grid .g-start-xl-12{grid-column-start:12}.panel-grid .g-start-xl-13{grid-column-start:13}.panel-grid .g-start-xl-14{grid-column-start:14}.panel-grid .g-start-xl-15{grid-column-start:15}.panel-grid .g-start-xl-16{grid-column-start:16}.panel-grid .g-start-xl-17{grid-column-start:17}.panel-grid .g-start-xl-18{grid-column-start:18}.panel-grid .g-start-xl-19{grid-column-start:19}.panel-grid .g-start-xl-20{grid-column-start:20}.panel-grid .g-start-xl-21{grid-column-start:21}.panel-grid .g-start-xl-22{grid-column-start:22}.panel-grid .g-start-xl-23{grid-column-start:23}}@media(min-width: 1400px){.panel-grid .g-col-xxl-1{grid-column:auto/span 1}.panel-grid .g-col-xxl-2{grid-column:auto/span 2}.panel-grid .g-col-xxl-3{grid-column:auto/span 3}.panel-grid .g-col-xxl-4{grid-column:auto/span 4}.panel-grid .g-col-xxl-5{grid-column:auto/span 5}.panel-grid .g-col-xxl-6{grid-column:auto/span 6}.panel-grid .g-col-xxl-7{grid-column:auto/span 7}.panel-grid .g-col-xxl-8{grid-column:auto/span 8}.panel-grid .g-col-xxl-9{grid-column:auto/span 9}.panel-grid .g-col-xxl-10{grid-column:auto/span 10}.panel-grid .g-col-xxl-11{grid-column:auto/span 11}.panel-grid .g-col-xxl-12{grid-column:auto/span 12}.panel-grid .g-col-xxl-13{grid-column:auto/span 13}.panel-grid .g-col-xxl-14{grid-column:auto/span 14}.panel-grid .g-col-xxl-15{grid-column:auto/span 15}.panel-grid .g-col-xxl-16{grid-column:auto/span 16}.panel-grid .g-col-xxl-17{grid-column:auto/span 17}.panel-grid .g-col-xxl-18{grid-column:auto/span 18}.panel-grid .g-col-xxl-19{grid-column:auto/span 19}.panel-grid .g-col-xxl-20{grid-column:auto/span 20}.panel-grid .g-col-xxl-21{grid-column:auto/span 21}.panel-grid .g-col-xxl-22{grid-column:auto/span 22}.panel-grid .g-col-xxl-23{grid-column:auto/span 23}.panel-grid .g-col-xxl-24{grid-column:auto/span 24}.panel-grid .g-start-xxl-1{grid-column-start:1}.panel-grid .g-start-xxl-2{grid-column-start:2}.panel-grid .g-start-xxl-3{grid-column-start:3}.panel-grid .g-start-xxl-4{grid-column-start:4}.panel-grid .g-start-xxl-5{grid-column-start:5}.panel-grid .g-start-xxl-6{grid-column-start:6}.panel-grid .g-start-xxl-7{grid-column-start:7}.panel-grid .g-start-xxl-8{grid-column-start:8}.panel-grid .g-start-xxl-9{grid-column-start:9}.panel-grid .g-start-xxl-10{grid-column-start:10}.panel-grid .g-start-xxl-11{grid-column-start:11}.panel-grid .g-start-xxl-12{grid-column-start:12}.panel-grid .g-start-xxl-13{grid-column-start:13}.panel-grid .g-start-xxl-14{grid-column-start:14}.panel-grid .g-start-xxl-15{grid-column-start:15}.panel-grid .g-start-xxl-16{grid-column-start:16}.panel-grid .g-start-xxl-17{grid-column-start:17}.panel-grid .g-start-xxl-18{grid-column-start:18}.panel-grid .g-start-xxl-19{grid-column-start:19}.panel-grid .g-start-xxl-20{grid-column-start:20}.panel-grid .g-start-xxl-21{grid-column-start:21}.panel-grid .g-start-xxl-22{grid-column-start:22}.panel-grid .g-start-xxl-23{grid-column-start:23}}main{margin-top:1em;margin-bottom:1em}h1,.h1,h2,.h2{color:inherit;margin-top:2rem;margin-bottom:1rem;font-weight:600}h1.title,.title.h1{margin-top:0}main.content>section:first-of-type>h2:first-child,main.content>section:first-of-type>.h2:first-child{margin-top:0}h2,.h2{border-bottom:1px solid #dee2e6;padding-bottom:.5rem}h3,.h3{font-weight:600}h3,.h3,h4,.h4{opacity:.9;margin-top:1.5rem}h5,.h5,h6,.h6{opacity:.9}.header-section-number{color:#496985}.nav-link.active .header-section-number{color:inherit}mark,.mark{padding:0em}.panel-caption,.figure-caption,.subfigure-caption,.table-caption,figcaption,caption{font-size:.9rem;color:#496985}.quarto-layout-cell[data-ref-parent] caption{color:#496985}.column-margin figcaption,.margin-caption,div.aside,aside,.column-margin{color:#496985;font-size:.825rem}.panel-caption.margin-caption{text-align:inherit}.column-margin.column-container p{margin-bottom:0}.column-margin.column-container>*:not(.collapse):first-child{padding-bottom:.5em;display:block}.column-margin.column-container>*:not(.collapse):not(:first-child){padding-top:.5em;padding-bottom:.5em;display:block}.column-margin.column-container>*.collapse:not(.show){display:none}@media(min-width: 768px){.column-margin.column-container .callout-margin-content:first-child{margin-top:4.5em}.column-margin.column-container .callout-margin-content-simple:first-child{margin-top:3.5em}}.margin-caption>*{padding-top:.5em;padding-bottom:.5em}@media(max-width: 767.98px){.quarto-layout-row{flex-direction:column}}.nav-tabs .nav-item{margin-top:1px;cursor:pointer}.tab-content{margin-top:0px;border-left:#dee2e6 1px solid;border-right:#dee2e6 1px solid;border-bottom:#dee2e6 1px solid;margin-left:0;padding:1em;margin-bottom:1em}@media(max-width: 767.98px){.layout-sidebar{margin-left:0;margin-right:0}}.panel-sidebar,.panel-sidebar .form-control,.panel-input,.panel-input .form-control,.selectize-dropdown{font-size:.9rem}.panel-sidebar .form-control,.panel-input .form-control{padding-top:.1rem}.tab-pane div.sourceCode{margin-top:0px}.tab-pane>p{padding-top:0}.tab-pane>p:nth-child(1){padding-top:0}.tab-pane>p:last-child{margin-bottom:0}.tab-pane>pre:last-child{margin-bottom:0}.tab-content>.tab-pane:not(.active){display:none !important}div.sourceCode{background-color:#f5f5f5;border:1px solid #f5f5f5;border-radius:.25rem}pre.sourceCode{background-color:rgba(0,0,0,0)}pre.sourceCode{border:none;font-size:.875em;overflow:visible !important;padding:.4em}.callout pre.sourceCode{padding-left:0}div.sourceCode{overflow-y:hidden}.callout div.sourceCode{margin-left:initial}.blockquote{font-size:inherit;padding-left:1rem;padding-right:1.5rem;color:#496985}.blockquote h1:first-child,.blockquote .h1:first-child,.blockquote h2:first-child,.blockquote .h2:first-child,.blockquote h3:first-child,.blockquote .h3:first-child,.blockquote h4:first-child,.blockquote .h4:first-child,.blockquote h5:first-child,.blockquote .h5:first-child{margin-top:0}pre{background-color:initial;padding:initial;border:initial}p pre code:not(.sourceCode),li pre code:not(.sourceCode),pre code:not(.sourceCode){background-color:initial}p code:not(.sourceCode),li code:not(.sourceCode),td code:not(.sourceCode){background-color:#f5f5f5;padding:.2em}nav p code:not(.sourceCode),nav li code:not(.sourceCode),nav td code:not(.sourceCode){background-color:rgba(0,0,0,0);padding:0}td code:not(.sourceCode){white-space:pre-wrap}#quarto-embedded-source-code-modal>.modal-dialog{max-width:1000px;padding-left:1.75rem;padding-right:1.75rem}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body{padding:0}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body div.sourceCode{margin:0;padding:.2rem .2rem;border-radius:0px;border:none}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-header{padding:.7rem}.code-tools-button{font-size:1rem;padding:.15rem .15rem;margin-left:5px;color:#6c757d;background-color:rgba(0,0,0,0);transition:initial;cursor:pointer}.code-tools-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}.code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}.sidebar{will-change:top;transition:top 200ms linear;position:sticky;overflow-y:auto;padding-top:1.2em;max-height:100vh}.sidebar.toc-left,.sidebar.margin-sidebar{top:0px;padding-top:1em}.sidebar.quarto-banner-title-block-sidebar>*{padding-top:1.65em}figure .quarto-notebook-link{margin-top:.5em}.quarto-notebook-link{font-size:.75em;color:#6c757d;margin-bottom:1em;text-decoration:none;display:block}.quarto-notebook-link:hover{text-decoration:underline;color:#95b540}.quarto-notebook-link::before{display:inline-block;height:.75rem;width:.75rem;margin-bottom:0em;margin-right:.25em;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:.75rem .75rem}.toc-actions i.bi,.quarto-code-links i.bi,.quarto-other-links i.bi,.quarto-alternate-notebooks i.bi,.quarto-alternate-formats i.bi{margin-right:.4em;font-size:.8rem}.quarto-other-links-text-target .quarto-code-links i.bi,.quarto-other-links-text-target .quarto-other-links i.bi{margin-right:.2em}.quarto-other-formats-text-target .quarto-alternate-formats i.bi{margin-right:.1em}.toc-actions i.bi.empty,.quarto-code-links i.bi.empty,.quarto-other-links i.bi.empty,.quarto-alternate-notebooks i.bi.empty,.quarto-alternate-formats i.bi.empty{padding-left:1em}.quarto-notebook h2,.quarto-notebook .h2{border-bottom:none}.quarto-notebook .cell-container{display:flex}.quarto-notebook .cell-container .cell{flex-grow:4}.quarto-notebook .cell-container .cell-decorator{padding-top:1.5em;padding-right:1em;text-align:right}.quarto-notebook .cell-container.code-fold .cell-decorator{padding-top:3em}.quarto-notebook .cell-code code{white-space:pre-wrap}.quarto-notebook .cell .cell-output-stderr pre code,.quarto-notebook .cell .cell-output-stdout pre code{white-space:pre-wrap;overflow-wrap:anywhere}.toc-actions,.quarto-alternate-formats,.quarto-other-links,.quarto-code-links,.quarto-alternate-notebooks{padding-left:0em}.sidebar .toc-actions a,.sidebar .quarto-alternate-formats a,.sidebar .quarto-other-links a,.sidebar .quarto-code-links a,.sidebar .quarto-alternate-notebooks a,.sidebar nav[role=doc-toc] a{text-decoration:none}.sidebar .toc-actions a:hover,.sidebar .quarto-other-links a:hover,.sidebar .quarto-code-links a:hover,.sidebar .quarto-alternate-formats a:hover,.sidebar .quarto-alternate-notebooks a:hover{color:#95b540}.sidebar .toc-actions h2,.sidebar .toc-actions .h2,.sidebar .quarto-code-links h2,.sidebar .quarto-code-links .h2,.sidebar .quarto-other-links h2,.sidebar .quarto-other-links .h2,.sidebar .quarto-alternate-notebooks h2,.sidebar .quarto-alternate-notebooks .h2,.sidebar .quarto-alternate-formats h2,.sidebar .quarto-alternate-formats .h2,.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-weight:500;margin-bottom:.2rem;margin-top:.3rem;font-family:inherit;border-bottom:0;padding-bottom:0;padding-top:0px}.sidebar .toc-actions>h2,.sidebar .toc-actions>.h2,.sidebar .quarto-code-links>h2,.sidebar .quarto-code-links>.h2,.sidebar .quarto-other-links>h2,.sidebar .quarto-other-links>.h2,.sidebar .quarto-alternate-notebooks>h2,.sidebar .quarto-alternate-notebooks>.h2,.sidebar .quarto-alternate-formats>h2,.sidebar .quarto-alternate-formats>.h2{font-size:.8rem}.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-size:.875rem}.sidebar nav[role=doc-toc]>ul a{border-left:1px solid #e9ecef;padding-left:.6rem}.sidebar .toc-actions h2>ul a,.sidebar .toc-actions .h2>ul a,.sidebar .quarto-code-links h2>ul a,.sidebar .quarto-code-links .h2>ul a,.sidebar .quarto-other-links h2>ul a,.sidebar .quarto-other-links .h2>ul a,.sidebar .quarto-alternate-notebooks h2>ul a,.sidebar .quarto-alternate-notebooks .h2>ul a,.sidebar .quarto-alternate-formats h2>ul a,.sidebar .quarto-alternate-formats .h2>ul a{border-left:none;padding-left:.6rem}.sidebar .toc-actions ul a:empty,.sidebar .quarto-code-links ul a:empty,.sidebar .quarto-other-links ul a:empty,.sidebar .quarto-alternate-notebooks ul a:empty,.sidebar .quarto-alternate-formats ul a:empty,.sidebar nav[role=doc-toc]>ul a:empty{display:none}.sidebar .toc-actions ul,.sidebar .quarto-code-links ul,.sidebar .quarto-other-links ul,.sidebar .quarto-alternate-notebooks ul,.sidebar .quarto-alternate-formats ul{padding-left:0;list-style:none}.sidebar nav[role=doc-toc] ul{list-style:none;padding-left:0;list-style:none}.sidebar nav[role=doc-toc]>ul{margin-left:.45em}.quarto-margin-sidebar nav[role=doc-toc]{padding-left:.5em}.sidebar .toc-actions>ul,.sidebar .quarto-code-links>ul,.sidebar .quarto-other-links>ul,.sidebar .quarto-alternate-notebooks>ul,.sidebar .quarto-alternate-formats>ul{font-size:.8rem}.sidebar nav[role=doc-toc]>ul{font-size:.875rem}.sidebar .toc-actions ul li a,.sidebar .quarto-code-links ul li a,.sidebar .quarto-other-links ul li a,.sidebar .quarto-alternate-notebooks ul li a,.sidebar .quarto-alternate-formats ul li a,.sidebar nav[role=doc-toc]>ul li a{line-height:1.1rem;padding-bottom:.2rem;padding-top:.2rem;color:inherit}.sidebar nav[role=doc-toc] ul>li>ul>li>a{padding-left:1.2em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>a{padding-left:2.4em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>a{padding-left:3.6em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:4.8em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:6em}.sidebar nav[role=doc-toc] ul>li>a.active,.sidebar nav[role=doc-toc] ul>li>ul>li>a.active{border-left:1px solid #95b540;color:#95b540 !important}.sidebar nav[role=doc-toc] ul>li>a:hover,.sidebar nav[role=doc-toc] ul>li>ul>li>a:hover{color:#95b540 !important}kbd,.kbd{color:#1c2833;background-color:#f8f9fa;border:1px solid;border-radius:5px;border-color:#dee2e6}.quarto-appendix-contents div.hanging-indent{margin-left:0em}.quarto-appendix-contents div.hanging-indent div.csl-entry{margin-left:1em;text-indent:-1em}.citation a,.footnote-ref{text-decoration:none}.footnotes ol{padding-left:1em}.tippy-content>*{margin-bottom:.7em}.tippy-content>*:last-child{margin-bottom:0}.callout{margin-top:1.25rem;margin-bottom:1.25rem;border-radius:.25rem;overflow-wrap:break-word}.callout .callout-title-container{overflow-wrap:anywhere}.callout.callout-style-simple{padding:.4em .7em;border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout.callout-style-default{border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout .callout-body-container{flex-grow:1}.callout.callout-style-simple .callout-body{font-size:.9rem;font-weight:400}.callout.callout-style-default .callout-body{font-size:.9rem;font-weight:400}.callout:not(.no-icon).callout-titled.callout-style-simple .callout-body{padding-left:1.6em}.callout.callout-titled>.callout-header{padding-top:.2em;margin-bottom:-0.2em}.callout.callout-style-simple>div.callout-header{border-bottom:none;font-size:.9rem;font-weight:600;opacity:75%}.callout.callout-style-default>div.callout-header{border-bottom:none;font-weight:600;opacity:85%;font-size:.9rem;padding-left:.5em;padding-right:.5em}.callout.callout-style-default .callout-body{padding-left:.5em;padding-right:.5em}.callout.callout-style-default .callout-body>:first-child{padding-top:.5rem;margin-top:0}.callout>div.callout-header[data-bs-toggle=collapse]{cursor:pointer}.callout.callout-style-default .callout-header[aria-expanded=false],.callout.callout-style-default .callout-header[aria-expanded=true]{padding-top:0px;margin-bottom:0px;align-items:center}.callout.callout-titled .callout-body>:last-child:not(.sourceCode),.callout.callout-titled .callout-body>div>:last-child:not(.sourceCode){padding-bottom:.5rem;margin-bottom:0}.callout:not(.callout-titled) .callout-body>:first-child,.callout:not(.callout-titled) .callout-body>div>:first-child{margin-top:.25rem}.callout:not(.callout-titled) .callout-body>:last-child,.callout:not(.callout-titled) .callout-body>div>:last-child{margin-bottom:.2rem}.callout.callout-style-simple .callout-icon::before,.callout.callout-style-simple .callout-toggle::before{height:1rem;width:1rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.callout.callout-style-default .callout-icon::before,.callout.callout-style-default .callout-toggle::before{height:.9rem;width:.9rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:.9rem .9rem}.callout.callout-style-default .callout-toggle::before{margin-top:5px}.callout .callout-btn-toggle .callout-toggle::before{transition:transform .2s linear}.callout .callout-header[aria-expanded=false] .callout-toggle::before{transform:rotate(-90deg)}.callout .callout-header[aria-expanded=true] .callout-toggle::before{transform:none}.callout.callout-style-simple:not(.no-icon) div.callout-icon-container{padding-top:.2em;padding-right:.55em}.callout.callout-style-default:not(.no-icon) div.callout-icon-container{padding-top:.1em;padding-right:.35em}.callout.callout-style-default:not(.no-icon) div.callout-title-container{margin-top:-1px}.callout.callout-style-default.callout-caution:not(.no-icon) div.callout-icon-container{padding-top:.3em;padding-right:.35em}.callout>.callout-body>.callout-icon-container>.no-icon,.callout>.callout-header>.callout-icon-container>.no-icon{display:none}div.callout.callout{border-left-color:#6c757d}div.callout.callout-style-default>.callout-header{background-color:#6c757d}div.callout-note.callout{border-left-color:#0d6efd}div.callout-note.callout-style-default>.callout-header{background-color:#e7f1ff}div.callout-note:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-tip.callout{border-left-color:#198754}div.callout-tip.callout-style-default>.callout-header{background-color:#e8f3ee}div.callout-tip:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-warning.callout{border-left-color:#ffc107}div.callout-warning.callout-style-default>.callout-header{background-color:#fff9e6}div.callout-warning:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-caution.callout{border-left-color:#fd7e14}div.callout-caution.callout-style-default>.callout-header{background-color:#fff2e8}div.callout-caution:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-important.callout{border-left-color:#dc3545}div.callout-important.callout-style-default>.callout-header{background-color:#fcebec}div.callout-important:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important .callout-toggle::before{background-image:url('data:image/svg+xml,')}.quarto-toggle-container{display:flex;align-items:center}.quarto-reader-toggle .bi::before,.quarto-color-scheme-toggle .bi::before{display:inline-block;height:1rem;width:1rem;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.sidebar-navigation{padding-left:20px}.navbar{background-color:#e9f2d1;color:#4d5045}.navbar .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.quarto-sidebar-toggle{border-color:#dee2e6;border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;border-style:solid;border-width:1px;overflow:hidden;border-top-width:0px;padding-top:0px !important}.quarto-sidebar-toggle-title{cursor:pointer;padding-bottom:2px;margin-left:.25em;text-align:center;font-weight:400;font-size:.775em}#quarto-content .quarto-sidebar-toggle{background:#fafafa}#quarto-content .quarto-sidebar-toggle-title{color:#1c2833}.quarto-sidebar-toggle-icon{color:#dee2e6;margin-right:.5em;float:right;transition:transform .2s ease}.quarto-sidebar-toggle-icon::before{padding-top:5px}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-icon{transform:rotate(-180deg)}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-title{border-bottom:solid #dee2e6 1px}.quarto-sidebar-toggle-contents{background-color:#fff;padding-right:10px;padding-left:10px;margin-top:0px !important;transition:max-height .5s ease}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-contents{padding-top:1em;padding-bottom:10px}@media(max-width: 767.98px){.sidebar-menu-container{padding-bottom:5em}}.quarto-sidebar-toggle:not(.expanded) .quarto-sidebar-toggle-contents{padding-top:0px !important;padding-bottom:0px}nav[role=doc-toc]{z-index:1020}#quarto-sidebar>*,nav[role=doc-toc]>*{transition:opacity .1s ease,border .1s ease}#quarto-sidebar.slow>*,nav[role=doc-toc].slow>*{transition:opacity .4s ease,border .4s ease}.quarto-color-scheme-toggle:not(.alternate).top-right .bi::before{background-image:url('data:image/svg+xml,')}.quarto-color-scheme-toggle.alternate.top-right .bi::before{background-image:url('data:image/svg+xml,')}#quarto-appendix.default{border-top:1px solid #dee2e6}#quarto-appendix.default{background-color:#fff;padding-top:1.5em;margin-top:2em;z-index:998}#quarto-appendix.default .quarto-appendix-heading{margin-top:0;line-height:1.4em;font-weight:600;opacity:.9;border-bottom:none;margin-bottom:0}#quarto-appendix.default .footnotes ol,#quarto-appendix.default .footnotes ol li>p:last-of-type,#quarto-appendix.default .quarto-appendix-contents>p:last-of-type{margin-bottom:0}#quarto-appendix.default .footnotes ol{margin-left:.5em}#quarto-appendix.default .quarto-appendix-secondary-label{margin-bottom:.4em}#quarto-appendix.default .quarto-appendix-bibtex{font-size:.7em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-bibtex code.sourceCode{white-space:pre-wrap}#quarto-appendix.default .quarto-appendix-citeas{font-size:.9em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-heading{font-size:1em !important}#quarto-appendix.default *[role=doc-endnotes]>ol,#quarto-appendix.default .quarto-appendix-contents>*:not(h2):not(.h2){font-size:.9em}#quarto-appendix.default section{padding-bottom:1.5em}#quarto-appendix.default section *[role=doc-endnotes],#quarto-appendix.default section>*:not(a){opacity:.9;word-wrap:break-word}.btn.btn-quarto,div.cell-output-display .btn-quarto{--bs-btn-color: #373e22;--bs-btn-bg: #BDD775;--bs-btn-border-color: #BDD775;--bs-btn-hover-color: #373e22;--bs-btn-hover-bg: #c7dd8a;--bs-btn-hover-border-color: #c4db83;--bs-btn-focus-shadow-rgb: 169, 192, 105;--bs-btn-active-color: #000;--bs-btn-active-bg: #cadf91;--bs-btn-active-border-color: #c4db83;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #BDD775;--bs-btn-disabled-border-color: #BDD775}nav.quarto-secondary-nav.color-navbar{background-color:#e9f2d1;color:#4d5045}nav.quarto-secondary-nav.color-navbar h1,nav.quarto-secondary-nav.color-navbar .h1,nav.quarto-secondary-nav.color-navbar .quarto-btn-toggle{color:#4d5045}@media(max-width: 991.98px){body.nav-sidebar .quarto-title-banner{margin-bottom:0;padding-bottom:1em}body.nav-sidebar #title-block-header{margin-block-end:0}}p.subtitle{margin-top:.25em;margin-bottom:.5em}code a:any-link{color:inherit;text-decoration-color:#6c757d}/*! light */div.observablehq table thead tr th{background-color:var(--bs-body-bg)}input,button,select,optgroup,textarea{background-color:var(--bs-body-bg)}.code-annotated .code-copy-button{margin-right:1.25em;margin-top:0;padding-bottom:0;padding-top:3px}.code-annotation-gutter-bg{background-color:#fff}.code-annotation-gutter{background-color:#f5f5f5}.code-annotation-gutter,.code-annotation-gutter-bg{height:100%;width:calc(20px + .5em);position:absolute;top:0;right:0}dl.code-annotation-container-grid dt{margin-right:1em;margin-top:.25rem}dl.code-annotation-container-grid dt{font-family:"Fira Mono","Ubuntu Mono","Liberation Mono","Lucida Console","Courier","monospace";color:#2e4254;border:solid #2e4254 1px;border-radius:50%;height:22px;width:22px;line-height:22px;font-size:11px;text-align:center;vertical-align:middle;text-decoration:none}dl.code-annotation-container-grid dt[data-target-cell]{cursor:pointer}dl.code-annotation-container-grid dt[data-target-cell].code-annotation-active{color:#fff;border:solid #aaa 1px;background-color:#aaa}pre.code-annotation-code{padding-top:0;padding-bottom:0}pre.code-annotation-code code{z-index:3}#code-annotation-line-highlight-gutter{width:100%;border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}#code-annotation-line-highlight{margin-left:-4em;width:calc(100% + 4em);border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}code.sourceCode .code-annotation-anchor.code-annotation-active{background-color:var(--quarto-hl-normal-color, #aaaaaa);border:solid var(--quarto-hl-normal-color, #aaaaaa) 1px;color:#f5f5f5;font-weight:bolder}code.sourceCode .code-annotation-anchor{font-family:"Fira Mono","Ubuntu Mono","Liberation Mono","Lucida Console","Courier","monospace";color:var(--quarto-hl-co-color);border:solid var(--quarto-hl-co-color) 1px;border-radius:50%;height:18px;width:18px;font-size:9px;margin-top:2px}code.sourceCode button.code-annotation-anchor{padding:2px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none}code.sourceCode a.code-annotation-anchor{line-height:18px;text-align:center;vertical-align:middle;cursor:default;text-decoration:none}@media print{.page-columns .column-screen-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:page-start-inset/page-end-inset;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}}.quarto-video{margin-bottom:1em}.table{border-top:1px solid #cfdae5;border-bottom:1px solid #cfdae5}.table>thead{border-top-width:0;border-bottom:1px solid #8da8c1}.table a{word-break:break-word}.table>:not(caption)>*>*{background-color:unset;color:unset}#quarto-document-content .crosstalk-input .checkbox input[type=checkbox],#quarto-document-content .crosstalk-input .checkbox-inline input[type=checkbox]{position:unset;margin-top:unset;margin-left:unset}#quarto-document-content .row{margin-left:unset;margin-right:unset}.quarto-xref{white-space:nowrap}a.external:after{content:"";background-image:url('data:image/svg+xml,');background-size:contain;background-repeat:no-repeat;background-position:center center;margin-left:.2em;padding-right:.75em}div.sourceCode code a.external:after{content:none}a.external:after:hover{cursor:pointer}.quarto-ext-icon{display:inline-block;font-size:.75em;padding-left:.3em}.code-with-filename .code-with-filename-file{margin-bottom:0;padding-bottom:2px;padding-top:2px;padding-left:.7em;border:var(--quarto-border-width) solid var(--quarto-border-color);border-radius:var(--quarto-border-radius);border-bottom:0;border-bottom-left-radius:0%;border-bottom-right-radius:0%}.code-with-filename div.sourceCode,.reveal .code-with-filename div.sourceCode{margin-top:0;border-top-left-radius:0%;border-top-right-radius:0%}.code-with-filename .code-with-filename-file pre{margin-bottom:0}.code-with-filename .code-with-filename-file{background-color:rgba(219,219,219,.8)}.quarto-dark .code-with-filename .code-with-filename-file{background-color:#555}.code-with-filename .code-with-filename-file strong{font-weight:400}.quarto-title-banner{margin-bottom:1em;color:#4d5045;background:#e9f2d1}.quarto-title-banner a{color:#4d5045}.quarto-title-banner h1,.quarto-title-banner .h1,.quarto-title-banner h2,.quarto-title-banner .h2{color:#4d5045}.quarto-title-banner .code-tools-button{color:#828774}.quarto-title-banner .code-tools-button:hover{color:#4d5045}.quarto-title-banner .code-tools-button>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .quarto-title .title{font-weight:600}.quarto-title-banner .quarto-categories{margin-top:.75em}@media(min-width: 992px){.quarto-title-banner{padding-top:2.5em;padding-bottom:2.5em}}@media(max-width: 991.98px){.quarto-title-banner{padding-top:1em;padding-bottom:1em}}@media(max-width: 767.98px){body.hypothesis-enabled #title-block-header>*{padding-right:20px}}main.quarto-banner-title-block>section:first-child>h2,main.quarto-banner-title-block>section:first-child>.h2,main.quarto-banner-title-block>section:first-child>h3,main.quarto-banner-title-block>section:first-child>.h3,main.quarto-banner-title-block>section:first-child>h4,main.quarto-banner-title-block>section:first-child>.h4{margin-top:0}.quarto-title .quarto-categories{display:flex;flex-wrap:wrap;row-gap:.5em;column-gap:.4em;padding-bottom:.5em;margin-top:.75em}.quarto-title .quarto-categories .quarto-category{padding:.25em .75em;font-size:.65em;text-transform:uppercase;border:solid 1px;border-radius:.25rem;opacity:.6}.quarto-title .quarto-categories .quarto-category a{color:inherit}.quarto-title-meta-container{display:grid;grid-template-columns:1fr auto}.quarto-title-meta-column-end{display:flex;flex-direction:column;padding-left:1em}.quarto-title-meta-column-end a .bi{margin-right:.3em}#title-block-header.quarto-title-block.default .quarto-title-meta{display:grid;grid-template-columns:minmax(max-content, 1fr) 1fr;grid-column-gap:1em}#title-block-header.quarto-title-block.default .quarto-title .title{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-author-orcid img{margin-top:-0.2em;height:.8em;width:.8em}#title-block-header.quarto-title-block.default .quarto-title-author-email{opacity:.7}#title-block-header.quarto-title-block.default .quarto-description p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p,#title-block-header.quarto-title-block.default .quarto-title-authors p,#title-block-header.quarto-title-block.default .quarto-title-affiliations p{margin-bottom:.1em}#title-block-header.quarto-title-block.default .quarto-title-meta-heading{text-transform:uppercase;margin-top:1em;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-contents{font-size:.9em}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p.affiliation:last-of-type{margin-bottom:.1em}#title-block-header.quarto-title-block.default p.affiliation{margin-bottom:.1em}#title-block-header.quarto-title-block.default .keywords,#title-block-header.quarto-title-block.default .description,#title-block-header.quarto-title-block.default .abstract{margin-top:0}#title-block-header.quarto-title-block.default .keywords>p,#title-block-header.quarto-title-block.default .description>p,#title-block-header.quarto-title-block.default .abstract>p{font-size:.9em}#title-block-header.quarto-title-block.default .keywords>p:last-of-type,#title-block-header.quarto-title-block.default .description>p:last-of-type,#title-block-header.quarto-title-block.default .abstract>p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .keywords .block-title,#title-block-header.quarto-title-block.default .description .block-title,#title-block-header.quarto-title-block.default .abstract .block-title{margin-top:1em;text-transform:uppercase;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-author{display:grid;grid-template-columns:minmax(max-content, 1fr) 1fr;grid-column-gap:1em}.quarto-title-tools-only{display:flex;justify-content:right}.largest{font-size:1.953em}.larger{font-size:1.563em}.large{font-size:1.25em}.small{font-size:.8em}.smaller{font-size:.64em}.smallest{font-size:.512em}.fourofour{font-size:16rem;font-weight:700;color:#bdd775}.navbar-nav{font-size:.85em;letter-spacing:.1em}.navbar-logo{max-height:20px}.contents-table table{line-height:1.2}.listing-image img{height:40px;width:60px;-o-object-fit:cover;object-fit:cover}.badge,.badge-primary{background-color:#95b540}.badge-secondary{background-color:#bdd775}.btn-primary{background-color:#95b540;color:#f5f5f5}.btn-primary:hover{background-color:#bdd775;color:#f5f5f5}.btn-secondary{background-color:#bdd775;color:#f5f5f5}.btn-secondary:hover{background-color:#e9f2d1;color:#f5f5f5}.alert{border-radius:0}.quarto-title-block .quarto-title-banner{background-position:right}pre{line-height:1.4;background-color:#f5f5f5;border-radius:.25rem}pre:not(.sourceCode),pre:not([class]){padding:.4em}div.code-with-filename-file pre{padding:0;background-color:rgba(0,0,0,0)}code{color:#496985}.callout{border-radius:0 !important}.callout-style-default,.callout-style-simple{border:solid silver 1px !important}div.callout-note.callout-style-default>.callout-header{background-color:#e9f2d1}div.callout-note .callout-icon::before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiIgZmlsbD0iIzFjMjgzMyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjwhLS0hRm9udCBBd2Vzb21lIEZyZWUgNi41LjEgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20gTGljZW5zZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tL2xpY2Vuc2UvZnJlZSBDb3B5cmlnaHQgMjAyMyBGb250aWNvbnMsIEluYy4tLT48cGF0aCBkPSJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIxNiAzMzZoMjRWMjcySDIxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg0OGMxMy4zIDAgMjQgMTAuNyAyNCAyNHY4OGg4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDIxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptNDAtMjA4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiLz48L3N2Zz4=") !important}div.callout-tip .callout-icon::before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxMiIgZmlsbD0iIzFjMjgzMyIgdmlld0JveD0iMCAwIDM4NCA1MTIiPjwhLS0hRm9udCBBd2Vzb21lIEZyZWUgNi41LjEgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20gTGljZW5zZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tL2xpY2Vuc2UvZnJlZSBDb3B5cmlnaHQgMjAyMyBGb250aWNvbnMsIEluYy4tLT48cGF0aCBkPSJNMjcyIDM4NGM5LjYtMzEuOSAyOS41LTU5LjEgNDkuMi04Ni4ybDAgMGM1LjItNy4xIDEwLjQtMTQuMiAxNS40LTIxLjRjMTkuOC0yOC41IDMxLjQtNjMgMzEuNC0xMDAuM0MzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgMzcuMyAxMS42IDcxLjkgMzEuNCAxMDAuM2M1IDcuMiAxMC4yIDE0LjMgMTUuNCAyMS40bDAgMGMxOS44IDI3LjEgMzkuNyA1NC40IDQ5LjIgODYuMkgyNzJ6TTE5MiA1MTJjNDQuMiAwIDgwLTM1LjggODAtODBWNDE2SDExMnYxNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHpNMTEyIDE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmMtNDQuMiAwLTgwIDM1LjgtODAgODB6Ii8+PC9zdmc+") !important}div.callout-warning .callout-icon::before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiIgZmlsbD0iIzFjMjgzMyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjwhLS0hRm9udCBBd2Vzb21lIEZyZWUgNi41LjEgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20gTGljZW5zZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tL2xpY2Vuc2UvZnJlZSBDb3B5cmlnaHQgMjAyMyBGb250aWNvbnMsIEluYy4tLT48cGF0aCBkPSJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6bTAtMzg0YzEzLjMgMCAyNCAxMC43IDI0IDI0VjI2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYxNTJjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTIyNCAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiLz48L3N2Zz4=") !important}div.callout-caution .callout-icon::before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiIgZmlsbD0iIzFjMjgzMyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjwhLS0hRm9udCBBd2Vzb21lIEZyZWUgNi41LjEgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20gTGljZW5zZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tL2xpY2Vuc2UvZnJlZSBDb3B5cmlnaHQgMjAyMyBGb250aWNvbnMsIEluYy4tLT48cGF0aCBkPSJNMjU2IDMyYzE0LjIgMCAyNy4zIDcuNSAzNC41IDE5LjhsMjE2IDM2OGM3LjMgMTIuNCA3LjMgMjcuNyAuMiA0MC4xUzQ4Ni4zIDQ4MCA0NzIgNDgwSDQwYy0xNC4zIDAtMjcuNi03LjctMzQuNy0yMC4xcy03LTI3LjggLjItNDAuMWwyMTYtMzY4QzIyOC43IDM5LjUgMjQxLjggMzIgMjU2IDMyem0wIDEyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRWMjk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0em0zMiAyMjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiLz48L3N2Zz4=") !important}.callout-caution .callout-icon-container{padding-top:0 !important}div.callout-important .callout-icon::before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiIgZmlsbD0iIzFjMjgzMyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjwhLS0hRm9udCBBd2Vzb21lIEZyZWUgNi41LjEgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20gTGljZW5zZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tL2xpY2Vuc2UvZnJlZSBDb3B5cmlnaHQgMjAyMyBGb250aWNvbnMsIEluYy4tLT48cGF0aCBkPSJNNDE2IDM5OC45YzU4LjUtNDEuMSA5Ni0xMDQuMSA5Ni0xNzQuOUM1MTIgMTAwLjMgMzk3LjQgMCAyNTYgMFMwIDEwMC4zIDAgMjI0YzAgNzAuNyAzNy41IDEzMy44IDk2IDE3NC45YzAgLjQgMCAuNyAwIDEuMXY2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg0OFY0NjRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY0OGg2NFY0NjRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY0OGg0OGMyNi41IDAgNDgtMjEuNSA0OC00OFY0MDBjMC0uNCAwLS43IDAtMS4xek05NiAyNTZhNjQgNjQgMCAxIDEgMTI4IDBBNjQgNjQgMCAxIDEgOTYgMjU2em0yNTYtNjRhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Ii8+PC9zdmc+") !important}.table-schedule{font-size:.85em;line-height:1.8}.table-schedule tr:hover{background-color:#f5f5f5}.table-schedule table{margin:1em auto}.table-schedule .topic{color:#fff;font-weight:bold;border-radius:4px;padding:1px 4px;background:#bdbdbd}.table-schedule .topic-dinner{color:#fff;font-weight:bold;border-radius:4px;padding:1px 4px;background:#95b540}.table-schedule .marker{color:#95b540;margin-left:2px;margin-right:3px}.table-schedule td p{margin-bottom:0;padding:5px 0px}.tooltip-text{visibility:hidden;position:absolute;z-index:1;width:fit-content;color:#fff;background-color:#95b540;padding:5px;border-radius:4px}.hover-text:hover .tooltip-text{visibility:visible}.top{top:-55px;left:-60%}.hover-text{position:relative;display:inline-block;text-align:center}
diff --git a/2411/site_libs/bootstrap/bootstrap.min.js b/2411/site_libs/bootstrap/bootstrap.min.js
deleted file mode 100644
index e8f21f703..000000000
--- a/2411/site_libs/bootstrap/bootstrap.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap v5.3.1 (https://getbootstrap.com/)
- * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function j(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${j(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${j(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${j(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.1"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return n(e)},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",Mt="collapsing",jt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(Mt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(Mt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(jt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Me(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const je={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Me(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:Me(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==P(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],M=f?-T[$]/2:0,j=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-M-q-z-O.mainAxis:j-q-z-O.mainAxis,K=v?-E[$]/2+M+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,Mn=`hide${xn}`,jn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,jn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,jn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'
',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'