diff --git a/.gitignore b/.gitignore deleted file mode 100755 index 62c89355..00000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.idea/ \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..ecbc0593 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. \ No newline at end of file diff --git a/README.md b/README.md index df54c6b9..8e2913a5 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,42 @@ -# Módulo de Integração Gerencianet para WooCommerce Oficial +# Plugin Oficial Gerencianet para Wordpress/Woocommerce -O módulo Gerencianet para WooCommerce permite receber pagamentos por meio do checkout transparente da nossa API. -Compatível com as versões 5.x do WooCommerce. +Receba pagamentos por Boleto bancário, Pix e cartão de crédito em sua loja WooCommerce com a Gerencianet! + +## Suporte Técnico +Atenção: Para agilizar o atendimento, abra um ticket informando a falha apresentada. Você pode abrir um ticket [Clicando Aqui!](https://sistema.gerencianet.com.br/tickets/criar/) + +## Descrição Este é o Módulo Oficial de integração fornecido pela [Gerencianet](https://gerencianet.com.br/) para WooCommerce. Com ele, o proprietário da loja pode optar por receber pagamentos por boleto bancário, cartão de crédito e/ou Pix. Todo processo é realizado por meio do checkout transparente. Com isso, o comprador não precisa sair do site da loja para efetuar o pagamento. Caso você tenha alguma dúvida ou sugestão, entre em contato conosco pelo site [Gerencianet](https://gerencianet.com.br/fale-conosco/). -## Instalação automática +## Requisitos -1. Acesse o link em sua loja "Plugins" -> "Adicionar novo" -> No campo de busca, pesquise por "Woo Gerencianet Oficial" ([Link oficial do Plug-in](https://wordpress.org/plugins/woo-gerencianet-official/)). -2. Clique em "Instalar agora". -3. Após a instalação, clique em "Ativar o Plugin". -4. Configure o plugin em "WooCommerce" > "Configurações" > "Finalizar Compra" > "Gerencianet" e comece a receber pagamentos. +* Versão do PHP: 7.x ou 8.x +* Versão do WooCommerce: 5.x +* Versão do WordPress: 5.x -## Instalação manual +## Instalação automática -1. Faça o download da [última versão](auto/) do plugin. -2. Acesse o link em sua loja "Plugins" -> "Adicionar novo" -> "Fazer o upload do plugin" e envie o arquivo 'woo-gerencianet-official.zip' ou extraia o conteúdo do arquivo dentro do diretório de plugins da loja. -3. Após a instalação, clique em "Ativar o Plugin". -4. Configure o plugin em "WooCommerce" > "Configurações" > "Finalizar Compra" > "Gerencianet" e comece a receber pagamentos. +1. Acesse o link em sua loja "Plugins" -> "Adicionar novo" -> No campo de busca, pesquise por "Gerencianet Oficial". +2. Clique em "Instalar agora". +4. Após a instalação, clique em "Ativar o Plugin". +5. Configure o plugin em "WooCommerce" > "Configurações" > "Finalizar Compra" > "Gerencianet" e comece a receber pagamentos. -## Configuração + +## Configuração 1. Ative o plugin. -2. Configure as credenciais de sua Aplicação Gerencianet. Para criar uma nova Aplicação, entre em sua conta Gerencianet, acesse o menu "API" e clique em "Minhas Aplicações" -> "Nova aplicação". Insira as credenciais disponíveis neste link (Client ID e Client Secret de produção e desenvolvimento) nos respectivos campos de configuração do plugin. -3. Insira o Payee Code (Identificador de Conta) de sua conta Gerencianet. Para encontrar o Payee Code, entre em sua conta Gerencianet, acesse o menu "API" e clique em "Identificador de Conta". +2. Configure as credenciais de sua Aplicação Gerencianet. Para criar uma nova Aplicação, entre em sua conta Gerencianet, acesse o menu "API" e clique em "Aplicações" -> "Nova aplicação". Insira as credenciais disponíveis neste link (Client ID e Client Secret de produção e homologação) nos respectivos campos de configuração do plugin. +3. Insira o Payee Code (Identificador de Conta) de sua conta Gerencianet. Para encontrar o Payee Code, entre em sua conta Gerencianet, acesse o menu "API" e clique em "Introdução". 4. Configure as opções de pagamento que deseja receber: Boleto, Cartão de Crédito e/ou Pix. 5. Caso utilize a opção de Pix: - 1. Insira sua Chave Pix cadastrada em sua conta Gerencianet. - 2. Insira o seu certificado (arquivo .p12 ou .pem). - 3. Marque o campo "Validar mTLS" caso deseje utilizar a validação mTLS em seu servidor. + * Insira sua Chave Pix cadastrada em sua conta Gerencianet. + * Insira o seu certificado (arquivo .p12 ou .pem). + * Marque o campo "Validar mTLS" caso deseje utilizar a validação mTLS em seu servidor. 6. Defina se deseja aplicar desconto para pagamentos com Boleto, o modo de aplicar esse desconto e insira o número de dias corridos para vencimento. 7. Defina as instruções para pagamento no Boleto em quatro linhas de até 90 caracteres cada uma. Caso essas linhas não sejam definidas pelo lojista, será exibido no boleto as instruções padrões da Gerencianet. 8. Escolha se deseja que o plugin atualize os status dos pedidos da loja automaticamente, de acordo com as notificações de alteração do status da cobrança Gerencianet. 9. Configure se deseja ativar o Sandbox (ambiente de testes) e Debug. -10. Recomendamos que antes de disponibilizar pagamentos pela Gerencianet, o lojista realize testes de cobrança com o sandbox(ambiente de testes) ativado para verificar se o procedimento de pagamento está acontecendo conforme esperado. - -## Requisitos - -- Versão do PHP: 7.x ao 8.x -- Versão do WooCommerce: 5.x ao 6.x -- Versão do WordPress: 5.x ao 6.x +10. Recomendamos que antes de disponibilizar pagamentos pela Gerencianet, o lojista realize testes de cobrança com o sandbox(ambiente de testes) ativado para verificar se o procedimento de pagamento está acontecendo conforme esperado. \ No newline at end of file diff --git a/assets/css/bootstrap.css b/assets/css/bootstrap.css new file mode 100644 index 00000000..fbccec59 --- /dev/null +++ b/assets/css/bootstrap.css @@ -0,0 +1,10878 @@ +@charset "UTF-8"; +/*! + * Bootstrap v5.2.3 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-black: #000; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: #dee2e6; + --bs-border-color-translucent: rgba(0, 0, 0, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-2xl: 2rem; + --bs-border-radius-pill: 50rem; + --bs-link-color: #0d6efd; + --bs-link-hover-color: #0a58ca; + --bs-code-color: #d63384; + --bs-highlight-bg: #fff3cd; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +@media (prefers-reduced-motion: no-preference) { + :root { + scroll-behavior: smooth; + } +} + +body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +hr { + margin: 1rem 0; + color: inherit; + border: 0; + border-top: 1px solid; + opacity: 0.25; +} + +h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} + +h1, .h1 { + font-size: calc(1.375rem + 1.5vw); +} +@media (min-width: 1200px) { + h1, .h1 { + font-size: 2.5rem; + } +} + +h2, .h2 { + font-size: calc(1.325rem + 0.9vw); +} +@media (min-width: 1200px) { + h2, .h2 { + font-size: 2rem; + } +} + +h3, .h3 { + font-size: calc(1.3rem + 0.6vw); +} +@media (min-width: 1200px) { + h3, .h3 { + font-size: 1.75rem; + } +} + +h4, .h4 { + font-size: calc(1.275rem + 0.3vw); +} +@media (min-width: 1200px) { + h4, .h4 { + font-size: 1.5rem; + } +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title] { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + -webkit-text-decoration-skip-ink: none; + 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: 0.5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small, .small { + font-size: 0.875em; +} + +mark, .mark { + padding: 0.1875em; + 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: var(--bs-link-color); + text-decoration: underline; +} +a:hover { + color: var(--bs-link-hover-color); +} + +a:not([href]):not([class]), a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +pre, +code, +kbd, +samp { + font-family: var(--bs-font-monospace); + font-size: 1em; +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; +} +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +code { + font-size: 0.875em; + color: var(--bs-code-color); + word-wrap: break-word; +} +a > code { + color: inherit; +} + +kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--bs-body-bg); + background-color: var(--bs-body-color); + border-radius: 0.25rem; +} +kbd kbd { + padding: 0; + font-size: 1em; +} + +figure { + margin: 0 0 1rem; +} + +img, +svg { + vertical-align: middle; +} + +table { + caption-side: bottom; + border-collapse: collapse; +} + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: #6c757d; + text-align: left; +} + +th { + text-align: inherit; + text-align: -webkit-match-parent; +} + +thead, +tbody, +tfoot, +tr, +td, +th { + border-color: inherit; + border-style: solid; + border-width: 0; +} + +label { + display: inline-block; +} + +button { + border-radius: 0; +} + +button:focus:not(:focus-visible) { + outline: 0; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +select { + text-transform: none; +} + +[role=button] { + cursor: pointer; +} + +select { + word-wrap: normal; +} +select:disabled { + opacity: 1; +} + +[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator { + display: none !important; +} + +button, +[type=button], +[type=reset], +[type=submit] { + -webkit-appearance: button; +} +button:not(:disabled), +[type=button]:not(:disabled), +[type=reset]:not(:disabled), +[type=submit]:not(:disabled) { + cursor: pointer; +} + +::-moz-focus-inner { + padding: 0; + border-style: none; +} + +textarea { + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; +} +@media (min-width: 1200px) { + legend { + font-size: 1.5rem; + } +} +legend + * { + clear: left; +} + +::-webkit-datetime-edit-fields-wrapper, +::-webkit-datetime-edit-text, +::-webkit-datetime-edit-minute, +::-webkit-datetime-edit-hour-field, +::-webkit-datetime-edit-day-field, +::-webkit-datetime-edit-month-field, +::-webkit-datetime-edit-year-field { + padding: 0; +} + +::-webkit-inner-spin-button { + height: auto; +} + +[type=search] { + outline-offset: -2px; + -webkit-appearance: textfield; +} + +/* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ +::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-color-swatch-wrapper { + padding: 0; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +::file-selector-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +iframe { + border: 0; +} + +summary { + display: list-item; + cursor: pointer; +} + +progress { + vertical-align: baseline; +} + +[hidden] { + display: none !important; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-1 { + font-size: 5rem; + } +} + +.display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-2 { + font-size: 4.5rem; + } +} + +.display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-3 { + font-size: 4rem; + } +} + +.display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-4 { + font-size: 3.5rem; + } +} + +.display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-5 { + font-size: 3rem; + } +} + +.display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-6 { + font-size: 2.5rem; + } +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.initialism { + font-size: 0.875em; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} +.blockquote > :last-child { + margin-bottom: 0; +} + +.blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; +} +.blockquote-footer::before { + content: "— "; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid var(--bs-border-color); + border-radius: 0.375rem; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 0.875em; + color: #6c757d; +} + +.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) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.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; + } +} +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-0.5 * var(--bs-gutter-x)); + margin-left: calc(-0.5 * var(--bs-gutter-x)); +} +.row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} + +.col { + flex: 1 0 0%; +} + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; +} + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; +} + +.col-auto { + flex: 0 0 auto; + width: auto; +} + +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} + +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} + +.col-3 { + flex: 0 0 auto; + width: 25%; +} + +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} + +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} + +.col-6 { + flex: 0 0 auto; + width: 50%; +} + +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} + +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} + +.col-9 { + flex: 0 0 auto; + width: 75%; +} + +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} + +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} + +.col-12 { + flex: 0 0 auto; + width: 100%; +} + +.offset-1 { + margin-left: 8.33333333%; +} + +.offset-2 { + margin-left: 16.66666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.33333333%; +} + +.offset-5 { + margin-left: 41.66666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.33333333%; +} + +.offset-8 { + margin-left: 66.66666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.33333333%; +} + +.offset-11 { + margin-left: 91.66666667%; +} + +.g-0, +.gx-0 { + --bs-gutter-x: 0; +} + +.g-0, +.gy-0 { + --bs-gutter-y: 0; +} + +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; +} + +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; +} + +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; +} + +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; +} + +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; +} + +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; +} + +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; +} + +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; +} + +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; +} + +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; + } + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.33333333%; + } + .offset-sm-2 { + margin-left: 16.66666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.33333333%; + } + .offset-sm-5 { + margin-left: 41.66666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.33333333%; + } + .offset-sm-8 { + margin-left: 66.66666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.33333333%; + } + .offset-sm-11 { + margin-left: 91.66666667%; + } + .g-sm-0, +.gx-sm-0 { + --bs-gutter-x: 0; + } + .g-sm-0, +.gy-sm-0 { + --bs-gutter-y: 0; + } + .g-sm-1, +.gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + .g-sm-1, +.gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + .g-sm-2, +.gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + .g-sm-2, +.gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + .g-sm-3, +.gx-sm-3 { + --bs-gutter-x: 1rem; + } + .g-sm-3, +.gy-sm-3 { + --bs-gutter-y: 1rem; + } + .g-sm-4, +.gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + .g-sm-4, +.gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + .g-sm-5, +.gx-sm-5 { + --bs-gutter-x: 3rem; + } + .g-sm-5, +.gy-sm-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; + } + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-md-auto { + flex: 0 0 auto; + width: auto; + } + .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.33333333%; + } + .offset-md-2 { + margin-left: 16.66666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.33333333%; + } + .offset-md-5 { + margin-left: 41.66666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.33333333%; + } + .offset-md-8 { + margin-left: 66.66666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.33333333%; + } + .offset-md-11 { + margin-left: 91.66666667%; + } + .g-md-0, +.gx-md-0 { + --bs-gutter-x: 0; + } + .g-md-0, +.gy-md-0 { + --bs-gutter-y: 0; + } + .g-md-1, +.gx-md-1 { + --bs-gutter-x: 0.25rem; + } + .g-md-1, +.gy-md-1 { + --bs-gutter-y: 0.25rem; + } + .g-md-2, +.gx-md-2 { + --bs-gutter-x: 0.5rem; + } + .g-md-2, +.gy-md-2 { + --bs-gutter-y: 0.5rem; + } + .g-md-3, +.gx-md-3 { + --bs-gutter-x: 1rem; + } + .g-md-3, +.gy-md-3 { + --bs-gutter-y: 1rem; + } + .g-md-4, +.gx-md-4 { + --bs-gutter-x: 1.5rem; + } + .g-md-4, +.gy-md-4 { + --bs-gutter-y: 1.5rem; + } + .g-md-5, +.gx-md-5 { + --bs-gutter-x: 3rem; + } + .g-md-5, +.gy-md-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; + } + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.33333333%; + } + .offset-lg-2 { + margin-left: 16.66666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.33333333%; + } + .offset-lg-5 { + margin-left: 41.66666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.33333333%; + } + .offset-lg-8 { + margin-left: 66.66666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.33333333%; + } + .offset-lg-11 { + margin-left: 91.66666667%; + } + .g-lg-0, +.gx-lg-0 { + --bs-gutter-x: 0; + } + .g-lg-0, +.gy-lg-0 { + --bs-gutter-y: 0; + } + .g-lg-1, +.gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + .g-lg-1, +.gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + .g-lg-2, +.gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + .g-lg-2, +.gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + .g-lg-3, +.gx-lg-3 { + --bs-gutter-x: 1rem; + } + .g-lg-3, +.gy-lg-3 { + --bs-gutter-y: 1rem; + } + .g-lg-4, +.gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + .g-lg-4, +.gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + .g-lg-5, +.gx-lg-5 { + --bs-gutter-x: 3rem; + } + .g-lg-5, +.gy-lg-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; + } + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.33333333%; + } + .offset-xl-2 { + margin-left: 16.66666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.33333333%; + } + .offset-xl-5 { + margin-left: 41.66666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.33333333%; + } + .offset-xl-8 { + margin-left: 66.66666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.33333333%; + } + .offset-xl-11 { + margin-left: 91.66666667%; + } + .g-xl-0, +.gx-xl-0 { + --bs-gutter-x: 0; + } + .g-xl-0, +.gy-xl-0 { + --bs-gutter-y: 0; + } + .g-xl-1, +.gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + .g-xl-1, +.gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + .g-xl-2, +.gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + .g-xl-2, +.gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + .g-xl-3, +.gx-xl-3 { + --bs-gutter-x: 1rem; + } + .g-xl-3, +.gy-xl-3 { + --bs-gutter-y: 1rem; + } + .g-xl-4, +.gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + .g-xl-4, +.gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + .g-xl-5, +.gx-xl-5 { + --bs-gutter-x: 3rem; + } + .g-xl-5, +.gy-xl-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; + } + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-xxl-0 { + margin-left: 0; + } + .offset-xxl-1 { + margin-left: 8.33333333%; + } + .offset-xxl-2 { + margin-left: 16.66666667%; + } + .offset-xxl-3 { + margin-left: 25%; + } + .offset-xxl-4 { + margin-left: 33.33333333%; + } + .offset-xxl-5 { + margin-left: 41.66666667%; + } + .offset-xxl-6 { + margin-left: 50%; + } + .offset-xxl-7 { + margin-left: 58.33333333%; + } + .offset-xxl-8 { + margin-left: 66.66666667%; + } + .offset-xxl-9 { + margin-left: 75%; + } + .offset-xxl-10 { + margin-left: 83.33333333%; + } + .offset-xxl-11 { + margin-left: 91.66666667%; + } + .g-xxl-0, +.gx-xxl-0 { + --bs-gutter-x: 0; + } + .g-xxl-0, +.gy-xxl-0 { + --bs-gutter-y: 0; + } + .g-xxl-1, +.gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + .g-xxl-1, +.gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + .g-xxl-2, +.gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + .g-xxl-2, +.gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + .g-xxl-3, +.gx-xxl-3 { + --bs-gutter-x: 1rem; + } + .g-xxl-3, +.gy-xxl-3 { + --bs-gutter-y: 1rem; + } + .g-xxl-4, +.gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + .g-xxl-4, +.gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + .g-xxl-5, +.gx-xxl-5 { + --bs-gutter-x: 3rem; + } + .g-xxl-5, +.gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} +.table { + --bs-table-color: var(--bs-body-color); + --bs-table-bg: transparent; + --bs-table-border-color: var(--bs-border-color); + --bs-table-accent-bg: transparent; + --bs-table-striped-color: var(--bs-body-color); + --bs-table-striped-bg: rgba(0, 0, 0, 0.05); + --bs-table-active-color: var(--bs-body-color); + --bs-table-active-bg: rgba(0, 0, 0, 0.1); + --bs-table-hover-color: var(--bs-body-color); + --bs-table-hover-bg: rgba(0, 0, 0, 0.075); + width: 100%; + margin-bottom: 1rem; + color: var(--bs-table-color); + vertical-align: top; + border-color: var(--bs-table-border-color); +} +.table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + background-color: var(--bs-table-bg); + border-bottom-width: 1px; + box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); +} +.table > tbody { + vertical-align: inherit; +} +.table > thead { + vertical-align: bottom; +} + +.table-group-divider { + border-top: 2px solid currentcolor; +} + +.caption-top { + caption-side: top; +} + +.table-sm > :not(caption) > * > * { + padding: 0.25rem 0.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-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.table-striped-columns > :not(caption) > tr > :nth-child(even) { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.table-active { + --bs-table-accent-bg: var(--bs-table-active-bg); + color: var(--bs-table-active-color); +} + +.table-hover > tbody > tr:hover > * { + --bs-table-accent-bg: var(--bs-table-hover-bg); + color: var(--bs-table-hover-color); +} + +.table-primary { + --bs-table-color: #000; + --bs-table-bg: #cfe2ff; + --bs-table-border-color: #bacbe6; + --bs-table-striped-bg: #c5d7f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bacbe6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfd1ec; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-secondary { + --bs-table-color: #000; + --bs-table-bg: #e2e3e5; + --bs-table-border-color: #cbccce; + --bs-table-striped-bg: #d7d8da; + --bs-table-striped-color: #000; + --bs-table-active-bg: #cbccce; + --bs-table-active-color: #000; + --bs-table-hover-bg: #d1d2d4; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-success { + --bs-table-color: #000; + --bs-table-bg: #d1e7dd; + --bs-table-border-color: #bcd0c7; + --bs-table-striped-bg: #c7dbd2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bcd0c7; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c1d6cc; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-info { + --bs-table-color: #000; + --bs-table-bg: #cff4fc; + --bs-table-border-color: #badce3; + --bs-table-striped-bg: #c5e8ef; + --bs-table-striped-color: #000; + --bs-table-active-bg: #badce3; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfe2e9; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-warning { + --bs-table-color: #000; + --bs-table-bg: #fff3cd; + --bs-table-border-color: #e6dbb9; + --bs-table-striped-bg: #f2e7c3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6dbb9; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ece1be; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-danger { + --bs-table-color: #000; + --bs-table-bg: #f8d7da; + --bs-table-border-color: #dfc2c4; + --bs-table-striped-bg: #eccccf; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfc2c4; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5c7ca; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-light { + --bs-table-color: #000; + --bs-table-bg: #f8f9fa; + --bs-table-border-color: #dfe0e1; + --bs-table-striped-bg: #ecedee; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfe0e1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5e6e7; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-dark { + --bs-table-color: #fff; + --bs-table-bg: #212529; + --bs-table-border-color: #373b3e; + --bs-table-striped-bg: #2c3034; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #373b3e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #323539; + --bs-table-hover-color: #fff; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 767.98px) { + .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 991.98px) { + .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1199.98px) { + .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1399.98px) { + .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +.form-label { + margin-bottom: 0.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: 0.25rem; + font-size: 0.875em; + color: #6c757d; +} + +.form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0.375rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; + } +} +.form-control[type=file] { + overflow: hidden; +} +.form-control[type=file]:not(:disabled):not([readonly]) { + cursor: pointer; +} +.form-control:focus { + color: #212529; + background-color: #fff; + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-control::-webkit-date-and-time-value { + height: 1.5em; +} +.form-control::-moz-placeholder { + color: #6c757d; + opacity: 1; +} +.form-control::placeholder { + color: #6c757d; + opacity: 1; +} +.form-control:disabled { + background-color: #e9ecef; + opacity: 1; +} +.form-control::-webkit-file-upload-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + -webkit-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; + 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; +} +.form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control::-webkit-file-upload-button { + -webkit-transition: none; + transition: none; + } + .form-control::file-selector-button { + transition: none; + } +} +.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: #dde0e3; +} +.form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: #dde0e3; +} + +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + 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 + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} +.form-control-sm::-webkit-file-upload-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} +.form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} + +.form-control-lg { + min-height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} +.form-control-lg::-webkit-file-upload-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} +.form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} + +textarea.form-control { + min-height: calc(1.5em + 0.75rem + 2px); +} +textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); +} +textarea.form-control-lg { + min-height: calc(1.5em + 1rem + 2px); +} + +.form-control-color { + width: 3rem; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem; +} +.form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; +} +.form-control-color::-moz-color-swatch { + border: 0 !important; + border-radius: 0.375rem; +} +.form-control-color::-webkit-color-swatch { + border-radius: 0.375rem; +} +.form-control-color.form-control-sm { + height: calc(1.5em + 0.5rem + 2px); +} +.form-control-color.form-control-lg { + height: calc(1.5em + 1rem + 2px); +} + +.form-select { + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + -moz-padding-start: calc(0.75rem - 3px); + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-image: 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"); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: 1px solid #ced4da; + border-radius: 0.375rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-select { + transition: none; + } +} +.form-select:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-select[multiple], .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; +} +.form-select:disabled { + background-color: #e9ecef; +} +.form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #212529; +} + +.form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; +} +.form-check .form-check-input { + float: left; + margin-left: -1.5em; +} + +.form-check-reverse { + padding-right: 1.5em; + padding-left: 0; + text-align: right; +} +.form-check-reverse .form-check-input { + float: right; + margin-right: -1.5em; + margin-left: 0; +} + +.form-check-input { + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + background-color: #fff; + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: 1px solid rgba(0, 0, 0, 0.25); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + -webkit-print-color-adjust: exact; + color-adjust: exact; + print-color-adjust: exact; +} +.form-check-input[type=checkbox] { + border-radius: 0.25em; +} +.form-check-input[type=radio] { + border-radius: 50%; +} +.form-check-input:active { + filter: brightness(90%); +} +.form-check-input:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; +} +.form-check-input:checked[type=checkbox] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); +} +.form-check-input:checked[type=radio] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); +} +.form-check-input[type=checkbox]:indeterminate { + background-color: #0d6efd; + border-color: #0d6efd; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); +} +.form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; +} +.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { + cursor: default; + opacity: 0.5; +} + +.form-switch { + padding-left: 2.5em; +} +.form-switch .form-check-input { + width: 2em; + margin-left: -2.5em; + background-image: 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"); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-switch .form-check-input { + transition: none; + } +} +.form-switch .form-check-input:focus { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); +} +.form-switch .form-check-input:checked { + background-position: right center; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} +.form-switch.form-check-reverse { + padding-right: 2.5em; + padding-left: 0; +} +.form-switch.form-check-reverse .form-check-input { + margin-right: -2.5em; + margin-left: 0; +} + +.form-check-inline { + display: inline-block; + margin-right: 1rem; +} + +.btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.btn-check[disabled] + .btn, .btn-check:disabled + .btn { + pointer-events: none; + filter: none; + opacity: 0.65; +} + +.form-range { + width: 100%; + height: 1.5rem; + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +.form-range:focus { + outline: 0; +} +.form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-range::-moz-focus-outer { + border: 0; +} +.form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } +} +.form-range::-webkit-slider-thumb:active { + background-color: #b6d4fe; +} +.form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} +.form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-range::-moz-range-thumb { + -moz-transition: none; + transition: none; + } +} +.form-range::-moz-range-thumb:active { + background-color: #b6d4fe; +} +.form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} +.form-range:disabled { + pointer-events: none; +} +.form-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} +.form-range:disabled::-moz-range-thumb { + background-color: #adb5bd; +} + +.form-floating { + position: relative; +} +.form-floating > .form-control, +.form-floating > .form-control-plaintext, +.form-floating > .form-select { + height: calc(3.5rem + 2px); + line-height: 1.25; +} +.form-floating > label { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + padding: 1rem 0.75rem; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + border: 1px solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-floating > label { + transition: none; + } +} +.form-floating > .form-control, +.form-floating > .form-control-plaintext { + padding: 1rem 0.75rem; +} +.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder { + color: transparent; +} +.form-floating > .form-control::placeholder, +.form-floating > .form-control-plaintext::placeholder { + color: transparent; +} +.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown), +.form-floating > .form-control-plaintext:focus, +.form-floating > .form-control-plaintext:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:-webkit-autofill, +.form-floating > .form-control-plaintext:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.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 { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control:-webkit-autofill ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control-plaintext ~ label { + border-width: 1px 0; +} + +.input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} +.input-group > .form-control, +.input-group > .form-select, +.input-group > .form-floating { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; +} +.input-group > .form-control:focus, +.input-group > .form-select:focus, +.input-group > .form-floating:focus-within { + z-index: 5; +} +.input-group .btn { + position: relative; + z-index: 2; +} +.input-group .btn:focus { + z-index: 5; +} + +.input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.375rem; +} + +.input-group-lg > .form-control, +.input-group-lg > .form-select, +.input-group-lg > .input-group-text, +.input-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.input-group-sm > .form-control, +.input-group-sm > .form-select, +.input-group-sm > .input-group-text, +.input-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.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: -1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group > .form-floating:not(:first-child) > .form-control, +.input-group > .form-floating:not(:first-child) > .form-select { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #198754; +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(25, 135, 84, 0.9); + border-radius: 0.375rem; +} + +.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 0.25rem rgba(25, 135, 84, 0.25); +} + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .form-select:valid, .form-select.is-valid { + border-color: #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"] { + padding-right: 4.125rem; + background-image: 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"), 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-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-select:valid:focus, .form-select.is-valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.was-validated .form-control-color:valid, .form-control-color.is-valid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.was-validated .form-check-input:valid, .form-check-input.is-valid { + border-color: #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 0.25rem rgba(25, 135, 84, 0.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: 0.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: 0.25rem; + font-size: 0.875em; + color: #dc3545; +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.375rem; +} + +.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 0.25rem rgba(220, 53, 69, 0.25); +} + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .form-select:invalid, .form-select.is-invalid { + border-color: #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"] { + padding-right: 4.125rem; + background-image: 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"), 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-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.was-validated .form-control-color:invalid, .form-control-color.is-invalid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.was-validated .form-check-input:invalid, .form-check-input.is-invalid { + border-color: #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 0.25rem rgba(220, 53, 69, 0.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: 0.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: #212529; + --bs-btn-bg: transparent; + --bs-btn-border-width: 1px; + --bs-btn-border-color: transparent; + --bs-btn-border-radius: 0.375rem; + --bs-btn-hover-border-color: transparent; + --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + --bs-btn-disabled-opacity: 0.65; + --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5); + display: inline-block; + padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x); + font-family: var(--bs-btn-font-family); + font-size: var(--bs-btn-font-size); + font-weight: var(--bs-btn-font-weight); + line-height: var(--bs-btn-line-height); + color: var(--bs-btn-color); + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); + border-radius: var(--bs-btn-border-radius); + background-color: var(--bs-btn-bg); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} +.btn:hover { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); +} +.btn-check + .btn:hover { + color: var(--bs-btn-color); + background-color: var(--bs-btn-bg); + border-color: var(--bs-btn-border-color); +} +.btn:focus-visible { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} +.btn-check:focus-visible + .btn { + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} +.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show { + color: var(--bs-btn-active-color); + background-color: var(--bs-btn-active-bg); + border-color: var(--bs-btn-active-border-color); +} +.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible { + box-shadow: var(--bs-btn-focus-box-shadow); +} +.btn:disabled, .btn.disabled, fieldset:disabled .btn { + color: var(--bs-btn-disabled-color); + pointer-events: none; + background-color: var(--bs-btn-disabled-bg); + border-color: var(--bs-btn-disabled-border-color); + opacity: var(--bs-btn-disabled-opacity); +} + +.btn-primary { + --bs-btn-color: #fff; + --bs-btn-bg: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0b5ed7; + --bs-btn-hover-border-color: #0a58ca; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0a58ca; + --bs-btn-active-border-color: #0a53be; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #0d6efd; + --bs-btn-disabled-border-color: #0d6efd; +} + +.btn-secondary { + --bs-btn-color: #fff; + --bs-btn-bg: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #5c636a; + --bs-btn-hover-border-color: #565e64; + --bs-btn-focus-shadow-rgb: 130, 138, 145; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #565e64; + --bs-btn-active-border-color: #51585e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #6c757d; + --bs-btn-disabled-border-color: #6c757d; +} + +.btn-success { + --bs-btn-color: #fff; + --bs-btn-bg: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #157347; + --bs-btn-hover-border-color: #146c43; + --bs-btn-focus-shadow-rgb: 60, 153, 110; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #146c43; + --bs-btn-active-border-color: #13653f; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #198754; + --bs-btn-disabled-border-color: #198754; +} + +.btn-info { + --bs-btn-color: #000; + --bs-btn-bg: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #31d2f2; + --bs-btn-hover-border-color: #25cff2; + --bs-btn-focus-shadow-rgb: 11, 172, 204; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #3dd5f3; + --bs-btn-active-border-color: #25cff2; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #0dcaf0; + --bs-btn-disabled-border-color: #0dcaf0; +} + +.btn-warning { + --bs-btn-color: #000; + --bs-btn-bg: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffca2c; + --bs-btn-hover-border-color: #ffc720; + --bs-btn-focus-shadow-rgb: 217, 164, 6; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffcd39; + --bs-btn-active-border-color: #ffc720; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ffc107; + --bs-btn-disabled-border-color: #ffc107; +} + +.btn-danger { + --bs-btn-color: #fff; + --bs-btn-bg: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #bb2d3b; + --bs-btn-hover-border-color: #b02a37; + --bs-btn-focus-shadow-rgb: 225, 83, 97; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #b02a37; + --bs-btn-active-border-color: #a52834; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #dc3545; + --bs-btn-disabled-border-color: #dc3545; +} + +.btn-light { + --bs-btn-color: #000; + --bs-btn-bg: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #d3d4d5; + --bs-btn-hover-border-color: #c6c7c8; + --bs-btn-focus-shadow-rgb: 211, 212, 213; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #c6c7c8; + --bs-btn-active-border-color: #babbbc; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #f8f9fa; + --bs-btn-disabled-border-color: #f8f9fa; +} + +.btn-dark { + --bs-btn-color: #fff; + --bs-btn-bg: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #424649; + --bs-btn-hover-border-color: #373b3e; + --bs-btn-focus-shadow-rgb: 66, 70, 73; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #4d5154; + --bs-btn-active-border-color: #373b3e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #212529; + --bs-btn-disabled-border-color: #212529; +} + +.btn-outline-primary { + --bs-btn-color: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0d6efd; + --bs-btn-hover-border-color: #0d6efd; + --bs-btn-focus-shadow-rgb: 13, 110, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0d6efd; + --bs-btn-active-border-color: #0d6efd; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0d6efd; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0d6efd; + --bs-gradient: none; +} + +.btn-outline-secondary { + --bs-btn-color: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #6c757d; + --bs-btn-hover-border-color: #6c757d; + --bs-btn-focus-shadow-rgb: 108, 117, 125; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #6c757d; + --bs-btn-active-border-color: #6c757d; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #6c757d; + --bs-gradient: none; +} + +.btn-outline-success { + --bs-btn-color: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #198754; + --bs-btn-hover-border-color: #198754; + --bs-btn-focus-shadow-rgb: 25, 135, 84; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #198754; + --bs-btn-active-border-color: #198754; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #198754; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #198754; + --bs-gradient: none; +} + +.btn-outline-info { + --bs-btn-color: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #0dcaf0; + --bs-btn-hover-border-color: #0dcaf0; + --bs-btn-focus-shadow-rgb: 13, 202, 240; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #0dcaf0; + --bs-btn-active-border-color: #0dcaf0; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0dcaf0; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0dcaf0; + --bs-gradient: none; +} + +.btn-outline-warning { + --bs-btn-color: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffc107; + --bs-btn-hover-border-color: #ffc107; + --bs-btn-focus-shadow-rgb: 255, 193, 7; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffc107; + --bs-btn-active-border-color: #ffc107; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ffc107; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ffc107; + --bs-gradient: none; +} + +.btn-outline-danger { + --bs-btn-color: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #dc3545; + --bs-btn-hover-border-color: #dc3545; + --bs-btn-focus-shadow-rgb: 220, 53, 69; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #dc3545; + --bs-btn-active-border-color: #dc3545; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #dc3545; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #dc3545; + --bs-gradient: none; +} + +.btn-outline-light { + --bs-btn-color: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #f8f9fa; + --bs-btn-hover-border-color: #f8f9fa; + --bs-btn-focus-shadow-rgb: 248, 249, 250; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #f8f9fa; + --bs-btn-active-border-color: #f8f9fa; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #f8f9fa; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #f8f9fa; + --bs-gradient: none; +} + +.btn-outline-dark { + --bs-btn-color: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #212529; + --bs-btn-hover-border-color: #212529; + --bs-btn-focus-shadow-rgb: 33, 37, 41; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #212529; + --bs-btn-active-border-color: #212529; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #212529; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #212529; + --bs-gradient: none; +} + +.btn-link { + --bs-btn-font-weight: 400; + --bs-btn-color: var(--bs-link-color); + --bs-btn-bg: transparent; + --bs-btn-border-color: transparent; + --bs-btn-hover-color: var(--bs-link-hover-color); + --bs-btn-hover-border-color: transparent; + --bs-btn-active-color: var(--bs-link-hover-color); + --bs-btn-active-border-color: transparent; + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-border-color: transparent; + --bs-btn-box-shadow: none; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + text-decoration: underline; +} +.btn-link:focus-visible { + color: var(--bs-btn-color); +} +.btn-link:hover { + color: var(--bs-btn-hover-color); +} + +.btn-lg, .btn-group-lg > .btn { + --bs-btn-padding-y: 0.5rem; + --bs-btn-padding-x: 1rem; + --bs-btn-font-size: 1.25rem; + --bs-btn-border-radius: 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.25rem; +} + +.fade { + transition: opacity 0.15s linear; +} +@media (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} +.collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .collapsing.collapse-horizontal { + transition: none; + } +} + +.dropup, +.dropend, +.dropdown, +.dropstart, +.dropup-center, +.dropdown-center { + position: relative; +} + +.dropdown-toggle { + white-space: nowrap; +} +.dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} +.dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropdown-menu { + --bs-dropdown-zindex: 1000; + --bs-dropdown-min-width: 10rem; + --bs-dropdown-padding-x: 0; + --bs-dropdown-padding-y: 0.5rem; + --bs-dropdown-spacer: 0.125rem; + --bs-dropdown-font-size: 1rem; + --bs-dropdown-color: #212529; + --bs-dropdown-bg: #fff; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-border-radius: 0.375rem; + --bs-dropdown-border-width: 1px; + --bs-dropdown-inner-border-radius: calc(0.375rem - 1px); + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --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: #212529; + --bs-dropdown-link-hover-color: #1e2125; + --bs-dropdown-link-hover-bg: #e9ecef; + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-item-padding-x: 1rem; + --bs-dropdown-item-padding-y: 0.25rem; + --bs-dropdown-header-color: #6c757d; + --bs-dropdown-header-padding-x: 1rem; + --bs-dropdown-header-padding-y: 0.5rem; + position: absolute; + z-index: var(--bs-dropdown-zindex); + display: none; + min-width: var(--bs-dropdown-min-width); + padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x); + margin: 0; + font-size: var(--bs-dropdown-font-size); + color: var(--bs-dropdown-color); + text-align: left; + list-style: none; + background-color: var(--bs-dropdown-bg); + background-clip: padding-box; + border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color); + border-radius: var(--bs-dropdown-border-radius); +} +.dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--bs-dropdown-spacer); +} + +.dropdown-menu-start { + --bs-position: start; +} +.dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; +} + +.dropdown-menu-end { + --bs-position: end; +} +.dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .dropdown-menu-sm-start { + --bs-position: start; + } + .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-sm-end { + --bs-position: end; + } + .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 768px) { + .dropdown-menu-md-start { + --bs-position: start; + } + .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-md-end { + --bs-position: end; + } + .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 992px) { + .dropdown-menu-lg-start { + --bs-position: start; + } + .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-lg-end { + --bs-position: end; + } + .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1200px) { + .dropdown-menu-xl-start { + --bs-position: start; + } + .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-xl-end { + --bs-position: end; + } + .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1400px) { + .dropdown-menu-xxl-start { + --bs-position: start; + } + .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-xxl-end { + --bs-position: end; + } + .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +.dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--bs-dropdown-spacer); +} +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--bs-dropdown-spacer); +} +.dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} +.dropend .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropend .dropdown-toggle::after { + vertical-align: 0; +} + +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--bs-dropdown-spacer); +} +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} +.dropstart .dropdown-toggle::after { + display: none; +} +.dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropstart .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-divider { + height: 0; + margin: var(--bs-dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--bs-dropdown-divider-bg); + opacity: 1; +} + +.dropdown-item { + display: block; + width: 100%; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + clear: both; + font-weight: 400; + color: var(--bs-dropdown-link-color); + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; +} +.dropdown-item:hover, .dropdown-item:focus { + color: var(--bs-dropdown-link-hover-color); + background-color: var(--bs-dropdown-link-hover-bg); +} +.dropdown-item.active, .dropdown-item:active { + color: var(--bs-dropdown-link-active-color); + text-decoration: none; + background-color: var(--bs-dropdown-link-active-bg); +} +.dropdown-item.disabled, .dropdown-item:disabled { + color: var(--bs-dropdown-link-disabled-color); + pointer-events: none; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); + margin-bottom: 0; + font-size: 0.875rem; + color: var(--bs-dropdown-header-color); + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + color: var(--bs-dropdown-link-color); +} + +.dropdown-menu-dark { + --bs-dropdown-color: #dee2e6; + --bs-dropdown-bg: #343a40; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-box-shadow: ; + --bs-dropdown-link-color: #dee2e6; + --bs-dropdown-link-hover-color: #fff; + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-header-color: #adb5bd; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} +.btn-group > .btn-check:checked + .btn, +.btn-group > .btn-check:focus + .btn, +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn-check:checked + .btn, +.btn-group-vertical > .btn-check:focus + .btn, +.btn-group-vertical > .btn:hover, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} +.btn-toolbar .input-group { + width: auto; +} + +.btn-group { + border-radius: 0.375rem; +} +.btn-group > :not(.btn-check:first-child) + .btn, +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn.dropdown-toggle-split:first-child, +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:nth-child(n+3), +.btn-group > :not(.btn-check) + .btn, +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} +.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { + margin-left: 0; +} +.dropstart .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} +.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn ~ .btn, +.btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav { + --bs-nav-link-padding-x: 1rem; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-link-color); + --bs-nav-link-hover-color: var(--bs-link-hover-color); + --bs-nav-link-disabled-color: #6c757d; + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x); + font-size: var(--bs-nav-link-font-size); + font-weight: var(--bs-nav-link-font-weight); + color: var(--bs-nav-link-color); + text-decoration: none; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .nav-link { + transition: none; + } +} +.nav-link:hover, .nav-link:focus { + color: var(--bs-nav-link-hover-color); +} +.nav-link.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.375rem; + --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6; + --bs-nav-tabs-link-active-color: #495057; + --bs-nav-tabs-link-active-bg: #fff; + --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff; + border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color); +} +.nav-tabs .nav-link { + margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width)); + background: none; + border: var(--bs-nav-tabs-border-width) solid transparent; + border-top-left-radius: var(--bs-nav-tabs-border-radius); + border-top-right-radius: var(--bs-nav-tabs-border-radius); +} +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + isolation: isolate; + border-color: var(--bs-nav-tabs-link-hover-border-color); +} +.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + background-color: transparent; + border-color: transparent; +} +.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.375rem; + --bs-nav-pills-link-active-color: #fff; + --bs-nav-pills-link-active-bg: #0d6efd; +} +.nav-pills .nav-link { + background: none; + border: 0; + border-radius: var(--bs-nav-pills-border-radius); +} +.nav-pills .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + background-color: transparent; + border-color: transparent; +} +.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-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; +} + +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} + +.navbar { + --bs-navbar-padding-x: 0; + --bs-navbar-padding-y: 0.5rem; + --bs-navbar-color: rgba(0, 0, 0, 0.55); + --bs-navbar-hover-color: rgba(0, 0, 0, 0.7); + --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3); + --bs-navbar-active-color: rgba(0, 0, 0, 0.9); + --bs-navbar-brand-padding-y: 0.3125rem; + --bs-navbar-brand-margin-end: 1rem; + --bs-navbar-brand-font-size: 1.25rem; + --bs-navbar-brand-color: rgba(0, 0, 0, 0.9); + --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9); + --bs-navbar-nav-link-padding-x: 0.5rem; + --bs-navbar-toggler-padding-y: 0.25rem; + --bs-navbar-toggler-padding-x: 0.75rem; + --bs-navbar-toggler-font-size: 1.25rem; + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1); + --bs-navbar-toggler-border-radius: 0.375rem; + --bs-navbar-toggler-focus-width: 0.25rem; + --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out; + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x); +} +.navbar > .container, +.navbar > .container-fluid, +.navbar > .container-sm, +.navbar > .container-md, +.navbar > .container-lg, +.navbar > .container-xl, +.navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; +} +.navbar-brand { + padding-top: var(--bs-navbar-brand-padding-y); + padding-bottom: var(--bs-navbar-brand-padding-y); + margin-right: var(--bs-navbar-brand-margin-end); + font-size: var(--bs-navbar-brand-font-size); + color: var(--bs-navbar-brand-color); + text-decoration: none; + white-space: nowrap; +} +.navbar-brand:hover, .navbar-brand:focus { + color: var(--bs-navbar-brand-hover-color); +} + +.navbar-nav { + --bs-nav-link-padding-x: 0; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-navbar-color); + --bs-nav-link-hover-color: var(--bs-navbar-hover-color); + --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.navbar-nav .show > .nav-link, +.navbar-nav .nav-link.active { + color: var(--bs-navbar-active-color); +} +.navbar-nav .dropdown-menu { + position: static; +} + +.navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-navbar-color); +} +.navbar-text a, +.navbar-text a:hover, +.navbar-text a:focus { + color: var(--bs-navbar-active-color); +} + +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} + +.navbar-toggler { + padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); + font-size: var(--bs-navbar-toggler-font-size); + line-height: 1; + color: var(--bs-navbar-color); + background-color: transparent; + border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); + border-radius: var(--bs-navbar-toggler-border-radius); + transition: var(--bs-navbar-toggler-transition); +} +@media (prefers-reduced-motion: reduce) { + .navbar-toggler { + transition: none; + } +} +.navbar-toggler:hover { + text-decoration: none; +} +.navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width); +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-image: var(--bs-navbar-toggler-icon-bg); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; +} + +.navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; +} + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } + .navbar-expand-sm .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-sm .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-sm .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 768px) { + .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } + .navbar-expand-md .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-md .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-md .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 992px) { + .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } + .navbar-expand-lg .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-lg .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-lg .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } + .navbar-expand-xl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-xl .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-xl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 1400px) { + .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-xxl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xxl .navbar-toggler { + display: none; + } + .navbar-expand-xxl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-xxl .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-xxl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +.navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; +} +.navbar-expand .navbar-nav { + flex-direction: row; +} +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} +.navbar-expand .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); +} +.navbar-expand .navbar-nav-scroll { + overflow: visible; +} +.navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} +.navbar-expand .navbar-toggler { + display: none; +} +.navbar-expand .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; +} +.navbar-expand .offcanvas .offcanvas-header { + display: none; +} +.navbar-expand .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; +} + +.navbar-dark { + --bs-navbar-color: rgba(255, 255, 255, 0.55); + --bs-navbar-hover-color: rgba(255, 255, 255, 0.75); + --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25); + --bs-navbar-active-color: #fff; + --bs-navbar-brand-color: #fff; + --bs-navbar-brand-hover-color: #fff; + --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.card { + --bs-card-spacer-y: 1rem; + --bs-card-spacer-x: 1rem; + --bs-card-title-spacer-y: 0.5rem; + --bs-card-border-width: 1px; + --bs-card-border-color: var(--bs-border-color-translucent); + --bs-card-border-radius: 0.375rem; + --bs-card-box-shadow: ; + --bs-card-inner-border-radius: calc(0.375rem - 1px); + --bs-card-cap-padding-y: 0.5rem; + --bs-card-cap-padding-x: 1rem; + --bs-card-cap-bg: rgba(0, 0, 0, 0.03); + --bs-card-cap-color: ; + --bs-card-height: ; + --bs-card-color: ; + --bs-card-bg: #fff; + --bs-card-img-overlay-padding: 1rem; + --bs-card-group-margin: 0.75rem; + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + height: var(--bs-card-height); + word-wrap: break-word; + background-color: var(--bs-card-bg); + background-clip: border-box; + border: var(--bs-card-border-width) solid var(--bs-card-border-color); + border-radius: var(--bs-card-border-radius); +} +.card > hr { + margin-right: 0; + margin-left: 0; +} +.card > .list-group { + border-top: inherit; + border-bottom: inherit; +} +.card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} +.card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} +.card > .card-header + .list-group, +.card > .list-group + .card-footer { + border-top: 0; +} + +.card-body { + flex: 1 1 auto; + padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); + color: var(--bs-card-color); +} + +.card-title { + margin-bottom: var(--bs-card-title-spacer-y); +} + +.card-subtitle { + margin-top: calc(-0.5 * var(--bs-card-title-spacer-y)); + margin-bottom: 0; +} + +.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; + flex-flow: row wrap; + } + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-top, +.card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-bottom, +.card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-top, +.card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-bottom, +.card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} + +.accordion { + --bs-accordion-color: #212529; + --bs-accordion-bg: #fff; + --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; + --bs-accordion-border-color: var(--bs-border-color); + --bs-accordion-border-width: 1px; + --bs-accordion-border-radius: 0.375rem; + --bs-accordion-inner-border-radius: calc(0.375rem - 1px); + --bs-accordion-btn-padding-x: 1.25rem; + --bs-accordion-btn-padding-y: 1rem; + --bs-accordion-btn-color: #212529; + --bs-accordion-btn-bg: var(--bs-accordion-bg); + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-icon-width: 1.25rem; + --bs-accordion-btn-icon-transform: rotate(-180deg); + --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-focus-border-color: #86b7fe; + --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-accordion-body-padding-x: 1.25rem; + --bs-accordion-body-padding-y: 1rem; + --bs-accordion-active-color: #0c63e4; + --bs-accordion-active-bg: #e7f1ff; +} + +.accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x); + font-size: 1rem; + color: var(--bs-accordion-btn-color); + text-align: left; + background-color: var(--bs-accordion-btn-bg); + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: var(--bs-accordion-transition); +} +@media (prefers-reduced-motion: reduce) { + .accordion-button { + transition: none; + } +} +.accordion-button:not(.collapsed) { + color: var(--bs-accordion-active-color); + background-color: var(--bs-accordion-active-bg); + box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color); +} +.accordion-button:not(.collapsed)::after { + background-image: var(--bs-accordion-btn-active-icon); + transform: var(--bs-accordion-btn-icon-transform); +} +.accordion-button::after { + flex-shrink: 0; + width: var(--bs-accordion-btn-icon-width); + height: var(--bs-accordion-btn-icon-width); + margin-left: auto; + content: ""; + background-image: var(--bs-accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--bs-accordion-btn-icon-width); + transition: var(--bs-accordion-btn-icon-transition); +} +@media (prefers-reduced-motion: reduce) { + .accordion-button::after { + transition: none; + } +} +.accordion-button:hover { + z-index: 2; +} +.accordion-button:focus { + z-index: 3; + 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; +} + +.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: #6c757d; + --bs-breadcrumb-item-padding-x: 0.5rem; + --bs-breadcrumb-item-active-color: #6c757d; + display: flex; + flex-wrap: wrap; + padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x); + margin-bottom: var(--bs-breadcrumb-margin-bottom); + font-size: var(--bs-breadcrumb-font-size); + list-style: none; + background-color: var(--bs-breadcrumb-bg); + border-radius: var(--bs-breadcrumb-border-radius); +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: var(--bs-breadcrumb-item-padding-x); +} +.breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: var(--bs-breadcrumb-item-padding-x); + color: var(--bs-breadcrumb-divider-color); + content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; +} +.breadcrumb-item.active { + color: var(--bs-breadcrumb-item-active-color); +} + +.pagination { + --bs-pagination-padding-x: 0.75rem; + --bs-pagination-padding-y: 0.375rem; + --bs-pagination-font-size: 1rem; + --bs-pagination-color: var(--bs-link-color); + --bs-pagination-bg: #fff; + --bs-pagination-border-width: 1px; + --bs-pagination-border-color: #dee2e6; + --bs-pagination-border-radius: 0.375rem; + --bs-pagination-hover-color: var(--bs-link-hover-color); + --bs-pagination-hover-bg: #e9ecef; + --bs-pagination-hover-border-color: #dee2e6; + --bs-pagination-focus-color: var(--bs-link-hover-color); + --bs-pagination-focus-bg: #e9ecef; + --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-pagination-active-color: #fff; + --bs-pagination-active-bg: #0d6efd; + --bs-pagination-active-border-color: #0d6efd; + --bs-pagination-disabled-color: #6c757d; + --bs-pagination-disabled-bg: #fff; + --bs-pagination-disabled-border-color: #dee2e6; + display: flex; + padding-left: 0; + list-style: none; +} + +.page-link { + position: relative; + display: block; + padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x); + font-size: var(--bs-pagination-font-size); + color: var(--bs-pagination-color); + text-decoration: none; + background-color: var(--bs-pagination-bg); + border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .page-link { + transition: none; + } +} +.page-link:hover { + z-index: 2; + color: var(--bs-pagination-hover-color); + background-color: var(--bs-pagination-hover-bg); + border-color: var(--bs-pagination-hover-border-color); +} +.page-link:focus { + z-index: 3; + color: var(--bs-pagination-focus-color); + background-color: var(--bs-pagination-focus-bg); + outline: 0; + box-shadow: var(--bs-pagination-focus-box-shadow); +} +.page-link.active, .active > .page-link { + z-index: 3; + color: var(--bs-pagination-active-color); + background-color: var(--bs-pagination-active-bg); + border-color: var(--bs-pagination-active-border-color); +} +.page-link.disabled, .disabled > .page-link { + color: var(--bs-pagination-disabled-color); + pointer-events: none; + background-color: var(--bs-pagination-disabled-bg); + border-color: var(--bs-pagination-disabled-border-color); +} + +.page-item:not(:first-child) .page-link { + margin-left: -1px; +} +.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.25rem; +} + +.badge { + --bs-badge-padding-x: 0.65em; + --bs-badge-padding-y: 0.35em; + --bs-badge-font-size: 0.75em; + --bs-badge-font-weight: 700; + --bs-badge-color: #fff; + --bs-badge-border-radius: 0.375rem; + 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.375rem; + 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; +} + +.alert-dismissible { + padding-right: 3rem; +} +.alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; +} + +.alert-primary { + --bs-alert-color: #084298; + --bs-alert-bg: #cfe2ff; + --bs-alert-border-color: #b6d4fe; +} +.alert-primary .alert-link { + color: #06357a; +} + +.alert-secondary { + --bs-alert-color: #41464b; + --bs-alert-bg: #e2e3e5; + --bs-alert-border-color: #d3d6d8; +} +.alert-secondary .alert-link { + color: #34383c; +} + +.alert-success { + --bs-alert-color: #0f5132; + --bs-alert-bg: #d1e7dd; + --bs-alert-border-color: #badbcc; +} +.alert-success .alert-link { + color: #0c4128; +} + +.alert-info { + --bs-alert-color: #055160; + --bs-alert-bg: #cff4fc; + --bs-alert-border-color: #b6effb; +} +.alert-info .alert-link { + color: #04414d; +} + +.alert-warning { + --bs-alert-color: #664d03; + --bs-alert-bg: #fff3cd; + --bs-alert-border-color: #ffecb5; +} +.alert-warning .alert-link { + color: #523e02; +} + +.alert-danger { + --bs-alert-color: #842029; + --bs-alert-bg: #f8d7da; + --bs-alert-border-color: #f5c2c7; +} +.alert-danger .alert-link { + color: #6a1a21; +} + +.alert-light { + --bs-alert-color: #636464; + --bs-alert-bg: #fefefe; + --bs-alert-border-color: #fdfdfe; +} +.alert-light .alert-link { + color: #4f5050; +} + +.alert-dark { + --bs-alert-color: #141619; + --bs-alert-bg: #d3d3d4; + --bs-alert-border-color: #bcbebf; +} +.alert-dark .alert-link { + color: #101214; +} + +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} +.progress { + --bs-progress-height: 1rem; + --bs-progress-font-size: 0.75rem; + --bs-progress-bg: #e9ecef; + --bs-progress-border-radius: 0.375rem; + --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); + --bs-progress-bar-color: #fff; + --bs-progress-bar-bg: #0d6efd; + --bs-progress-bar-transition: width 0.6s ease; + display: flex; + height: var(--bs-progress-height); + overflow: hidden; + font-size: var(--bs-progress-font-size); + background-color: var(--bs-progress-bg); + border-radius: var(--bs-progress-border-radius); +} + +.progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: var(--bs-progress-bar-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-progress-bar-bg); + transition: var(--bs-progress-bar-transition); +} +@media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: var(--bs-progress-height) var(--bs-progress-height); +} + +.progress-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: #212529; + --bs-list-group-bg: #fff; + --bs-list-group-border-color: rgba(0, 0, 0, 0.125); + --bs-list-group-border-width: 1px; + --bs-list-group-border-radius: 0.375rem; + --bs-list-group-item-padding-x: 1rem; + --bs-list-group-item-padding-y: 0.5rem; + --bs-list-group-action-color: #495057; + --bs-list-group-action-hover-color: #495057; + --bs-list-group-action-hover-bg: #f8f9fa; + --bs-list-group-action-active-color: #212529; + --bs-list-group-action-active-bg: #e9ecef; + --bs-list-group-disabled-color: #6c757d; + --bs-list-group-disabled-bg: #fff; + --bs-list-group-active-color: #fff; + --bs-list-group-active-bg: #0d6efd; + --bs-list-group-active-border-color: #0d6efd; + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: var(--bs-list-group-border-radius); +} + +.list-group-numbered { + list-style-type: none; + counter-reset: section; +} +.list-group-numbered > .list-group-item::before { + content: counters(section, ".") ". "; + counter-increment: section; +} + +.list-group-item-action { + width: 100%; + color: var(--bs-list-group-action-color); + text-align: inherit; +} +.list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: var(--bs-list-group-action-hover-color); + text-decoration: none; + background-color: var(--bs-list-group-action-hover-bg); +} +.list-group-item-action:active { + color: var(--bs-list-group-action-active-color); + background-color: var(--bs-list-group-action-active-bg); +} + +.list-group-item { + position: relative; + display: block; + padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x); + color: var(--bs-list-group-color); + text-decoration: none; + background-color: var(--bs-list-group-bg); + border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color); +} +.list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +.list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} +.list-group-item.disabled, .list-group-item:disabled { + color: var(--bs-list-group-disabled-color); + pointer-events: none; + background-color: var(--bs-list-group-disabled-bg); +} +.list-group-item.active { + z-index: 2; + color: var(--bs-list-group-active-color); + background-color: var(--bs-list-group-active-bg); + border-color: var(--bs-list-group-active-border-color); +} +.list-group-item + .list-group-item { + border-top-width: 0; +} +.list-group-item + .list-group-item.active { + margin-top: calc(-1 * var(--bs-list-group-border-width)); + border-top-width: var(--bs-list-group-border-width); +} + +.list-group-horizontal { + flex-direction: row; +} +.list-group-horizontal > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; +} +.list-group-horizontal > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; +} +.list-group-horizontal > .list-group-item.active { + margin-top: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); +} + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; + } + .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; + } + .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; + } + .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; + } + .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 1400px) { + .list-group-horizontal-xxl { + flex-direction: row; + } + .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +.list-group-flush { + border-radius: 0; +} +.list-group-flush > .list-group-item { + border-width: 0 0 var(--bs-list-group-border-width); +} +.list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} + +.list-group-item-primary { + color: #084298; + background-color: #cfe2ff; +} +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #084298; + background-color: #bacbe6; +} +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #084298; + border-color: #084298; +} + +.list-group-item-secondary { + color: #41464b; + background-color: #e2e3e5; +} +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #41464b; + background-color: #cbccce; +} +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #41464b; + border-color: #41464b; +} + +.list-group-item-success { + color: #0f5132; + background-color: #d1e7dd; +} +.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #0f5132; + background-color: #bcd0c7; +} +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #0f5132; + border-color: #0f5132; +} + +.list-group-item-info { + color: #055160; + background-color: #cff4fc; +} +.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #055160; + background-color: #badce3; +} +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #055160; + border-color: #055160; +} + +.list-group-item-warning { + color: #664d03; + background-color: #fff3cd; +} +.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #664d03; + background-color: #e6dbb9; +} +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #664d03; + border-color: #664d03; +} + +.list-group-item-danger { + color: #842029; + background-color: #f8d7da; +} +.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #842029; + background-color: #dfc2c4; +} +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #842029; + border-color: #842029; +} + +.list-group-item-light { + color: #636464; + background-color: #fefefe; +} +.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #636464; + background-color: #e5e5e5; +} +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #636464; + border-color: #636464; +} + +.list-group-item-dark { + color: #141619; + background-color: #d3d3d4; +} +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #141619; + background-color: #bebebf; +} +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #141619; + border-color: #141619; +} + +.btn-close { + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: #000; + background: transparent 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") center/1em auto no-repeat; + border: 0; + border-radius: 0.375rem; + opacity: 0.5; +} +.btn-close:hover { + color: #000; + text-decoration: none; + opacity: 0.75; +} +.btn-close:focus { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + opacity: 1; +} +.btn-close:disabled, .btn-close.disabled { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + opacity: 0.25; +} + +.btn-close-white { + filter: invert(1) grayscale(100%) brightness(200%); +} + +.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: var(--bs-border-color-translucent); + --bs-toast-border-radius: 0.375rem; + --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-toast-header-color: #6c757d; + --bs-toast-header-bg: rgba(255, 255, 255, 0.85); + --bs-toast-header-border-color: rgba(0, 0, 0, 0.05); + 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: -webkit-max-content; + width: -moz-max-content; + width: max-content; + max-width: 100%; + pointer-events: none; +} +.toast-container > :not(:last-child) { + margin-bottom: var(--bs-toast-spacing); +} + +.toast-header { + display: flex; + align-items: center; + padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x); + color: var(--bs-toast-header-color); + background-color: var(--bs-toast-header-bg); + background-clip: padding-box; + border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color); + border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); + border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); +} +.toast-header .btn-close { + margin-right: calc(-0.5 * var(--bs-toast-padding-x)); + margin-left: var(--bs-toast-padding-x); +} + +.toast-body { + padding: var(--bs-toast-padding-x); + word-wrap: break-word; +} + +.modal { + --bs-modal-zindex: 1055; + --bs-modal-width: 500px; + --bs-modal-padding: 1rem; + --bs-modal-margin: 0.5rem; + --bs-modal-color: ; + --bs-modal-bg: #fff; + --bs-modal-border-color: var(--bs-border-color-translucent); + --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: var(--bs-border-color); + --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: var(--bs-border-color); + --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 0.3s ease-out; + transform: translate(0, -50px); +} +@media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} +.modal.show .modal-dialog { + transform: none; +} +.modal.modal-static .modal-dialog { + transform: scale(1.02); +} + +.modal-dialog-scrollable { + height: calc(100% - var(--bs-modal-margin) * 2); +} +.modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; +} +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - var(--bs-modal-margin) * 2); +} + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--bs-modal-color); + pointer-events: auto; + background-color: var(--bs-modal-bg); + background-clip: padding-box; + border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); + border-radius: var(--bs-modal-border-radius); + outline: 0; +} + +.modal-backdrop { + --bs-backdrop-zindex: 1050; + --bs-backdrop-bg: #000; + --bs-backdrop-opacity: 0.5; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-backdrop-zindex); + width: 100vw; + height: 100vh; + background-color: var(--bs-backdrop-bg); +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop.show { + opacity: var(--bs-backdrop-opacity); +} + +.modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + 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) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.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; + padding: var(--bs-modal-padding); +} + +.modal-footer { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.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) * 0.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: #fff; + --bs-tooltip-bg: #000; + --bs-tooltip-border-radius: 0.375rem; + --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; + padding: var(--bs-tooltip-arrow-height); + margin: var(--bs-tooltip-margin); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-tooltip-font-size); + word-wrap: break-word; + opacity: 0; +} +.tooltip.show { + opacity: var(--bs-tooltip-opacity); +} +.tooltip .tooltip-arrow { + display: block; + width: var(--bs-tooltip-arrow-width); + height: var(--bs-tooltip-arrow-height); +} +.tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { + bottom: 0; +} +.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) * 0.5) 0; + border-top-color: var(--bs-tooltip-bg); +} + +/* rtl:begin:ignore */ +.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { + left: 0; + 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) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-right-color: var(--bs-tooltip-bg); +} + +/* rtl:end:ignore */ +.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { + top: 0; +} +.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) * 0.5) var(--bs-tooltip-arrow-height); + border-bottom-color: var(--bs-tooltip-bg); +} + +/* rtl:begin:ignore */ +.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { + right: 0; + 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) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-left-color: var(--bs-tooltip-bg); +} + +/* rtl:end:ignore */ +.tooltip-inner { + max-width: var(--bs-tooltip-max-width); + padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x); + color: var(--bs-tooltip-color); + text-align: center; + background-color: var(--bs-tooltip-bg); + border-radius: var(--bs-tooltip-border-radius); +} + +.popover { + --bs-popover-zindex: 1070; + --bs-popover-max-width: 276px; + --bs-popover-font-size: 0.875rem; + --bs-popover-bg: #fff; + --bs-popover-border-width: 1px; + --bs-popover-border-color: var(--bs-border-color-translucent); + --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: ; + --bs-popover-header-bg: #f0f0f0; + --bs-popover-body-padding-x: 1rem; + --bs-popover-body-padding-y: 1rem; + --bs-popover-body-color: #212529; + --bs-popover-arrow-width: 1rem; + --bs-popover-arrow-height: 0.5rem; + --bs-popover-arrow-border: var(--bs-popover-border-color); + z-index: var(--bs-popover-zindex); + display: block; + max-width: var(--bs-popover-max-width); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-popover-font-size); + word-wrap: break-word; + background-color: var(--bs-popover-bg); + background-clip: padding-box; + border: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-radius: var(--bs-popover-border-radius); +} +.popover .popover-arrow { + display: block; + width: var(--bs-popover-arrow-width); + height: var(--bs-popover-arrow-height); +} +.popover .popover-arrow::before, .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; + border-width: 0; +} + +.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { + bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} +.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} +.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { + bottom: 0; + border-top-color: var(--bs-popover-arrow-border); +} +.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + bottom: var(--bs-popover-border-width); + border-top-color: var(--bs-popover-bg); +} + +/* rtl:begin:ignore */ +.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { + left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} +.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} +.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { + left: 0; + border-right-color: var(--bs-popover-arrow-border); +} +.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + left: var(--bs-popover-border-width); + border-right-color: var(--bs-popover-bg); +} + +/* rtl:end:ignore */ +.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { + top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} +.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + border-width: 0 calc(var(--bs-popover-arrow-width) * 0.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); +} + +/* rtl:begin:ignore */ +.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { + right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} +.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} +.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { + right: 0; + border-left-color: var(--bs-popover-arrow-border); +} +.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + right: var(--bs-popover-border-width); + border-left-color: var(--bs-popover-bg); +} + +/* rtl:end:ignore */ +.popover-header { + padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x); + margin-bottom: 0; + font-size: var(--bs-popover-header-font-size); + color: var(--bs-popover-header-color); + background-color: var(--bs-popover-header-bg); + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-top-left-radius: var(--bs-popover-inner-border-radius); + border-top-right-radius: var(--bs-popover-inner-border-radius); +} +.popover-header:empty { + display: none; +} + +.popover-body { + padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x); + color: var(--bs-popover-body-color); +} + +.carousel { + position: relative; +} + +.carousel.pointer-event { + touch-action: pan-y; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +.carousel-item-next:not(.carousel-item-start), +.active.carousel-item-end { + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-end), +.active.carousel-item-start { + transform: translateX(-100%); +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; +} +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-start, +.carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; +} +.carousel-fade .active.carousel-item-start, +.carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} +@media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-start, +.carousel-fade .active.carousel-item-end { + transition: none; + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; +} +@media (prefers-reduced-motion: reduce) { + .carousel-control-prev, +.carousel-control-next { + transition: none; + } +} +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; +} + +/* rtl:options: { + "autoRename": true, + "stringMap":[ { + "name" : "prev-next", + "search" : "prev", + "replace" : "next" + } ] +} */ +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; + list-style: none; +} +.carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; +} +@media (prefers-reduced-motion: reduce) { + .carousel-indicators [data-bs-target] { + transition: none; + } +} +.carousel-indicators .active { + opacity: 1; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: #fff; + text-align: center; +} + +.carousel-dark .carousel-control-prev-icon, +.carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); +} +.carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; +} +.carousel-dark .carousel-caption { + color: #000; +} + +.spinner-grow, +.spinner-border { + display: inline-block; + width: var(--bs-spinner-width); + height: var(--bs-spinner-height); + vertical-align: var(--bs-spinner-vertical-align); + border-radius: 50%; + animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); +} + +@keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; + } +} +.spinner-border { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-border-width: 0.25em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-border; + border: var(--bs-spinner-border-width) solid currentcolor; + border-right-color: transparent; +} + +.spinner-border-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; + --bs-spinner-border-width: 0.2em; +} + +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + transform: none; + } +} +.spinner-grow { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-grow; + background-color: currentcolor; + opacity: 0; +} + +.spinner-grow-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; +} + +@media (prefers-reduced-motion: reduce) { + .spinner-border, +.spinner-grow { + --bs-spinner-animation-speed: 1.5s; + } +} +.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm { + --bs-offcanvas-zindex: 1045; + --bs-offcanvas-width: 400px; + --bs-offcanvas-height: 30vh; + --bs-offcanvas-padding-x: 1rem; + --bs-offcanvas-padding-y: 1rem; + --bs-offcanvas-color: ; + --bs-offcanvas-bg: #fff; + --bs-offcanvas-border-width: 1px; + --bs-offcanvas-border-color: var(--bs-border-color-translucent); + --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); +} + +@media (max-width: 575.98px) { + .offcanvas-sm { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} +@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%); + } +} +@media (max-width: 575.98px) { + .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%); + } +} +@media (max-width: 575.98px) { + .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%); + } +} +@media (max-width: 575.98px) { + .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%); + } +} +@media (max-width: 575.98px) { + .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) { + transform: none; + } +} +@media (max-width: 575.98px) { + .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show { + visibility: visible; + } +} +@media (min-width: 576px) { + .offcanvas-sm { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-sm .offcanvas-header { + display: none; + } + .offcanvas-sm .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 767.98px) { + .offcanvas-md { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} +@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%); + } +} +@media (max-width: 767.98px) { + .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%); + } +} +@media (max-width: 767.98px) { + .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%); + } +} +@media (max-width: 767.98px) { + .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%); + } +} +@media (max-width: 767.98px) { + .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) { + transform: none; + } +} +@media (max-width: 767.98px) { + .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show { + visibility: visible; + } +} +@media (min-width: 768px) { + .offcanvas-md { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-md .offcanvas-header { + display: none; + } + .offcanvas-md .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 991.98px) { + .offcanvas-lg { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} +@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%); + } +} +@media (max-width: 991.98px) { + .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%); + } +} +@media (max-width: 991.98px) { + .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%); + } +} +@media (max-width: 991.98px) { + .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%); + } +} +@media (max-width: 991.98px) { + .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) { + transform: none; + } +} +@media (max-width: 991.98px) { + .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show { + visibility: visible; + } +} +@media (min-width: 992px) { + .offcanvas-lg { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-lg .offcanvas-header { + display: none; + } + .offcanvas-lg .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1199.98px) { + .offcanvas-xl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} +@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%); + } +} +@media (max-width: 1199.98px) { + .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%); + } +} +@media (max-width: 1199.98px) { + .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%); + } +} +@media (max-width: 1199.98px) { + .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%); + } +} +@media (max-width: 1199.98px) { + .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) { + transform: none; + } +} +@media (max-width: 1199.98px) { + .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show { + visibility: visible; + } +} +@media (min-width: 1200px) { + .offcanvas-xl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-xl .offcanvas-header { + display: none; + } + .offcanvas-xl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1399.98px) { + .offcanvas-xxl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} +@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%); + } +} +@media (max-width: 1399.98px) { + .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%); + } +} +@media (max-width: 1399.98px) { + .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%); + } +} +@media (max-width: 1399.98px) { + .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%); + } +} +@media (max-width: 1399.98px) { + .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) { + transform: none; + } +} +@media (max-width: 1399.98px) { + .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show { + visibility: visible; + } +} +@media (min-width: 1400px) { + .offcanvas-xxl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-xxl .offcanvas-header { + display: none; + } + .offcanvas-xxl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +.offcanvas { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .offcanvas { + transition: none; + } +} +.offcanvas.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); +} +.offcanvas.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); +} +.offcanvas.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); +} +.offcanvas.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); +} +.offcanvas.showing, .offcanvas.show:not(.hiding) { + transform: none; +} +.offcanvas.showing, .offcanvas.hiding, .offcanvas.show { + visibility: visible; +} + +.offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} +.offcanvas-backdrop.fade { + opacity: 0; +} +.offcanvas-backdrop.show { + opacity: 0.5; +} + +.offcanvas-header { + display: flex; + align-items: center; + 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) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.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: 1.5; +} + +.offcanvas-body { + flex-grow: 1; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); + overflow-y: auto; +} + +.placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentcolor; + opacity: 0.5; +} +.placeholder.btn::before { + display: inline-block; + content: ""; +} + +.placeholder-xs { + min-height: 0.6em; +} + +.placeholder-sm { + min-height: 0.8em; +} + +.placeholder-lg { + min-height: 1.2em; +} + +.placeholder-glow .placeholder { + animation: placeholder-glow 2s ease-in-out infinite; +} + +@keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} +.placeholder-wave { + -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + -webkit-mask-size: 200% 100%; + mask-size: 200% 100%; + animation: placeholder-wave 2s linear infinite; +} + +@keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} +.clearfix::after { + display: block; + clear: both; + content: ""; +} + +.text-bg-primary { + color: #fff !important; + background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-secondary { + color: #fff !important; + background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-success { + color: #fff !important; + background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-info { + color: #000 !important; + background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-warning { + color: #000 !important; + background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-danger { + color: #fff !important; + background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-light { + color: #000 !important; + background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-dark { + color: #fff !important; + background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important; +} + +.link-primary { + color: #0d6efd !important; +} +.link-primary:hover, .link-primary:focus { + color: #0a58ca !important; +} + +.link-secondary { + color: #6c757d !important; +} +.link-secondary:hover, .link-secondary:focus { + color: #565e64 !important; +} + +.link-success { + color: #198754 !important; +} +.link-success:hover, .link-success:focus { + color: #146c43 !important; +} + +.link-info { + color: #0dcaf0 !important; +} +.link-info:hover, .link-info:focus { + color: #3dd5f3 !important; +} + +.link-warning { + color: #ffc107 !important; +} +.link-warning:hover, .link-warning:focus { + color: #ffcd39 !important; +} + +.link-danger { + color: #dc3545 !important; +} +.link-danger:hover, .link-danger:focus { + color: #b02a37 !important; +} + +.link-light { + color: #f8f9fa !important; +} +.link-light:hover, .link-light:focus { + color: #f9fafb !important; +} + +.link-dark { + color: #212529 !important; +} +.link-dark:hover, .link-dark:focus { + color: #1a1e21 !important; +} + +.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: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; +} + +.sticky-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; +} + +@media (min-width: 576px) { + .sticky-sm-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-sm-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 768px) { + .sticky-md-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-md-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 992px) { + .sticky-lg-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-lg-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 1200px) { + .sticky-xl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-xl-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 1400px) { + .sticky-xxl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-xxl-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} +.hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; +} + +.vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; +} + +.visually-hidden, +.visually-hidden-focusable:not(:focus):not(:focus-within) { + position: absolute !important; + 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; +} + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.vr { + display: inline-block; + align-self: stretch; + width: 1px; + min-height: 1em; + background-color: currentcolor; + opacity: 0.25; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.float-start { + float: left !important; +} + +.float-end { + float: right !important; +} + +.float-none { + float: none !important; +} + +.opacity-0 { + opacity: 0 !important; +} + +.opacity-25 { + opacity: 0.25 !important; +} + +.opacity-50 { + opacity: 0.5 !important; +} + +.opacity-75 { + opacity: 0.75 !important; +} + +.opacity-100 { + opacity: 1 !important; +} + +.overflow-auto { + overflow: auto !important; +} + +.overflow-hidden { + overflow: hidden !important; +} + +.overflow-visible { + overflow: visible !important; +} + +.overflow-scroll { + overflow: scroll !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-grid { + display: grid !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +.d-none { + display: none !important; +} + +.shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.shadow-none { + box-shadow: none !important; +} + +.position-static { + position: static !important; +} + +.position-relative { + position: relative !important; +} + +.position-absolute { + position: absolute !important; +} + +.position-fixed { + position: fixed !important; +} + +.position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.top-0 { + top: 0 !important; +} + +.top-50 { + top: 50% !important; +} + +.top-100 { + top: 100% !important; +} + +.bottom-0 { + bottom: 0 !important; +} + +.bottom-50 { + bottom: 50% !important; +} + +.bottom-100 { + bottom: 100% !important; +} + +.start-0 { + left: 0 !important; +} + +.start-50 { + left: 50% !important; +} + +.start-100 { + left: 100% !important; +} + +.end-0 { + right: 0 !important; +} + +.end-50 { + right: 50% !important; +} + +.end-100 { + right: 100% !important; +} + +.translate-middle { + transform: translate(-50%, -50%) !important; +} + +.translate-middle-x { + transform: translateX(-50%) !important; +} + +.translate-middle-y { + transform: translateY(-50%) !important; +} + +.border { + border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top { + border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-end { + border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-end-0 { + border-right: 0 !important; +} + +.border-bottom { + border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-start { + border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-start-0 { + border-left: 0 !important; +} + +.border-primary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important; +} + +.border-secondary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important; +} + +.border-success { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important; +} + +.border-info { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important; +} + +.border-warning { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important; +} + +.border-danger { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important; +} + +.border-light { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important; +} + +.border-dark { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important; +} + +.border-white { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important; +} + +.border-1 { + --bs-border-width: 1px; +} + +.border-2 { + --bs-border-width: 2px; +} + +.border-3 { + --bs-border-width: 3px; +} + +.border-4 { + --bs-border-width: 4px; +} + +.border-5 { + --bs-border-width: 5px; +} + +.border-opacity-10 { + --bs-border-opacity: 0.1; +} + +.border-opacity-25 { + --bs-border-opacity: 0.25; +} + +.border-opacity-50 { + --bs-border-opacity: 0.5; +} + +.border-opacity-75 { + --bs-border-opacity: 0.75; +} + +.border-opacity-100 { + --bs-border-opacity: 1; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.w-auto { + width: auto !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.vw-100 { + width: 100vw !important; +} + +.min-vw-100 { + min-width: 100vw !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.h-auto { + height: auto !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.vh-100 { + height: 100vh !important; +} + +.min-vh-100 { + min-height: 100vh !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-row { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.justify-content-evenly { + justify-content: space-evenly !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +.order-first { + order: -1 !important; +} + +.order-0 { + order: 0 !important; +} + +.order-1 { + order: 1 !important; +} + +.order-2 { + order: 2 !important; +} + +.order-3 { + order: 3 !important; +} + +.order-4 { + order: 4 !important; +} + +.order-5 { + order: 5 !important; +} + +.order-last { + order: 6 !important; +} + +.m-0 { + margin: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mt-1 { + margin-top: 0.25rem !important; +} + +.mt-2 { + margin-top: 0.5rem !important; +} + +.mt-3 { + margin-top: 1rem !important; +} + +.mt-4 { + margin-top: 1.5rem !important; +} + +.mt-5 { + margin-top: 3rem !important; +} + +.mt-auto { + margin-top: auto !important; +} + +.me-0 { + margin-right: 0 !important; +} + +.me-1 { + margin-right: 0.25rem !important; +} + +.me-2 { + margin-right: 0.5rem !important; +} + +.me-3 { + margin-right: 1rem !important; +} + +.me-4 { + margin-right: 1.5rem !important; +} + +.me-5 { + margin-right: 3rem !important; +} + +.me-auto { + margin-right: auto !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.mb-1 { + margin-bottom: 0.25rem !important; +} + +.mb-2 { + margin-bottom: 0.5rem !important; +} + +.mb-3 { + margin-bottom: 1rem !important; +} + +.mb-4 { + margin-bottom: 1.5rem !important; +} + +.mb-5 { + margin-bottom: 3rem !important; +} + +.mb-auto { + margin-bottom: auto !important; +} + +.ms-0 { + margin-left: 0 !important; +} + +.ms-1 { + margin-left: 0.25rem !important; +} + +.ms-2 { + margin-left: 0.5rem !important; +} + +.ms-3 { + margin-left: 1rem !important; +} + +.ms-4 { + margin-left: 1.5rem !important; +} + +.ms-5 { + margin-left: 3rem !important; +} + +.ms-auto { + margin-left: auto !important; +} + +.p-0 { + padding: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pt-1 { + padding-top: 0.25rem !important; +} + +.pt-2 { + padding-top: 0.5rem !important; +} + +.pt-3 { + padding-top: 1rem !important; +} + +.pt-4 { + padding-top: 1.5rem !important; +} + +.pt-5 { + padding-top: 3rem !important; +} + +.pe-0 { + padding-right: 0 !important; +} + +.pe-1 { + padding-right: 0.25rem !important; +} + +.pe-2 { + padding-right: 0.5rem !important; +} + +.pe-3 { + padding-right: 1rem !important; +} + +.pe-4 { + padding-right: 1.5rem !important; +} + +.pe-5 { + padding-right: 3rem !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pb-1 { + padding-bottom: 0.25rem !important; +} + +.pb-2 { + padding-bottom: 0.5rem !important; +} + +.pb-3 { + padding-bottom: 1rem !important; +} + +.pb-4 { + padding-bottom: 1.5rem !important; +} + +.pb-5 { + padding-bottom: 3rem !important; +} + +.ps-0 { + padding-left: 0 !important; +} + +.ps-1 { + padding-left: 0.25rem !important; +} + +.ps-2 { + padding-left: 0.5rem !important; +} + +.ps-3 { + padding-left: 1rem !important; +} + +.ps-4 { + padding-left: 1.5rem !important; +} + +.ps-5 { + padding-left: 3rem !important; +} + +.gap-0 { + gap: 0 !important; +} + +.gap-1 { + gap: 0.25rem !important; +} + +.gap-2 { + gap: 0.5rem !important; +} + +.gap-3 { + gap: 1rem !important; +} + +.gap-4 { + gap: 1.5rem !important; +} + +.gap-5 { + gap: 3rem !important; +} + +.font-monospace { + font-family: var(--bs-font-monospace) !important; +} + +.fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; +} + +.fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; +} + +.fs-3 { + font-size: calc(1.3rem + 0.6vw) !important; +} + +.fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; +} + +.fs-5 { + font-size: 1.25rem !important; +} + +.fs-6 { + font-size: 1rem !important; +} + +.fst-italic { + font-style: italic !important; +} + +.fst-normal { + font-style: normal !important; +} + +.fw-light { + font-weight: 300 !important; +} + +.fw-lighter { + font-weight: lighter !important; +} + +.fw-normal { + font-weight: 400 !important; +} + +.fw-bold { + font-weight: 700 !important; +} + +.fw-semibold { + font-weight: 600 !important; +} + +.fw-bolder { + font-weight: bolder !important; +} + +.lh-1 { + line-height: 1 !important; +} + +.lh-sm { + line-height: 1.25 !important; +} + +.lh-base { + line-height: 1.5 !important; +} + +.lh-lg { + line-height: 2 !important; +} + +.text-start { + text-align: left !important; +} + +.text-end { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +.text-decoration-none { + text-decoration: none !important; +} + +.text-decoration-underline { + text-decoration: underline !important; +} + +.text-decoration-line-through { + text-decoration: line-through !important; +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.text-wrap { + white-space: normal !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +/* rtl:begin:remove */ +.text-break { + word-wrap: break-word !important; + word-break: break-word !important; +} + +/* rtl:end:remove */ +.text-primary { + --bs-text-opacity: 1; + color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important; +} + +.text-secondary { + --bs-text-opacity: 1; + color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important; +} + +.text-success { + --bs-text-opacity: 1; + color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important; +} + +.text-info { + --bs-text-opacity: 1; + color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important; +} + +.text-warning { + --bs-text-opacity: 1; + color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important; +} + +.text-danger { + --bs-text-opacity: 1; + color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important; +} + +.text-light { + --bs-text-opacity: 1; + color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important; +} + +.text-dark { + --bs-text-opacity: 1; + color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important; +} + +.text-black { + --bs-text-opacity: 1; + color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important; +} + +.text-white { + --bs-text-opacity: 1; + color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important; +} + +.text-body { + --bs-text-opacity: 1; + color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important; +} + +.text-muted { + --bs-text-opacity: 1; + color: #6c757d !important; +} + +.text-black-50 { + --bs-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; +} + +.text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; +} + +.text-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; +} + +.bg-primary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-success { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-info { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-warning { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-danger { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-light { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-dark { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-black { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-white { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-body { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-transparent { + --bs-bg-opacity: 1; + background-color: transparent !important; +} + +.bg-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-gradient { + background-image: var(--bs-gradient) !important; +} + +.user-select-all { + -webkit-user-select: all !important; + -moz-user-select: all !important; + user-select: all !important; +} + +.user-select-auto { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + user-select: auto !important; +} + +.user-select-none { + -webkit-user-select: none !important; + -moz-user-select: none !important; + 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-2xl) !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-end { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; +} + +.rounded-bottom { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; +} + +.rounded-start { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; +} + +.visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden !important; +} + +@media (min-width: 576px) { + .float-sm-start { + float: left !important; + } + .float-sm-end { + float: right !important; + } + .float-sm-none { + float: 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-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: flex !important; + } + .d-sm-inline-flex { + display: inline-flex !important; + } + .d-sm-none { + display: none !important; + } + .flex-sm-fill { + flex: 1 1 auto !important; + } + .flex-sm-row { + flex-direction: row !important; + } + .flex-sm-column { + flex-direction: column !important; + } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + .flex-sm-wrap { + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-sm-start { + justify-content: flex-start !important; + } + .justify-content-sm-end { + justify-content: flex-end !important; + } + .justify-content-sm-center { + justify-content: center !important; + } + .justify-content-sm-between { + justify-content: space-between !important; + } + .justify-content-sm-around { + justify-content: space-around !important; + } + .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + .align-items-sm-start { + align-items: flex-start !important; + } + .align-items-sm-end { + align-items: flex-end !important; + } + .align-items-sm-center { + align-items: center !important; + } + .align-items-sm-baseline { + align-items: baseline !important; + } + .align-items-sm-stretch { + align-items: stretch !important; + } + .align-content-sm-start { + align-content: flex-start !important; + } + .align-content-sm-end { + align-content: flex-end !important; + } + .align-content-sm-center { + align-content: center !important; + } + .align-content-sm-between { + align-content: space-between !important; + } + .align-content-sm-around { + align-content: space-around !important; + } + .align-content-sm-stretch { + align-content: stretch !important; + } + .align-self-sm-auto { + align-self: auto !important; + } + .align-self-sm-start { + align-self: flex-start !important; + } + .align-self-sm-end { + align-self: flex-end !important; + } + .align-self-sm-center { + align-self: center !important; + } + .align-self-sm-baseline { + align-self: baseline !important; + } + .align-self-sm-stretch { + align-self: stretch !important; + } + .order-sm-first { + order: -1 !important; + } + .order-sm-0 { + order: 0 !important; + } + .order-sm-1 { + order: 1 !important; + } + .order-sm-2 { + order: 2 !important; + } + .order-sm-3 { + order: 3 !important; + } + .order-sm-4 { + order: 4 !important; + } + .order-sm-5 { + order: 5 !important; + } + .order-sm-last { + order: 6 !important; + } + .m-sm-0 { + margin: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-sm-0 { + margin-top: 0 !important; + } + .mt-sm-1 { + margin-top: 0.25rem !important; + } + .mt-sm-2 { + margin-top: 0.5rem !important; + } + .mt-sm-3 { + margin-top: 1rem !important; + } + .mt-sm-4 { + margin-top: 1.5rem !important; + } + .mt-sm-5 { + margin-top: 3rem !important; + } + .mt-sm-auto { + margin-top: auto !important; + } + .me-sm-0 { + margin-right: 0 !important; + } + .me-sm-1 { + margin-right: 0.25rem !important; + } + .me-sm-2 { + margin-right: 0.5rem !important; + } + .me-sm-3 { + margin-right: 1rem !important; + } + .me-sm-4 { + margin-right: 1.5rem !important; + } + .me-sm-5 { + margin-right: 3rem !important; + } + .me-sm-auto { + margin-right: auto !important; + } + .mb-sm-0 { + margin-bottom: 0 !important; + } + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + .mb-sm-3 { + margin-bottom: 1rem !important; + } + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + .mb-sm-5 { + margin-bottom: 3rem !important; + } + .mb-sm-auto { + margin-bottom: auto !important; + } + .ms-sm-0 { + margin-left: 0 !important; + } + .ms-sm-1 { + margin-left: 0.25rem !important; + } + .ms-sm-2 { + margin-left: 0.5rem !important; + } + .ms-sm-3 { + margin-left: 1rem !important; + } + .ms-sm-4 { + margin-left: 1.5rem !important; + } + .ms-sm-5 { + margin-left: 3rem !important; + } + .ms-sm-auto { + margin-left: auto !important; + } + .p-sm-0 { + padding: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-sm-0 { + padding-top: 0 !important; + } + .pt-sm-1 { + padding-top: 0.25rem !important; + } + .pt-sm-2 { + padding-top: 0.5rem !important; + } + .pt-sm-3 { + padding-top: 1rem !important; + } + .pt-sm-4 { + padding-top: 1.5rem !important; + } + .pt-sm-5 { + padding-top: 3rem !important; + } + .pe-sm-0 { + padding-right: 0 !important; + } + .pe-sm-1 { + padding-right: 0.25rem !important; + } + .pe-sm-2 { + padding-right: 0.5rem !important; + } + .pe-sm-3 { + padding-right: 1rem !important; + } + .pe-sm-4 { + padding-right: 1.5rem !important; + } + .pe-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-0 { + padding-bottom: 0 !important; + } + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + .pb-sm-3 { + padding-bottom: 1rem !important; + } + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + .pb-sm-5 { + padding-bottom: 3rem !important; + } + .ps-sm-0 { + padding-left: 0 !important; + } + .ps-sm-1 { + padding-left: 0.25rem !important; + } + .ps-sm-2 { + padding-left: 0.5rem !important; + } + .ps-sm-3 { + padding-left: 1rem !important; + } + .ps-sm-4 { + padding-left: 1.5rem !important; + } + .ps-sm-5 { + padding-left: 3rem !important; + } + .gap-sm-0 { + gap: 0 !important; + } + .gap-sm-1 { + gap: 0.25rem !important; + } + .gap-sm-2 { + gap: 0.5rem !important; + } + .gap-sm-3 { + gap: 1rem !important; + } + .gap-sm-4 { + gap: 1.5rem !important; + } + .gap-sm-5 { + gap: 3rem !important; + } + .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; + } + .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-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: flex !important; + } + .d-md-inline-flex { + display: inline-flex !important; + } + .d-md-none { + display: none !important; + } + .flex-md-fill { + flex: 1 1 auto !important; + } + .flex-md-row { + flex-direction: row !important; + } + .flex-md-column { + flex-direction: column !important; + } + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + .flex-md-grow-0 { + flex-grow: 0 !important; + } + .flex-md-grow-1 { + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + .flex-md-wrap { + flex-wrap: wrap !important; + } + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-md-start { + justify-content: flex-start !important; + } + .justify-content-md-end { + justify-content: flex-end !important; + } + .justify-content-md-center { + justify-content: center !important; + } + .justify-content-md-between { + justify-content: space-between !important; + } + .justify-content-md-around { + justify-content: space-around !important; + } + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + .align-items-md-start { + align-items: flex-start !important; + } + .align-items-md-end { + align-items: flex-end !important; + } + .align-items-md-center { + align-items: center !important; + } + .align-items-md-baseline { + align-items: baseline !important; + } + .align-items-md-stretch { + align-items: stretch !important; + } + .align-content-md-start { + align-content: flex-start !important; + } + .align-content-md-end { + align-content: flex-end !important; + } + .align-content-md-center { + align-content: center !important; + } + .align-content-md-between { + align-content: space-between !important; + } + .align-content-md-around { + align-content: space-around !important; + } + .align-content-md-stretch { + align-content: stretch !important; + } + .align-self-md-auto { + align-self: auto !important; + } + .align-self-md-start { + align-self: flex-start !important; + } + .align-self-md-end { + align-self: flex-end !important; + } + .align-self-md-center { + align-self: center !important; + } + .align-self-md-baseline { + align-self: baseline !important; + } + .align-self-md-stretch { + align-self: stretch !important; + } + .order-md-first { + order: -1 !important; + } + .order-md-0 { + order: 0 !important; + } + .order-md-1 { + order: 1 !important; + } + .order-md-2 { + order: 2 !important; + } + .order-md-3 { + order: 3 !important; + } + .order-md-4 { + order: 4 !important; + } + .order-md-5 { + order: 5 !important; + } + .order-md-last { + order: 6 !important; + } + .m-md-0 { + margin: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-md-0 { + margin-top: 0 !important; + } + .mt-md-1 { + margin-top: 0.25rem !important; + } + .mt-md-2 { + margin-top: 0.5rem !important; + } + .mt-md-3 { + margin-top: 1rem !important; + } + .mt-md-4 { + margin-top: 1.5rem !important; + } + .mt-md-5 { + margin-top: 3rem !important; + } + .mt-md-auto { + margin-top: auto !important; + } + .me-md-0 { + margin-right: 0 !important; + } + .me-md-1 { + margin-right: 0.25rem !important; + } + .me-md-2 { + margin-right: 0.5rem !important; + } + .me-md-3 { + margin-right: 1rem !important; + } + .me-md-4 { + margin-right: 1.5rem !important; + } + .me-md-5 { + margin-right: 3rem !important; + } + .me-md-auto { + margin-right: auto !important; + } + .mb-md-0 { + margin-bottom: 0 !important; + } + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + .mb-md-3 { + margin-bottom: 1rem !important; + } + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + .mb-md-5 { + margin-bottom: 3rem !important; + } + .mb-md-auto { + margin-bottom: auto !important; + } + .ms-md-0 { + margin-left: 0 !important; + } + .ms-md-1 { + margin-left: 0.25rem !important; + } + .ms-md-2 { + margin-left: 0.5rem !important; + } + .ms-md-3 { + margin-left: 1rem !important; + } + .ms-md-4 { + margin-left: 1.5rem !important; + } + .ms-md-5 { + margin-left: 3rem !important; + } + .ms-md-auto { + margin-left: auto !important; + } + .p-md-0 { + padding: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-md-0 { + padding-top: 0 !important; + } + .pt-md-1 { + padding-top: 0.25rem !important; + } + .pt-md-2 { + padding-top: 0.5rem !important; + } + .pt-md-3 { + padding-top: 1rem !important; + } + .pt-md-4 { + padding-top: 1.5rem !important; + } + .pt-md-5 { + padding-top: 3rem !important; + } + .pe-md-0 { + padding-right: 0 !important; + } + .pe-md-1 { + padding-right: 0.25rem !important; + } + .pe-md-2 { + padding-right: 0.5rem !important; + } + .pe-md-3 { + padding-right: 1rem !important; + } + .pe-md-4 { + padding-right: 1.5rem !important; + } + .pe-md-5 { + padding-right: 3rem !important; + } + .pb-md-0 { + padding-bottom: 0 !important; + } + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + .pb-md-3 { + padding-bottom: 1rem !important; + } + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + .pb-md-5 { + padding-bottom: 3rem !important; + } + .ps-md-0 { + padding-left: 0 !important; + } + .ps-md-1 { + padding-left: 0.25rem !important; + } + .ps-md-2 { + padding-left: 0.5rem !important; + } + .ps-md-3 { + padding-left: 1rem !important; + } + .ps-md-4 { + padding-left: 1.5rem !important; + } + .ps-md-5 { + padding-left: 3rem !important; + } + .gap-md-0 { + gap: 0 !important; + } + .gap-md-1 { + gap: 0.25rem !important; + } + .gap-md-2 { + gap: 0.5rem !important; + } + .gap-md-3 { + gap: 1rem !important; + } + .gap-md-4 { + gap: 1.5rem !important; + } + .gap-md-5 { + gap: 3rem !important; + } + .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; + } + .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-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: flex !important; + } + .d-lg-inline-flex { + display: inline-flex !important; + } + .d-lg-none { + display: none !important; + } + .flex-lg-fill { + flex: 1 1 auto !important; + } + .flex-lg-row { + flex-direction: row !important; + } + .flex-lg-column { + flex-direction: column !important; + } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + .flex-lg-wrap { + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-lg-start { + justify-content: flex-start !important; + } + .justify-content-lg-end { + justify-content: flex-end !important; + } + .justify-content-lg-center { + justify-content: center !important; + } + .justify-content-lg-between { + justify-content: space-between !important; + } + .justify-content-lg-around { + justify-content: space-around !important; + } + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + .align-items-lg-start { + align-items: flex-start !important; + } + .align-items-lg-end { + align-items: flex-end !important; + } + .align-items-lg-center { + align-items: center !important; + } + .align-items-lg-baseline { + align-items: baseline !important; + } + .align-items-lg-stretch { + align-items: stretch !important; + } + .align-content-lg-start { + align-content: flex-start !important; + } + .align-content-lg-end { + align-content: flex-end !important; + } + .align-content-lg-center { + align-content: center !important; + } + .align-content-lg-between { + align-content: space-between !important; + } + .align-content-lg-around { + align-content: space-around !important; + } + .align-content-lg-stretch { + align-content: stretch !important; + } + .align-self-lg-auto { + align-self: auto !important; + } + .align-self-lg-start { + align-self: flex-start !important; + } + .align-self-lg-end { + align-self: flex-end !important; + } + .align-self-lg-center { + align-self: center !important; + } + .align-self-lg-baseline { + align-self: baseline !important; + } + .align-self-lg-stretch { + align-self: stretch !important; + } + .order-lg-first { + order: -1 !important; + } + .order-lg-0 { + order: 0 !important; + } + .order-lg-1 { + order: 1 !important; + } + .order-lg-2 { + order: 2 !important; + } + .order-lg-3 { + order: 3 !important; + } + .order-lg-4 { + order: 4 !important; + } + .order-lg-5 { + order: 5 !important; + } + .order-lg-last { + order: 6 !important; + } + .m-lg-0 { + margin: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-lg-0 { + margin-top: 0 !important; + } + .mt-lg-1 { + margin-top: 0.25rem !important; + } + .mt-lg-2 { + margin-top: 0.5rem !important; + } + .mt-lg-3 { + margin-top: 1rem !important; + } + .mt-lg-4 { + margin-top: 1.5rem !important; + } + .mt-lg-5 { + margin-top: 3rem !important; + } + .mt-lg-auto { + margin-top: auto !important; + } + .me-lg-0 { + margin-right: 0 !important; + } + .me-lg-1 { + margin-right: 0.25rem !important; + } + .me-lg-2 { + margin-right: 0.5rem !important; + } + .me-lg-3 { + margin-right: 1rem !important; + } + .me-lg-4 { + margin-right: 1.5rem !important; + } + .me-lg-5 { + margin-right: 3rem !important; + } + .me-lg-auto { + margin-right: auto !important; + } + .mb-lg-0 { + margin-bottom: 0 !important; + } + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + .mb-lg-3 { + margin-bottom: 1rem !important; + } + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + .mb-lg-5 { + margin-bottom: 3rem !important; + } + .mb-lg-auto { + margin-bottom: auto !important; + } + .ms-lg-0 { + margin-left: 0 !important; + } + .ms-lg-1 { + margin-left: 0.25rem !important; + } + .ms-lg-2 { + margin-left: 0.5rem !important; + } + .ms-lg-3 { + margin-left: 1rem !important; + } + .ms-lg-4 { + margin-left: 1.5rem !important; + } + .ms-lg-5 { + margin-left: 3rem !important; + } + .ms-lg-auto { + margin-left: auto !important; + } + .p-lg-0 { + padding: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-lg-0 { + padding-top: 0 !important; + } + .pt-lg-1 { + padding-top: 0.25rem !important; + } + .pt-lg-2 { + padding-top: 0.5rem !important; + } + .pt-lg-3 { + padding-top: 1rem !important; + } + .pt-lg-4 { + padding-top: 1.5rem !important; + } + .pt-lg-5 { + padding-top: 3rem !important; + } + .pe-lg-0 { + padding-right: 0 !important; + } + .pe-lg-1 { + padding-right: 0.25rem !important; + } + .pe-lg-2 { + padding-right: 0.5rem !important; + } + .pe-lg-3 { + padding-right: 1rem !important; + } + .pe-lg-4 { + padding-right: 1.5rem !important; + } + .pe-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-0 { + padding-bottom: 0 !important; + } + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + .pb-lg-3 { + padding-bottom: 1rem !important; + } + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + .pb-lg-5 { + padding-bottom: 3rem !important; + } + .ps-lg-0 { + padding-left: 0 !important; + } + .ps-lg-1 { + padding-left: 0.25rem !important; + } + .ps-lg-2 { + padding-left: 0.5rem !important; + } + .ps-lg-3 { + padding-left: 1rem !important; + } + .ps-lg-4 { + padding-left: 1.5rem !important; + } + .ps-lg-5 { + padding-left: 3rem !important; + } + .gap-lg-0 { + gap: 0 !important; + } + .gap-lg-1 { + gap: 0.25rem !important; + } + .gap-lg-2 { + gap: 0.5rem !important; + } + .gap-lg-3 { + gap: 1rem !important; + } + .gap-lg-4 { + gap: 1.5rem !important; + } + .gap-lg-5 { + gap: 3rem !important; + } + .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; + } + .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-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: flex !important; + } + .d-xl-inline-flex { + display: inline-flex !important; + } + .d-xl-none { + display: none !important; + } + .flex-xl-fill { + flex: 1 1 auto !important; + } + .flex-xl-row { + flex-direction: row !important; + } + .flex-xl-column { + flex-direction: column !important; + } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xl-wrap { + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xl-start { + justify-content: flex-start !important; + } + .justify-content-xl-end { + justify-content: flex-end !important; + } + .justify-content-xl-center { + justify-content: center !important; + } + .justify-content-xl-between { + justify-content: space-between !important; + } + .justify-content-xl-around { + justify-content: space-around !important; + } + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + .align-items-xl-start { + align-items: flex-start !important; + } + .align-items-xl-end { + align-items: flex-end !important; + } + .align-items-xl-center { + align-items: center !important; + } + .align-items-xl-baseline { + align-items: baseline !important; + } + .align-items-xl-stretch { + align-items: stretch !important; + } + .align-content-xl-start { + align-content: flex-start !important; + } + .align-content-xl-end { + align-content: flex-end !important; + } + .align-content-xl-center { + align-content: center !important; + } + .align-content-xl-between { + align-content: space-between !important; + } + .align-content-xl-around { + align-content: space-around !important; + } + .align-content-xl-stretch { + align-content: stretch !important; + } + .align-self-xl-auto { + align-self: auto !important; + } + .align-self-xl-start { + align-self: flex-start !important; + } + .align-self-xl-end { + align-self: flex-end !important; + } + .align-self-xl-center { + align-self: center !important; + } + .align-self-xl-baseline { + align-self: baseline !important; + } + .align-self-xl-stretch { + align-self: stretch !important; + } + .order-xl-first { + order: -1 !important; + } + .order-xl-0 { + order: 0 !important; + } + .order-xl-1 { + order: 1 !important; + } + .order-xl-2 { + order: 2 !important; + } + .order-xl-3 { + order: 3 !important; + } + .order-xl-4 { + order: 4 !important; + } + .order-xl-5 { + order: 5 !important; + } + .order-xl-last { + order: 6 !important; + } + .m-xl-0 { + margin: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xl-0 { + margin-top: 0 !important; + } + .mt-xl-1 { + margin-top: 0.25rem !important; + } + .mt-xl-2 { + margin-top: 0.5rem !important; + } + .mt-xl-3 { + margin-top: 1rem !important; + } + .mt-xl-4 { + margin-top: 1.5rem !important; + } + .mt-xl-5 { + margin-top: 3rem !important; + } + .mt-xl-auto { + margin-top: auto !important; + } + .me-xl-0 { + margin-right: 0 !important; + } + .me-xl-1 { + margin-right: 0.25rem !important; + } + .me-xl-2 { + margin-right: 0.5rem !important; + } + .me-xl-3 { + margin-right: 1rem !important; + } + .me-xl-4 { + margin-right: 1.5rem !important; + } + .me-xl-5 { + margin-right: 3rem !important; + } + .me-xl-auto { + margin-right: auto !important; + } + .mb-xl-0 { + margin-bottom: 0 !important; + } + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xl-3 { + margin-bottom: 1rem !important; + } + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xl-5 { + margin-bottom: 3rem !important; + } + .mb-xl-auto { + margin-bottom: auto !important; + } + .ms-xl-0 { + margin-left: 0 !important; + } + .ms-xl-1 { + margin-left: 0.25rem !important; + } + .ms-xl-2 { + margin-left: 0.5rem !important; + } + .ms-xl-3 { + margin-left: 1rem !important; + } + .ms-xl-4 { + margin-left: 1.5rem !important; + } + .ms-xl-5 { + margin-left: 3rem !important; + } + .ms-xl-auto { + margin-left: auto !important; + } + .p-xl-0 { + padding: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xl-0 { + padding-top: 0 !important; + } + .pt-xl-1 { + padding-top: 0.25rem !important; + } + .pt-xl-2 { + padding-top: 0.5rem !important; + } + .pt-xl-3 { + padding-top: 1rem !important; + } + .pt-xl-4 { + padding-top: 1.5rem !important; + } + .pt-xl-5 { + padding-top: 3rem !important; + } + .pe-xl-0 { + padding-right: 0 !important; + } + .pe-xl-1 { + padding-right: 0.25rem !important; + } + .pe-xl-2 { + padding-right: 0.5rem !important; + } + .pe-xl-3 { + padding-right: 1rem !important; + } + .pe-xl-4 { + padding-right: 1.5rem !important; + } + .pe-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-0 { + padding-bottom: 0 !important; + } + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xl-3 { + padding-bottom: 1rem !important; + } + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xl-5 { + padding-bottom: 3rem !important; + } + .ps-xl-0 { + padding-left: 0 !important; + } + .ps-xl-1 { + padding-left: 0.25rem !important; + } + .ps-xl-2 { + padding-left: 0.5rem !important; + } + .ps-xl-3 { + padding-left: 1rem !important; + } + .ps-xl-4 { + padding-left: 1.5rem !important; + } + .ps-xl-5 { + padding-left: 3rem !important; + } + .gap-xl-0 { + gap: 0 !important; + } + .gap-xl-1 { + gap: 0.25rem !important; + } + .gap-xl-2 { + gap: 0.5rem !important; + } + .gap-xl-3 { + gap: 1rem !important; + } + .gap-xl-4 { + gap: 1.5rem !important; + } + .gap-xl-5 { + gap: 3rem !important; + } + .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; + } + .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-table { + display: table !important; + } + .d-xxl-table-row { + display: table-row !important; + } + .d-xxl-table-cell { + display: table-cell !important; + } + .d-xxl-flex { + display: flex !important; + } + .d-xxl-inline-flex { + display: inline-flex !important; + } + .d-xxl-none { + display: none !important; + } + .flex-xxl-fill { + flex: 1 1 auto !important; + } + .flex-xxl-row { + flex-direction: row !important; + } + .flex-xxl-column { + flex-direction: column !important; + } + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xxl-start { + justify-content: flex-start !important; + } + .justify-content-xxl-end { + justify-content: flex-end !important; + } + .justify-content-xxl-center { + justify-content: center !important; + } + .justify-content-xxl-between { + justify-content: space-between !important; + } + .justify-content-xxl-around { + justify-content: space-around !important; + } + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + .align-items-xxl-start { + align-items: flex-start !important; + } + .align-items-xxl-end { + align-items: flex-end !important; + } + .align-items-xxl-center { + align-items: center !important; + } + .align-items-xxl-baseline { + align-items: baseline !important; + } + .align-items-xxl-stretch { + align-items: stretch !important; + } + .align-content-xxl-start { + align-content: flex-start !important; + } + .align-content-xxl-end { + align-content: flex-end !important; + } + .align-content-xxl-center { + align-content: center !important; + } + .align-content-xxl-between { + align-content: space-between !important; + } + .align-content-xxl-around { + align-content: space-around !important; + } + .align-content-xxl-stretch { + align-content: stretch !important; + } + .align-self-xxl-auto { + align-self: auto !important; + } + .align-self-xxl-start { + align-self: flex-start !important; + } + .align-self-xxl-end { + align-self: flex-end !important; + } + .align-self-xxl-center { + align-self: center !important; + } + .align-self-xxl-baseline { + align-self: baseline !important; + } + .align-self-xxl-stretch { + align-self: stretch !important; + } + .order-xxl-first { + order: -1 !important; + } + .order-xxl-0 { + order: 0 !important; + } + .order-xxl-1 { + order: 1 !important; + } + .order-xxl-2 { + order: 2 !important; + } + .order-xxl-3 { + order: 3 !important; + } + .order-xxl-4 { + order: 4 !important; + } + .order-xxl-5 { + order: 5 !important; + } + .order-xxl-last { + order: 6 !important; + } + .m-xxl-0 { + margin: 0 !important; + } + .m-xxl-1 { + margin: 0.25rem !important; + } + .m-xxl-2 { + margin: 0.5rem !important; + } + .m-xxl-3 { + margin: 1rem !important; + } + .m-xxl-4 { + margin: 1.5rem !important; + } + .m-xxl-5 { + margin: 3rem !important; + } + .m-xxl-auto { + margin: auto !important; + } + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xxl-0 { + margin-top: 0 !important; + } + .mt-xxl-1 { + margin-top: 0.25rem !important; + } + .mt-xxl-2 { + margin-top: 0.5rem !important; + } + .mt-xxl-3 { + margin-top: 1rem !important; + } + .mt-xxl-4 { + margin-top: 1.5rem !important; + } + .mt-xxl-5 { + margin-top: 3rem !important; + } + .mt-xxl-auto { + margin-top: auto !important; + } + .me-xxl-0 { + margin-right: 0 !important; + } + .me-xxl-1 { + margin-right: 0.25rem !important; + } + .me-xxl-2 { + margin-right: 0.5rem !important; + } + .me-xxl-3 { + margin-right: 1rem !important; + } + .me-xxl-4 { + margin-right: 1.5rem !important; + } + .me-xxl-5 { + margin-right: 3rem !important; + } + .me-xxl-auto { + margin-right: auto !important; + } + .mb-xxl-0 { + margin-bottom: 0 !important; + } + .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xxl-3 { + margin-bottom: 1rem !important; + } + .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xxl-5 { + margin-bottom: 3rem !important; + } + .mb-xxl-auto { + margin-bottom: auto !important; + } + .ms-xxl-0 { + margin-left: 0 !important; + } + .ms-xxl-1 { + margin-left: 0.25rem !important; + } + .ms-xxl-2 { + margin-left: 0.5rem !important; + } + .ms-xxl-3 { + margin-left: 1rem !important; + } + .ms-xxl-4 { + margin-left: 1.5rem !important; + } + .ms-xxl-5 { + margin-left: 3rem !important; + } + .ms-xxl-auto { + margin-left: auto !important; + } + .p-xxl-0 { + padding: 0 !important; + } + .p-xxl-1 { + padding: 0.25rem !important; + } + .p-xxl-2 { + padding: 0.5rem !important; + } + .p-xxl-3 { + padding: 1rem !important; + } + .p-xxl-4 { + padding: 1.5rem !important; + } + .p-xxl-5 { + padding: 3rem !important; + } + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xxl-0 { + padding-top: 0 !important; + } + .pt-xxl-1 { + padding-top: 0.25rem !important; + } + .pt-xxl-2 { + padding-top: 0.5rem !important; + } + .pt-xxl-3 { + padding-top: 1rem !important; + } + .pt-xxl-4 { + padding-top: 1.5rem !important; + } + .pt-xxl-5 { + padding-top: 3rem !important; + } + .pe-xxl-0 { + padding-right: 0 !important; + } + .pe-xxl-1 { + padding-right: 0.25rem !important; + } + .pe-xxl-2 { + padding-right: 0.5rem !important; + } + .pe-xxl-3 { + padding-right: 1rem !important; + } + .pe-xxl-4 { + padding-right: 1.5rem !important; + } + .pe-xxl-5 { + padding-right: 3rem !important; + } + .pb-xxl-0 { + padding-bottom: 0 !important; + } + .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xxl-3 { + padding-bottom: 1rem !important; + } + .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xxl-5 { + padding-bottom: 3rem !important; + } + .ps-xxl-0 { + padding-left: 0 !important; + } + .ps-xxl-1 { + padding-left: 0.25rem !important; + } + .ps-xxl-2 { + padding-left: 0.5rem !important; + } + .ps-xxl-3 { + padding-left: 1rem !important; + } + .ps-xxl-4 { + padding-left: 1.5rem !important; + } + .ps-xxl-5 { + padding-left: 3rem !important; + } + .gap-xxl-0 { + gap: 0 !important; + } + .gap-xxl-1 { + gap: 0.25rem !important; + } + .gap-xxl-2 { + gap: 0.5rem !important; + } + .gap-xxl-3 { + gap: 1rem !important; + } + .gap-xxl-4 { + gap: 1.5rem !important; + } + .gap-xxl-5 { + gap: 3rem !important; + } + .text-xxl-start { + text-align: left !important; + } + .text-xxl-end { + text-align: right !important; + } + .text-xxl-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .fs-1 { + font-size: 2.5rem !important; + } + .fs-2 { + font-size: 2rem !important; + } + .fs-3 { + font-size: 1.75rem !important; + } + .fs-4 { + font-size: 1.5rem !important; + } +} +@media print { + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-grid { + display: grid !important; + } + .d-print-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; + } +} + +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/assets/css/bootstrap.css.map b/assets/css/bootstrap.css.map new file mode 100644 index 00000000..633be116 --- /dev/null +++ b/assets/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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BkB;EExjBlB,gBFwiB0B;AL3F9B;AG9WI;EIpGF;IJ6QM,iBAAA;EHyMN;AACF;;AOvdE;EJsQM,iCAAA;EIlQJ,gBFyjBkB;EExjBlB,gBFwiB0B;ALhF9B;AGzXI;EIpGF;IJ6QM,eAAA;EHoNN;AACF;;AOleE;EJsQM,iCAAA;EIlQJ,gBFyjBkB;EExjBlB,gBFwiB0B;ALrE9B;AGpYI;EIpGF;IJ6QM,iBAAA;EH+NN;AACF;;AO7eE;EJsQM,iCAAA;EIlQJ,gBFyjBkB;EExjBlB,gBFwiB0B;AL1D9B;AG/YI;EIpGF;IJ6QM,eAAA;EH0ON;AACF;;AOxfE;EJsQM,iCAAA;EIlQJ,gBFyjBkB;EExjBlB,gBFwiB0B;AL/C9B;AG1ZI;EIpGF;IJ6QM,iBAAA;EHqPN;AACF;;AO3eA;ECvDE,eAAA;EACA,gBAAA;ARsiBF;;AO3eA;EC5DE,eAAA;EACA,gBAAA;AR2iBF;;AO7eA;EACE,qBAAA;APgfF;AO9eE;EACE,oBFgkB0B;ALhF9B;;AOteA;EJoNM,kBALI;EI7MR,yBAAA;APyeF;;AOreA;EACE,mBF6RO;EFhFH,kBALI;AHiSV;AOteE;EACE,gBAAA;APweJ;;AOpeA;EACE,iBAAA;EACA,mBFmRO;EFhFH,kBALI;EI5LR,cFtFS;AL6jBX;AOreE;EACE,aAAA;APueJ;;ASvkBA;ECIE,eAAA;EAGA,YAAA;AVqkBF;;AStkBA;EACE,gBJ48CkC;EI38ClC,sBJPS;EIQT,wCAAA;EHGE,uBAAA;EIRF,eAAA;EAGA,YAAA;AV8kBF;;AShkBA;EAEE,qBAAA;ATkkBF;;AS/jBA;EACE,qBAAA;EACA,cAAA;ATkkBF;;AS/jBA;EN+PM,kBALI;EMxPR,cJ1BS;AL4lBX;;AWpmBE;;;;;;;ECHA,qBAAA;EACA,gBAAA;EACA,WAAA;EACA,6CAAA;EACA,4CAAA;EACA,kBAAA;EACA,iBAAA;AZinBF;;Aa3jBI;EF5CE;IACE,gBN6ae;EL8LrB;AACF;AajkBI;EF5CE;IACE,gBN6ae;ELmMrB;AACF;AatkBI;EF5CE;IACE,gBN6ae;ELwMrB;AACF;Aa3kBI;EF5CE;IACE,iBN6ae;EL6MrB;AA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AAA;EACA,yBAAA;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;EdGE,uBAAA;EeHE,wEDMJ;ApBy7DF;AqB37DM;EDhBN;ICiBQ,gBAAA;ErB87DN;AACF;AoB57DE;EACE,gBAAA;ApB87DJ;AoB57DI;EACE,eAAA;ApB87DN;AoBz7DE;EACE,cfjBO;EekBP,sBf3BO;Ee4BP,qBfqyBoC;EepyBpC,UAAA;EAKE,kDf6qB0B;AL0wChC;AoBh7DE;EAEE,aAAA;ApBi7DJ;AoB76DE;EACE,cf1CO;Ee4CP,UAAA;ApB86DJ;AoBj7DE;EACE,cf1CO;Ee4CP,UAAA;ApB86DJ;AoBt6DE;EAEE,yBf1DO;Ee6DP,UAAA;ApBq6DJ;AoBj6DE;EACE,yBAAA;EACA,0BAAA;EACA,2BfgoB0B;EehoB1B,0BfgoB0B;Ee/nB1B,cf9DO;EiBbT,yBjBMS;EeuEP,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,eAAA;EACA,4Bf0Y0B;EezY1B,gBAAA;ECtEE,6IDuEF;ECvEE,qIDuEF;ApBm6DJ;AoB/6DE;EACE,yBAAA;EACA,0BAAA;EACA,2BfgoB0B;EehoB1B,0BfgoB0B;Ee/nB1B,cf9DO;EiBbT,yBjBMS;EeuEP,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,eAAA;EACA,4Bf0Y0B;EezY1B,gBAAA;ECtEE,qIDuEF;ApBm6DJ;AqBt+DM;EDuDJ;ICtDM,wBAAA;IAAA,gBAAA;ErBy+DN;EoBn7DA;ICtDM,gBAAA;ErBy+DN;AACF;AoBr6DE;EACE,yBfs4B8B;ALiiClC;AoBx6DE;EACE,yBfs4B8B;ALiiClC;;AoB95DA;EACE,cAAA;EACA,WAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBf2c4B;Ee1c5B,cfzFS;Ee0FT,6BAAA;EACA,yBAAA;EACA,mBAAA;ApBi6DF;AoB/5DE;EACE,UAAA;ApBi6DJ;AoB95DE;EAEE,gBAAA;EACA,eAAA;ApB+5DJ;;AoBp5DA;EACE,sCfstBsC;EertBtC,uBAAA;EjBkKI,mBALI;EG7QN,sBAAA;ANygEJ;AoBr5DE;EACE,uBAAA;EACA,wBAAA;EACA,0BfglB0B;EehlB1B,yBfglB0B;ALu0C9B;AoB15DE;EACE,uBAAA;EACA,wBAAA;EACA,0BfglB0B;EehlB1B,yBfglB0B;ALu0C9B;;AoBn5DA;EACE,oCf0sBsC;EezsBtC,oBAAA;EjBqJI,kBALI;EG7QN,qBAAA;ANqhEJ;AoBp5DE;EACE,oBAAA;EACA,qBAAA;EACA,wBfukB0B;EevkB1B,uBfukB0B;AL+0C9B;AoBz5DE;EACE,oBAAA;EACA,qBAAA;EACA,wBfukB0B;EevkB1B,uBfukB0B;AL+0C9B;;AoB94DE;EACE,uCfurBoC;AL0tCxC;AoB94DE;EACE,sCforBoC;AL4tCxC;AoB74DE;EACE,oCfirBoC;AL8tCxC;;AoB14DA;EACE,Wf+qBsC;Ee9qBtC,mCfwqBsC;EevqBtC,iBf6hB4B;ALg3C9B;AoB34DE;EACE,eAAA;ApB64DJ;AoB14DE;EACE,oBAAA;EdpKA,uBAAA;ANijEJ;AoBz4DE;EdxKE,uBAAA;ANojEJ;AoBx4DE;EAAoB,kCfypBkB;ALkvCxC;AoB14DE;EAAoB,gCfypBkB;ALovCxC;;AuBxkEA;EACE,cAAA;EACA,WAAA;EACA,0CAAA;EACA,uCAAA;EpB4RI,eALI;EoBpRR,gBlBiiB4B;EkBhiB5B,gBlBuiB4B;EkBtiB5B,clBGS;EkBFT,sBlBPS;EkBQT,iPAAA;EACA,4BAAA;EACA,yClBw5BkC;EkBv5BlC,0BlBw5BkC;EkBv5BlC,yBAAA;EjBDE,uBAAA;EeHE,wEEOJ;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;AvBykEF;AqB7kEM;EEfN;IFgBQ,gBAAA;ErBglEN;AACF;AuB5kEE;EACE,qBlB8yBoC;EkB7yBpC,UAAA;EAKE,kDlBy5B4B;ALirClC;AuBtkEE;EAEE,sBlBuqB0B;EkBtqB1B,sBAAA;AvBukEJ;AuBpkEE;EAEE,yBlBnCO;ALwmEX;AuBhkEE;EACE,kBAAA;EACA,0BAAA;AvBkkEJ;;AuB9jEA;EACE,oBlBgqB4B;EkB/pB5B,uBlB+pB4B;EkB9pB5B,oBlB+pB4B;EFrbxB,mBALI;EG7QN,sBAAA;AN2mEJ;;AuB9jEA;EACE,mBlB4pB4B;EkB3pB5B,sBlB2pB4B;EkB1pB5B,kBlB2pB4B;EFzbxB,kBALI;EG7QN,qBAAA;ANmnEJ;;AwBloEA;EACE,cAAA;EACA,kBnB41BwC;EmB31BxC,mBnB41BwC;EmB31BxC,uBnB41BwC;ALyyC1C;AwBnoEE;EACE,WAAA;EACA,mBAAA;AxBqoEJ;;AwBjoEA;EACE,oBnBk1BwC;EmBj1BxC,eAAA;EACA,iBAAA;AxBooEF;AwBloEE;EACE,YAAA;EACA,oBAAA;EACA,cAAA;AxBooEJ;;AwBhoEA;EACE,UnBo0BwC;EmBn0BxC,WnBm0BwC;EmBl0BxC,kBAAA;EACA,mBAAA;EACA,sBnBzBS;EmB0BT,4BAAA;EACA,2BAAA;EACA,wBAAA;EACA,qCnBu0BwC;EmBt0BxC,wBAAA;EAAA,qBAAA;EAAA,gBAAA;EACA,iCAAA;EAAA,mBAAA;EAAA,yBAAA;AxBmoEF;AwBhoEE;ElBvBE,qBAAA;AN0pEJ;AwB/nEE;EAEE,kBnB8zBsC;ALk0C1C;AwB7nEE;EACE,uBnBqzBsC;AL00C1C;AwB5nEE;EACE,qBnBixBoC;EmBhxBpC,UAAA;EACA,kDnB6pB4B;ALi+ChC;AwB3nEE;EACE,yBnBxBM;EmByBN,qBnBzBM;ALspEV;AwB3nEI;EAII,+OAAA;AxB0nER;AwBtnEI;EAII,uJAAA;AxBqnER;AwBhnEE;EACE,yBnB7CM;EmB8CN,qBnB9CM;EmBmDJ,yOAAA;AxB8mEN;AwB1mEE;EACE,oBAAA;EACA,YAAA;EACA,YnB6xBuC;AL+0C3C;AwBrmEI;EACE,eAAA;EACA,YnBoxBqC;ALm1C3C;;AwBzlEA;EACE,mBnB+wBgC;AL60ClC;AwB1lEE;EACE,UnB2wB8B;EmB1wB9B,mBAAA;EACA,wKAAA;EACA,gCAAA;ElB3GA,kBAAA;EeHE,iDGgHF;AxB4lEJ;AqBxsEM;EGsGJ;IHrGM,gBAAA;ErB2sEN;AACF;AwB/lEI;EACE,0JAAA;AxBimEN;AwB9lEI;EACE,iCnB0wB4B;EmBrwB1B,uJAAA;AxB4lER;AwBvlEE;EACE,oBnBqvB8B;EmBpvB9B,eAAA;AxBylEJ;AwBvlEI;EACE,oBAAA;EACA,cAAA;AxBylEN;;AwBplEA;EACE,qBAAA;EACA,kBnBmuBgC;ALo3ClC;;AwBplEA;EACE,kBAAA;EACA,sBAAA;EACA,oBAAA;AxBulEF;AwBnlEI;EACE,oBAAA;EACA,YAAA;EACA,anBolBwB;ALigD9B;;AyB1vEA;EACE,WAAA;EACA,cAAA;EACA,UAAA;EACA,6BAAA;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;AzB6vEF;AyB3vEE;EACE,UAAA;AzB6vEJ;AyBzvEI;EAA0B,kEpBq8Ba;ALuzC3C;AyB3vEI;EAA0B,kEpBo8Ba;AL0zC3C;AyB3vEE;EACE,SAAA;AzB6vEJ;AyB1vEE;EACE,WpBs7BuC;EoBr7BvC,YpBq7BuC;EoBp7BvC,oBAAA;EHzBF,yBjBkCQ;EoBPN,SpBq7BuC;ECj8BvC,mBAAA;EeHE,oHIkBF;EJlBE,4GIkBF;EACA,wBAAA;EAAA,gBAAA;AzB2vEJ;AqB1wEM;EIMJ;IJLM,wBAAA;IAAA,gBAAA;ErB6wEN;AACF;AyB9vEI;EHjCF,yBjBq9ByC;AL60C3C;AyB5vEE;EACE,WpB+5B8B;EoB95B9B,cpB+5B8B;EoB95B9B,kBAAA;EACA,epB85B8B;EoB75B9B,yBpBpCO;EoBqCP,yBAAA;EnB7BA,mBAAA;AN4xEJ;AyB1vEE;EACE,WpB25BuC;EoB15BvC,YpB05BuC;EiB78BzC,yBjBkCQ;EoBmBN,SpB25BuC;ECj8BvC,mBAAA;EeHE,iHI4CF;EJ5CE,4GI4CF;EACA,qBAAA;EAAA,gBAAA;AzB2vEJ;AqBpyEM;EIiCJ;IJhCM,qBAAA;IAAA,gBAAA;ErBuyEN;AACF;AyB9vEI;EH3DF,yBjBq9ByC;ALu2C3C;AyB5vEE;EACE,WpBq4B8B;EoBp4B9B,cpBq4B8B;EoBp4B9B,kBAAA;EACA,epBo4B8B;EoBn4B9B,yBpB9DO;EoB+DP,yBAAA;EnBvDA,mBAAA;ANszEJ;AyB1vEE;EACE,oBAAA;AzB4vEJ;AyB1vEI;EACE,yBpBtEK;ALk0EX;AyBzvEI;EACE,yBpB1EK;ALq0EX;;A0Bl1EA;EACE,kBAAA;A1Bq1EF;A0Bn1EE;;;EAGE,0BrB+9B8B;EqB99B9B,iB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B,yBDiLsB;A9C6sJ1B;A+C33JM;EAEE,cD6KqB;EC5KrB,yBAAA;A/C43JR;A+Cz3JM;EACE,W1CRG;E0CSH,yBDuKqB;ECtKrB,qBDsKqB;A9CqtJ7B;;A+Cz4JE;EACE,cDmLyB;EClLzB,yBDiLsB;A9C2tJ1B;A+Cz4JM;EAEE,cD6KqB;EC5KrB,yBAAA;A/C04JR;A+Cv4JM;EACE,W1CRG;E0CSH,yBDuKqB;ECtKrB,qBDsKqB;A9CmuJ7B;;A+Cv5JE;EACE,cDqL2B;ECpL3B,yBDiLsB;A9CyuJ1B;A+Cv5JM;EAEE,cD+KuB;EC9KvB,yBAAA;A/Cw5JR;A+Cr5JM;EACE,W1CRG;E0CSH,yBDyKuB;ECxKvB,qBDwKuB;A9C+uJ/B;;A+Cr6JE;EACE,cDqL2B;ECpL3B,yBDiLsB;A9CuvJ1B;A+Cr6JM;EAEE,cD+KuB;EC9KvB,yBAAA;A/Cs6JR;A+Cn6JM;EACE,W1CRG;E0CSH,yBDyKuB;ECxKvB,qBDwKuB;A9C6vJ/B;;A+Cn7JE;EACE,cDmLyB;EClLzB,yBDiLsB;A9CqwJ1B;A+Cn7JM;EAEE,cD6KqB;EC5KrB,yBAAA;A/Co7JR;A+Cj7JM;EACE,W1CRG;E0CSH,yBDuKqB;ECtKrB,qBDsKqB;A9C6wJ7B;;A+Cj8JE;EACE,cDqL2B;ECpL3B,yBDiLsB;A9CmxJ1B;A+Cj8JM;EAEE,cD+KuB;EC9KvB,yBAAA;A/Ck8JR;A+C/7JM;EACE,W1CRG;E0CSH,yBDyKuB;ECxKvB,qBDwKuB;A9CyxJ/B;;A+C/8JE;EACE,cDmLyB;EClLzB,yBDiLsB;A9CiyJ1B;A+C/8JM;EAEE,cD6KqB;EC5KrB,yBAAA;A/Cg9JR;A+C78JM;EACE,W1CRG;E0CSH,yBDuKqB;ECtKrB,qBDsKqB;A9CyyJ7B;;AgD59JA;EACE,uBAAA;EACA,U3C6iD2B;E2C5iD3B,W3C4iD2B;E2C3iD3B,sBAAA;EACA,W3CQS;E2CPT,mXAAA;EACA,SAAA;E1COE,uBAAA;E0CLF,Y3C6iD2B;ALk7G7B;AgD59JE;EACE,WAAA;EACA,qBAAA;EACA,a3CwiDyB;ALs7G7B;AgD39JE;EACE,UAAA;EACA,kD3C8rB4B;E2C7rB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V;EuEhiQM;IAOI,iCAAA;EvE4hQV;EuEniQM;IAOI,sCAAA;EvE+hQV;EuEtiQM;IAOI,yCAAA;EvEkiQV;EuEziQM;IAOI,uBAAA;EvEqiQV;EuE5iQM;IAOI,uBAAA;EvEwiQV;EuE/iQM;IAOI,yBAAA;EvE2iQV;EuEljQM;IAOI,yBAAA;EvE8iQV;EuErjQM;IAOI,0BAAA;EvEijQV;EuExjQM;IAOI,4BAAA;EvEojQV;EuE3jQM;IAOI,kCAAA;EvEujQV;EuE9jQM;IAOI,sCAAA;EvE0jQV;EuEjkQM;IAOI,oCAAA;EvE6jQV;EuEpkQM;IAOI,kCAAA;EvEgkQV;EuEvkQM;IAOI,yCAAA;EvEmkQV;EuE1kQM;IAOI,wCAAA;EvEskQV;EuE7kQM;IAOI,wCAAA;EvEykQV;EuEhlQM;IAOI,kCAAA;EvE4kQV;EuEnlQM;IAOI,gCAAA;EvE+kQV;EuEtlQM;IAOI,8BAAA;EvEklQV;EuEzlQM;IAOI,gCAAA;EvEqlQV;EuE5lQM;IAOI,+BAAA;EvEwlQV;EuE/lQM;IAOI,oCAAA;EvE2lQV;EuElmQM;IAOI,kCAAA;EvE8lQV;EuErmQM;IAOI,gCAAA;EvEimQV;EuExmQM;IAOI,uCAAA;EvEomQV;EuE3mQM;IAOI,sCAAA;EvEumQV;EuE9mQM;IAOI,iCAAA;EvE0mQV;EuEjnQM;IAOI,2BAAA;EvE6mQV;EuEpnQM;IAOI,iCAAA;EvEgnQV;EuEvnQM;IAOI,+BAAA;EvEmnQV;EuE1nQM;IAOI,6BAAA;EvEsnQV;EuE7nQM;IAOI,+BAAA;EvEynQV;EuEhoQM;IAOI,8BAAA;EvE4nQV;EuEnoQM;IAOI,oBAAA;EvE+nQV;EuEtoQM;IAOI,mBAAA;EvEkoQV;EuEzoQM;IAOI,mBAAA;EvEqoQV;EuE5oQM;IAOI,mBAAA;EvEwoQV;EuE/oQM;IAOI,mBAAA;EvE2oQV;EuElpQM;IAOI,mBAAA;EvE8oQV;EuErpQM;IAOI,mBAAA;EvEipQV;EuExpQM;IAOI,mBAAA;EvEopQV;EuE3pQM;IAOI,oBAAA;EvEupQV;EuE9pQM;IAOI,0BAAA;EvE0pQV;EuEjqQM;IAOI,yBAAA;EvE6pQV;EuEpqQM;IA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;EvEo6QV;EuE36QM;IAOI,+BAAA;EvEu6QV;EuE96QM;IAOI,iCAAA;EvE06QV;EuEj7QM;IAOI,+BAAA;EvE66QV;EuEp7QM;IAOI,0BAAA;EvEg7QV;EuEv7QM;IAOI,gCAAA;EvEm7QV;EuE17QM;IAOI,+BAAA;EvEs7QV;EuE77QM;IAOI,6BAAA;EvEy7QV;EuEh8QM;IAOI,+BAAA;EvE47QV;EuEn8QM;IAOI,6BAAA;EvE+7QV;EuEt8QM;IAOI,iBAAA;EvEk8QV;EuEz8QM;IAOI,uBAAA;EvEq8QV;EuE58QM;IAOI,sBAAA;EvEw8QV;EuE/8QM;IAOI,oBAAA;EvE28QV;EuEl9QM;IAOI,sBAAA;EvE88QV;EuEr9QM;IAOI,oBAAA;EvEi9QV;EuEx9QM;IAOI,2BAAA;EvEo9QV;EuE39QM;IAOI,4BAAA;EvEu9QV;EuE99QM;IAOI,6BAAA;EvE09QV;AACF;Aar+QI;E0DGI;IAOI,sBAAA;EvE+9QV;EuEt+QM;IAOI,uBAAA;EvEk+QV;EuEz+QM;IAOI,sBAAA;EvEq+QV;EuE5+QM;IAOI,0BAAA;EvEw+QV;EuE/+QM;IAOI,gCAAA;EvE2+QV;EuEl/QM;IAOI,yBAAA;EvE8+QV;EuEr/QM;IAOI,wBAAA;EvEi/QV;EuEx/QM;IAOI,yBAAA;EvEo/QV;EuE3/QM;IAOI,6BAAA;EvEu/QV;EuE9/QM;IAOI,8BAAA;EvE0/QV;EuEjgRM;IAOI,wBAAA;EvE6/QV;EuEpgRM;IAOI,+BAAA;EvEggRV;EuEvgRM;IAOI,wBAAA;EvEmgRV;EuE1gRM;IAOI,yBAAA;EvEsgRV;EuE7gRM;IAOI,8BAAA;EvEygRV;EuEhhRM;IAOI,iCAAA;EvE4gRV;EuEnhRM;IAOI,sCAAA;EvE+gRV;EuEthRM;IAOI,yCAAA;EvEkhRV;EuEzhRM;IAOI,uBAAA;EvEqhRV;EuE5hRM;IAOI,uBAAA;EvEwhRV;EuE/hRM;IAOI,yBAAA;EvE2hRV;EuEliRM;IAOI,yBAAA;EvE8hRV;EuEriRM;IAOI,0BAAA;EvEiiRV;EuExiRM;IAOI,4BAAA;EvEoiRV;EuE3iRM;IAOI,kCAAA;EvEuiRV;EuE9iRM;IAOI,sCAAA;E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uBAAA;EvEq7RV;EuE57RM;IAOI,sBAAA;EvEw7RV;EuE/7RM;IAOI,oBAAA;EvE27RV;EuEl8RM;IAOI,sBAAA;EvE87RV;EuEr8RM;IAOI,oBAAA;EvEi8RV;EuEx8RM;IAOI,2BAAA;EvEo8RV;EuE38RM;IAOI,4BAAA;EvEu8RV;EuE98RM;IAOI,6BAAA;EvE08RV;AACF;Aar9RI;E0DGI;IAOI,sBAAA;EvE+8RV;EuEt9RM;IAOI,uBAAA;EvEk9RV;EuEz9RM;IAOI,sBAAA;EvEq9RV;EuE59RM;IAOI,0BAAA;EvEw9RV;EuE/9RM;IAOI,gCAAA;EvE29RV;EuEl+RM;IAOI,yBAAA;EvE89RV;EuEr+RM;IAOI,wBAAA;EvEi+RV;EuEx+RM;IAOI,yBAAA;EvEo+RV;EuE3+RM;IAOI,6BAAA;EvEu+RV;EuE9+RM;IAOI,8BAAA;EvE0+RV;EuEj/RM;IAOI,wBAAA;EvE6+RV;EuEp/RM;IAOI,+BAAA;EvEg/RV;EuEv/RM;IAOI,wBAAA;EvEm/RV;EuE1/RM;IAOI,yBAAA;EvEs/RV;EuE7/RM;IAOI,8BAAA;EvEy/RV;EuEhgSM;IAOI,iCAAA;EvE4/RV;EuEngSM;IAOI,sCAAA;EvE+/RV;EuEtgSM;IAOI,yCAAA;EvEkgSV;EuEzgSM;IAOI,uBAAA;EvEqgSV;EuE5gSM;IAOI,uBAAA;EvEwgSV;EuE/gSM;IAOI,yBAAA;EvE2gSV;EuElhSM;IAOI,yBAAA;EvE8gSV;EuErhSM;IAOI,0BAAA;EvEihSV;EuExhSM;IAOI,4BAAA;EvEohSV;EuE3hSM;IAOI,kCAAA;EvEuhSV;EuE9hSM;IAOI,sCAAA;EvE0hSV;EuEjiSM;IAOI,oCAAA;EvE6hSV;EuEpiSM;IAOI,kCAAA;EvEgiSV;EuEviSM;IAOI,yCAAA;EvEmiSV;EuE1iSM;IAOI,wCAAA;EvEsiSV;EuE7iSM;IAOI,wCAAA;EvEyiSV;EuEhjSM;IAOI,kCAAA;EvE4iSV;EuEnjSM;IAOI,gCAAA;EvE+iSV;EuEtjSM;IAOI,8BAAA;EvEkjSV;EuEzjSM;IAOI,gCAAA;EvEqjSV;EuE5jSM;IAOI,+BAAA;EvEwjSV;EuE/jSM;IAOI,oC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V;EuE58SM;IAOI,0BAAA;EvEw8SV;EuE/8SM;IAOI,gCAAA;EvE28SV;EuEl9SM;IAOI,yBAAA;EvE88SV;EuEr9SM;IAOI,wBAAA;EvEi9SV;EuEx9SM;IAOI,yBAAA;EvEo9SV;EuE39SM;IAOI,6BAAA;EvEu9SV;EuE99SM;IAOI,8BAAA;EvE09SV;EuEj+SM;IAOI,wBAAA;EvE69SV;EuEp+SM;IAOI,+BAAA;EvEg+SV;EuEv+SM;IAOI,wBAAA;EvEm+SV;EuE1+SM;IAOI,yBAAA;EvEs+SV;EuE7+SM;IAOI,8BAAA;EvEy+SV;EuEh/SM;IAOI,iCAAA;EvE4+SV;EuEn/SM;IAOI,sCAAA;EvE++SV;EuEt/SM;IAOI,yCAAA;EvEk/SV;EuEz/SM;IAOI,uBAAA;EvEq/SV;EuE5/SM;IAOI,uBAAA;EvEw/SV;EuE//SM;IAOI,yBAAA;EvE2/SV;EuElgTM;IAOI,yBAAA;EvE8/SV;EuErgTM;IAOI,0BAAA;EvEigTV;EuExgTM;IAOI,4BAAA;EvEogTV;EuE3gTM;IAOI,kCAAA;EvEugTV;EuE9gTM;IAOI,sCAAA;EvE0gTV;EuEjhTM;IAOI,oCAAA;EvE6gTV;EuEphTM;IAOI,kCAAA;EvEghTV;EuEvhTM;IAOI,yCAAA;EvEmhTV;EuE1hTM;IAOI,wCAAA;EvEshTV;EuE7hTM;IAOI,wCAAA;EvEyhTV;EuEhiTM;IAOI,kCAAA;EvE4hTV;EuEniTM;IAOI,gCAAA;EvE+hTV;EuEtiTM;IAOI,8BAAA;EvEkiTV;EuEziTM;IAOI,gCAAA;EvEqiTV;EuE5iTM;IAOI,+BAAA;EvEwiTV;EuE/iTM;IAOI,oCAAA;EvE2iTV;EuEljTM;IAOI,kCAAA;EvE8iTV;EuErjTM;IAOI,gCAAA;EvEijTV;EuExjTM;IAOI,uCAAA;EvEojTV;EuE3jTM;IAOI,sCAAA;EvEujTV;EuE9jTM;IAOI,iCAAA;EvE0jTV;EuEjkTM;IAOI,2BAAA;EvE6jTV;EuEpkTM;IAOI,iCAAA;EvEgkTV;EuEvkTM;IAOI,+BAAA;EvEmkTV;EuE1kTM;IAOI,6BAAA;EvEskTV;EuE7kTM;IAOI,+BAAA;EvEykTV;EuEhlTM;IA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;EvEg1TV;EuEv1TM;IAOI,4BAAA;EvEm1TV;EuE11TM;IAOI,8BAAA;EvEs1TV;EuE71TM;IAOI,4BAAA;EvEy1TV;EuEh2TM;IAOI,2BAAA;EvE41TV;EuEn2TM;IAOI,iCAAA;EvE+1TV;EuEt2TM;IAOI,gCAAA;EvEk2TV;EuEz2TM;IAOI,8BAAA;EvEq2TV;EuE52TM;IAOI,gCAAA;EvEw2TV;EuE/2TM;IAOI,8BAAA;EvE22TV;EuEl3TM;IAOI,4BAAA;EvE82TV;EuEr3TM;IAOI,kCAAA;EvEi3TV;EuEx3TM;IAOI,iCAAA;EvEo3TV;EuE33TM;IAOI,+BAAA;EvEu3TV;EuE93TM;IAOI,iCAAA;EvE03TV;EuEj4TM;IAOI,+BAAA;EvE63TV;EuEp4TM;IAOI,0BAAA;EvEg4TV;EuEv4TM;IAOI,gCAAA;EvEm4TV;EuE14TM;IAOI,+BAAA;EvEs4TV;EuE74TM;IAOI,6BAAA;EvEy4TV;EuEh5TM;IAOI,+BAAA;EvE44TV;EuEn5TM;IAOI,6BAAA;EvE+4TV;EuEt5TM;IAOI,iBAAA;EvEk5TV;EuEz5TM;IAOI,uBAAA;EvEq5TV;EuE55TM;IAOI,sBAAA;EvEw5TV;EuE/5TM;IAOI,oBAAA;EvE25TV;EuEl6TM;IAOI,sBAAA;EvE85TV;EuEr6TM;IAOI,oBAAA;EvEi6TV;EuEx6TM;IAOI,2BAAA;EvEo6TV;EuE36TM;IAOI,4BAAA;EvEu6TV;EuE96TM;IAOI,6BAAA;EvE06TV;AACF;Aar7TI;E0DGI;IAOI,sBAAA;EvE+6TV;EuEt7TM;IAOI,uBAAA;EvEk7TV;EuEz7TM;IAOI,sBAAA;EvEq7TV;EuE57TM;IAOI,0BAAA;EvEw7TV;EuE/7TM;IAOI,gCAAA;EvE27TV;EuEl8TM;IAOI,yBAAA;EvE87TV;EuEr8TM;IAOI,wBAAA;EvEi8TV;EuEx8TM;IAOI,yBAAA;EvEo8TV;EuE38TM;IAOI,6BAAA;EvEu8TV;EuE98TM;IAOI,8BAAA;EvE08TV;EuEj9TM;IAOI,wBAAA;EvE68TV;EuEp9TM;IAOI,+BAAA;EvEg9TV;EuEv9TM;IAOI,wBAAA;EvEm9TV;EuE19TM;IAOI,yBAAA;EvEs9TV;EuE79TM;IAOI,8BAAA;EvEy9TV;EuEh+TM;IAOI,iCAAA;EvE49TV;EuEn+TM;IAOI,sCAAA;EvE+9TV;EuEt+TM;IAOI,yCAAA;EvEk+TV;EuEz+TM;IAOI,uBAAA;EvEq+TV;EuE5+TM;IAOI,uBAAA;EvEw+TV;EuE/+TM;IAOI,yBAAA;EvE2+TV;EuEl/TM;IAOI,yBAAA;EvE8+TV;EuEr/TM;IAOI,0BAAA;EvEi/TV;EuEx/TM;IAOI,4BAAA;EvEo/TV;EuE3/TM;IAOI,kCAAA;EvEu/TV;EuE9/TM;IAOI,sCAAA;EvE0/TV;EuEjgUM;IAOI,oCAAA;EvE6/TV;EuEpgUM;IAOI,kCAAA;EvEggUV;EuEvgUM;IAOI,yCAAA;EvEmgUV;EuE1gUM;IAOI,wCAAA;EvEsgUV;EuE7gUM;IAOI,wCAAA;EvEygUV;EuEhhUM;IAOI,kCAAA;EvE4gUV;EuEnhUM;IAOI,gCAAA;EvE+gUV;EuEthUM;IAOI,8BAAA;EvEkhUV;EuEzhUM;IAOI,gCAAA;EvEqhUV;EuE5hUM;IAOI,+BAAA;EvEwhUV;EuE/hUM;IAOI,oCAAA;EvE2hUV;EuEliUM;IAOI,kCAAA;EvE8hUV;EuEriUM;IAOI,gCAAA;EvEiiUV;EuExiUM;IAOI,uCAAA;EvEoiUV;EuE3iUM;IAOI,sCAAA;EvEuiUV;EuE9iUM;IAOI,iCAAA;EvE0iUV;EuEjjUM;IAOI,2BAAA;EvE6iUV;EuEpjUM;IAOI,iCAAA;EvEgjUV;EuEvjUM;IAOI,+BAAA;EvEmjUV;EuE1jUM;IAOI,6BAAA;EvEsjUV;EuE7jUM;IAOI,+BAAA;EvEyjUV;EuEhkUM;IAOI,8BAAA;EvE4jUV;EuEnkUM;IAOI,oBAAA;EvE+jUV;EuEtkUM;IAOI,mBAAA;EvEkkUV;EuEzkUM;IAOI,mBAAA;EvEqkUV;EuE5kUM;IAOI,mBAAA;EvEwkUV;EuE/kUM;IAOI,mBAAA;EvE2kUV;EuEllUM;IAOI,mBAAA;EvE8kUV;EuErlUM;IAOI,mBAAA;EvEilUV;EuExlUM;IAOI,mBAAA;EvEolUV;EuE3lUM;IAOI,oBAAA;EvEulUV;EuE9lUM;IAOI,0BAAA;EvE0lUV;EuEjm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","file":"bootstrap.css","sourcesContent":["@charset \"UTF-8\";\n/*!\n * Bootstrap v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: 1px solid;\n opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--bs-link-color);\n text-decoration: underline;\n}\na:hover {\n color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.375rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-color: var(--bs-body-color);\n --bs-table-bg: transparent;\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-body-color);\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: var(--bs-body-color);\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: var(--bs-body-color);\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: var(--bs-table-color);\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: 1px;\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: 2px solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: 1px 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-active {\n --bs-table-accent-bg: var(--bs-table-active-bg);\n color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: #cfe2ff;\n --bs-table-border-color: #bacbe6;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: #e2e3e5;\n --bs-table-border-color: #cbccce;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: #d1e7dd;\n --bs-table-border-color: #bcd0c7;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: #cff4fc;\n --bs-table-border-color: #badce3;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: #fff3cd;\n --bs-table-border-color: #e6dbb9;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: #f8d7da;\n --bs-table-border-color: #dfc2c4;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: #dfe0e1;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: #373b3e;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n appearance: none;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: #212529;\n background-color: #fff;\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n height: 1.5em;\n}\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n.form-control:disabled {\n background-color: #e9ecef;\n opacity: 1;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n 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;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n.form-control-plaintext:focus {\n outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + 2px);\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n width: 3rem;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n border: 0 !important;\n border-radius: 0.375rem;\n}\n.form-control-color::-webkit-color-swatch {\n border-radius: 0.375rem;\n}\n.form-control-color.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n}\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.form-select {\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n -moz-padding-start: calc(0.75rem - 3px);\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-image: 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\");\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: 1px solid #ced4da;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: #e9ecef;\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-reverse {\n padding-right: 1.5em;\n padding-left: 0;\n text-align: right;\n}\n.form-check-reverse .form-check-input {\n float: right;\n margin-right: -1.5em;\n margin-left: 0;\n}\n\n.form-check-input {\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n background-color: #fff;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: 1px solid rgba(0, 0, 0, 0.25);\n appearance: none;\n print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n cursor: default;\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n width: 2em;\n margin-left: -2.5em;\n background-image: 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\");\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n padding-right: 2.5em;\n padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n margin-right: -2.5em;\n margin-left: 0;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n height: calc(3.5rem + 2px);\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 1rem 0.75rem;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: 1px solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n border-width: 1px 0;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n z-index: 5;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.375rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: -1px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #198754;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(25, 135, 84, 0.9);\n border-radius: 0.375rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #198754;\n padding-right: calc(1.5em + 0.75rem);\n 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\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: #198754;\n}\n.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\"] {\n padding-right: 4.125rem;\n background-image: 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\"), 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\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: #198754;\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: #198754;\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #198754;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.375rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n 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\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: #dc3545;\n}\n.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\"] {\n padding-right: 4.125rem;\n background-image: 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\"), 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\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: 0.75rem;\n --bs-btn-padding-y: 0.375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: #212529;\n --bs-btn-bg: transparent;\n --bs-btn-border-width: 1px;\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: 0.375rem;\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n --bs-btn-disabled-opacity: 0.65;\n --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n display: inline-block;\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n 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;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n.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 {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0b5ed7;\n --bs-btn-hover-border-color: #0a58ca;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0a58ca;\n --bs-btn-active-border-color: #0a53be;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #5c636a;\n --bs-btn-hover-border-color: #565e64;\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #565e64;\n --bs-btn-active-border-color: #51585e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #157347;\n --bs-btn-hover-border-color: #146c43;\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #146c43;\n --bs-btn-active-border-color: #13653f;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #31d2f2;\n --bs-btn-hover-border-color: #25cff2;\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #3dd5f3;\n --bs-btn-active-border-color: #25cff2;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffca2c;\n --bs-btn-hover-border-color: #ffc720;\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffcd39;\n --bs-btn-active-border-color: #ffc720;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #bb2d3b;\n --bs-btn-hover-border-color: #b02a37;\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #b02a37;\n --bs-btn-active-border-color: #a52834;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #d3d4d5;\n --bs-btn-hover-border-color: #c6c7c8;\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #c6c7c8;\n --bs-btn-active-border-color: #babbbc;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #424649;\n --bs-btn-hover-border-color: #373b3e;\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #4d5154;\n --bs-btn-active-border-color: #373b3e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: none;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n --bs-btn-padding-y: 0.5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: 0.5rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n --bs-btn-padding-y: 0.25rem;\n --bs-btn-padding-x: 0.5rem;\n --bs-btn-font-size: 0.875rem;\n --bs-btn-border-radius: 0.25rem;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: 0.5rem;\n --bs-dropdown-spacer: 0.125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: #212529;\n --bs-dropdown-bg: #fff;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: 0.375rem;\n --bs-dropdown-border-width: 1px;\n --bs-dropdown-inner-border-radius: calc(0.375rem - 1px);\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: 0.5rem;\n --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-dropdown-link-color: #212529;\n --bs-dropdown-link-hover-color: #1e2125;\n --bs-dropdown-link-hover-bg: #e9ecef;\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: 0.25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: 0.5rem;\n position: absolute;\n z-index: var(--bs-dropdown-zindex);\n display: none;\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n margin: 0;\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: left;\n list-style: none;\n background-color: var(--bs-dropdown-bg);\n background-clip: padding-box;\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: var(--bs-dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n font-weight: 400;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n text-decoration: none;\n background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: 0.375rem;\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: #6c757d;\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link.disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: 1px;\n --bs-nav-tabs-border-color: #dee2e6;\n --bs-nav-tabs-border-radius: 0.375rem;\n --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;\n --bs-nav-tabs-link-active-color: #495057;\n --bs-nav-tabs-link-active-bg: #fff;\n --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n background: none;\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: 0.375rem;\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n background: none;\n border: 0;\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: 0.5rem;\n --bs-navbar-color: rgba(0, 0, 0, 0.55);\n --bs-navbar-hover-color: rgba(0, 0, 0, 0.7);\n --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3);\n --bs-navbar-active-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-brand-padding-y: 0.3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-nav-link-padding-x: 0.5rem;\n --bs-navbar-toggler-padding-y: 0.25rem;\n --bs-navbar-toggler-padding-x: 0.75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1);\n --bs-navbar-toggler-border-radius: 0.375rem;\n --bs-navbar-toggler-focus-width: 0.25rem;\n --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-right: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .show > .nav-link,\n.navbar-nav .nav-link.active {\n color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n line-height: 1;\n color: var(--bs-navbar-color);\n background-color: transparent;\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-dark {\n --bs-navbar-color: rgba(255, 255, 255, 0.55);\n --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: 0.5rem;\n --bs-card-border-width: 1px;\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: 0.375rem;\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(0.375rem - 1px);\n --bs-card-cap-padding-y: 0.5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(0, 0, 0, 0.03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: #fff;\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: 0.75rem;\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n height: var(--bs-card-height);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n background-clip: border-box;\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n}\n\n.card-subtitle {\n margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n margin-bottom: 0;\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n.card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n.card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n.card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n.card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: #212529;\n --bs-accordion-bg: #fff;\n --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;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: 1px;\n --bs-accordion-border-radius: 0.375rem;\n --bs-accordion-inner-border-radius: calc(0.375rem - 1px);\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: #212529;\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%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\");\n --bs-accordion-btn-focus-border-color: #86b7fe;\n --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: #0c63e4;\n --bs-accordion-active-bg: #e7f1ff;\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n font-size: 1rem;\n color: var(--bs-accordion-btn-color);\n text-align: left;\n background-color: var(--bs-accordion-btn-bg);\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n border-color: var(--bs-accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: var(--bs-accordion-border-radius);\n border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type .accordion-button {\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n.accordion-flush .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n border-radius: 0;\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: #6c757d;\n --bs-breadcrumb-item-padding-x: 0.5rem;\n --bs-breadcrumb-item-active-color: #6c757d;\n display: flex;\n flex-wrap: wrap;\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n list-style: none;\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: 0.75rem;\n --bs-pagination-padding-y: 0.375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: #fff;\n --bs-pagination-border-width: 1px;\n --bs-pagination-border-color: #dee2e6;\n --bs-pagination-border-radius: 0.375rem;\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: #e9ecef;\n --bs-pagination-hover-border-color: #dee2e6;\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: #e9ecef;\n --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: #6c757d;\n --bs-pagination-disabled-bg: #fff;\n --bs-pagination-disabled-border-color: #dee2e6;\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n text-decoration: none;\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n 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;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n outline: 0;\n box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: -1px;\n}\n.page-item:first-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: 0.75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: 0.5rem;\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: 0.5rem;\n --bs-pagination-padding-y: 0.25rem;\n --bs-pagination-font-size: 0.875rem;\n --bs-pagination-border-radius: 0.25rem;\n}\n\n.badge {\n --bs-badge-padding-x: 0.65em;\n --bs-badge-padding-y: 0.35em;\n --bs-badge-font-size: 0.75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: 0.375rem;\n display: inline-block;\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n line-height: 1;\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: 1px solid var(--bs-alert-border-color);\n --bs-alert-border-radius: 0.375rem;\n position: relative;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n --bs-alert-color: #084298;\n --bs-alert-bg: #cfe2ff;\n --bs-alert-border-color: #b6d4fe;\n}\n.alert-primary .alert-link {\n color: #06357a;\n}\n\n.alert-secondary {\n --bs-alert-color: #41464b;\n --bs-alert-bg: #e2e3e5;\n --bs-alert-border-color: #d3d6d8;\n}\n.alert-secondary .alert-link {\n color: #34383c;\n}\n\n.alert-success {\n --bs-alert-color: #0f5132;\n --bs-alert-bg: #d1e7dd;\n --bs-alert-border-color: #badbcc;\n}\n.alert-success .alert-link {\n color: #0c4128;\n}\n\n.alert-info {\n --bs-alert-color: #055160;\n --bs-alert-bg: #cff4fc;\n --bs-alert-border-color: #b6effb;\n}\n.alert-info .alert-link {\n color: #04414d;\n}\n\n.alert-warning {\n --bs-alert-color: #664d03;\n --bs-alert-bg: #fff3cd;\n --bs-alert-border-color: #ffecb5;\n}\n.alert-warning .alert-link {\n color: #523e02;\n}\n\n.alert-danger {\n --bs-alert-color: #842029;\n --bs-alert-bg: #f8d7da;\n --bs-alert-border-color: #f5c2c7;\n}\n.alert-danger .alert-link {\n color: #6a1a21;\n}\n\n.alert-light {\n --bs-alert-color: #636464;\n --bs-alert-bg: #fefefe;\n --bs-alert-border-color: #fdfdfe;\n}\n.alert-light .alert-link {\n color: #4f5050;\n}\n\n.alert-dark {\n --bs-alert-color: #141619;\n --bs-alert-bg: #d3d3d4;\n --bs-alert-border-color: #bcbebf;\n}\n.alert-dark .alert-link {\n color: #101214;\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: 0.75rem;\n --bs-progress-bg: #e9ecef;\n --bs-progress-border-radius: 0.375rem;\n --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width 0.6s ease;\n display: flex;\n height: var(--bs-progress-height);\n overflow: hidden;\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n 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);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: #212529;\n --bs-list-group-bg: #fff;\n --bs-list-group-border-color: rgba(0, 0, 0, 0.125);\n --bs-list-group-border-width: 1px;\n --bs-list-group-border-radius: 0.375rem;\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: 0.5rem;\n --bs-list-group-action-color: #495057;\n --bs-list-group-action-hover-color: #495057;\n --bs-list-group-action-hover-bg: #f8f9fa;\n --bs-list-group-action-active-color: #212529;\n --bs-list-group-action-active-bg: #e9ecef;\n --bs-list-group-disabled-color: #6c757d;\n --bs-list-group-disabled-bg: #fff;\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n text-decoration: none;\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #084298;\n background-color: #cfe2ff;\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #084298;\n background-color: #bacbe6;\n}\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #084298;\n border-color: #084298;\n}\n\n.list-group-item-secondary {\n color: #41464b;\n background-color: #e2e3e5;\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #41464b;\n background-color: #cbccce;\n}\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #41464b;\n border-color: #41464b;\n}\n\n.list-group-item-success {\n color: #0f5132;\n background-color: #d1e7dd;\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #0f5132;\n background-color: #bcd0c7;\n}\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #0f5132;\n border-color: #0f5132;\n}\n\n.list-group-item-info {\n color: #055160;\n background-color: #cff4fc;\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #055160;\n background-color: #badce3;\n}\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #055160;\n border-color: #055160;\n}\n\n.list-group-item-warning {\n color: #664d03;\n background-color: #fff3cd;\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #664d03;\n background-color: #e6dbb9;\n}\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #664d03;\n border-color: #664d03;\n}\n\n.list-group-item-danger {\n color: #842029;\n background-color: #f8d7da;\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #842029;\n background-color: #dfc2c4;\n}\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #842029;\n border-color: #842029;\n}\n\n.list-group-item-light {\n color: #636464;\n background-color: #fefefe;\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #636464;\n background-color: #e5e5e5;\n}\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #636464;\n border-color: #636464;\n}\n\n.list-group-item-dark {\n color: #141619;\n background-color: #d3d3d4;\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #141619;\n background-color: #bebebf;\n}\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #141619;\n border-color: #141619;\n}\n\n.btn-close {\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: #000;\n background: transparent 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\") center/1em auto no-repeat;\n border: 0;\n border-radius: 0.375rem;\n opacity: 0.5;\n}\n.btn-close:hover {\n color: #000;\n text-decoration: none;\n opacity: 0.75;\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n opacity: 1;\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n user-select: none;\n opacity: 0.25;\n}\n\n.btn-close-white {\n filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: 0.75rem;\n --bs-toast-padding-y: 0.5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: 0.875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(255, 255, 255, 0.85);\n --bs-toast-border-width: 1px;\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: 0.375rem;\n --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-toast-header-color: #6c757d;\n --bs-toast-header-bg: rgba(255, 255, 255, 0.85);\n --bs-toast-header-border-color: rgba(0, 0, 0, 0.05);\n width: var(--bs-toast-max-width);\n max-width: 100%;\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n background-clip: padding-box;\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n position: absolute;\n z-index: var(--bs-toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: 0.5rem;\n --bs-modal-color: ;\n --bs-modal-bg: #fff;\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: 1px;\n --bs-modal-border-radius: 0.5rem;\n --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n --bs-modal-inner-border-radius: calc(0.5rem - 1px);\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: 1px;\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: 0.5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: 1px;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--bs-modal-margin);\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n background-clip: padding-box;\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n outline: 0;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: 0.5;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-backdrop-zindex);\n width: 100vw;\n height: 100vh;\n background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n 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;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n }\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n.modal-xl {\n --bs-modal-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header,\n.modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header,\n.modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header,\n.modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header,\n.modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header,\n.modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: 0.5rem;\n --bs-tooltip-padding-y: 0.25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: 0.875rem;\n --bs-tooltip-color: #fff;\n --bs-tooltip-bg: #000;\n --bs-tooltip-border-radius: 0.375rem;\n --bs-tooltip-opacity: 0.9;\n --bs-tooltip-arrow-width: 0.8rem;\n --bs-tooltip-arrow-height: 0.4rem;\n z-index: var(--bs-tooltip-zindex);\n display: block;\n padding: var(--bs-tooltip-arrow-height);\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n display: block;\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: 0.875rem;\n --bs-popover-bg: #fff;\n --bs-popover-border-width: 1px;\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: 0.5rem;\n --bs-popover-inner-border-radius: calc(0.5rem - 1px);\n --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: 0.5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: ;\n --bs-popover-header-bg: #f0f0f0;\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: #212529;\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: 0.5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n display: block;\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n background-clip: padding-box;\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n display: block;\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.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 {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.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 {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.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 {\n border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--bs-popover-arrow-width);\n margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.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 {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n margin-bottom: 0;\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n.carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n border-radius: 50%;\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-border-width: 0.25em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-grow;\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n.spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: ;\n --bs-offcanvas-bg: #fff;\n --bs-offcanvas-border-width: 1px;\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n visibility: visible;\n }\n}\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n .offcanvas-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n visibility: visible;\n }\n}\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n .offcanvas-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n visibility: visible;\n }\n}\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n .offcanvas-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n .offcanvas-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n .offcanvas-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n.offcanvas.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));\n margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n overflow-y: auto;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: #6c757d !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */\n","@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: var(--#{$prefix}link-color);\n text-decoration: $link-decoration;\n\n &:hover {\n color: var(--#{$prefix}link-hover-color);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`\n

    \n
    \n \n

    \n
    \n \n \n
    \n \n \n
    \n \n
    \n \n \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n \n').replace(/(^|\n)\s*/g, ""), be = () => { const e = g(); return !!e && (e.remove(), A([document.documentElement, document.body], [m["no-backdrop"], m["toast-shown"], m["has-column"]]), !0) }, c = () => { E.currentInstance.resetValidationMessage() }, ye = () => { const e = h(), t = k(e, m.input), n = k(e, m.file), o = e.querySelector(".".concat(m.range, " input")), i = e.querySelector(".".concat(m.range, " output")), r = k(e, m.select), a = e.querySelector(".".concat(m.checkbox, " input")), s = k(e, m.textarea); t.oninput = c, n.onchange = c, r.onchange = c, a.onchange = c, s.oninput = c, o.oninput = () => { c(), i.value = o.value }, o.onchange = () => { c(), i.value = o.value } }, ve = e => "string" == typeof e ? document.querySelector(e) : e, we = e => { const t = h(); t.setAttribute("role", e.toast ? "alert" : "dialog"), t.setAttribute("aria-live", e.toast ? "polite" : "assertive"), e.toast || t.setAttribute("aria-modal", "true") }, Ce = e => { "rtl" === window.getComputedStyle(e).direction && C(g(), m.rtl) }, Ae = (e, t) => { if (e instanceof HTMLElement) t.appendChild(e); else if ("object" == typeof e) { var n = e, o = t; if (n.jquery) ke(o, n); else v(o, n.toString()) } else e && v(t, e) }, ke = (t, n) => { if (t.textContent = "", 0 in n) for (let e = 0; e in n; e++)t.appendChild(n[e].cloneNode(!0)); else t.appendChild(n.cloneNode(!0)) }, Be = (() => { if (!he()) { var e = document.createElement("div"), t = { WebkitAnimation: "webkitAnimationEnd", animation: "animationend" }; for (const n in t) if (Object.prototype.hasOwnProperty.call(t, n) && void 0 !== e.style[n]) return t[n] } return !1 })(), Pe = (e, t) => { var n, o, i, r, a, s = X(), c = d(); (t.showConfirmButton || t.showDenyButton || t.showCancelButton ? B : P)(s), w(s, t, "actions"), s = s, n = c, o = t, i = f(), r = b(), a = y(), xe(i, "confirm", o), xe(r, "deny", o), xe(a, "cancel", o), function (e, t, n, o) { if (!o.buttonsStyling) return A([e, t, n], m.styled); C([e, t, n], m.styled), o.confirmButtonColor && (e.style.backgroundColor = o.confirmButtonColor, C(e, m["default-outline"])); o.denyButtonColor && (t.style.backgroundColor = o.denyButtonColor, C(t, m["default-outline"])); o.cancelButtonColor && (n.style.backgroundColor = o.cancelButtonColor, C(n, m["default-outline"])) }(i, r, a, o), o.reverseButtons && (o.toast ? (s.insertBefore(a, i), s.insertBefore(r, i)) : (s.insertBefore(a, n), s.insertBefore(r, n), s.insertBefore(i, n))), v(c, t.loaderHtml), w(c, t, "loader") }; function xe(e, t, n) { ce(e, n["show".concat(q(t), "Button")], "inline-block"), v(e, n["".concat(t, "ButtonText")]), e.setAttribute("aria-label", n["".concat(t, "ButtonAriaLabel")]), e.className = m[t], w(e, n, "".concat(t, "Button")), C(e, n["".concat(t, "ButtonClass")]) } const Ee = (e, t) => { const n = G(); v(n, t.closeButtonHtml), w(n, t, "closeButton"), ce(n, t.showCloseButton), n.setAttribute("aria-label", t.closeButtonAriaLabel) }, Te = (e, t) => { var n, o, i = g(); i && (o = i, "string" == typeof (n = t.backdrop) ? o.style.background = n : n || C([document.documentElement, document.body], m["no-backdrop"]), o = i, (n = t.position) in m ? C(o, m[n]) : (r('The "position" parameter is not valid, defaulting to "center"'), C(o, m.center)), n = i, (o = t.grow) && "string" == typeof o && (o = "grow-".concat(o)) in m && C(n, m[o]), w(i, t, "container")) }; const Le = ["input", "file", "range", "select", "radio", "checkbox", "textarea"], Se = (e, a) => { const s = h(); var t, e = p.innerParams.get(e); const c = !e || a.input !== e.input; Le.forEach(e => { const t = k(s, m[e]); { var n = e, o = a.inputAttributes; const i = ie(h(), n); if (i) { Oe(i); for (const r in o) i.setAttribute(r, o[r]) } } t.className = m[e], c && P(t) }), a.input && (c && (e => { if (!T[e.input]) return l('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input, '"')); const t = He(e.input), n = T[e.input](t, e); B(t), setTimeout(() => { re(n) }) })(a), e = a, t = He(e.input), "object" == typeof e.customClass && C(t, e.customClass.input)) }, Oe = t => { for (let e = 0; e < t.attributes.length; e++) { var n = t.attributes[e].name;["type", "value", "style"].includes(n) || t.removeAttribute(n) } }, Me = (e, t) => { e.placeholder && !t.inputPlaceholder || (e.placeholder = t.inputPlaceholder) }, je = (e, t, n) => { if (n.inputLabel) { e.id = m.input; const i = document.createElement("label"); var o = m["input-label"]; i.setAttribute("for", e.id), i.className = o, "object" == typeof n.customClass && C(i, n.customClass.inputLabel), i.innerText = n.inputLabel, t.insertAdjacentElement("beforebegin", i) } }, He = e => k(h(), m[e] || m.input), Ie = (e, t) => { ["string", "number"].includes(typeof t) ? e.value = "".concat(t) : U(t) || r('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t, '"')) }, T = {}, De = (T.text = T.email = T.password = T.number = T.tel = T.url = (e, t) => (Ie(e, t.inputValue), je(e, e, t), Me(e, t), e.type = t.input, e), T.file = (e, t) => (je(e, e, t), Me(e, t), e), T.range = (e, t) => { const n = e.querySelector("input"); var o = e.querySelector("output"); return Ie(n, t.inputValue), n.type = t.input, Ie(o, t.inputValue), je(n, e, t), e }, T.select = (e, t) => { if (e.textContent = "", t.inputPlaceholder) { const n = document.createElement("option"); v(n, t.inputPlaceholder), n.value = "", n.disabled = !0, n.selected = !0, e.appendChild(n) } return je(e, e, t), e }, T.radio = e => (e.textContent = "", e), T.checkbox = (e, t) => { const n = ie(h(), "checkbox"); n.value = "1", n.id = m.checkbox, n.checked = Boolean(t.inputValue); e = e.querySelector("span"); return v(e, t.inputPlaceholder), n }, T.textarea = (n, e) => { Ie(n, e.inputValue), Me(n, e), je(n, n, e); return setTimeout(() => { if ("MutationObserver" in window) { const t = parseInt(window.getComputedStyle(h()).width); new MutationObserver(() => { var e = n.offsetWidth + (e = n, parseInt(window.getComputedStyle(e).marginLeft) + parseInt(window.getComputedStyle(e).marginRight)); e > t ? h().style.width = "".concat(e, "px") : h().style.width = null }).observe(n, { attributes: !0, attributeFilter: ["style"] }) } }), n }, (e, t) => { const n = K(); w(n, t, "htmlContainer"), t.html ? (Ae(t.html, n), B(n, "block")) : t.text ? (n.textContent = t.text, B(n, "block")) : P(n), Se(e, t) }), qe = (e, t) => { var n = $(); ce(n, t.footer), t.footer && Ae(t.footer, n), w(n, t, "footer") }, Ve = (e, t) => { var e = p.innerParams.get(e), n = W(); e && t.icon === e.icon ? (We(n, t), Ne(n, t)) : t.icon || t.iconHtml ? t.icon && -1 === Object.keys(o).indexOf(t.icon) ? (l('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(t.icon, '"')), P(n)) : (B(n), We(n, t), Ne(n, t), C(n, t.showClass.icon)) : P(n) }, Ne = (e, t) => { for (const n in o) t.icon !== n && A(e, o[n]); C(e, o[t.icon]), ze(e, t), Re(), w(e, t, "icon") }, Re = () => { const e = h(); var t = window.getComputedStyle(e).getPropertyValue("background-color"); const n = e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix"); for (let e = 0; e < n.length; e++)n[e].style.backgroundColor = t }, Fe = '\n
    \n \n
    \n
    \n', Ue = '\n \n \n \n \n', We = (e, t) => { let n = e.innerHTML, o; var i; t.iconHtml ? o = Ke(t.iconHtml) : "success" === t.icon ? (o = Fe, n = n.replace(/ style=".*?"/g, "")) : o = "error" === t.icon ? Ue : (i = { question: "?", warning: "!", info: "i" }, Ke(i[t.icon])), n.trim() !== o.trim() && v(e, o) }, ze = (e, t) => { if (t.iconColor) { e.style.color = t.iconColor, e.style.borderColor = t.iconColor; for (const n of [".swal2-success-line-tip", ".swal2-success-line-long", ".swal2-x-mark-line-left", ".swal2-x-mark-line-right"]) se(e, n, "backgroundColor", t.iconColor); se(e, ".swal2-success-ring", "borderColor", t.iconColor) } }, Ke = e => '
    ').concat(e, "
    "), _e = (e, t) => { const n = _(); if (!t.imageUrl) return P(n); B(n, ""), n.setAttribute("src", t.imageUrl), n.setAttribute("alt", t.imageAlt), a(n, "width", t.imageWidth), a(n, "height", t.imageHeight), n.className = m.image, w(n, t, "image") }, Ye = (e, t) => { var n = g(); const o = h(); t.toast ? (a(n, "width", t.width), o.style.width = "100%", o.insertBefore(d(), W())) : a(o, "width", t.width), a(o, "padding", t.padding), t.color && (o.style.color = t.color), t.background && (o.style.background = t.background), P(Z()); n = o; (n.className = "".concat(m.popup, " ").concat(x(n) ? t.showClass.popup : ""), t.toast) ? (C([document.documentElement, document.body], m["toast-shown"]), C(n, m.toast)) : C(n, m.modal); w(n, t, "popup"), "string" == typeof t.customClass && C(n, t.customClass); t.icon && C(n, m["icon-".concat(t.icon)]) }, Ze = (e, n) => { const o = Y(); if (!n.progressSteps || 0 === n.progressSteps.length) return P(o); B(o), o.textContent = "", n.currentProgressStep >= n.progressSteps.length && r("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"), n.progressSteps.forEach((e, t) => { var e = (e => { const t = document.createElement("li"); return C(t, m["progress-step"]), v(t, e), t })(e); o.appendChild(e), t === n.currentProgressStep && C(e, m["active-progress-step"]), t !== n.progressSteps.length - 1 && (e = (e => { const t = document.createElement("li"); if (C(t, m["progress-step-line"]), e.progressStepsDistance) a(t, "width", e.progressStepsDistance); return t })(n), o.appendChild(e)) }) }, Xe = (e, t) => { const n = z(); ce(n, t.title || t.titleText, "block"), t.title && Ae(t.title, n), t.titleText && (n.innerText = t.titleText), w(n, t, "title") }, $e = (e, t) => { Ye(e, t), Te(e, t), Ze(e, t), Ve(e, t), _e(e, t), Xe(e, t), Ee(e, t), De(e, t), Pe(e, t), qe(e, t), "function" == typeof t.didRender && t.didRender(h()) }; function Je() { var e, t = p.innerParams.get(this); if (t) { const n = p.domCache.get(this); P(n.loader), te() ? t.icon && B(W()) : (t = n, (e = t.popup.getElementsByClassName(t.loader.getAttribute("data-button-to-replace"))).length ? B(e[0], "inline-block") : le() && P(t.actions)), A([n.popup, n.actions], m.loading), n.popup.removeAttribute("aria-busy"), n.popup.removeAttribute("data-loading"), n.confirmButton.disabled = !1, n.denyButton.disabled = !1, n.cancelButton.disabled = !1 } } const Ge = () => f() && f().click(); const L = Object.freeze({ cancel: "cancel", backdrop: "backdrop", close: "close", esc: "esc", timer: "timer" }), Qe = e => { e.keydownTarget && e.keydownHandlerAdded && (e.keydownTarget.removeEventListener("keydown", e.keydownHandler, { capture: e.keydownListenerCapture }), e.keydownHandlerAdded = !1) }, et = (e, t, n) => { const o = Q(); if (o.length) return (t += n) === o.length ? t = 0 : -1 === t && (t = o.length - 1), o[t].focus(); h().focus() }, tt = ["ArrowRight", "ArrowDown"], nt = ["ArrowLeft", "ArrowUp"], ot = (e, n, t) => { var o = p.innerParams.get(e); if (o && (!n.isComposing && 229 !== n.keyCode)) if (o.stopKeydownPropagation && n.stopPropagation(), "Enter" === n.key) e = e, s = n, i = o, R(i.allowEnterKey) && s.target && e.getInput() && s.target instanceof HTMLElement && s.target.outerHTML === e.getInput().outerHTML && (["textarea", "file"].includes(i.input) || (Ge(), s.preventDefault())); else if ("Tab" === n.key) { e = n; var i = o; var r = e.target, a = Q(); let t = -1; for (let e = 0; e < a.length; e++)if (r === a[e]) { t = e; break } e.shiftKey ? et(i, t, -1) : et(i, t, 1); e.stopPropagation(), e.preventDefault() } else if ([...tt, ...nt].includes(n.key)) { var s = n.key; const l = f(), u = b(), d = y(); if (!(document.activeElement instanceof HTMLElement) || [l, u, d].includes(document.activeElement)) { var c = tt.includes(s) ? "nextElementSibling" : "previousElementSibling"; let t = document.activeElement; for (let e = 0; e < X().children.length; e++) { if (!(t = t[c])) return; if (t instanceof HTMLButtonElement && x(t)) break } t instanceof HTMLButtonElement && t.focus() } } else if ("Escape" === n.key) { e = n, n = o, o = t; if (R(n.allowEscapeKey)) { e.preventDefault(); o(L.esc) } } }; var it = { swalPromiseResolve: new WeakMap, swalPromiseReject: new WeakMap }; const rt = () => { const e = Array.from(document.body.children); e.forEach(e => { e === g() || e.contains(g()) || (e.hasAttribute("aria-hidden") && e.setAttribute("data-previous-aria-hidden", e.getAttribute("aria-hidden")), e.setAttribute("aria-hidden", "true")) }) }, at = () => { const e = Array.from(document.body.children); e.forEach(e => { e.hasAttribute("data-previous-aria-hidden") ? (e.setAttribute("aria-hidden", e.getAttribute("data-previous-aria-hidden")), e.removeAttribute("data-previous-aria-hidden")) : e.removeAttribute("aria-hidden") }) }, st = () => { if ((/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || "MacIntel" === navigator.platform && 1 < navigator.maxTouchPoints) && !s(document.body, m.iosfix)) { var e, t = document.body.scrollTop; document.body.style.top = "".concat(-1 * t, "px"), C(document.body, m.iosfix); { const n = g(); let t; n.ontouchstart = e => { t = ct(e) }, n.ontouchmove = e => { t && (e.preventDefault(), e.stopPropagation()) } } { const o = navigator.userAgent, i = !!o.match(/iPad/i) || !!o.match(/iPhone/i), r = !!o.match(/WebKit/i), a = i && r && !o.match(/CriOS/i); a && (e = 44, h().scrollHeight > window.innerHeight - 44 && (g().style.paddingBottom = "".concat(44, "px"))) } } }, ct = e => { var t, n = e.target, o = g(); return !((t = e).touches && t.touches.length && "stylus" === t.touches[0].touchType || (t = e).touches && 1 < t.touches.length) && (n === o || !ue(o) && n instanceof HTMLElement && "INPUT" !== n.tagName && "TEXTAREA" !== n.tagName && (!ue(K()) || !K().contains(n))) }, lt = () => { var e; s(document.body, m.iosfix) && (e = parseInt(document.body.style.top, 10), A(document.body, m.iosfix), document.body.style.top = "", document.body.scrollTop = -1 * e) }, ut = () => { null === i.previousBodyPadding && document.body.scrollHeight > window.innerHeight && (i.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")), document.body.style.paddingRight = "".concat(i.previousBodyPadding + (() => { const e = document.createElement("div"); e.className = m["scrollbar-measure"], document.body.appendChild(e); var t = e.getBoundingClientRect().width - e.clientWidth; return document.body.removeChild(e), t })(), "px")) }, dt = () => { null !== i.previousBodyPadding && (document.body.style.paddingRight = "".concat(i.previousBodyPadding, "px"), i.previousBodyPadding = null) }; function pt(e, t, n, o) { te() ? ft(e, o) : (ge(n).then(() => ft(e, o)), Qe(E)), /^((?!chrome|android).)*safari/i.test(navigator.userAgent) ? (t.setAttribute("style", "display:none !important"), t.removeAttribute("class"), t.innerHTML = "") : t.remove(), ee() && (dt(), lt(), at()), A([document.documentElement, document.body], [m.shown, m["height-auto"], m["no-backdrop"], m["toast-shown"]]) } function mt(e) { e = void 0 !== (n = e) ? Object.assign({ isConfirmed: !1, isDenied: !1, isDismissed: !1 }, n) : { isConfirmed: !1, isDenied: !1, isDismissed: !0 }; const t = it.swalPromiseResolve.get(this); var n = (e => { const t = h(); if (!t) return false; const n = p.innerParams.get(e); if (!n || s(t, n.hideClass.popup)) return false; A(t, n.showClass.popup), C(t, n.hideClass.popup); const o = g(); return A(o, n.showClass.backdrop), C(o, n.hideClass.backdrop), ht(e, t, n), true })(this); this.isAwaitingPromise() ? e.isDismissed || (gt(this), t(e)) : n && t(e) } const gt = e => { e.isAwaitingPromise() && (p.awaitingPromise.delete(e), p.innerParams.get(e) || e._destroy()) }, ht = (e, t, n) => { var o, i, r, a = g(), s = Be && de(t); "function" == typeof n.willClose && n.willClose(t), s ? (s = e, o = t, t = a, i = n.returnFocus, r = n.didClose, E.swalCloseEventFinishedCallback = pt.bind(null, s, t, i, r), o.addEventListener(Be, function (e) { e.target === o && (E.swalCloseEventFinishedCallback(), delete E.swalCloseEventFinishedCallback) })) : pt(e, a, n.returnFocus, n.didClose) }, ft = (e, t) => { setTimeout(() => { "function" == typeof t && t.bind(e.params)(), e._destroy() }) }; function bt(e, t, n) { const o = p.domCache.get(e); t.forEach(e => { o[e].disabled = n }) } function yt(e, t) { if (e) if ("radio" === e.type) { const n = e.parentNode.parentNode, o = n.querySelectorAll("input"); for (let e = 0; e < o.length; e++)o[e].disabled = t } else e.disabled = t } const S = { title: "", titleText: "", text: "", html: "", footer: "", icon: void 0, iconColor: void 0, iconHtml: void 0, template: void 0, toast: !1, showClass: { popup: "swal2-show", backdrop: "swal2-backdrop-show", icon: "swal2-icon-show" }, hideClass: { popup: "swal2-hide", backdrop: "swal2-backdrop-hide", icon: "swal2-icon-hide" }, customClass: {}, target: "body", color: void 0, backdrop: !0, heightAuto: !0, allowOutsideClick: !0, allowEscapeKey: !0, allowEnterKey: !0, stopKeydownPropagation: !0, keydownListenerCapture: !1, showConfirmButton: !0, showDenyButton: !1, showCancelButton: !1, preConfirm: void 0, preDeny: void 0, confirmButtonText: "OK", confirmButtonAriaLabel: "", confirmButtonColor: void 0, denyButtonText: "No", denyButtonAriaLabel: "", denyButtonColor: void 0, cancelButtonText: "Cancel", cancelButtonAriaLabel: "", cancelButtonColor: void 0, buttonsStyling: !0, reverseButtons: !1, focusConfirm: !0, focusDeny: !1, focusCancel: !1, returnFocus: !0, showCloseButton: !1, closeButtonHtml: "×", closeButtonAriaLabel: "Close this dialog", loaderHtml: "", showLoaderOnConfirm: !1, showLoaderOnDeny: !1, imageUrl: void 0, imageWidth: void 0, imageHeight: void 0, imageAlt: "", timer: void 0, timerProgressBar: !1, width: void 0, padding: void 0, background: void 0, input: void 0, inputPlaceholder: "", inputLabel: "", inputValue: "", inputOptions: {}, inputAutoTrim: !0, inputAttributes: {}, inputValidator: void 0, returnInputValueOnDeny: !1, validationMessage: void 0, grow: !1, position: "center", progressSteps: [], currentProgressStep: void 0, progressStepsDistance: void 0, willOpen: void 0, didOpen: void 0, didRender: void 0, willClose: void 0, didClose: void 0, didDestroy: void 0, scrollbarPadding: !0 }, vt = ["allowEscapeKey", "allowOutsideClick", "background", "buttonsStyling", "cancelButtonAriaLabel", "cancelButtonColor", "cancelButtonText", "closeButtonAriaLabel", "closeButtonHtml", "color", "confirmButtonAriaLabel", "confirmButtonColor", "confirmButtonText", "currentProgressStep", "customClass", "denyButtonAriaLabel", "denyButtonColor", "denyButtonText", "didClose", "didDestroy", "footer", "hideClass", "html", "icon", "iconColor", "iconHtml", "imageAlt", "imageHeight", "imageUrl", "imageWidth", "preConfirm", "preDeny", "progressSteps", "returnFocus", "reverseButtons", "showCancelButton", "showCloseButton", "showConfirmButton", "showDenyButton", "text", "title", "titleText", "willClose"], wt = {}, Ct = ["allowOutsideClick", "allowEnterKey", "backdrop", "focusConfirm", "focusDeny", "focusCancel", "returnFocus", "heightAuto", "keydownListenerCapture"], At = e => Object.prototype.hasOwnProperty.call(S, e), kt = e => -1 !== vt.indexOf(e), Bt = e => wt[e], Pt = e => { !e.backdrop && e.allowOutsideClick && r('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); for (const n in e) t = n, At(t) || r('Unknown parameter "'.concat(t, '"')), e.toast && (t = n, Ct.includes(t) && r('The parameter "'.concat(t, '" is incompatible with toasts'))), t = n, Bt(t) && N(t, Bt(t)); var t }; const xt = e => { e.isAwaitingPromise() ? (Et(p, e), p.awaitingPromise.set(e, !0)) : (Et(it, e), Et(p, e)) }, Et = (e, t) => { for (const n in e) e[n].delete(t) }; e = Object.freeze({ hideLoading: Je, disableLoading: Je, getInput: function (e) { var t = p.innerParams.get(e || this); return (e = p.domCache.get(e || this)) ? ie(e.popup, t.input) : null }, close: mt, isAwaitingPromise: function () { return !!p.awaitingPromise.get(this) }, rejectPromise: function (e) { const t = it.swalPromiseReject.get(this); gt(this), t && t(e) }, handleAwaitingPromise: gt, closePopup: mt, closeModal: mt, closeToast: mt, enableButtons: function () { bt(this, ["confirmButton", "denyButton", "cancelButton"], !1) }, disableButtons: function () { bt(this, ["confirmButton", "denyButton", "cancelButton"], !0) }, enableInput: function () { yt(this.getInput(), !1) }, disableInput: function () { yt(this.getInput(), !0) }, showValidationMessage: function (e) { const t = p.domCache.get(this); var n = p.innerParams.get(this); v(t.validationMessage, e), t.validationMessage.className = m["validation-message"], n.customClass && n.customClass.validationMessage && C(t.validationMessage, n.customClass.validationMessage), B(t.validationMessage); const o = this.getInput(); o && (o.setAttribute("aria-invalid", !0), o.setAttribute("aria-describedby", m["validation-message"]), re(o), C(o, m.inputerror)) }, resetValidationMessage: function () { var e = p.domCache.get(this); e.validationMessage && P(e.validationMessage); const t = this.getInput(); t && (t.removeAttribute("aria-invalid"), t.removeAttribute("aria-describedby"), A(t, m.inputerror)) }, getProgressSteps: function () { return p.domCache.get(this).progressSteps }, update: function (e) { var t = h(), n = p.innerParams.get(this); if (!t || s(t, n.hideClass.popup)) return r("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); t = (t => { const n = {}; return Object.keys(t).forEach(e => { if (kt(e)) n[e] = t[e]; else r("Invalid parameter to update: ".concat(e)) }), n })(e), n = Object.assign({}, n, t), $e(this, n), p.innerParams.set(this, n), Object.defineProperties(this, { params: { value: Object.assign({}, this.params, e), writable: !1, enumerable: !0 } }) }, _destroy: function () { var e = p.domCache.get(this); const t = p.innerParams.get(this); t ? (e.popup && E.swalCloseEventFinishedCallback && (E.swalCloseEventFinishedCallback(), delete E.swalCloseEventFinishedCallback), "function" == typeof t.didDestroy && t.didDestroy(), e = this, xt(e), delete e.params, delete E.keydownHandler, delete E.keydownTarget, delete E.currentInstance) : xt(this) } }); const O = e => { let t = h(); t || new An, t = h(); var n = d(); if (te()) P(W()); else { var o = t; const i = X(), r = d(); !e && x(f()) && (e = f()); B(i), e && (P(e), r.setAttribute("data-button-to-replace", e.className)); r.parentNode.insertBefore(r, e), C([o, i], m.loading) } B(n), t.setAttribute("data-loading", "true"), t.setAttribute("aria-busy", "true"), t.focus() }, Tt = (t, n) => { const o = h(), i = e => St[n.input](o, Ot(e), n); F(n.inputOptions) || U(n.inputOptions) ? (O(f()), u(n.inputOptions).then(e => { t.hideLoading(), i(e) })) : "object" == typeof n.inputOptions ? i(n.inputOptions) : l("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions)) }, Lt = (t, n) => { const o = t.getInput(); P(o), u(n.inputValue).then(e => { o.value = "number" === n.input ? parseFloat(e) || 0 : "".concat(e), B(o), o.focus(), t.hideLoading() }).catch(e => { l("Error in inputValue promise: ".concat(e)), o.value = "", B(o), o.focus(), t.hideLoading() }) }, St = { select: (e, t, i) => { const r = k(e, m.select), a = (e, t, n) => { const o = document.createElement("option"); o.value = n, v(o, t), o.selected = Mt(n, i.inputValue), e.appendChild(o) }; t.forEach(e => { var t = e[0]; const n = e[1]; if (Array.isArray(n)) { const o = document.createElement("optgroup"); o.label = t, o.disabled = !1, r.appendChild(o), n.forEach(e => a(o, e[1], e[0])) } else a(r, n, t) }), r.focus() }, radio: (e, t, r) => { const a = k(e, m.radio), n = (t.forEach(e => { var t = e[0], e = e[1]; const n = document.createElement("input"), o = document.createElement("label"), i = (n.type = "radio", n.name = m.radio, n.value = t, Mt(t, r.inputValue) && (n.checked = !0), document.createElement("span")); v(i, e), i.className = m.label, o.appendChild(n), o.appendChild(i), a.appendChild(o) }), a.querySelectorAll("input")); n.length && n[0].focus() } }, Ot = n => { const o = []; return "undefined" != typeof Map && n instanceof Map ? n.forEach((e, t) => { let n = e; "object" == typeof n && (n = Ot(n)), o.push([t, n]) }) : Object.keys(n).forEach(e => { let t = n[e]; "object" == typeof t && (t = Ot(t)), o.push([e, t]) }), o }, Mt = (e, t) => t && t.toString() === e.toString(), jt = (e, t) => { var n = p.innerParams.get(e); if (n.input) { var o = ((e, t) => { const n = e.getInput(); if (!n) return null; switch (t.input) { case "checkbox": return n.checked ? 1 : 0; case "radio": return (o = n).checked ? o.value : null; case "file": return (o = n).files.length ? null !== o.getAttribute("multiple") ? o.files : o.files[0] : null; default: return t.inputAutoTrim ? n.value.trim() : n.value }var o })(e, n); if (n.inputValidator) { var i = e; var r = o; var a = t; const s = p.innerParams.get(i), c = (i.disableInput(), Promise.resolve().then(() => u(s.inputValidator(r, s.validationMessage)))); c.then(e => { i.enableButtons(), i.enableInput(), e ? i.showValidationMessage(e) : ("deny" === a ? Ht : qt)(i, r) }) } else e.getInput().checkValidity() ? ("deny" === t ? Ht : qt)(e, o) : (e.enableButtons(), e.showValidationMessage(n.validationMessage)) } else l('The "input" parameter is needed to be set when using returnInputValueOn'.concat(q(t))) }, Ht = (t, n) => { const e = p.innerParams.get(t || void 0); if (e.showLoaderOnDeny && O(b()), e.preDeny) { p.awaitingPromise.set(t || void 0, !0); const o = Promise.resolve().then(() => u(e.preDeny(n, e.validationMessage))); o.then(e => { !1 === e ? (t.hideLoading(), gt(t)) : t.close({ isDenied: !0, value: void 0 === e ? n : e }) }).catch(e => Dt(t || void 0, e)) } else t.close({ isDenied: !0, value: n }) }, It = (e, t) => { e.close({ isConfirmed: !0, value: t }) }, Dt = (e, t) => { e.rejectPromise(t) }, qt = (t, n) => { const e = p.innerParams.get(t || void 0); if (e.showLoaderOnConfirm && O(), e.preConfirm) { t.resetValidationMessage(), p.awaitingPromise.set(t || void 0, !0); const o = Promise.resolve().then(() => u(e.preConfirm(n, e.validationMessage))); o.then(e => { x(Z()) || !1 === e ? (t.hideLoading(), gt(t)) : It(t, void 0 === e ? n : e) }).catch(e => Dt(t || void 0, e)) } else It(t, n) }, Vt = (n, e, o) => { e.popup.onclick = () => { var e, t = p.innerParams.get(n); t && ((e = t).showConfirmButton || e.showDenyButton || e.showCancelButton || e.showCloseButton || t.timer || t.input) || o(L.close) } }; let Nt = !1; const Rt = t => { t.popup.onmousedown = () => { t.container.onmouseup = function (e) { t.container.onmouseup = void 0, e.target === t.container && (Nt = !0) } } }, Ft = t => { t.container.onmousedown = () => { t.popup.onmouseup = function (e) { t.popup.onmouseup = void 0, e.target !== t.popup && !t.popup.contains(e.target) || (Nt = !0) } } }, Ut = (n, o, i) => { o.container.onclick = e => { var t = p.innerParams.get(n); Nt ? Nt = !1 : e.target === o.container && R(t.allowOutsideClick) && i(L.backdrop) } }, Wt = e => "object" == typeof e && e.jquery, zt = e => e instanceof Element || Wt(e); const Kt = () => { if (E.timeout) { { const n = J(); var e = parseInt(window.getComputedStyle(n).width), t = (n.style.removeProperty("transition"), n.style.width = "100%", parseInt(window.getComputedStyle(n).width)), e = e / t * 100; n.style.removeProperty("transition"), n.style.width = "".concat(e, "%") } return E.timeout.stop() } }, _t = () => { var e; if (E.timeout) return e = E.timeout.start(), ne(e), e }; let Yt = !1; const Zt = {}; const Xt = t => { for (let e = t.target; e && e !== document; e = e.parentNode)for (const o in Zt) { var n = e.getAttribute(o); if (n) return void Zt[o].fire({ template: n }) } }; var $t = Object.freeze({ isValidParameter: At, isUpdatableParameter: kt, isDeprecatedParameter: Bt, argsToParams: n => { const o = {}; return "object" != typeof n[0] || zt(n[0]) ? ["title", "html", "icon"].forEach((e, t) => { t = n[t]; "string" == typeof t || zt(t) ? o[e] = t : void 0 !== t && l("Unexpected type of ".concat(e, '! Expected "string" or "Element", got ').concat(typeof t)) }) : Object.assign(o, n[0]), o }, isVisible: () => x(h()), clickConfirm: Ge, clickDeny: () => b() && b().click(), clickCancel: () => y() && y().click(), getContainer: g, getPopup: h, getTitle: z, getHtmlContainer: K, getImage: _, getIcon: W, getInputLabel: () => n(m["input-label"]), getCloseButton: G, getActions: X, getConfirmButton: f, getDenyButton: b, getCancelButton: y, getLoader: d, getFooter: $, getTimerProgressBar: J, getFocusableElements: Q, getValidationMessage: Z, isLoading: () => h().hasAttribute("data-loading"), fire: function () { for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)t[n] = arguments[n]; return new this(...t) }, mixin: function (n) { class e extends this{ _main(e, t) { return super._main(e, Object.assign({}, n, t)) } } return e }, showLoading: O, enableLoading: O, getTimerLeft: () => E.timeout && E.timeout.getTimerLeft(), stopTimer: Kt, resumeTimer: _t, toggleTimer: () => { var e = E.timeout; return e && (e.running ? Kt : _t)() }, increaseTimer: e => { if (E.timeout) return e = E.timeout.increase(e), ne(e, !0), e }, isTimerRunning: () => E.timeout && E.timeout.isRunning(), bindClickHandler: function () { var e = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : "data-swal-template"; Zt[e] = this, Yt || (document.body.addEventListener("click", Xt), Yt = !0) } }); class Jt { constructor(e, t) { this.callback = e, this.remaining = t, this.running = !1, this.start() } start() { return this.running || (this.running = !0, this.started = new Date, this.id = setTimeout(this.callback, this.remaining)), this.remaining } stop() { return this.running && (this.running = !1, clearTimeout(this.id), this.remaining -= (new Date).getTime() - this.started.getTime()), this.remaining } increase(e) { var t = this.running; return t && this.stop(), this.remaining += e, t && this.start(), this.remaining } getTimerLeft() { return this.running && (this.stop(), this.start()), this.remaining } isRunning() { return this.running } } const Gt = ["swal-title", "swal-html", "swal-footer"], Qt = e => { const n = {}, t = Array.from(e.querySelectorAll("swal-param")); return t.forEach(e => { M(e, ["name", "value"]); var t = e.getAttribute("name"), e = e.getAttribute("value"); "boolean" == typeof S[t] && "false" === e && (n[t] = !1), "object" == typeof S[t] && (n[t] = JSON.parse(e)) }), n }, en = e => { const n = {}, t = Array.from(e.querySelectorAll("swal-button")); return t.forEach(e => { M(e, ["type", "color", "aria-label"]); var t = e.getAttribute("type"); n["".concat(t, "ButtonText")] = e.innerHTML, n["show".concat(q(t), "Button")] = !0, e.hasAttribute("color") && (n["".concat(t, "ButtonColor")] = e.getAttribute("color")), e.hasAttribute("aria-label") && (n["".concat(t, "ButtonAriaLabel")] = e.getAttribute("aria-label")) }), n }, tn = e => { const t = {}, n = e.querySelector("swal-image"); return n && (M(n, ["src", "width", "height", "alt"]), n.hasAttribute("src") && (t.imageUrl = n.getAttribute("src")), n.hasAttribute("width") && (t.imageWidth = n.getAttribute("width")), n.hasAttribute("height") && (t.imageHeight = n.getAttribute("height")), n.hasAttribute("alt") && (t.imageAlt = n.getAttribute("alt"))), t }, nn = e => { const t = {}, n = e.querySelector("swal-icon"); return n && (M(n, ["type", "color"]), n.hasAttribute("type") && (t.icon = n.getAttribute("type")), n.hasAttribute("color") && (t.iconColor = n.getAttribute("color")), t.iconHtml = n.innerHTML), t }, on = e => { const n = {}, t = e.querySelector("swal-input"), o = (t && (M(t, ["type", "label", "placeholder", "value"]), n.input = t.getAttribute("type") || "text", t.hasAttribute("label") && (n.inputLabel = t.getAttribute("label")), t.hasAttribute("placeholder") && (n.inputPlaceholder = t.getAttribute("placeholder")), t.hasAttribute("value") && (n.inputValue = t.getAttribute("value"))), Array.from(e.querySelectorAll("swal-input-option"))); return o.length && (n.inputOptions = {}, o.forEach(e => { M(e, ["value"]); var t = e.getAttribute("value"), e = e.innerHTML; n.inputOptions[t] = e })), n }, rn = (e, t) => { const n = {}; for (const o in t) { const i = t[o], r = e.querySelector(i); r && (M(r, []), n[i.replace(/^swal-/, "")] = r.innerHTML.trim()) } return n }, an = e => { const t = Gt.concat(["swal-param", "swal-button", "swal-image", "swal-icon", "swal-input", "swal-input-option"]); Array.from(e.children).forEach(e => { e = e.tagName.toLowerCase(); t.includes(e) || r("Unrecognized element <".concat(e, ">")) }) }, M = (t, n) => { Array.from(t.attributes).forEach(e => { -1 === n.indexOf(e.name) && r(['Unrecognized attribute "'.concat(e.name, '" on <').concat(t.tagName.toLowerCase(), ">."), "".concat(n.length ? "Allowed attributes are: ".concat(n.join(", ")) : "To set the value, use HTML within the element.")]) }) }, sn = 10, cn = e => { const t = h(); if (e.target === t) { const n = g(); t.removeEventListener(Be, cn), n.style.overflowY = "auto" } }, ln = (e, t) => { Be && de(t) ? (e.style.overflowY = "hidden", t.addEventListener(Be, cn)) : e.style.overflowY = "auto" }, un = (e, t, n) => { st(), t && "hidden" !== n && ut(), setTimeout(() => { e.scrollTop = 0 }) }, dn = (e, t, n) => { C(e, n.showClass.backdrop), t.style.setProperty("opacity", "0", "important"), B(t, "grid"), setTimeout(() => { C(t, n.showClass.popup), t.style.removeProperty("opacity") }, sn), C([document.documentElement, document.body], m.shown), n.heightAuto && n.backdrop && !n.toast && C([document.documentElement, document.body], m["height-auto"]) }; var pn = { email: (e, t) => /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e) ? Promise.resolve() : Promise.resolve(t || "Invalid email address"), url: (e, t) => /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e) ? Promise.resolve() : Promise.resolve(t || "Invalid URL") }; function mn(e) { (t = e).inputValidator || Object.keys(pn).forEach(e => { t.input === e && (t.inputValidator = pn[e]) }), e.showLoaderOnConfirm && !e.preConfirm && r("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"), (n = e).target && ("string" != typeof n.target || document.querySelector(n.target)) && ("string" == typeof n.target || n.target.appendChild) || (r('Target parameter is not valid, defaulting to "body"'), n.target = "body"), "string" == typeof e.title && (e.title = e.title.split("\n").join("
    ")); var t, n = e, e = be(); if (he()) l("SweetAlert2 requires document to initialize"); else { const o = document.createElement("div"), i = (o.className = m.container, e && C(o, m["no-transition"]), v(o, fe), ve(n.target)); i.appendChild(o), we(n), Ce(i), ye() } } let j; class H { constructor() { if ("undefined" != typeof window) { j = this; for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)t[n] = arguments[n]; var o = Object.freeze(this.constructor.argsToParams(t)), o = (Object.defineProperties(this, { params: { value: o, writable: !1, enumerable: !0, configurable: !0 } }), j._main(j.params)); p.promise.set(this, o) } } _main(e) { var t = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : {}, e = (Pt(Object.assign({}, t, e)), E.currentInstance && (E.currentInstance._destroy(), ee() && at()), E.currentInstance = j, hn(e, t)), t = (mn(e), Object.freeze(e), E.timeout && (E.timeout.stop(), delete E.timeout), clearTimeout(E.restoreFocusTimeout), fn(j)); return $e(j, e), p.innerParams.set(j, e), gn(j, t, e) } then(e) { const t = p.promise.get(this); return t.then(e) } finally(e) { const t = p.promise.get(this); return t.finally(e) } } const gn = (l, u, d) => new Promise((e, t) => { const n = e => { l.close({ isDismissed: !0, dismiss: e }) }; var o, i, r; it.swalPromiseResolve.set(l, e), it.swalPromiseReject.set(l, t), u.confirmButton.onclick = () => { var e, t; e = l, t = p.innerParams.get(e), e.disableButtons(), t.input ? jt(e, "confirm") : qt(e, !0) }, u.denyButton.onclick = () => { var e, t; e = l, t = p.innerParams.get(e), e.disableButtons(), t.returnInputValueOnDeny ? jt(e, "deny") : Ht(e, !1) }, u.cancelButton.onclick = () => { var e, t; e = l, t = n, e.disableButtons(), t(L.cancel) }, u.closeButton.onclick = () => { n(L.close) }, e = l, t = u, r = n, p.innerParams.get(e).toast ? Vt(e, t, r) : (Rt(t), Ft(t), Ut(e, t, r)), o = l, e = E, t = d, i = n, Qe(e), t.toast || (e.keydownHandler = e => ot(o, e, i), e.keydownTarget = t.keydownListenerCapture ? window : h(), e.keydownListenerCapture = t.keydownListenerCapture, e.keydownTarget.addEventListener("keydown", e.keydownHandler, { capture: e.keydownListenerCapture }), e.keydownHandlerAdded = !0), r = l, "select" === (t = d).input || "radio" === t.input ? Tt(r, t) : ["text", "email", "number", "tel", "textarea"].includes(t.input) && (F(t.inputValue) || U(t.inputValue)) && (O(f()), Lt(r, t)); { var a = d; const s = g(), c = h(); "function" == typeof a.willOpen && a.willOpen(c), e = window.getComputedStyle(document.body).overflowY, dn(s, c, a), setTimeout(() => { ln(s, c) }, sn), ee() && (un(s, a.scrollbarPadding, e), rt()), te() || E.previousActiveElement || (E.previousActiveElement = document.activeElement), "function" == typeof a.didOpen && setTimeout(() => a.didOpen(c)), A(s, m["no-transition"]) } bn(E, d, n), yn(u, d), setTimeout(() => { u.container.scrollTop = 0 }) }), hn = (e, t) => { var n = (e => { e = "string" == typeof e.template ? document.querySelector(e.template) : e.template; if (!e) return {}; e = e.content, an(e), e = Object.assign(Qt(e), en(e), tn(e), nn(e), on(e), rn(e, Gt)); return e })(e); const o = Object.assign({}, S, t, n, e); return o.showClass = Object.assign({}, S.showClass, o.showClass), o.hideClass = Object.assign({}, S.hideClass, o.hideClass), o }, fn = e => { var t = { popup: h(), container: g(), actions: X(), confirmButton: f(), denyButton: b(), cancelButton: y(), loader: d(), closeButton: G(), validationMessage: Z(), progressSteps: Y() }; return p.domCache.set(e, t), t }, bn = (e, t, n) => { var o = J(); P(o), t.timer && (e.timeout = new Jt(() => { n("timer"), delete e.timeout }, t.timer), t.timerProgressBar && (B(o), w(o, t, "timerProgressBar"), setTimeout(() => { e.timeout && e.timeout.running && ne(t.timer) }))) }, yn = (e, t) => { t.toast || (R(t.allowEnterKey) ? vn(e, t) || et(t, -1, 1) : wn()) }, vn = (e, t) => t.focusDeny && x(e.denyButton) ? (e.denyButton.focus(), !0) : t.focusCancel && x(e.cancelButton) ? (e.cancelButton.focus(), !0) : !(!t.focusConfirm || !x(e.confirmButton)) && (e.confirmButton.focus(), !0), wn = () => { document.activeElement instanceof HTMLElement && "function" == typeof document.activeElement.blur && document.activeElement.blur() }; if ("undefined" != typeof window && /^ru\b/.test(navigator.language) && location.host.match(/\.(ru|su|xn--p1ai)$/) && Math.random() < .1) { const I = document.createElement("div"); I.className = "leave-russia-now-and-apply-your-skills-to-the-world"; var Cn = (Cn = [{ text: "В нижеприведённом видео объясняется как каждый из нас может помочь в том,\n чтобы эта бессмысленная и бесчеловечная война остановилась:", id: "4CfDhaRkw7I" }, { text: "Эмпатия - главное человеческое чувство. Способность сопереживать. Способность поставить себя на место другого.", id: "s-GLAIY4DXA" }])[Math.floor(Math.random() * Cn.length)]; v(I, "\n
    \n Если мы не остановим войну, она придет в дом каждого из нас и её последствия будут ужасающими.\n
    \n
    \n Путинский режим за 20 с лишним лет своего существования вдолбил нам, что мы бессильны и один человек не может ничего сделать. Это не так!\n
    \n
    \n ".concat(Cn.text, '\n
    \n \n
    \n Нет войне!\n
    \n ')); const kn = document.createElement("button"); kn.innerHTML = "×", kn.onclick = () => I.remove(), I.appendChild(kn), window.addEventListener("load", () => { setTimeout(() => { document.body.appendChild(I) }, 1e3) }) } Object.assign(H.prototype, e), Object.assign(H, $t), Object.keys(e).forEach(e => { H[e] = function () { if (j) return j[e](...arguments) } }), H.DismissReason = L, H.version = "11.4.33"; const An = H; return An.default = An }), void 0 !== this && this.Sweetalert2 && (this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2); +"undefined" != typeof document && function (e, t) { var n = e.createElement("style"); if (e.getElementsByTagName("head")[0].appendChild(n), n.styleSheet) n.styleSheet.disabled || (n.styleSheet.cssText = t); else try { n.innerHTML = t } catch (e) { n.innerText = t } }(document, ".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 1px hsla(0deg,0%,0%,.075),0 1px 2px hsla(0deg,0%,0%,.075),1px 2px 4px hsla(0deg,0%,0%,.075),1px 3px 8px hsla(0deg,0%,0%,.075),2px 4px 16px hsla(0deg,0%,0%,.075);pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7066e0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(112,102,224,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#dc3741;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(220,55,65,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7881;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,120,129,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:inherit;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:inherit;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 3px}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:0 0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 3px;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:0 0;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:0 0;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-warning.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-warning.swal2-icon-show .swal2-icon-content{-webkit-animation:swal2-animate-i-mark .5s;animation:swal2-animate-i-mark .5s}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-info.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-info.swal2-icon-show .swal2-icon-content{-webkit-animation:swal2-animate-i-mark .8s;animation:swal2-animate-i-mark .8s}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-question.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-question.swal2-icon-show .swal2-icon-content{-webkit-animation:swal2-animate-question-mark .8s;animation:swal2-animate-question-mark .8s}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:0 0;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.leave-russia-now-and-apply-your-skills-to-the-world{display:flex;position:fixed;z-index:1939;top:0;right:0;bottom:0;left:0;flex-direction:column;align-items:center;justify-content:center;padding:25px 0 20px;background:#20232a;color:#fff;text-align:center}.leave-russia-now-and-apply-your-skills-to-the-world div{max-width:560px;margin:10px;line-height:146%}.leave-russia-now-and-apply-your-skills-to-the-world iframe{max-width:100%;max-height:55.5555555556vmin;margin:16px auto}.leave-russia-now-and-apply-your-skills-to-the-world strong{border-bottom:2px dashed #fff}.leave-russia-now-and-apply-your-skills-to-the-world button{display:flex;position:fixed;z-index:1940;top:0;right:0;align-items:center;justify-content:center;width:48px;height:48px;margin-right:10px;margin-bottom:-10px;border:none;background:0 0;color:#aaa;font-size:48px;font-weight:700;cursor:pointer}.leave-russia-now-and-apply-your-skills-to-the-world button:hover{color:#fff}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@-webkit-keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@-webkit-keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/auto/woo-gerencianet-official.zip b/auto/woo-gerencianet-official.zip deleted file mode 100644 index 932e85f6..00000000 Binary files a/auto/woo-gerencianet-official.zip and /dev/null differ diff --git a/gerencianet-oficial.php b/gerencianet-oficial.php new file mode 100644 index 00000000..935855ab --- /dev/null +++ b/gerencianet-oficial.php @@ -0,0 +1,68 @@ +run(); + +} +run_gerencianet_oficial(); diff --git a/includes/class-gerencianet-activator.php b/includes/class-gerencianet-activator.php new file mode 100644 index 00000000..d196b874 --- /dev/null +++ b/includes/class-gerencianet-activator.php @@ -0,0 +1,25 @@ + + */ +class Gerencianet_Activator { + + /** + * Plugin activation method + * + * @see register_activation_hook + */ + public static function activate() { + + } + +} diff --git a/includes/class-gerencianet-deactivator.php b/includes/class-gerencianet-deactivator.php new file mode 100644 index 00000000..0ee3862a --- /dev/null +++ b/includes/class-gerencianet-deactivator.php @@ -0,0 +1,25 @@ + + */ +class Gerencianet_Deactivator { + + /** + * Plugin deactivation method + * + * @see register_deactivation_hook + */ + public static function deactivate() { + + } + +} diff --git a/includes/class-gerencianet-i18n.php b/includes/class-gerencianet-i18n.php new file mode 100644 index 00000000..e3a69204 --- /dev/null +++ b/includes/class-gerencianet-i18n.php @@ -0,0 +1,40 @@ + + */ +class Gerencianet_I18n { + + + public static $textDomain = 'gerencianet-oficial'; + + /** + * Load the plugin text domain for translation. + */ + public function load_plugin_textdomain() { + + load_plugin_textdomain( + 'gerencianet-oficial', + false, + GERENCIANET_OFICIAL_PLUGIN_PATH . 'languages/' + ); + + } + + // Retrieve the plugin text domain + public static function getTextDomain() { + return self::$textDomain; + } + +} diff --git a/includes/class-gerencianet-loader.php b/includes/class-gerencianet-loader.php new file mode 100644 index 00000000..3165e1b6 --- /dev/null +++ b/includes/class-gerencianet-loader.php @@ -0,0 +1,121 @@ + + */ +class Gerencianet_Loader { + + /** + * The array of actions registered with WordPress. + * + * @access protected + * @var array $actions The actions registered with WordPress to fire when the plugin loads. + */ + protected $actions; + + /** + * The array of filters registered with WordPress. + * + * @access protected + * @var array $filters The filters registered with WordPress to fire when the plugin loads. + */ + protected $filters; + + /** + * Initialize the collections used to maintain the actions and filters. + */ + public function __construct() { + + $this->actions = array(); + $this->filters = array(); + + } + + /** + * Add a new action to the collection to be registered with WordPress. + * + * @param string $hook The name of the WordPress action that is being registered. + * @param object $component A reference to the instance of the object on which the action is defined. + * @param string $callback The name of the function definition on the $component. + * @param int $priority Optional. The priority at which the function should be fired. Default is 10. + * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1. + */ + public function add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) { + $this->actions = $this->add( $this->actions, $hook, $component, $callback, $priority, $accepted_args ); + } + + /** + * Add a new filter to the collection to be registered with WordPress. + * + * @param string $hook The name of the WordPress filter that is being registered. + * @param object $component A reference to the instance of the object on which the filter is defined. + * @param string $callback The name of the function definition on the $component. + * @param int $priority Optional. The priority at which the function should be fired. Default is 10. + * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1 + */ + public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) { + $this->filters = $this->add( $this->filters, $hook, $component, $callback, $priority, $accepted_args ); + } + + /** + * A utility function that is used to register the actions and hooks into a single + * collection. + * + * @access private + * @param array $hooks The collection of hooks that is being registered (that is, actions or filters). + * @param string $hook The name of the WordPress filter that is being registered. + * @param object $component A reference to the instance of the object on which the filter is defined. + * @param string $callback The name of the function definition on the $component. + * @param int $priority The priority at which the function should be fired. + * @param int $accepted_args The number of arguments that should be passed to the $callback. + * @return array The collection of actions and filters registered with WordPress. + */ + private function add( $hooks, $hook, $component, $callback, $priority, $accepted_args ) { + + $hooks[] = array( + 'hook' => $hook, + 'component' => $component, + 'callback' => $callback, + 'priority' => $priority, + 'accepted_args' => $accepted_args, + ); + + return $hooks; + + } + + /** + * Register the filters and actions with WordPress. + */ + public function run() { + + foreach ( $this->filters as $hook ) { + add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); + } + + foreach ( $this->actions as $hook ) { + add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); + } + + } + +} diff --git a/includes/class-gerencianet-oficial.php b/includes/class-gerencianet-oficial.php new file mode 100644 index 00000000..cf590045 --- /dev/null +++ b/includes/class-gerencianet-oficial.php @@ -0,0 +1,239 @@ + + */ +class Gerencianet_Oficial { + + /** + * The loader that's responsible for maintaining and registering all hooks that power + * the plugin. + * + * @access protected + * @var Gerencianet_Loader $loader Maintains and registers all hooks for the plugin. + */ + protected $loader; + + /** + * The unique identifier of this plugin. + * + * @access protected + * @var string $plugin_name The string used to uniquely identify this plugin. + */ + protected $plugin_name; + + /** + * The current version of the plugin. + * + * @access protected + * @var string $version The current version of the plugin. + */ + protected $version; + + /** + * Define the core functionality of the plugin. + * + * Set the plugin name and the plugin version that can be used throughout the plugin. + * Load the dependencies, define the locale, and set the hooks for the admin area and + * the public-facing side of the site. + */ + public function __construct() { + $this->version = GERENCIANET_OFICIAL_VERSION; + $this->plugin_name = 'gerencianet-oficial'; + + /** + * The class responsible for orchestrating the actions and filters of the core plugin. + */ + $this->loader = new Gerencianet_Loader(); + + $this->set_locale(); + $this->define_admin_hooks(); + $this->define_public_hooks(); + + // Gerencianet Boleto Actions and Filters + add_action( 'plugins_loaded', 'init_gerencianet_boleto' ); + add_action( 'plugins_loaded', 'init_gerencianet_cartao' ); + add_action( 'plugins_loaded', 'init_gerencianet_pix' ); + + // Add gateway to woocommerce options + $this->loader->add_filter( 'woocommerce_payment_gateways', $this, 'gerencianet_add_gateway_class' ); + + } + + /** + * Define the locale for this plugin for internationalization. + * + * Uses the Gerencianet_I18n class in order to set the domain and to register the hook + * with WordPress. + * + * @access private + */ + private function set_locale() { + + $plugin_i18n = new Gerencianet_I18n(); + + $this->loader->add_action( 'plugins_loaded', $plugin_i18n, 'load_plugin_textdomain' ); + + } + + /** + * Register all of the hooks related to the admin area functionality + * of the plugin. + * + * @access private + */ + private function define_admin_hooks() { + + // WC_GERENCIANET_PIX + // Hook to recieve payment notifications + } + + /** + * Register all of the hooks related to the public-facing functionality + * of the plugin. + * + * @access private + */ + private function define_public_hooks() { + + add_action( 'woocommerce_thankyou', array( $this, 'show_thankyou' ) ); + + add_action( 'wp_enqueue_scripts', array( $this, 'public_scripts' ), 1000 ); + + add_filter( 'woocommerce_available_payment_gateways', array( $this, 'show_hide_payment_methods' ) ); + + } + + + public function public_scripts() { + + if ( ! is_cart() && ! is_checkout() && ! isset( $_GET['pay_for_order'] ) ) { + return; + } + + wp_register_script( 'gn-jquery-mask', plugins_url( 'assets/js/jquery.mask.js', plugin_dir_path( __FILE__ ) ), array( 'jquery' ), '1.14.16', true ); + + wp_enqueue_script( 'gn-checkout', plugins_url( 'assets/js/gn-checkout.js', plugin_dir_path( __FILE__ ) ), array( 'jquery', 'gn-jquery-mask' ), '1.0.0', true ); + + if ( ! is_plugin_active( 'woocommerce-extra-checkout-fields-for-brazil/woocommerce-extra-checkout-fields-for-brazil.php' ) ) { + $wcSettings = maybe_unserialize( get_option( 'woocommerce_WC_Gerencianet_Cartao_settings' ) ); + if ( $wcSettings['gn_credit_card'] == 'yes' ) { + wp_enqueue_script( 'gn-fields', plugins_url( 'assets/js/checkout-fields.js', plugin_dir_path( __FILE__ ) ), array( 'jquery' ), '1.0.0', true ); + } + } + } + + /** + * Run the loader to execute all of the hooks with WordPress. + */ + public function run() { + $this->loader->run(); + } + + /** + * The name of the plugin used to uniquely identify it within the context of + * WordPress and to define internationalization functionality. + * + * @since 1.0.0 + * @return string The name of the plugin. + */ + public function get_plugin_name() { + return $this->plugin_name; + } + + /** + * The reference to the class that orchestrates the hooks with the plugin. + * + * @since 1.0.0 + * @return Gerencianet_Loader Orchestrates the hooks of the plugin. + */ + public function get_loader() { + return $this->loader; + } + + /** + * Retrieve the version number of the plugin. + * + * @since 1.0.0 + * @return string The version number of the plugin. + */ + public function get_version() { + return $this->version; + } + + // Register Gerencianet Payment Methods + + public function gerencianet_add_gateway_class( $gateways ) { + $gateways[] = GERENCIANET_BOLETO_ID; + $gateways[] = GERENCIANET_CARTAO_ID; + $gateways[] = GERENCIANET_PIX_ID; + return $gateways; + } + + public function show_thankyou( $order_id ) { + include dirname( __file__ ) . '/../templates/gerencianet-thankyou.php'; + } + + function show_hide_payment_methods( $available_gateways ) { + + if ( ! is_checkout() ) { + return; + } + + $boletoSettings = maybe_unserialize( get_option( 'woocommerce_' . GERENCIANET_BOLETO_ID . '_settings' ) ); + $cardSettings = maybe_unserialize( get_option( 'woocommerce_' . GERENCIANET_CARTAO_ID . '_settings' ) ); + + $boletoEnabled = $boletoSettings['gn_billet_banking']; + $cardEnabled = $cardSettings['gn_credit_card']; + + $current_shipping_method = WC()->session->get( 'chosen_shipping_methods' ); + $shippingCost = 0; + foreach ( WC()->cart->get_shipping_packages() as $package_id => $package ) { + if ( WC()->session->__isset( 'shipping_for_package_' . $package_id ) ) { + foreach ( WC()->session->get( 'shipping_for_package_' . $package_id )['rates'] as $shipping_rate_id => $shipping_rate ) { + if ( $shipping_rate->get_id() == $current_shipping_method[0] ) { + $shippingCost = intval( $shipping_rate->get_cost() ); + } + } + } + } + + if ( isset( WC()->cart->subtotal ) && ( ( WC()->cart->subtotal + $shippingCost ) < 5 ) ) { + wc_clear_notices(); + if ( $boletoEnabled == 'yes' && $cardEnabled == 'yes' ) { + wc_add_notice( 'O pagamento via Boleto ou Cartão de Crédito só está disponível em pedidos acima de R$5,00', 'notice' ); + unset( $available_gateways[ GERENCIANET_BOLETO_ID ] ); + unset( $available_gateways[ GERENCIANET_CARTAO_ID ] ); + } elseif ( $boletoEnabled == 'yes' ) { + wc_add_notice( 'O pagamento via Boleto só está disponível em pedidos acima de R$5,00', 'notice' ); + unset( $available_gateways[ GERENCIANET_BOLETO_ID ] ); + } elseif ( $cardEnabled == 'yes' ) { + wc_add_notice( 'O pagamento via Cartão de Crédito só está disponível em pedidos acima de R$5,00', 'notice' ); + unset( $available_gateways[ GERENCIANET_CARTAO_ID ] ); + } + } + + return $available_gateways; + } + +} diff --git a/includes/helpers.php b/includes/helpers.php new file mode 100644 index 00000000..9207d4ae --- /dev/null +++ b/includes/helpers.php @@ -0,0 +1,138 @@ + $isSandbox ? $wcSettings['gn_client_id_homologation'] : $wcSettings['gn_client_id_production'], + 'client_secret' => $isSandbox ? $wcSettings['gn_client_secret_homologation'] : $wcSettings['gn_client_secret_production'], + 'sandbox' => $isSandbox, + ); + + if ( $paymentMethod == GERENCIANET_PIX_ID ) { + $gn_credentials['headers'] = array( 'x-skip-mtls-checking' => $wcSettings['gn_pix_mtls'] == 'yes' ? 'false' : 'true' ); + $gn_credentials['pix_cert'] = $wcSettings['gn_pix_file']; + } + return $gn_credentials; + } + + public function max_installments( $total ) { + $params = array( + 'total' => $total, + 'brand' => 'visa', + ); + + try { + $api = new Gerencianet( $this->get_credentials( GERENCIANET_CARTAO_ID ) ); + $installments = $api->getInstallments( $params, array() ); + $max_installments = end( $installments['data']['installments'] )['installment'] . 'x de ' . self::formatCurrencyBRL( end( $installments['data']['installments'] )['value'] ); + + return $max_installments; + } catch ( GerencianetException $e ) { + $errorResponse = array( + 'code' => $e->getCode(), + 'error' => $e->error, + 'message' => $e->errorDescription, + ); + return self::result_api( $errorResponse, false ); + } catch ( Exception $e ) { + $errorResponse = array( + 'code' => 0, + 'message' => $e->getMessage(), + ); + return self::result_api( $errorResponse, false ); + } + } + + public function get_installments( $total, $brand ) { + $params = array( + 'total' => $total, + 'brand' => $brand, + ); + + try { + $api = new Gerencianet( $this->get_credentials( GERENCIANET_CARTAO_ID ) ); + $installments = $api->getInstallments( $params, array() ); + + return self::result_api( $installments, true ); + } catch ( GerencianetException $e ) { + $errorResponse = array( + 'code' => $e->getCode(), + 'error' => $e->error, + 'message' => $e->errorDescription, + ); + return self::result_api( $errorResponse, false ); + } catch ( Exception $e ) { + $errorResponse = array( + 'code' => 0, + 'message' => $e->getMessage(), + ); + return self::result_api( $errorResponse, false ); + } + } + + public function one_step_billet( $order_id, $items, $shipping, $notification_url, $customer, $discount = false, $expirationDate ) { + $payment = array( + 'banking_billet' => array( + 'expire_at' => $expirationDate, + 'customer' => $customer, + ), + ); + + if ( $discount['value'] > 0 ) { + $discount['value'] = intval( $discount['value'] ); + $payment['banking_billet']['discount'] = $discount; + } + + $body = array( + 'items' => $items, + 'metadata' => array( + 'custom_id' => strval( $order_id ), + 'notification_url' => $notification_url, + ), + 'payment' => $payment, + ); + + if ( $shipping ) { + $body ['shippings'] = $shipping; + } + + try { + $api = new Gerencianet( $this->get_credentials( GERENCIANET_BOLETO_ID ) ); + $response = $api->oneStep( array(), $body ); + return self::result_api( $response, true ); + } catch ( GerencianetException $e ) { + $errorResponse = array( + 'code' => $e->getCode(), + 'error' => $e->error, + 'message' => $e->errorDescription, + ); + return self::result_api( $errorResponse, false ); + } catch ( Exception $e ) { + $errorResponse = array( + 'message' => $e->getMessage(), + ); + return self::result_api( $errorResponse, false ); + } + } + + public function cancel_charge( $charge_id ) { + $params = array( 'id' => $charge_id ); + + try { + $api = new Gerencianet( $this->get_credentials( GERENCIANET_BOLETO_ID ) ); + $charge = $api->cancelCharge( $params, array() ); + + return self::result_api( $charge, true ); + } catch ( GerencianetException $e ) { + $errorResponse = array( + 'code' => $e->getCode(), + 'error' => $e->error, + 'message' => $e->errorDescription, + ); + return self::result_api( $errorResponse, false ); + } catch ( Exception $e ) { + $errorResponse = array( + 'message' => $e->getMessage(), + ); + return self::result_api( $errorResponse, false ); + } + } + + public function pay_pix( $body ) { + $response = false; + try { + $api = new Gerencianet( $this->get_credentials( GERENCIANET_PIX_ID ) ); + $data = $api->pixCreateImmediateCharge( array(), $body ); + $response = true; + } catch ( GerencianetException $e ) { + $data = array( + 'code' => $e->getCode(), + 'error' => $e->error, + 'message' => $e->errorDescription, + ); + } catch ( Exception $e ) { + $data = array( 'message' => $e->getMessage() ); + } + return self::result_api( $data, $response ); + } + + public function generate_qrcode( $locationId ) { + $response = false; + $params = array( 'id' => $locationId ); + + try { + $api = new Gerencianet( $this->get_credentials( GERENCIANET_PIX_ID ) ); + $data = $api->pixGenerateQRCode( $params, array() ); + $response = true; + } catch ( GerencianetException $e ) { + $data = array( + 'code' => $e->getCode(), + 'error' => $e->error, + 'message' => $e->errorDescription, + ); + } catch ( Exception $e ) { + $data = array( 'message' => $e->getMessage() ); + } + return self::result_api( $data, $response ); + } + + public function update_webhook( $pix_key, $url ) { + $response = false; + $params = array( 'chave' => $pix_key ); + + try { + $api = new Gerencianet( $this->get_credentials( GERENCIANET_PIX_ID ) ); + $body = array( 'webhookUrl' => strval( $url ) ); + $data = $api->pixConfigWebhook( $params, $body ); + $response = true; + } catch ( GerencianetException $e ) { + $data = array( + 'code' => $e->getCode(), + 'error' => $e->error, + 'message' => $e->errorDescription, + ); + } catch ( Exception $e ) { + $data = array( 'message' => $e->getMessage() ); + } + + return self::result_api( $data, $response ); + } + + public function one_step_card( $order_id, $items, $shipping, $notification_url, $customer, $paymentToken, $installments, $billingAddress, $discount = false ) { + $body = array( + 'items' => $items, + 'metadata' => array( + 'custom_id' => strval( $order_id ), + 'notification_url' => $notification_url, + ), + 'payment' => array( + 'credit_card' => array( + 'customer' => $customer, + 'installments' => $installments, + 'billing_address' => $billingAddress, + 'payment_token' => $paymentToken, + ), + ), + ); + + if ( $discount ) { + $body['payment']['credit_card']['discount'] = $discount; + } + + if ( $shipping ) { + $body ['shippings'] = $shipping; + } + + try { + $api = new Gerencianet( $this->get_credentials( GERENCIANET_CARTAO_ID ) ); + $card_charge = $api->oneStep( array(), $body ); + return self::result_api( $card_charge, true ); + } catch ( GerencianetException $e ) { + $errorResponse = array( + 'code' => $e->getCode(), + 'error' => $e->error, + 'message' => $e->errorDescription, + ); + return self::result_api( $errorResponse, false ); + } catch ( Exception $e ) { + $errorResponse = array( + 'message' => $e->getMessage(), + ); + return self::result_api( $errorResponse, false ); + } + } + + public function getNotification( $paymentMethod, $notificationToken ) { + $params = array( + 'token' => $notificationToken, + ); + + try { + $api = new Gerencianet( $this->get_credentials( $paymentMethod ) ); + $notification = $api->getNotification( $params, array() ); + + return self::result_api( $notification, true ); + } catch ( GerencianetException $e ) { + $errorResponse = array( + 'message' => 'Error retrieving notification: ' . $notificationToken, + ); + return self::result_api( $errorResponse, false ); + } catch ( Exception $e ) { + $errorResponse = array( + 'message' => 'Error retrieving notification: ' . $notificationToken, + ); + return self::result_api( $errorResponse, false ); + } + } + + public function pix_refund( $order_id, $amount = null ) { + $order = new WC_Order( $order_id ); + + if ( ! $order ) { + gn_log( "Pedido #{$order_id} não encontrado" ); + return self::result_api( "Pedido #{$order_id} não encontrado", false ); + } + + $e2eid = get_post_meta( $order_id, '_gn_pix_E2EID', true ); + $txid = get_post_meta( $order_id, '_gn_pix_txid', true ); + + if ( isset( $e2eid ) && $e2eid != '' ) { + + if ( ! is_null( $amount ) ) { + $value = str_replace( ',', '.', $amount ); + } + + gn_log( "Iniciando reembolso de R$ {$value} do pedido {$order_id} | TXID: {$txid} | E2EID: {$e2eid}" ); + + $params = array( + 'e2eId' => $e2eid, + 'id' => $this->generateRandomId(), + ); + + $body = array( + 'valor' => $value, + ); + + try { + $api = new Gerencianet( $this->get_credentials( GERENCIANET_PIX_ID ) ); + $pix = $api->pixDevolution( $params, $body ); + $order->update_status( 'refund' ); + gn_log( 'Devolução concluída com sucesso!' ); + + return self::result_api( true, true ); + } catch ( Exception $e ) { + return self::result_api( false, false ); + } + } elseif ( isset( $txid ) ) { + gn_log( "Tentativa de reembolso sem e2eid pedido {$order_id} valor {$amount}" ); + return self::result_api( false, false ); + } else { + gn_log( 'Não foi encontrado E2EID ou TXID nesse pedido. Ele pode ter sido pago por outro meio de pagamento.' ); + return self::result_api( false, false ); + } + } + + public function result_api( $result, $success ) { + if ( $success ) { + return json_encode( $result ); + } else { + if ( isset( $result['code'] ) ) { + $messageShow = $this->getErrorMessage( intval( $result['code'] ) ); + } else { + if ( isset( $result['message'] ) ) { + $messageShow['message'] = $result['message']; + $messageShow['code'] = 0; + } else { + $messageShow = $this->getErrorMessage( 4699999 ); + } + } + + $errorResponse = array( + 'code' => $messageShow['code'], + 'message' => $messageShow['message'], + ); + gn_log( $errorResponse ); + throw new Exception( $errorResponse['message'], 1 ); + } + } + + public function generateRandomId() { + $length = 6; + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $charactersLength = strlen( $characters ); + $randomString = ''; + for ( $i = 0; $i < $length; $i++ ) { + $randomString .= $characters[ rand( 0, $charactersLength - 1 ) ]; + } + return $randomString; + } + + public function getErrorMessage( $error_code ) { + // $message = 'O campo ' . $this->getFieldName( $property ) . ' não está preenchido corretamente.'; + $message = array(); + try { + $messagesJson = file_get_contents( plugin_dir_path( __FILE__ ) . '/gerencianet/errors.json' ); + $messages = json_decode( $messagesJson, true ); + + $messageIndex = array_search( $error_code, array_column( $messages, 'code' ) ); + $message['message'] = $messages[ $messageIndex ]['message']; + $message['code'] = $messages[ $messageIndex ]['code']; + } catch ( \Throwable $th ) { + gn_log( $th ); + $message['message'] = __( 'Ocorreu um erro ao tentar realizar a sua requisição. Entre em contato com o proprietário da loja.', Gerencianet_I18n::getTextDomain() ); + $message['code'] = 0; + } + return $message; + } + + public function formatMoney( $value, $gnFormat ) { + $cleanString = preg_replace( '/([^0-9\.,])/i', '', $value ); + $onlyNumbersString = preg_replace( '/([^0-9])/i', '', $value ); + + $separatorsCountToBeErased = strlen( $cleanString ) - strlen( $onlyNumbersString ) - 1; + + $stringWithCommaOrDot = preg_replace( '/([,\.])/', '', $cleanString, $separatorsCountToBeErased ); + $removedThousendSeparator = preg_replace( '/(\.|,)(?=[0-9]{3,}$)/', '', $stringWithCommaOrDot ); + + if ( $gnFormat ) { + return (int) ( ( (float) str_replace( ',', '.', $removedThousendSeparator ) ) * 100 ); + } else { + return ( (float) str_replace( ',', '.', $removedThousendSeparator ) ); + } + } + + public static function formatCurrencyBRL( $value ) { + $formated = 'R$' . number_format( $value / 100, 2, ',', '.' ); + + return $formated; + } +} diff --git a/includes/lib/class-gerencianet-validate.php b/includes/lib/class-gerencianet-validate.php new file mode 100644 index 00000000..686c557b --- /dev/null +++ b/includes/lib/class-gerencianet-validate.php @@ -0,0 +1,69 @@ + 'benmarshall' ] ); +// Write an entry to the uploads/plugin.log file, deleting the existing entries. +// gn_log( 'Awesome sauce.', 'w' ); +// Append an entry to a different log file in the uploads directory. +// gn_log( 'Simple stuff.', 'a', 'simple-stuff' ); + + + +if ( ! function_exists( 'gn_log' ) ) { + function gn_log( $entry, $mode = 'a', $file = 'gerencianet' ) { + // Get WordPress WP-CONTENT directory. + $upload_dir = WP_CONTENT_DIR; + // If the entry is array, json_encode. + if ( is_array( $entry ) ) { + $entry = json_encode( $entry ); + } + // Write the log file. + $file = $upload_dir . '/' . $file . '.log'; + $file = fopen( $file, $mode ); + $bytes = fwrite( $file, "------------------- \n" ); + $bytes = fwrite( $file, current_time( 'mysql' ) . ' GerencianetLogger:: ' . $entry . "\n" ); + $bytes = fwrite( $file, "------------------- \n" ); + fclose( $file ); + return $bytes; + } +} diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/autoload.php b/includes/lib/gerencianet/autoload.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/autoload.php rename to includes/lib/gerencianet/autoload.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/composer/ClassLoader.php b/includes/lib/gerencianet/composer/ClassLoader.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/composer/ClassLoader.php rename to includes/lib/gerencianet/composer/ClassLoader.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/composer/LICENSE b/includes/lib/gerencianet/composer/LICENSE old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/composer/LICENSE rename to includes/lib/gerencianet/composer/LICENSE diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/composer/autoload_classmap.php b/includes/lib/gerencianet/composer/autoload_classmap.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/composer/autoload_classmap.php rename to includes/lib/gerencianet/composer/autoload_classmap.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/composer/autoload_files.php b/includes/lib/gerencianet/composer/autoload_files.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/composer/autoload_files.php rename to includes/lib/gerencianet/composer/autoload_files.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/composer/autoload_namespaces.php b/includes/lib/gerencianet/composer/autoload_namespaces.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/composer/autoload_namespaces.php rename to includes/lib/gerencianet/composer/autoload_namespaces.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/composer/autoload_psr4.php b/includes/lib/gerencianet/composer/autoload_psr4.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/composer/autoload_psr4.php rename to includes/lib/gerencianet/composer/autoload_psr4.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/composer/autoload_real.php b/includes/lib/gerencianet/composer/autoload_real.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/composer/autoload_real.php rename to includes/lib/gerencianet/composer/autoload_real.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/composer/autoload_static.php b/includes/lib/gerencianet/composer/autoload_static.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/composer/autoload_static.php rename to includes/lib/gerencianet/composer/autoload_static.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/composer/installed.json b/includes/lib/gerencianet/composer/installed.json old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/composer/installed.json rename to includes/lib/gerencianet/composer/installed.json diff --git a/includes/lib/gerencianet/errors.json b/includes/lib/gerencianet/errors.json new file mode 100644 index 00000000..380ef118 --- /dev/null +++ b/includes/lib/gerencianet/errors.json @@ -0,0 +1,506 @@ +[ + { + "code": "3500000", + "message": "Erro interno do servidor.", + "solve": "Esse erro acontece quando não é possivel receber a chamada de seu servidor para processamento", + "endpoints": "Em todos os endpoints" + }, + { + "code": "3500021", + "message": "O número de parcelas não pode ser superior a 1 para assinaturas.", + "solve": "Não é possivel dividir o valor da assinatura por já ser um valor recorrente", + "endpoints": [ + { + "method": "POST", + "route": "/v1/charge/:id/pay" + }, + { + "method": "POST", + "route": "/v1/charge/one-step" + } + ] + }, + { + "code": "3500032", + "message": "O plano não pode ser removido pois possui transações associadas.", + "solve": "É necessario remover transações associadas aquele plano primeiramente", + "endpoints": [ + { + "method": "DELETE", + "route": "/v1/plan/:id" + } + ] + }, + { + "code": "3500038", + "message": "Apenas transações com status [waiting] ou [unpaid] podem ser canceladas.", + "solve": "Nesse caso um exemplo seria tentar cancelar uma cobrança com status paga ou o inverso, tentar pagar uma cobrança com status cancelada ou seja status finais não podem ser atualizados", + "endpoints": [ + { + "method": "PUT", + "route": "/v1/charge/:id/billet" + }, + { + "method": "PUT", + "route": "/v1/carnet/:id/parcel/:parcel" + } + ] + }, + { + "code": "3500040", + "message": "Apenas assinaturas com status [new] ou [active] podem ser canceladas.", + "solve": "Verifique o status da assinatura que está tentando cancelar", + "endpoints": [ + { + "method": "PUT", + "route": "/v1/subscription/:id/cancel" + } + ] + }, + { + "code": "3500041", + "message": "A propriedade [repeats] deve ser maior ou igual a dois.", + "solve": "Verifique a propriedade repeats, pois caso pretente utilizar a propriedade com o valor igual a 1 é recomedado utilizar o titulo avulso (boleto)", + "endpoints": [ + { + "method": "POST", + "route": "/v1/carnet" + } + ] + }, + { + "code": "3500043", + "message": "Apenas transações com status [new],[link],[waiting] ou [unpaid] podem ser canceladas.", + "solve": "Verifique se o status da transação que está tentando cancelar não está em um status diferente dos mencionados", + "endpoints": [ + { + "method": "PUT", + "route": "/v1/charge/:id/cancel" + }, + { + "method": "PUT", + "route": "/v1/carnet/:id/parcel/:parcel/cancel" + } + ] + }, + { + "code": "3500050", + "message": "Erro interno. Por favor, entre em contato com o proprietário da loja.", + "solve": "Verifique o seu indetificador da conta está correto", + "endpoints": [ + { + "method": "GET", + "route": "/v1/installments" + } + ] + }, + { + "code": "3500052", + "message": "Erro interno. Por favor, entre em contato com o proprietário da loja.", + "solve": "A função de callback é obrigatória.", + "endpoints": [] + }, + { + "code": "3500053", + "message": "Total inválido. Por favor, entre em contato com o proprietário da loja.", + "solve": "O valor total deve ser passado em inteiro por exemplo total = 1040 isso é igual a R$10,40", + "endpoints": [] + }, + { + "code": "3500054", + "message": "O campo 'bandeira do cartão' é obrigatório.", + "solve": "A bandeira do cartão é obrigatório", + "endpoints": [] + }, + { + "code": "3500056", + "message": "O Bandeira do cartão inválida. As opções aceitas são: Visa, Mastercard, Amex, Elo ou Hipercard.", + "solve": "A bandeira informada não é aceita pela Gerencianet", + "endpoints": [] + }, + { + "code": "3500057", + "message": "O campo 'Número do cartão' é obrigatório.", + "solve": "O numero do cartão é obrigatório.", + "endpoints": [] + }, + { + "code": "3500058", + "message": "O campo 'Número do cartão' informado é inválido.", + "solve": "O numero do cartão informado é inválido", + "endpoints": [] + }, + { + "code": "3500059", + "message": "O campo cvv é obrigatório.", + "solve": "Verifique se está sendo informado cvv", + "endpoints": [] + }, + { + "code": "3500060", + "message": "O campo 'mês de expiração' é obrigatório.", + "solve": "", + "endpoints": [] + }, + { + "code": "3500061", + "message": "O campo 'ano de expiração' é obrigatório.", + "solve": "", + "endpoints": [] + }, + { + "code": "3500062", + "message": "O campo 'mês de expiração' informado é inválido.", + "solve": "", + "endpoints": [] + }, + { + "code": "3500070", + "message": "Apenas cobranças com status [waiting] que não foram pagas com cartão de crédito podem ser canceladas.", + "solve": "Cobranças definada com metódo de pagamento cartão de crédito ficam com o status waiting durante seu processamento por isso não podem ser atualizadas", + "endpoints": [ + { + "method": "PUT", + "route": "/v1/charge/:id/cancel" + } + ] + }, + { + "code": "3500072", + "message": "Não foi possível finalizar sua solicitação. Por favor, entre em contato com o proprietário da loja.", + "solve": "Verifique se existe algum bloqueio de emissão em sua conta ou caso esteja emitindo uma cobrança com o pagamento para cartão de credito verifique se o ramo de atividade ja foi cadastrado", + "endpoints": [ + { + "method": "PUT", + "route": "/v1/charge/:id/billet" + }, + { + "method": "PUT", + "route": "/v1/carnet/:id/parcel/:parcel" + }, + { + "method": "PUT", + "route": "/v1/plan/:id" + }, + { + "method": "POST", + "route": "/v1/charge" + }, + { + "method": "POST", + "route": "/v1/one-step" + }, + { + "method": "POST", + "route": "/v1/carnet" + }, + { + "method": "POST", + "route": "/v1/plan" + }, + { + "method": "POST", + "route": "/v1/plan/:id/subscription" + } + ] + }, + { + "code": "4600007", + "message": "Data de vencimento inválida. Por favor, entre em contato com o proprietário da loja.", + "solve": "A data do vencimento do boleto deve ser maior ou igual que a data atual.", + "endpoints": [ + { + "method": "PUT", + "route": "/v1/charge/:id/billet" + }, + { + "method": "POST", + "route": "/v1/charge/:id/pay" + }, + { + "method": "POST", + "route": "/v1/charge/:id/link" + }, + { + "method": "POST", + "route": "/v1/charge/one-step" + }, + { + "method": "POST", + "route": "/v1/carnet" + }, + { + "method": "POST", + "route": "/v1/subscription/:id/pay" + } + ] + }, + { + "code": "4600035", + "message": "Serviço indisponível. Por favor, entre em contato com o proprietário da loja.", + "solve": "Entre em contato com o suporte Gerencianet", + "endpoints": [ + { + "method": "POST", + "route": "/v1/charge/:id/pay" + }, + { + "method": "POST", + "route": "/v1/charge/one-step" + }, + { + "method": "POST", + "route": "/v1/subscription/:id/pay" + } + ] + }, + { + "code": "4600036", + "message": "O valor mínimo do para pagamentos em boleto é de R$5,00. Por favor, verifique seu carrinho e tente novamente.", + "solve": "Verifique o valor que está tentando emitir ele deve ser superior a R$5,00", + "endpoints": [ + { + "method": "GET", + "route": "/v1/installments" + } + ] + }, + { + "code": "4600037", + "message": "O valor de emissão excedido. Por favor, entre em contato com o proprietário da loja.", + "solve": "Entre em contato com o suporte Gerencianet", + "endpoints": [ + { + "method": "POST", + "route": "/v1/charge/:id/pay" + }, + { + "method": "POST", + "route": "/v1/charge/one-step" + }, + { + "method": "POST", + "route": "/v1/carnet" + }, + { + "method": "POST", + "route": "/v1/subscription/:id/pay" + } + ] + }, + { + "code": "4600060", + "message": "A data informada é inválida.", + "solve": "Verifique se a data não é inferior a data de hoje e está no formato yyyy-MM-dd", + "endpoints": [ + { + "method": "PUT", + "route": "/v1/charge/:id/billet" + }, + { + "method": "POST", + "route": "/v1/charge/:id/pay" + }, + { + "method": "POST", + "route": "/v1/charge/:id/link" + }, + { + "method": "POST", + "route": "/v1/charge/one-step" + }, + { + "method": "POST", + "route": "/v1/carnet" + }, + { + "method": "POST", + "route": "/v1/subscription/:id/pay" + } + ] + }, + { + "code": "4600100", + "message": "Não foi possível validar os dados enviados. Por favor, tente novamente mais tarde.", + "solve": "Não foi possivel realizar a operação no momento", + "endpoints": "Em todos os endpoints" + }, + { + "code": "4600142", + "message": "Transação não processada por conter incoerência nos dados cadastrais.", + "solve": "Verifique se o CPF informado está vinculado ao respectivo cliente", + "endpoints": [ + { + "method": "POST", + "route": "/v1/charge/:id/pay" + }, + { + "method": "POST", + "route": "/v1/charge/one-step" + }, + { + "method": "POST", + "route": "/v1/carnet" + }, + { + "method": "POST", + "route": "/v1/subscription/:id/pay" + } + ] + }, + { + "code": "4600209", + "message": "Limite de emissões diárias excedido. Por favor, entre em contato com o proprietário da loja.", + "solve": "Entre em contato com o suporte Gerencianet", + "endpoints": [ + { + "method": "POST", + "route": "/v1/charge/:id/pay" + }, + { + "method": "POST", + "route": "/v1/charge/one-step" + }, + { + "method": "POST", + "route": "/v1/carnet" + } + ] + }, + { + "code": "4600210", + "message": "Não é possível emitir três cobranças idênticas. Por favor, entre em contato com o proprietário da loja.", + "solve": "Alterar a descrição do cobrança inserindo um ponto final por exemplo ja resolveria ou ainda alterar a data de vencimento ou o valor", + "endpoints": [ + { + "method": "POST", + "route": "/v1/charge/:id/pay" + }, + { + "method": "POST", + "route": "/v1/charge/one-step" + }, + { + "method": "POST", + "route": "/v1/carnet" + }, + { + "method": "POST", + "route": "/v1/subscription/:id/pay" + } + ] + }, + { + "code": "4600211", + "message": "Limite de emissões mensais excedido. Por favor, entre em contato com o proprietário da loja.", + "solve": "Emissão para clientes diferentes utilizando o mesmo email ou telefone", + "endpoints": [ + { + "method": "POST", + "route": "/v1/charge/:id/pay" + }, + { + "method": "POST", + "route": "/v1/charge/one-step" + }, + { + "method": "POST", + "route": "/v1/carnet" + }, + { + "method": "POST", + "route": "/v1/subscription/:id/pay" + } + ] + }, + { + "code": "4600222", + "message": "Dados do cliente inválidos. Por favor, verifique os dados e tente novamente.", + "solve": "Verifique se está utilizando algum dado do titular da conta para emitir a cobrança", + "endpoints": [ + { + "method": "POST", + "route": "/v1/charge/:id/pay" + }, + { + "method": "POST", + "route": "/v1/charge/one-step" + }, + { + "method": "POST", + "route": "/v1/carnet" + }, + { + "method": "POST", + "route": "/v1/subscription/:id/pay" + } + ] + }, + { + "code": "4600224", + "message": "Falha na autorização. Por favor, entre em contato com o proprietário da loja.", + "solve": "Entre em contato com o suporte Gerencianet", + "endpoints": [ + { + "method": "POST", + "route": "/v1/charge/:id/pay" + }, + { + "method": "POST", + "route": "/v1/charge/one-step" + }, + { + "method": "POST", + "route": "/v1/subscription/:id/pay" + } + ] + }, + { + "code": "4600414", + "message": "Vencimento do boleto inválido. Entre em contato com o responsável da loja.", + "solve": "A data limite é em torno de 3 anos e 5 meses", + "endpoints": [ + { + "method": "POST", + "route": "/v1/carnet" + }, + { + "method": "POST", + "route": "/v1/charge/:id/pay" + }, + { + "method": "POST", + "route": "/v1/charge/one-step" + } + ] + }, + { + "code": "4600523", + "message": "O valor mínimo para o pedido é de: R$ 5,00.", + "solve": "Verifique se o valor total da cobranca menos o desconto é superior a R$5,00", + "endpoints": [ + { + "method": "POST", + "route": "/v1/charge/:id/pay" + }, + { + "method": "POST", + "route": "/v1/charge/one-step" + }, + { + "method": "POST", + "route": "/v1/carnet" + }, + { + "method": "POST", + "route": "/v1/subscription/:id/pay" + } + ] + }, + { + "code": "4699999", + "message": "Ocorreu um erro ao tentar realizar a sua requisição. Entre em contato com o proprietário da loja.", + "solve": "Entre em contato com o suporte Gerencianet", + "endpoints": "Em todos os endpoints" + } +] \ No newline at end of file diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/.codeclimate.yml b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/.codeclimate.yml old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/.codeclimate.yml rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/.codeclimate.yml diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/.gitignore b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/.gitignore old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/.gitignore rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/.gitignore diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/.travis.yml b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/.travis.yml old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/.travis.yml rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/.travis.yml diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/CHANGELOG.md b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/CHANGELOG.md old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/CHANGELOG.md rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/CHANGELOG.md diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/LICENSE b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/LICENSE old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/LICENSE rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/LICENSE diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/README.md b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/README.md old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/README.md rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/README.md diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/composer.json b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/composer.json old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/composer.json rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/composer.json diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/config.xml b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/config.xml old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/config.xml rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/config.xml diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/ApiRequest.php b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/ApiRequest.php similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/ApiRequest.php rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/ApiRequest.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Auth.php b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Auth.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Auth.php rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Auth.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Config.php b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Config.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Config.php rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Config.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Endpoints.php b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Endpoints.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Endpoints.php rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Endpoints.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Exception/AuthorizationException.php b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Exception/AuthorizationException.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Exception/AuthorizationException.php rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Exception/AuthorizationException.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Exception/GerencianetException.php b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Exception/GerencianetException.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Exception/GerencianetException.php rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Exception/GerencianetException.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Gerencianet.php b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Gerencianet.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Gerencianet.php rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Gerencianet.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Request.php b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Request.php similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Request.php rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Request.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Utils.php b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Utils.php similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Utils.php rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/Utils.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/config.json b/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/config.json old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/config.json rename to includes/lib/gerencianet/gerencianet/gerencianet-sdk-php/src/Gerencianet/config.json diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/CHANGELOG.md b/includes/lib/gerencianet/guzzlehttp/guzzle/CHANGELOG.md old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/CHANGELOG.md rename to includes/lib/gerencianet/guzzlehttp/guzzle/CHANGELOG.md diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/LICENSE b/includes/lib/gerencianet/guzzlehttp/guzzle/LICENSE old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/LICENSE rename to includes/lib/gerencianet/guzzlehttp/guzzle/LICENSE diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/README.md b/includes/lib/gerencianet/guzzlehttp/guzzle/README.md old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/README.md rename to includes/lib/gerencianet/guzzlehttp/guzzle/README.md diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/UPGRADING.md b/includes/lib/gerencianet/guzzlehttp/guzzle/UPGRADING.md old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/UPGRADING.md rename to includes/lib/gerencianet/guzzlehttp/guzzle/UPGRADING.md diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/composer.json b/includes/lib/gerencianet/guzzlehttp/guzzle/composer.json old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/composer.json rename to includes/lib/gerencianet/guzzlehttp/guzzle/composer.json diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Client.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Client.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Client.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Client.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/ClientInterface.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/ClientInterface.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/ClientInterface.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/ClientInterface.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/CookieJar.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/CookieJar.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/CookieJar.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/CookieJar.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/SetCookie.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/SetCookie.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/SetCookie.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Cookie/SetCookie.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/BadResponseException.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/BadResponseException.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/BadResponseException.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/BadResponseException.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/ClientException.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/ClientException.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/ClientException.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/ClientException.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/ConnectException.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/ConnectException.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/ConnectException.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/ConnectException.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/GuzzleException.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/GuzzleException.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/GuzzleException.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/GuzzleException.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/RequestException.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/RequestException.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/RequestException.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/RequestException.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/SeekException.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/SeekException.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/SeekException.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/SeekException.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/ServerException.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/ServerException.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/ServerException.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/ServerException.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/TransferException.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/TransferException.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/TransferException.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Exception/TransferException.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlFactory.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlFactory.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlFactory.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlFactory.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlHandler.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlHandler.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlHandler.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlHandler.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/EasyHandle.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/EasyHandle.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/EasyHandle.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/EasyHandle.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/MockHandler.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/MockHandler.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/MockHandler.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/MockHandler.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/Proxy.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/Proxy.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/Proxy.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/Proxy.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/StreamHandler.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/StreamHandler.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/StreamHandler.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Handler/StreamHandler.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/HandlerStack.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/HandlerStack.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/HandlerStack.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/HandlerStack.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/MessageFormatter.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/MessageFormatter.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/MessageFormatter.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/MessageFormatter.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Middleware.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Middleware.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Middleware.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Middleware.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Pool.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/Pool.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/Pool.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/Pool.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/RedirectMiddleware.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/RedirectMiddleware.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/RedirectMiddleware.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/RedirectMiddleware.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/RequestOptions.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/RequestOptions.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/RequestOptions.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/RequestOptions.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/RetryMiddleware.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/RetryMiddleware.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/RetryMiddleware.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/RetryMiddleware.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/TransferStats.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/TransferStats.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/TransferStats.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/TransferStats.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/UriTemplate.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/UriTemplate.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/UriTemplate.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/UriTemplate.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/functions.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/functions.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/functions.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/functions.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/functions_include.php b/includes/lib/gerencianet/guzzlehttp/guzzle/src/functions_include.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/guzzle/src/functions_include.php rename to includes/lib/gerencianet/guzzlehttp/guzzle/src/functions_include.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/CHANGELOG.md b/includes/lib/gerencianet/guzzlehttp/promises/CHANGELOG.md old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/CHANGELOG.md rename to includes/lib/gerencianet/guzzlehttp/promises/CHANGELOG.md diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/LICENSE b/includes/lib/gerencianet/guzzlehttp/promises/LICENSE old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/LICENSE rename to includes/lib/gerencianet/guzzlehttp/promises/LICENSE diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/Makefile b/includes/lib/gerencianet/guzzlehttp/promises/Makefile old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/Makefile rename to includes/lib/gerencianet/guzzlehttp/promises/Makefile diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/README.md b/includes/lib/gerencianet/guzzlehttp/promises/README.md old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/README.md rename to includes/lib/gerencianet/guzzlehttp/promises/README.md diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/composer.json b/includes/lib/gerencianet/guzzlehttp/promises/composer.json old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/composer.json rename to includes/lib/gerencianet/guzzlehttp/promises/composer.json diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/AggregateException.php b/includes/lib/gerencianet/guzzlehttp/promises/src/AggregateException.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/AggregateException.php rename to includes/lib/gerencianet/guzzlehttp/promises/src/AggregateException.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/CancellationException.php b/includes/lib/gerencianet/guzzlehttp/promises/src/CancellationException.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/CancellationException.php rename to includes/lib/gerencianet/guzzlehttp/promises/src/CancellationException.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/Coroutine.php b/includes/lib/gerencianet/guzzlehttp/promises/src/Coroutine.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/Coroutine.php rename to includes/lib/gerencianet/guzzlehttp/promises/src/Coroutine.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/EachPromise.php b/includes/lib/gerencianet/guzzlehttp/promises/src/EachPromise.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/EachPromise.php rename to includes/lib/gerencianet/guzzlehttp/promises/src/EachPromise.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/FulfilledPromise.php b/includes/lib/gerencianet/guzzlehttp/promises/src/FulfilledPromise.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/FulfilledPromise.php rename to includes/lib/gerencianet/guzzlehttp/promises/src/FulfilledPromise.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/Promise.php b/includes/lib/gerencianet/guzzlehttp/promises/src/Promise.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/Promise.php rename to includes/lib/gerencianet/guzzlehttp/promises/src/Promise.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/PromiseInterface.php b/includes/lib/gerencianet/guzzlehttp/promises/src/PromiseInterface.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/PromiseInterface.php rename to includes/lib/gerencianet/guzzlehttp/promises/src/PromiseInterface.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/PromisorInterface.php b/includes/lib/gerencianet/guzzlehttp/promises/src/PromisorInterface.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/PromisorInterface.php rename to includes/lib/gerencianet/guzzlehttp/promises/src/PromisorInterface.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/RejectedPromise.php b/includes/lib/gerencianet/guzzlehttp/promises/src/RejectedPromise.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/RejectedPromise.php rename to includes/lib/gerencianet/guzzlehttp/promises/src/RejectedPromise.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/RejectionException.php b/includes/lib/gerencianet/guzzlehttp/promises/src/RejectionException.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/RejectionException.php rename to includes/lib/gerencianet/guzzlehttp/promises/src/RejectionException.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/TaskQueue.php b/includes/lib/gerencianet/guzzlehttp/promises/src/TaskQueue.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/TaskQueue.php rename to includes/lib/gerencianet/guzzlehttp/promises/src/TaskQueue.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/TaskQueueInterface.php b/includes/lib/gerencianet/guzzlehttp/promises/src/TaskQueueInterface.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/TaskQueueInterface.php rename to includes/lib/gerencianet/guzzlehttp/promises/src/TaskQueueInterface.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/functions.php b/includes/lib/gerencianet/guzzlehttp/promises/src/functions.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/functions.php rename to includes/lib/gerencianet/guzzlehttp/promises/src/functions.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/functions_include.php b/includes/lib/gerencianet/guzzlehttp/promises/src/functions_include.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/promises/src/functions_include.php rename to includes/lib/gerencianet/guzzlehttp/promises/src/functions_include.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/CHANGELOG.md b/includes/lib/gerencianet/guzzlehttp/psr7/CHANGELOG.md old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/CHANGELOG.md rename to includes/lib/gerencianet/guzzlehttp/psr7/CHANGELOG.md diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/LICENSE b/includes/lib/gerencianet/guzzlehttp/psr7/LICENSE old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/LICENSE rename to includes/lib/gerencianet/guzzlehttp/psr7/LICENSE diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/README.md b/includes/lib/gerencianet/guzzlehttp/psr7/README.md old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/README.md rename to includes/lib/gerencianet/guzzlehttp/psr7/README.md diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/composer.json b/includes/lib/gerencianet/guzzlehttp/psr7/composer.json old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/composer.json rename to includes/lib/gerencianet/guzzlehttp/psr7/composer.json diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/AppendStream.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/AppendStream.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/AppendStream.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/AppendStream.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/BufferStream.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/BufferStream.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/BufferStream.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/BufferStream.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/CachingStream.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/CachingStream.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/CachingStream.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/CachingStream.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/DroppingStream.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/DroppingStream.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/DroppingStream.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/DroppingStream.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/FnStream.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/FnStream.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/FnStream.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/FnStream.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/InflateStream.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/InflateStream.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/InflateStream.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/InflateStream.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/LazyOpenStream.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/LazyOpenStream.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/LazyOpenStream.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/LazyOpenStream.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/LimitStream.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/LimitStream.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/LimitStream.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/LimitStream.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/MessageTrait.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/MessageTrait.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/MessageTrait.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/MessageTrait.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/MultipartStream.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/MultipartStream.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/MultipartStream.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/MultipartStream.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/NoSeekStream.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/NoSeekStream.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/NoSeekStream.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/NoSeekStream.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/PumpStream.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/PumpStream.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/PumpStream.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/PumpStream.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/Request.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/Request.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/Request.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/Request.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/Response.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/Response.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/Response.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/Response.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/ServerRequest.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/ServerRequest.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/ServerRequest.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/ServerRequest.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/Stream.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/Stream.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/Stream.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/Stream.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/StreamDecoratorTrait.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/StreamDecoratorTrait.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/StreamDecoratorTrait.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/StreamDecoratorTrait.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/StreamWrapper.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/StreamWrapper.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/StreamWrapper.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/StreamWrapper.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/UploadedFile.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/UploadedFile.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/UploadedFile.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/UploadedFile.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/Uri.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/Uri.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/Uri.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/Uri.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/UriNormalizer.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/UriNormalizer.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/UriNormalizer.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/UriNormalizer.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/UriResolver.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/UriResolver.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/UriResolver.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/UriResolver.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/functions.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/functions.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/functions.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/functions.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/functions_include.php b/includes/lib/gerencianet/guzzlehttp/psr7/src/functions_include.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/guzzlehttp/psr7/src/functions_include.php rename to includes/lib/gerencianet/guzzlehttp/psr7/src/functions_include.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/CHANGELOG.md b/includes/lib/gerencianet/psr/http-message/CHANGELOG.md old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/CHANGELOG.md rename to includes/lib/gerencianet/psr/http-message/CHANGELOG.md diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/LICENSE b/includes/lib/gerencianet/psr/http-message/LICENSE old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/LICENSE rename to includes/lib/gerencianet/psr/http-message/LICENSE diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/README.md b/includes/lib/gerencianet/psr/http-message/README.md old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/README.md rename to includes/lib/gerencianet/psr/http-message/README.md diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/composer.json b/includes/lib/gerencianet/psr/http-message/composer.json old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/composer.json rename to includes/lib/gerencianet/psr/http-message/composer.json diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/src/MessageInterface.php b/includes/lib/gerencianet/psr/http-message/src/MessageInterface.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/src/MessageInterface.php rename to includes/lib/gerencianet/psr/http-message/src/MessageInterface.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/src/RequestInterface.php b/includes/lib/gerencianet/psr/http-message/src/RequestInterface.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/src/RequestInterface.php rename to includes/lib/gerencianet/psr/http-message/src/RequestInterface.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/src/ResponseInterface.php b/includes/lib/gerencianet/psr/http-message/src/ResponseInterface.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/src/ResponseInterface.php rename to includes/lib/gerencianet/psr/http-message/src/ResponseInterface.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/src/ServerRequestInterface.php b/includes/lib/gerencianet/psr/http-message/src/ServerRequestInterface.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/src/ServerRequestInterface.php rename to includes/lib/gerencianet/psr/http-message/src/ServerRequestInterface.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/src/StreamInterface.php b/includes/lib/gerencianet/psr/http-message/src/StreamInterface.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/src/StreamInterface.php rename to includes/lib/gerencianet/psr/http-message/src/StreamInterface.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/src/UploadedFileInterface.php b/includes/lib/gerencianet/psr/http-message/src/UploadedFileInterface.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/src/UploadedFileInterface.php rename to includes/lib/gerencianet/psr/http-message/src/UploadedFileInterface.php diff --git a/manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/src/UriInterface.php b/includes/lib/gerencianet/psr/http-message/src/UriInterface.php old mode 100755 new mode 100644 similarity index 100% rename from manual/woo-gerencianet-official/includes/lib/gerencianet/psr/http-message/src/UriInterface.php rename to includes/lib/gerencianet/psr/http-message/src/UriInterface.php diff --git a/includes/payment-methods/class-wc-gerencianet-boleto.php b/includes/payment-methods/class-wc-gerencianet-boleto.php new file mode 100644 index 00000000..00de7873 --- /dev/null +++ b/includes/payment-methods/class-wc-gerencianet-boleto.php @@ -0,0 +1,491 @@ +id = GERENCIANET_BOLETO_ID; // payment gateway plugin ID + $this->has_fields = true; // custom form + $this->method_title = __( 'Gerencianet - Boletos', Gerencianet_I18n::getTextDomain() ); + $this->method_description = __( 'Com a Gerencianet você pode receber pagamentos via Boleto', Gerencianet_I18n::getTextDomain() ); + + $this->supports = array( + 'products', + ); + + $this->init_form_fields(); + + $this->gerencianetSDK = new Gerencianet_Integration(); + + $discountText = ''; + + if ( $this->get_option( 'gn_billet_discount' ) != '' && $this->get_option( 'gn_billet_discount' ) != '0%' && $this->get_option( 'gn_billet_discount' ) != null ) { + $discountText = ' - ' . esc_html( $this->get_option( 'gn_billet_discount' ) ) . ' de Desconto'; + } + + // Load the settings. + $this->init_settings(); + $this->title = __( 'Boleto', Gerencianet_I18n::getTextDomain() ) . $discountText; + $this->description = __( 'Pagando por Boleto, seu pagamento será confirmado em até dois dias úteis.', Gerencianet_I18n::getTextDomain() ); + $this->enabled = sanitize_text_field( $this->get_option( 'gn_billet_banking' ) ); + $this->gn_billet_unpaid = sanitize_text_field( $this->get_option( 'gn_billet_unpaid' ) ); + $this->gn_billet_discount = sanitize_text_field( $this->get_option( 'gn_billet_discount' ) ); + $this->gn_billet_discount_shipping = sanitize_text_field( $this->get_option( 'gn_billet_discount_shipping' ) ); + $this->gn_billet_number_days = sanitize_text_field( $this->get_option( 'gn_billet_number_days' ) ); + $this->gn_client_id_production = sanitize_text_field( $this->get_option( 'gn_client_id_production' ) ); + $this->gn_client_secret_production = sanitize_text_field( $this->get_option( 'gn_client_secret_production' ) ); + $this->gn_client_id_homologation = sanitize_text_field( $this->get_option( 'gn_client_id_homologation' ) ); + $this->gn_client_secret_homologation = sanitize_text_field( $this->get_option( 'gn_client_secret_homologation' ) ); + $this->gn_sandbox = sanitize_text_field( $this->get_option( 'gn_sandbox' ) ); + + // // This action hook saves the settings + add_action( 'woocommerce_update_options_payment_gateways_' . GERENCIANET_BOLETO_ID, array( $this, 'process_admin_options' ) ); + + // This hook add the "view payment Methods" button + add_action( 'woocommerce_admin_order_data_after_billing_address', array( $this, 'add_view_payment_methods' ) ); + wp_enqueue_script( 'gn_sweetalert', GERENCIANET_OFICIAL_PLUGIN_URL . 'assets/js/sweetalert.js', array( 'jquery' ), GERENCIANET_OFICIAL_VERSION, false ); + add_action( 'woocommerce_api_' . strtolower( GERENCIANET_BOLETO_ID ), array( $this, 'webhook' ) ); + + } + + public function init_form_fields() { + + $this->form_fields = array( + 'gn_api_section' => array( + 'title' => __( 'Credenciais Gerencianet', Gerencianet_I18n::getTextDomain() ), + 'type' => 'title', + 'description' => __( "
    Clique aqui para obter seu Client_id e Client_secret! ", Gerencianet_I18n::getTextDomain() ), + ), + 'gn_client_id_production' => array( + 'title' => __( 'Client_id Produção', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Por favor, insira seu Client_id. Isso é necessário para receber o pagamento.', Gerencianet_I18n::getTextDomain() ), + 'desc_tip' => true, + 'default' => '', + ), + 'gn_client_secret_production' => array( + 'title' => __( 'Client_secret Produção', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Por favor, insira seu Client_secret. Isso é necessário para receber o pagamento.', Gerencianet_I18n::getTextDomain() ), + 'desc_tip' => true, + 'default' => '', + ), + 'gn_client_id_homologation' => array( + 'title' => __( 'Client_id Homologação', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Por favor, insira seu Client_id de Homologação. Isso é necessário para testar os pagamentos.', Gerencianet_I18n::getTextDomain() ), + 'desc_tip' => true, + 'default' => '', + ), + 'gn_client_secret_homologation' => array( + 'title' => __( 'Client_secret Homologação', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Por favor, insira seu Client_secret de Homologação. Isso é necessário para testar os pagamentos.', Gerencianet_I18n::getTextDomain() ), + 'desc_tip' => true, + 'default' => '', + ), + 'gn_sandbox_section' => array( + 'title' => __( 'Ambiente Sandbox', Gerencianet_I18n::getTextDomain() ), + 'type' => 'title', + 'description' => 'Habilite para usar o ambiente de testes da Gerencianet. Nenhuma cobrança emitida nesse modo poderá ser paga.', + ), + 'gn_sandbox' => array( + 'title' => __( 'Sandbox', Gerencianet_I18n::getTextDomain() ), + 'type' => 'checkbox', + 'label' => __( 'Habilitar o ambiente sandbox', Gerencianet_I18n::getTextDomain() ), + 'default' => 'no', + ), + 'gn_billet_section' => array( + 'title' => __( 'Configurações de recebimento', Gerencianet_I18n::getTextDomain() ), + 'type' => 'title', + ), + 'gn_billet_banking' => array( + 'title' => __( 'Boleto', Gerencianet_I18n::getTextDomain() ), + 'type' => 'checkbox', + 'label' => __( 'Habilitar Boleto', Gerencianet_I18n::getTextDomain() ), + 'default' => 'no', + ), + 'gn_billet_unpaid' => array( + 'title' => __( 'Cancelar Boletos inadimplentes?', Gerencianet_I18n::getTextDomain() ), + 'type' => 'checkbox', + 'label' => __( 'Habilitar o cancelamento de Boletos não pagos', Gerencianet_I18n::getTextDomain() ), + 'description' => __( 'Quando ativado, cancela todos os Boletos que não foram pagos. Evitando que o cliente pague o Boleto após o vencimento.', Gerencianet_I18n::getTextDomain() ), + 'default' => 'no', + ), + 'gn_billet_discount' => array( + 'title' => __( 'Desconto no Boleto', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Desconto para pagamento com Boleto. (Opcional)', Gerencianet_I18n::getTextDomain() ), + 'desc_tip' => true, + 'placeholder' => '0%', + 'default' => '0%', + ), + 'gn_billet_discount_shipping' => array( + 'title' => __( 'Aplicar desconto do Boleto', Gerencianet_I18n::getTextDomain() ), + 'type' => 'select', + 'description' => __( 'Escolha a modalidade de desconto.', Gerencianet_I18n::getTextDomain() ), + 'default' => 'total', + 'options' => array( + 'total' => __( 'Aplicar desconto no valor total com Frete', Gerencianet_I18n::getTextDomain() ), + 'products' => __( 'Aplicar desconto apenas no preço dos produtos', Gerencianet_I18n::getTextDomain() ), + ), + ), + 'gn_billet_number_days' => array( + 'title' => __( 'Vencimento do Boleto', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Dias para expirar o Boleto depois de emitido.', Gerencianet_I18n::getTextDomain() ), + 'desc_tip' => true, + 'placeholder' => '5', + 'default' => '5', + ), + ); + } + + public function payment_fields() { + if ( $this->description ) { + echo wpautop( wp_kses_post( $this->description ) ); + } + + $is_sandbox = $this->get_option( 'gn_sandbox' ) == 'yes' ? true : false; + if ( $is_sandbox ) { + $sandboxWarn = '
    +
    ' . __( 'O modo Sandbox está ativo. As cobranças emitidas não serão válidas.', Gerencianet_I18n::getTextDomain() ) . '
    +
    '; + echo wpautop( wp_kses_post( $sandboxWarn ) ); + } + + echo '
    '; + + ?> +
    + + +
    +
    + get_items( $types ) as $item_id => $item ) { + + switch ( $item->get_type() ) { + case 'fee': + $newFee = array( + 'name' => __( 'Taxas', Gerencianet_I18n::getTextDomain() ), + 'amount' => 1, + 'value' => $item->get_subtotal() * 100, + ); + $orderTotal += $item->get_subtotal() * 100; + $items[] = $newFee; + break; + case 'shipping': + if ( $item->get_total() > 0 ) { + $shipping[] = array( + 'name' => __( 'Frete', Gerencianet_I18n::getTextDomain() ), + 'value' => $item->get_total() * 100, + ); + } + break; + case 'coupon': + $newDiscount = array( + 'type' => 'currency', + 'value' => $item->get_total() * 100, + ); + $discount = $newDiscount; + break; + default: + $product = $item->get_product(); + $newItem = array( + 'name' => $item->get_name(), + 'amount' => $item->get_quantity(), + 'value' => $product->get_price() * 100, + ); + $orderTotal += $product->get_price() * 100 * $item->get_quantity(); + $items[] = $newItem; + break; + } + } + + if($order->get_total_tax()>0){ + $newItem = array( + 'name' => 'Taxas', + 'amount' => 1, + 'value' => $order->get_total_tax() * 100, + ); + array_push($items, $newItem); + } + + $cpf_cnpj = preg_replace( '/[^0-9]/', '', sanitize_text_field( $_POST['gn_boleto_cpf_cnpj'] ) ); + if ( Gerencianet_Validate::cpf( $cpf_cnpj ) ) { + $customer = array( + 'name' => $order->get_formatted_billing_full_name(), + 'cpf' => $cpf_cnpj, + ); + } elseif ( Gerencianet_Validate::cnpj( $cpf_cnpj ) ) { + $customer = array( + 'juridical_person' => array( + 'corporate_name' => $order->get_billing_company() != '' ? $order->get_billing_company() : $order->get_formatted_billing_full_name(), + 'cnpj' => $cpf_cnpj, + ), + ); + } else { + wc_add_notice( __( 'Verifique seu CPF/CNPJ e tente emitir novamente!', Gerencianet_I18n::getTextDomain() ), 'error' ); + return; + } + + if ( $this->get_option( 'gn_billet_discount' ) != '' && $this->get_option( 'gn_billet_discount' ) != '0' ) { + + if ( ! isset( $discount['value'] ) ) { + $discount = array( + 'type' => 'currency', + 'value' => 0, + ); + } + + if ( $this->get_option( 'gn_billet_discount_shipping' ) == 'total' ) { + if ( isset( $shipping['value'] ) ) { + $discount['value'] += ( ( $orderTotal + $shipping['value'] ) * ( intval( $this->get_option( 'gn_billet_discount' ) ) / 100 ) ); + } else { + $discount['value'] += ( ( $orderTotal ) * ( intval( $this->get_option( 'gn_billet_discount' ) ) / 100 ) ); + } + } else { + $discount['value'] += ( $orderTotal * ( intval( $this->get_option( 'gn_billet_discount' ) ) / 100 ) ); + } + $order_item_id = wc_add_order_item( + $order_id, + array( + 'order_item_name' => $this->get_option( 'gn_billet_discount' ) . __( '% desconto no boleto' ), + 'order_item_type' => 'fee', + ) + ); + if ( $order_item_id ) { + wc_add_order_item_meta( $order_item_id, '_fee_amount', -$discount['value'] / 100, true ); + wc_add_order_item_meta( $order_item_id, '_line_total', -$discount['value'] / 100, true ); + $order->set_total( $order->get_total() - ( $discount['value'] / 100 ) ); + $order->save(); + + } + } + + if ( $this->get_option( 'gn_billet_number_days' ) != '' && $this->get_option( 'gn_billet_number_days' ) != '0' ) { + $today = date( 'Y-m-d' ); + $numberDays = $this->get_option( 'gn_billet_number_days' ); + $expirationDate = date( 'Y-m-d', strtotime( '+' . $numberDays . ' days', strtotime( $today ) ) ); + } + + try { + $response = $this->gerencianetSDK->one_step_billet( $order_id, $items, $shipping, strtolower( $woocommerce->api_request_url( GERENCIANET_BOLETO_ID ) ), $customer, $discount, $expirationDate ); + $charge = json_decode( $response, true ); + + if ( isset( $charge['data']['barcode'] ) ) { + update_post_meta( $order_id, '_gn_barcode', $charge['data']['barcode'] ); + } + if ( isset( $charge['data']['pix'] ) ) { + update_post_meta( $order_id, '_gn_pix_qrcode', $charge['data']['pix']['qrcode_image'] ); + update_post_meta( $order_id, '_gn_pix_copy', $charge['data']['pix']['qrcode'] ); + } + if ( isset( $charge['data']['link'] ) ) { + update_post_meta( $order_id, '_gn_link_responsive', $charge['data']['link'] ); + update_post_meta( $order_id, '_gn_link_pdf', $charge['data']['pdf']['charge'] ); + } + + $order->update_status( 'pending-payment' ); + wc_reduce_stock_levels( $order_id ); + $woocommerce->cart->empty_cart(); + + return array( + 'result' => 'success', + 'redirect' => $this->get_return_url( $order ), + ); + + } catch ( Exception $e ) { + wc_add_notice( $e->getMessage(), 'error' ); + return; + } + } + + public function webhook() { + $post_notification = sanitize_text_field( $_POST['notification'] ); + if ( isset( $post_notification ) && ! empty( $post_notification ) ) { + header( 'HTTP/1.0 200 OK' ); + + $notification = json_decode( $this->gerencianetSDK->getNotification( GERENCIANET_BOLETO_ID, $post_notification ) ); + if ( $notification->code == 200 ) { + + foreach ( $notification->data as $notification_data ) { + $orderIdFromNotification = sanitize_text_field( $notification_data->custom_id ); + $orderStatusFromNotification = sanitize_text_field( $notification_data->status->current ); + $gerencianetChargeId = sanitize_text_field( $notification_data->identifiers->charge_id ); + } + + $order = wc_get_order( $orderIdFromNotification ); + + switch ( $orderStatusFromNotification ) { + case 'paid': + $order->update_status( 'processing' ); + $order->payment_complete(); + break; + case 'unpaid': + $order->update_status( 'failed' ); + + if ( $this->get_option( 'billet_unpaid' ) == 'yes' ) { + $this->gerencianetSDK->cancel_charge( $gerencianetChargeId ); + } + + break; + case 'refunded': + $order->update_status( 'refund' ); + break; + case 'contested': + $order->update_status( 'failed' ); + break; + case 'canceled': + $order->update_status( 'cancelled' ); + break; + default: + // no action + break; + } + } else { + error_log( 'gerencianet-oficial', 'GERENCIANET :: notification Request : FAIL ' ); + } + + exit(); + + } else { + wp_die( __( 'Request Failure', Gerencianet_I18n::getTextDomain() ) ); + } + } + + public static function getMethodId() { + return self::$id; + } + + public function add_view_payment_methods( $order ) { + if ( $order->get_payment_method() != $this->id ) { + return; + } + ?> + + + + + + + id = GERENCIANET_CARTAO_ID; // payment gateway plugin ID + $this->has_fields = true; // custom form + $this->method_title = __( 'Gerencianet - Cartão de Crédito', Gerencianet_I18n::getTextDomain() ); + $this->method_description = __( 'Com a Gerencianet você pode receber pagamentos via Cartão de Crédito', Gerencianet_I18n::getTextDomain() ); + + $this->supports = array( + 'products', + ); + + $this->init_form_fields(); + + $this->gerencianetSDK = new Gerencianet_Integration(); + + // Load the settings. + $this->init_settings(); + $this->title = __( 'Cartão de Crédito', Gerencianet_I18n::getTextDomain() ); + $this->description = __( 'Pagando com Cartão de Crédito, seu pagamento será confirmado em até um dia útil.', Gerencianet_I18n::getTextDomain() ); + $this->enabled = sanitize_text_field( $this->get_option( 'gn_credit_card' ) ); + $this->gn_payee_code = sanitize_text_field( $this->get_option( 'gn_payee_code' ) ); + $this->gn_client_id_production = sanitize_text_field( $this->get_option( 'gn_client_id_production' ) ); + $this->gn_client_secret_production = sanitize_text_field( $this->get_option( 'gn_client_secret_production' ) ); + $this->gn_client_id_homologation = sanitize_text_field( $this->get_option( 'gn_client_id_homologation' ) ); + $this->gn_client_secret_homologation = sanitize_text_field( $this->get_option( 'gn_client_secret_homologation' ) ); + $this->gn_sandbox = sanitize_text_field( $this->get_option( 'gn_sandbox' ) ); + + // // This action hook saves the settings + add_action( 'woocommerce_update_options_payment_gateways_' . GERENCIANET_CARTAO_ID, array( $this, 'process_admin_options' ) ); + add_action( 'woocommerce_api_' . strtolower( GERENCIANET_CARTAO_ID ), array( $this, 'webhook' ) ); + // This Hook add the payment token script on checkout + add_action( 'wp_enqueue_scripts', array( $this, 'payment_scripts' ) ); + } + + public function init_form_fields() { + + $this->form_fields = array( + 'gn_api_section' => array( + 'title' => __( 'Credenciais Gerencianet', Gerencianet_I18n::getTextDomain() ), + 'type' => 'title', + 'description' => __( "Clique aqui para obter seu Client_id e Client_secret! ", Gerencianet_I18n::getTextDomain() ), + ), + 'gn_client_id_production' => array( + 'title' => __( 'Client_id Produção', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Por favor, insira seu Client_id. Isso é necessário para receber o pagamento.', Gerencianet_I18n::getTextDomain() ), + 'desc_tip' => true, + 'default' => '', + ), + 'gn_client_secret_production' => array( + 'title' => __( 'Client_secret Produção', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Por favor, insira seu Client_secret. Isso é necessário para receber o pagamento.', Gerencianet_I18n::getTextDomain() ), + 'desc_tip' => true, + 'default' => '', + ), + 'gn_client_id_homologation' => array( + 'title' => __( 'Client_id Homologação', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Por favor, insira seu Client_id de Homologação. Isso é necessário para testar os pagamentos.', Gerencianet_I18n::getTextDomain() ), + 'desc_tip' => true, + 'default' => '', + ), + 'gn_client_secret_homologation' => array( + 'title' => __( 'Client_secret Homologação', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Por favor, insira seu Client_secret de Homologação. Isso é necessário para testar os pagamentos.', Gerencianet_I18n::getTextDomain() ), + 'desc_tip' => true, + 'default' => '', + ), + 'gn_sandbox_section' => array( + 'title' => __( 'Ambiente Sandbox', Gerencianet_I18n::getTextDomain() ), + 'type' => 'title', + 'description' => 'Habilite para usar o ambiente de testes da Gerencianet. Nenhuma cobrança emitida nesse modo poderá ser paga.', + ), + 'gn_sandbox' => array( + 'title' => __( 'Sandbox', Gerencianet_I18n::getTextDomain() ), + 'type' => 'checkbox', + 'label' => __( 'Habilitar o ambiente sandbox', Gerencianet_I18n::getTextDomain() ), + 'default' => 'no', + ), + 'gn_one_payment_section' => array( + 'title' => __( 'Configurações de recebimento', Gerencianet_I18n::getTextDomain() ), + 'type' => 'title', + ), + 'gn_credit_card' => array( + 'title' => __( 'Cartão de Crédito', Gerencianet_I18n::getTextDomain() ), + 'type' => 'checkbox', + 'label' => __( 'Habilitar Cartão de Crédito', Gerencianet_I18n::getTextDomain() ), + 'default' => 'no', + ), + 'gn_payee_code' => array( + 'title' => __( 'Identificador de Conta', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Por favor, insira seu identificador de conta. Isso é necessário para receber os pagamentos.', Gerencianet_I18n::getTextDomain() ), + 'desc_tip' => true, + 'default' => '', + ), + ); + } + + public function payment_fields() { + + if ( $this->description ) { + echo wpautop( wp_kses_post( $this->description ) ); + } + + $is_sandbox = $this->get_option( 'gn_sandbox' ) == 'yes' ? true : false; + if ( $is_sandbox ) { + $sandboxWarn = '
    +
    ' . __( 'O modo Sandbox está ativo. As cobranças emitidas não serão válidas.', Gerencianet_I18n::getTextDomain() ) . '
    +
    '; + echo wpautop( wp_kses_post( $sandboxWarn ) ); + } + + echo '
    '; + + ?> +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + +
    + +
    + enabled != 'yes' ) { + return; + } + + if ( $this->get_option( 'gn_sandbox' ) == 'yes' ) { + echo html_entity_decode( "" ); + } else { + echo html_entity_decode( "" ); + } + wp_enqueue_script( 'gn-sweetalert', plugins_url( '../assets/js/sweetalert.js', plugin_dir_path( __FILE__ ) ), '11.0.0', true ); + wp_enqueue_script( 'gn-payment-token', plugins_url( '../assets/js/gn-payment-token.js', plugin_dir_path( __FILE__ ) ), '1.0.0', true ); + + } + + public function validate_fields() { + + if ( empty( sanitize_text_field( $_POST['gn_cartao_cpf_cnpj'] ) ) ) { + wc_add_notice( __( 'O CPF é obrigatório', Gerencianet_I18n::getTextDomain() ), 'error' ); + return false; + } else { + $cpf_cnpj = preg_replace( '/[^0-9]/', '', sanitize_text_field( $_POST['gn_cartao_cpf_cnpj'] ) ); + if ( strlen( $cpf_cnpj ) == 11 ) { + // cpf + return Gerencianet_Validate::cpf( $cpf_cnpj ); + } else { + // cnpj + return Gerencianet_Validate::cnpj( $cpf_cnpj ); + } + } + return true; + } + + public function process_payment( $order_id ) { + + global $woocommerce; + + $order = wc_get_order( $order_id ); + + $types = array( 'line_item', 'fee', 'shipping', 'coupon' ); + $items = array(); + $shipping = array(); + $discount = false; + // get the Items + foreach ( $order->get_items( $types ) as $item_id => $item ) { + + switch ( $item->get_type() ) { + case 'fee': + $newFee = array( + 'name' => __( 'Taxas', Gerencianet_I18n::getTextDomain() ), + 'amount' => 1, + 'value' => $item->get_subtotal() * 100, + ); + $orderTotal += $item->get_subtotal() * 100; + $items[] = $newFee; + break; + case 'shipping': + if ( $item->get_total() > 0 ) { + $shipping[] = array( + 'name' => __( 'Frete', Gerencianet_I18n::getTextDomain() ), + 'value' => $item->get_total() * 100, + ); + } + break; + case 'coupon': + $newDiscount = array( + 'type' => 'currency', + 'value' => $item->get_total() * 100, + ); + $discount = $newDiscount; + break; + default: + $product = $item->get_product(); + $newItem = array( + 'name' => $item->get_name(), + 'amount' => $item->get_quantity(), + 'value' => $product->get_price() * 100, + ); + $orderTotal += $product->get_price() * 100 * $item->get_quantity(); + $items[] = $newItem; + break; + } + } + + if($order->get_total_tax()>0){ + $newItem = array( + 'name' => 'Taxas', + 'amount' => 1, + 'value' => $order->get_total_tax() * 100, + ); + array_push($items, $newItem); + } + + $cpf_cnpj = preg_replace( '/[^0-9]/', '', sanitize_text_field( $_POST['gn_cartao_cpf_cnpj'] ) ); + if ( Gerencianet_Validate::cpf( $cpf_cnpj ) ) { + $customer = array( + 'name' => $order->get_formatted_billing_full_name(), + 'cpf' => $cpf_cnpj, + 'phone_number' => preg_replace( '/[^0-9]/', '', $order->get_billing_phone() ), + ); + } else { + $customer = array( + 'juridical_person' => array( + 'corporate_name' => $order->get_billing_company() != '' ? $order->get_billing_company() : $order->get_formatted_billing_full_name(), + 'cnpj' => $cpf_cnpj, + ), + 'phone_number' => preg_replace( '/[^0-9]/', '', $order->get_billing_phone() ), + ); + } + $customer['email'] = $order->get_billing_email(); + $birth = explode( '/', sanitize_text_field( $_POST['gn_cartao_birth'] ) ); + $customer['birth'] = $birth[2] . '-' . $birth[1] . '-' . $birth[0]; + + $paymentToken = sanitize_text_field( $_POST['gn_payment_token'] ); + + $installments = intval( sanitize_text_field( $_POST['gn_cartao_installments'] ) ); + + $number = sanitize_text_field( $_POST['gn_billing_number'] ) != null ? sanitize_text_field( $_POST['gn_billing_number'] ) : sanitize_text_field( $_POST['billing_number'] ); + + $billingAddress = array( + 'street' => $order->get_billing_address_1(), + 'number' => $number, + 'neighborhood' => sanitize_text_field( $_POST['billing_neighborhood'] ) != null ? sanitize_text_field( $_POST['billing_neighborhood'] ) : $order->get_billing_address_2(), + 'zipcode' => str_replace( '-', '', $order->get_billing_postcode() ), + 'city' => $order->get_billing_city(), + 'state' => $order->get_billing_state(), + ); + + try { + $response = $this->gerencianetSDK->one_step_card( $order_id, $items, $shipping, strtolower( $woocommerce->api_request_url( GERENCIANET_CARTAO_ID ) ), $customer, $paymentToken, $installments, $billingAddress ); + $charge = json_decode( $response, true ); + + $order->update_status( 'pending-payment' ); + wc_reduce_stock_levels( $order_id ); + $woocommerce->cart->empty_cart(); + + return array( + 'result' => 'success', + 'redirect' => $this->get_return_url( $order ), + ); + + } catch ( Exception $e ) { + wc_add_notice( $e->getMessage(), 'error' ); + return; + } + } + + public function webhook() { + header( 'HTTP/1.0 200 OK' ); + $post_notification = sanitize_text_field( $_POST['notification'] ); + if ( isset( $post_notification ) && ! empty( $post_notification ) ) { + + $notification = json_decode( $this->gerencianetSDK->getNotification( GERENCIANET_CARTAO_ID, $post_notification ) ); + if ( $notification->code == 200 ) { + + foreach ( $notification->data as $notification_data ) { + $orderIdFromNotification = sanitize_text_field( $notification_data->custom_id ); + $orderStatusFromNotification = sanitize_text_field( $notification_data->status->current ); + $gerencianetChargeId = sanitize_text_field( $notification_data->identifiers->charge_id ); + } + + $order = wc_get_order( $orderIdFromNotification ); + + switch ( $orderStatusFromNotification ) { + case 'paid': + $order->update_status( 'processing' ); + $order->payment_complete(); + break; + case 'unpaid': + $order->update_status( 'failed' ); + + if ( $this->get_option( 'billet_unpaid' ) == 'yes' ) { + $this->gerencianetSDK->cancel_charge( $gerencianetChargeId ); + } + + break; + case 'refunded': + $order->update_status( 'refund' ); + break; + case 'contested': + $order->update_status( 'failed' ); + break; + case 'canceled': + $order->update_status( 'cancelled' ); + break; + default: + // no action + break; + } + } else { + gn_log( 'Notification Request : FAIL ' ); + } + + exit(); + + } else { + wp_die( __( 'Request Failure', Gerencianet_I18n::getTextDomain() ) ); + } + } + + public static function getMethodId() { + return self::$id; + } + + } +} diff --git a/includes/payment-methods/class-wc-gerencianet-pix.php b/includes/payment-methods/class-wc-gerencianet-pix.php new file mode 100644 index 00000000..d841554f --- /dev/null +++ b/includes/payment-methods/class-wc-gerencianet-pix.php @@ -0,0 +1,514 @@ +id = GERENCIANET_PIX_ID; // payment gateway plugin ID + $this->has_fields = true; // custom form + $this->method_title = __( 'Gerencianet - PIX', Gerencianet_I18n::getTextDomain() ); + $this->method_description = __( 'Com Gerencianet você pode receber pagamentos via Pix', Gerencianet_I18n::getTextDomain() ); + + $this->supports = array( + 'products', + 'refunds', + ); + + $this->init_form_fields(); + + $this->gerencianetSDK = new Gerencianet_Integration(); + + $discountText = ''; + if ( $this->get_option( 'gn_pix_discount' ) != '' && $this->get_option( 'gn_pix_discount' ) != '0%' ) { + $discountText = ' - ' . $this->get_option( 'gn_pix_discount' ) . ' de Desconto'; + } + + // Load the settings. + $this->init_settings(); + $this->title = __( 'Pix', Gerencianet_I18n::getTextDomain() ) . $discountText; + $this->description = __( 'Pagando por Pix, seu pagamento será confirmado em poucos segundos.', Gerencianet_I18n::getTextDomain() ); + $this->enabled = $this->get_option( 'gn_pix' ); + + $this->gn_pix_key = sanitize_text_field( $this->get_option( 'gn_pix_key' ) ); + $this->gn_pix_file = sanitize_text_field( $this->get_option( 'gn_pix_file' ) ); + $this->gn_pix_discount = sanitize_text_field( $this->get_option( 'gn_pix_discount' ) ); + $this->gn_pix_discount_shipping = sanitize_text_field( $this->get_option( 'gn_pix_discount_shipping' ) ); + $this->gn_pix_number_hours = sanitize_text_field( $this->get_option( 'gn_pix_number_hours' ) ); + $this->gn_pix_mtls = sanitize_text_field( $this->get_option( 'gn_pix_mtls' ) ); + $this->gn_sandbox = sanitize_text_field( $this->get_option( 'gn_sandbox' ) ); + + // // This action hook saves the settings + add_action( 'woocommerce_update_options_payment_gateways_' . GERENCIANET_PIX_ID, array( $this, 'process_admin_options' ) ); + add_action( 'woocommerce_update_options_payment_gateways_' . GERENCIANET_PIX_ID, array( $this, 'savePixCertificate' ) ); + add_action( 'woocommerce_update_options_payment_gateways_' . GERENCIANET_PIX_ID, array( $this, 'registerWebhook' ) ); + + add_action( 'woocommerce_api_' . strtolower( GERENCIANET_PIX_ID ), array( $this, 'webhook' ) ); + + // This hook add the "view payment methods" button + add_action( 'woocommerce_admin_order_data_after_billing_address', array( $this, 'add_view_payment_methods' ) ); + } + + public function process_refund( $order_id, $amount = null, $reason = '' ) { + + try { + $res = $this->gerencianetSDK->pix_refund( $order_id, $amount ); + $order = wc_get_order( $order_id ); + $order->update_status( 'refund' ); + return $res; + } catch ( Error $e ) { + throw $e; + } + + } + + public function savePixCertificate() { + $file_name = $_FILES['woocommerce_WC_Gerencianet_Pix_gn_pix_file']['name']; + if ( $file_name == '' ) { + return; + } + + // get the file extension + $fileExt = explode( '.', $file_name ); + $fileActualExt = strtolower( end( $fileExt ) ); + if ( $fileActualExt != 'pem' && $fileActualExt != 'p12' ) { + echo '

    Certificado Pix inválido!

    '; + return; + } + if ( $fileActualExt == 'p12' ) { + if ( ! $cert_file_p12 = file_get_contents( $_FILES['woocommerce_WC_Gerencianet_Pix_gn_pix_file']['tmp_name'] ) ) { // Pega o conteúdo do arquivo .p12 + echo '

    Falha ao ler arquivo o Certificado Pix!

    '; + return; + } + if ( ! openssl_pkcs12_read( $cert_file_p12, $cert_info_pem, '' ) ) { // Converte o conteúdo para .pem + echo '

    Falha ao converter o arquivo .p12!

    '; + return; + } + $file_read = "subject=/CN=271207/C=BR\n"; + $file_read .= "issuer=/C=BR/ST=Minas Gerais/O=Gerencianet Pagamentos do Brasil Ltda/OU=Infraestrutura/CN=api-pix.gerencianet.com.br/emailAddress=infra@gerencianet.com.br\n"; + $file_read .= $cert_info_pem['cert']; + $file_read .= "Key Attributes: \n"; + $file_read .= $cert_info_pem['pkey']; + } else { + // read the contents of the file + if ( ! $file_read = file_get_contents( $_FILES['woocommerce_WC_Gerencianet_Pix_gn_pix_file']['tmp_name'] ) ) { // Pega o conteúdo do arquivo .p12 + echo '

    Falha ao ler arquivo o .pem!

    '; + return; + } + } + if ( isset( $file_read ) ) { + + $dir_gerencianet = '/tmp/'; + + $file = fopen( $dir_gerencianet . $file_name, 'w+' ); + if ( $file ) { + $a = fwrite( $file, $file_read ); + $b = fclose( $file ); + } + + $this->update_option( 'gn_pix_file', $dir_gerencianet . $file_name ); + } + + } + + public function init_form_fields() { + $certificateLabel = $this->get_option( 'gn_pix_file' ) != '' ? 'Certificado Pix salvo: ' . $this->get_option( 'gn_pix_file' ) . '' : 'Nenhum certificado salvo'; + + $this->form_fields = array( + 'gn_api_section' => array( + 'title' => __( 'Credenciais Gerencianet', Gerencianet_I18n::getTextDomain() ), + 'type' => 'title', + 'description' => __( "Clique aqui para obter seu Client_id e Client_secret! ", Gerencianet_I18n::getTextDomain() ), + ), + 'gn_client_id_production' => array( + 'title' => __( 'Client_Id Produção', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Por favor, insira seu Client_id. Isso é necessário para receber o pagamento.', Gerencianet_I18n::getTextDomain() ), + 'default' => '', + ), + 'gn_client_secret_production' => array( + 'title' => __( 'Client_secret Produção', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Por favor, insira seu Client_secret. Isso é necessário para receber o pagamento.', Gerencianet_I18n::getTextDomain() ), + 'default' => '', + ), + 'gn_client_id_homologation' => array( + 'title' => __( 'Client_id Homologação', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Por favor, insira seu Client_id de Homologação. Isso é necessário para testar os pagamentos.', Gerencianet_I18n::getTextDomain() ), + 'default' => '', + ), + 'gn_client_secret_homologation' => array( + 'title' => __( 'Client_secret Homologação', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Por favor, insira seu Client_secret de Homologação. Isso é necessário para testar os pagamentos.', Gerencianet_I18n::getTextDomain() ), + 'default' => '', + ), + 'gn_sandbox_section' => array( + 'title' => __( 'Ambiente Sandbox', Gerencianet_I18n::getTextDomain() ), + 'type' => 'title', + 'description' => 'Habilite para usar o ambiente de testes da Gerencianet. Nenhuma cobrança emitida nesse modo poderá ser paga.', + ), + 'gn_sandbox' => array( + 'title' => __( 'Sandbox', Gerencianet_I18n::getTextDomain() ), + 'type' => 'checkbox', + 'label' => __( 'Habilitar o ambiente sandbox', Gerencianet_I18n::getTextDomain() ), + 'default' => 'no', + ), + 'gn_one_payment_section' => array( + 'title' => __( 'Configurações de recebimento', Gerencianet_I18n::getTextDomain() ), + 'type' => 'title', + ), + 'gn_pix' => array( + 'title' => __( 'Pix', Gerencianet_I18n::getTextDomain() ), + 'type' => 'checkbox', + 'label' => __( 'Habilitar Pix', Gerencianet_I18n::getTextDomain() ), + 'default' => 'no', + ), + 'gn_pix_key' => array( + 'title' => __( 'Chave Pix', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Insira sua chave Pix da Gerencianet', Gerencianet_I18n::getTextDomain() ), + 'desc_tip' => false, + 'placeholder' => '', + 'default' => '', + ), + 'gn_pix_file' => array( + 'title' => __( 'Certificado Pix', Gerencianet_I18n::getTextDomain() ), + 'type' => 'file', + 'description' => $certificateLabel, + 'desc_tip' => false, + ), + 'gn_pix_discount' => array( + 'title' => __( 'Desconto no Pix', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Desconto a ser aplicado para pagamentos com Pix. (Deixe em branco ou como 0 para não aplicar desconto)', Gerencianet_I18n::getTextDomain() ), + 'placeholder' => '0%', + 'default' => '0%', + ), + 'gn_pix_discount_shipping' => array( + 'title' => __( 'Modo de desconto', Gerencianet_I18n::getTextDomain() ), + 'type' => 'select', + 'description' => __( 'Escolha como aplicar o desconto definido na opção anterior.', Gerencianet_I18n::getTextDomain() ), + 'default' => 'total', + 'options' => array( + 'total' => __( 'Aplicar desconto no valor total com Frete', Gerencianet_I18n::getTextDomain() ), + 'products' => __( 'Aplicar desconto apenas no preço dos produtos', Gerencianet_I18n::getTextDomain() ), + ), + ), + 'gn_pix_number_hours' => array( + 'title' => __( 'Expiração do pix', Gerencianet_I18n::getTextDomain() ), + 'type' => 'text', + 'description' => __( 'Em quantas horas o Pix expira depois de emitido', Gerencianet_I18n::getTextDomain() ), + 'placeholder' => '24', + 'default' => '24', + ), + 'gn_pix_mtls' => array( + 'title' => __( 'Validar mTLS', Gerencianet_I18n::getTextDomain() ), + 'type' => 'checkbox', + 'description' => __( 'Entenda os riscos de não configurar o mTLS clicando aqui.', Gerencianet_I18n::getTextDomain() ), + 'default' => 'no', + ), + ); + } + + public function payment_fields() { + if ( $this->description ) { + echo wpautop( wp_kses_post( $this->description ) ); + } + + $is_sandbox = $this->get_option( 'gn_sandbox' ) == 'yes' ? true : false; + if ( $is_sandbox ) { + $sandboxWarn = '
    +
    ' . __( 'O modo Sandbox está ativo. As cobranças emitidas não serão válidas.', Gerencianet_I18n::getTextDomain() ) . '
    +
    '; + echo wpautop( wp_kses_post( $sandboxWarn ) ); + } + + echo '
    '; + + ?> +
    + + +
    +
    +
    + get_items( $types ) as $item_id => $item ) { + switch ( $item->get_type() ) { + case 'fee': + $value += $item->get_subtotal(); + break; + case 'shipping': + $value += $item->get_total(); + $shippingTotal += $item->get_total(); + break; + case 'coupon': + $value -= $item->get_total(); + break; + default: + $product = $item->get_product(); + $value += ( $item->get_quantity() * $product->get_price() ); + break; + } + } + + $value += $order->get_total_tax(); + + if ( $this->get_option( 'gn_pix_discount' ) != '' && $this->get_option( 'gn_pix_discount' ) != '0' ) { + + $discount = 0; + + if ( $this->get_option( 'gn_pix_discount_shipping' ) == 'total' ) { + $discount = ( ( $value ) * ( intval( $this->get_option( 'gn_pix_discount' ) ) / 100 ) ); + } else { + $discount = ( ( $value - $shippingTotal ) * ( intval( $this->get_option( 'gn_pix_discount' ) ) / 100 ) ); + } + $order_item_id = wc_add_order_item( + $order_id, + array( + 'order_item_name' => $this->get_option( 'gn_pix_discount' ) . __( ' de desconto no Pix' ), + 'order_item_type' => 'fee', + ) + ); + if ( $order_item_id ) { + wc_add_order_item_meta( $order_item_id, '_fee_amount', -$discount, true ); + wc_add_order_item_meta( $order_item_id, '_line_total', -$discount, true ); + $order->set_total( $order->get_total() - ( $discount ) ); + $order->save(); + + } + } + + $cpf_cnpj = str_replace( '.', '', sanitize_text_field( $_POST['gn_pix_cpf_cnpj'] ) ); + $cpf_cnpj = str_replace( '-', '', $cpf_cnpj ); + $cpf_cnpj = str_replace( '/', '', $cpf_cnpj ); + if ( Gerencianet_Validate::cpf( $cpf_cnpj ) ) { + $customer = array( + 'nome' => $order->get_formatted_billing_full_name(), + 'cpf' => $cpf_cnpj, + ); + } elseif ( Gerencianet_Validate::cnpj( $cpf_cnpj ) ) { + $customer = array( + 'nome' => $order->get_billing_company() != '' ? $order->get_billing_company() : $order->get_formatted_billing_full_name(), + 'cnpj' => $cpf_cnpj, + ); + } else { + wc_add_notice( __( 'CPF/CNPJ inválido.', Gerencianet_I18n::getTextDomain() ), 'error' ); + return false; + } + + $body = array( + 'calendario' => array( 'expiracao' => intval( $this->get_option( 'gn_pix_number_hours' ) ) * 3600 ), + 'devedor' => $customer, + 'valor' => array( 'original' => sprintf( '%0.2f', $value ) ), + 'chave' => $this->get_option( 'gn_pix_key' ), + 'infoAdicionais' => array( + array( + 'nome' => 'Pagamento em', + 'valor' => get_bloginfo(), + ), + array( + 'nome' => 'Numero do Pedido', + 'valor' => '#' . $order_id, + ), + ), + ); + + try { + $chargeResponse = $this->gerencianetSDK->pay_pix( $body ); + $charge = json_decode( $chargeResponse, true ); + + $qrCodeResponse = $this->gerencianetSDK->generate_qrcode( $charge['loc']['id'] ); + $qrCode = json_decode( $qrCodeResponse, true ); + + $linkPix = str_replace( 'qrcodes-pix.gerencianet.com.br/v2/', 'https://pix.gerencianet.com.br/cob/pagar/', $charge['loc']['location'] ); + + update_post_meta( $order_id, '_gn_pix_link', $linkPix ); + update_post_meta( $order_id, '_gn_pix_qrcode', $qrCode['imagemQrcode'] ); + update_post_meta( $order_id, '_gn_pix_copy', $qrCode['qrcode'] ); + update_post_meta( $order_id, '_gn_pix_txid', $charge['txid'] ); + + $order->update_status( 'pending-payment' ); + wc_reduce_stock_levels( $order_id ); + $woocommerce->cart->empty_cart(); + + return array( + 'result' => 'success', + 'redirect' => $this->get_return_url( $order ), + ); + } catch ( Exception $e ) { + wc_add_notice( $e->getMessage(), 'error' ); + return; + } + } + + public function webhook() { + header( 'HTTP/1.0 200 OK' ); + $this->successful_webhook( file_get_contents( 'php://input' ) ); + } + + public function registerWebhook() { + global $woocommerce; + + try { + $pix_key = $this->get_option( 'gn_pix_key' ); + $url = strtolower( $woocommerce->api_request_url( GERENCIANET_PIX_ID ) . '?ignore=' ); + $response = $this->gerencianetSDK->update_webhook( $pix_key, $url ); + } catch ( \Throwable $th ) { + gn_log( $th ); + } + } + + public static function getMethodId() { + return self::$id; + } + + public function successful_webhook( $posted ) { + $pix = json_decode( $posted, true )['pix']; + // Percorre lista de notificações + $args = array( + 'limit' => -1, + 'orderby' => 'date', + 'order' => 'DESC', + 'meta_key' => '_gn_pix_txid', + 'meta_compare' => '=', + 'meta_value' => sanitize_text_field( $pix[0]['txid'] ), + ); + + // Busca pedidos + $orders = wc_get_orders( $args ); + + // Atualiza status + foreach ( $orders as $order ) { + + if ( isset( $pix[0]['txid'] ) && $pix[0]['txid'] != '' && ( get_post_meta( $order->get_id(), '_gn_pix_txid', true ) == $pix[0]['txid'] ) ) { + add_post_meta( intval( $order->get_id() ), '_gn_pix_E2EID', $pix[0]['endToEndId'], true ); + + gn_log( $pix[0] ); + if ( isset( $pix[0]['devolucoes'] ) && $pix[0]['devolucoes'][0]['status'] == 'DEVOLVIDO' ) { + $order->update_status( 'refund' ); + } else { + $order->update_status( 'processing' ); + $order->payment_complete(); + } + } + } + + exit(); + } + + public function add_view_payment_methods( $order ) { + + if ( $order->get_payment_method() != $this->id ) { + return; + } + + if ( get_post_meta( $order->get_id(), '_gn_pix_copy', true ) || get_post_meta( $order->get_id(), '_gn_pix_link', true ) ) { + ?> + + + + + + - - -Generated by IcoMoon - - - - - - - - - - - \ No newline at end of file diff --git a/manual/woo-gerencianet-official/assets/fonts/icomoon.ttf b/manual/woo-gerencianet-official/assets/fonts/icomoon.ttf deleted file mode 100755 index 7323e499..00000000 Binary files a/manual/woo-gerencianet-official/assets/fonts/icomoon.ttf and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/fonts/icomoon.woff b/manual/woo-gerencianet-official/assets/fonts/icomoon.woff deleted file mode 100755 index 40048e8a..00000000 Binary files a/manual/woo-gerencianet-official/assets/fonts/icomoon.woff and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/images/amex.png b/manual/woo-gerencianet-official/assets/images/amex.png deleted file mode 100755 index 5526124a..00000000 Binary files a/manual/woo-gerencianet-official/assets/images/amex.png and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/images/diners.png b/manual/woo-gerencianet-official/assets/images/diners.png deleted file mode 100755 index 5f91ce81..00000000 Binary files a/manual/woo-gerencianet-official/assets/images/diners.png and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/images/elo.png b/manual/woo-gerencianet-official/assets/images/elo.png deleted file mode 100755 index 1e7b0a7b..00000000 Binary files a/manual/woo-gerencianet-official/assets/images/elo.png and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/images/gerencianet-configurations.png b/manual/woo-gerencianet-official/assets/images/gerencianet-configurations.png deleted file mode 100755 index 8107f0f3..00000000 Binary files a/manual/woo-gerencianet-official/assets/images/gerencianet-configurations.png and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/images/gerencianet-exemplo-chaves-desenvolvimento.png b/manual/woo-gerencianet-official/assets/images/gerencianet-exemplo-chaves-desenvolvimento.png deleted file mode 100755 index 2fe89595..00000000 Binary files a/manual/woo-gerencianet-official/assets/images/gerencianet-exemplo-chaves-desenvolvimento.png and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/images/gerencianet-exemplo-chaves-producao.png b/manual/woo-gerencianet-official/assets/images/gerencianet-exemplo-chaves-producao.png deleted file mode 100755 index efea1f06..00000000 Binary files a/manual/woo-gerencianet-official/assets/images/gerencianet-exemplo-chaves-producao.png and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/images/gerencianet-exemplo-identificador-conta.png b/manual/woo-gerencianet-official/assets/images/gerencianet-exemplo-identificador-conta.png deleted file mode 100755 index d8a689c7..00000000 Binary files a/manual/woo-gerencianet-official/assets/images/gerencianet-exemplo-identificador-conta.png and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/images/gerencianet-payment.png b/manual/woo-gerencianet-official/assets/images/gerencianet-payment.png deleted file mode 100755 index a43601e7..00000000 Binary files a/manual/woo-gerencianet-official/assets/images/gerencianet-payment.png and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/images/gn-payment.png b/manual/woo-gerencianet-official/assets/images/gn-payment.png deleted file mode 100755 index 2a5e3e56..00000000 Binary files a/manual/woo-gerencianet-official/assets/images/gn-payment.png and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/images/hipercard.png b/manual/woo-gerencianet-official/assets/images/hipercard.png deleted file mode 100755 index 95f3ec34..00000000 Binary files a/manual/woo-gerencianet-official/assets/images/hipercard.png and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/images/mastercard.png b/manual/woo-gerencianet-official/assets/images/mastercard.png deleted file mode 100755 index 2f10f25f..00000000 Binary files a/manual/woo-gerencianet-official/assets/images/mastercard.png and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/images/pix.png b/manual/woo-gerencianet-official/assets/images/pix.png deleted file mode 100755 index 437e0505..00000000 Binary files a/manual/woo-gerencianet-official/assets/images/pix.png and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/images/sprite-gn.png b/manual/woo-gerencianet-official/assets/images/sprite-gn.png deleted file mode 100755 index d7d9c84b..00000000 Binary files a/manual/woo-gerencianet-official/assets/images/sprite-gn.png and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/images/visa.png b/manual/woo-gerencianet-official/assets/images/visa.png deleted file mode 100755 index aa500d34..00000000 Binary files a/manual/woo-gerencianet-official/assets/images/visa.png and /dev/null differ diff --git a/manual/woo-gerencianet-official/assets/js/admin.min.js b/manual/woo-gerencianet-official/assets/js/admin.min.js deleted file mode 100644 index 291de012..00000000 --- a/manual/woo-gerencianet-official/assets/js/admin.min.js +++ /dev/null @@ -1,58 +0,0 @@ -jQuery(document).ready(function() { - jQuery("#tutorialGnBox").click(function() { - jQuery("#tutorialGnBox").fadeOut(); - }); - jQuery("#woocommerce_gerencianet_oficial_billet_discount").click(event => handleMask(event)); - jQuery("#woocommerce_gerencianet_oficial_pix_discount").click(event => handleMask(event)); - - jQuery("#woocommerce_gerencianet_oficial_pix_number_hours").keypress((e) => onlynumber(e)); - - jQuery("#woocommerce_gerencianet_oficial_pix_discount").mask("##0,00%", {reverse: true, onKeyPress: function(percentage){ - if (percentage.length>6) { - jQuery("#woocommerce_gerencianet_oficial_pix_discount").val("99,99%"); - } - }}); - jQuery("#woocommerce_gerencianet_oficial_billet_number_days").mask("999"); - - jQuery("#showKeysProductionTutorial").click(function() { - showGnTutorial("keysProduction"); - }); - - jQuery("#showKeysDevelopmentTutorial").click(function() { - showGnTutorial("keysDevelopment"); - }); - jQuery("#showPayeeCodeTutorial").click(function() { - showGnTutorial("payeeCode"); - }); - - jQuery("#woocommerce_gerencianet_oficial_pix_cert_name").prop("readonly", true); -}); - -function showGnTutorial(tutorial) { - switch(tutorial) { - case "keysDevelopment": jQuery("#imgTutorial").attr("src", plugin_images_url + "gerencianet-exemplo-chaves-desenvolvimento.png"); break; - case "keysProduction": jQuery("#imgTutorial").attr("src", plugin_images_url + "gerencianet-exemplo-chaves-producao.png"); break; - case "payeeCode": jQuery("#imgTutorial").attr("src", plugin_images_url + "gerencianet-exemplo-identificador-conta.png"); break; - } - jQuery("#tutorialGnBox").fadeIn(); -} - -function handleMask(div) { - jQuery(div).mask("##0,00%", {reverse: true, onKeyPress: (percentage) => { - if (percentage.length > 6) { - jQuery(div).val("99,99%"); - } - }}); -} - -function onlynumber(evt) { - var theEvent = evt || window.event; - var key = theEvent.keyCode || theEvent.which; - key = String.fromCharCode( key ); - - var regex = /^[0-9.]+$/; - if( !regex.test(key) ) { - theEvent.returnValue = false; - if(theEvent.preventDefault) theEvent.preventDefault(); - } - } diff --git a/manual/woo-gerencianet-official/assets/js/checkout-osc.js b/manual/woo-gerencianet-official/assets/js/checkout-osc.js deleted file mode 100644 index 9df394ef..00000000 --- a/manual/woo-gerencianet-official/assets/js/checkout-osc.js +++ /dev/null @@ -1,89 +0,0 @@ -/* -var getPaymentToken; -$gn.ready(function (checkout) { - getPaymentToken = checkout.getPaymentToken; -}); -*/ - -function getCardBrand(dirtynumber) { - let other = ' '; - let visa = ` `; - let mastercard = ` `; - let diners = ` `; - let amex = ` `; - let elo = '' - let hipercard = '' - + ''; - - var cardnumber = dirtynumber.replace(/[^0-9]+/g, ''); - cardnumber = cardnumber.replaceAll(" ", ""); - - var brands = [ - { - reg: /^4[0-9]{12}(?:[0-9]{3})/, - name: "visa" - }, - { - reg: /^5[1-5][0-9]{14}/, - name: "mastercard" - }, - { - reg: /^3(?:0[0-5]|[68][0-9])[0-9]{11}/, - name: "diners" - }, - { - reg: /^3[47][0-9]{13}/, - name: "amex" - }, - { - reg: /^((((636368)|(438935)|(504175)|(451416)|(636297))\d{0,10})|((5067)|(4576)|(4011))\d{0,12})/, - name: "elo" - }, - { - reg: /^(606282\d{10}(\d{3})?)|(3841\d{15})/, - name: "hipercard" - } - ]; - - let final = ""; - brands.forEach(brand => { - if (brand.reg.test(cardnumber)) { - final = brand.name; - } - }); - - - - switch (final) { - case "visa": - document.getElementById('icon-div').innerHTML = visa; - break - case "mastercard": - document.getElementById('icon-div').innerHTML = mastercard; - break; - case "diners": - document.getElementById('icon-div').innerHTML = diners; - break; - case "amex": - document.getElementById('icon-div').innerHTML = amex; - break; - case "elo": - document.getElementById('icon-div').innerHTML = elo; - break; - case "hipercard": - document.getElementById('icon-div').innerHTML = hipercard; - break; - default: - document.getElementById('icon-div').innerHTML = other; - } - document.getElementById(final).click(); -} \ No newline at end of file diff --git a/manual/woo-gerencianet-official/assets/js/checkout.js b/manual/woo-gerencianet-official/assets/js/checkout.js deleted file mode 100644 index d413e1cd..00000000 --- a/manual/woo-gerencianet-official/assets/js/checkout.js +++ /dev/null @@ -1,731 +0,0 @@ - -var errorMessage; -var id_charge = 0; -var classBackground; -var containsPrice; -var containsCollapse; - -var getPaymentToken; -$gn.ready(function (checkout) { - getPaymentToken = checkout.getPaymentToken; -}); - -(function ($) { - - if ($().mask) { - function initOptions() { - classBackground = $('.gn-accordion-option-background'); - containsPrice = $('[id*="price"]'); - containsCollapse = $('[id*="collapse-payment"]'); - - if (classBackground.length === 1) { - onCardClick(classBackground[0].id); - } - } - - initOptions(); - - $("#cpf-cnpj").keyup((event) => documentMask(event)); - $("#pix-cpf-cnpj").keyup((event) => documentMask(event)); - $("#input-payment-card-cpf-cnpj").keyup((event) => documentMask(event)); - - $(".phone-mask").keyup(function () { - $(".phone-mask").unmask(); - var phone = $(".phone-mask").val().replace(/[^\d]+/g, ''); - if (phone.length > 10) { - $(".phone-mask").mask("(00) 00000-0009"); - } else { - $(".phone-mask").mask("(00) 0000-00009"); - } - var elem = this; - setTimeout(function () { - // muda a posição do seletor - elem.selectionStart = elem.selectionEnd = 10000; - }, 0); - }); - - $('.birth-mask').mask("00/00/0000", { - completed: function () { - if (!verifyBirthDate($(".birth-mask").val())) { - showError('Data de nascimento inválida. Digite novamente.'); - } else { - hideError(); - } - }, placeholder: "__/__/____" - }); - - $('#input-payment-card-number').mask('0000 0000 0000 0000999', { placeholder: "" }); - $('#input-payment-card-cvv').mask('00099', { placeholder: "" }); - } - - function documentMask(event) { - const data = $(event.currentTarget).val(); - - $(event.currentTarget).unmask(); - if (data.length <= 14) { - $(event.currentTarget).mask("000.000.000-009"); - } else { - $(event.currentTarget).mask("00.000.000/0000-00"); - } - event.currentTarget.setSelectionRange(data.length, data.length); - } - - $('.phone-mask').change(function () { - var pattern = new RegExp(/^[ ]*(?:[^\\s]+[ ]+)+[^\\s]+[ ]*$/); - if (!verifyPhone($(".phone-mask").val())) { - showError('Telefone inválido. Digite novamente.'); - } else { - hideError(); - } - }); - - jQuery('.corporate-name-corporate_validade').change(function () { - var pattern = new RegExp(/^[ ]*(?:[^\\s]+[ ]+)+[^\\s]+[ ]*$/); - if (!pattern.test(jQuery(this).val())) { - showError('Nome ou Razão Social inválida(o). Digite novamente.'); - } else { - hideError(); - } - }); - - jQuery('#background-card').click((event) => onCardClick(event.currentTarget.id)); - jQuery('#background-billet').click((event) => onCardClick(event.currentTarget.id)); - jQuery('#background-pix').click((event) => { onCardClick(event.currentTarget.id) }); - - function onCardClick(id) { - - const idPayment = id.split('-')[1];//["background", "id-Payment"] - const idPrice = `price-${idPayment}`; - const idCollapse = `collapse-payment-${idPayment}`; - - $.each(classBackground, (index, div) => { - const isChecket = $(div).find('input[type=radio]').prop('checked'); - if (id === div.id && !isChecket) { - $(div).css('background-color', '#f5f5f5'); - $(div).find('input[type=radio]').prop('checked', true); - } else { - $(div).css('background-color', '#ffffff'); - $(div).find('input[type=radio]').prop('checked', false); - } - }); - - $.each(containsPrice, (index, div) => { - const isVisible = $(div).is(':visible'); - if (div.id === idPrice && !isVisible) { - $(div).show(); - } else { - $(div).hide(); - } - }); - - $.each(containsCollapse, (index, div) => { - const isVisible = $(div).is(':visible'); - if (div.id === idCollapse && !isVisible) { - $(div).slideDown(); - } else { - $(div).slideUp(); - } - }); - - if ($(`#${idPrice}`).is(':visible')) { - $(containsPrice[containsPrice.length - 1]).hide(); - } else { - $(containsPrice[containsPrice.length - 1]).show(); - } - } - - $('input[type=radio][name=input-payment-card-brand]').change(function () { - getInstallments(this.value); - }); - - $('#gn-pay-billet-button').click(function (e) { - e.preventDefault(); - e.stopPropagation(); - - $('#gn-pay-billet-button').prop("disabled", true); - - if (document.getElementById('paymentMethodBilletRadio').checked) { - if (validateBilletFields()) { - if (id_charge != 0) { - payBilletCharge(); - } else { - createCharge('billet'); - } - } - } else { - showError("Selecione um método de pagamento."); - $('#gn-pay-billet-button').prop("disabled", false); - } - - }); - - $('#gn-pay-card-button').click(function (e) { - e.preventDefault(); - e.stopPropagation(); - - $('#gn-pay-card-button').prop("disabled", true); - if (document.getElementById('paymentMethodCardRadio').checked) { - if (validateCardFields()) { - if (id_charge != 0) { - payCardCharge(); - } else { - createCharge('card'); - } - } - } else { - showError("Selecione um método de pagamento."); - $('#gn-pay-card-button').prop("disabled", false); - } - - }); - - $('#gn-pay-pix-button').click((e) => { - e.preventDefault(); - e.stopPropagation(); - - $('#gn-pay-pix-button').prop('disabled', true); - if (document.getElementById('paymentMethodPixRadio').checked) { - if (validatePixFields()) { - if (id_charge != 0) { - payPixCharge(); - } else { - createCharge('pix'); - } - } - } else { - showError('Selecione um método de pagamento.'); - $('#gn-pay-pix-button').prop('disabled', false); - } - - }); - - function createCharge(paymentType) { - - if (paymentType == 'pix') { - payPixCharge(); - } - else { - $('.gn-loading-request').fadeIn(); - - var order_id = jQuery('input[name="wc_order_id"]').val(), - data = { - action: "woocommerce_gerencianet_create_charge", - security: woocommerce_gerencianet_api.security, - order_id: order_id - }; - - jQuery.ajax({ - type: "POST", - url: woocommerce_gerencianet_api.ajax_url, - data: data, - success: (response) => { - const obj = $.parseJSON(response); - if (obj.code == 200) { - id_charge = obj.data.charge_id; - if (paymentType == 'billet') { - payBilletCharge(); - } else if (paymentType == 'card') { - payCardCharge(); - } - } else { - $('#gn-pay-billet-button').prop("disabled", false); - $('#gn-pay-card-button').prop("disabled", false); - $('#gn-pay-pix-button').prop("disabled", false); - $('.gn-loading-request').fadeOut(); - if (!$('.warning-payment').is(":visible")) { - $('.warning-payment').slideDown(); - scrollToTop(); - } - $('.warning-payment').html(' Ocorreu um erro ao tentar gerar a cobrança: ' + obj.message + ''); - } - - }, - error: function () { - alert("error ocurred"); - } - }); - } - } - - function payPixCharge() { - $('.gn-loading-request').fadeIn(); - - var data = { - action: 'woocommerce_gerencianet_pay_pix', - security: woocommerce_gerencianet_api.security, - charge_id: id_charge, - order_id: jQuery('input[name="wc_order_id"]').val(), - cpf_cnpj: jQuery('#pix-cpf-cnpj').val().replace(/[^\d]+/g, '') - }; - - jQuery.ajax({ - type: "POST", - url: woocommerce_gerencianet_api.ajax_url, - data: data, - success: function (response) { - var obj = $.parseJSON(response); - - if (!!obj.txid) { - var redirect = $('
    ' + - '' + - '
    '); - $('body').append(redirect); - redirect.submit(); - } else { - $('#gn-pay-pix-button').prop('disabled', false); - $('.gn-pix-field').show(); - $('.gn-loading-request').fadeOut(); - showError(obj.message); - } - }, - error: function () { - alert("error ocurred"); - } - }); - } - - function validatePixFields() { - errorMessage = ''; - if ($("#pix-cpf-cnpj").val().replace(/[^\d]+/g, '').length <= 11) { - if (!(verifyCPF($('#pix-cpf-cnpj').val()))) { - errorMessage = 'O CPF digitado é inválido.'; - } - } - else { - if (!(verifyCNPJ($('#pix-cpf-cnpj').val()))) { - errorMessage = 'O CNPJ digitado é inválido.'; - } - } - - if (errorMessage != '') { - showError(errorMessage); - $('#gn-pay-pix-button').prop("disabled", false); - return false; - } else { - return true; - } - } - - function payBilletCharge() { - $('.gn-loading-request').fadeIn(); - - var data = { - action: "woocommerce_gerencianet_pay_billet", - security: woocommerce_gerencianet_api.security, - charge_id: id_charge, - order_id: jQuery('input[name="wc_order_id"]').val(), - name_corporate: jQuery('#name_corporate').val(), - cpf_cnpj: jQuery('#cpf-cnpj').val().replace(/[^\d]+/g, ''), - email: jQuery('#input-payment-billet-email').val() - }; - - jQuery.ajax({ - type: "POST", - url: woocommerce_gerencianet_api.ajax_url, - data: data, - success: function (response) { - var obj = $.parseJSON(response); - if (obj.code == 200) { - var url = encodeURIComponent(obj.data.link); - var redirect = $('
    ' + - '' + - '' + - '
    '); - $('body').append(redirect); - redirect.submit(); - } else { - $('#gn-pay-billet-button').prop("disabled", false); - $('.gn-billet-field').show(); - $('.gn-loading-request').fadeOut(); - showError(obj.message); - } - }, - error: function () { - alert("error ocurred"); - } - }); - - } - - function validateBilletFields() { - errorMessage = ''; - if ($("#cpf-cnpj").val().replace(/[^\d]+/g, '').length <= 11) { - if (!(verifyCPF($('#cpf-cnpj').val()))) { - errorMessage = 'O CPF digitado é inválido.'; - } - } - else { - if (!(verifyCNPJ($('#cpf-cnpj').val()))) { - errorMessage = 'O CNPJ digitado é inválido.'; - } - } - if ($('#name_corporate').val() == "") { - errorMessage = 'Digite o Nome ou a Razão Social.'; - } else if (!(verifyEmail($('#input-payment-billet-email').val()))) { - errorMessage = 'O e-mail digitado é inválido.'; - } - - if (errorMessage != '') { - showError(errorMessage); - $('#gn-pay-billet-button').prop("disabled", false); - return false; - } else { - return true; - } - } - - function validateCardFields() { - errorMessage = ''; - if ($("#input-payment-card-cpf-cnpj").val().replace(/[^\d]+/g, '').length <= 11) { - if (!(verifyCPF($('#input-payment-card-cpf-cnpj').val()))) { - errorMessage = 'O CPF digitado é inválido.'; - } - } - else { - if (!(verifyCNPJ($('#input-payment-card-cpf-cnpj').val()))) { - errorMessage = 'O CNPJ digitado é inválido.'; - } - } - if ($('#input-payment-card-name-corporate').val() == "") { - errorMessage = 'Digite o Nome ou a Razão Social.'; - } else if (!(verifyPhone($('#input-payment-card-phone').val()))) { - errorMessage = 'O Telefone digitado é inválido.'; - } else if (!(verifyEmail($('#input-payment-card-email').val()))) { - errorMessage = 'O e-mail digitado é inválido.'; - } else if (!(verifyBirthDate($('#input-payment-card-birth').val()))) { - errorMessage = 'A data de nascimento digitada é inválida.'; - } else if ($('#input-payment-card-street').val() == "") { - errorMessage = 'Digite o endereço de cobrança.'; - } else if ($('#input-payment-card-address-number').val() == "") { - errorMessage = 'Digite número do endereço de cobrança.'; - } else if ($('#input-payment-card-neighborhood').val() == "") { - errorMessage = 'Digite bairro do endereço de cobrança.'; - } else if ($('#input-payment-card-zipcode').val() == "") { - errorMessage = 'Digite CEP do endereço de cobrança.'; - } else if ($('#input-payment-card-city').val() == "") { - errorMessage = 'Digite a cidade do endereço de cobrança.'; - } else if ($('#input-payment-card-state').val() == "") { - errorMessage = 'Selecione o estado do endereço de cobrança.'; - } else if ($('input[name=input-payment-card-brand]:checked', '#payment-card-form').val() == "") { - errorMessage = 'Selecione a bandeira do cartão de crédito.'; - } else if ($('#input-payment-card-installments').val() == "") { - errorMessage = 'Selecione a quantidade de parcelas que deseja.'; - } else if ($('#input-payment-card-number').val() == "") { - errorMessage = 'Digite o número do cartão de crédito.'; - } else if ($('#input-payment-card-cvv').val() == "") { - errorMessage = 'Digite o código de segurança do cartão de crédito.'; - } else if ($('#input-payment-card-expiration-month').val() == "" || $('#input-payment-card-expiration-year').val() == "") { - errorMessage = 'Digite os dados de validade do cartão de crédito.'; - } - - if (errorMessage != '') { - showError(errorMessage); - $('#gn-pay-card-button').prop("disabled", false); - return false; - } else { - return true; - } - } - - function showError(message) { - if (!$('.warning-payment').is(":visible")) { - $('.warning-payment').slideDown(); - } - scrollToTop(); - jQuery("#wc-gerencianet-messages").html('
    ' + message + '
    ') - } - - function hideError() { - $('.warning-payment').slideUp(); - } - - function payCardCharge() { - - $('.gn-loading-request').fadeIn(); - - card_brand = $('input[name=input-payment-card-brand]:checked', '#payment-card-form').val() - card_number = $("#input-payment-card-number").val(); - card_cvv = $("#input-payment-card-cvv").val(); - expiration_month = $("#input-payment-card-expiration-month").val(); - expiration_year = $("#input-payment-card-expiration-year").val(); - - var callback = function (error, response) { - if (error) { - - showError("Os dados do cartão digitados são inválidos. Tente novamente."); - $('#gn-pay-card-button').prop("disabled", false); - - $('.gn-loading-request').fadeOut(); - - } else { - var dateBirth = $('#input-payment-card-birth').val().split("/"); - - var data = { - action: "woocommerce_gerencianet_pay_card", - security: woocommerce_gerencianet_api.security, - charge_id: id_charge, - order_id: jQuery('input[name="wc_order_id"]').val(), - name_corporate: jQuery('#input-payment-card-name-corporate').val(), - cpf_cnpj: jQuery('#input-payment-card-cpf-cnpj').val().replace(/[^\d]+/g, ''), - phone_number: jQuery('#input-payment-card-phone').val().replace(/[^\d]+/g, ''), - payment_token: response.data.payment_token, - birth: dateBirth[2] + "-" + dateBirth[1] + "-" + dateBirth[0], - email: $('#input-payment-card-email').val(), - street: $('#input-payment-card-street').val(), - number: $('#input-payment-card-address-number').val(), - neighborhood: $('#input-payment-card-neighborhood').val(), - complement: $('#input-payment-card-complement').val(), - zipcode: $('#input-payment-card-zipcode').val().replace(/[^\d]+/g, ''), - city: $('#input-payment-card-city').val(), - state: $('#input-payment-card-state').val(), - installments: $('#input-payment-card-installments').val() - }; - - jQuery.ajax({ - type: "POST", - url: woocommerce_gerencianet_api.ajax_url, - data: data, - success: function (response) { - var obj = $.parseJSON(response); - if (obj.code == 200) { - var url = encodeURIComponent(obj.data.link); - var redirect = $('
    ' + - '' + - '
    '); - $('body').append(redirect); - redirect.submit(); - } else { - $('#gn-pay-card-button').prop("disabled", false); - showError(obj.message); - $('.gn-card-field').show(); - $('.gn-loading-request').fadeOut(); - } - - }, - error: function () { - alert("error ocurred"); - } - }); - } - }; - - getPaymentToken({ - brand: card_brand, - number: card_number, - cvv: card_cvv, - expiration_month: expiration_month, - expiration_year: expiration_year - }, callback); - } - - function getInstallments(card_brand) { - $('#input-payment-card-installments').html('').show(); - var order_id = jQuery('input[name="wc_order_id"]').val(), - data = { - action: "woocommerce_gerencianet_get_installments", - security: woocommerce_gerencianet_api.security, - order_id: order_id, - brand: card_brand - }; - - jQuery.ajax({ - type: "POST", - url: woocommerce_gerencianet_api.ajax_url, - data: data, - success: function (response) { - var obj = $.parseJSON(response); - if (obj.code == 200) { - - var options = ''; - for (var i = 0; i < obj.data.installments.length; i++) { - options += ''; - } - $('#input-payment-card-installments').html(options).show(); - } - }, - error: function () { - alert("error ocurred"); - } - }); - } - - - function verifyCPF(cpf) { - cpf = cpf.replace(/[^\d]+/g, ''); - - if (cpf == '' || cpf.length != 11) return false; - - var resto; - var soma = 0; - - if (cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999" || cpf == "12345678909") return false; - - for (i = 1; i <= 9; i++) soma = soma + parseInt(cpf.substring(i - 1, i)) * (11 - i); - resto = (soma * 10) % 11; - - if ((resto == 10) || (resto == 11)) resto = 0; - if (resto != parseInt(cpf.substring(9, 10))) return false; - - soma = 0; - for (i = 1; i <= 10; i++) soma = soma + parseInt(cpf.substring(i - 1, i)) * (12 - i); - resto = (soma * 10) % 11; - - if ((resto == 10) || (resto == 11)) resto = 0; - if (resto != parseInt(cpf.substring(10, 11))) return false; - return true; - } - - function verifyCNPJ(cnpj) { - cnpj = cnpj.replace(/[^\d]+/g, ''); - - if (cnpj == '' || cnpj.length != 14) return false; - - if (cnpj == "00000000000000" || cnpj == "11111111111111" || cnpj == "22222222222222" || cnpj == "33333333333333" || cnpj == "44444444444444" || cnpj == "55555555555555" || cnpj == "66666666666666" || cnpj == "77777777777777" || cnpj == "88888888888888" || cnpj == "99999999999999") return false; - - var tamanho = cnpj.length - 2 - var numeros = cnpj.substring(0, tamanho); - var digitos = cnpj.substring(tamanho); - var soma = 0; - var pos = tamanho - 7; - - for (i = tamanho; i >= 1; i--) { - soma += numeros.charAt(tamanho - i) * pos--; - if (pos < 2) - pos = 9; - } - - var resultado = soma % 11 < 2 ? 0 : 11 - soma % 11; - - if (resultado != digitos.charAt(0)) return false; - - tamanho = tamanho + 1; - numeros = cnpj.substring(0, tamanho); - soma = 0; - pos = tamanho - 7; - - for (i = tamanho; i >= 1; i--) { - soma += numeros.charAt(tamanho - i) * pos--; - if (pos < 2) pos = 9; - } - - resultado = soma % 11 < 2 ? 0 : 11 - soma % 11; - - if (resultado != digitos.charAt(1)) return false; - - return true; - } - - function verifyPhone(phone_number) { - if (phone_number.length < 14) { - showError("O telefone informado é inválido."); - return false; - } else { - var pattern = new RegExp(/^[1-9]{2}9?[0-9]{8}$/); - if (pattern.test(phone_number.replace(/[^\d]+/g, ''))) { - hideError(); - return true; - } else { - return false; - } - } - } - - function verifyEmail(email) { - var pattern = new RegExp(/^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*(([ \t]*\r\n)?[ \t]+)?")@(([a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.)+([a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.?$/); - return pattern.test(email); - } - - function verifyBirthDate(birth) { - var pattern = new RegExp(/^[12][0-9]{3}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])$/); - var date = birth.split("/"); - return pattern.test(date[2] + "-" + date[1] + "-" + date[0]); - } - - function scrollToTop() { - $("html, body").animate({ scrollTop: $("#wc-gerencianet-messages").offset().top - 80 }, "slow"); - } - -})(jQuery); - -function getCardBrand(dirtynumber) { - let other = ' '; - let visa = ` `; - let mastercard = ` `; - let diners = ` `; - let amex = ` `; - let elo = '' - let hipercard = '' - + ''; - - var cardnumber = dirtynumber.replace(/[^0-9]+/g, ''); - cardnumber = cardnumber.replaceAll(" ", ""); - - var brands = [ - { - reg: /^4[0-9]{12}(?:[0-9]{3})/, - name: "visa" - }, - { - reg: /^5[1-5][0-9]{14}/, - name: "mastercard" - }, - { - reg: /^3(?:0[0-5]|[68][0-9])[0-9]{11}/, - name: "diners" - }, - { - reg: /^3[47][0-9]{13}/, - name: "amex" - }, - { - reg: /^((((636368)|(438935)|(504175)|(451416)|(636297))\d{0,10})|((5067)|(4576)|(4011))\d{0,12})/, - name: "elo" - }, - { - reg: /^(606282\d{10}(\d{3})?)|(3841\d{15})/, - name: "hipercard" - } - ]; - - let final = ""; - brands.forEach(brand => { - if (brand.reg.test(cardnumber)) { - final = brand.name; - } - }); - - - - switch (final) { - case "visa": - document.getElementById('icon-div').innerHTML = visa; - break - case "mastercard": - document.getElementById('icon-div').innerHTML = mastercard; - break; - case "diners": - document.getElementById('icon-div').innerHTML = diners; - break; - case "amex": - document.getElementById('icon-div').innerHTML = amex; - break; - case "elo": - document.getElementById('icon-div').innerHTML = elo; - break; - case "hipercard": - document.getElementById('icon-div').innerHTML = hipercard; - break; - default: - document.getElementById('icon-div').innerHTML = other; - } - document.getElementById(final).click(); -} \ No newline at end of file diff --git a/manual/woo-gerencianet-official/assets/js/jquery.mask.js b/manual/woo-gerencianet-official/assets/js/jquery.mask.js deleted file mode 100755 index e8d1ed58..00000000 --- a/manual/woo-gerencianet-official/assets/js/jquery.mask.js +++ /dev/null @@ -1,540 +0,0 @@ -/** - * jquery.mask.js - * @version: v1.14.10 - * @author: Igor Escobar - * - * Created by Igor Escobar on 2012-03-10. Please report any bug at http://blog.igorescobar.com - * - * Copyright (c) 2012 Igor Escobar http://blog.igorescobar.com - * - * The MIT License (http://www.opensource.org/licenses/mit-license.php) - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -/* jshint laxbreak: true */ -/* jshint maxcomplexity:17 */ -/* global define */ - -'use strict'; - -// UMD (Universal Module Definition) patterns for JavaScript modules that work everywhere. -// https://github.com/umdjs/umd/blob/master/jqueryPluginCommonjs.js -(function (factory, jQuery, Zepto) { - - if (typeof define === 'function' && define.amd) { - define(['jquery'], factory); - } else if (typeof exports === 'object') { - module.exports = factory(require('jquery')); - } else { - factory(jQuery || Zepto); - } - -}(function ($) { - - var Mask = function (el, mask, options) { - - var p = { - invalid: [], - getCaret: function () { - try { - var sel, - pos = 0, - ctrl = el.get(0), - dSel = document.selection, - cSelStart = ctrl.selectionStart; - - // IE Support - if (dSel && navigator.appVersion.indexOf('MSIE 10') === -1) { - sel = dSel.createRange(); - sel.moveStart('character', -p.val().length); - pos = sel.text.length; - } - // Firefox support - else if (cSelStart || cSelStart === '0') { - pos = cSelStart; - } - - return pos; - } catch (e) {} - }, - setCaret: function(pos) { - try { - if (el.is(':focus')) { - var range, ctrl = el.get(0); - - // Firefox, WebKit, etc.. - if (ctrl.setSelectionRange) { - ctrl.setSelectionRange(pos, pos); - } else { // IE - range = ctrl.createTextRange(); - range.collapse(true); - range.moveEnd('character', pos); - range.moveStart('character', pos); - range.select(); - } - } - } catch (e) {} - }, - events: function() { - el - .on('keydown.mask', function(e) { - el.data('mask-keycode', e.keyCode || e.which); - el.data('mask-previus-value', el.val()); - }) - .on($.jMaskGlobals.useInput ? 'input.mask' : 'keyup.mask', p.behaviour) - .on('paste.mask drop.mask', function() { - setTimeout(function() { - el.keydown().keyup(); - }, 100); - }) - .on('change.mask', function(){ - el.data('changed', true); - }) - .on('blur.mask', function(){ - if (oldValue !== p.val() && !el.data('changed')) { - el.trigger('change'); - } - el.data('changed', false); - }) - // it's very important that this callback remains in this position - // otherwhise oldValue it's going to work buggy - .on('blur.mask', function() { - oldValue = p.val(); - }) - // select all text on focus - .on('focus.mask', function (e) { - if (options.selectOnFocus === true) { - $(e.target).select(); - } - }) - // clear the value if it not complete the mask - .on('focusout.mask', function() { - if (options.clearIfNotMatch && !regexMask.test(p.val())) { - p.val(''); - } - }); - }, - getRegexMask: function() { - var maskChunks = [], translation, pattern, optional, recursive, oRecursive, r; - - for (var i = 0; i < mask.length; i++) { - translation = jMask.translation[mask.charAt(i)]; - - if (translation) { - - pattern = translation.pattern.toString().replace(/.{1}$|^.{1}/g, ''); - optional = translation.optional; - recursive = translation.recursive; - - if (recursive) { - maskChunks.push(mask.charAt(i)); - oRecursive = {digit: mask.charAt(i), pattern: pattern}; - } else { - maskChunks.push(!optional && !recursive ? pattern : (pattern + '?')); - } - - } else { - maskChunks.push(mask.charAt(i).replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')); - } - } - - r = maskChunks.join(''); - - if (oRecursive) { - r = r.replace(new RegExp('(' + oRecursive.digit + '(.*' + oRecursive.digit + ')?)'), '($1)?') - .replace(new RegExp(oRecursive.digit, 'g'), oRecursive.pattern); - } - - return new RegExp(r); - }, - destroyEvents: function() { - el.off(['input', 'keydown', 'keyup', 'paste', 'drop', 'blur', 'focusout', ''].join('.mask ')); - }, - val: function(v) { - var isInput = el.is('input'), - method = isInput ? 'val' : 'text', - r; - - if (arguments.length > 0) { - if (el[method]() !== v) { - el[method](v); - } - r = el; - } else { - r = el[method](); - } - - return r; - }, - calculateCaretPosition: function(caretPos, newVal) { - var newValL = newVal.length, - oValue = el.data('mask-previus-value') || '', - oValueL = oValue.length; - - // edge cases when erasing digits - if (el.data('mask-keycode') === 8 && oValue !== newVal) { - caretPos = caretPos - (newVal.slice(0, caretPos).length - oValue.slice(0, caretPos).length); - - // edge cases when typing new digits - } else if (oValue !== newVal) { - // if the cursor is at the end keep it there - if (caretPos >= oValueL) { - caretPos = newValL; - } else { - caretPos = caretPos + (newVal.slice(0, caretPos).length - oValue.slice(0, caretPos).length); - } - } - - return caretPos; - }, - behaviour: function(e) { - e = e || window.event; - p.invalid = []; - - var keyCode = el.data('mask-keycode'); - - if ($.inArray(keyCode, jMask.byPassKeys) === -1) { - var newVal = p.getMasked(), - caretPos = p.getCaret(); - - setTimeout(function(caretPos, newVal) { - p.setCaret(p.calculateCaretPosition(caretPos, newVal)); - }, 10, caretPos, newVal); - - p.val(newVal); - p.setCaret(caretPos); - return p.callbacks(e); - } - }, - getMasked: function(skipMaskChars, val) { - var buf = [], - value = val === undefined ? p.val() : val + '', - m = 0, maskLen = mask.length, - v = 0, valLen = value.length, - offset = 1, addMethod = 'push', - resetPos = -1, - lastMaskChar, - check; - - if (options.reverse) { - addMethod = 'unshift'; - offset = -1; - lastMaskChar = 0; - m = maskLen - 1; - v = valLen - 1; - check = function () { - return m > -1 && v > -1; - }; - } else { - lastMaskChar = maskLen - 1; - check = function () { - return m < maskLen && v < valLen; - }; - } - - var lastUntranslatedMaskChar; - while (check()) { - var maskDigit = mask.charAt(m), - valDigit = value.charAt(v), - translation = jMask.translation[maskDigit]; - - if (translation) { - if (valDigit.match(translation.pattern)) { - buf[addMethod](valDigit); - if (translation.recursive) { - if (resetPos === -1) { - resetPos = m; - } else if (m === lastMaskChar) { - m = resetPos - offset; - } - - if (lastMaskChar === resetPos) { - m -= offset; - } - } - m += offset; - } else if (valDigit === lastUntranslatedMaskChar) { - // matched the last untranslated (raw) mask character that we encountered - // likely an insert offset the mask character from the last entry; fall - // through and only increment v - lastUntranslatedMaskChar = undefined; - } else if (translation.optional) { - m += offset; - v -= offset; - } else if (translation.fallback) { - buf[addMethod](translation.fallback); - m += offset; - v -= offset; - } else { - p.invalid.push({p: v, v: valDigit, e: translation.pattern}); - } - v += offset; - } else { - if (!skipMaskChars) { - buf[addMethod](maskDigit); - } - - if (valDigit === maskDigit) { - v += offset; - } else { - lastUntranslatedMaskChar = maskDigit; - } - - m += offset; - } - } - - var lastMaskCharDigit = mask.charAt(lastMaskChar); - if (maskLen === valLen + 1 && !jMask.translation[lastMaskCharDigit]) { - buf.push(lastMaskCharDigit); - } - - return buf.join(''); - }, - callbacks: function (e) { - var val = p.val(), - changed = val !== oldValue, - defaultArgs = [val, e, el, options], - callback = function(name, criteria, args) { - if (typeof options[name] === 'function' && criteria) { - options[name].apply(this, args); - } - }; - - callback('onChange', changed === true, defaultArgs); - callback('onKeyPress', changed === true, defaultArgs); - callback('onComplete', val.length === mask.length, defaultArgs); - callback('onInvalid', p.invalid.length > 0, [val, e, el, p.invalid, options]); - } - }; - - el = $(el); - var jMask = this, oldValue = p.val(), regexMask; - - mask = typeof mask === 'function' ? mask(p.val(), undefined, el, options) : mask; - - // public methods - jMask.mask = mask; - jMask.options = options; - jMask.remove = function() { - var caret = p.getCaret(); - p.destroyEvents(); - p.val(jMask.getCleanVal()); - p.setCaret(caret); - return el; - }; - - // get value without mask - jMask.getCleanVal = function() { - return p.getMasked(true); - }; - - // get masked value without the value being in the input or element - jMask.getMaskedVal = function(val) { - return p.getMasked(false, val); - }; - - jMask.init = function(onlyMask) { - onlyMask = onlyMask || false; - options = options || {}; - - jMask.clearIfNotMatch = $.jMaskGlobals.clearIfNotMatch; - jMask.byPassKeys = $.jMaskGlobals.byPassKeys; - jMask.translation = $.extend({}, $.jMaskGlobals.translation, options.translation); - - jMask = $.extend(true, {}, jMask, options); - - regexMask = p.getRegexMask(); - - if (onlyMask) { - p.events(); - p.val(p.getMasked()); - } else { - if (options.placeholder) { - el.attr('placeholder' , options.placeholder); - } - - // this is necessary, otherwise if the user submit the form - // and then press the "back" button, the autocomplete will erase - // the data. Works fine on IE9+, FF, Opera, Safari. - if (el.data('mask')) { - el.attr('autocomplete', 'off'); - } - - // detect if is necessary let the user type freely. - // for is a lot faster than forEach. - for (var i = 0, maxlength = true; i < mask.length; i++) { - var translation = jMask.translation[mask.charAt(i)]; - if (translation && translation.recursive) { - maxlength = false; - break; - } - } - - if (maxlength) { - el.attr('maxlength', mask.length); - } - - p.destroyEvents(); - p.events(); - - var caret = p.getCaret(); - p.val(p.getMasked()); - p.setCaret(caret); - } - }; - - jMask.init(!el.is('input')); - }; - - $.maskWatchers = {}; - var HTMLAttributes = function () { - var input = $(this), - options = {}, - prefix = 'data-mask-', - mask = input.attr('data-mask'); - - if (input.attr(prefix + 'reverse')) { - options.reverse = true; - } - - if (input.attr(prefix + 'clearifnotmatch')) { - options.clearIfNotMatch = true; - } - - if (input.attr(prefix + 'selectonfocus') === 'true') { - options.selectOnFocus = true; - } - - if (notSameMaskObject(input, mask, options)) { - return input.data('mask', new Mask(this, mask, options)); - } - }, - notSameMaskObject = function(field, mask, options) { - options = options || {}; - var maskObject = $(field).data('mask'), - stringify = JSON.stringify, - value = $(field).val() || $(field).text(); - try { - if (typeof mask === 'function') { - mask = mask(value); - } - return typeof maskObject !== 'object' || stringify(maskObject.options) !== stringify(options) || maskObject.mask !== mask; - } catch (e) {} - }, - eventSupported = function(eventName) { - var el = document.createElement('div'), isSupported; - - eventName = 'on' + eventName; - isSupported = (eventName in el); - - if ( !isSupported ) { - el.setAttribute(eventName, 'return;'); - isSupported = typeof el[eventName] === 'function'; - } - el = null; - - return isSupported; - }; - - $.fn.mask = function(mask, options) { - options = options || {}; - var selector = this.selector, - globals = $.jMaskGlobals, - interval = globals.watchInterval, - watchInputs = options.watchInputs || globals.watchInputs, - maskFunction = function() { - if (notSameMaskObject(this, mask, options)) { - return $(this).data('mask', new Mask(this, mask, options)); - } - }; - - $(this).each(maskFunction); - - if (selector && selector !== '' && watchInputs) { - clearInterval($.maskWatchers[selector]); - $.maskWatchers[selector] = setInterval(function(){ - $(document).find(selector).each(maskFunction); - }, interval); - } - return this; - }; - - $.fn.masked = function(val) { - return this.data('mask').getMaskedVal(val); - }; - - $.fn.unmask = function() { - clearInterval($.maskWatchers[this.selector]); - delete $.maskWatchers[this.selector]; - return this.each(function() { - var dataMask = $(this).data('mask'); - if (dataMask) { - dataMask.remove().removeData('mask'); - } - }); - }; - - $.fn.cleanVal = function() { - return this.data('mask').getCleanVal(); - }; - - $.applyDataMask = function(selector) { - selector = selector || $.jMaskGlobals.maskElements; - var $selector = (selector instanceof $) ? selector : $(selector); - $selector.filter($.jMaskGlobals.dataMaskAttr).each(HTMLAttributes); - }; - - var globals = { - maskElements: 'input,td,span,div', - dataMaskAttr: '*[data-mask]', - dataMask: true, - watchInterval: 300, - watchInputs: true, - // old versions of chrome dont work great with input event - useInput: !/Chrome\/[2-4][0-9]|SamsungBrowser/.test(window.navigator.userAgent) && eventSupported('input'), - watchDataMask: false, - byPassKeys: [9, 16, 17, 18, 36, 37, 38, 39, 40, 91], - translation: { - '0': {pattern: /\d/}, - '9': {pattern: /\d/, optional: true}, - '#': {pattern: /\d/, recursive: true}, - 'A': {pattern: /[a-zA-Z0-9]/}, - 'S': {pattern: /[a-zA-Z]/} - } - }; - - $.jMaskGlobals = $.jMaskGlobals || {}; - globals = $.jMaskGlobals = $.extend(true, {}, globals, $.jMaskGlobals); - - // looking for inputs with data-mask attribute - if (globals.dataMask) { - $.applyDataMask(); - } - - setInterval(function() { - if ($.jMaskGlobals.watchDataMask) { - $.applyDataMask(); - } - }, globals.watchInterval); -}, window.jQuery, window.Zepto)); diff --git a/manual/woo-gerencianet-official/assets/js/jquery.mask.min.js b/manual/woo-gerencianet-official/assets/js/jquery.mask.min.js deleted file mode 100755 index 6efd63f0..00000000 --- a/manual/woo-gerencianet-official/assets/js/jquery.mask.min.js +++ /dev/null @@ -1,14 +0,0 @@ -// jQuery Mask Plugin v1.13.9 -// github.com/igorescobar/jQuery-Mask-Plugin -(function(a){"function"===typeof define&&define.amd?define(["jquery"],a):"object"===typeof exports?module.exports=a(require("jquery")):a(jQuery||Zepto)})(function(a){var x=function(c,e,d){var b={invalid:[],getCaret:function(){try{var r,a=0,e=c.get(0),f=document.selection,d=e.selectionStart;if(f&&-1===navigator.appVersion.indexOf("MSIE 10"))r=f.createRange(),r.moveStart("character",-b.val().length),a=r.text.length;else if(d||"0"===d)a=d;return a}catch(h){}},setCaret:function(r){try{if(c.is(":focus")){var b; -b=c.get(0).createTextRange();b.collapse(!0);b.moveEnd("character",r);b.moveStart("character",r);b.select()}}catch(a){}},events:function(){c.on("keydown.mask",function(b){c.data("mask-keycode",b.keyCode||b.which)}).on(a.jMaskGlobals.useInput?"input.mask":"keyup.mask",b.behaviour).on("paste.mask drop.mask",function(){setTimeout(function(){c.keydown().keyup()},100)}).on("change.mask",function(){c.data("changed",!0)}).on("blur.mask",function(){n===b.val()||c.data("changed")||c.trigger("change");c.data("changed", -!1)}).on("blur.mask",function(){n=b.val()}).on("focus.mask",function(b){!0===d.selectOnFocus&&a(b.target).select()}).on("focusout.mask",function(){d.clearIfNotMatch&&!k.test(b.val())&&b.val("")})},getRegexMask:function(){for(var b=[],c,a,f,d,h=0;hid = 'gerencianet_oficial'; - $this->icon = apply_filters('woocommerce_gerencianet_oficial_icon', plugins_url('assets/images/gn-payment.png', plugin_dir_path(__FILE__))); - $this->has_fields = false; - $this->method_title = __('Gerencianet', WCGerencianetOficial::getTextDomain()); - $this->method_description = __('With Gerencianet you can receive payments via Boleto, Credit Card and Pix!', WCGerencianetOficial::getTextDomain()); - $this->supports = array( 'products', 'refunds' ); - - // Load the settings. - $this->init_form_fields(); - $this->init_settings(); - - // Payment methods. - $this->billet_banking = $this->get_option('billet_banking'); - $this->credit_card = $this->get_option('credit_card'); - $this->pix = $this->get_option('pix'); - $this->pix_key = $this->get_option('pix_key'); - - // OSC option - $this->osc = $this->get_option('osc_option', 'no'); - - // Display payment options. - $format_title = ''; - if($this->billet_banking == 'yes') - { - $format_title = 'Boleto'; - } - - if($this->credit_card == 'yes') - { - $format_title = $this->billet_banking == 'yes' ? - $format_title. " ou Cartão de Crédito" : - $format_title. "Cartão de Crédito"; - } - if($this->pix == 'yes') - { - $format_title = $this->billet_banking == 'yes' || $this->credit_card == 'yes' ? - $format_title. " ou Pix" : - $format_title. "Pix"; - } - - $this->title = __($format_title, WCGerencianetOficial::getTextDomain()); - - if ($this->osc == 'no') { - $this->checkout_type = "checkout_page"; - } else { - $this->checkout_type = "OSC"; - } - - - if ($this->checkout_type == "OSC") { - $this->description = get_template(plugin_dir_path(dirname(__FILE__)) . 'templates/transparent-osc.php'); - } else { - $this->description = $this->get_option('description'); - } - - // Gateway options. - $this->invoice_prefix = $this->get_option('invoice_prefix', 'WC-'); - - // Billet options. - $this->billet = $this->get_option('billet', 'no'); - $this->billet_number_days = $this->get_option('billet_number_days', '5'); - $this->discountbillet = floatval(preg_replace('/[^0-9.]/', '', str_replace(",", ".", $this->get_option('billet_discount', '0')))); - $this->billet_discount_shipping = $this->get_option('billet_discount_shipping', 'total'); - - //Pix options. - $this->discountpix = floatval(preg_replace('/[^0-9.]/', '', str_replace(",", ".", $this->get_option('pix_discount', '0')))); - $this->pix_discount_shipping = $this->get_option('pix_discount_shipping', 'total'); - $this->pix_cert_name = $this->get_option('pix_cert_name'); - $this->pix_cert_file = $this->get_option('pix_cert_file'); - $this->expiration_pix = $this->get_option('pix_number_hours', '168'); // Valor default 1 semana - $this->pix_mtls = $this->get_option('pix_mtls'); - - $this->client_id_production = $this->get_option('client_id_production'); - $this->client_secret_production = $this->get_option('client_secret_production'); - $this->client_id_development = $this->get_option('client_id_development'); - $this->client_secret_development = $this->get_option('client_secret_development'); - $this->payee_code = $this->get_option('payee_code', ''); - - // Debug options. - $this->tlsOk = true; - $this->sandbox = $this->get_option('sandbox'); - $this->debug = $this->get_option('debug'); - $this->callback = $this->get_option('callback'); - - if ('yes' == $this->debug) { - if (!function_exists('write_log')) { - function write_log($log) - { - if (is_array($log) || is_object($log)) { - error_log(print_r($log, true)); - } else { - error_log($log); - } - } - } - } - - $this->gnIntegration = new GerencianetIntegration($this->client_id_production, $this->client_secret_production, $this->client_id_development, $this->client_secret_development, $this->sandbox, $this->payee_code); - - // Actions. - add_action('woocommerce_api_WC_Gerencianet_Oficial_Gateway', array($this, 'validate_notification')); - add_action('validate_notification_request', array($this, 'successful_request')); - - if ($this->osc == 'no') { - add_action('woocommerce_receipt_gerencianet_oficial', array($this, 'generate_gn_script'), 1); - } - - add_action('woocommerce_receipt_gerencianet_oficial', array($this, 'receipt_page')); - add_action('woocommerce_update_options_payment_gateways_' . $this->id, array($this, 'process_admin_options')); - add_action('woocommerce_thankyou_gerencianet_oficial', array($this, 'thankyou_page')); - - add_action('woocommerce_update_options_payment_gateways_' . $this->id, array($this, 'on_update_options')); - - // Display admin notices. - $this->admin_notices(); - } - - //REEMBOLSO - public function process_refund( $order_id, $amount = null, $reason = '' ) { - $order = new WC_Order( $order_id ); - - if ( ! $order ) { - // echo '

    ' . __('Order not found.', WCGerencianetOficial::getTextDomain()) . '

    '; - error_log("GERENCIANET: Pedido não encontrado"); - return false; - } - - $e2eid = get_post_meta($order->get_id(), 'endToEndId', true); - $apiID = get_post_meta($order->get_id(), 'charge_id', true); - - if(isset($e2eid) && $e2eid != ""){ - - if ( ! is_null( $amount ) ) { - // $symb = array(",", "."); - $value = str_replace(",", ".", $amount); - } - - error_log( "GERENCIANET: Beginning refund for PIX order {$e2eid} for the amount of {$value}" ); - $gnGateway = new WC_Gerencianet_Oficial_Gateway(); - $params = [ - 'e2eId' => $e2eid, - 'id' => $gnGateway->generateRandomId() - ]; - - $body = [ - 'valor' => $value - ]; - $options = Pix::get_gn_api_credentials($gnGateway->gnIntegration->get_gn_api_credentials()); - try { - $api = Gerencianet::getInstance($options); - $pix = $api->pixDevolution($params, $body); - $order->update_status('refund'); - error_log(json_encode($pix, JSON_PRETTY_PRINT)); - error_log("GERENCIANET: Devolução concluída com sucesso!"); - return true; - } catch (GerencianetException $e) { - error_log($e->code); - error_log($e->error); - error_log($e->errorDescription); - error_log("GERENCIANET: Falha ao realizar a devolução."); - return false; - throw new Error($e->error); - } catch (Exception $e) { - throw new Error($e->getMessage()); - return false; - } - }else if(isset($apiID)){ - error_log( "GERENCIANET: Tentativa de reembolso via API BOLETOS/CARTÃO pedido {$apiID} valor {$amount}" ); - error_log("GERENCIANET: Não é possível realizar reembolso automático para boletos ou cartões. Entre em contato com a Gerencianet."); - return false; - }else{ - error_log("GERENCIANET: Não foi encontrado E2EID ou CHARGE_ID nesse pedido."); - error_log("GERENCIANET: Esse pedido pode ter sido pago em outra instituição de pagamento."); - return false; - } - - - } - - public function generateRandomId() { - $length = 6; - $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; - $charactersLength = strlen($characters); - $randomString = ''; - for ($i = 0; $i < $length; $i++) { - $randomString .= $characters[rand(0, $charactersLength - 1)]; - } - return $randomString; - } - - - public function on_update_options() { - $this->save_pix_cert_db(); - $this->save_pix_cert_dir(); - Pix::updateWebhook($this, $this->get_option('pix_key')); - } - - public function save_pix_cert_db(){ - $file_id = 'woocommerce_gerencianet_oficial_pix_file'; - $file_name = $_FILES[$file_id]['name']; - if ($file_name) { - //get the file extension - $fileExt = explode('.', $file_name); - $fileActualExt = strtolower(end($fileExt)); - if ($fileActualExt != 'pem' && $fileActualExt != 'p12') { - echo '

    Tipo de arquivo inválido!

    '; - return; - } - if ($fileActualExt == 'p12') { - if (!$cert_file_p12 = file_get_contents($_FILES['woocommerce_gerencianet_oficial_pix_file']['tmp_name'])) { // Pega o conteúdo do arquivo .p12 - echo '

    Falha ao ler arquivo o .p12!

    '; - return; - } - if (!openssl_pkcs12_read($cert_file_p12, $cert_info_pem, "")) { // Converte o conteúdo para .pem - echo '

    Falha ao converter o arquivo .p12!

    '; - return; - } - $file_read = "subject=/CN=271207/C=BR\n"; - $file_read .= "issuer=/C=BR/ST=Minas Gerais/O=Gerencianet Pagamentos do Brasil Ltda/OU=Infraestrutura/CN=api-pix.gerencianet.com.br/emailAddress=infra@gerencianet.com.br\n"; - $file_read .= $cert_info_pem['cert']; - $file_read .= "Key Attributes: \n"; - $file_read .= $cert_info_pem['pkey']; - } - else { - //read the contents of the file - if (!$file_read = file_get_contents($_FILES['woocommerce_gerencianet_oficial_pix_file']['tmp_name'])) { // Pega o conteúdo do arquivo .p12 - echo '

    Falha ao ler arquivo o .pem!

    '; - return; - } - } - - if (isset($file_read)) { - $save_pix = array( - 'pix_cert_name' => $file_name, - 'pix_cert_file' => $file_read - ); - //column name in table WP_OPTIONS in mysql - $option_name = 'woocommerce_gerencianet_oficial_settings'; - //merge with the data saved in bd - $data = get_option($option_name); - $save_data = array_merge($data, $save_pix); - update_option($option_name, $save_data, true); - } - } - } - - //save file on temp directory - private function save_pix_cert_dir(){ - $pix_cert_file = $this->get_option('pix_cert_file'); - - //wordpress function to pick up the temp directory - $temp_dir = get_temp_dir(); - - $dir_gerencianet = $temp_dir.'gerencianet/'; - - if(!is_dir($dir_gerencianet)){ - mkdir($dir_gerencianet,0777,TRUE); - } - - //get all the files from the temp directory - $files_saved = glob($dir_gerencianet.'*'); - - //deleting saved file in the temp directory - if(!empty($files_saved)) { - foreach($files_saved as $file){ // iterate files - if(is_file($file)){ - unlink($file); // delete file - } - } - } - - $file = fopen(Pix::getCertPath(), 'w+'); - if($file) { - fwrite($file, $pix_cert_file); - fclose($file); - } - } - - - /** - * Backwards compatibility with version prior to 2.1. - * - * @return object Returns the main instance of WooCommerce class. - */ - protected function woocommerce_instance(){ - if (function_exists('WC')) { - return WC(); - } else { - global $woocommerce; - return $woocommerce; - } - } - - /** - * Displays notifications when the admin has something wrong with the configuration. - * - * @return void - */ - protected function admin_notices(){ - - if (is_admin()) { - // Valid for use. - if (empty($this->payee_code)) { - add_action('admin_notices', array($this, 'payee_code_missing_message')); - } - - if ($this->sandbox == "yes") { - add_action('admin_notices', array($this, 'sandbox_active_message')); - } - - if ('no' == $this->billet_banking && 'no' == $this->credit_card && 'no' == $this->pix) { - add_action('admin_notices', array($this, 'payment_option_missing_message')); - } - - if (empty($this->client_id_production) || empty($this->client_secret_production) || empty($this->client_id_development) || empty($this->client_secret_development)) { - add_action('admin_notices', array($this, 'credentials_missing_message')); - } - - // Checks that the currency is supported - if (!$this->using_supported_currency()) { - add_action('admin_notices', array($this, 'currency_not_supported_message')); - } - - $ch = curl_init(); - $options = array( - CURLOPT_URL => "https://tls.testegerencianet.com.br", - CURLOPT_RETURNTRANSFER => true, - CURLOPT_FOLLOWLOCATION => true, - CURLOPT_HEADER => false, // don't return headers - CURLOPT_MAXREDIRS => 10, // stop after 10 redirects - CURLOPT_AUTOREFERER => true, // set referrer on redirect - CURLOPT_CONNECTTIMEOUT => 5, // time-out on connect - CURLOPT_TIMEOUT => 5, // time-out on response - ); - curl_setopt_array($ch, $options); - $content = curl_exec($ch); - $info = curl_getinfo($ch); - - if (($info['http_code'] !== 200) && ($content !== 'Gerencianet_Connection_TLS1.2_OK!')) { - $this->tlsOk = false; - add_action('admin_notices', array($this, 'tls_incompatible')); - } else { - $this->tlsOk = true; - if (isset($_COOKIE["gnTestTlsLog"])) { - setcookie("gnTestTlsLog", false, time() - 1); - } - } - curl_close($ch); - - if (!$this->tlsOk && !isset($_COOKIE["gnTestTlsLog"])) { - setcookie("gnTestTlsLog", true); - // register log - $account = $this->payee_code; - $ip = $_SERVER['SERVER_ADDR']; - $modulo = 'woocomerce'; - $control = md5($account . $ip . 'modulologs-tls'); - $data = array( - 'user_agent' => $_SERVER['HTTP_USER_AGENT'], - 'modulo' => $modulo, - ); - $post = array( - 'control' => $control, - 'account' => $account, - 'ip' => $ip, - 'origin' => 'modulo', - 'data' => json_encode($data) - ); - $ch1 = curl_init(); - $options1 = array( - CURLOPT_URL => "https://fortunus.gerencianet.com.br/logs/tls", - CURLOPT_RETURNTRANSFER => true, - CURLOPT_FOLLOWLOCATION => true, - CURLOPT_HEADER => true, // don't return headers - CURLOPT_MAXREDIRS => 10, // stop after 10 redirects - CURLOPT_AUTOREFERER => true, // set referrer on redirect - CURLOPT_CONNECTTIMEOUT => 5, // time-out on connect - CURLOPT_TIMEOUT => 5, // time-out on response - CURLOPT_POST => true, - CURLOPT_POSTFIELDS => json_encode($post), - ); - curl_setopt_array($ch1, $options1); - $content1 = curl_exec($ch1); - $info1 = curl_getinfo($ch1); - curl_close($ch1); - } - } - } - - /** - * Returns a bool that indicates if currency is amongst the supported ones. - * - * @return bool - */ - public function using_supported_currency(){ - return ('BRL' == get_woocommerce_currency()); - } - - /** - * Returns a value indicating the the Gateway is available or not. It's called - * automatically by WooCommerce before allowing customers to use the gateway - * for payment. - * - * @return bool - */ - public function is_available(){ - // Check if all required credentials and configurations are defined to sucessfully active the module - $available = ('yes' == $this->settings['enabled']) && $this->using_supported_currency() && !empty($this->payee_code) && !empty($this->client_id_production) && !empty($this->client_secret_production) && !empty($this->client_id_development) && !empty($this->client_secret_development); - - return $available; - } - - /** - * Convert value to gn format - * - * @param float $number Product price - * - * @return int Formated price - */ - public function gn_price_format($value){ - - $value = number_format($value, 2, "", ""); - - return $value; - } - - /** - * Call plugin scripts in front-end. - * - * @return void - */ - public function scripts(){ - $jquery = 'jquery'; - if ($this->osc) { - wp_deregister_script('jquery'); - wp_register_script('jquery-wp', '/wp-includes/js/jquery/jquery.js', false); - wp_enqueue_script('jquery-wp'); - $jquery = 'jquery-wp'; - } - wp_deregister_script('jquery-mask'); - wp_register_script('jquery-mask', plugins_url('assets/js/jquery.mask.js', plugin_dir_path(__FILE__)), false); - wp_enqueue_script('jquery-mask'); - $jqueryMask = 'jquery-mask'; - - wp_enqueue_script('jquery-mask', plugins_url('assets/js/jquery.mask.js', plugin_dir_path(__FILE__)), array($jquery), '', true); - wp_enqueue_script('wc-gerencianet-checkout', plugins_url('assets/js/checkout.js', plugin_dir_path(__FILE__)), array($jqueryMask), '', true); - wp_localize_script( - 'wc-gerencianet-checkout', - 'woocommerce_gerencianet_api', - array( - 'ajax_url' => admin_url('admin-ajax.php'), - 'security' => wp_create_nonce('woocommerce_gerencianet'), - ) - ); - } - - /** - * Call plugin styles in front-end. - * - * @return void - */ - public function styles(){ - //save certificate in dir path - $this->save_pix_cert_dir(); - wp_enqueue_style('wc-gerencianet-checkout', plugins_url('assets/css/checkout.css', plugin_dir_path(__FILE__)), array(), '', 'all'); - } - - /** - * Admin Panel Options. - */ - public function admin_options(){ - wp_enqueue_style('wc-gerencianet-checkout', plugins_url('assets/css/admin.css', plugin_dir_path(__FILE__)), array(), '', 'all'); - wp_enqueue_script('wc-gerencianet', plugins_url('assets/js/admin.min.js', plugin_dir_path(__FILE__)), array('jquery'), '', true); - wp_enqueue_script('jquery'); - wp_enqueue_script('jquery-mask', plugins_url('assets/js/jquery.mask.min.js', plugin_dir_path(__FILE__)), array('jquery'), '', true); - - echo '

    ' . __('Gerencianet Payments - Official Module', WCGerencianetOficial::getTextDomain()) . ' v' . WCGerencianetOficial::VERSION . '

    '; - echo '

    ' . __('This module is the official module of Gerencianet Payment Gateway. If you have any doubths or suggestions, contact us at www.gerencianet.com.br', WCGerencianetOficial::getTextDomain()) . '

    '; - - // Generate the HTML For the settings form. - echo ''; - $this->generate_settings_html(); - echo '
    '; - - echo ' -
    -
    -
    -
    - Fechar X -
    -
    - -
    -
    '; - } - - /** - * Initialise Gateway Settings Form Fields. - * - * @return void - */ - public function init_form_fields(){ - - $this->form_fields = array( - 'enabled' => array( - 'title' => __('Enable/Disable', WCGerencianetOficial::getTextDomain()), - 'type' => 'checkbox', - 'label' => __('Enable Gerencianet Payments', WCGerencianetOficial::getTextDomain()), - 'default' => 'yes' - ), - 'title' => array( - 'title' => __('Title', WCGerencianetOficial::getTextDomain()), - 'type' => 'text', - 'description' => __('This controls the title which the user sees during checkout.', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - 'default' => __('Gerencianet', WCGerencianetOficial::getTextDomain()) - ), - 'description' => array( - 'title' => __('Description', WCGerencianetOficial::getTextDomain()), - 'type' => 'textarea', - 'description' => __('This controls the description which the user sees during checkout.', WCGerencianetOficial::getTextDomain()), - 'default' => __('Pay via gerencianet', WCGerencianetOficial::getTextDomain()) - ), - 'invoice_prefix' => array( - 'title' => __('Invoice Prefix', WCGerencianetOficial::getTextDomain()), - 'type' => 'text', - 'description' => __('Please enter a prefix for your invoice numbers. If you use your gerencianet account for multiple stores ensure this prefix is unqiue as gerencianet will not allow orders with the same invoice number.', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - 'default' => 'WC-' - ), - 'api_section' => array( - 'title' => __('Gerencianet Credentials', WCGerencianetOficial::getTextDomain()), - 'type' => 'title', - 'description' => __("Here you will find your credentials: Client ID/Secret Production, Client ID/Secret Development and Payee Code", WCGerencianetOficial::getTextDomain()), - ), - 'client_id_production' => array( - 'title' => __('Client Id Production', WCGerencianetOficial::getTextDomain()), - 'type' => 'text', - 'description' => __('Please enter your Client Id Production; this is needed in order to take payment.', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - 'default' => '' - ), - 'client_secret_production' => array( - 'title' => __('Client Secret Production', WCGerencianetOficial::getTextDomain()), - 'type' => 'text', - 'description' => __('Please enter your Client Secret Production; this is needed in order to take payment.', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - 'default' => '' - ), - 'client_id_development' => array( - 'title' => __('Client ID Development', WCGerencianetOficial::getTextDomain()), - 'type' => 'text', - 'description' => __('Please enter your Client Id Development; this is needed to test payment.', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - 'default' => '' - ), - 'client_secret_development' => array( - 'title' => __('Client Secret Development', WCGerencianetOficial::getTextDomain()), - 'type' => 'text', - 'description' => __('Please enter your Client Secret Development; this is needed to test payment.', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - 'default' => '' - ), - 'payee_code' => array( - 'title' => __('Payee Code', WCGerencianetOficial::getTextDomain()), - 'type' => 'text', - 'description' => __('Please enter your account payee code; this is needed in order to take payment.', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - 'default' => '' - ), - 'osc_section' => array( - 'title' => __('One Step Checkout', WCGerencianetOficial::getTextDomain()), - 'type' => 'title', - 'description' => __('This option allow the payment direct on checkout page. Before use on production, please do some test payments in sandbox mode to verify if it is compatible with your store.', WCGerencianetOficial::getTextDomain()), - ), - 'osc_option' => array( - 'title' => __('One Step Checkout', WCGerencianetOficial::getTextDomain()), - 'type' => 'checkbox', - 'label' => __('Enable One Step Checkout', WCGerencianetOficial::getTextDomain()), - 'default' => 'no' - ), - 'payment_section' => array( - 'title' => __('Payment Settings', WCGerencianetOficial::getTextDomain()), - 'type' => 'title', - 'description' => __('These options need to be available to you in your gerencianet account.', WCGerencianetOficial::getTextDomain()), - ), - 'billet_banking' => array( - 'title' => __('Boleto', WCGerencianetOficial::getTextDomain()), - 'type' => 'checkbox', - 'label' => __('Enable Boleto', WCGerencianetOficial::getTextDomain()), - 'default' => 'no' - ), - 'credit_card' => array( - 'title' => __('Credit Card', WCGerencianetOficial::getTextDomain()), - 'type' => 'checkbox', - 'label' => __('Enable Credit Card', WCGerencianetOficial::getTextDomain()), - 'default' => 'no' - ), - 'pix' => array( - 'title' => __('Pix', WCGerencianetOficial::getTextDomain()), - 'type' => 'checkbox', - 'label' => __('Enable Pix', WCGerencianetOficial::getTextDomain()), - 'default' => 'no' - ), - 'pix_section' => array( - 'title' => __('Pix Settings', WCGerencianetOficial::getTextDomain()), - 'type' => 'title', - 'description' => '', - ), - 'pix_key' => array( - 'title' => __('Pix Key', WCGerencianetOficial::getTextDomain()), - 'type' => 'text', - 'description' => __('Insert your Pix Key', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - 'placeholder' => '', - 'default' => '' - ), - 'pix_file' => array( - 'title' => __('Pix Certificate', WCGerencianetOficial::getTextDomain()), - 'type' => 'file', - 'description' => __('Please enter your certificate', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - ), - 'pix_cert_name' => array( - 'title' => __('Pix Certificate save', WCGerencianetOficial::getTextDomain()), - 'type' => 'text', - 'description' => __('Certificate save', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - 'default' => 'Nenhum arquivo salvo', - ), - 'pix_discount' => array( - 'title' => __('Pix discount', WCGerencianetOficial::getTextDomain()), - 'type' => 'text', - 'description' => __('Discount for payment with Pix', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - 'placeholder' => '0%', - 'default' => '0%' - ), - 'pix_discount_shipping' => array( - 'title' => __('Apply discount mode', WCGerencianetOficial::getTextDomain()), - 'type' => 'select', - 'description' => __('Choose mode of discount.', WCGerencianetOficial::getTextDomain()), - 'default' => 'total', - 'options' => array( - 'total' => __('Apply discount on total value with Shipping', WCGerencianetOficial::getTextDomain()), - 'products' => __('Apply discount just on products price', WCGerencianetOficial::getTextDomain()), - ) - ), - 'pix_number_hours' => array( - 'title' => __('Number of Hours', WCGerencianetOficial::getTextDomain()), - 'type' => 'text', - 'description' => __('Hours to expire the pix after printed', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - 'placeholder' => '1', - 'default' => '1' - ), - 'pix_mtls' => array( - 'title' => __('Validate mTLS', WCGerencianetOficial::getTextDomain()), - 'type' => 'checkbox', - 'description' => __('Understand the risks of not configuring mTLS by accessing the link https://gnetbr.com/rke4baDVyd', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - 'default' => 'no' - ), - 'billet_section' => array( - 'title' => __('Boleto Settings', WCGerencianetOficial::getTextDomain()), - 'type' => 'title', - 'description' => '', - ), - 'billet_unpaid' => array( - 'title' => __('Cancel unpaid Boletos?', WCGerencianetOficial::getTextDomain()), - 'type' => 'checkbox', - 'label' => __('Enable cancellation of unpaid Boletos', WCGerencianetOficial::getTextDomain()), - 'description' => __('When enabled, cancels all Boletos that have not been paid. Preventing the customer from paying the Boleto after the due date.', WCGerencianetOficial::getTextDomain()), - 'default' => 'no' - ), - 'billet_discount' => array( - 'title' => __('Boleto discount', WCGerencianetOficial::getTextDomain()), - 'type' => 'text', - 'description' => __('Discount for payment with Boleto.', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - 'placeholder' => '0%', - 'default' => '0%' - ), - 'billet_discount_shipping' => array( - 'title' => __('Apply discount mode', WCGerencianetOficial::getTextDomain()), - 'type' => 'select', - 'description' => __('Choose mode of discount.', WCGerencianetOficial::getTextDomain()), - 'default' => 'total', - 'options' => array( - 'total' => __('Apply discount on total value with Shipping', WCGerencianetOficial::getTextDomain()), - 'products' => __('Apply discount just on products price', WCGerencianetOficial::getTextDomain()), - ) - ), - 'billet_number_days' => array( - 'title' => __('Number of Days', WCGerencianetOficial::getTextDomain()), - 'type' => 'text', - 'description' => __('Days to expire the Boleto after printed.', WCGerencianetOficial::getTextDomain()), - 'desc_tip' => true, - 'placeholder' => '5', - 'default' => '5' - ), - 'callback_section' => array( - 'title' => __('Callback', WCGerencianetOficial::getTextDomain()), - 'type' => 'title', - 'description' => '', - ), - 'callback' => array( - 'title' => __('Auto order status update', WCGerencianetOficial::getTextDomain()), - 'type' => 'checkbox', - 'label' => __('Enable order auto update', WCGerencianetOficial::getTextDomain()), - 'default' => 'yes' - ), - 'sandbox_section' => array( - 'title' => __('Tests', WCGerencianetOficial::getTextDomain()), - 'type' => 'title', - 'description' => '', - ), - 'sandbox' => array( - 'title' => __('Sandbox', WCGerencianetOficial::getTextDomain()), - 'type' => 'checkbox', - 'label' => __('Enable gerencianet sandbox', WCGerencianetOficial::getTextDomain()), - 'default' => 'no' - ), - 'debug' => array( - 'title' => __('Debug', WCGerencianetOficial::getTextDomain()), - 'type' => 'checkbox', - 'label' => __('Enable debug for Gerencianet', WCGerencianetOficial::getTextDomain()), - 'default' => 'no' - ) - ); - } - - /** - * Add error message in checkout. - * - * @param string $message Error message. - * - * @return string - */ - public function add_error($message){ - wc_add_notice($message, 'error'); - } - - public function gerencianet_validate_credentials(){ - - $gnApiResult = $this->gnIntegration->validate_credentials($_POST['client_id'], $_POST['client_secret'], $_POST['mode']); - - return $gnApiResult; - } - - /** - * Request Gerencianet API Installments. - * - * @return string - */ - public function gerencianet_get_installments(){ - $WC = $this->woocommerce_instance(); - $post_order_id = sanitize_text_field($_POST['order_id']); - $post_brand = sanitize_text_field($_POST['brand']); - $order_total = (int)preg_replace("/[^0-9]/", "", $_POST['order_total']); - - if ($post_order_id == "") { - $value = $WC->cart->get_cart_total(); - $shipping = $WC->cart->get_cart_shipping_total(); - $tax = $WC->cart->get_cart_tax(); - // $total = ((int)preg_replace("/[^0-9]/", "", html_entity_decode($value)) + (int)preg_replace("/[^0-9]/", "", html_entity_decode($shipping)) + (int)preg_replace("/[^0-9]/", "", html_entity_decode($tax))); - $total = $order_total; - } else { - $meta_discount_value_array = get_post_meta(intval($post_order_id), 'billet_discount_value'); - if (isset($meta_discount_value_array[0])) { - $meta_discount_value = $meta_discount_value_array[0]; - } else { - $meta_discount_value = 0; - } - $order = wc_get_order($post_order_id); - $total = $this->gn_price_format($order->get_total()) + $meta_discount_value; - } - - - $brand = esc_attr($post_brand); - $gnApiResult = $this->gnIntegration->get_installments($total, $brand); - - $resultCheck = array(); - $resultCheck = json_decode($gnApiResult, true); - - if (isset($resultCheck["code"])) { - if ($resultCheck["code"] == 200) { - if ('yes' == $this->debug) { - write_log('GERENCIANET :: gerencianet_get_installments Request : SUCCESS'); - } - } else { - if ('yes' == $this->debug) { - write_log('GERENCIANET :: gerencianet_get_installments Request : ERROR'); - } - } - } - - return $gnApiResult; - } - - /** - * Request Gerencianet API Create Charge. - * - * @return string - */ - public function gerencianet_create_charge($checkout_type, $order_id) - { - - if ($checkout_type == "OSC") { - $post_order_id = $order_id; - } else { - if (count($_POST) < 1) { - $errorResponse = array( - "message" => __("An error occurred during your request. Please, try again.", WCGerencianetOficial::getTextDomain()) - ); - - return json_encode($errorResponse); - } - - $arrayDadosPost = array(); - foreach ($_POST as $key => $value) { - $arrayDadosPost[$key] = sanitize_text_field($value); - } - - $post_order_id = $arrayDadosPost['order_id']; - } - - $order = wc_get_order($post_order_id); - - $order_items = $order->get_items(); - - $items = array(); - foreach ($order_items as $items_key => $item) { - $items[] = array( - "name" => $item['name'], - "value" => (int)$this->gn_price_format($item['line_subtotal'] / $item['qty']), - "amount" => (int)$item['qty'] - ); - } - - $total_taxes = $order->get_total_tax(); - if ($total_taxes > 0) { - array_push( - $items, - array( - "name" => "Impostos Gerais", - "value" => (int)$this->gn_price_format($total_taxes), - "amount" => 1 - ) - ); - } - - if ($this->gn_price_format($order->get_total_shipping()) > 0) { - $shipping = array( - array( - 'name' => $order->get_shipping_method(), - 'value' => (int)$this->gn_price_format($order->get_total_shipping()) - ) - ); - } else { - $shipping = null; - } - - $gnApiResult = $this->gnIntegration->create_charge($post_order_id, $items, $shipping, WC()->api_request_url('WC_Gerencianet_Oficial_Gateway')); - - $resultCheck = array(); - $resultCheck = json_decode($gnApiResult, true); - - if (isset($resultCheck["code"])) { - if ($resultCheck["code"] == 200) { - if ('yes' == $this->debug) { - write_log('GERENCIANET :: gerencianet_create_charge Request : SUCCESS'); - } - } else { - if ('yes' == $this->debug) { - write_log('GERENCIANET :: gerencianet_create_charge Request : ERROR : ' . $resultCheck["code"]); - } - } - } else { - if ('yes' == $this->debug) { - write_log('GERENCIANET :: gerencianet_create_charge Request : ERROR : Ajax Request Fail'); - } - } - - return $gnApiResult; - } - - /** - * Request Gerencianet API Pay Charge with billet. - * - * @return string - */ - public function gerencianet_pay_billet($checkout_type, $order_id, $charge_id) - { - - $billetExpireDays = $this->billet_number_days; - - $expirationDate = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") + intval($billetExpireDays), date("Y"))); - - if (count($_POST) < 1) { - $errorResponse = array( - "message" => __("An error occurred during your request. Please, try again.", WCGerencianetOficial::getTextDomain()) - ); - - return json_encode($errorResponse); - } - - $arrayDadosPost = array(); - foreach ($_POST as $key => $value) { - if ($key != "email") { - $arrayDadosPost[$key] = sanitize_text_field($value); - } else { - $arrayDadosPost[$key] = $value; - } - } - - - if ($checkout_type == "OSC") { - $post_order_id = $order_id; - $post_name_corporate = $arrayDadosPost['gn_billet_name_corporate']; - $post_cpf_cnpj = preg_replace('/[^0-9]/', '', $arrayDadosPost['gn_billet_cpf_cnpj']); - $post_email = sanitize_email($arrayDadosPost['gn_billet_email']); - $post_charge_id = $charge_id; - } else { - - $post_order_id = $arrayDadosPost['order_id']; - $post_name_corporate = $arrayDadosPost['name_corporate']; - $post_cpf_cnpj = $arrayDadosPost['cpf_cnpj']; - $post_email = sanitize_email($arrayDadosPost['email']); - $post_charge_id = $arrayDadosPost['charge_id']; - } - - if (strlen($post_cpf_cnpj) > 11) { - $juridical_data = array( - 'corporate_name' => $post_name_corporate, - 'cnpj' => $post_cpf_cnpj - ); - - $customer = array( - 'email' => $post_email, - 'juridical_person' => $juridical_data - ); - } else { - $customer = array( - 'name' => $post_name_corporate, - 'cpf' => $post_cpf_cnpj, - 'email' => $post_email - ); - } - - $order = wc_get_order($post_order_id); - - if ($this->gn_price_format($order->get_total_shipping()) > 0) { - $totalShipping = (int)$this->gn_price_format($order->get_total_shipping()); - } else { - $totalShipping = 0; - } - - if ($this->gn_price_format($order->get_total_tax()) > 0) { - $totalTax = (int)$this->gn_price_format($order->get_total_tax()); - } else { - $totalTax = 0; - } - - $meta_discount_value_array = get_post_meta(intval($post_order_id), 'billet_discount_value'); - - if ($order->get_status() == "failed" || isset($meta_discount_value_array[0])) { - $discountBillet = $this->discountbillet; - $discountTotalValue = (int)($this->gn_price_format($order->get_total_discount())); - if ($this->billet_discount_shipping == "products") { - $discountBilletTotal = (int)floor(($this->gn_price_format($order->get_total()) - $totalShipping - $totalTax) * (((float)$discountBillet / 100))); - } else { - $discountBilletTotal = (int)floor(($this->gn_price_format($order->get_total())) * (((float)$discountBillet / 100))); - } - } else { - $discountBillet = $this->discountbillet; - if ($this->billet_discount_shipping == "products") { - $discountTotalValue = (int)($this->gn_price_format($order->get_total_discount()) + floor(($this->gn_price_format($order->get_total()) - $totalShipping - $totalTax) * (((float)$discountBillet / 100)))); - $discountBilletTotal = (int)floor(($this->gn_price_format($order->get_total()) - $totalShipping - $totalTax) * (((float)$discountBillet / 100))); - } else { - $discountTotalValue = (int)($this->gn_price_format($order->get_total_discount()) + floor(($this->gn_price_format($order->get_total())) * (((float)$discountBillet / 100)))); - $discountBilletTotal = (int)floor(($this->gn_price_format($order->get_total())) * (((float)$discountBillet / 100))); - } - } - - $total_cart = WC()->cart->get_cart_contents_total(); - $totalShipping = WC()->cart->get_shipping_total(); - $totalTax = WC()->cart->get_cart_contents_tax(); - $totalbruto = $total_cart + $totalShipping + $totalTax; - $totalDesconto = $totalbruto - $order->get_total(); - - $descontofinal = $discountTotalValue + $totalDesconto*100; - - if ($descontofinal > 0) { - $discount = array( - 'type' => 'currency', - 'value' => $descontofinal - ); - } else { - $discount = null; - } - - - $gnApiResult = $this->gnIntegration->pay_billet($post_charge_id, $expirationDate, $customer, $discount); - - $resultCheck = array(); - $resultCheck = json_decode($gnApiResult, true); - - if (isset($resultCheck["code"])) { - if ($resultCheck["code"] == 200) { - if ('yes' == $this->debug) { - write_log('GERENCIANET :: gerencianet_pay_billet Request : SUCCESS '); - } - global $wpdb; - - if ($order->get_status() != "failed" && !isset($meta_discount_value_array[0])) { - if(!is_null($discount)){ - - $wpdb->insert($wpdb->prefix . "woocommerce_order_items", array( - 'order_item_name' => __('Discount of ', WCGerencianetOficial::getTextDomain()) . str_replace(".", ",", $discountBillet) . __('% Billet', WCGerencianetOficial::getTextDomain()), - 'order_item_type' => 'fee', - 'order_id' => intval($post_order_id) - )); - } - $lastid = $wpdb->insert_id; - $wpdb->insert($wpdb->prefix . "woocommerce_order_itemmeta", array( - 'order_item_id' => $lastid, - 'meta_key' => '_tax_class', - 'meta_value' => '0' - )); - - if ($this->billet_discount_shipping == "products") { - $wpdb->insert($wpdb->prefix . "woocommerce_order_itemmeta", array( - 'order_item_id' => $lastid, - 'meta_key' => '_line_total', - 'meta_value' => '-' . number_format(intval(floor(($this->gn_price_format($order->get_total()) - $totalShipping - $totalTax) * (((float)$discountBillet / 100)))) / 100, 2, '.', '') - )); - } else { - $wpdb->insert($wpdb->prefix . "woocommerce_order_itemmeta", array( - 'order_item_id' => $lastid, - 'meta_key' => '_line_total', - 'meta_value' => '-' . number_format(intval(floor(($this->gn_price_format($order->get_total())) * (((float)$discountBillet / 100)))) / 100, 2, '.', '') - )); - } - - $wpdb->insert($wpdb->prefix . "woocommerce_order_itemmeta", array( - 'order_item_id' => $lastid, - 'meta_key' => '_line_tax', - 'meta_value' => '0' - )); - $wpdb->insert($wpdb->prefix . "woocommerce_order_itemmeta", array( - 'order_item_id' => $lastid, - 'meta_key' => '_line_tax_data', - 'meta_value' => '0' - )); - - update_post_meta(intval($post_order_id), '_order_total', number_format(intval(ceil($this->gn_price_format($order->get_total()) - ($discountBilletTotal))) / 100, 2, '.', '')); - - update_post_meta(intval($post_order_id), '_payment_method_title', sanitize_text_field(__('Billet Banking - Gerencianet', WCGerencianetOficial::getTextDomain()))); - add_post_meta(intval($post_order_id), 'billet', $resultCheck['data']['pdf']['charge'], true); - add_post_meta(intval($post_order_id), 'billet_discount_value', $discountBilletTotal, true); - } - $order->update_status('on-hold', __('Waiting')); - wc_reduce_stock_levels($order_id); - WC()->cart->empty_cart(); - } else { - if ('yes' == $this->debug) { - write_log('GERENCIANET :: gerencianet_pay_billet Request : ERROR : ' . $resultCheck["code"]); - } - } - } else { - if ('yes' == $this->debug) { - write_log('GERENCIANET :: gerencianet_pay_billet Request : ERROR : Ajax request fail'); - } - } - - return $gnApiResult; - } - - /** - * Request Gerencianet API pay charge with Card. - * - * @return string - */ - public function gerencianet_pay_card($checkout_type, $order_id, $charge_id) - { - - if (count($_POST) < 1) { - $errorResponse = array( - "message" => __("An error occurred during your request. Please, try again.", WCGerencianetOficial::getTextDomain()) - ); - - return json_encode($errorResponse); - } - - $arrayDadosPost = array(); - foreach ($_POST as $key => $value) { - if ($key != "email") { - $arrayDadosPost[$key] = sanitize_text_field($value); - } else { - $arrayDadosPost[$key] = $value; - } - } - - if ($checkout_type == "OSC") { - $post_order_id = $order_id; - - $birth = explode("/", $arrayDadosPost['gn_card_birth']); - $birth = $birth[2] . "-" . $birth[1] . "-" . $birth[0]; - - $post_name_corporate = $arrayDadosPost['gn_card_name_corporate']; - $post_cpf_cnpj = preg_replace('/[^0-9]/', '', $arrayDadosPost['gn_card_cpf_cnpj']); - $post_phone_number = preg_replace('/[^0-9]/', '', $arrayDadosPost['gn_card_phone_number']); - $post_email = sanitize_email($arrayDadosPost['gn_card_email']); - $post_birth = $birth; - $post_street = $arrayDadosPost['gn_card_street']; - $post_number = $arrayDadosPost['gn_card_street_number']; - $post_neighborhood = $arrayDadosPost['gn_card_neighborhood']; - $post_zipcode = preg_replace('/[^0-9]/', '', $arrayDadosPost['gn_card_zipcode']); - $post_city = $arrayDadosPost['gn_card_city']; - $post_state = $arrayDadosPost['gn_card_state']; - $post_complement = $arrayDadosPost['gn_card_complement']; - $post_payment_token = $arrayDadosPost['gn_card_payment_token']; - $post_installments = $arrayDadosPost['gn_card_installments']; - $post_charge_id = $charge_id; - } else { - - $post_order_id = $arrayDadosPost['order_id']; - - $post_name_corporate = $arrayDadosPost['name_corporate']; - $post_cpf_cnpj = $arrayDadosPost['cpf_cnpj']; - $post_phone_number = $arrayDadosPost['phone_number']; - $post_email = sanitize_email($arrayDadosPost['email']); - $post_birth = $arrayDadosPost['birth']; - $post_street = $arrayDadosPost['street']; - $post_number = $arrayDadosPost['number']; - $post_neighborhood = $arrayDadosPost['neighborhood']; - $post_zipcode = preg_replace('/[^0-9]/', '', $arrayDadosPost['zipcode']); - $post_city = $arrayDadosPost['city']; - $post_state = $arrayDadosPost['state']; - $post_complement = $arrayDadosPost['complement']; - $post_payment_token = $arrayDadosPost['payment_token']; - $post_installments = $arrayDadosPost['installments']; - $post_charge_id = $arrayDadosPost['charge_id']; - } - - if (strlen($post_cpf_cnpj) > 11) { - $juridical_data = array( - 'corporate_name' => $post_name_corporate, - 'cnpj' => $post_cpf_cnpj - ); - - $customer = array( - 'phone_number' => $post_phone_number, - 'juridical_person' => $juridical_data, - 'email' => $post_email, - 'birth' => $post_birth - ); - } else { - $customer = array( - 'name' => $post_name_corporate, - 'cpf' => $post_cpf_cnpj, - 'phone_number' => $post_phone_number, - 'email' => $post_email, - 'birth' => $post_birth - ); - } - - $billingAddress = array( - 'street' => $post_street, - 'number' => $post_number, - 'neighborhood' => $post_neighborhood, - 'zipcode' => $post_zipcode, - 'city' => $post_city, - 'state' => $post_state, - 'complement' => $post_complement - ); - - $order = wc_get_order($post_order_id); - $WC = $this->woocommerce_instance(); - - $total_cart = $WC->cart->get_cart_contents_total(); - $totalShipping = $WC->cart->get_shipping_total(); - $totalTax = $WC->cart->get_cart_contents_tax(); - $totalbruto = $total_cart + $totalShipping + $totalTax; - $totalDesconto = $totalbruto - $order->get_total(); - $discountTotalValue = (int)($this->gn_price_format($order->get_total_discount())); - - $descontofinal = (int)$discountTotalValue + (int)($totalDesconto*100); - - if ($descontofinal > 0) { - $discount = array( - 'type' => 'currency', - 'value' => (int)($descontofinal) - ); - } else { - $discount = null; - } - - $gnApiResult = $this->gnIntegration->pay_card((int)$post_charge_id, $post_payment_token, (int)$post_installments, $billingAddress, $customer, $discount); - - $resultCheck = array(); - $resultCheck = json_decode($gnApiResult, true); - - if (isset($resultCheck["code"])) { - if ($resultCheck["code"] == 200) { - if ('yes' == $this->debug) { - write_log('GERENCIANET :: gerencianet_pay_card Request : SUCCESS '); - } - update_post_meta(intval($post_order_id), '_payment_method_title', sanitize_text_field(__('Credit Card - Gerencianet', WCGerencianetOficial::getTextDomain()))); - - $meta_discount_value_array = get_post_meta(intval($post_order_id), 'billet_discount_value'); - - if (isset($meta_discount_value_array[0])) { - if ((int)$meta_discount_value_array[0] > 0) { - update_post_meta(intval($post_order_id), '_order_total', number_format(intval(ceil($this->gn_price_format($order->get_total()) + ($meta_discount_value_array[0]))) / 100, 2, '.', '')); - - add_post_meta(intval($post_order_id), 'billet', '', true); - add_post_meta(intval($post_order_id), 'billet_discount_value', '0', true); - } - } - - $order->update_status('on-hold', __('Waiting')); - - WC()->cart->empty_cart(); - } else { - if ('yes' == $this->debug) { - write_log('GERENCIANET :: gerencianet_pay_card Request : ERROR : ' . $resultCheck["code"]); - } - } - } else { - if ('yes' == $this->debug) { - write_log('GERENCIANET :: gerencianet_pay_card Request : ERROR : Ajax Request Fail'); - } - } - - return $gnApiResult; - } - - /** - * Calculate total or discount - * - * @param string $method_payment Aceita os valores 'billet' ou 'pix' - * @param float $showTotalOrder Valor total do Pedido - * @param string $typeReturn Define se será retornado o valor total ou o desconto. Aceita os valores 'total' ou 'discount' ou null - * @return float - */ - public function calculateTotal($method_payment, $showTotalOrder, $typeReturn = null) { - $functionCall = $method_payment.'_discount_shipping'; - $attributeCall = 'discount'.$method_payment; - $WC = $this->woocommerce_instance(); - - $total_cart = $WC->cart->get_cart_contents_total(); - $totalShipping = $WC->cart->get_shipping_total(); - $totalTax = $WC->cart->get_cart_contents_tax(); - $discountPercent = $this->{$attributeCall}; - $total_value = 0; - $discountTotal = 0; - - if(isset($total_cart, $totalShipping, $totalTax, $discountPercent) ) { - if ($this->{$functionCall} == 'products') { - $subtotal = $showTotalOrder - $totalShipping - $totalTax; - $discountTotal = (float)($subtotal) * (((float)$discountPercent / 100) ); - - $total_value = (float)($subtotal - $discountTotal + $totalShipping + $totalTax); - } else { - //$total_value = (float)($total_cart + $totalShipping + $totalTax); - $discountTotal = $showTotalOrder * (((float)$discountPercent / 100)); - $total_value = (float)($showTotalOrder - $discountTotal); - } - } else { - throw new Error('An error occurred during your request. Please, try again.'); - } - - if($typeReturn == 'total'){ - if($method_payment == 'billet'){ - return $total_value*100; - }else{ - return round($total_value, 2); - } - }else{ - if($method_payment == 'billet'){ - return $discountTotal*100; - }else{ - return round($discountTotal, 2); - } - } - } - - /** - * Generate Gerencianet script to get payment token - */ - public function generate_gn_script() - { - $script = $this->gnIntegration->get_gn_script(); - echo $script; - } - - /** - * Generate the form for payment - * - * @param int $order_id Order ID. - * - * @return string Payment form. - */ - protected function generate_payment_page_options($order_id) - { - $this->styles(); - $this->scripts(); - - if ($this->sandbox == "yes") { - $script = htmlentities(html_entity_decode("var s=document.createElement('script');s.type='text/javascript';var v=parseInt(Math.random()*1000000);s.src='https://sandbox.gerencianet.com.br/v1/cdn/" . $this->payee_code . "/'+v;s.async=false;s.id='" . $this->payee_code . "';if(!document.getElementById('" . $this->payee_code . "')){document.getElementsByTagName('head')[0].appendChild(s);};$gn={validForm:true,processed:false,done:{},ready:function(fn){$gn.done=fn;}};")); - } else { - $script = htmlentities(html_entity_decode("var s=document.createElement('script');s.type='text/javascript';var v=parseInt(Math.random()*1000000);s.src='https://api.gerencianet.com.br/v1/cdn/" . $this->payee_code . "/'+v;s.async=false;s.id='" . $this->payee_code . "';if(!document.getElementById('" . $this->payee_code . "')){document.getElementsByTagName('head')[0].appendChild(s);};$gn={validForm:true,processed:false,done:{},ready:function(fn){$gn.done=fn;}};")); - } - - $sandbox = $this->sandbox; - - $order = wc_get_order($order_id); - - if ($this->gn_price_format($order->get_total_shipping()) > 0) { - $totalShipping = (int)$this->gn_price_format($order->get_total_shipping()); - } else { - $totalShipping = 0; - } - - if ($this->gn_price_format($order->get_total_tax()) > 0) { - $totalTax = (int)$this->gn_price_format($order->get_total_tax()); - } else { - $totalTax = 0; - } - - $discount = $this->discountbillet; - $meta_discount_value_array = get_post_meta(intval($order_id), 'billet_discount_value'); - - if (isset($meta_discount_value_array[0])) { - $discount = 0; - $meta_discount_value = (int)$meta_discount_value_array[0]; - } else { - $meta_discount_value = 0; - } - - $billet_option = $this->billet_banking; - $card_option = $this->credit_card; - $pix_option = $this->pix; - - $order_received_url = $order->get_checkout_order_received_url(); - - $max_installments = $this->gnIntegration->max_installments($this->gn_price_format($order->get_total()) + $meta_discount_value); - - - //alterei - if ($this->billet_discount_shipping == "products") { - $order_with_billet_discount = $this->gnIntegration->formatCurrencyBRL(ceil(($this->gn_price_format($order->get_total()) - $totalShipping - $totalTax) * (1 - ((float)$discount / 100)) + $totalShipping) + $totalTax); - } else { - $order_with_billet_discount = $this->gnIntegration->formatCurrencyBRL(ceil(($this->gn_price_format($order->get_total())) * (1 - ((float)$discount / 100)))); - } - - - $order_total = $this->gnIntegration->formatCurrencyBRL($this->gn_price_format($order->get_total()) + $meta_discount_value); - - $order_total_card = $this->gn_price_format($order->get_total()) + $meta_discount_value; - - //alterei - if ($this->billet_discount_shipping == "products") { - $order_total_billet = ceil(($this->gn_price_format($order->get_total()) - $totalShipping - $totalTax) * (1 - ((float)$discount / 100)) + $meta_discount_value); - } else { - $order_total_billet = ceil(($this->gn_price_format($order->get_total())) * (1 - ((float)$discount / 100)) + $meta_discount_value); - } - - - $gn_card_payment_comments = __("Opting to pay by credit card, the payment is processed and the confirmation will take place within 48 hours.", WCGerencianetOficial::getTextDomain()); - $gn_billet_payment_method_comments = __("Opting to pay by Boleto, the confirmation will be performed on the next business day after payment.", WCGerencianetOficial::getTextDomain()); - $gn_name_corporate = __("Name/Company:", WCGerencianetOficial::getTextDomain()); - $gn_name = __("Name:", WCGerencianetOficial::getTextDomain()); //novo - $gn_corporate = __("Company:", WCGerencianetOficial::getTextDomain()); //novo - $gn_cpf_cnpj = __("CPF/CNPJ: ", WCGerencianetOficial::getTextDomain()); - $gn_cpf = __("CPF: ", WCGerencianetOficial::getTextDomain()); //novo - $gn_cnpj = __("CNPJ: ", WCGerencianetOficial::getTextDomain()); //novo - $gn_phone = __("Phone: ", WCGerencianetOficial::getTextDomain()); - $gn_birth = __("Birth Date: ", WCGerencianetOficial::getTextDomain()); - $gn_email = __("E-mail: ", WCGerencianetOficial::getTextDomain()); - $gn_street = __("Address: ", WCGerencianetOficial::getTextDomain()); - $gn_street_number = __("Number: ", WCGerencianetOficial::getTextDomain()); - $gn_neighborhood = __("Neighborhood: ", WCGerencianetOficial::getTextDomain()); - $gn_address_complement = __("Complement: ", WCGerencianetOficial::getTextDomain()); - $gn_cep = __("Zipcode: ", WCGerencianetOficial::getTextDomain()); - $gn_city = __("City: ", WCGerencianetOficial::getTextDomain()); - $gn_state = __("State: ", WCGerencianetOficial::getTextDomain()); - $gn_card_title = __("Billing Data", WCGerencianetOficial::getTextDomain()); - $gn_card_number = __("Card Number: ", WCGerencianetOficial::getTextDomain()); - $gn_card_expiration = __("Expiration date: ", WCGerencianetOficial::getTextDomain()); - $gn_card_cvv = __("Security Code: ", WCGerencianetOficial::getTextDomain()); - $gn_card_installments_options = __("Installments: ", WCGerencianetOficial::getTextDomain()); - $gn_card_brand = __("Enter your credit card details", WCGerencianetOficial::getTextDomain()); - - $gn_mininum_gn_charge_price = __("To pay Boleto or Credit Card the order must have more than R$5,00. But you can pay with PIX", WCGerencianetOficial::getTextDomain()); - $gn_pay_billet_option = __("Pay with Boleto", WCGerencianetOficial::getTextDomain()); - $gn_discount_billet = __("Discount of ", WCGerencianetOficial::getTextDomain()); - $gn_pay_card_option = __("Pay with Credit Card", WCGerencianetOficial::getTextDomain()); - $gn_pay_pix_option = __("Pay with Pix", WCGerencianetOficial::getTextDomain()); - $pix_copy_paste = __('Or copy the Code below and paste it into the app where you are going to make the payment:', WCGerencianetOficial::getTextDomain()) ; - $gn_installments_pay = __("Pay in", WCGerencianetOficial::getTextDomain()); - $gn_billing_address_title = __("Billing Address", WCGerencianetOficial::getTextDomain()); - $gn_billing_state_select = __("Select the state", WCGerencianetOficial::getTextDomain()); - $gn_card_cvv_tip = __("Are the last three digits
    on the back of the card.", WCGerencianetOficial::getTextDomain()); - $gn_card_brand_select = __("Enter your credit card details", WCGerencianetOficial::getTextDomain()); - $gn_loading_payment_request = __("Please, wait...", WCGerencianetOficial::getTextDomain()); - - $gn_warning_sandbox_message = __("Sandbox mode is active. The payments will not be valid.", WCGerencianetOficial::getTextDomain()); - - // Pix options - $gn_discount_pix = __("Discount of ", WCGerencianetOficial::getTextDomain()); - $total_value_pix = $this->calculateTotal('pix', $order->get_total(), 'total'); - $discountPix = $this->discountpix; - $totalValuePix = $this->gnIntegration->formatCurrencyBRL($this->gn_price_format($total_value_pix)); - - $gn_billing_cpf_cnpj_validate = false; - $gn_billing_name_corporate_validate = false; - $gn_billing_phone_number_validate = false; - $gn_billing_email_validate = false; - $gn_billing_birthdate_validate = false; - $gn_billing_street_validate = false; - $gn_billing_number_validate = false; - $gn_billing_neighborhood_validate = false; - $gn_billing_complement_validate = false; - $gn_billing_state_validate = false; - $gn_billing_city_validate = false; - $gn_billing_zipcode_validate = false; - - $validate = new GerencianetValidation(); - - $gn_order_cpf_cnpj = ''; - $gn_order_name_corporate = ''; - - if (isset($order->billing_persontype) && $order->billing_persontype == "1") { - if (isset($order->billing_cpf)) { - if ($validate->_cpf($order->billing_cpf)) { - $gn_billing_cpf_cnpj_validate = true; - $gn_order_cpf_cnpj = $order->billing_cpf; - } - } - - if ($validate->_name($order->get_formatted_billing_full_name())) { - $gn_billing_name_corporate_validate = true; - $gn_order_name_corporate = $order->get_formatted_billing_full_name(); - } - } else { - if (isset($order->billing_cnpj)) { - if ($validate->_cnpj($order->billing_cnpj)) { - $gn_billing_cpf_cnpj_validate = true; - $gn_order_cpf_cnpj = $order->billing_cnpj; - } - } - - if ($validate->_corporate($order->get_billing_company())) { - $gn_billing_name_corporate_validate = true; - $gn_order_name_corporate = $order->get_billing_company(); - } - } - - if ($order->get_billing_email() !== NULL) { - if ($validate->_email($order->get_billing_email())) { - $gn_billing_email_validate = true; - } - } - - if ($order->get_billing_phone() !== NULL) { - if ($validate->_phone_number($order->get_billing_phone())) { - $gn_billing_phone_number_validate = true; - } - } - - if (isset($order->billing_birthdate)) { - if ($validate->_birthdate($order->billing_birthdate)) { - $gn_billing_birthdate_validate = true; - } - } - - if ($order->get_billing_address_1() !== NULL) { - if ($validate->_street($order->get_billing_address_1())) { - $gn_billing_street_validate = true; - } - } - - if ($order->billing_number !== NULL) { - if ($validate->_number($order->billing_number)) { - $gn_billing_number_validate = true; - } - } - - if (isset($order->billing_neighborhood)) { - if ($validate->_neighborhood($order->billing_neighborhood)) { - $gn_billing_neighborhood_validate = true; - } - } - - if ($order->get_billing_city() !== NULL) { - if ($validate->_city($order->get_billing_city())) { - $gn_billing_city_validate = true; - } - } - - if ($order->get_billing_postcode() !== NULL) { - if ($validate->_zipcode($order->get_billing_postcode())) { - $gn_billing_zipcode_validate = true; - } - } - - if ($order->get_billing_state() !== NULL) { - if ($validate->_state($order->get_billing_state())) { - $gn_billing_state_validate = true; - } - } - - ob_start(); - include plugin_dir_path(dirname(__FILE__)) . 'templates/transparent-checkout.php'; - $html = ob_get_clean(); - - return $html; - } - - /** - * Payment fields. - */ - public function payment_fields() - { - - global $woocommerce, $post, $order_id; - if ($this->checkout_type == "OSC") { - - $this->styles(); - wp_register_script('jquery-wp', '/wp-includes/js/jquery/jquery.js', false); - wp_enqueue_script('jquery-wp'); - //wp_enqueue_script( 'jquery' ); - wp_enqueue_script('jquery-mask', plugins_url('assets/js/jquery.mask.js', plugin_dir_path(__FILE__)), array('jquery-wp'), '', true); - wp_enqueue_script('wc-gerencianet-checkout-osc', plugins_url('assets/js/checkout-osc.js', plugin_dir_path(__FILE__)), array('jquery-wp'), '', true); - wp_localize_script( - 'wc-gerencianet-checkout', - 'woocommerce_gerencianet_api', - array( - 'ajax_url' => admin_url('admin-ajax.php'), - 'security' => wp_create_nonce('woocommerce_gerencianet'), - ) - ); - - if ($this->sandbox == "yes") { - $script = htmlentities(html_entity_decode("var s=document.createElement('script');s.type='text/javascript';var v=parseInt(Math.random()*1000000);s.src='https://sandbox.gerencianet.com.br/v1/cdn/" . $this->payee_code . "/'+v;s.async=false;s.id='" . $this->payee_code . "';if(!document.getElementById('" . $this->payee_code . "')){document.getElementsByTagName('head')[0].appendChild(s);};$gn={validForm:true,processed:false,done:{},ready:function(fn){$gn.done=fn;}};")); - } else { - $script = htmlentities(html_entity_decode("var s=document.createElement('script');s.type='text/javascript';var v=parseInt(Math.random()*1000000);s.src='https://api.gerencianet.com.br/v1/cdn/" . $this->payee_code . "/'+v;s.async=false;s.id='" . $this->payee_code . "';if(!document.getElementById('" . $this->payee_code . "')){document.getElementsByTagName('head')[0].appendChild(s);};$gn={validForm:true,processed:false,done:{},ready:function(fn){$gn.done=fn;}};")); - } - if (!$order_id && isset($_GET["key"])) { - $order_id = wc_get_order_id_by_order_key(sanitize_text_field($_GET["key"])); - } - if ($order_id) { - $order = wc_get_order($order_id); - } else { - $order = null; - } - if ($order) { - $meta_discount_value_array = get_post_meta(intval($order_id), 'billet_discount_value'); - /* **************************** Verify if billet discount exists ********************************* */ - - if (isset($meta_discount_value_array[0])) { - $meta_discount_value = $meta_discount_value_array[0]; - } else { - $meta_discount_value = 0; - } - - /* ***************************** Verify if exists shipping **************************************** */ - - if ($this->gn_price_format($order->get_total_shipping()) > 0) { - $totalShipping = (int)$this->gn_price_format($order->get_total_shipping()); - } else { - $totalShipping = 0; - } - - /* ***************************** Verify if exists tax ******************************************** */ - - if ($this->gn_price_format($order->get_total_tax()) > 0) { - $totalTax = (int)$this->gn_price_format($order->get_total_tax()); - } else { - $totalTax = 0; - } - - /* *********************************************************************************************** */ - - $order_total_value_without_shipping_and_tax = $this->gn_price_format($order->get_total()) - $totalShipping - $totalTax; - $order_total_tax_value = $totalTax; - $order_total_shipping_value = $totalShipping; - } else { - $meta_discount_value = 0; - $order_total_tax_value = WC()->cart->get_cart_contents_tax(); - $order_total_value_without_shipping_and_tax = WC()->cart->get_total(); - $order_total_shipping_value = WC()->cart->get_cart_shipping_total(); - } - - $order_total = ((int)preg_replace("/[^0-9]/", "", html_entity_decode($order_total_value_without_shipping_and_tax))) / 100; - - $order_total_without_shipping = ((int)preg_replace("/[^0-9]/", "", html_entity_decode($order_total_value_without_shipping_and_tax))) / 100; - - if ($meta_discount_value > 0) { - $discount = 0; - } else { - $discount = $this->discountbillet; - } - - $discountBilletFormatted = str_replace(".", ",", $discount); - - $total_order_pay_by_billet = $this->calculateTotal('billet', $order_total, 'total'); - - $total_order_pay_by_card = $this->gn_price_format($order_total) + $meta_discount_value; - $discount_value = $total_order_pay_by_card - $total_order_pay_by_billet; - - //Pix values - $total_value_pix = $this->calculateTotal('pix', $order_total, 'total'); - $discountPix = $this->discountpix; - $discountPixFormatted = str_replace(".", ",", $discountPix); - $totalValuePix = $this->gnIntegration->formatCurrencyBRL($this->gn_price_format($total_value_pix)); - $discountValuePix = (float) $this->calculateTotal('pix', $order_total, 'discount'); - $discountValuePix = $this->gnIntegration->formatCurrencyBRL($this->gn_price_format($discountValuePix)); - - if (is_ajax()) { - wc_get_template('transparent-osc.php', array( - 'order_id' => $order_id, - 'ajax_url' => admin_url('admin-ajax.php'), - 'script_load' => $script, - 'discount' => $discount, - 'discount_formatted' => $discountBilletFormatted, - 'billet_option' => $this->billet_banking, - 'card_option' => $this->credit_card, - 'pix_option' => $this->pix, - 'discountPix' => $discountPix, - 'pix_mtls' => $this->pix_mtls, - 'discount_pix_formatted' => $discountPixFormatted, - 'discount_pix_value' => $discountValuePix, - 'order_with_pix_discount' => $totalValuePix, - 'max_installments' => $this->gnIntegration->max_installments($total_order_pay_by_card), - 'order_with_billet_discount' => $this->gnIntegration->formatCurrencyBRL($total_order_pay_by_billet), - 'order_billet_discount' => $this->gnIntegration->formatCurrencyBRL($discount_value), - 'order_total' => $this->gnIntegration->formatCurrencyBRL($total_order_pay_by_card), - 'order_total_card' => $total_order_pay_by_card, - 'order_total_billet' => $total_order_pay_by_billet, - 'sandbox' => $this->sandbox, - 'gn_card_payment_comments' => __("Opting to pay by credit card, the payment is processed and the confirmation will take place within 48 hours.", WCGerencianetOficial::getTextDomain()), - 'gn_billet_payment_method_comments' => __("Opting to pay by Boleto, the confirmation will be performed on the next business day after payment.", WCGerencianetOficial::getTextDomain()), - 'gn_name_corporate' => __("Name/Company:", WCGerencianetOficial::getTextDomain()), - 'gn_name' => __("Name:", WCGerencianetOficial::getTextDomain()), //novo - 'gn_corporate' => __("Company:", WCGerencianetOficial::getTextDomain()), //novo - 'gn_cpf_cnpj' => __("CPF/CNPJ: ", WCGerencianetOficial::getTextDomain()), - 'gn_cpf' => __("CPF: ", WCGerencianetOficial::getTextDomain()), //novo - 'gn_cnpj' => __("CNPJ: ", WCGerencianetOficial::getTextDomain()), //novo - 'gn_phone' => __("Phone: ", WCGerencianetOficial::getTextDomain()), - 'gn_birth' => __("Birth Date: ", WCGerencianetOficial::getTextDomain()), - 'gn_email' => __("E-mail: ", WCGerencianetOficial::getTextDomain()), - 'gn_street' => __("Address: ", WCGerencianetOficial::getTextDomain()), - 'gn_street_number' => __("Number: ", WCGerencianetOficial::getTextDomain()), - 'gn_neighborhood' => __("Neighborhood: ", WCGerencianetOficial::getTextDomain()), - 'gn_address_complement' => __("Complement: ", WCGerencianetOficial::getTextDomain()), - 'gn_cep' => __("Zipcode: ", WCGerencianetOficial::getTextDomain()), - 'gn_city' => __("City: ", WCGerencianetOficial::getTextDomain()), - 'gn_state' => __("State: ", WCGerencianetOficial::getTextDomain()), - 'gn_card_title' => __("Billing Data", WCGerencianetOficial::getTextDomain()), - 'gn_card_number' => __("Card Number: ", WCGerencianetOficial::getTextDomain()), - 'gn_card_expiration' => __("Expiration date: ", WCGerencianetOficial::getTextDomain()), - 'gn_card_cvv' => __("Security Code: ", WCGerencianetOficial::getTextDomain()), - 'gn_card_installments_options' => __("Installments: ", WCGerencianetOficial::getTextDomain()), - 'gn_card_brand' => __("Enter your credit card details", WCGerencianetOficial::getTextDomain()), - - 'gn_mininum_gn_charge_price' => __("To pay Boleto or credit card the order must have more than R$5,00. But you can pay with PIX", WCGerencianetOficial::getTextDomain()), - 'gn_pay_billet_option' => __("Pay with Boleto", WCGerencianetOficial::getTextDomain()), - 'gn_discount_billet' => __("Discount of ", WCGerencianetOficial::getTextDomain()), - 'gn_pay_card_option' => __("Pay with Credit Card", WCGerencianetOficial::getTextDomain()), - 'gn_installments_pay' => __("Pay in", WCGerencianetOficial::getTextDomain()), - 'gn_billing_address_title' => __("Billing Address", WCGerencianetOficial::getTextDomain()), - 'gn_billing_state_select' => __("Select the state", WCGerencianetOficial::getTextDomain()), - 'gn_card_cvv_tip' => __("Are the last three digits
    on the back of the card.", WCGerencianetOficial::getTextDomain()), - 'gn_card_brand_select' => __("Select the card brand", WCGerencianetOficial::getTextDomain()), - 'gn_loading_payment_request' => __("Please, wait...", WCGerencianetOficial::getTextDomain()), - - 'gn_warning_sandbox_message' => __("Sandbox mode is active. The payments will not be valid.", WCGerencianetOficial::getTextDomain()) - ), 'woocommerce/woo-gerencianet-official/', plugin_dir_path(dirname(__FILE__)) . 'templates/'); - } - } else { - echo $this->description; - } - } - - - /** - * Process the payment and return the result. - * - * @param int $order_id Order ID. - * - * @return array Redirect. - */ - public function process_payment($order_id) - { - - $order = wc_get_order($order_id); - $charge_id = json_encode($_POST); - - if ($this->checkout_type == "OSC") { - - if (($_POST['gn_card_payment_token'] == "" || $_POST['gn_card_installments'] == "0") && $_POST['paymentMethodRadio'] == "card") { - wc_add_notice('Não foi possível validar os dados do cartão. Por favor, digite os dados novamente.', 'error'); - - return array( - 'result' => 'fail', - 'redirect' => '', - ); - } - - if($_POST['paymentMethodRadio'] === 'pix') { - return $this->process_payment_method($_POST['paymentMethodRadio'], $order_id, null, $_POST['gn_pix_cpf_cnpj']); - } - else { - $create_charge = $this->gerencianet_create_charge('OSC', $order_id); - $resultCheck = array(); - $resultCheck = json_decode($create_charge, true); - - if (isset($resultCheck["code"])) { - if ($resultCheck['code'] == 200) { - return $this->process_payment_method($_POST['paymentMethodRadio'], $order_id, (int)$resultCheck['data']['charge_id']); - } else { - wc_add_notice('Ocorreu um erro ao tentar realizar o pagamento. Tente novamente.', 'error'); - - return array( - 'result' => 'fail', - 'redirect' => '', - ); - } - } else { - wc_add_notice($resultCheck['message'], 'error'); - - return array( - 'result' => 'fail', - 'redirect' => '', - ); - } - } - } else { - return array( - 'result' => 'success', - 'redirect' => $order->get_checkout_payment_url(true) - ); - } - } - - private function process_payment_method($method_payment, $order_id, $charge_id, $cpf_cnpj = null) { - - $order = wc_get_order($order_id); - $functionCall = 'gerencianet_pay_'.$method_payment; - - if($cpf_cnpj == null && $method_payment == 'pix') { - wc_add_notice("O campo 'CPF/CNPJ' é obrigatório ", 'error'); - return array( - 'result' => 'fail', - 'redirect' => '', - ); - } - - $pay_charge = ($method_payment !== 'pix') - ? $this->{$functionCall}('OSC', $order_id, $charge_id) - : Pix::gerencianet_pay_pix('OSC', $order_id, $charge_id, $cpf_cnpj); - - $resultCheckPay = array(); - $resultCheckPay = json_decode($pay_charge, true); - - // card or billet - if (isset($resultCheckPay['code'])) { - if ($resultCheckPay['code'] == 200) { - return array( - 'result' => 'success', - 'redirect' => $order->get_checkout_order_received_url() . '&method='.$method_payment.'&charge_id=' . $charge_id . '&' - ); - } - } - // pix - if (isset($resultCheckPay['txid'])) { - return array( - 'result' => 'success', - 'redirect' => $order->get_checkout_order_received_url() . '&method='.$method_payment - ); - } - - wc_add_notice($resultCheckPay['message'], 'error'); - - return array( - 'result' => 'fail', - 'redirect' => '', - ); - } - - /** - * Output for the order received page. - * - * @param object $order Order data. - * - * @return void - */ - public function receipt_page($order) - { - echo $this->generate_payment_page_options($order); - } - - /** - * Output for the order received page. - */ - public function thankyou_page($order_id) - { - - echo wpautop(wptexturize($this->generate_gn_thankyou_page($order_id))); - } - - /** - * Generate the thank you page. - * - * @param int $order_id Order ID. - * - * @return string Payment form. - */ - protected function generate_gn_thankyou_page($order_id) - { - $this->styles(); - $order = wc_get_order($order_id); - $email = $order->get_billing_email(); - - $billet_url = get_post_meta($order_id, 'billet', true); - $qrcode = get_post_meta($order_id, 'pix_qr', true); - $pixCopiaCola = get_post_meta($order_id, 'pix_qr_copy', true); - $generated_payment_type = sanitize_text_field($_GET['method']); - - $showText = array( - 'pix' => [ - 'title' => __('Payment for PIX', WCGerencianetOficial::getTextDomain()), - 'content' => __('Scan the code below and make the payment for Pix', WCGerencianetOficial::getTextDomain()) - ], - 'billet' => [ - 'title' => __('Boleto emitted by Gerencianet', WCGerencianetOficial::getTextDomain()), - 'content' => __('The Boleto was successfully generated. Make payment in bank, lottery, post office or bankline. Stay tuned to the expiration date of the Boleto.', WCGerencianetOficial::getTextDomain()) - ], - 'card' => [ - 'title' => __('Your order was successful and your payment is being processed. Wait until you receive confirmation of payment by email.', WCGerencianetOficial::getTextDomain()), - 'content' => join(' ', [ - __('The charge on your card is being processed. Soon as it is confirmed, we will send an e-mail to ', WCGerencianetOficial::getTextDomain()), - $email - ]) - ] - ); - - $gn_success_payment_charge_number = __("Charge number:", WCGerencianetOficial::getTextDomain()); - $gn_success_payment_open_billet = __("Show Boleto", WCGerencianetOficial::getTextDomain()); - - ob_start(); - include plugin_dir_path(dirname(__FILE__)) . 'templates/order-received.php'; - $html = ob_get_clean(); - - return $html; - } - - /** - * Check API Notification response. - * - * @return void - */ - public function validate_notification() - { - @ob_clean(); - $post_notification = sanitize_text_field($_POST['notification']); - if (isset($post_notification)) { - header('HTTP/1.0 200 OK'); - do_action('validate_notification_request', stripslashes_deep($_POST)); - } else { - wp_die(__('Request Failure', WCGerencianetOficial::getTextDomain())); - } - } - - /** - * Check if notification request is valid and make changes in order status - * - * @param array $posted gerencianet post data. - * - * @return void - */ - public function successful_request($posted) - { - - //If the IPN request is about notification - if (!empty($posted['notification'])) { - - - $notification = json_decode($this->gnIntegration->notificationCheck($posted['notification'])); - if ($notification->code == 200) { - - if ('yes' == $this->debug) { - write_log('GERENCIANET :: notification Request : SUCCESS '); - } - - foreach ($notification->data as $notification_data) { - $orderIdFromNotification = $notification_data->custom_id; - $orderStatusFromNotification = $notification_data->status->current; - $gerencianetChargeId = $notification_data->identifiers->charge_id; - } - - $order = wc_get_order($orderIdFromNotification); - - if ($this->callback == 'yes') { - switch ($orderStatusFromNotification) { - case 'paid': - $order->update_status('processing', __('Paid ', WCGerencianetOficial::getTextDomain())); - $order->payment_complete(); - break; - case 'unpaid': - $order->update_status('failed', __('Unpaid ', WCGerencianetOficial::getTextDomain())); - - if($this->get_option('billet_unpaid') == 'yes' ){ - $this->gnIntegration->cancel_charge($gerencianetChargeId); - } - - break; - case 'refunded': - $order->update_status('refund', __('Refunded ', WCGerencianetOficial::getTextDomain())); - break; - case 'contested': - $order->update_status('failed', __('Contested ', WCGerencianetOficial::getTextDomain())); - break; - case 'canceled': - $order->update_status('cancelled', __('Canceled ', WCGerencianetOficial::getTextDomain())); - break; - default: - //no action - break; - } - } - } else { - if ('yes' == $this->debug) { - $this->log->add('gerencianet-oficial', 'GERENCIANET :: notification Request : FAIL '); - } - } - - exit(); - } - } - - /** - * Gets the admin url. - * - * @return string - */ - protected function admin_url() - { - return admin_url('admin.php?page=wc-settings&tab=checkout§ion=WC_Gerencianet_Oficial_Gateway'); - } - - /** - * Adds error message when not configured correctly the payee code. - * - * @return string Error Message. - */ - public function sandbox_active_message() - { - echo '

    ' . __('Gerencianet Disabled', WCGerencianetOficial::getTextDomain()) . ': ' . sprintf(__('Sandbox mode is active. The payments will not be valid. %s', WCGerencianetOficial::getTextDomain()), '' . __('Click here to configure', WCGerencianetOficial::getTextDomain()) . '') . '

    '; - } - /** - * Adds error message when not TLS is not compatible. - * - * @return string Error Message. - */ - public function tls_incompatible() - { - - echo '
    -

    ' . __('ATENÇÃO', WCGerencianetOficial::getTextDomain()) . ': ' . sprintf(__('Identificamos que a sua hospedagem não suporta uma versão segura do TLS (Transport Layer Security) para se comunicar com a Gerencianet. - Para conseguir gerar transações, será necessário que contate o administrador do seu servidor - e solicite que a hospedagem seja atualizada para suportar comunicações por meio do TLS na versão mínima 1.2. - Em caso de dúvidas e para maiores informações, contate a Equipe Técnica da Gerencianet através do suporte da empresa. %s', WCGerencianetOficial::getTextDomain()), '' . __('', WCGerencianetOficial::getTextDomain()) . '') . '

    -
    '; - } - - - /** - * Adds error message when not configured correctly the payee code. - * - * @return string Error Mensage. - */ - public function payee_code_missing_message() - { - echo '

    ' . __('Gerencianet Disabled', WCGerencianetOficial::getTextDomain()) . ': ' . sprintf(__('You should inform your Gerencianet Account Payee Code. %s', WCGerencianetOficial::getTextDomain()), '' . __('Click here to configure', WCGerencianetOficial::getTextDomain()) . '') . '

    '; - } - - /** - * Adds error message when not configured a one payment option. - * - * @return string Error Message. - */ - public function payment_option_missing_message() - { - echo '

    ' . __('Gerencianet Disabled', WCGerencianetOficial::getTextDomain()) . ': ' . sprintf(__('You should activate at least one payment option to activate the module. %s', WCGerencianetOficial::getTextDomain()), '' . __('Click here to configure', WCGerencianetOficial::getTextDomain()) . '') . '

    '; - } - - - /** - * Adds error message when not configured correctly the credentials. - * - * @return string Error Message. - */ - public function credentials_missing_message() - { - echo '

    ' . __('Gerencianet Disabled', WCGerencianetOficial::getTextDomain()) . ': ' . sprintf(__('You should inform your Gerencianet Application Credentials. %s', WCGerencianetOficial::getTextDomain()), '' . __('Click here to configure', WCGerencianetOficial::getTextDomain()) . '') . '

    '; - } - - /** - * Adds error message when an unsupported currency is used. - * - * @return string Error Message. - */ - public function currency_not_supported_message() - { - echo '

    ' . __('Gerencianet Disabled', WCGerencianetOficial::getTextDomain()) . ': ' . sprintf(__('Currency %s is not supported by Gerencianet. Works only with BRL (Brazilian Real).', WCGerencianetOficial::getTextDomain()), get_woocommerce_currency()) . '

    '; - } -} - -/** - * Adds billet link to order details. - * - * @return string Billet link button. - */ -add_action('woocommerce_order_details_after_order_table', 'gn_order_view_billet_link', 10, 1); -function gn_order_view_billet_link($order) -{ - - $billet = get_post_meta($order->get_id(), 'billet', true); - if (!empty($billet)) { - if ($order->get_status() == "on-hold" || $order->get_status() == "pending") { - echo " - "; - } - } -} - -/** - * Adds billet link to order email. - * - * @return string Billet link button. - */ -add_action('woocommerce_email_after_order_table', 'gn_email_billet_link'); -function gn_email_billet_link($order) -{ - - $billet = get_post_meta($order->get_id(), 'billet', true); - if (!empty($billet)) { - echo " - "; - } -} diff --git a/manual/woo-gerencianet-official/includes/lib/GerencianetIntegration.php b/manual/woo-gerencianet-official/includes/lib/GerencianetIntegration.php deleted file mode 100644 index 1eb1c496..00000000 --- a/manual/woo-gerencianet-official/includes/lib/GerencianetIntegration.php +++ /dev/null @@ -1,616 +0,0 @@ -client_id_production = $clientIdProduction; - $this->client_secret_production = $clientSecretProduction; - $this->client_id_development = $clientIdDevelopment; - $this->client_secret_development = $clientSecretDevelopment; - $this->sandbox = $sandbox; - $this->payee_code = $payeeCode; - } - - public function validate_credentials( $client_id, $client_secret, $mode ) { - - if ( $mode == "production" ) { - $sandbox = false; - } else { - $sandbox = true; - } - - $options = array( - 'client_id' => $client_id, - 'client_secret' => $client_secret, - 'sandbox' => $sandbox - ); - - $params = array( 'total' => 1000, 'brand' => 'visa' ); - - try { - $api = new Gerencianet( $options ); - $installments = $api->getInstallments( $params, array() ); - - return 'true'; - } catch ( GerencianetException $e ) { - return 'false'; - } catch ( Exception $e ) { - return 'false'; - } - } - - public function get_gn_api_credentials() { - - $isSandbox = ($this->sandbox == "yes"); - $gn_credentials_options = array( - 'client_id' => $isSandbox ? $this->client_id_development : $this->client_id_production, - 'client_secret' => $isSandbox ? $this->client_secret_development : $this->client_secret_production, - 'sandbox' => $isSandbox - ); - - return $gn_credentials_options; - } - - public function get_gn_script() { - - if ( $this->sandbox == "yes" ) { - return html_entity_decode( "" ); - } else { - return html_entity_decode( "" ); - } - } - - public function max_installments( $total ) { - - $options = GerencianetIntegration::get_gn_api_credentials(); - $params = array( 'total' => $total, 'brand' => 'visa' ); - - try { - $api = new Gerencianet( $options ); - $installments = array(); - $installments = $api->getInstallments( $params, array() ); - $max_installments = end( $installments['data']['installments'] )['installment'] . "x de " . GerencianetIntegration::formatCurrencyBRL( end( $installments['data']['installments'] )['value'] ); - - return $max_installments; - } catch ( GerencianetException $e ) { - return null; - } catch ( Exception $e ) { - return null; - } - } - - public function get_installments( $total, $brand ) { - - $options = GerencianetIntegration::get_gn_api_credentials(); - - $params = array( 'total' => $total, 'brand' => $brand ); - - try { - $api = new Gerencianet( $options ); - $installments = $api->getInstallments( $params, array() ); - - return GerencianetIntegration::result_api( $installments, true ); - } catch ( GerencianetException $e ) { - $errorResponse = array( - "code" => $e->getCode(), - "error" => $e->error, - "message" => $e->errorDescription, - ); - - return GerencianetIntegration::result_api( $errorResponse, false ); - } catch ( Exception $e ) { - $errorResponse = array( - "code" => 0, - "message" => $e->getMessage(), - ); - - return GerencianetIntegration::result_api( $errorResponse, false ); - } - - } - - public function create_charge( $order_id, $items, $shipping, $notification_url ) { - - $options = GerencianetIntegration::get_gn_api_credentials(); - - $metadata = array( - 'custom_id' => strval( $order_id ), - 'notification_url' => $this->sandbox == 'yes' ? null : $notification_url - ); - - if ( $shipping ) { - $body = array( - 'items' => $items, - 'shippings' => $shipping, - 'metadata' => $metadata - ); - } else { - $body = array( - 'items' => $items, - 'metadata' => $metadata - ); - } - - try { - $api = new Gerencianet( $options ); - $charge = $api->createCharge( array(), $body ); - - return GerencianetIntegration::result_api( $charge, true ); - - } catch ( GerencianetException $e ) { - $errorResponse = array( - "code" => $e->getCode(), - "error" => $e->error, - "message" => $e->errorDescription, - ); - - return GerencianetIntegration::result_api( $errorResponse, false ); - } catch ( Exception $e ) { - $errorResponse = array( - "message" => $e->getMessage(), - ); - - return GerencianetIntegration::result_api( $errorResponse, false ); - } - } - - public function pay_billet( $charge_id, $expirationDate, $customer, $discount = false ) { - - $options = GerencianetIntegration::get_gn_api_credentials(); - $params = array( 'id' => $charge_id ); - - if ( $discount ) { - $banking_billet = array( - 'expire_at' => $expirationDate, - 'customer' => $customer, - 'discount' => $discount - ); - } else { - $banking_billet = array( - 'expire_at' => $expirationDate, - 'customer' => $customer - ); - } - - $body = array( - 'payment' => array( - 'banking_billet' => $banking_billet - ) - ); - - try { - $api = new Gerencianet( $options ); - $charge = $api->payCharge( $params, $body ); - - return GerencianetIntegration::result_api( $charge, true ); - } catch ( GerencianetException $e ) { - $errorResponse = array( - "code" => $e->getCode(), - "error" => $e->error, - "message" => $e->errorDescription, - ); - - return GerencianetIntegration::result_api( $errorResponse, false ); - } catch ( Exception $e ) { - $errorResponse = array( - "message" => $e->getMessage(), - ); - - return GerencianetIntegration::result_api( $errorResponse, false ); - } - } - - public function cancel_charge( $charge_id ) { - - $options = GerencianetIntegration::get_gn_api_credentials(); - $params = array( 'id' => $charge_id ); - - try { - $api = new Gerencianet( $options ); - $charge = $api->cancelCharge( $params, [] ); - - return GerencianetIntegration::result_api( $charge, true ); - } catch ( GerencianetException $e ) { - $errorResponse = array( - "code" => $e->getCode(), - "error" => $e->error, - "message" => $e->errorDescription, - ); - - return GerencianetIntegration::result_api( $errorResponse, false ); - } catch ( Exception $e ) { - $errorResponse = array( - "message" => $e->getMessage(), - ); - - return GerencianetIntegration::result_api( $errorResponse, false ); - } - } - - public function pay_pix($options, $body) { - $response = false; - try { - $api = new Gerencianet($options); - $data = $api->pixCreateImmediateCharge([], $body); - $response = true; - } catch (GerencianetException $e) { - $data = array( - "code" => $e->getCode(), - "error" => $e->error, - "message" => $e->errorDescription, - ); - } catch (Exception $e) { - $data = array("message" => $e->getMessage()); - } - - return GerencianetIntegration::result_api($data, $response); - } - - public function generate_qrcode($options, $locationId) { - $response = false; - $params = ['id' => $locationId]; - - try { - $api = new Gerencianet($options); - $data = $api->pixGenerateQRCode($params, []); - $response = true; - } - catch (GerencianetException $e) { - $data = array( - "code" => $e->getCode(), - "error" => $e->error, - "message" => $e->errorDescription, - ); - } catch (Exception $e) { - $data = array("message" => $e->getMessage()); - } - - return GerencianetIntegration::result_api($data, $response); - } - - public function update_webhook($options, $pix_key, $skip_mtls, $url) { - $response = false; - $params = ['chave' => $pix_key]; - $options['headers'] = ['x-skip-mtls-checking' => $skip_mtls]; - - try { - $api = new Gerencianet($options); - $data = $api->pixConfigWebhook($params, ['webhookUrl' => $url]); - $response = true; - } - catch (GerencianetException $e) { - $data = array( - "code" => $e->getCode(), - "error" => $e->error, - "message" => $e->errorDescription, - ); - } catch (Exception $e) { - $data = array("message" => $e->getMessage()); - } - - return GerencianetIntegration::result_api($data, $response); - } - - public function pay_card( $charge_id, $paymentTokenCard, $installments, $billingAddress, $customer, $discount ) { - - $options = GerencianetIntegration::get_gn_api_credentials(); - $params = array( 'id' => $charge_id ); - - $paymentToken = $paymentTokenCard; - - if ( $discount > 0 ) { - $body = array( - 'payment' => array( - 'credit_card' => array( - 'installments' => $installments, - 'billing_address' => $billingAddress, - 'payment_token' => $paymentToken, - 'customer' => $customer, - 'discount' => $discount - ) - ) - ); - } else { - $body = array( - 'payment' => array( - 'credit_card' => array( - 'installments' => $installments, - 'billing_address' => $billingAddress, - 'payment_token' => $paymentToken, - 'customer' => $customer - ) - ) - ); - } - - try { - $api = new Gerencianet( $options ); - $charge = $api->payCharge( $params, $body ); - - return GerencianetIntegration::result_api( $charge, true ); - } catch ( GerencianetException $e ) { - $errorResponse = array( - "code" => $e->getCode(), - "error" => $e->error, - "message" => $e->errorDescription, - ); - - return GerencianetIntegration::result_api( $errorResponse, false ); - } catch ( Exception $e ) { - $errorResponse = array( - "message" => $e->getMessage(), - ); - - return GerencianetIntegration::result_api( $errorResponse, false ); - } - } - - public function notificationCheck( $notificationToken ) { - - $options = GerencianetIntegration::get_gn_api_credentials(); - - $params = array( - 'token' => $notificationToken - ); - - try { - $api = new Gerencianet( $options ); - $notification = $api->getNotification( $params, array() ); - - return GerencianetIntegration::result_api( $notification, true ); - } catch ( GerencianetException $e ) { - $errorResponse = array( - "message" => "Error retrieving notification: " . $notificationToken, - ); - - return GerencianetIntegration::result_api( $errorResponse, false ); - } catch ( Exception $e ) { - $errorResponse = array( - "message" => "Error retrieving notification: " . $notificationToken, - ); - - return GerencianetIntegration::result_api( $errorResponse, false ); - } - } - - public function result_api( $result, $success ) { - if ( $success ) { - return json_encode( $result ); - } else { - if ( isset( $result['message']['property'] ) ) { - $property = explode( "/", $result['message']['property'] ); - $propertyName = end( $property ); - } else { - $propertyName = ""; - } - - if ( isset( $result['code'] ) ) { - if ( isset( $result['message'] ) && $propertyName == "" ) { - $messageShow = $this->getErrorMessage( intval( $result['code'] ), $result['message'] ); - } else { - $messageShow = $this->getErrorMessage( intval( $result['code'] ), $propertyName ); - } - } else { - if ( isset( $result['message'] ) ) { - $messageShow = $result['message']; - } else { - $messageShow = $this->getErrorMessage( 1, $propertyName ); - } - } - - $errorResponse = array( - "code" => 0, - "message" => $messageShow - ); - - return json_encode( $errorResponse ); - } - } - - public function getErrorMessage( $error_code, $property ) { - $messageErrorDefault = 'Ocorreu um erro ao tentar realizar a sua requisição. Entre em contato com o proprietário da loja.'; - switch ( $error_code ) { - case 3500000: - $message = 'Erro interno do servidor.'; - break; - case 3500001: - $message = $messageErrorDefault; - break; - case 3500002: - $message = $messageErrorDefault; - break; - case 3500007: - $message = 'O tipo de pagamento informado não está disponível.'; - break; - case 3500008: - $message = 'Requisição não autorizada.'; - break; - case 3500010: - $message = $messageErrorDefault; - break; - case 3500021: - $message = 'Não é permitido parcelamento para assinaturas.'; - break; - case 3500030: - $message = 'Esta transação já possui uma forma de pagamento definida.'; - break; - case 3500034: - if ( $property == "payment_token" ) { - $message = 'Os dados do cartão não foram validados. Por favor, digite os dados do cartão novamente.'; - } else { - $message = 'O campo ' . $this->getFieldName( $property ) . ' não está preenchido corretamente.'; - } - break; - case 3500042: - $message = $messageErrorDefault; - break; - case 3500044: - $message = 'A transação não pode ser paga. Entre em contato com o vendedor.'; - break; - case 4600002: - $message = $messageErrorDefault; - break; - case 4600012: - $message = 'Ocorreu um erro ao tentar realizar o pagamento: ' . $property; - break; - case 4600022: - $message = $messageErrorDefault; - break; - case 4600026: - $message = 'cpf inválido'; - break; - case 4600029: - $message = 'pedido já existe'; - break; - case 4600032: - $message = $messageErrorDefault; - break; - case 4600035: - $message = 'Serviço indisponível para a conta. Por favor, solicite que o recebedor entre em contato com o suporte Gerencianet.'; - break; - case 4600037: - $message = 'O valor da emissão é superior ao limite operacional da conta. Por favor, solicite que o recebedor entre em contato com o suporte Gerencianet.'; - break; - case 4600073: - $message = 'O telefone informado não é válido.'; - break; - case 4600111: - $message = 'valor de cada parcela deve ser igual ou maior que R$5,00'; - break; - case 4600142: - $message = 'Transação não processada por conter incoerência nos dados cadastrais.'; - break; - case 4600148: - $message = 'já existe um pagamento cadastrado para este identificador.'; - break; - case 4600196: - $message = $messageErrorDefault; - break; - case 4600204: - $message = 'cpf deve ter 11 números'; - break; - case 4600209: - $message = 'Limite de emissões diárias excedido. Por favor, solicite que o recebedor entre em contato com o suporte Gerencianet.'; - break; - case 4600210: - $message = 'não é possível emitir três emissões idênticas. Por favor, entre em contato com nosso suporte para orientações sobre o uso correto dos serviços Gerencianet.'; - break; - case 4600212: - $message = 'Número de telefone já associado a outro CPF. Não é possível cadastrar o mesmo telefone para mais de um CPF.'; - break; - case 4600222: - $message = 'Recebedor e cliente não podem ser a mesma pessoa.'; - break; - case 4600219: - $message = 'Ocorreu um erro ao validar seus dados: ' . $property; - break; - case 4600224: - $message = $messageErrorDefault; - break; - case 4600254: - $message = 'identificador da recorrência não foi encontrado'; - break; - case 4600257: - $message = 'pagamento recorrente já executado'; - break; - case 4600329: - $message = 'código de segurança deve ter três digitos'; - break; - case 4699999: - $message = 'falha inesperada'; - break; - default: - $message = $messageErrorDefault; - break; - } - - return $message; - } - - public function getFieldName( $name ) { - switch ( $name ) { - case "neighborhood": - return 'Bairro'; - break; - case "street": - return 'Endereço'; - break; - case "complement": - return 'Complemento'; - break; - case "number": - return 'Número'; - break; - case "city": - return 'Cidade'; - break; - case "zipcode": - return 'CEP'; - break; - case "name": - return 'Nome'; - break; - case "cpf": - return 'CPF'; - break; - case "phone_number": - return 'Telefone de contato'; - break; - case "email": - return 'Email'; - break; - case "cnpj": - return 'CNPJ'; - break; - case "corporate_name": - return 'Razão Social'; - break; - case "installments": - return 'Quantidade de Parcelas'; - break; - case "birth": - return 'Data de nascimento'; - break; - default: - return ''; - break; - } - } - - public function formatMoney( $value, $gnFormat ) { - $cleanString = preg_replace( '/([^0-9\.,])/i', '', $value ); - $onlyNumbersString = preg_replace( '/([^0-9])/i', '', $value ); - - $separatorsCountToBeErased = strlen( $cleanString ) - strlen( $onlyNumbersString ) - 1; - - $stringWithCommaOrDot = preg_replace( '/([,\.])/', '', $cleanString, $separatorsCountToBeErased ); - $removedThousendSeparator = preg_replace( '/(\.|,)(?=[0-9]{3,}$)/', '', $stringWithCommaOrDot ); - - if ( $gnFormat ) { - return (int) ( ( (float) str_replace( ',', '.', $removedThousendSeparator ) ) * 100 ); - } else { - return ( (float) str_replace( ',', '.', $removedThousendSeparator ) ); - } - } - - public static function formatCurrencyBRL( $value ) { - $formated = "R$" . number_format( $value / 100, 2, ',', '.' ); - - return $formated; - } -} diff --git a/manual/woo-gerencianet-official/includes/lib/GerencianetValidation.php b/manual/woo-gerencianet-official/includes/lib/GerencianetValidation.php deleted file mode 100644 index 93f8e0b5..00000000 --- a/manual/woo-gerencianet-official/includes/lib/GerencianetValidation.php +++ /dev/null @@ -1,271 +0,0 @@ - 10){ - $validation = preg_match( "/^[1-9]{2}9?[0-9]{9}$/", $phone ); - }else{ - $validation = preg_match( "/^[1-9]{2}9?[0-9]{8}$/", $phone ); - } - if ( ! $validation ) { - return false; - } - - return true; - } - - /** - * Validates CPF data - * - * @param string $data - * - * @return boolean - */ - public function _cpf( $data ) { - if ( empty( $data ) ) { - return false; - } - - $cpf = preg_replace( '/[^0-9]/', '', $data ); - $cpf = str_pad( $cpf, 11, '0', STR_PAD_LEFT ); - - if ( strlen( $cpf ) != 11 ) { - return false; - } elseif ( $cpf == '00000000000' || - $cpf == '11111111111' || - $cpf == '22222222222' || - $cpf == '33333333333' || - $cpf == '44444444444' || - $cpf == '55555555555' || - $cpf == '66666666666' || - $cpf == '77777777777' || - $cpf == '88888888888' || - $cpf == '99999999999' - ) { - return false; - } else { - for ( $t = 9; $t < 11; $t ++ ) { - - for ( $d = 0, $c = 0; $c < $t; $c ++ ) { - $d += $cpf[$c] * (($t + 1) - $c); - } - $d = ( ( 10 * $d ) % 11 ) % 10; - if ($cpf[$c] != $d) { - return false; - } - } - } - - return true; - } - - /** - * Validates CNPJ data - * - * @param $cnpj - * - * @return bool - * @internal param string $data - */ - public function _cnpj( $cnpj ) { - if ( empty( $cnpj ) ) { - return false; - } - - $cnpj = preg_replace( '/[^0-9]/', '', (string) $cnpj ); - - if ( strlen( $cnpj ) != 14 ) { - return false; - } - - for ( $i = 0, $j = 5, $soma = 0; $i < 12; $i ++ ) { - $soma += $cnpj[$i] * $j; - $j = ( $j == 2 ) ? 9 : $j - 1; - } - $resto = $soma % 11; - if ( $cnpj[12] != ( $resto < 2 ? 0 : 11 - $resto ) ) { - return false; - } - - for ( $i = 0, $j = 6, $soma = 0; $i < 13; $i ++ ) { - $soma += $cnpj[$i] * $j; - $j = ( $j == 2 ) ? 9 : $j - 1; - } - $resto = $soma % 11; - - return $cnpj[13] == ( $resto < 2 ? 0 : 11 - $resto ); - } - - /** - * Validates zipcode fields - * - * @param string $data - * - * @return boolean - */ - public function _zipcode( $data ) { - $zipcode = preg_replace( '/[^0-9]/', '', $data ); - if ( strlen( $zipcode ) < 8 ) { - return false; - } - - return true; - } - - /** - * Validates street field - * - * @param string $data - * - * @return boolean - */ - public function _street( $data ) { - if ( strlen( $data ) < 2 || strlen( $data ) > 200 ) { - return false; - } - - return true; - } - - /** - * Validates number field - * - * @param string $data - * - * @return boolean - */ - public function _number( $data ) { - if ( strlen( $data ) < 2 || strlen( $data ) > 55 ) { - return false; - } - - return true; - } - - /** - * Validates neighborhood field - * - * @param string $data - * - * @return boolean - */ - public function _neighborhood( $data ) { - if ( strlen( $data ) < 1 || strlen( $data ) > 255 ) { - return false; - } - - return true; - } - - /** - * Validates city field - * - * @param string $data - * - * @return boolean - */ - public function _city( $data ) { - if ( strlen( $data ) < 2 || strlen( $data ) > 255 ) { - return false; - } - - return true; - } - - /** - * Validates state field - * - * @param string $data - * - * @return boolean - */ - public function _state( $data ) { - $validation = preg_match( "/^(?:A[CLPM]|BA|CE|DF|ES|GO|M[ATSG]|P[RBAEI]|R[JNSOR]|S[CEP]|TO)$/", $data ); - if ( ! $validation ) { - return false; - } - - return true; - } - - -} diff --git a/manual/woo-gerencianet-official/includes/lib/payments/Pix.php b/manual/woo-gerencianet-official/includes/lib/payments/Pix.php deleted file mode 100755 index 70d134d7..00000000 --- a/manual/woo-gerencianet-official/includes/lib/payments/Pix.php +++ /dev/null @@ -1,274 +0,0 @@ - __('An error occurred during your request. Please, try again.', WCGerencianetOficial::getTextDomain()) - ); - - return json_encode($errorResponse); - } - - $arrayDadosPost = array(); - foreach ($_POST as $key => $value) { - $arrayDadosPost[$key] = $value; - } - - $gateway = new WC_Gerencianet_Oficial_Gateway(); - - //get order data - $post_order_id = isset($arrayDadosPost['order_id']) ? $arrayDadosPost['order_id'] : $order_id; - $order = wc_get_order($post_order_id); - $full_name = $order->get_formatted_billing_full_name(); - - $totalOrder = strval($gateway->calculateTotal('pix', $order->get_total(), 'total')); - // $discountPix = (float) $gateway->calculateTotal('pix', $order->get_total(), 'discount'); - $document = isset($cpf_cnpj) ? preg_replace('/[^0-9]/', '', $cpf_cnpj) : $arrayDadosPost['cpf_cnpj']; - $docType = (strlen($document) == 11) ? 'cpf' : 'cnpj'; - - $body = [ - 'calendario' => [ 'expiracao' => (int)$gateway->expiration_pix * 3600 ], - 'devedor' => [ - $docType => $document, - 'nome' => $full_name - ], - 'valor' => [ 'original' => sprintf('%0.2f', $totalOrder) ], - 'chave' => $gateway->pix_key, - "infoAdicionais" => [ - [ - "nome" => "Pagamento em", - "valor" => get_bloginfo() - ], - [ - "nome" => "Número do Pedido", - "valor" => "#".$post_order_id - ] - ] - ]; - - $credential = Pix::get_gn_api_credentials($gateway->gnIntegration->get_gn_api_credentials()); - $gnApiResult = $gateway->gnIntegration->pay_pix($credential, $body); - $resultCheck = json_decode($gnApiResult, true); - - if (isset($resultCheck['txid']) && isset($resultCheck['loc']['id'])) { - $gnApiQrCode = $gateway->gnIntegration->generate_qrcode($credential, $resultCheck['loc']['id']); - $resultQrCode = json_decode($gnApiQrCode, true); - $resultCheck['charge_id'] = $post_order_id; // ---------------------------------------------------- MUDAR PARA ORDER_ID - - if(isset($resultQrCode['imagemQrcode'])) { - $resultCheck['imagemQrcode'] = $resultQrCode['imagemQrcode']; - global $wpdb; - - $order_data = $order->get_data(); - - if ($order_data['status'] != 'failed' && !isset($meta_discount_value_array[0])) { - $wpdb->insert($wpdb->prefix . 'woocommerce_order_items', array( - 'order_item_name' => __('Discount of ', WCGerencianetOficial::getTextDomain()) . str_replace(".", ",", $gateway->discountpix) . __('% Pix', WCGerencianetOficial::getTextDomain()), - 'order_item_type' => 'fee', - 'order_id' => intval($post_order_id) - )); - $lastid = $wpdb->insert_id; - - $wpdb->insert($wpdb->prefix . 'woocommerce_order_itemmeta', array( - 'order_item_id' => $lastid, - 'meta_key' => '_tax_class', - 'meta_value' => '0' - )); - - $wpdb->insert($wpdb->prefix . 'woocommerce_order_itemmeta', array( - 'order_item_id' => $lastid, - 'meta_key' => '_line_total', - 'meta_value' => '-' . $gateway->calculateTotal('pix', $order->get_total(), 'discount') - )); - - $wpdb->insert($wpdb->prefix . 'woocommerce_order_itemmeta', array( - 'order_item_id' => $lastid, - 'meta_key' => '_line_tax', - 'meta_value' => '0' - )); - - $wpdb->insert($wpdb->prefix . 'woocommerce_order_itemmeta', array( - 'order_item_id' => $lastid, - 'meta_key' => '_line_tax_data', - 'meta_value' => '0' - )); - - update_post_meta(intval($post_order_id), '_order_total', number_format(intval(ceil($gateway->gn_price_format($totalOrder))) / 100, 2, '.', '')); - update_post_meta(intval($post_order_id), '_payment_method_title', sanitize_text_field(__('Pix - Gerencianet', WCGerencianetOficial::getTextDomain()))); - add_post_meta(intval($post_order_id), 'pix_qr', $resultQrCode['imagemQrcode'], true); - add_post_meta(intval($post_order_id), 'pix_qr_copy', $resultQrCode['qrcode'], true); - add_post_meta(intval($post_order_id), 'txid', $resultCheck['txid'], true); - } - $order->update_status('on-hold', __('Waiting')); - wc_reduce_stock_levels($post_order_id); - WC()->cart->empty_cart(); - } - else { - if ($gateway->gnIntegration->debug == 'yes') { - write_log('GERENCIANET :: gerencianet_pay_pix Request QRCode : ERROR : Ajax request fail'); - } - } - } else { - if ($gateway->gnIntegration->debug == 'yes') { - write_log('GERENCIANET :: gerencianet_pay_pix Request : ERROR : Ajax request fail'); - } - } - - return json_encode($resultCheck); - } - - /** - * Check API webhook response. - * - * @return void - */ - public static function validate_webhook() { - @ob_clean(); - - $postdata = file_get_contents('php://input'); - $data = json_decode($postdata); - - // VALIDADE - if(isset($data->evento) && isset($data->data_criacao)) { - header('HTTP/1.0 200 OK'); - exit(); - } - // HOOK - else if (isset($data->pix) && Pix::checkWebhookTXID($data->pix)) { - header('HTTP/1.0 200 OK'); - do_action('pix_webhook', $data); - } else { - error_log(' :: Gerencianet :: PIX_CALLBACK : ERROR'); - wp_die(__('Request Failure', WCGerencianetOficial::getTextDomain())); - } - } - - /** - * Update gerencianet webhook - * - * @return void - */ - public static function updateWebhook($gateway, $pix_key) { - $url = WC()->api_request_url('pix'); - - // Remove /pix/ porque será adicionado pela gerencianet na chamada do webhook - $url = str_replace('/pix/', '', $url); - - // Se for localhost não faz update do weebhook - if(strpos($url, 'localhost') !== false || strpos($url, '127.0.0.1') !== false) { - error_log(' :: GERENCIANET :: Localhost is not a valid webhook'); - } - else { - $credential = Pix::get_gn_api_credentials($gateway->gnIntegration->get_gn_api_credentials()); - $skip_mtls = ($gateway->pix_mtls == 'yes') ? 'false' : 'true'; // Precisa ser string - - $gnApi = $gateway->gnIntegration->update_webhook($credential, $pix_key, $skip_mtls, $url); - $result = json_decode($gnApi, true); - - if($gateway->debug == 'yes' && $result['webhookUrl']) { - write_log(' :: GERENCIANET :: Update Pix Webhook'); - } - else { - error_log(' :: GERENCIANET :: Error update webhook'); - } - } - } - - /** - * Change order status - * - * @param array $posted gerencianet post data. - * - * @return void - */ - private static function checkWebhookTXID($pixData) { - $success = false; - - if(is_array($pixData)) { - foreach($pixData as &$value) { - $success = isset($value->txid) && sanitize_text_field($value->txid) !== ''; - if(!$success) break; - } - } - - return $success; - } - - /** - * Change order status - * - * @param array $posted gerencianet post data. - * - * @return void - */ - public static function successful_webhook($posted) { - // Percorre lista de notificações - foreach($posted->pix as &$order_notify) { - $args = array( - 'limit' => -1, - 'orderby' => 'date', - 'order' => 'DESC', - 'meta_key' => 'txid', - 'meta_compare' => '=', - 'meta_value' => $order_notify->txid - ); - - // Busca pedidos - $orders = wc_get_orders($args); - - // Atualiza status - foreach($orders as &$order) { - add_post_meta(intval($order->get_id()), 'endToEndId', $order_notify->endToEndId, true); - - if(isset($order_notify->devolucoes)){ - $order->update_status('refund'); - }else{ - $order->update_status('processing', __('Paid')); - $order->payment_complete(); - } - } - } - - exit(); - } -} diff --git a/manual/woo-gerencianet-official/languages/woo-gerencianet-official-pt_BR.mo b/manual/woo-gerencianet-official/languages/woo-gerencianet-official-pt_BR.mo deleted file mode 100644 index 1f82515c..00000000 Binary files a/manual/woo-gerencianet-official/languages/woo-gerencianet-official-pt_BR.mo and /dev/null differ diff --git a/manual/woo-gerencianet-official/languages/woo-gerencianet-official-pt_BR.po b/manual/woo-gerencianet-official/languages/woo-gerencianet-official-pt_BR.po deleted file mode 100755 index 72de4ab3..00000000 --- a/manual/woo-gerencianet-official/languages/woo-gerencianet-official-pt_BR.po +++ /dev/null @@ -1,696 +0,0 @@ -# Translation of Plugins - Woo Gerencianet Oficial - Development (trunk) in Portuguese (Brazil) -# This file is distributed under the same license as the Plugins - Woo Gerencianet Oficial - Development (trunk) package. -msgid "" -msgstr "" -"PO-Revision-Date: 2021-03-23 14:10-0300\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 2.4.2\n" -"Language: pt_BR\n" -"Project-Id-Version: Plugins - Woo Gerencianet Oficial - Development (trunk)\n" -"POT-Creation-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" - -#. Author URI of the plugin -msgid "http://www.gerencianet.com.br" -msgstr "http://www.gerencianet.com.br" - -#. Description of the plugin -msgid "Gateway de pagamento Gerencianet para WooCommerce." -msgstr "Gateway de pagamento Gerencianet para WooCommerce." - -#. Plugin URI of the plugin -msgid "https://wordpress.org/plugins/woo-gerencianet-official/" -msgstr "https://wordpress.org/plugins/woo-gerencianet-official/" - -#. Plugin Name of the plugin -msgid "Woo Gerencianet Oficial" -msgstr "Woo Gerencianet Oficial" - -#: woo-gerencianet-official.php:238 -msgid "The minimum WooCommerce version compatible with Gerencianet Payment plugin is 2.2.0. Please, update your WooCommerce version." -msgstr "A versão mínima do Woocommerce compatível com o plugin de pagamentos da Gerencianet é a 2.2.0. Por favor, atualize a versão do seu Woocommerce." - -#: woo-gerencianet-official.php:228 -msgid "The minimum PHP version compatible with Gerencianet Payment plugin is 5.4.0. Please, update your PHP version." -msgstr "A versão mínima do PHP compatível com o plugin de pagamento da Gerencianet é a 5.4.0. Por favor, atualize a versão do seu PHP." - -#: woo-gerencianet-official.php:218 -msgid "Gerencianet Gateway depends on the last version of %s to work" -msgstr "O plugin da Gerencianet depende da última versão do %s para funcionar" - -#: templates/transparent-checkout.php:550 -msgid "Select a payment option" -msgstr "Selecione a forma de pagamento" - -#: templates/transparent-checkout.php:538 -msgid "Generate Boleto" -msgstr "Gerar boleto bancário" - -#: templates/transparent-checkout.php:532 -msgid "Cancel order & restore cart" -msgstr "Cancelar pedido & limpar carrinho" - -#: templates/transparent-checkout.php:24 -msgid "This payment will be processed by Gerencianet Payments." -msgstr "Este pagamento será processado pela Gerencianet Pagamentos." - -#: includes/class-wc-gerencianet-oficial-gateway.php:691 -msgid "Cancel unpaid Boletos?" -msgstr "Cancelar Boletos inadimplentes?" - -#: includes/class-wc-gerencianet-oficial-gateway.php:693 -msgid "Enable cancellation of unpaid Boletos" -msgstr "Habilitar cancelamento de Boletos inadimplentes" - -#: includes/class-wc-gerencianet-oficial-gateway.php:694 -msgid "When enabled, cancels all Boletos that have not been paid. Preventing the customer from paying the Boleto after the due date." -msgstr "Quando ativado, cancela todos os boletos que não foram pagos. Evitando que o cliente pague o boleto após o vencimento." - -#: includes/class-wc-gerencianet-oficial-gateway.php:1803 -msgid "Click here to see the Boleto" -msgstr "Clique aqui para ver o boleto" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1768 -msgid "Currency %s is not supported by Gerencianet. Works only with BRL (Brazilian Real)." -msgstr "Moeda %s não é suportada pela Gerencianet. Funciona apenas com BRL (Real Brasileiro)." - -#: includes/class-wc-gerencianet-oficial-gateway.php:1758 -msgid "You should inform your Gerencianet Application Credentials. %s" -msgstr "Você deve informar as credenciais da sua aplicação Gerencianet. %s" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1747 -msgid "You should activate at least one payment option to activate the module. %s" -msgstr "Você deve ativar pelo menos uma forma de pagamento para ativar o módulo. %s" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1737 -msgid "You should inform your Gerencianet Account Payee Code. %s" -msgstr "Você deve informar o identificador de sua conta Gerencianet. %s" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1711 -#: includes/class-wc-gerencianet-oficial-gateway.php:1737 -#: includes/class-wc-gerencianet-oficial-gateway.php:1747 -#: includes/class-wc-gerencianet-oficial-gateway.php:1758 -msgid "Click here to configure" -msgstr "Clique aqui para configurar" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1711 -msgid "Sandbox mode is active. The payments will not be valid. %s" -msgstr "O modo Sandbox está ativo. Os pagamentos não serão válidos. %s" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1711 -#: includes/class-wc-gerencianet-oficial-gateway.php:1737 -#: includes/class-wc-gerencianet-oficial-gateway.php:1747 -#: includes/class-wc-gerencianet-oficial-gateway.php:1758 -#: includes/class-wc-gerencianet-oficial-gateway.php:1768 -msgid "Gerencianet Disabled" -msgstr "Gerencianet desabilitado" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1677 -msgid "Canceled " -msgstr "Cancelado " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1674 -msgid "Contested " -msgstr "Contestado " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1671 -msgid "Refunded " -msgstr "Reembolsado " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1668 -msgid "Unpaid " -msgstr "Não Pago " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1664 -msgid "Paid " -msgstr "Pago " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1629 -msgid "Request Failure" -msgstr "Falha na Requisição" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1607 -#: includes/class-wc-gerencianet-oficial-gateway.php:1785 -msgid "Show Boleto" -msgstr "Mostrar boleto" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1606 -msgid "Charge number:" -msgstr "Número da transação:" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1605 -msgid "
    , informed in your registration. If you do not receive the product or service purchased, you have 14 days from the payment confirmation date to open a dispute." -msgstr ", informado em seu registro. Se você não receber o produto ou o serviço da compra, você tem até 14 dias a partir da confirmação de pagamento para abrir uma disputa." - -#: includes/class-wc-gerencianet-oficial-gateway.php:1604 -msgid "The charge on your card is being processed. Soon as it is confirmed, we will send an e-mail to " -msgstr "A transação do seu cartão está sendo processada. Assim que for confirmada lhe enviaremos um email para " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1603 -msgid "The Boleto was successfully generated. Make payment in bank, lottery, post office or bankline. Stay tuned to the expiration date of the Boleto." -msgstr "O boleto bancário foi gerado com sucesso. Faça o pagamento em bancos, lotéricas, agências dos correios ou caixa eletrônico. Fique atento(a) a data de vencimento do boleto." - -#: includes/class-wc-gerencianet-oficial-gateway.php:1602 -msgid "Your order was successful and your payment is being processed. Wait until you receive confirmation of payment by email." -msgstr "Seu pedido foi realizado com sucesso e seu pagamento está sendo processado. Espere até receber a confirmação do pagamento por e-mail." - -#: includes/class-wc-gerencianet-oficial-gateway.php:1601 -msgid "Boleto emitted by Gerencianet" -msgstr "Boleto emitido pela Gerencianet" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1200 -#: includes/class-wc-gerencianet-oficial-gateway.php:1463 -msgid "Sandbox mode is active. The payments will not be valid." -msgstr "Modo Sandbox está ativo. Os pagamentos não serão validos." - -#: includes/class-wc-gerencianet-oficial-gateway.php:1198 -#: includes/class-wc-gerencianet-oficial-gateway.php:1461 -msgid "Please, wait..." -msgstr "Por favor, aguarde..." - -#: includes/class-wc-gerencianet-oficial-gateway.php:1196 -#: includes/class-wc-gerencianet-oficial-gateway.php:1459 -msgid "Are the last three digits
    on the back of the card." -msgstr "São os três digitos
    na parte de trás do cartão." - -#: includes/class-wc-gerencianet-oficial-gateway.php:1195 -#: includes/class-wc-gerencianet-oficial-gateway.php:1458 -msgid "Select the state" -msgstr "Selecione o estado" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1194 -#: includes/class-wc-gerencianet-oficial-gateway.php:1457 -msgid "Billing Address" -msgstr "Endereço de cobrança" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1193 -#: includes/class-wc-gerencianet-oficial-gateway.php:1456 -msgid "Pay in" -msgstr "Pague em" - -#: templates/transparent-checkout.php:544 -#: includes/class-wc-gerencianet-oficial-gateway.php:1192 -#: includes/class-wc-gerencianet-oficial-gateway.php:1455 -msgid "Pay with Credit Card" -msgstr "Pague com Cartão de Crédito" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1190 -#: includes/class-wc-gerencianet-oficial-gateway.php:1453 -msgid "Pay with Boleto" -msgstr "Pague com Boleto Bancário" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1189 -#: includes/class-wc-gerencianet-oficial-gateway.php:1452 -msgid "To pay Boleto or Credit Card the order must have more than R$5,00. But you can pay with PIX" -msgstr "Para pagar com boleto ou cartão de crédito o pedido precisa ter mais de R$5,00. Mas você pode pagar com PIX" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1187 -#: includes/class-wc-gerencianet-oficial-gateway.php:1450 -msgid "Enter your credit card details" -msgstr "Insira os dados do seu cartão" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1186 -#: includes/class-wc-gerencianet-oficial-gateway.php:1449 -msgid "Installments: " -msgstr "Parcelas: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1185 -#: includes/class-wc-gerencianet-oficial-gateway.php:1448 -msgid "Security Code: " -msgstr "Código de segurança: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1184 -#: includes/class-wc-gerencianet-oficial-gateway.php:1447 -msgid "Expiration date: " -msgstr "Data de vencimento: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1183 -#: includes/class-wc-gerencianet-oficial-gateway.php:1446 -msgid "Card Number: " -msgstr "Número do cartão: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1182 -#: includes/class-wc-gerencianet-oficial-gateway.php:1445 -msgid "Billing Data" -msgstr "Dados da cobrança" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1181 -#: includes/class-wc-gerencianet-oficial-gateway.php:1444 -msgid "State: " -msgstr "Estado: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1180 -#: includes/class-wc-gerencianet-oficial-gateway.php:1443 -msgid "City: " -msgstr "Cidade: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1179 -#: includes/class-wc-gerencianet-oficial-gateway.php:1442 -msgid "Zipcode: " -msgstr "Código postal: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1178 -#: includes/class-wc-gerencianet-oficial-gateway.php:1441 -msgid "Complement: " -msgstr "Complemento: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1177 -#: includes/class-wc-gerencianet-oficial-gateway.php:1440 -msgid "Neighborhood: " -msgstr "Bairro: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1176 -#: includes/class-wc-gerencianet-oficial-gateway.php:1439 -msgid "Number: " -msgstr "Número: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1175 -#: includes/class-wc-gerencianet-oficial-gateway.php:1438 -msgid "Address: " -msgstr "Endereço: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1174 -#: includes/class-wc-gerencianet-oficial-gateway.php:1437 -msgid "E-mail: " -msgstr "E-mail: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1173 -#: includes/class-wc-gerencianet-oficial-gateway.php:1436 -msgid "Birth Date: " -msgstr "Data de nascimento: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1172 -#: includes/class-wc-gerencianet-oficial-gateway.php:1435 -msgid "Phone: " -msgstr "Telefone: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1171 -#: includes/class-wc-gerencianet-oficial-gateway.php:1434 -msgid "CNPJ: " -msgstr "CNPJ: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1170 -#: includes/class-wc-gerencianet-oficial-gateway.php:1433 -msgid "CPF: " -msgstr "CPF: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1169 -#: includes/class-wc-gerencianet-oficial-gateway.php:1432 -msgid "CPF/CNPJ: " -msgstr "CPF/CNPJ: " - -#: includes/class-wc-gerencianet-oficial-gateway.php:1168 -#: includes/class-wc-gerencianet-oficial-gateway.php:1431 -msgid "Company:" -msgstr "Razão Social:" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1167 -#: includes/class-wc-gerencianet-oficial-gateway.php:1430 -msgid "Name:" -msgstr "Nome:" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1166 -#: includes/class-wc-gerencianet-oficial-gateway.php:1429 -msgid "Name/Company:" -msgstr "Nome/Razão Social:" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1165 -#: includes/class-wc-gerencianet-oficial-gateway.php:1428 -msgid "Opting to pay by Boleto, the confirmation will be performed on the next business day after payment." -msgstr "Optando por pagar através de boleto bancário, a confirmação será feita no próximo dia útil após o pagamento." - -#: includes/class-wc-gerencianet-oficial-gateway.php:1164 -#: includes/class-wc-gerencianet-oficial-gateway.php:1427 -msgid "Opting to pay by credit card, the payment is processed and the confirmation will take place within 48 hours." -msgstr "Optando por pagar através de cartão de crédito, o pagamento será processado e a confirmação será feita em 48 horas." - -#: includes/class-wc-gerencianet-oficial-gateway.php:1053 -msgid "Credit Card - Gerencianet" -msgstr "Cartão de Crédito - Gerencianet" - -#: includes/class-wc-gerencianet-oficial-gateway.php:898 -#: includes/class-wc-gerencianet-oficial-gateway.php:1066 -msgid "Waiting" -msgstr "Aguardando" - -#: includes/class-wc-gerencianet-oficial-gateway.php:894 -msgid "Boleto - Gerencianet" -msgstr "Boleto Bancário - Gerencianet" - -#: includes/class-wc-gerencianet-oficial-gateway.php:856 -msgid "% Boleto" -msgstr "% Boleto" - -#: includes/class-wc-gerencianet-oficial-gateway.php:856 -#: includes/class-wc-gerencianet-oficial-gateway.php:1191 -#: includes/class-wc-gerencianet-oficial-gateway.php:1454 -msgid "Discount of " -msgstr "Desconto de " - -#: includes/class-wc-gerencianet-oficial-gateway.php:628 -#: includes/class-wc-gerencianet-oficial-gateway.php:717 -#: includes/class-wc-gerencianet-oficial-gateway.php:741 -#: includes/class-wc-gerencianet-oficial-gateway.php:926 -#: includes/class-wc-gerencianet-oficial-gateway.php:964 -msgid "An error occurred during your request. Please, try again." -msgstr "Um erro ocorreu durante a sua requisição. Por favor, tente novamente." - -#: includes/class-wc-gerencianet-oficial-gateway.php:535 -msgid "Enable debug for Gerencianet" -msgstr "Habilitar o debug para a Gerencianet" - -#: includes/class-wc-gerencianet-oficial-gateway.php:533 -msgid "Debug" -msgstr "Debug" - -#: includes/class-wc-gerencianet-oficial-gateway.php:529 -msgid "Enable gerencianet sandbox" -msgstr "Habilitar o modo Sandbox da Gerencianet" - -#: includes/class-wc-gerencianet-oficial-gateway.php:527 -msgid "Sandbox" -msgstr "Sandbox" - -#: includes/class-wc-gerencianet-oficial-gateway.php:522 -msgid "Tests" -msgstr "Testes" - -#: includes/class-wc-gerencianet-oficial-gateway.php:518 -msgid "Enable order auto update" -msgstr "Habilitar atualização automática dos pedidos" - -#: includes/class-wc-gerencianet-oficial-gateway.php:516 -msgid "Auto order status update" -msgstr "Atualização automática dos status dos pedidos" - -#: includes/class-wc-gerencianet-oficial-gateway.php:511 -msgid "Callback" -msgstr "Callback" - -#: includes/class-wc-gerencianet-oficial-gateway.php:503 -msgid "Instructions line 4" -msgstr "Instruções linha 4" - -#: includes/class-wc-gerencianet-oficial-gateway.php:495 -msgid "Instructions line 3" -msgstr "Instruções linha 3" - -#: includes/class-wc-gerencianet-oficial-gateway.php:487 -msgid "Instructions line 2" -msgstr "Instruções linha 2" - -#: includes/class-wc-gerencianet-oficial-gateway.php:481 -#: includes/class-wc-gerencianet-oficial-gateway.php:489 -#: includes/class-wc-gerencianet-oficial-gateway.php:497 -#: includes/class-wc-gerencianet-oficial-gateway.php:505 -msgid "Text of Boleto instructions. Maximum of 90 characters per line." -msgstr "Texto das instruções do boleto. Máximo de 90 caracteres por linha." - -#: includes/class-wc-gerencianet-oficial-gateway.php:479 -msgid "Instructions line 1" -msgstr "Instruções linha 1" - -#: includes/class-wc-gerencianet-oficial-gateway.php:474 -msgid "Boleto Instructions (not required)" -msgstr "Instruções do Boleto (não obrigatório)" - -#: includes/class-wc-gerencianet-oficial-gateway.php:468 -msgid "Days to expire the Boleto after printed." -msgstr "Dias para vencimento do boleto após emissão." - -#: includes/class-wc-gerencianet-oficial-gateway.php:466 -msgid "Number of Days" -msgstr "Número de dias" - -#: includes/class-wc-gerencianet-oficial-gateway.php:462 -msgid "Apply discount just on products price" -msgstr "Aplica desconto somente no preço dos produtos" - -#: includes/class-wc-gerencianet-oficial-gateway.php:461 -msgid "Apply discount on total value with Shipping" -msgstr "Aplica desconto no valor total da compra (com frete)" - -#: includes/class-wc-gerencianet-oficial-gateway.php:458 -msgid "Choose mode of discount." -msgstr "Escolha a forma de desconto." - -#: includes/class-wc-gerencianet-oficial-gateway.php:456 -msgid "Apply discount mode" -msgstr "Aplica o modo de desconto" - -#: includes/class-wc-gerencianet-oficial-gateway.php:450 -msgid "Discount for payment with Boleto." -msgstr "Desconto para pagamento por boleto." - -#: includes/class-wc-gerencianet-oficial-gateway.php:448 -msgid "Boleto discount" -msgstr "Desconto do boleto" - -#: includes/class-wc-gerencianet-oficial-gateway.php:443 -msgid "Boleto Settings" -msgstr "Configurações do Boleto" - -#: includes/class-wc-gerencianet-oficial-gateway.php:439 -msgid "Enable Credit Card" -msgstr "Habilitar cartão de crédito" - -#: includes/class-wc-gerencianet-oficial-gateway.php:433 -msgid "Enable Boleto" -msgstr "Habilitar boleto bancário" - -#: includes/woo-gerencianet-official.php:520 -msgid "Enable Pix" -msgstr "Habilitar Pix" - -#: includes/woo-gerencianet-official.php:541 -msgid "Pix Settings" -msgstr "Configurações do Pix" - -#: includes/woo-gerencianet-official.php:546 -msgid "Pix Certificate" -msgstr "Certificado Pix" - -#: includes/woo-gerencianet-official.php:552 -msgid "Pix Certificate save" -msgstr "Certificado Pix salvo" - -#: includes/woo-gerencianet-official.php:559 -msgid "Pix discount" -msgstr "Desconto do Pix" - -#: includes/woo-gerencianet-official.php:551 -msgid "Certificate save" -msgstr "Nome do certificado salvo" - -#: templates/transparent-checkout.php:612 -msgid "Generate QR-Code" -msgstr "Gerar QR-Code" - -#: includes/woo-gerencianet-official.php:545 -msgid "Please enter your certificate" -msgstr "Por favor, clique aqui para enviar seu certificado" - -#: includes/woo-gerencianet-official.php:558 -msgid "Discount for payment with Pix" -msgstr "Desconto para pagamentos com Pix" - -#: includes/woo-gerencianet-official.php:57 -msgid "Boleto or Credit Card or Pix" -msgstr "Boleto Bancário, Cartão de Crédito ou Pix" - -#: includes/woo-gerencianet-official.php:57 -msgid "Boleto or Pix" -msgstr "Boleto ou Pix" - -#: includes/class-wc-gerencianet-oficial-gateway.php:431 -msgid "Boleto" -msgstr "Boleto Bancário" - -#: includes/class-wc-gerencianet-oficial-gateway.php:428 -msgid "These options need to be available to you in your gerencianet account." -msgstr "Estas opções precisam estar disponíveis para você em sua conta Gerencianet." - -#: includes/class-wc-gerencianet-oficial-gateway.php:426 -msgid "Payment Settings" -msgstr "Configurações do Pagamento" - -#: includes/class-wc-gerencianet-oficial-gateway.php:422 -msgid "Enable One Step Checkout" -msgstr "Habilita o checkout em um passo" - -#: includes/class-wc-gerencianet-oficial-gateway.php:417 -msgid "This option allow the payment direct on checkout page. Before use on production, please do some test payments in sandbox mode to verify if it is compatible with your store." -msgstr "Esta opção permite que o pagamento seja feito diretamente na página do checkout. Antes de usar em ambiente de Produção, por favor, faça alguns testes de pagamento em ambiente de Desenvolvimento (Sandbox) para verificar se é compatível com a sua loja." - -#: includes/class-wc-gerencianet-oficial-gateway.php:415 -#: includes/class-wc-gerencianet-oficial-gateway.php:420 -msgid "One Step Checkout" -msgstr "Checkout em um Passo" - -#: includes/class-wc-gerencianet-oficial-gateway.php:410 -msgid "Please enter your account payee code; this is needed in order to take payment." -msgstr "Por favor, digite o código identificador de sua conta. Será necessário para completar o pagamento." - -#: includes/class-wc-gerencianet-oficial-gateway.php:408 -msgid "Payee Code" -msgstr "Código Identificador da Conta" - -#: includes/class-wc-gerencianet-oficial-gateway.php:403 -msgid "Please enter your Client Secret Development; this is needed to test payment." -msgstr "Por favor, forneça o Client_Secret de desenvolvimento da sua conta. Será necessário para fazer testes de pagamento." - -#: includes/class-wc-gerencianet-oficial-gateway.php:401 -msgid "Client Secret Development" -msgstr "Client_Secret Desenvolvimento" - -#: includes/class-wc-gerencianet-oficial-gateway.php:396 -msgid "Please enter your Client Id Development; this is needed to test payment." -msgstr "Por favor, forneça o Client_ID de desenvolvimento da sua conta. Será necessário para fazer testes de pagamento." - -#: includes/class-wc-gerencianet-oficial-gateway.php:394 -msgid "Client ID Development" -msgstr "Client_ID Desenvolvimento" - -#: includes/class-wc-gerencianet-oficial-gateway.php:389 -msgid "Please enter your Client Secret Production; this is needed in order to take payment." -msgstr "Por favor, forneça o Client_Secret de produção da sua conta. Será necessário para fazer pagamentos." - -#: includes/class-wc-gerencianet-oficial-gateway.php:387 -msgid "Client Secret Production" -msgstr "Client_Secret Produção" - -#: includes/class-wc-gerencianet-oficial-gateway.php:382 -msgid "Please enter your Client Id Production; this is needed in order to take payment." -msgstr "Por favor, forneça o Cliente_Id de produção da sua conta; será necessário para fazer pagamento." - -#: includes/class-wc-gerencianet-oficial-gateway.php:380 -msgid "Client Id Production" -msgstr "Client_ID Produção" - -#: includes/class-wc-gerencianet-oficial-gateway.php:377 -msgid "Here you will find your credentials: Client ID/Secret Production, Client ID/Secret Development and Payee Code" -msgstr "Aqui você encontrará suas credenciais: Client ID/Secret Produção, Client ID/Secret Desenvolvimento e Identificador da conta" - -#: includes/class-wc-gerencianet-oficial-gateway.php:375 -msgid "Gerencianet Credentials" -msgstr "Credenciais da Gerencianet" - -#: includes/class-wc-gerencianet-oficial-gateway.php:370 -msgid "Please enter a prefix for your invoice numbers. If you use your gerencianet account for multiple stores ensure this prefix is unqiue as gerencianet will not allow orders with the same invoice number." -msgstr "Digite um prefixo para seus números de fatura. Se você usa sua conta Gerencianet para várias lojas, certifique-se de que este prefixo é único, pois a Gerencianet não permitirá pedidos com o mesmo número de fatura." - -#: includes/class-wc-gerencianet-oficial-gateway.php:368 -msgid "Invoice Prefix" -msgstr "Prefixo da Fatura" - -#: includes/class-wc-gerencianet-oficial-gateway.php:365 -msgid "Pay via gerencianet" -msgstr "Pague através da Gerencianet" - -#: includes/class-wc-gerencianet-oficial-gateway.php:364 -msgid "This controls the description which the user sees during checkout." -msgstr "Isso controla a descrição que o usuário vê durante o checkout." - -#: includes/class-wc-gerencianet-oficial-gateway.php:362 -msgid "Description" -msgstr "Descrição" - -#: includes/class-wc-gerencianet-oficial-gateway.php:357 -msgid "This controls the title which the user sees during checkout." -msgstr "Isso controla o título que o usuário vê durante o checkout." - -#: includes/class-wc-gerencianet-oficial-gateway.php:355 -msgid "Title" -msgstr "Título" - -#: includes/class-wc-gerencianet-oficial-gateway.php:351 -msgid "Enable Gerencianet Payments" -msgstr "Habilita Pagamentos via Gerencianet" - -#: includes/class-wc-gerencianet-oficial-gateway.php:349 -msgid "Enable/Disable" -msgstr "Habilitar/Desabilitar" - -#: includes/class-wc-gerencianet-oficial-gateway.php:318 -msgid "This module is the official module of Gerencianet Payment Gateway. If you have any doubths or suggestions, contact us at www.gerencianet.com.br" -msgstr "Este é o módulo oficial da Gerencianet Pagamentos. Se tiver alguma dúvida ou sugestão, entre em contato conosco em www.gerencianet.com.br" - -#: includes/class-wc-gerencianet-oficial-gateway.php:317 -msgid "Gerencianet Payments - Official Module" -msgstr "Gerencianet Pagamentos - Módulo Oficial" - -#: includes/class-wc-gerencianet-oficial-gateway.php:42 -msgid "Boleto or Credit Card" -msgstr "Boleto ou Cartão de Crédito" - -#: includes/class-wc-gerencianet-oficial-gateway.php:40 -#: includes/class-wc-gerencianet-oficial-gateway.php:437 -msgid "Credit Card" -msgstr "Cartão de Crédito" - -#: includes/class-wc-gerencianet-oficial-gateway.php:38 -msgid "Boleto" -msgstr "Boleto" - -#. Author of the plugin -#: includes/class-wc-gerencianet-oficial-gateway.php:23 -#: includes/class-wc-gerencianet-oficial-gateway.php:44 -#: includes/class-wc-gerencianet-oficial-gateway.php:359 -msgid "Gerencianet" -msgstr "Gerencianet" - -#: includes/woo-gerencianet-official.php:559 -msgid "Pix Key" -msgstr "Chave Pix" - -#: includes/woo-gerencianet-official.php:561 -msgid "Insert your Pix Key" -msgstr "Insira a sua chave Pix" - -#: includes/woo-gerencianet-official.php:592 -msgid "Number of Hours" -msgstr "Número de Horas" - -#: includes/woo-gerencianet-official.php:594 -msgid "Hours to expire the pix after printed" -msgstr "Horas para o vencimento do pix após a emissão" - -#: includes/woo-gerencianet-official.php:57 -msgid "Credit Card or Pix" -msgstr "Cartão de Crédito ou Pix" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1790 -msgid "Payment for PIX" -msgstr "Pagamento via PIX" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1793 -msgid "Scan the code below and make the payment for Pix" -msgstr "Escaneie o código abaixo e realize o pagamento através do Pix" - -#: includes/class-wc-gerencianet-oficial-gateway.php:602 -msgid "Validate mTLS" -msgstr "Validar mTLS" - -#: includes/class-wc-gerencianet-oficial-gateway.php:604 -msgid "Understand the risks of not configuring mTLS by accessing the link https://gnetbr.com/rke4baDVyd" -msgstr "Entenda os riscos de não configurar o mTLS acessando o link https://gnetbr.com/rke4baDVyd" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1353 -msgid "Or copy the Code below and paste it into the app where you are going to make the payment:" -msgstr "Ou copie o código abaixo e cole no aplicativo onde você fará o pagamento:" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1352 -msgid "Pay with Pix" -msgstr "Pague com Pix" - -#: includes/class-wc-gerencianet-oficial-gateway.php:1342 -msgid "Opting to pay by Pix, the payment is processed and the confirmation will take place within a couple seconds." -msgstr "Optando por pagar via Pix, o pagamento é processado e a confirmação ocorrerá em alguns segundos." - -#: includes/class-wc-gerencianet-oficial-gateway.php:26 -msgid "With Gerencianet you can receive payments via Boleto, Credit Card and Pix!" -msgstr "Com a Gerencianet você pode receber pagamentos via Boleto Bancário, Cartão de Crédito ou Pix!" \ No newline at end of file diff --git a/manual/woo-gerencianet-official/templates/order-received.php b/manual/woo-gerencianet-official/templates/order-received.php deleted file mode 100755 index 23550d82..00000000 --- a/manual/woo-gerencianet-official/templates/order-received.php +++ /dev/null @@ -1,103 +0,0 @@ - - - - - -
    -
    -
    -
    - Gerencianet -
    -
    - -
    -
    -
    - -
    -
    -
    -
    - -
    -
    - -
    - -

    - -

    - -
    - -
    - - -
    - - -
    -
    - - - -
    - -
    -
    - -
    -
    -
    - -
    - - - -
    - -
    - - - -
    - -
    - -
    -
    -
    \ No newline at end of file diff --git a/manual/woo-gerencianet-official/templates/transparent-checkout.php b/manual/woo-gerencianet-official/templates/transparent-checkout.php deleted file mode 100644 index 1feb6590..00000000 --- a/manual/woo-gerencianet-official/templates/transparent-checkout.php +++ /dev/null @@ -1,836 +0,0 @@ - - - - -

    -

    - -
    -
    -
    - - -
    - -
    - -
    - -
    - - = 500) { ?> -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -
    - 0) { ?> -
    - get_formatted_order_total()); ?>
    - % - -
    - -
    -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    - -
    -

    - -

    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    -
    - -
    - -
    -
    -
    - - - - - = 500) { ?> -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -
    -

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

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

    - -

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

    - -
    - -
    -
    - -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    -
    -
    - -
    - -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    - -
    - - - -
    -
    - -
    -
    - -
    - / -
    - -
    -
    -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    - - - -
    -
    -
    -
    - -
    -
    - " - alt="Pix logo"> -
    -
    - -
    -
    -
    -
    -
    -
    -
    - 0) { ?> -
    - get_formatted_order_total()); ?>
    - % - -
    - -
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    -

    -
    -
    - - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    - - - - \ No newline at end of file diff --git a/manual/woo-gerencianet-official/templates/transparent-osc.php b/manual/woo-gerencianet-official/templates/transparent-osc.php deleted file mode 100644 index e5be945a..00000000 --- a/manual/woo-gerencianet-official/templates/transparent-osc.php +++ /dev/null @@ -1,1957 +0,0 @@ - - - - - -
    - -
    -
    -
    - - -
    - -
    -
    - -
    - -
    - = 500) { ?> -
    -
    -
    - -
    -
    - -
    -
    - - 0) { ?> -
    +% de - desconto
    - -
    -
    -
    -
    -
    - - = 500){ ?> -
    -
    -
    - -
    -
    - -
    -
    - -
    em até
    -
    -
    -
    -
    -
    - - -
    -
    -
    - -
    -
    -
    - " alt="Pix logo"> -
    -
    -
    - - 0) { ?> -
    +% de - desconto
    - -
    -
    -
    -
    -
    - - - -
    -
    - - - - = 500){ ?> -
    -
    -
    -

    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    - -
    - -
    - -
    -
    -
    - -
    -
    - -
    - -
    - 0) { ?> -
    -
    - DESCONTO DE % NO BOLETO: -
    -
    - - -
    -
    - -
    -
    - TOTAL: -
    -
    - -
    -
    -
    -
    - - - - = 500) { ?> -
    gn-hide gn-osc-background"> -
    -
    -

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

    - -

    -
    - -
    -
    -
    - -
    - -
    - -
    - -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    - -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    -
    -
    - -
    - - - -
    -
    -
    - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -
    - - - -
    -
    - - - -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    - / -
    - -
    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - TOTAL: -
    -
    - - -
    -
    -
    - -
    - - - -
    gn-hide gn-osc-background"> -
    -
    -

    -
    -
    -
    -
    -
    -
    - -
    - -
    - -
    - -
    -
    - -
    -
    -
    - -
    - 0) { ?> -
    -
    - DESCONTO DE % NO PIX: -
    -
    -
    - - -
    -
    - -
    -
    - TOTAL: -
    -
    - -
    -
    -
    -
    - - -
    diff --git a/manual/woo-gerencianet-official/wc-gerencianet-oficial.php b/manual/woo-gerencianet-official/wc-gerencianet-oficial.php deleted file mode 100755 index 8cd8af5d..00000000 --- a/manual/woo-gerencianet-official/wc-gerencianet-oficial.php +++ /dev/null @@ -1,16 +0,0 @@ - $active_plugin ) { - if ( strstr( $active_plugin, '/wc-gerencianet-oficial.php' ) ) { - $active_plugins[ $key ] = str_replace( '/wc-gerencianet-oficial.php', '/woo-gerencianet-official.php', $active_plugin ); - } -} - -update_option( 'active_plugins', $active_plugins ); diff --git a/manual/woo-gerencianet-official/woo-gerencianet-official.php b/manual/woo-gerencianet-official/woo-gerencianet-official.php deleted file mode 100644 index bf6a281d..00000000 --- a/manual/woo-gerencianet-official/woo-gerencianet-official.php +++ /dev/null @@ -1,268 +0,0 @@ -=')) { - if (version_compare(WOOCOMMERCE_VERSION, '5.0', '>=')) { - if (class_exists('WC_Payment_Gateway')) { - - include_once 'includes/class-wc-gerencianet-oficial-gateway.php'; - include_once 'includes/lib/GerencianetIntegration.php'; - include_once 'includes/lib/GerencianetValidation.php'; - include_once 'includes/lib/payments/Pix.php'; - - add_filter('woocommerce_payment_gateways', array($this, 'add_gateway')); - - add_action('wp_ajax_woocommerce_gerencianet_validate_credentials', array($this, 'woocommerce_gerencianet_validate_credentials')); - add_action('wp_ajax_woocommerce_gerencianet_get_installments', array($this, 'woocommerce_gerencianet_get_installments')); - add_action('wp_ajax_nopriv_woocommerce_gerencianet_get_installments', array($this, 'woocommerce_gerencianet_get_installments')); - add_action('wp_ajax_woocommerce_gerencianet_pay_billet', array($this, 'woocommerce_gerencianet_pay_billet')); - add_action('wp_ajax_nopriv_woocommerce_gerencianet_pay_billet', array($this, 'woocommerce_gerencianet_pay_billet')); - add_action('wp_ajax_woocommerce_gerencianet_pay_card', array($this, 'woocommerce_gerencianet_pay_card')); - add_action('wp_ajax_nopriv_woocommerce_gerencianet_pay_card', array($this, 'woocommerce_gerencianet_pay_card')); - add_action('wp_ajax_woocommerce_gerencianet_create_charge', array($this, 'woocommerce_gerencianet_create_charge')); - add_action('wp_ajax_nopriv_woocommerce_gerencianet_create_charge', array($this, 'woocommerce_gerencianet_create_charge')); - add_action('wp_ajax_woocommerce_gerencianet_pay_pix', array('Pix', 'woocommerce_gerencianet_pay_pix')); - add_action('wp_ajax_nopriv_woocommerce_gerencianet_pay_pix', array('Pix', 'woocommerce_gerencianet_pay_pix')); - - // Webhook Pix - add_action('woocommerce_api_pix', array('Pix', 'validate_webhook')); - add_action('pix_webhook', array('Pix', 'successful_webhook')); - } else { - add_action('admin_notices', array($this, 'woocommerce_missing_notice')); - } - } else { - add_action('admin_notices', array($this, 'woocommerce_not_supported_by_gn_notice')); - } - } else { - add_action('admin_notices', array($this, 'php_not_supported_by_gn_notice')); - } - } - - /** - * Return an instance of this class. - * - * @return object - */ - public static function get_instance() - { - - if (null == self::$instance) { - self::$instance = new self; - } - - return self::$instance; - } - - /** - * Return ajax request - * - * @return string - */ - public function woocommerce_gerencianet_validate_credentials() - { - $gnGateway = new WC_Gerencianet_Oficial_Gateway(); - echo $gnGateway->gerencianet_validate_credentials(); - die(); - } - - /** - * Return ajax request - * - * @return string - */ - public function woocommerce_gerencianet_get_installments() - { - $gnGateway = new WC_Gerencianet_Oficial_Gateway(); - echo $gnGateway->gerencianet_get_installments(); - die(); - } - - /** - * Return ajax request - * - * @return string - */ - public function woocommerce_gerencianet_pay_billet() - { - $gnGateway = new WC_Gerencianet_Oficial_Gateway(); - echo $gnGateway->gerencianet_pay_billet('checkout_page', null, null); - die(); - } - - /** - * Return ajax request - * - * @return string - */ - public function woocommerce_gerencianet_pay_card() - { - $gnGateway = new WC_Gerencianet_Oficial_Gateway(); - echo $gnGateway->gerencianet_pay_card('checkout_page', null, null); - die(); - } - - /** - * Return ajax request - * - * @return string - */ - public function woocommerce_gerencianet_create_charge() - { - $gnGateway = new WC_Gerencianet_Oficial_Gateway(); - echo $gnGateway->gerencianet_create_charge('checkout_page', null); - die(); - } - - /** - * Return the gateway id - * - * @return string - */ - public static function get_gateway_id() - { - return self::$gateway_id; - } - - /** - * Load the plugin text domain for translation. - * - * @return void - */ - public function load_plugin_textdomain() - { - load_textdomain(WCGerencianetOficial::getTextDomain(), WP_LANG_DIR . '/woo-gerencianet-official/woo-gerencianet-official-pt_BR.mo'); - load_plugin_textdomain(WCGerencianetOficial::getTextDomain(), false, dirname(plugin_basename(__FILE__)) . '/languages'); - } - - /** - * Add the gateway to WooCommerce. - * - * @param array $methods WooCommerce payment methods. - * - * @return array - */ - public function add_gateway($methods) - { - $methods[] = 'WC_Gerencianet_Oficial_Gateway'; - - return $methods; - } - - - /** - * Return the textDomain. - * - * @return string TextDomain variable. - */ - public static function getTextDomain() - { - return self::$textDomain; - } - - - /** - * WooCommerce missing notice. - * - * @return string - */ - public function woocommerce_missing_notice() - { - echo '

    ' . sprintf(__('Gerencianet Gateway depends on the last version of %s to work', WCGerencianetOficial::getTextDomain()), 'WooCommerce') . '

    '; - } - - /** - * PHP Version not supported by Gerencianet Plugin notice. - * - * @return string - */ - public function php_not_supported_by_gn_notice() - { - echo '

    ' . sprintf(__('The minimum PHP version compatible with Gerencianet Payment plugin is 7.0.0. Please, update your PHP version.', WCGerencianetOficial::getTextDomain())) . '

    '; - } - - /** - * WooCommerce Version not supported by Gerencianet Plugin notice. - * - * @return string - */ - public function woocommerce_not_supported_by_gn_notice() - { - echo '

    ' . sprintf(__('The minimum WooCommerce version compatible with Gerencianet Payment plugin is 5.0.0. Please, update your WooCommerce version.', WCGerencianetOficial::getTextDomain())) . '

    '; - } - } - - add_action('plugins_loaded', array('WCGerencianetOficial', 'get_instance'), 0); - -endif; - -/** - * Adds support to notification - * - * @return void - */ -function WCGerencianetOficial_legacy_ipn() -{ - - if (isset($_POST['notification'])) { - - global $woocommerce; - $woocommerce->payment_gateways(); - - do_action('woocommerce_api_WC_Gerencianet_Oficial_Gateway'); - } -} - -add_action('init', 'WCGerencianetOficial_legacy_ipn'); diff --git a/manual/woo-gerencianet-official/readme.txt b/readme.txt similarity index 67% rename from manual/woo-gerencianet-official/readme.txt rename to readme.txt index 725f12f7..7c3c536d 100644 --- a/manual/woo-gerencianet-official/readme.txt +++ b/readme.txt @@ -1,55 +1,49 @@ -=== Woo Gerencianet Oficial - Pix, boletos e cartão === -Contributors: Gerencianet -Tags: woocommerce, gerencianet, payment, transparent checkout, pix, Boleto, card, brazil, payments brazil -Requires at least: 5.x -Tested up to: 6.0 -Stable tag: 1.4.7 -License: GPLv2 or later -License URI: http://www.gnu.org/licenses/gpl-2.0.html - -Receba pagamentos por Boleto bancário e cartão de crédito em sua loja WooCommerce com a Gerencianet. - -== Suporte Técnico == -Atenção: Para agilizar o atendimento, abra um ticket informando a falha apresentada. Você pode abrir um ticket [Clicando Aqui!](https://sistema.gerencianet.com.br/tickets/criar/) - -== Descrição == - -Este é o Módulo Oficial de integração fornecido pela [Gerencianet](https://gerencianet.com.br/) para WooCommerce. Com ele, o proprietário da loja pode optar por receber pagamentos por boleto bancário, cartão de crédito e/ou Pix. Todo processo é realizado por meio do checkout transparente. Com isso, o comprador não precisa sair do site da loja para efetuar o pagamento. - -Caso você tenha alguma dúvida ou sugestão, entre em contato conosco pelo site [Gerencianet](https://gerencianet.com.br/fale-conosco/). - -= Requisitos = - -* Versão do PHP: 7.x ou 8.x -* Versão do WooCommerce: 5.x -* Versão do WordPress: 5.x - -= Instalação automática = - -1. Acesse o link em sua loja "Plugins" -> "Adicionar novo" -> No campo de busca, pesquise por "Woo Gerencianet Oficial" ([Link oficial do Plug-in](https://wordpress.org/plugins/woo-gerencianet-official/)). -2. Clique em "Instalar agora". -4. Após a instalação, clique em "Ativar o Plugin". -5. Configure o plugin em "WooCommerce" > "Configurações" > "Finalizar Compra" > "Gerencianet" e comece a receber pagamentos. - -= Instalação manual = - -1. Faça o download da [última versão](https://downloads.wordpress.org/plugin/woo-gerencianet-official.zip) do plugin. -2. Acesse o link em sua loja "Plugins" -> "Adicionar novo" -> "Fazer o upload do plugin" e envie o arquivo 'woo-gerencianet-official.zip' ou extraia o conteúdo do arquivo dentro do diretório de plugins da loja. -3. Após a instalação, clique em "Ativar o Plugin". -4. Configure o plugin em "WooCommerce" > "Configurações" > "Finalizar Compra" > "Gerencianet" e comece a receber pagamentos. - -= Configuração = - -1. Ative o plugin. -2. Configure as credenciais de sua Aplicação Gerencianet. Para criar uma nova Aplicação, entre em sua conta Gerencianet, acesse o menu "API" e clique em "Minhas Aplicações" -> "Nova aplicação". Insira as credenciais disponíveis neste link (Client ID e Client Secret de produção e desenvolvimento) nos respectivos campos de configuração do plugin. -3. Insira o Payee Code (Identificador de Conta) de sua conta Gerencianet. Para encontrar o Payee Code, entre em sua conta Gerencianet, acesse o menu "API" e clique em "Identificador de Conta". -4. Configure as opções de pagamento que deseja receber: Boleto, Cartão de Crédito e/ou Pix. -5. Caso utilize a opção de Pix: - * Insira sua Chave Pix cadastrada em sua conta Gerencianet. - * Insira o seu certificado (arquivo .p12 ou .pem). - * Marque o campo "Validar mTLS" caso deseje utilizar a validação mTLS em seu servidor. -6. Defina se deseja aplicar desconto para pagamentos com Boleto, o modo de aplicar esse desconto e insira o número de dias corridos para vencimento. -7. Defina as instruções para pagamento no Boleto em quatro linhas de até 90 caracteres cada uma. Caso essas linhas não sejam definidas pelo lojista, será exibido no boleto as instruções padrões da Gerencianet. -8. Escolha se deseja que o plugin atualize os status dos pedidos da loja automaticamente, de acordo com as notificações de alteração do status da cobrança Gerencianet. -9. Configure se deseja ativar o Sandbox (ambiente de testes) e Debug. -10. Recomendamos que antes de disponibilizar pagamentos pela Gerencianet, o lojista realize testes de cobrança com o sandbox(ambiente de testes) ativado para verificar se o procedimento de pagamento está acontecendo conforme esperado. +=== Plugin Name === +Contributors: Gerencianet +Tags: woocommerce, gerencianet, payment, transparent checkout, pix, Boleto, card, brazil, payments brazil, cartão de crédito +Requires at least: 5.x +Tested up to: 6.1 +Stable tag: 2.0.3 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +Receba pagamentos por Boleto bancário, Pix e cartão de crédito em sua loja WooCommerce com a Gerencianet. + +== Suporte Técnico == +Atenção: Para agilizar o atendimento, abra um ticket informando a falha apresentada. Você pode abrir um ticket [Clicando Aqui!](https://sistema.gerencianet.com.br/tickets/criar/) + +== Descrição == + +Este é o Módulo Oficial de integração fornecido pela [Gerencianet](https://gerencianet.com.br/) para WooCommerce. Com ele, o proprietário da loja pode optar por receber pagamentos por boleto bancário, cartão de crédito e/ou Pix. Todo processo é realizado por meio do checkout transparente. Com isso, o comprador não precisa sair do site da loja para efetuar o pagamento. + +Caso você tenha alguma dúvida ou sugestão, entre em contato conosco pelo site [Gerencianet](https://gerencianet.com.br/fale-conosco/). + += Requisitos = + +* Versão do PHP: 7.x ou 8.x +* Versão do WooCommerce: 5.x +* Versão do WordPress: 5.x + += Instalação automática = + +1. Acesse o link em sua loja "Plugins" -> "Adicionar novo" -> No campo de busca, pesquise por "Gerencianet Oficial". +2. Clique em "Instalar agora". +4. Após a instalação, clique em "Ativar o Plugin". +5. Configure o plugin em "WooCommerce" > "Configurações" > "Finalizar Compra" > "Gerencianet" e comece a receber pagamentos. + + += Configuração = + +1. Ative o plugin. +2. Configure as credenciais de sua Aplicação Gerencianet. Para criar uma nova Aplicação, entre em sua conta Gerencianet, acesse o menu "API" e clique em "Aplicações" -> "Nova aplicação". Insira as credenciais disponíveis neste link (Client ID e Client Secret de produção e homologação) nos respectivos campos de configuração do plugin. +3. Insira o Payee Code (Identificador de Conta) de sua conta Gerencianet. Para encontrar o Payee Code, entre em sua conta Gerencianet, acesse o menu "API" e clique em "Introdução". +4. Configure as opções de pagamento que deseja receber: Boleto, Cartão de Crédito e/ou Pix. +5. Caso utilize a opção de Pix: + * Insira sua Chave Pix cadastrada em sua conta Gerencianet. + * Insira o seu certificado (arquivo .p12 ou .pem). + * Marque o campo "Validar mTLS" caso deseje utilizar a validação mTLS em seu servidor. +6. Defina se deseja aplicar desconto para pagamentos com Boleto, o modo de aplicar esse desconto e insira o número de dias corridos para vencimento. +7. Defina as instruções para pagamento no Boleto em quatro linhas de até 90 caracteres cada uma. Caso essas linhas não sejam definidas pelo lojista, será exibido no boleto as instruções padrões da Gerencianet. +8. Escolha se deseja que o plugin atualize os status dos pedidos da loja automaticamente, de acordo com as notificações de alteração do status da cobrança Gerencianet. +9. Configure se deseja ativar o Sandbox (ambiente de testes) e Debug. +10. Recomendamos que antes de disponibilizar pagamentos pela Gerencianet, o lojista realize testes de cobrança com o sandbox(ambiente de testes) ativado para verificar se o procedimento de pagamento está acontecendo conforme esperado. \ No newline at end of file diff --git a/templates/gerencianet-thankyou.php b/templates/gerencianet-thankyou.php new file mode 100644 index 00000000..e3e481c1 --- /dev/null +++ b/templates/gerencianet-thankyou.php @@ -0,0 +1,71 @@ +get_payment_method(); + +switch ( $payment_method ) { + case GERENCIANET_CARTAO_ID: + // echo "

    ".__("CPF is required!", Gerencianet_I18n::getTextDomain())."

    "; + break; + case GERENCIANET_BOLETO_ID: + echo '"; + break; + case GERENCIANET_PIX_ID: + $pixCopy = get_post_meta( $order_id, '_gn_pix_copy', true ); + echo "

    Escaneie o QrCode abaixo para pagar

    +
    + +
    +
    +

    Ou copie o Pix Copia e Cola clicando no botão abaixo!

    + Copiar Pix Copia e Cola +
    + "; + break; + default: + // code... + break; +} + + +?> + + + + + + + + diff --git a/tests/README.md b/tests/README.md deleted file mode 100644 index f158d29c..00000000 --- a/tests/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Testes Unitários - -## Requisitos -- php >= 5; -- ![composer](https://getcomposer.org/) - -## Comfiguração -- Primeiro copie a pasta 'tests' para a raiz do wordpress, instalado no servidor. -- Insira o certificado na pasta 'certs'. -- Insira suas credenciais no arquivo 'tests/gerencianet/pix/config.json': - -```json - "client_id_prod": "your_client_id_prod", - "client_secret_prod": "your_client_secret_prod", - "client_id_dev": "your_client_id_dev", - "client_secret_dev": "your_client_secret_dev", - "payee_code": "your_payee_code", - "pix_key": "your_pix_key", - "pix_cert" : "../../certs/your_cert_name.pem", - "sandbox": false -``` - -## Rodando os testes -- Rode o seguinte comando na pasta de testes para instalar as dependências: -```shell -composer install -``` -- Para iniciar os testes, rode: -```shell -vendor/bin/phpunit -``` \ No newline at end of file diff --git a/tests/bootstrap.php b/tests/bootstrap.php deleted file mode 100644 index 6033a7c6..00000000 --- a/tests/bootstrap.php +++ /dev/null @@ -1,4 +0,0 @@ -=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - } -} diff --git a/tests/gerencianet/pix/PixChargeTest.php b/tests/gerencianet/pix/PixChargeTest.php deleted file mode 100644 index b7cece9c..00000000 --- a/tests/gerencianet/pix/PixChargeTest.php +++ /dev/null @@ -1,106 +0,0 @@ -pixClass = new Pix(); - $this->gatewayGerencianet = new WC_Gerencianet_Oficial_Gateway(); - - $file = file_get_contents(__DIR__.'/config.json'); - $this->credentials = json_decode($file, true); - - //inserindo credenciais do usuario na classe gateway - $this->setValuesCredentials(); - } - - public function testCredentialsGnIntegration() { - $arrayExpected = [ - 'client_id' => $this->credentials['client_id_prod'], - 'client_secret' => $this->credentials['client_secret_prod'], - 'sandbox' => false - ]; - - $this->assertEquals( - $arrayExpected, - $this->gatewayGerencianet->gnIntegration->get_gn_api_credentials() - ); - } - - public function testGerencianetPayPixError() { - $returnExpected = '{"message":"An error occurred during your request. Please, try again."}'; - $this->assertEquals($returnExpected, $this->pixClass->gerencianet_pay_pix(null,null,null)); - } - - public function testGerencianetPayPixSucess() { - $order = wc_create_order(); - $order_id = $order->get_id(); - - $address = array( - 'first_name' => '', - 'last_name' => '', - 'company' => '', - 'email' => '', - 'phone' => '', - 'address_1' => '', - 'address_2' => '', - 'city' => '', - 'state' => '', - 'postcode' => '', - 'country' => '' - ); - - $order->set_address( $address, 'billing' ); - //inserindo valor total do pedido - $this->setTotalCart(00.01); - - $gateway = $this->gatewayGerencianet; - $_POST = array( - 'cpf_cnpj' => '' - ); - - $returnContains = 'imagemQrcode'; - $returnResponse = json_decode($this->pixClass->gerencianet_pay_pix(null,$order_id,null), true); - - //testa se o QRcode foi gerado - $this->assertContains($returnResponse[$returnContains], $returnResponse); - //testa se o QRcode foi salvo no banco - $this->testQRcode($returnResponse[$returnContains], $order_id); - //testa se o txid foi salvo no banco - $this->testTxid($returnResponse['txid'],$order_id); - } - - private function testQRcode($QRcode, $post_id) { - - $QRcodeExpected = get_post_meta($post_id, 'pix_qr', true); - - $this->assertEquals($QRcodeExpected,$QRcode); - } - - private function testTxid($txid, $post_id) { - - $txidExpected = get_post_meta($post_id, 'txid', true); - - $this->assertEquals($txidExpected,$txid); - } - - private function setValuesCredentials() { - $this->gatewayGerencianet->gnIntegration = new GerencianetIntegration( - $this->credentials['client_id_prod'], - $this->credentials['client_secret_prod'], - $this->credentials['client_id_dev'], - $this->credentials['client_secret_dev'], - $this->credentials['sandbox'], - $this->credentials['payee_code'] - ); - } - - private function setTotalCart($totalValueCart) { - global $woocommerce; - - $woocommerce->cart->set_cart_contents_total($totalValueCart); - } -} diff --git a/tests/gerencianet/pix/PixDiscountTest.php b/tests/gerencianet/pix/PixDiscountTest.php deleted file mode 100644 index 9b5b6497..00000000 --- a/tests/gerencianet/pix/PixDiscountTest.php +++ /dev/null @@ -1,62 +0,0 @@ -pixClass = new Pix(); - $this->gatewayGerencianet = new WC_Gerencianet_Oficial_Gateway(); - } - - public function testCalculatePixDiscountTotal() { - $data = array( - 'total' => 40.00, //valor total do carrinho - 'frete' => 20.00, //valor do frete - 'taxa' => 0, //valor da taxa - 'desconto' => 10, //valor do desconto, 10% - //aplica desconto no valor total, incluindo taxa e frete - 'tipoDesconto' => 'total' - ); - - $this->setValuesCart($data); - - $discountExpected = 54.00; - $this->assertEquals($discountExpected, $this->gatewayGerencianet->calculatePixDiscount()); - } - - public function testCalculatePixDiscountProducts() { - $data = array( - 'total' => 40.00, //valor total do carrinho - 'frete' => 20.00, //valor do frete - 'taxa' => 0, //valor da taxa - 'desconto' => 10, //valor do desconto, 10% - //aplica desconto apenas no produto, excluindo taxa e frete - 'tipoDesconto' => 'products' - ); - - $this->setValuesCart($data); - - $discountExpected = 36.00; - $this->assertEquals($discountExpected, $this->gatewayGerencianet->calculatePixDiscount()); - } - - private function setValuesCart($data) { - global $woocommerce; - - $totalValueCart = $data['total']; - $totalShipping = $data['frete']; - $totalTax = $data['taxa']; - - //desconto Pix - $this->gatewayGerencianet->discountPix = $data['desconto']; - - $this->gatewayGerencianet->pix_discount_shipping = $data['tipoDesconto']; - - $woocommerce->cart->set_cart_contents_total($totalValueCart); - $woocommerce->cart->set_shipping_total($totalShipping); - $woocommerce->cart->set_cart_contents_tax($totalTax); - } - -} diff --git a/tests/gerencianet/pix/PixWebhookTest.php b/tests/gerencianet/pix/PixWebhookTest.php deleted file mode 100644 index b2948294..00000000 --- a/tests/gerencianet/pix/PixWebhookTest.php +++ /dev/null @@ -1,64 +0,0 @@ -pixClass = new Pix(); - $this->gatewayGerencianet = new WC_Gerencianet_Oficial_Gateway(); - - $file = file_get_contents(__DIR__.'/config.json'); - $this->credentials = json_decode($file, true); - - //inserindo credenciais do usuario na classe gateway - $this->setValuesCredentials(); - } - - public function testUpdateWebhookLocalhost() { - $credential = $this->gatewayGerencianet->gnIntegration->get_gn_api_credentials(); - $credential['pix_cert'] = Pix::getCertPath(); - - $pix_key = $this->credentials['pix_key']; - $skip_mtls = 'true'; - - $url = 'http://localhost'; - $gnApi = GerencianetIntegration::update_webhook($credential, $pix_key, $skip_mtls, $url); - - //transformando o resultado em um array de strings - $gnApi = explode('"', $gnApi); - $resultExpected = 'webhookUrl'; - - $this->assertNotContains($resultExpected, $gnApi); - } - - public function testUpdateWebhookValidUrl() { - $credential = $this->gatewayGerencianet->gnIntegration->get_gn_api_credentials(); - $credential['pix_cert'] = Pix::getCertPath(); - - $pix_key = $this->credentials['pix_key']; - $skip_mtls = 'true'; - - $url = 'https://url-valida'; - $gnApi = GerencianetIntegration::update_webhook($credential, $pix_key, $skip_mtls, $url); - - //transformando o resultado em um array de strings - $gnApi = explode('"', $gnApi); - $resultExpected = 'webhookUrl'; - - $this->assertContains($resultExpected, $gnApi); - } - - private function setValuesCredentials() { - $this->gatewayGerencianet->gnIntegration = new GerencianetIntegration( - $this->credentials['client_id_prod'], - $this->credentials['client_secret_prod'], - $this->credentials['client_id_dev'], - $this->credentials['client_secret_dev'], - $this->credentials['sandbox'], - $this->credentials['payee_code'] - ); - } -} diff --git a/tests/gerencianet/pix/config.json b/tests/gerencianet/pix/config.json deleted file mode 100644 index 9be718fb..00000000 --- a/tests/gerencianet/pix/config.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "client_id_prod": "your_client_id_prod", - "client_secret_prod": "your_client_secret_prod", - "client_id_dev": "your_client_id_dev", - "client_secret_dev": "your_client_secret_dev", - "payee_code": "your_payee_code", - "pix_key": "your_pix_key", - "pix_cert" : "../../certs/your_cert_name.pem", - "sandbox": false -} - \ No newline at end of file diff --git a/tests/phpunit.xml b/tests/phpunit.xml deleted file mode 100644 index c0413b5b..00000000 --- a/tests/phpunit.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - gerencianet - - - diff --git a/uninstall.php b/uninstall.php new file mode 100644 index 00000000..edb495b2 --- /dev/null +++ b/uninstall.php @@ -0,0 +1,27 @@ +