From 1bc3b61e337ca7dded786301ce430dd1054b0dcf Mon Sep 17 00:00:00 2001 From: OStefan2001 Date: Thu, 30 Jul 2026 20:50:44 +0300 Subject: [PATCH 1/4] add markdown actions section --- public/css/app.css | 2 +- public/js/app.js | 2 +- src/App/assets/js/components/_main.js | 55 ++++++++ src/App/assets/scss/components/_blog.scss | 127 ++++++++++++++++++ .../partial/markdown-actions.html.twig | 29 ++++ .../templates/partial/title-section.html.twig | 2 +- .../templates/page/author-resource.html.twig | 1 + ...ten-for-android-install-referrer.html.twig | 1 + ...the-same-app-for-the-same-action.html.twig | 1 + ...ootstrap-modern-php-applications.html.twig | 1 + ...e-for-a-mezzio-based-application.html.twig | 1 + .../understanding-middleware.html.twig | 1 + .../aptana-set-svn-keywords.html.twig | 1 + ...y-in-dotkernel-headless-platform.html.twig | 1 + ...rules-of-professional-php-coding.html.twig | 1 + ...cess-301-redirect-non-www-to-www.html.twig | 1 + ...e-delete-statements-with-zend-db.html.twig | 1 + ...sql-queries-using-zend-db-select.html.twig | 1 + .../subqueries-with-zend-db.html.twig | 1 + .../svn-export-in-a-virtual-host.html.twig | 1 + ...rds-setup-in-php-ide-zend-studio.html.twig | 1 + ...sing-like-wildcards-with-zend-db.html.twig | 1 + ...the-fetch-functions-from-zend-db.html.twig | 1 + ...on-a-field-that-record-date-time.html.twig | 1 + ...c-is-retiring-consider-it-solved.html.twig | 1 + ...-migration-from-postman-to-bruno.html.twig | 1 + ...ndpoint-to-collect-client-errors.html.twig | 1 + ...egotiation-in-dotkernel-rest-api.html.twig | 1 + .../dotkernel-api-1-0-0-released.html.twig | 1 + ...el-api-client-side-authorization.html.twig | 1 + ...el-api-server-side-authorization.html.twig | 1 + ...nel-api-versus-laminas-api-tools.html.twig | 1 + ...orting-endpoint-in-dotkernel-api.html.twig | 1 + ...ement-mailchimp-in-dotkernel-api.html.twig | 1 + ...-implementation-in-dotkernel-api.html.twig | 1 + ...mplementation-to-zend-expressive.html.twig | 1 + ...-to-wurfl-in-dotkernel-using-apc.html.twig | 1 + ...upport-in-your-dotkernel-project.html.twig | 1 + ...-detection-in-dotkernel-projects.html.twig | 1 + ...-cookie-remember-me-in-dotkernel.html.twig | 1 + ...-bootstrap-of-non-existent-files.html.twig | 1 + ...n-dotkernel-using-zend-framework.html.twig | 1 + ...-table-names-in-mysql-on-windows.html.twig | 1 + ...tified-engineers-zce-in-our-team.html.twig | 1 + ...nfiguring-the-cache-in-dotkernel.html.twig | 1 + ...y-in-laminas-mezzio-applications.html.twig | 1 + ...obile-devices-in-dotkernel-1-6-0.html.twig | 1 + ...rfl-redirect-for-mobile-browsers.html.twig | 1 + ...tion-dotkernel-1-and-dotkernel-3.html.twig | 1 + ...ctrine-cache-using-symfony-cache.html.twig | 1 + ...enum-implementation-in-dotkernel.html.twig | 1 + ...services-north-american-relaunch.html.twig | 1 + .../dotkernel-1-2-0-release.html.twig | 1 + .../dotkernel-1-2-2-release.html.twig | 1 + .../dotkernel-1-3-0-release.html.twig | 1 + .../dotkernel-1-3-2-release.html.twig | 1 + .../dotkernel-1-5-0-released.html.twig | 1 + .../dotkernel-1-8-0-lts-released.html.twig | 1 + ...-8-1-upgrade-from-1-8-0-released.html.twig | 1 + .../dotkernel-coding-standard.html.twig | 1 + ...ase-naming-conventions-for-mysql.html.twig | 1 + ...framework-and-laminas-components.html.twig | 1 + ...hoice-for-your-presentation-site.html.twig | 1 + .../dotkernel/dotkernel-on-nginx.html.twig | 1 + ...erved-variable-names-for-caching.html.twig | 1 + .../dotkernel-template-engine.html.twig | 1 + .../dotkernel-version-1-0-in-action.html.twig | 1 + ...tions-and-character-set-in-mysql.html.twig | 1 + ...eoip-city-removed-from-dotkernel.html.twig | 1 + ...ip-address-location-in-dotkernel.html.twig | 1 + ...ith-dot-errorhandler-and-dot-log.html.twig | 1 + ...s-integration-in-dotkernel-1-6-0.html.twig | 1 + ...-log-files-by-date-using-dot-log.html.twig | 1 + ...h-zend-framework-zend-db-adapter.html.twig | 1 + .../how-to-use-alerts-in-dotkernel.html.twig | 1 + ...ng-api-from-php-5-5-in-dotkernel.html.twig | 1 + ...on-in-zend-server-5-6-on-windows.html.twig | 1 + ...sion-in-zend-server-6-on-windows.html.twig | 1 + ...in-zend-expressive-and-dotkernel.html.twig | 1 + ...e-of-wurfl-xml-file-in-dotkernel.html.twig | 1 + ...of-zend-framework-1-pear-channel.html.twig | 1 + ...-features-in-zend-framework-1-12.html.twig | 1 + ...d-templates-for-zend-studio-10-1.html.twig | 1 + ...in-folder-with-htaccess-in-plesk.html.twig | 1 + ...-with-symfony-mailer-in-dot-mail.html.twig | 2 +- ...oud-php-library-to-dotkernel-1-6.html.twig | 1 + ...t-email-component-and-zend-email.html.twig | 1 + .../templating-in-dotkernel3.html.twig | 1 + ...ernel-with-composer-dependencies.html.twig | 1 + .../using-utf8-charset-in-dotkernel.html.twig | 1 + ...d-integration-in-dotkernel-1-6-0.html.twig | 1 + ...ense-incompatible-with-dotkernel.html.twig | 1 + ...ework-integration-into-dotkernel.html.twig | 1 + ...zend-acl-integrated-in-dotkernel.html.twig | 1 + ...sole-implementation-in-dotkernel.html.twig | 1 + ...ped-integration-of-wurfl-adapter.html.twig | 1 + ...zend-registry-usage-in-dotkernel.html.twig | 1 + ...el-refactor-of-dot-session-class.html.twig | 1 + ...le-for-dotkernel-coding-standard.html.twig | 1 + ...elopment-report-december-11-2017.html.twig | 1 + .../dotkernel3/dotkernel-admin-v4.html.twig | 1 + ...tkernel-admin-version-3-launched.html.twig | 1 + ...-api-architecture-and-components.html.twig | 1 + ...rnel-frontend-version-3-launched.html.twig | 1 + ...rnel3-stable-release-version-1-0.html.twig | 1 + ...p-8-3-support-in-dotkernel-admin.html.twig | 1 + ...php-8-3-support-in-dotkernel-api.html.twig | 1 + ...-3-support-in-dotkernel-frontend.html.twig | 1 + ...n-in-dotkernel-headless-platform.html.twig | 1 + ...t-of-dotkernel-headless-platform.html.twig | 1 + ...platform-the-whats-hows-and-whys.html.twig | 1 + ...n-in-dotkernel-headless-platform.html.twig | 1 + ...enerate-common-code-in-dotkernel.html.twig | 1 + ...on-pattern-versus-api-versioning.html.twig | 1 + ...-time-password-totp-in-dotkernel.html.twig | 1 + ...e-in-dotkernel-headless-platform.html.twig | 1 + ...stgresql-native-uuid-and-php-8-5.html.twig | 1 + ...p-in-dotkernel-using-mezzio-cors.html.twig | 1 + ...-admin-accounts-in-dotkernel-api.html.twig | 1 + ...e-migrations-and-how-to-use-them.html.twig | 1 + ...ne-cache-in-mezzio-and-dotkernel.html.twig | 1 + ...n-without-dropping-custom-tables.html.twig | 1 + ...in-an-generic-laminas-mezzio-app.html.twig | 1 + ...-php-mariadb-composer-phpmyadmin.html.twig | 1 + ...s-in-dotkernel-api-using-dot-cli.html.twig | 1 + ...xpressive-2-to-zend-expressive-3.html.twig | 1 + ...ith-dot-cli-based-on-laminas-cli.html.twig | 1 + ...documentation-in-dotkernel-api-3.html.twig | 1 + ...e-urlgenerator-work-in-fastroute.html.twig | 1 + ...is-cross-origin-token-redemption.html.twig | 1 + .../what-is-psr-7-and-how-to-use-it.html.twig | 1 + ...p-html-css-javascript-editor-ide.html.twig | 1 + .../javascript/intro-to-jquery.html.twig | 1 + .../javascript-email-validator.html.twig | 1 + ...-lgpl-in-practice-dotkernel-case.html.twig | 1 + ...nts-psr-15-handlers-vite-phpstan.html.twig | 1 + ...ing-using-fastroute-in-dotkernel.html.twig | 1 + ...iant-handlers-in-dotkernel-light.html.twig | 1 + ...ache-mariadb-composer-phpmyadmin.html.twig | 1 + ...a-php-installation-in-aptana-2-x.html.twig | 1 + ...ode-support-in-mysql-5-5-utf8mb4.html.twig | 1 + ...-doctrine-data-fixtures-vs-phinx.html.twig | 1 + ...-of-support-for-php-5-2-x-branch.html.twig | 1 + ...ithmetic-why-is-int-0-7-0-1-10-7.html.twig | 1 + ...how-to-upgrade-wamp-to-php-5-3-4.html.twig | 1 + .../mezzio-app-development-in-wsl2.html.twig | 1 + ...-upgrade-possible-for-wampserver.html.twig | 1 + ...t-development-staging-production.html.twig | 1 + .../php-support-back-in-aptana-3-0.html.twig | 1 + ...ng-pdo-and-zend-framework-part-2.html.twig | 1 + ...ion-using-pdo-and-zend-framework.html.twig | 1 + ...ql-server-on-plesk-based-servers.html.twig | 1 + ...sis-replacing-psalm-with-phpstan.html.twig | 1 + ...nect-to-dotkernel-tracker-mantis.html.twig | 1 + ...-php-7-express-in-zend-studio-13.html.twig | 1 + ...l-ignore-patterns-in-zend-studio.html.twig | 1 + ...tified-engineer-in-dotboost-team.html.twig | 1 + ...erver-5-5-quick-setup-on-windows.html.twig | 1 + ...lling-pear-packages-with-php-7-2.html.twig | 1 + ...ntl-php-extension-problem-solved.html.twig | 1 + ...y-how-to-setup-phpcs-in-phpstorm.html.twig | 1 + ...ar-a-very-helpfull-zf-debug-tool.html.twig | 1 + ...ear-channel-for-zend-framework-1.html.twig | 1 + ...l-php-api-libraries-gpl-versions.html.twig | 1 + ...2-4-released-with-security-fixes.html.twig | 1 + .../zend-framework-1-7-0-released.html.twig | 1 + .../zend-framework-1-end-of-life.html.twig | 1 + ...sible-repository-on-plesk-server.html.twig | 1 + ...-fixes-in-zend-framework-1-12-12.html.twig | 1 + 169 files changed, 377 insertions(+), 4 deletions(-) create mode 100644 src/App/templates/partial/markdown-actions.html.twig diff --git a/public/css/app.css b/public/css/app.css index 5df93e8..3107ac2 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -1 +1 @@ -:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-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-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255, 255, 255;--bs-black-rgb:0, 0, 0;--bs-font-sans-serif:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient:linear-gradient(180deg, #ffffff26, #fff0);--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33, 37, 41;--bs-body-bg:#fff;--bs-body-bg-rgb:255, 255, 255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0, 0, 0;--bs-secondary-color:#212529bf;--bs-secondary-color-rgb:33, 37, 41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233, 236, 239;--bs-tertiary-color:#21252980;--bs-tertiary-color-rgb:33, 37, 41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248, 249, 250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13, 110, 253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10, 88, 202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:#0000002d;--bs-border-radius:.375rem;--bs-border-radius-sm:.25rem;--bs-border-radius-lg:.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 .5rem 1rem #00000026;--bs-box-shadow-sm:0 .125rem .25rem #00000013;--bs-box-shadow-lg:0 1rem 3rem #0000002d;--bs-box-shadow-inset:inset 0 1px 2px #00000013;--bs-focus-ring-width:.25rem;--bs-focus-ring-opacity:.25;--bs-focus-ring-color:#0d6efd40;--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222, 226, 230;--bs-body-bg:#212529;--bs-body-bg-rgb:33, 37, 41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255, 255, 255;--bs-secondary-color:#dee2e6bf;--bs-secondary-color-rgb:222, 226, 230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52, 58, 64;--bs-tertiary-color:#dee2e680;--bs-tertiary-color-rgb:222, 226, 230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43, 48, 53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110, 168, 254;--bs-link-hover-color-rgb:139, 185, 254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:#ffffff26;--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}*,:before,:after{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{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:#0000;margin:0}hr{color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25;margin:1rem 0}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{color:var(--bs-heading-color);margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media (width>=1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media (width>=1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media (width>=1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (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]{cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}address{font-style:normal;line-height:inherit;margin-bottom:1rem}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg);padding:.1875em}sub,sup{vertical-align:baseline;font-size:.75em;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{margin-top:0;margin-bottom:1rem;font-size:.875em;display:block;overflow:auto}pre code{font-size:inherit;color:inherit;word-break:normal}code{color:var(--bs-code-color);word-wrap:break-word;font-size:.875em}a>code{color:inherit}kbd{color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem;padding:.1875rem .375rem;font-size:.875em}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{color:var(--bs-secondary-color);text-align:left;padding-top:.5rem;padding-bottom:.5rem}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{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}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{border-style:none;padding:0}textarea{resize:vertical}fieldset{border:0;min-width:0;margin:0;padding:0}legend{float:left;width:100%;line-height:inherit;margin-bottom:.5rem;padding:0;font-size:calc(1.275rem + .3vw)}@media (width>=1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-text{padding:0}::-webkit-datetime-edit-minute{padding:0}::-webkit-datetime-edit-hour-field{padding:0}::-webkit-datetime-edit-day-field{padding:0}::-webkit-datetime-edit-month-field{padding:0}::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button{cursor:pointer;filter:grayscale()}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}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 (width>=1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (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 (width>=1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (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 (width>=1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (width>=1200px){.display-6{font-size:2.5rem}}.list-unstyled,.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{text-transform:uppercase;font-size:.875em}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{color:#6c757d;margin-top:-1rem;margin-bottom:1rem;font-size:.875em}.blockquote-footer:before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto;padding:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{color:var(--bs-secondary-color);font-size:.875em}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-left:auto;margin-right:auto}@media (width>=576px){.container-sm,.container{max-width:540px}}@media (width>=768px){.container-md,.container-sm,.container{max-width:720px}}@media (width>=992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (width>=1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media (width>=1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x));flex-wrap:wrap;display:flex}.row>*{width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y);flex-shrink:0}.col{flex:1 0 0}.row-cols-auto>*{flex:none;width:auto}.row-cols-1>*{flex:none;width:100%}.row-cols-2>*{flex:none;width:50%}.row-cols-3>*{flex:none;width:33.3333%}.row-cols-4>*{flex:none;width:25%}.row-cols-5>*{flex:none;width:20%}.row-cols-6>*{flex:none;width:16.6667%}.col-auto{flex:none;width:auto}.col-1{flex:none;width:8.33333%}.col-2{flex:none;width:16.6667%}.col-3{flex:none;width:25%}.col-4{flex:none;width:33.3333%}.col-5{flex:none;width:41.6667%}.col-6{flex:none;width:50%}.col-7{flex:none;width:58.3333%}.col-8{flex:none;width:66.6667%}.col-9{flex:none;width:75%}.col-10{flex:none;width:83.3333%}.col-11{flex:none;width:91.6667%}.col-12{flex:none;width:100%}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.6667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333%}.offset-5{margin-left:41.6667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333%}.offset-8{margin-left:66.6667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333%}.offset-11{margin-left:91.6667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:.25rem}.g-1,.gy-1{--bs-gutter-y:.25rem}.g-2,.gx-2{--bs-gutter-x:.5rem}.g-2,.gy-2{--bs-gutter-y:.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (width>=576px){.col-sm{flex:1 0 0}.row-cols-sm-auto>*{flex:none;width:auto}.row-cols-sm-1>*{flex:none;width:100%}.row-cols-sm-2>*{flex:none;width:50%}.row-cols-sm-3>*{flex:none;width:33.3333%}.row-cols-sm-4>*{flex:none;width:25%}.row-cols-sm-5>*{flex:none;width:20%}.row-cols-sm-6>*{flex:none;width:16.6667%}.col-sm-auto{flex:none;width:auto}.col-sm-1{flex:none;width:8.33333%}.col-sm-2{flex:none;width:16.6667%}.col-sm-3{flex:none;width:25%}.col-sm-4{flex:none;width:33.3333%}.col-sm-5{flex:none;width:41.6667%}.col-sm-6{flex:none;width:50%}.col-sm-7{flex:none;width:58.3333%}.col-sm-8{flex:none;width:66.6667%}.col-sm-9{flex:none;width:75%}.col-sm-10{flex:none;width:83.3333%}.col-sm-11{flex:none;width:91.6667%}.col-sm-12{flex:none;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.6667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333%}.offset-sm-5{margin-left:41.6667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333%}.offset-sm-8{margin-left:66.6667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333%}.offset-sm-11{margin-left:91.6667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (width>=768px){.col-md{flex:1 0 0}.row-cols-md-auto>*{flex:none;width:auto}.row-cols-md-1>*{flex:none;width:100%}.row-cols-md-2>*{flex:none;width:50%}.row-cols-md-3>*{flex:none;width:33.3333%}.row-cols-md-4>*{flex:none;width:25%}.row-cols-md-5>*{flex:none;width:20%}.row-cols-md-6>*{flex:none;width:16.6667%}.col-md-auto{flex:none;width:auto}.col-md-1{flex:none;width:8.33333%}.col-md-2{flex:none;width:16.6667%}.col-md-3{flex:none;width:25%}.col-md-4{flex:none;width:33.3333%}.col-md-5{flex:none;width:41.6667%}.col-md-6{flex:none;width:50%}.col-md-7{flex:none;width:58.3333%}.col-md-8{flex:none;width:66.6667%}.col-md-9{flex:none;width:75%}.col-md-10{flex:none;width:83.3333%}.col-md-11{flex:none;width:91.6667%}.col-md-12{flex:none;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.6667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333%}.offset-md-5{margin-left:41.6667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333%}.offset-md-8{margin-left:66.6667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333%}.offset-md-11{margin-left:91.6667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (width>=992px){.col-lg{flex:1 0 0}.row-cols-lg-auto>*{flex:none;width:auto}.row-cols-lg-1>*{flex:none;width:100%}.row-cols-lg-2>*{flex:none;width:50%}.row-cols-lg-3>*{flex:none;width:33.3333%}.row-cols-lg-4>*{flex:none;width:25%}.row-cols-lg-5>*{flex:none;width:20%}.row-cols-lg-6>*{flex:none;width:16.6667%}.col-lg-auto{flex:none;width:auto}.col-lg-1{flex:none;width:8.33333%}.col-lg-2{flex:none;width:16.6667%}.col-lg-3{flex:none;width:25%}.col-lg-4{flex:none;width:33.3333%}.col-lg-5{flex:none;width:41.6667%}.col-lg-6{flex:none;width:50%}.col-lg-7{flex:none;width:58.3333%}.col-lg-8{flex:none;width:66.6667%}.col-lg-9{flex:none;width:75%}.col-lg-10{flex:none;width:83.3333%}.col-lg-11{flex:none;width:91.6667%}.col-lg-12{flex:none;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.6667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333%}.offset-lg-5{margin-left:41.6667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333%}.offset-lg-8{margin-left:66.6667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333%}.offset-lg-11{margin-left:91.6667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (width>=1200px){.col-xl{flex:1 0 0}.row-cols-xl-auto>*{flex:none;width:auto}.row-cols-xl-1>*{flex:none;width:100%}.row-cols-xl-2>*{flex:none;width:50%}.row-cols-xl-3>*{flex:none;width:33.3333%}.row-cols-xl-4>*{flex:none;width:25%}.row-cols-xl-5>*{flex:none;width:20%}.row-cols-xl-6>*{flex:none;width:16.6667%}.col-xl-auto{flex:none;width:auto}.col-xl-1{flex:none;width:8.33333%}.col-xl-2{flex:none;width:16.6667%}.col-xl-3{flex:none;width:25%}.col-xl-4{flex:none;width:33.3333%}.col-xl-5{flex:none;width:41.6667%}.col-xl-6{flex:none;width:50%}.col-xl-7{flex:none;width:58.3333%}.col-xl-8{flex:none;width:66.6667%}.col-xl-9{flex:none;width:75%}.col-xl-10{flex:none;width:83.3333%}.col-xl-11{flex:none;width:91.6667%}.col-xl-12{flex:none;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.6667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333%}.offset-xl-5{margin-left:41.6667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333%}.offset-xl-8{margin-left:66.6667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333%}.offset-xl-11{margin-left:91.6667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (width>=1400px){.col-xxl{flex:1 0 0}.row-cols-xxl-auto>*{flex:none;width:auto}.row-cols-xxl-1>*{flex:none;width:100%}.row-cols-xxl-2>*{flex:none;width:50%}.row-cols-xxl-3>*{flex:none;width:33.3333%}.row-cols-xxl-4>*{flex:none;width:25%}.row-cols-xxl-5>*{flex:none;width:20%}.row-cols-xxl-6>*{flex:none;width:16.6667%}.col-xxl-auto{flex:none;width:auto}.col-xxl-1{flex:none;width:8.33333%}.col-xxl-2{flex:none;width:16.6667%}.col-xxl-3{flex:none;width:25%}.col-xxl-4{flex:none;width:33.3333%}.col-xxl-5{flex:none;width:41.6667%}.col-xxl-6{flex:none;width:50%}.col-xxl-7{flex:none;width:58.3333%}.col-xxl-8{flex:none;width:66.6667%}.col-xxl-9{flex:none;width:75%}.col-xxl-10{flex:none;width:83.3333%}.col-xxl-11{flex:none;width:91.6667%}.col-xxl-12{flex:none;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333%}.offset-xxl-2{margin-left:16.6667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.3333%}.offset-xxl-5{margin-left:41.6667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.3333%}.offset-xxl-8{margin-left:66.6667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.3333%}.offset-xxl-11{margin-left:91.6667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-emphasis-color);--bs-table-striped-bg:rgba(var(--bs-emphasis-color-rgb), .05);--bs-table-active-color:var(--bs-emphasis-color);--bs-table-active-bg:rgba(var(--bs-emphasis-color-rgb), .1);--bs-table-hover-color:var(--bs-emphasis-color);--bs-table-hover-bg:rgba(var(--bs-emphasis-color-rgb), .075);vertical-align:top;border-color:var(--bs-table-border-color);width:100%;margin-bottom:1rem}.table>:not(caption)>*>*{color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)));padding:.5rem}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*,.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#a5b5cc;--bs-table-striped-bg:#c4d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe5;--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:#b4b6b7;--bs-table-striped-bg:#d6d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbcdce;--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:#a7b9b1;--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:#a5c4ca;--bs-table-striped-bg:#c4e8ef;--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:#ccc2a4;--bs-table-striped-bg:#f2e6c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dab9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece0be;--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:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc1c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7c9;--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:#c6c7c8;--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:#4d5154;--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{-webkit-overflow-scrolling:touch;overflow-x:auto}@media (width<=575.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (width<=767.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (width<=991.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (width<=1199.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (width<=1399.98px){.table-responsive-xxl{-webkit-overflow-scrolling:touch;overflow-x:auto}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));font-size:inherit;margin-bottom:0;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{color:var(--bs-secondary-color);margin-top:.25rem;font-size:.875em}.form-control{width:100%;color:var(--bs-body-color);appearance:none;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);background-clip:padding-box;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;display:block}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{padding:0;display:block}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{margin:-.375rem -.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;margin-inline-end:.75rem;padding:.375rem .75rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{width:100%;color:var(--bs-body-color);border:solid #0000;border-width:var(--bs-border-width) 0;background-color:#0000;margin-bottom:0;padding:.375rem 0;line-height:1.5;display:block}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-left:0;padding-right:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));border-radius:var(--bs-border-radius-sm);padding:.25rem .5rem;font-size:.875rem}.form-control-sm::file-selector-button{margin:-.25rem -.5rem;margin-inline-end:.5rem;padding:.25rem .5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));border-radius:var(--bs-border-radius-lg);padding:.5rem 1rem;font-size:1.25rem}.form-control-lg::file-selector-button{margin:-.5rem -1rem;margin-inline-end:1rem;padding:.5rem 1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border-radius:var(--bs-border-radius);border:0!important}.form-control-color::-webkit-color-swatch{border-radius:var(--bs-border-radius);border:0!important}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");width:100%;color:var(--bs-body-color);appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon,none);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);background-position:right .75rem center;background-repeat:no-repeat;background-size:16px 12px;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;display:block}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-select[multiple],.form-select[size]:not([size="1"]){background-image:none;padding-right:.75rem}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:#0000;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{border-radius:var(--bs-border-radius-sm);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{border-radius:var(--bs-border-radius-lg);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{min-height:1.5rem;margin-bottom:.125rem;padding-left:1.5em;display:block}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{text-align:right;padding-left:0;padding-right:1.5em}.form-check-reverse .form-check-input{float:right;margin-left:0;margin-right:-1.5em}.form-check-input{--bs-form-check-bg:var(--bs-body-bg);vertical-align:top;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;print-color-adjust:exact;background-position:50%;background-repeat:no-repeat;background-size:contain;flex-shrink:0;width:1em;height:1em;margin-top:.25em}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e");background-color:#0d6efd;border-color:#0d6efd}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-image:var(--bs-form-switch-bg);background-position:0;border-radius:2em;width:2em;margin-left:-2.5em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgb%28134, 182.5, 254%29'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e");background-position:100%}.form-switch.form-check-reverse{padding-left:0;padding-right:2.5em}.form-switch.form-check-reverse .form-check-input{margin-left:0;margin-right:-2.5em}.form-check-inline{margin-right:1rem;display:inline-block}.btn-check{clip:rect(0, 0, 0, 0);pointer-events:none;position:absolute}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{appearance:none;background-color:#0000;width:100%;height:1.5rem;padding:0}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem #0d6efd40}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem #0d6efd40}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;width:1rem;height:1rem;margin-top:-.25rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{color:#0000;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:#0000;border-radius:1rem;width:100%;height:.5rem}.form-range::-moz-range-thumb{appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;width:1rem;height:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{color:#0000;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:#0000;border-radius:1rem;width:100%;height:.5rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{z-index:2;max-width:100%;height:100%;color:rgba(var(--bs-body-color-rgb), .65);text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;padding:1rem .75rem;transition:opacity .1s ease-in-out,transform .1s ease-in-out;position:absolute;top:0;left:0;overflow:hidden}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:#0000}.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),:-webkit-any(.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill){padding-top:1.625rem;padding-bottom:.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),:is(.form-floating>.form-control:autofill,.form-floating>.form-control-plaintext:autofill){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem;padding-left:.75rem}.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{transform:scale(.85)translateY(-.5rem)translate(.15rem)}.form-floating>.form-control:-webkit-autofill~label{transform:scale(.85)translateY(-.5rem)translate(.15rem)}.form-floating>textarea:focus~label:after,.form-floating>textarea:not(:placeholder-shown)~label:after{z-index:-1;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius);height:1.5em;position:absolute;inset:1rem .375rem}.form-floating>textarea:disabled~label:after{background-color:var(--bs-secondary-bg)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.input-group{flex-wrap:wrap;align-items:stretch;width:100%;display:flex;position:relative}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{flex:auto;width:1%;min-width:0;position:relative}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{z-index:2;position:relative}.input-group .btn:focus{z-index:5}.input-group-text{color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;display:flex}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{border-radius:var(--bs-border-radius-lg);padding:.5rem 1rem;font-size:1.25rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{border-radius:var(--bs-border-radius-sm);padding:.25rem .5rem;font-size:.875rem}.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,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(-1 * var(--bs-border-width));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{width:100%;color:var(--bs-form-valid-color);margin-top:.25rem;font-size:.875em;display:none}.valid-tooltip{z-index:5;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius);max-width:100%;margin-top:.1rem;padding:.25rem .5rem;font-size:.875rem;display:none;position:absolute;top:100%}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--bs-form-valid-border-color);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.1'/%3e%3c/svg%3e");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);padding-right:calc(1.5em + .75rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), .25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:right calc(.375em + .1875rem) top calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e");background-position:right .75rem center,right 2.25rem center;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem);padding-right:4.125rem}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), .25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(1.5em + 3.75rem)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--bs-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), .25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{width:100%;color:var(--bs-form-invalid-color);margin-top:.25rem;font-size:.875em;display:none}.invalid-tooltip{z-index:5;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius);max-width:100%;margin-top:.1rem;padding:.25rem .5rem;font-size:.875rem;display:none;position:absolute;top:100%}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--bs-form-invalid-border-color);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-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);padding-right:calc(1.5em + .75rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), .25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:right calc(.375em + .1875rem) top calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,right 2.25rem center;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem);padding-right:4.125rem}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), .25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(1.5em + 3.75rem)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--bs-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), .25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x:.75rem;--bs-btn-padding-y:.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 #ffffff26, 0 1px 1px #00000013;--bs-btn-disabled-opacity:.65;--bs-btn-focus-box-shadow:0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);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;vertical-align:middle;cursor:pointer;-webkit-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);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;display:inline-block}@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);box-shadow:var(--bs-btn-focus-box-shadow);outline:0}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);box-shadow:var(--bs-btn-focus-box-shadow);outline:0}.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,.btn-check:checked:focus-visible+.btn{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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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:0 0 0 #000;--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:.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y:.25rem;--bs-btn-padding-x:.5rem;--bs-btn-font-size:.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;transition:height .35s;overflow:hidden}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s}@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{vertical-align:.255em;content:"";border:.3em solid #0000;border-top-color:currentColor;border-bottom:0;margin-left:.255em;display:inline-block}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:.5rem;--bs-dropdown-spacer:.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:.5rem;--bs-dropdown-box-shadow:var(--bs-box-shadow);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:.5rem;z-index:var(--bs-dropdown-zindex);min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;background-color:var(--bs-dropdown-bg);border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius);background-clip:padding-box;margin:0;list-style:none;display:none;position:absolute}.dropdown-menu[data-bs-popper]{margin-top:var(--bs-dropdown-spacer);top:100%;left:0}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{left:auto;right:0}@media (width>=576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{left:auto;right:0}}@media (width>=768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{left:auto;right:0}}@media (width>=992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{left:auto;right:0}}@media (width>=1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{left:auto;right:0}}@media (width>=1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{left:auto;right:0}}.dropup .dropdown-menu[data-bs-popper]{margin-top:0;margin-bottom:var(--bs-dropdown-spacer);top:auto;bottom:100%}.dropup .dropdown-toggle:after{vertical-align:.255em;content:"";border:.3em solid #0000;border-top:0;border-bottom-color:currentColor;margin-left:.255em;display:inline-block}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{margin-top:0;margin-left:var(--bs-dropdown-spacer);top:0;left:100%;right:auto}.dropend .dropdown-toggle:after{vertical-align:.255em;content:"";border:.3em solid #0000;border-left-color:currentColor;border-right:0;margin-left:.255em;display:inline-block}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{margin-top:0;margin-right:var(--bs-dropdown-spacer);top:0;left:auto;right:100%}.dropstart .dropdown-toggle:after{vertical-align:.255em;content:"";margin-left:.255em;display:none}.dropstart .dropdown-toggle:before{vertical-align:.255em;content:"";border-top:.3em solid #0000;border-bottom:.3em solid #0000;border-right:.3em solid;margin-right:.255em;display:inline-block}.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;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1;overflow:hidden}.dropdown-item{width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;color:var(--bs-dropdown-link-color);text-align:inherit;white-space:nowrap;border-radius:var(--bs-dropdown-item-border-radius,0);background-color:#0000;border:0;font-weight:400;text-decoration:none;display:block}.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);background-color:var(--bs-dropdown-link-active-bg);text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:#0000}.dropdown-menu.show{display:block}.dropdown-header{padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);color:var(--bs-dropdown-header-color);white-space:nowrap;margin-bottom:0;font-size:.875rem;display:block}.dropdown-item-text{padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color);display:block}.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:#ffffff26;--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{vertical-align:middle;display:inline-flex;position:relative}.btn-group>.btn,.btn-group-vertical>.btn{flex:auto;position:relative}.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{flex-wrap:wrap;justify-content:flex-start;display:flex}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(-1 * var(--bs-border-width))}.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-left:.5625rem;padding-right:.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-left:.375rem;padding-right:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{flex-direction:column;justify-content:center;align-items:flex-start}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(-1 * var(--bs-border-width))}.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:nth-child(n+3),.btn-group-vertical>:not(.btn-check)+.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);flex-wrap:wrap;margin-bottom:0;padding-left:0;list-style:none;display:flex}.nav-link{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);background:0 0;border:0;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out;display:block}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{border-bottom:var(--bs-nav-underline-border-width) solid transparent;padding-left:0;padding-right:0}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentColor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentColor;font-weight:700}.nav-fill>.nav-link,.nav-fill .nav-item{text-align:center;flex:auto}.nav-justified>.nav-link,.nav-justified .nav-item{text-align:center;flex-grow:1;flex-basis:0}.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:.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb), .65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb), .8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb), .3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y:.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x:.5rem;--bs-navbar-toggler-padding-y:.25rem;--bs-navbar-toggler-padding-x:.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb), .15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:.25rem;--bs-navbar-toggler-transition:box-shadow .15s ease-in-out;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);flex-wrap:wrap;justify-content:space-between;align-items:center;display:flex;position:relative}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{flex-wrap:inherit;justify-content:space-between;align-items:center;display:flex}.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);white-space:nowrap;text-decoration:none}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);flex-direction:column;margin-bottom:0;padding-left:0;list-style:none;display:flex}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{color:var(--bs-navbar-color);padding-top:.5rem;padding-bottom:.5rem}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-grow:1;flex-basis:100%;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);color:var(--bs-navbar-color);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);background-color:#0000;line-height:1}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width);outline:0;text-decoration:none}.navbar-toggler-icon{vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-position:50%;background-repeat:no-repeat;background-size:100%;width:1.5em;height:1.5em;display:inline-block}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (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{flex-basis:auto;display:flex!important}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{z-index:auto;flex-grow:1;transition:none;position:static;visibility:visible!important;background-color:#0000!important;border:0!important;width:auto!important;height:auto!important;transform:none!important}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible}}@media (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{flex-basis:auto;display:flex!important}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{z-index:auto;flex-grow:1;transition:none;position:static;visibility:visible!important;background-color:#0000!important;border:0!important;width:auto!important;height:auto!important;transform:none!important}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible}}@media (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{flex-basis:auto;display:flex!important}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{z-index:auto;flex-grow:1;transition:none;position:static;visibility:visible!important;background-color:#0000!important;border:0!important;width:auto!important;height:auto!important;transform:none!important}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible}}@media (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{flex-basis:auto;display:flex!important}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{z-index:auto;flex-grow:1;transition:none;position:static;visibility:visible!important;background-color:#0000!important;border:0!important;width:auto!important;height:auto!important;transform:none!important}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible}}@media (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{flex-basis:auto;display:flex!important}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{z-index:auto;flex-grow:1;transition:none;position:static;visibility:visible!important;background-color:#0000!important;border:0!important;width:auto!important;height:auto!important;transform:none!important}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{flex-grow:0;padding:0;display:flex;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{flex-basis:auto;display:flex!important}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{z-index:auto;flex-grow:1;transition:none;position:static;visibility:visible!important;background-color:#0000!important;border:0!important;width:auto!important;height:auto!important;transform:none!important}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color:#ffffff8c;--bs-navbar-hover-color:#ffffffbf;--bs-navbar-disabled-color:#ffffff40;--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:#ffffff1a;--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")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.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:.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y:.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:.75rem;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius);background-clip:border-box;flex-direction:column;display:flex;position:relative}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius);border-top-width:0}.card>.list-group:last-child{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color);flex:auto}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));color:var(--bs-card-subtitle-color);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);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);margin-bottom:0}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius);position:absolute;inset:0}.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 (width>=576px){.card-group{flex-flow:wrap;display:flex}.card-group>.card{flex:1 0 0;margin-bottom:0}.card-group>.card+.card{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child)>.card-img-top,.card-group>.card:not(:last-child)>.card-header{border-top-right-radius:0}.card-group>.card:not(:last-child)>.card-img-bottom,.card-group>.card:not(:last-child)>.card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child)>.card-img-top,.card-group>.card:not(:first-child)>.card-header{border-top-left-radius:0}.card-group>.card:not(:first-child)>.card-img-bottom,.card-group>.card:not(:first-child)>.card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, border-radius .15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform .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='none' stroke='rgb%285.2, 44, 101.2%29' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e");--bs-accordion-btn-focus-box-shadow:0 0 0 .25rem #0d6efd40;--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);overflow-anchor:none;transition:var(--bs-accordion-transition);border:0;border-radius:0;align-items:center;font-size:1rem;display:flex;position:relative}@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{width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);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);flex-shrink:0;margin-left:auto}@media (prefers-reduced-motion:reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;box-shadow:var(--bs-accordion-btn-focus-box-shadow);outline:0}.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-header .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-header .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-item{border-left:0;border-right: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-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28109.8, 168, 253.8%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28109.8, 168, 253.8%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);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);background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius);flex-wrap:wrap;list-style:none;display:flex}.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,"/") }.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:.75rem;--bs-pagination-padding-y:.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 .25rem #0d6efd40;--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);padding-left:0;list-style:none;display:flex}.page-link{padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;display:block;position:relative}@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);box-shadow:var(--bs-pagination-focus-box-shadow);outline:0}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(-1 * var(--bs-border-width))}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x:.5rem;--bs-pagination-padding-y:.25rem;--bs-pagination-font-size:.875rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x:.65em;--bs-badge-padding-y:.35em;--bs-badge-font-size:.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);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);color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius);line-height:1;display:inline-block}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);--bs-alert-link-color:inherit;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);position:relative}.alert-heading{color:inherit}.alert-link{color:var(--bs-alert-link-color);font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{z-index:2;padding:1.25rem 1rem;position:absolute;top:0;right:0}.alert-primary{--bs-alert-color:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color:var(--bs-success-text-emphasis);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color:var(--bs-info-text-emphasis);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color:var(--bs-warning-text-emphasis);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:var(--bs-progress-height)}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width .6s ease;height:var(--bs-progress-height);font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius);display:flex;overflow:hidden}.progress-bar{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);flex-direction:column;justify-content:center;display:flex;overflow:hidden}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,#ffffff26 25%,#0000 25% 50%,#ffffff26 50% 75%,#0000 75%,#0000);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;border-radius:var(--bs-list-group-border-radius);flex-direction:column;margin-bottom:0;padding-left:0;display:flex}.list-group-numbered{counter-reset:section;list-style-type:none}.list-group-numbered>.list-group-item:before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item{padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);text-decoration:none;display:block;position:relative}.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-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:not(.active):hover,.list-group-item-action:not(.active):focus{z-index:1;color:var(--bs-list-group-action-hover-color);background-color:var(--bs-list-group-action-hover-bg);text-decoration:none}.list-group-item-action:not(.active):active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.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 (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 (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 (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 (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 (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{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e");--bs-btn-close-opacity:.5;--bs-btn-close-hover-opacity:.75;--bs-btn-close-focus-shadow:0 0 0 .25rem #0d6efd40;--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:.25;box-sizing:content-box;width:1em;height:1em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;filter:var(--bs-btn-close-filter);opacity:var(--bs-btn-close-opacity);border:0;border-radius:.375rem;padding:.25em}.btn-close:hover{color:var(--bs-btn-close-color);opacity:var(--bs-btn-close-hover-opacity);text-decoration:none}.btn-close:focus{box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity);outline:0}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{--bs-btn-close-filter:invert(1) grayscale(100%) brightness(200%)}:root,[data-bs-theme=light]{--bs-btn-close-filter: }[data-bs-theme=dark]{--bs-btn-close-filter:invert(1) grayscale(100%) brightness(200%)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:.75rem;--bs-toast-padding-y:.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb), .85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb), .85);--bs-toast-header-border-color:var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);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);background-clip:padding-box}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;z-index:var(--bs-toast-zindex);pointer-events:none;width:max-content;max-width:100%;position:absolute}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);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));background-clip:padding-box;align-items:center;display:flex}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:.5rem;--bs-modal-color:var(--bs-body-color);--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:var(--bs-box-shadow-sm);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);z-index:var(--bs-modal-zindex);outline:0;width:100%;height:100%;display:none;position:fixed;top:0;left:0;overflow:hidden auto}.modal-dialog{width:auto;margin:var(--bs-modal-margin);pointer-events:none;position:relative}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-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{min-height:calc(100% - var(--bs-modal-margin) * 2);align-items:center;display:flex}.modal-content{width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);background-clip:padding-box;outline:0;flex-direction:column;display:flex;position:relative}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:.5;z-index:var(--bs-backdrop-zindex);background-color:var(--bs-backdrop-bg);width:100vw;height:100vh;position:fixed;top:0;left:0}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{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);flex-shrink:0;align-items:center;display:flex}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin-top:calc(-.5 * var(--bs-modal-header-padding-y));margin-right:calc(-.5 * var(--bs-modal-header-padding-x));margin-bottom:calc(-.5 * var(--bs-modal-header-padding-y));margin-left:auto}.modal-title{line-height:var(--bs-modal-title-line-height);margin-bottom:0}.modal-body{padding:var(--bs-modal-padding);flex:auto;position:relative}.modal-footer{padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius);flex-wrap:wrap;flex-shrink:0;justify-content:flex-end;align-items:center;display:flex}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (width>=576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-left:auto;margin-right:auto}.modal-sm{--bs-modal-width:300px}}@media (width>=992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (width>=1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (width<=575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{border:0;border-radius:0;height:100%}.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 (width<=767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{border:0;border-radius:0;height:100%}.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 (width<=991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{border:0;border-radius:0;height:100%}.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 (width<=1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{border:0;border-radius:0;height:100%}.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 (width<=1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:.5rem;--bs-tooltip-padding-y:.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:.9;--bs-tooltip-arrow-width:.8rem;--bs-tooltip-arrow-height:.4rem;z-index:var(--bs-tooltip-zindex);margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);text-align:left;text-align:start;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-style:normal;font-weight:400;line-height:1.5;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0;text-decoration:none;display:block}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height);display:block}.tooltip .tooltip-arrow:before{content:"";border-style:solid;border-color:#0000;position:absolute}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before{border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg);top:-1px}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before{border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg);right:-1px}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before{border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg);bottom:-1px}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before{border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg);left:-1px}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:.875rem;--bs-popover-bg:var(--bs-body-bg);--bs-popover-border-width:var(--bs-border-width);--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow:var(--bs-box-shadow);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color:inherit;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);text-align:left;text-align:start;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-style:normal;font-weight:400;line-height:1.5;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius);background-clip:padding-box;text-decoration:none;display:block}.popover .popover-arrow{width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height);display:block}.popover .popover-arrow:before,.popover .popover-arrow:after{content:"";border:0 solid #0000;display:block;position:absolute}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-top>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before{border-top-color:var(--bs-popover-arrow-border);bottom:0}.bs-popover-top>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-end>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before{border-right-color:var(--bs-popover-arrow-border);left:0}.bs-popover-end>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before{border-bottom-color:var(--bs-popover-arrow-border);top:0}.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{width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg);display:block;position:absolute;top:0;left:50%}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before{border-left-color:var(--bs-popover-arrow-border);right:0}.bs-popover-start>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);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);margin-bottom:0}.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{width:100%;position:relative;overflow:hidden}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{float:left;backface-visibility:hidden;width:100%;margin-right:-100%;transition:transform .6s ease-in-out;display:none;position:relative}@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:translate(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translate(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{z-index:1;color:#fff;text-align:center;width:15%;filter:var(--bs-carousel-control-icon-filter);opacity:.5;background:0 0;border:0;justify-content:center;align-items:center;padding:0;transition:opacity .15s;display:flex;position:absolute;top:0;bottom:0}@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;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{background-position:50%;background-repeat:no-repeat;background-size:100% 100%;width:2rem;height:2rem;display:inline-block}.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 0'/%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-.708'/%3e%3c/svg%3e")}.carousel-indicators{z-index:2;justify-content:center;margin-bottom:1rem;margin-left:15%;margin-right:15%;padding:0;display:flex;position:absolute;bottom:0;left:0;right:0}.carousel-indicators [data-bs-target]{box-sizing:content-box;text-indent:-999px;cursor:pointer;background-color:var(--bs-carousel-indicator-active-bg);opacity:.5;background-clip:padding-box;border:10px solid #0000;border-left:0;border-right:0;flex:0 auto;width:30px;height:3px;margin-left:3px;margin-right:3px;padding:0;transition:opacity .6s}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{color:var(--bs-carousel-caption-color);text-align:center;padding-top:1.25rem;padding-bottom:1.25rem;position:absolute;bottom:1.25rem;left:15%;right:15%}.carousel-dark{--bs-carousel-indicator-active-bg:#000;--bs-carousel-caption-color:#000;--bs-carousel-control-icon-filter:invert(1) grayscale(100)}:root,[data-bs-theme=light]{--bs-carousel-indicator-active-bg:#fff;--bs-carousel-caption-color:#fff;--bs-carousel-control-icon-filter: }[data-bs-theme=dark]{--bs-carousel-indicator-active-bg:#000;--bs-carousel-caption-color:#000;--bs-carousel-control-icon-filter:invert(1) grayscale(100)}.spinner-grow,.spinner-border{width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);border-radius:50%;flex-shrink:0;display:inline-block}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-.125em;--bs-spinner-border-width:.25em;--bs-spinner-animation-speed:.75s;--bs-spinner-animation-name:spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:#0000}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-.125em;--bs-spinner-animation-speed:.75s;--bs-spinner-animation-name:spinner-grow;opacity:0;background-color:currentColor}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:var(--bs-box-shadow-sm);--bs-offcanvas-transition:transform .3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@media (width<=575.98px){.offcanvas-sm{z-index:var(--bs-offcanvas-zindex);max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);transition:var(--bs-offcanvas-transition);background-clip:padding-box;outline:0;flex-direction:column;display:flex;position:fixed;bottom:0}}@media (width<=575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (width<=575.98px){.offcanvas-sm.offcanvas-start{width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;left:0;transform:translate(-100%)}.offcanvas-sm.offcanvas-end{width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;right:0;transform:translate(100%)}.offcanvas-sm.offcanvas-top{height:var(--bs-offcanvas-height);border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;top:0;left:0;right:0;transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{height:var(--bs-offcanvas-height);border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;left:0;right:0;transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media (width>=576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:#0000!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible;background-color:#0000!important}}@media (width<=767.98px){.offcanvas-md{z-index:var(--bs-offcanvas-zindex);max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);transition:var(--bs-offcanvas-transition);background-clip:padding-box;outline:0;flex-direction:column;display:flex;position:fixed;bottom:0}}@media (width<=767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (width<=767.98px){.offcanvas-md.offcanvas-start{width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;left:0;transform:translate(-100%)}.offcanvas-md.offcanvas-end{width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;right:0;transform:translate(100%)}.offcanvas-md.offcanvas-top{height:var(--bs-offcanvas-height);border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;top:0;left:0;right:0;transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{height:var(--bs-offcanvas-height);border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;left:0;right:0;transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media (width>=768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:#0000!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible;background-color:#0000!important}}@media (width<=991.98px){.offcanvas-lg{z-index:var(--bs-offcanvas-zindex);max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);transition:var(--bs-offcanvas-transition);background-clip:padding-box;outline:0;flex-direction:column;display:flex;position:fixed;bottom:0}}@media (width<=991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (width<=991.98px){.offcanvas-lg.offcanvas-start{width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;left:0;transform:translate(-100%)}.offcanvas-lg.offcanvas-end{width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;right:0;transform:translate(100%)}.offcanvas-lg.offcanvas-top{height:var(--bs-offcanvas-height);border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;top:0;left:0;right:0;transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{height:var(--bs-offcanvas-height);border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;left:0;right:0;transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media (width>=992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:#0000!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible;background-color:#0000!important}}@media (width<=1199.98px){.offcanvas-xl{z-index:var(--bs-offcanvas-zindex);max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);transition:var(--bs-offcanvas-transition);background-clip:padding-box;outline:0;flex-direction:column;display:flex;position:fixed;bottom:0}}@media (width<=1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (width<=1199.98px){.offcanvas-xl.offcanvas-start{width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;left:0;transform:translate(-100%)}.offcanvas-xl.offcanvas-end{width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;right:0;transform:translate(100%)}.offcanvas-xl.offcanvas-top{height:var(--bs-offcanvas-height);border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;top:0;left:0;right:0;transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{height:var(--bs-offcanvas-height);border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;left:0;right:0;transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media (width>=1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:#0000!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible;background-color:#0000!important}}@media (width<=1399.98px){.offcanvas-xxl{z-index:var(--bs-offcanvas-zindex);max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);transition:var(--bs-offcanvas-transition);background-clip:padding-box;outline:0;flex-direction:column;display:flex;position:fixed;bottom:0}}@media (width<=1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (width<=1399.98px){.offcanvas-xxl.offcanvas-start{width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;left:0;transform:translate(-100%)}.offcanvas-xxl.offcanvas-end{width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;right:0;transform:translate(100%)}.offcanvas-xxl.offcanvas-top{height:var(--bs-offcanvas-height);border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;top:0;left:0;right:0;transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{height:var(--bs-offcanvas-height);border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;left:0;right:0;transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media (width>=1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:#0000!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible;background-color:#0000!important}}.offcanvas{z-index:var(--bs-offcanvas-zindex);max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);transition:var(--bs-offcanvas-transition);background-clip:padding-box;outline:0;flex-direction:column;display:flex;position:fixed;bottom:0}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;left:0;transform:translate(-100%)}.offcanvas.offcanvas-end{width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;right:0;transform:translate(100%)}.offcanvas.offcanvas-top{height:var(--bs-offcanvas-height);border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;top:0;left:0;right:0;transform:translateY(-100%)}.offcanvas.offcanvas-bottom{height:var(--bs-offcanvas-height);border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;left:0;right:0;transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{z-index:1040;background-color:#000;width:100vw;height:100vh;position:fixed;top:0;left:0}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);align-items:center;display:flex}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y));margin-left:auto}.offcanvas-title{line-height:var(--bs-offcanvas-title-line-height);margin-bottom:0}.offcanvas-body{padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);flex-grow:1;overflow-y:auto}.placeholder{vertical-align:middle;cursor:wait;opacity:.5;background-color:currentColor;min-height:1em;display:inline-block}.placeholder.btn:before{content:"";display:inline-block}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:2s ease-in-out infinite placeholder-glow}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{animation:2s linear infinite placeholder-wave;-webkit-mask-image:linear-gradient(130deg,#000 55%,#000c 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,#000c 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%}@keyframes placeholder-wave{to{-webkit-mask-position:-200% 0;mask-position:-200% 0}}.clearfix:after{clear:both;content:"";display:block}.text-bg-primary{color:#fff!important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity,1))!important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity,1))!important}.link-primary:hover,.link-primary:focus{color:RGBA(10, 88, 202, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(10, 88, 202, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(10, 88, 202, var(--bs-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity,1))!important}.link-secondary:hover,.link-secondary:focus{color:RGBA(86, 94, 100, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(86, 94, 100, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(86, 94, 100, var(--bs-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity,1))!important}.link-success:hover,.link-success:focus{color:RGBA(20, 108, 67, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(20, 108, 67, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(20, 108, 67, var(--bs-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity,1))!important}.link-info:hover,.link-info:focus{color:RGBA(61, 213, 243, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(61, 213, 243, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(61, 213, 243, var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity,1))!important}.link-warning:hover,.link-warning:focus{color:RGBA(255, 205, 57, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(255, 205, 57, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(255, 205, 57, var(--bs-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity,1))!important}.link-danger:hover,.link-danger:focus{color:RGBA(176, 42, 55, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(176, 42, 55, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(176, 42, 55, var(--bs-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity,1))!important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity,1))!important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(26, 30, 33, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(26, 30, 33, var(--bs-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity,1))!important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity,.75))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity,.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity,.75))!important}.focus-ring:focus{box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);outline:0}.icon-link{-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity,.5));text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity,.5));text-underline-offset:.25em;backface-visibility:hidden;align-items:center;gap:.375rem;display:inline-flex}.icon-link>.bi{fill:currentColor;flex-shrink:0;width:1em;height:1em;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform,translate3d(.25em, 0, 0))}.ratio{width:100%;position:relative}.ratio:before{padding-top:var(--bs-aspect-ratio);content:"";display:block}.ratio>*{width:100%;height:100%;position:absolute;top:0;left:0}.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.8571%}.fixed-top{z-index:1030;position:fixed;top:0;left:0;right:0}.fixed-bottom{z-index:1030;position:fixed;bottom:0;left:0;right:0}.sticky-top{z-index:1020;position:sticky;top:0}.sticky-bottom{z-index:1020;position:sticky;bottom:0}@media (width>=576px){.sticky-sm-top{z-index:1020;position:sticky;top:0}.sticky-sm-bottom{z-index:1020;position:sticky;bottom:0}}@media (width>=768px){.sticky-md-top{z-index:1020;position:sticky;top:0}.sticky-md-bottom{z-index:1020;position:sticky;bottom:0}}@media (width>=992px){.sticky-lg-top{z-index:1020;position:sticky;top:0}.sticky-lg-bottom{z-index:1020;position:sticky;bottom:0}}@media (width>=1200px){.sticky-xl-top{z-index:1020;position:sticky;top:0}.sticky-xl-bottom{z-index:1020;position:sticky;bottom:0}}@media (width>=1400px){.sticky-xxl-top{z-index:1020;position:sticky;top:0}.sticky-xxl-bottom{z-index:1020;position:sticky;bottom:0}}.hstack{flex-direction:row;align-self:stretch;align-items:center;display:flex}.vstack{flex-direction:column;flex:auto;align-self:stretch;display:flex}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){clip:rect(0, 0, 0, 0)!important;white-space:nowrap!important;border:0!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;overflow:hidden!important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute!important}.visually-hidden *,.visually-hidden-focusable:not(:focus):not(:focus-within) *{overflow:hidden!important}.stretched-link:after{z-index:1;content:"";position:absolute;inset:0}.text-truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.vr{width:var(--bs-border-width);opacity:.25;background-color:currentColor;align-self:stretch;min-height:1em;display:inline-block}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{object-fit:contain!important}.object-fit-cover{object-fit:cover!important}.object-fit-fill{object-fit:fill!important}.object-fit-scale{object-fit:scale-down!important}.object-fit-none{object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:var(--bs-box-shadow)!important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--bs-focus-ring-color:rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color:rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color:rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color:rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color:rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color:rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color:rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color:rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translate(-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-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--bs-border-opacity:.1}.border-opacity-25{--bs-border-opacity:.25}.border-opacity-50{--bs-border-opacity:.5}.border-opacity-75{--bs-border-opacity:.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{column-gap:0!important}.column-gap-1{column-gap:.25rem!important}.column-gap-2{column-gap:.5rem!important}.column-gap-3{column-gap:1rem!important}.column-gap-4{column-gap:1.5rem!important}.column-gap-5{column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:#00000080!important}.text-white-50{--bs-text-opacity:1;color:#ffffff80!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:.25}.text-opacity-50{--bs-text-opacity:.5}.text-opacity-75{--bs-text-opacity:.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10,.link-opacity-10-hover:hover{--bs-link-opacity:.1}.link-opacity-25,.link-opacity-25-hover:hover{--bs-link-opacity:.25}.link-opacity-50,.link-opacity-50-hover:hover{--bs-link-opacity:.5}.link-opacity-75,.link-opacity-75-hover:hover{--bs-link-opacity:.75}.link-opacity-100,.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-offset-1,.link-offset-1-hover:hover{text-underline-offset:.125em!important}.link-offset-2,.link-offset-2-hover:hover{text-underline-offset:.25em!important}.link-offset-3,.link-offset-3-hover:hover{text-underline-offset:.375em!important}.link-underline-primary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity))!important}.link-underline-info{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity,1))!important}.link-underline-opacity-0,.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10,.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:.1}.link-underline-opacity-25,.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:.25}.link-underline-opacity-50,.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:.5}.link-underline-opacity-75,.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:.75}.link-underline-opacity-100,.link-underline-opacity-100-hover:hover{--bs-link-underline-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:#0000!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:.1}.bg-opacity-25{--bs-bg-opacity:.25}.bg-opacity-50{--bs-bg-opacity:.5}.bg-opacity-75{--bs-bg-opacity:.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-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-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-top-left-radius:0!important;border-bottom-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-top-left-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (width>=576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{object-fit:contain!important}.object-fit-sm-cover{object-fit:cover!important}.object-fit-sm-fill{object-fit:fill!important}.object-fit-sm-scale{object-fit:scale-down!important}.object-fit-sm-none{object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{column-gap:0!important}.column-gap-sm-1{column-gap:.25rem!important}.column-gap-sm-2{column-gap:.5rem!important}.column-gap-sm-3{column-gap:1rem!important}.column-gap-sm-4{column-gap:1.5rem!important}.column-gap-sm-5{column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (width>=768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{object-fit:contain!important}.object-fit-md-cover{object-fit:cover!important}.object-fit-md-fill{object-fit:fill!important}.object-fit-md-scale{object-fit:scale-down!important}.object-fit-md-none{object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{column-gap:0!important}.column-gap-md-1{column-gap:.25rem!important}.column-gap-md-2{column-gap:.5rem!important}.column-gap-md-3{column-gap:1rem!important}.column-gap-md-4{column-gap:1.5rem!important}.column-gap-md-5{column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (width>=992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{object-fit:contain!important}.object-fit-lg-cover{object-fit:cover!important}.object-fit-lg-fill{object-fit:fill!important}.object-fit-lg-scale{object-fit:scale-down!important}.object-fit-lg-none{object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{column-gap:0!important}.column-gap-lg-1{column-gap:.25rem!important}.column-gap-lg-2{column-gap:.5rem!important}.column-gap-lg-3{column-gap:1rem!important}.column-gap-lg-4{column-gap:1.5rem!important}.column-gap-lg-5{column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (width>=1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{object-fit:contain!important}.object-fit-xl-cover{object-fit:cover!important}.object-fit-xl-fill{object-fit:fill!important}.object-fit-xl-scale{object-fit:scale-down!important}.object-fit-xl-none{object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{column-gap:0!important}.column-gap-xl-1{column-gap:.25rem!important}.column-gap-xl-2{column-gap:.5rem!important}.column-gap-xl-3{column-gap:1rem!important}.column-gap-xl-4{column-gap:1.5rem!important}.column-gap-xl-5{column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (width>=1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{object-fit:contain!important}.object-fit-xxl-cover{object-fit:cover!important}.object-fit-xxl-fill{object-fit:fill!important}.object-fit-xxl-scale{object-fit:scale-down!important}.object-fit-xxl-none{object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{column-gap:0!important}.column-gap-xxl-1{column-gap:.25rem!important}.column-gap-xxl-2{column-gap:.5rem!important}.column-gap-xxl-3{column-gap:1rem!important}.column-gap-xxl-4{column-gap:1.5rem!important}.column-gap-xxl-5{column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (width>=1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}html[data-theme=light]{--bg:#fbf9f4;--surface:#fff;--surface-2:#f3efe6;--border:#e3ddcf;--border-soft:#ebe6da;--text:#0b0b0b;--text-muted:#5b564d;--text-dim:#8a8478;--brand-red:#c71f38;--amber:#c71f38;--teal:#a33c4b;--periwinkle:#4a463e;--rose:#c97c89;--sage:#8c1729;--amber-dim:#c71f381f;--teal-dim:#a33c4b1f;--nav-bg:#fbf9f4db;--on-accent:#fbf6f0}html[data-theme=dark]{--bg:#0b0b0b;--surface:#161616;--surface-2:#1e1e1e;--border:#2c2c2c;--border-soft:#232323;--text:#f1eee8;--text-muted:#9a948d;--text-dim:#66605a;--brand-red:#c71f38;--amber:#da3550;--teal:#e8637a;--periwinkle:#5c5854;--rose:#f0a9b6;--sage:#8c1729;--amber-dim:#da355029;--teal-dim:#e8637a29;--nav-bg:#0b0b0bdb}html{background:var(--bg);scroll-behavior:smooth;--maxw:1180px;--radius:12px;--mono:"Space Grotesk", sans-serif;--sans:"Barlow", -apple-system, sans-serif;transition:background .2s}body{background:var(--bg);color:var(--text);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.6;transition:background .2s,color .2s}*{box-sizing:border-box;transition:background-color .2s,border-color .2s,color .2s}a{color:inherit;text-decoration:none}img{max-width:100%;display:block}.wrap{max-width:var(--maxw);margin:0 auto;padding:0}.eyebrow{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--teal);align-items:center;gap:8px;font-size:12px;display:inline-flex}.eyebrow:before{content:"";background:var(--teal);width:6px;height:6px;box-shadow:0 0 0 3px var(--teal-dim);border-radius:50%}h1,h2,h3,h4{font-family:var(--mono);color:var(--text);letter-spacing:-.01em;margin:0;font-weight:600}p{color:var(--text-muted);margin:0}section{padding:88px 0}.section-head{max-width:640px;margin-bottom:48px}.section-head h2{margin-top:14px;font-size:30px}.section-head p{margin-top:14px;font-size:16.5px}header{z-index:50;background:var(--nav-bg);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--border-soft);position:sticky;top:0}.logo{align-items:center;display:flex}.logo-full{flex-shrink:0;width:auto;height:26px}.navbar{min-height:72px;padding-top:0;padding-bottom:0}.navbar-nav .nav-link{color:var(--text-muted);white-space:nowrap;font-size:14.5px;transition:color .15s}.navbar-nav .nav-link:hover{color:var(--text)}@media (width>=992px){.navbar-nav{gap:30px}.navbar-nav .nav-link{padding-left:0;padding-right:0}}.nav-cta{font-family:var(--mono);border:1px solid var(--amber);border-radius:999px;font-size:13.5px;font-weight:500;transition:background .15s,color .15s;color:var(--amber)!important;padding:9px 18px!important}.nav-cta:hover{background:var(--amber);color:var(--on-accent)!important}.navbar-toggler{border:none;padding:8px}.navbar-toggler:focus{box-shadow:none}html[data-theme=light] .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(11,11,11,1)' stroke-width='2' stroke-linecap='round' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}html[data-theme=dark] .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(241,238,232,1)' stroke-width='2' stroke-linecap='round' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}@media (width<=991.98px){:is(header:has(.navbar-collapse.show),header:has(.navbar-collapse.collapsing)){background:var(--bg);-webkit-backdrop-filter:none;backdrop-filter:none}.navbar-collapse{background:var(--bg);border-top:1px solid var(--border-soft);margin:0 -28px;padding:0 28px}.navbar-nav{padding:10px 0 20px}.navbar-nav .nav-link{border-bottom:1px solid var(--border-soft);padding:14px 0;font-size:16px}.navbar-nav .nav-cta{text-align:center;border:1px solid var(--amber);border-radius:999px;width:100%;margin-top:16px;padding:12px 18px;font-size:14.5px;transition:background .15s,color .15s;display:block;color:var(--amber)!important}}.theme-toggle{border:1px solid var(--border);width:38px;height:38px;color:var(--text-muted);cursor:pointer;background:0 0;border-radius:9px;flex-shrink:0;justify-content:center;align-items:center;transition:border-color .15s,color .15s;display:flex}.theme-toggle:hover{border-color:var(--text-muted);color:var(--text)}.theme-toggle svg{width:18px;height:18px}.theme-toggle .icon-moon,html[data-theme=light] .theme-toggle .icon-sun{display:none}html[data-theme=light] .theme-toggle .icon-moon{display:block}.btn{font-family:var(--mono);border:1px solid var(--border);white-space:nowrap;border-radius:8px;align-items:center;gap:8px;padding:11px 20px;font-size:13.5px;font-weight:500;transition:border-color .15s,background .15s,transform .15s;display:inline-flex}.btn:hover{transform:translateY(-1px)}.btn svg{width:15px;height:15px}.btn-primary{background:var(--amber);color:var(--on-accent);border-color:var(--amber);font-weight:600}.btn-primary:hover{background:var(--amber);box-shadow:0 6px 20px var(--amber-dim)}.btn-ghost{color:var(--text)}.btn-ghost:hover{border-color:var(--text-muted)}.btn-sm{border-radius:7px;padding:8px 14px;font-size:12.5px}.hero{padding:76px 0 40px}.hero h1{letter-spacing:-.02em;margin-top:18px;font-size:44px;line-height:1.15}.hero p.sub{max-width:520px;color:var(--text-muted);margin-top:20px;font-size:18px}.hero-grid{grid-template-columns:1.05fr .95fr;align-items:center;gap:64px;display:grid}.hero-ctas{flex-wrap:wrap;gap:14px;margin-top:32px;display:flex}.hero-stack-note{font-family:var(--mono);color:var(--text-dim);flex-wrap:wrap;gap:18px;margin-top:34px;font-size:12.5px;display:flex}.hero-stack-note span{color:var(--text-muted)}.pipeline{background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:26px 26px 30px;position:relative}.pipeline-label{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text-dim);justify-content:space-between;margin-bottom:18px;font-size:11px;display:flex}.pipeline-track{padding-left:28px;position:relative}.pipeline-track:before{content:"";background:linear-gradient(180deg, var(--sage), var(--brand-red));opacity:.5;width:2px;position:absolute;top:10px;bottom:10px;left:9px}.pl-step{background:var(--surface-2);border:1px solid var(--border-soft);border-radius:9px;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px;padding:13px 16px;display:flex;position:relative}.pl-step:last-child{margin-bottom:0}.pl-step:before{content:"";background:var(--bg);border:2px solid var(--teal);border-radius:50%;width:9px;height:9px;position:absolute;top:50%;left:-23px;transform:translateY(-50%)}.pl-step .name{font-family:var(--mono);color:var(--text);font-size:13.5px;font-weight:500}.pl-step .tag{font-family:var(--mono);color:var(--text-dim);font-size:10.5px}.pl-packet{background:var(--brand-red);border-radius:50%;width:14px;height:14px;animation:5s ease-in-out infinite travel;position:absolute;left:2px;box-shadow:0 0 12px 2px #c71f3838}@keyframes travel{0%{opacity:0;top:8px}6%{opacity:1}46%{opacity:1;top:calc(100% - 22px)}50%{opacity:0}50.01%{top:8px}56%{opacity:1}96%{opacity:1;top:calc(100% - 22px)}to{opacity:0;top:calc(100% - 22px)}}@media (prefers-reduced-motion:reduce){.pl-packet{opacity:1;animation:none;top:8px}html{scroll-behavior:auto}}.split{grid-template-columns:1.1fr .9fr;align-items:start;gap:64px;display:grid}.split h2{font-size:28px}.split .lede{color:var(--text-muted);margin-top:16px;font-size:17px;line-height:1.7}.extending{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim);align-items:center;gap:12px;margin-top:26px;font-size:12px;display:flex}.extending .extending-logo{text-transform:none;align-items:center;display:flex}.extending .extending-logo img{width:auto;height:36px;display:block}.extending .lockup{font-family:var(--mono);color:var(--text);text-transform:none;letter-spacing:0;font-size:15px;font-weight:600}.extending .lockup .x{color:var(--text-dim);margin:0 6px;font-weight:400}.traits{grid-template-columns:1fr 1fr;gap:14px;display:grid}.trait{background:var(--surface);border:1px solid var(--border);text-align:left;border-radius:12px;padding:22px 18px}.trait .icon{margin-bottom:12px}.trait p{font-family:var(--mono);color:var(--text);font-size:13px;font-weight:500;line-height:1.4}.products-grid{grid-template-columns:repeat(3,1fr);gap:18px;display:grid}.card{background:var(--surface);border:1px solid var(--border);border-top:3px solid var(--accent,var(--teal));border-radius:var(--radius);flex-direction:column;height:100%;padding:26px 24px 24px;display:flex}.card .card-top{justify-content:space-between;align-items:flex-start;margin-bottom:14px;display:flex}.card h3{color:var(--text);font-size:20px}.card .kicker{font-family:var(--mono);color:var(--text-dim);letter-spacing:.1em;text-transform:uppercase;margin-bottom:6px;font-size:10.5px;display:block}.card p.desc{flex-grow:1;font-size:14.5px;line-height:1.65}.card .card-btns{flex-wrap:wrap;gap:8px;margin-top:20px;display:flex}.badges{flex-wrap:wrap;gap:5px;margin-bottom:16px;display:flex}.badges img{border-radius:3px;height:19px}.standards-grid{background:var(--border);border:1px solid var(--border);border-radius:var(--radius);grid-template-columns:repeat(3,1fr);gap:1px;display:grid;overflow:hidden}.standard{background:var(--surface);padding:30px 26px}.standard h4{color:var(--text);margin-bottom:10px;font-size:16px}.standard h4 a{color:inherit;border-bottom:1px solid var(--border)}.standard h4 a:hover{color:var(--amber);border-color:var(--amber)}.standard p{font-size:14px;line-height:1.65}.standard .get-started{font-family:var(--mono);color:var(--text-dim);margin-top:14px;font-size:12px}.standard .get-started a{color:var(--teal)}.standard .get-started a:hover{text-decoration:underline}.components-grid{grid-template-columns:1fr 1fr;gap:0 40px;display:grid}details.acc{border-bottom:1px solid var(--border-soft)}details.acc summary{cursor:pointer;font-family:var(--mono);color:var(--text);justify-content:space-between;align-items:center;padding:18px 0;font-size:15px;font-weight:500;list-style:none;display:flex}details.acc summary::-webkit-details-marker{display:none}details.acc summary .chev{color:var(--text-dim);font-size:18px;transition:transform .2s}details.acc[open] summary .chev{color:var(--amber);transform:rotate(45deg)}.acc-body{padding:0 0 20px}.pkg-row{border-top:1px solid var(--border-soft);justify-content:space-between;gap:16px;padding:9px 0;display:flex}.pkg-row:first-child{border-top:none}.pkg-row a{font-family:var(--mono);color:var(--teal);white-space:nowrap;font-size:13.5px}.pkg-row a:hover{text-decoration:underline}.pkg-row .pkg-desc{color:var(--text-muted);text-align:right;font-size:13px}.posts-grid{grid-template-columns:repeat(3,1fr);gap:20px;display:grid}.posts-grid-2-col{grid-template-columns:repeat(2,1fr);gap:20px;display:grid}.post-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px;transition:border-color .15s}.post-card:hover{border-color:var(--text-dim)}.post-card h4{color:var(--text);margin-top:10px;font-size:16.5px;line-height:1.4}.post-card p{margin-top:10px;font-size:13.5px;line-height:1.6}.post-card .read-more{font-family:var(--mono);color:var(--amber);margin-top:14px;margin-left:2px;font-size:12px;display:inline-block}.post-date{font-family:var(--mono);color:var(--text-dim);letter-spacing:.06em;text-transform:uppercase;font-size:11.5px}.about-band{background:var(--surface);border-top:1px solid var(--border-soft);border-bottom:1px solid var(--border-soft)}.about-inner{grid-template-columns:1fr 1.3fr;align-items:center;gap:56px;display:grid}.about-inner h2{margin-top:14px;font-size:26px;line-height:1.3}.about-inner .about-text{font-size:15px;line-height:1.75}.about-inner .about-cta{margin-top:22px}footer{padding:50px 0 40px}.footer-top{border-bottom:1px solid var(--border-soft);flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:30px;padding-bottom:34px;display:flex}.footer-copy{color:var(--text-dim);max-width:460px;font-size:13px;line-height:1.8}.footer-copy a{color:var(--text-muted);border-bottom:1px solid var(--border)}.footer-social{gap:12px;display:flex}.footer-social a{border:1px solid var(--border);width:38px;height:38px;color:var(--text);border-radius:9px;justify-content:center;align-items:center;transition:border-color .15s,color .15s;display:flex}.footer-social a:hover{border-color:var(--teal);color:var(--teal)}.footer-social svg{width:17px;height:17px}.footer-bottom{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;padding-top:24px;display:flex}.footer-bottom .sponsor{font-family:var(--mono);color:var(--text-dim);font-size:12px}.footer-bottom .sponsor a{color:var(--text-muted);border-bottom:1px solid var(--border)}@media (width<=980px){.hero-grid{grid-template-columns:1fr;gap:44px}.hero{padding-top:44px}.split{grid-template-columns:1fr;gap:40px}.products-grid,.standards-grid{grid-template-columns:repeat(2,1fr)}.posts-grid{grid-template-columns:1fr}.about-inner{grid-template-columns:1fr;gap:26px}}@media (width<=700px){.wrap{padding:0 16px}.hero h1{font-size:32px}.products-grid,.standards-grid,.components-grid{grid-template-columns:1fr}section{padding:56px 0}.pkg-row{flex-direction:column;gap:2px}.pkg-row .pkg-desc{text-align:left}}:focus-visible{outline:2px solid var(--amber);outline-offset:2px}.icon{flex-shrink:0;width:18px;height:18px}.icon-lg{width:50px;height:50px}.icon-jetbrains{min-width:100px}[data-theme=light] .icon{filter:none}[data-theme=dark] .icon{filter:invert()}.contact-grid{grid-template-columns:1fr 1fr;gap:18px;display:grid}@media (width<=700px){.contact-grid{grid-template-columns:1fr}}.contact-card{text-align:center;align-items:center}.contact-card svg{width:40px;height:40px;color:var(--teal);margin-bottom:14px}.contact-card .card-btns{justify-content:center}.approach-card{margin-top:18px}.approach-card h3{margin-bottom:10px}.latest-posts{margin-top:48px}.latest-posts .section-head{margin-bottom:24px}.latest-posts .posts-grid{grid-template-columns:repeat(2,1fr)}@media (width<=700px){.latest-posts .posts-grid{grid-template-columns:1fr}}.sidebar{flex-direction:column;gap:34px;display:flex}@media (width<=900px){.sidebar{order:2}}.widget{border-bottom:1px solid var(--border-soft);padding-bottom:28px}.widget:last-child{border-bottom:none;padding-bottom:0}.widget ul{margin:0;padding:0;list-style:none}.widget-title{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim);margin-bottom:16px;font-size:11.5px}.search-form{border:1px solid var(--border);border-radius:8px;display:flex;overflow:hidden}.search-form input{min-width:0;color:var(--text);font-family:var(--sans);background:0 0;border:none;flex:1;padding:10px 12px;font-size:14px}.search-form input:focus{outline:none}.search-form button{background:var(--surface-2);color:var(--text-muted);cursor:pointer;font-family:var(--mono);border:none;padding:0 14px;font-size:12px}.search-form button:hover{color:var(--amber)}.widget-recent ul{flex-direction:column;gap:14px;display:flex}.widget-recent li a{color:var(--text);font-size:14px;line-height:1.4;display:block}.widget-recent li a:hover{color:var(--amber)}.widget-recent li .post-date{font-family:var(--mono);color:var(--text-dim);margin-top:4px;font-size:11px;display:block}.widget-categories li{border-bottom:1px solid var(--border-soft)}.widget-categories li:last-child{border-bottom:none}.widget-categories li.current a{color:var(--amber);font-weight:600}.widget-categories li a{color:var(--text-muted);justify-content:space-between;align-items:center;gap:10px;padding:9px 0;font-size:14px;display:flex}.widget-categories li a:hover{color:var(--text)}.widget-categories .cat-count{min-width:28px;font-family:var(--mono);text-align:center;color:var(--text-dim);background:var(--surface-2);border:1px solid var(--border-soft);border-radius:999px;flex-shrink:0;padding:1px 9px;font-size:11px;display:inline-block}.widget-categories li a:hover .cat-count{color:var(--text)}.widget-more{margin-top:14px}.widget-more a{font-family:var(--mono);color:var(--amber);font-size:12px}.widget-more a:hover{text-decoration:underline}.no-articles{color:var(--text-dim);font-size:13.5px}.widget-connect ul{flex-direction:column;gap:12px;display:flex}.widget-connect li a{color:var(--text-muted);align-items:center;gap:10px;font-size:14px;display:flex}.widget-connect li a:hover{color:var(--text)}.widget-connect li a svg{width:17px;height:17px;color:var(--teal);flex-shrink:0}.widget-approach p{color:var(--text-muted);margin-bottom:12px;font-size:13.5px;line-height:1.7}.widget-approach p:last-child{margin-bottom:0}.breadcrumb-back{font-family:var(--mono);color:var(--text-dim);align-items:center;gap:6px;font-size:13px;display:inline-flex}.breadcrumb-back:hover{color:var(--amber)}.breadcrumb-back svg{width:14px;height:14px}.post-hero{border-bottom:1px solid var(--border-soft);padding:40px 0}.post-hero h1{max-width:820px;margin-top:16px;font-size:38px;line-height:1.2}@media (width<=900px){.post-hero h1{font-size:28px}}.post-meta{font-family:var(--mono);color:var(--text-dim);flex-wrap:wrap;align-items:center;gap:6px 14px;margin-top:22px;font-size:13px;display:flex}.post-meta a{color:var(--text-muted)}.post-meta a:hover{color:var(--amber)}.post-meta .featured-tag{color:var(--brand-red);font-weight:600}.post-body-wrap{padding:52px 0 72px}.post-layout{grid-template-columns:270px 1fr;align-items:start;gap:64px;display:grid}@media (width<=900px){.post-layout{grid-template-columns:1fr;gap:44px}.article{order:1}}.entry{max-width:720px}@media (width<=900px){.entry{max-width:100%}}.entry h2{font-family:var(--mono);color:var(--text);margin-top:48px;margin-bottom:16px;font-size:26px}.entry h2:first-child{margin-top:0}.entry h3{font-family:var(--mono);color:var(--text);margin-top:36px;margin-bottom:14px;font-size:20px}.entry h4{font-family:var(--mono);color:var(--text);margin-top:28px;margin-bottom:12px;font-size:17px}.entry p{color:var(--text-muted);margin-bottom:20px;font-size:16.5px;line-height:1.8}.entry strong{color:var(--text);font-weight:600}.entry a{color:var(--teal);text-decoration:underline;-webkit-text-decoration-color:var(--border);text-decoration-color:var(--border);text-underline-offset:3px}.entry a:hover{color:var(--amber);-webkit-text-decoration-color:var(--amber);text-decoration-color:var(--amber)}.entry ul{margin:0 0 20px;padding-left:0;list-style:none}.entry ul li{color:var(--text-muted);margin-bottom:10px;padding-left:22px;font-size:16px;line-height:1.7;position:relative}.entry ul li:before{content:"";background:var(--amber);border-radius:50%;width:6px;height:6px;position:absolute;top:10px;left:0}.entry figure{margin:28px 0}.entry figure img{border:1px solid var(--border);border-radius:10px;width:100%;height:auto;display:block}.entry .img-row{gap:20px;margin:28px 0;display:flex}@media (width<=900px){.entry .img-row{flex-direction:column}}.entry .img-row figure{flex:1;margin:0}.entry .img-row img{width:100%}.entry code{font-family:var(--mono);background:var(--surface-2);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-size:.9em}.entry pre{font-family:var(--mono);background:var(--surface-2);border:1px solid var(--border);color:var(--text);border-radius:8px;margin:0 0 20px;padding:16px 18px;font-size:14px;line-height:1.6;overflow-x:auto}.entry pre code{font-size:inherit;background:0 0;border:none;padding:0}.obsolete-warning{border-radius:var(--radius);border:1px solid var(--brand-red);border-left:4px solid var(--brand-red);background:#c71f381f;margin:0 0 40px;padding:20px 24px}.obsolete-warning p{color:var(--text);margin:0;font-size:14.5px;line-height:1.7}.obsolete-warning strong{color:var(--brand-red)}.obsolete-warning a{color:var(--brand-red);text-decoration:underline;-webkit-text-decoration-color:var(--brand-red);text-decoration-color:var(--brand-red);text-underline-offset:3px;font-weight:600}.obsolete-warning a:hover{color:var(--teal);-webkit-text-decoration-color:var(--teal);text-decoration-color:var(--teal)}.callout{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--brand-red);border-radius:12px;margin:44px 0;padding:28px 30px}.callout h4{font-family:var(--mono);color:var(--text);margin-bottom:12px;font-size:18px}.callout p{color:var(--text-muted);margin-bottom:14px;font-size:14.5px;line-height:1.7}.callout ul{margin:0 0 20px;padding-left:0;list-style:none}.callout ul li{color:var(--text-muted);margin-bottom:8px;padding-left:20px;font-size:14.5px;position:relative}.callout ul li:before{content:"";background:var(--brand-red);border-radius:50%;width:5px;height:5px;position:absolute;top:9px;left:0}.post-nav{grid-template-columns:1fr 1fr;gap:16px;margin:48px 0;display:grid}@media (width<=900px){.post-nav{grid-template-columns:1fr}}.post-nav a{border:1px solid var(--border);background:var(--surface);border-radius:12px;padding:20px 22px;display:block}.post-nav a:hover{border-color:var(--text-dim)}.post-nav .direction{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim);margin-bottom:8px;font-size:11px;display:block}.post-nav .title{color:var(--text);font-size:14.5px;line-height:1.4}.post-nav .next-post{text-align:right}.comment-section{border-top:1px solid var(--border-soft);margin-top:56px;padding-top:40px}.comment-section h3{font-family:var(--mono);color:var(--text);margin-bottom:24px;font-size:20px}.comment-form-mock{flex-direction:column;gap:16px;max-width:560px;display:flex}.comment-form-mock label{font-family:var(--mono);text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);margin-bottom:6px;font-size:12px;display:block}.comment-form-mock input,.comment-form-mock textarea{background:var(--surface);border:1px solid var(--border);width:100%;color:var(--text);font-family:var(--sans);border-radius:8px;padding:11px 14px;font-size:14.5px}.comment-form-mock input:focus,.comment-form-mock textarea:focus{border-color:var(--amber);outline:none}.comment-form-mock textarea{resize:vertical;min-height:120px}.post-hero-v2{padding:20px 0 16px;position:relative}.post-hero-v2:after{content:"";background:linear-gradient(90deg, var(--amber), var(--teal), transparent 85%);border-radius:2px;height:2px;position:absolute;bottom:0;left:0;right:0}.post-hero-v2 h1{max-width:none;margin:12px 0 0;font-size:38px;line-height:1.2}@media (width<=900px){.post-hero-v2 h1{font-size:28px}}.hero-top-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 18px;display:flex}.hero-badge{background:var(--teal-dim);border:1px solid var(--teal);color:var(--teal);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;border-radius:999px;align-items:center;gap:8px;padding:6px 14px 6px 10px;font-size:12px;display:inline-flex}.hero-badge svg{flex-shrink:0;width:14px;height:14px}.post-meta-v2{font-family:var(--mono);color:var(--text-dim);flex-wrap:wrap;align-items:center;gap:8px 22px;font-size:13px;display:flex}.post-meta-v2 a{color:var(--text-muted)}.post-meta-v2 a:hover{color:var(--amber)}.meta-item{align-items:center;gap:6px;display:inline-flex}.meta-item svg{width:14px;height:14px;color:var(--text-dim);flex-shrink:0} +:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-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-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255, 255, 255;--bs-black-rgb:0, 0, 0;--bs-font-sans-serif:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient:linear-gradient(180deg, #ffffff26, #fff0);--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33, 37, 41;--bs-body-bg:#fff;--bs-body-bg-rgb:255, 255, 255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0, 0, 0;--bs-secondary-color:#212529bf;--bs-secondary-color-rgb:33, 37, 41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233, 236, 239;--bs-tertiary-color:#21252980;--bs-tertiary-color-rgb:33, 37, 41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248, 249, 250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13, 110, 253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10, 88, 202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:#0000002d;--bs-border-radius:.375rem;--bs-border-radius-sm:.25rem;--bs-border-radius-lg:.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 .5rem 1rem #00000026;--bs-box-shadow-sm:0 .125rem .25rem #00000013;--bs-box-shadow-lg:0 1rem 3rem #0000002d;--bs-box-shadow-inset:inset 0 1px 2px #00000013;--bs-focus-ring-width:.25rem;--bs-focus-ring-opacity:.25;--bs-focus-ring-color:#0d6efd40;--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222, 226, 230;--bs-body-bg:#212529;--bs-body-bg-rgb:33, 37, 41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255, 255, 255;--bs-secondary-color:#dee2e6bf;--bs-secondary-color-rgb:222, 226, 230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52, 58, 64;--bs-tertiary-color:#dee2e680;--bs-tertiary-color-rgb:222, 226, 230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43, 48, 53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110, 168, 254;--bs-link-hover-color-rgb:139, 185, 254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:#ffffff26;--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}*,:before,:after{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{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:#0000;margin:0}hr{color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25;margin:1rem 0}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{color:var(--bs-heading-color);margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media (width>=1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media (width>=1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media (width>=1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (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]{cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}address{font-style:normal;line-height:inherit;margin-bottom:1rem}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg);padding:.1875em}sub,sup{vertical-align:baseline;font-size:.75em;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{margin-top:0;margin-bottom:1rem;font-size:.875em;display:block;overflow:auto}pre code{font-size:inherit;color:inherit;word-break:normal}code{color:var(--bs-code-color);word-wrap:break-word;font-size:.875em}a>code{color:inherit}kbd{color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem;padding:.1875rem .375rem;font-size:.875em}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{color:var(--bs-secondary-color);text-align:left;padding-top:.5rem;padding-bottom:.5rem}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{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}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{border-style:none;padding:0}textarea{resize:vertical}fieldset{border:0;min-width:0;margin:0;padding:0}legend{float:left;width:100%;line-height:inherit;margin-bottom:.5rem;padding:0;font-size:calc(1.275rem + .3vw)}@media (width>=1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-text{padding:0}::-webkit-datetime-edit-minute{padding:0}::-webkit-datetime-edit-hour-field{padding:0}::-webkit-datetime-edit-day-field{padding:0}::-webkit-datetime-edit-month-field{padding:0}::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button{cursor:pointer;filter:grayscale()}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}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 (width>=1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (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 (width>=1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (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 (width>=1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (width>=1200px){.display-6{font-size:2.5rem}}.list-unstyled,.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{text-transform:uppercase;font-size:.875em}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{color:#6c757d;margin-top:-1rem;margin-bottom:1rem;font-size:.875em}.blockquote-footer:before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto;padding:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{color:var(--bs-secondary-color);font-size:.875em}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-left:auto;margin-right:auto}@media (width>=576px){.container-sm,.container{max-width:540px}}@media (width>=768px){.container-md,.container-sm,.container{max-width:720px}}@media (width>=992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (width>=1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media (width>=1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x));flex-wrap:wrap;display:flex}.row>*{width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y);flex-shrink:0}.col{flex:1 0 0}.row-cols-auto>*{flex:none;width:auto}.row-cols-1>*{flex:none;width:100%}.row-cols-2>*{flex:none;width:50%}.row-cols-3>*{flex:none;width:33.3333%}.row-cols-4>*{flex:none;width:25%}.row-cols-5>*{flex:none;width:20%}.row-cols-6>*{flex:none;width:16.6667%}.col-auto{flex:none;width:auto}.col-1{flex:none;width:8.33333%}.col-2{flex:none;width:16.6667%}.col-3{flex:none;width:25%}.col-4{flex:none;width:33.3333%}.col-5{flex:none;width:41.6667%}.col-6{flex:none;width:50%}.col-7{flex:none;width:58.3333%}.col-8{flex:none;width:66.6667%}.col-9{flex:none;width:75%}.col-10{flex:none;width:83.3333%}.col-11{flex:none;width:91.6667%}.col-12{flex:none;width:100%}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.6667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333%}.offset-5{margin-left:41.6667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333%}.offset-8{margin-left:66.6667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333%}.offset-11{margin-left:91.6667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:.25rem}.g-1,.gy-1{--bs-gutter-y:.25rem}.g-2,.gx-2{--bs-gutter-x:.5rem}.g-2,.gy-2{--bs-gutter-y:.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (width>=576px){.col-sm{flex:1 0 0}.row-cols-sm-auto>*{flex:none;width:auto}.row-cols-sm-1>*{flex:none;width:100%}.row-cols-sm-2>*{flex:none;width:50%}.row-cols-sm-3>*{flex:none;width:33.3333%}.row-cols-sm-4>*{flex:none;width:25%}.row-cols-sm-5>*{flex:none;width:20%}.row-cols-sm-6>*{flex:none;width:16.6667%}.col-sm-auto{flex:none;width:auto}.col-sm-1{flex:none;width:8.33333%}.col-sm-2{flex:none;width:16.6667%}.col-sm-3{flex:none;width:25%}.col-sm-4{flex:none;width:33.3333%}.col-sm-5{flex:none;width:41.6667%}.col-sm-6{flex:none;width:50%}.col-sm-7{flex:none;width:58.3333%}.col-sm-8{flex:none;width:66.6667%}.col-sm-9{flex:none;width:75%}.col-sm-10{flex:none;width:83.3333%}.col-sm-11{flex:none;width:91.6667%}.col-sm-12{flex:none;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.6667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333%}.offset-sm-5{margin-left:41.6667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333%}.offset-sm-8{margin-left:66.6667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333%}.offset-sm-11{margin-left:91.6667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (width>=768px){.col-md{flex:1 0 0}.row-cols-md-auto>*{flex:none;width:auto}.row-cols-md-1>*{flex:none;width:100%}.row-cols-md-2>*{flex:none;width:50%}.row-cols-md-3>*{flex:none;width:33.3333%}.row-cols-md-4>*{flex:none;width:25%}.row-cols-md-5>*{flex:none;width:20%}.row-cols-md-6>*{flex:none;width:16.6667%}.col-md-auto{flex:none;width:auto}.col-md-1{flex:none;width:8.33333%}.col-md-2{flex:none;width:16.6667%}.col-md-3{flex:none;width:25%}.col-md-4{flex:none;width:33.3333%}.col-md-5{flex:none;width:41.6667%}.col-md-6{flex:none;width:50%}.col-md-7{flex:none;width:58.3333%}.col-md-8{flex:none;width:66.6667%}.col-md-9{flex:none;width:75%}.col-md-10{flex:none;width:83.3333%}.col-md-11{flex:none;width:91.6667%}.col-md-12{flex:none;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.6667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333%}.offset-md-5{margin-left:41.6667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333%}.offset-md-8{margin-left:66.6667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333%}.offset-md-11{margin-left:91.6667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (width>=992px){.col-lg{flex:1 0 0}.row-cols-lg-auto>*{flex:none;width:auto}.row-cols-lg-1>*{flex:none;width:100%}.row-cols-lg-2>*{flex:none;width:50%}.row-cols-lg-3>*{flex:none;width:33.3333%}.row-cols-lg-4>*{flex:none;width:25%}.row-cols-lg-5>*{flex:none;width:20%}.row-cols-lg-6>*{flex:none;width:16.6667%}.col-lg-auto{flex:none;width:auto}.col-lg-1{flex:none;width:8.33333%}.col-lg-2{flex:none;width:16.6667%}.col-lg-3{flex:none;width:25%}.col-lg-4{flex:none;width:33.3333%}.col-lg-5{flex:none;width:41.6667%}.col-lg-6{flex:none;width:50%}.col-lg-7{flex:none;width:58.3333%}.col-lg-8{flex:none;width:66.6667%}.col-lg-9{flex:none;width:75%}.col-lg-10{flex:none;width:83.3333%}.col-lg-11{flex:none;width:91.6667%}.col-lg-12{flex:none;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.6667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333%}.offset-lg-5{margin-left:41.6667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333%}.offset-lg-8{margin-left:66.6667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333%}.offset-lg-11{margin-left:91.6667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (width>=1200px){.col-xl{flex:1 0 0}.row-cols-xl-auto>*{flex:none;width:auto}.row-cols-xl-1>*{flex:none;width:100%}.row-cols-xl-2>*{flex:none;width:50%}.row-cols-xl-3>*{flex:none;width:33.3333%}.row-cols-xl-4>*{flex:none;width:25%}.row-cols-xl-5>*{flex:none;width:20%}.row-cols-xl-6>*{flex:none;width:16.6667%}.col-xl-auto{flex:none;width:auto}.col-xl-1{flex:none;width:8.33333%}.col-xl-2{flex:none;width:16.6667%}.col-xl-3{flex:none;width:25%}.col-xl-4{flex:none;width:33.3333%}.col-xl-5{flex:none;width:41.6667%}.col-xl-6{flex:none;width:50%}.col-xl-7{flex:none;width:58.3333%}.col-xl-8{flex:none;width:66.6667%}.col-xl-9{flex:none;width:75%}.col-xl-10{flex:none;width:83.3333%}.col-xl-11{flex:none;width:91.6667%}.col-xl-12{flex:none;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.6667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333%}.offset-xl-5{margin-left:41.6667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333%}.offset-xl-8{margin-left:66.6667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333%}.offset-xl-11{margin-left:91.6667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (width>=1400px){.col-xxl{flex:1 0 0}.row-cols-xxl-auto>*{flex:none;width:auto}.row-cols-xxl-1>*{flex:none;width:100%}.row-cols-xxl-2>*{flex:none;width:50%}.row-cols-xxl-3>*{flex:none;width:33.3333%}.row-cols-xxl-4>*{flex:none;width:25%}.row-cols-xxl-5>*{flex:none;width:20%}.row-cols-xxl-6>*{flex:none;width:16.6667%}.col-xxl-auto{flex:none;width:auto}.col-xxl-1{flex:none;width:8.33333%}.col-xxl-2{flex:none;width:16.6667%}.col-xxl-3{flex:none;width:25%}.col-xxl-4{flex:none;width:33.3333%}.col-xxl-5{flex:none;width:41.6667%}.col-xxl-6{flex:none;width:50%}.col-xxl-7{flex:none;width:58.3333%}.col-xxl-8{flex:none;width:66.6667%}.col-xxl-9{flex:none;width:75%}.col-xxl-10{flex:none;width:83.3333%}.col-xxl-11{flex:none;width:91.6667%}.col-xxl-12{flex:none;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333%}.offset-xxl-2{margin-left:16.6667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.3333%}.offset-xxl-5{margin-left:41.6667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.3333%}.offset-xxl-8{margin-left:66.6667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.3333%}.offset-xxl-11{margin-left:91.6667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-emphasis-color);--bs-table-striped-bg:rgba(var(--bs-emphasis-color-rgb), .05);--bs-table-active-color:var(--bs-emphasis-color);--bs-table-active-bg:rgba(var(--bs-emphasis-color-rgb), .1);--bs-table-hover-color:var(--bs-emphasis-color);--bs-table-hover-bg:rgba(var(--bs-emphasis-color-rgb), .075);vertical-align:top;border-color:var(--bs-table-border-color);width:100%;margin-bottom:1rem}.table>:not(caption)>*>*{color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)));padding:.5rem}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*,.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#a5b5cc;--bs-table-striped-bg:#c4d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe5;--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:#b4b6b7;--bs-table-striped-bg:#d6d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbcdce;--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:#a7b9b1;--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:#a5c4ca;--bs-table-striped-bg:#c4e8ef;--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:#ccc2a4;--bs-table-striped-bg:#f2e6c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dab9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece0be;--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:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc1c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7c9;--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:#c6c7c8;--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:#4d5154;--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{-webkit-overflow-scrolling:touch;overflow-x:auto}@media (width<=575.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (width<=767.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (width<=991.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (width<=1199.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (width<=1399.98px){.table-responsive-xxl{-webkit-overflow-scrolling:touch;overflow-x:auto}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));font-size:inherit;margin-bottom:0;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{color:var(--bs-secondary-color);margin-top:.25rem;font-size:.875em}.form-control{width:100%;color:var(--bs-body-color);appearance:none;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);background-clip:padding-box;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;display:block}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{padding:0;display:block}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{margin:-.375rem -.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;margin-inline-end:.75rem;padding:.375rem .75rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{width:100%;color:var(--bs-body-color);border:solid #0000;border-width:var(--bs-border-width) 0;background-color:#0000;margin-bottom:0;padding:.375rem 0;line-height:1.5;display:block}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-left:0;padding-right:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));border-radius:var(--bs-border-radius-sm);padding:.25rem .5rem;font-size:.875rem}.form-control-sm::file-selector-button{margin:-.25rem -.5rem;margin-inline-end:.5rem;padding:.25rem .5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));border-radius:var(--bs-border-radius-lg);padding:.5rem 1rem;font-size:1.25rem}.form-control-lg::file-selector-button{margin:-.5rem -1rem;margin-inline-end:1rem;padding:.5rem 1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border-radius:var(--bs-border-radius);border:0!important}.form-control-color::-webkit-color-swatch{border-radius:var(--bs-border-radius);border:0!important}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");width:100%;color:var(--bs-body-color);appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon,none);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);background-position:right .75rem center;background-repeat:no-repeat;background-size:16px 12px;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;display:block}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-select[multiple],.form-select[size]:not([size="1"]){background-image:none;padding-right:.75rem}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:#0000;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{border-radius:var(--bs-border-radius-sm);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{border-radius:var(--bs-border-radius-lg);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{min-height:1.5rem;margin-bottom:.125rem;padding-left:1.5em;display:block}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{text-align:right;padding-left:0;padding-right:1.5em}.form-check-reverse .form-check-input{float:right;margin-left:0;margin-right:-1.5em}.form-check-input{--bs-form-check-bg:var(--bs-body-bg);vertical-align:top;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;print-color-adjust:exact;background-position:50%;background-repeat:no-repeat;background-size:contain;flex-shrink:0;width:1em;height:1em;margin-top:.25em}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e");background-color:#0d6efd;border-color:#0d6efd}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-image:var(--bs-form-switch-bg);background-position:0;border-radius:2em;width:2em;margin-left:-2.5em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgb%28134, 182.5, 254%29'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e");background-position:100%}.form-switch.form-check-reverse{padding-left:0;padding-right:2.5em}.form-switch.form-check-reverse .form-check-input{margin-left:0;margin-right:-2.5em}.form-check-inline{margin-right:1rem;display:inline-block}.btn-check{clip:rect(0, 0, 0, 0);pointer-events:none;position:absolute}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{appearance:none;background-color:#0000;width:100%;height:1.5rem;padding:0}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem #0d6efd40}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem #0d6efd40}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;width:1rem;height:1rem;margin-top:-.25rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{color:#0000;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:#0000;border-radius:1rem;width:100%;height:.5rem}.form-range::-moz-range-thumb{appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;width:1rem;height:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{color:#0000;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:#0000;border-radius:1rem;width:100%;height:.5rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{z-index:2;max-width:100%;height:100%;color:rgba(var(--bs-body-color-rgb), .65);text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;padding:1rem .75rem;transition:opacity .1s ease-in-out,transform .1s ease-in-out;position:absolute;top:0;left:0;overflow:hidden}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:#0000}.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),:-webkit-any(.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill){padding-top:1.625rem;padding-bottom:.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),:is(.form-floating>.form-control:autofill,.form-floating>.form-control-plaintext:autofill){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem;padding-left:.75rem}.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{transform:scale(.85)translateY(-.5rem)translate(.15rem)}.form-floating>.form-control:-webkit-autofill~label{transform:scale(.85)translateY(-.5rem)translate(.15rem)}.form-floating>textarea:focus~label:after,.form-floating>textarea:not(:placeholder-shown)~label:after{z-index:-1;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius);height:1.5em;position:absolute;inset:1rem .375rem}.form-floating>textarea:disabled~label:after{background-color:var(--bs-secondary-bg)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.input-group{flex-wrap:wrap;align-items:stretch;width:100%;display:flex;position:relative}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{flex:auto;width:1%;min-width:0;position:relative}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{z-index:2;position:relative}.input-group .btn:focus{z-index:5}.input-group-text{color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;display:flex}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{border-radius:var(--bs-border-radius-lg);padding:.5rem 1rem;font-size:1.25rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{border-radius:var(--bs-border-radius-sm);padding:.25rem .5rem;font-size:.875rem}.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,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(-1 * var(--bs-border-width));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{width:100%;color:var(--bs-form-valid-color);margin-top:.25rem;font-size:.875em;display:none}.valid-tooltip{z-index:5;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius);max-width:100%;margin-top:.1rem;padding:.25rem .5rem;font-size:.875rem;display:none;position:absolute;top:100%}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--bs-form-valid-border-color);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.1'/%3e%3c/svg%3e");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);padding-right:calc(1.5em + .75rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), .25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:right calc(.375em + .1875rem) top calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e");background-position:right .75rem center,right 2.25rem center;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem);padding-right:4.125rem}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), .25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(1.5em + 3.75rem)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--bs-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), .25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{width:100%;color:var(--bs-form-invalid-color);margin-top:.25rem;font-size:.875em;display:none}.invalid-tooltip{z-index:5;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius);max-width:100%;margin-top:.1rem;padding:.25rem .5rem;font-size:.875rem;display:none;position:absolute;top:100%}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--bs-form-invalid-border-color);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-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);padding-right:calc(1.5em + .75rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), .25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:right calc(.375em + .1875rem) top calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,right 2.25rem center;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem);padding-right:4.125rem}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), .25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(1.5em + 3.75rem)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--bs-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), .25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x:.75rem;--bs-btn-padding-y:.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 #ffffff26, 0 1px 1px #00000013;--bs-btn-disabled-opacity:.65;--bs-btn-focus-box-shadow:0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);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;vertical-align:middle;cursor:pointer;-webkit-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);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;display:inline-block}@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);box-shadow:var(--bs-btn-focus-box-shadow);outline:0}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);box-shadow:var(--bs-btn-focus-box-shadow);outline:0}.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,.btn-check:checked:focus-visible+.btn{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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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 #00000020;--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:0 0 0 #000;--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:.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y:.25rem;--bs-btn-padding-x:.5rem;--bs-btn-font-size:.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;transition:height .35s;overflow:hidden}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s}@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{vertical-align:.255em;content:"";border:.3em solid #0000;border-top-color:currentColor;border-bottom:0;margin-left:.255em;display:inline-block}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:.5rem;--bs-dropdown-spacer:.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:.5rem;--bs-dropdown-box-shadow:var(--bs-box-shadow);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:.5rem;z-index:var(--bs-dropdown-zindex);min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;background-color:var(--bs-dropdown-bg);border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius);background-clip:padding-box;margin:0;list-style:none;display:none;position:absolute}.dropdown-menu[data-bs-popper]{margin-top:var(--bs-dropdown-spacer);top:100%;left:0}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{left:auto;right:0}@media (width>=576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{left:auto;right:0}}@media (width>=768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{left:auto;right:0}}@media (width>=992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{left:auto;right:0}}@media (width>=1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{left:auto;right:0}}@media (width>=1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{left:auto;right:0}}.dropup .dropdown-menu[data-bs-popper]{margin-top:0;margin-bottom:var(--bs-dropdown-spacer);top:auto;bottom:100%}.dropup .dropdown-toggle:after{vertical-align:.255em;content:"";border:.3em solid #0000;border-top:0;border-bottom-color:currentColor;margin-left:.255em;display:inline-block}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{margin-top:0;margin-left:var(--bs-dropdown-spacer);top:0;left:100%;right:auto}.dropend .dropdown-toggle:after{vertical-align:.255em;content:"";border:.3em solid #0000;border-left-color:currentColor;border-right:0;margin-left:.255em;display:inline-block}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{margin-top:0;margin-right:var(--bs-dropdown-spacer);top:0;left:auto;right:100%}.dropstart .dropdown-toggle:after{vertical-align:.255em;content:"";margin-left:.255em;display:none}.dropstart .dropdown-toggle:before{vertical-align:.255em;content:"";border-top:.3em solid #0000;border-bottom:.3em solid #0000;border-right:.3em solid;margin-right:.255em;display:inline-block}.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;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1;overflow:hidden}.dropdown-item{width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;color:var(--bs-dropdown-link-color);text-align:inherit;white-space:nowrap;border-radius:var(--bs-dropdown-item-border-radius,0);background-color:#0000;border:0;font-weight:400;text-decoration:none;display:block}.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);background-color:var(--bs-dropdown-link-active-bg);text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:#0000}.dropdown-menu.show{display:block}.dropdown-header{padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);color:var(--bs-dropdown-header-color);white-space:nowrap;margin-bottom:0;font-size:.875rem;display:block}.dropdown-item-text{padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color);display:block}.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:#ffffff26;--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{vertical-align:middle;display:inline-flex;position:relative}.btn-group>.btn,.btn-group-vertical>.btn{flex:auto;position:relative}.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{flex-wrap:wrap;justify-content:flex-start;display:flex}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(-1 * var(--bs-border-width))}.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-left:.5625rem;padding-right:.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-left:.375rem;padding-right:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{flex-direction:column;justify-content:center;align-items:flex-start}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(-1 * var(--bs-border-width))}.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:nth-child(n+3),.btn-group-vertical>:not(.btn-check)+.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);flex-wrap:wrap;margin-bottom:0;padding-left:0;list-style:none;display:flex}.nav-link{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);background:0 0;border:0;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out;display:block}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{border-bottom:var(--bs-nav-underline-border-width) solid transparent;padding-left:0;padding-right:0}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentColor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentColor;font-weight:700}.nav-fill>.nav-link,.nav-fill .nav-item{text-align:center;flex:auto}.nav-justified>.nav-link,.nav-justified .nav-item{text-align:center;flex-grow:1;flex-basis:0}.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:.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb), .65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb), .8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb), .3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y:.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x:.5rem;--bs-navbar-toggler-padding-y:.25rem;--bs-navbar-toggler-padding-x:.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb), .15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:.25rem;--bs-navbar-toggler-transition:box-shadow .15s ease-in-out;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);flex-wrap:wrap;justify-content:space-between;align-items:center;display:flex;position:relative}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{flex-wrap:inherit;justify-content:space-between;align-items:center;display:flex}.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);white-space:nowrap;text-decoration:none}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);flex-direction:column;margin-bottom:0;padding-left:0;list-style:none;display:flex}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{color:var(--bs-navbar-color);padding-top:.5rem;padding-bottom:.5rem}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-grow:1;flex-basis:100%;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);color:var(--bs-navbar-color);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);background-color:#0000;line-height:1}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width);outline:0;text-decoration:none}.navbar-toggler-icon{vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-position:50%;background-repeat:no-repeat;background-size:100%;width:1.5em;height:1.5em;display:inline-block}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (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{flex-basis:auto;display:flex!important}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{z-index:auto;flex-grow:1;transition:none;position:static;visibility:visible!important;background-color:#0000!important;border:0!important;width:auto!important;height:auto!important;transform:none!important}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible}}@media (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{flex-basis:auto;display:flex!important}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{z-index:auto;flex-grow:1;transition:none;position:static;visibility:visible!important;background-color:#0000!important;border:0!important;width:auto!important;height:auto!important;transform:none!important}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible}}@media (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{flex-basis:auto;display:flex!important}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{z-index:auto;flex-grow:1;transition:none;position:static;visibility:visible!important;background-color:#0000!important;border:0!important;width:auto!important;height:auto!important;transform:none!important}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible}}@media (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{flex-basis:auto;display:flex!important}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{z-index:auto;flex-grow:1;transition:none;position:static;visibility:visible!important;background-color:#0000!important;border:0!important;width:auto!important;height:auto!important;transform:none!important}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible}}@media (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{flex-basis:auto;display:flex!important}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{z-index:auto;flex-grow:1;transition:none;position:static;visibility:visible!important;background-color:#0000!important;border:0!important;width:auto!important;height:auto!important;transform:none!important}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{flex-grow:0;padding:0;display:flex;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{flex-basis:auto;display:flex!important}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{z-index:auto;flex-grow:1;transition:none;position:static;visibility:visible!important;background-color:#0000!important;border:0!important;width:auto!important;height:auto!important;transform:none!important}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color:#ffffff8c;--bs-navbar-hover-color:#ffffffbf;--bs-navbar-disabled-color:#ffffff40;--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:#ffffff1a;--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")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.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:.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y:.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:.75rem;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius);background-clip:border-box;flex-direction:column;display:flex;position:relative}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius);border-top-width:0}.card>.list-group:last-child{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color);flex:auto}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));color:var(--bs-card-subtitle-color);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);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);margin-bottom:0}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius);position:absolute;inset:0}.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 (width>=576px){.card-group{flex-flow:wrap;display:flex}.card-group>.card{flex:1 0 0;margin-bottom:0}.card-group>.card+.card{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child)>.card-img-top,.card-group>.card:not(:last-child)>.card-header{border-top-right-radius:0}.card-group>.card:not(:last-child)>.card-img-bottom,.card-group>.card:not(:last-child)>.card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child)>.card-img-top,.card-group>.card:not(:first-child)>.card-header{border-top-left-radius:0}.card-group>.card:not(:first-child)>.card-img-bottom,.card-group>.card:not(:first-child)>.card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, border-radius .15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform .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='none' stroke='rgb%285.2, 44, 101.2%29' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e");--bs-accordion-btn-focus-box-shadow:0 0 0 .25rem #0d6efd40;--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);overflow-anchor:none;transition:var(--bs-accordion-transition);border:0;border-radius:0;align-items:center;font-size:1rem;display:flex;position:relative}@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{width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);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);flex-shrink:0;margin-left:auto}@media (prefers-reduced-motion:reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;box-shadow:var(--bs-accordion-btn-focus-box-shadow);outline:0}.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-header .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-header .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-item{border-left:0;border-right: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-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28109.8, 168, 253.8%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28109.8, 168, 253.8%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);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);background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius);flex-wrap:wrap;list-style:none;display:flex}.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,"/") }.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:.75rem;--bs-pagination-padding-y:.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 .25rem #0d6efd40;--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);padding-left:0;list-style:none;display:flex}.page-link{padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;display:block;position:relative}@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);box-shadow:var(--bs-pagination-focus-box-shadow);outline:0}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(-1 * var(--bs-border-width))}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x:.5rem;--bs-pagination-padding-y:.25rem;--bs-pagination-font-size:.875rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x:.65em;--bs-badge-padding-y:.35em;--bs-badge-font-size:.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);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);color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius);line-height:1;display:inline-block}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);--bs-alert-link-color:inherit;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);position:relative}.alert-heading{color:inherit}.alert-link{color:var(--bs-alert-link-color);font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{z-index:2;padding:1.25rem 1rem;position:absolute;top:0;right:0}.alert-primary{--bs-alert-color:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color:var(--bs-success-text-emphasis);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color:var(--bs-info-text-emphasis);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color:var(--bs-warning-text-emphasis);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:var(--bs-progress-height)}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width .6s ease;height:var(--bs-progress-height);font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius);display:flex;overflow:hidden}.progress-bar{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);flex-direction:column;justify-content:center;display:flex;overflow:hidden}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,#ffffff26 25%,#0000 25% 50%,#ffffff26 50% 75%,#0000 75%,#0000);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;border-radius:var(--bs-list-group-border-radius);flex-direction:column;margin-bottom:0;padding-left:0;display:flex}.list-group-numbered{counter-reset:section;list-style-type:none}.list-group-numbered>.list-group-item:before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item{padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);text-decoration:none;display:block;position:relative}.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-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:not(.active):hover,.list-group-item-action:not(.active):focus{z-index:1;color:var(--bs-list-group-action-hover-color);background-color:var(--bs-list-group-action-hover-bg);text-decoration:none}.list-group-item-action:not(.active):active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.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 (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 (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 (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 (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 (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{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e");--bs-btn-close-opacity:.5;--bs-btn-close-hover-opacity:.75;--bs-btn-close-focus-shadow:0 0 0 .25rem #0d6efd40;--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:.25;box-sizing:content-box;width:1em;height:1em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;filter:var(--bs-btn-close-filter);opacity:var(--bs-btn-close-opacity);border:0;border-radius:.375rem;padding:.25em}.btn-close:hover{color:var(--bs-btn-close-color);opacity:var(--bs-btn-close-hover-opacity);text-decoration:none}.btn-close:focus{box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity);outline:0}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{--bs-btn-close-filter:invert(1) grayscale(100%) brightness(200%)}:root,[data-bs-theme=light]{--bs-btn-close-filter: }[data-bs-theme=dark]{--bs-btn-close-filter:invert(1) grayscale(100%) brightness(200%)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:.75rem;--bs-toast-padding-y:.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb), .85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb), .85);--bs-toast-header-border-color:var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);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);background-clip:padding-box}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;z-index:var(--bs-toast-zindex);pointer-events:none;width:max-content;max-width:100%;position:absolute}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);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));background-clip:padding-box;align-items:center;display:flex}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:.5rem;--bs-modal-color:var(--bs-body-color);--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:var(--bs-box-shadow-sm);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);z-index:var(--bs-modal-zindex);outline:0;width:100%;height:100%;display:none;position:fixed;top:0;left:0;overflow:hidden auto}.modal-dialog{width:auto;margin:var(--bs-modal-margin);pointer-events:none;position:relative}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-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{min-height:calc(100% - var(--bs-modal-margin) * 2);align-items:center;display:flex}.modal-content{width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);background-clip:padding-box;outline:0;flex-direction:column;display:flex;position:relative}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:.5;z-index:var(--bs-backdrop-zindex);background-color:var(--bs-backdrop-bg);width:100vw;height:100vh;position:fixed;top:0;left:0}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{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);flex-shrink:0;align-items:center;display:flex}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin-top:calc(-.5 * var(--bs-modal-header-padding-y));margin-right:calc(-.5 * var(--bs-modal-header-padding-x));margin-bottom:calc(-.5 * var(--bs-modal-header-padding-y));margin-left:auto}.modal-title{line-height:var(--bs-modal-title-line-height);margin-bottom:0}.modal-body{padding:var(--bs-modal-padding);flex:auto;position:relative}.modal-footer{padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius);flex-wrap:wrap;flex-shrink:0;justify-content:flex-end;align-items:center;display:flex}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (width>=576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-left:auto;margin-right:auto}.modal-sm{--bs-modal-width:300px}}@media (width>=992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (width>=1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (width<=575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{border:0;border-radius:0;height:100%}.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 (width<=767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{border:0;border-radius:0;height:100%}.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 (width<=991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{border:0;border-radius:0;height:100%}.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 (width<=1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{border:0;border-radius:0;height:100%}.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 (width<=1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:.5rem;--bs-tooltip-padding-y:.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:.9;--bs-tooltip-arrow-width:.8rem;--bs-tooltip-arrow-height:.4rem;z-index:var(--bs-tooltip-zindex);margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);text-align:left;text-align:start;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-style:normal;font-weight:400;line-height:1.5;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0;text-decoration:none;display:block}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height);display:block}.tooltip .tooltip-arrow:before{content:"";border-style:solid;border-color:#0000;position:absolute}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before{border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg);top:-1px}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before{border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg);right:-1px}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before{border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg);bottom:-1px}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before{border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg);left:-1px}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:.875rem;--bs-popover-bg:var(--bs-body-bg);--bs-popover-border-width:var(--bs-border-width);--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow:var(--bs-box-shadow);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color:inherit;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);text-align:left;text-align:start;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-style:normal;font-weight:400;line-height:1.5;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius);background-clip:padding-box;text-decoration:none;display:block}.popover .popover-arrow{width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height);display:block}.popover .popover-arrow:before,.popover .popover-arrow:after{content:"";border:0 solid #0000;display:block;position:absolute}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-top>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before{border-top-color:var(--bs-popover-arrow-border);bottom:0}.bs-popover-top>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-end>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before{border-right-color:var(--bs-popover-arrow-border);left:0}.bs-popover-end>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before{border-bottom-color:var(--bs-popover-arrow-border);top:0}.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{width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg);display:block;position:absolute;top:0;left:50%}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before{border-left-color:var(--bs-popover-arrow-border);right:0}.bs-popover-start>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);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);margin-bottom:0}.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{width:100%;position:relative;overflow:hidden}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{float:left;backface-visibility:hidden;width:100%;margin-right:-100%;transition:transform .6s ease-in-out;display:none;position:relative}@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:translate(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translate(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{z-index:1;color:#fff;text-align:center;width:15%;filter:var(--bs-carousel-control-icon-filter);opacity:.5;background:0 0;border:0;justify-content:center;align-items:center;padding:0;transition:opacity .15s;display:flex;position:absolute;top:0;bottom:0}@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;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{background-position:50%;background-repeat:no-repeat;background-size:100% 100%;width:2rem;height:2rem;display:inline-block}.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 0'/%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-.708'/%3e%3c/svg%3e")}.carousel-indicators{z-index:2;justify-content:center;margin-bottom:1rem;margin-left:15%;margin-right:15%;padding:0;display:flex;position:absolute;bottom:0;left:0;right:0}.carousel-indicators [data-bs-target]{box-sizing:content-box;text-indent:-999px;cursor:pointer;background-color:var(--bs-carousel-indicator-active-bg);opacity:.5;background-clip:padding-box;border:10px solid #0000;border-left:0;border-right:0;flex:0 auto;width:30px;height:3px;margin-left:3px;margin-right:3px;padding:0;transition:opacity .6s}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{color:var(--bs-carousel-caption-color);text-align:center;padding-top:1.25rem;padding-bottom:1.25rem;position:absolute;bottom:1.25rem;left:15%;right:15%}.carousel-dark{--bs-carousel-indicator-active-bg:#000;--bs-carousel-caption-color:#000;--bs-carousel-control-icon-filter:invert(1) grayscale(100)}:root,[data-bs-theme=light]{--bs-carousel-indicator-active-bg:#fff;--bs-carousel-caption-color:#fff;--bs-carousel-control-icon-filter: }[data-bs-theme=dark]{--bs-carousel-indicator-active-bg:#000;--bs-carousel-caption-color:#000;--bs-carousel-control-icon-filter:invert(1) grayscale(100)}.spinner-grow,.spinner-border{width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);border-radius:50%;flex-shrink:0;display:inline-block}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-.125em;--bs-spinner-border-width:.25em;--bs-spinner-animation-speed:.75s;--bs-spinner-animation-name:spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:#0000}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-.125em;--bs-spinner-animation-speed:.75s;--bs-spinner-animation-name:spinner-grow;opacity:0;background-color:currentColor}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:var(--bs-box-shadow-sm);--bs-offcanvas-transition:transform .3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@media (width<=575.98px){.offcanvas-sm{z-index:var(--bs-offcanvas-zindex);max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);transition:var(--bs-offcanvas-transition);background-clip:padding-box;outline:0;flex-direction:column;display:flex;position:fixed;bottom:0}}@media (width<=575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (width<=575.98px){.offcanvas-sm.offcanvas-start{width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;left:0;transform:translate(-100%)}.offcanvas-sm.offcanvas-end{width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;right:0;transform:translate(100%)}.offcanvas-sm.offcanvas-top{height:var(--bs-offcanvas-height);border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;top:0;left:0;right:0;transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{height:var(--bs-offcanvas-height);border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;left:0;right:0;transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media (width>=576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:#0000!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible;background-color:#0000!important}}@media (width<=767.98px){.offcanvas-md{z-index:var(--bs-offcanvas-zindex);max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);transition:var(--bs-offcanvas-transition);background-clip:padding-box;outline:0;flex-direction:column;display:flex;position:fixed;bottom:0}}@media (width<=767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (width<=767.98px){.offcanvas-md.offcanvas-start{width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;left:0;transform:translate(-100%)}.offcanvas-md.offcanvas-end{width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;right:0;transform:translate(100%)}.offcanvas-md.offcanvas-top{height:var(--bs-offcanvas-height);border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;top:0;left:0;right:0;transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{height:var(--bs-offcanvas-height);border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;left:0;right:0;transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media (width>=768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:#0000!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible;background-color:#0000!important}}@media (width<=991.98px){.offcanvas-lg{z-index:var(--bs-offcanvas-zindex);max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);transition:var(--bs-offcanvas-transition);background-clip:padding-box;outline:0;flex-direction:column;display:flex;position:fixed;bottom:0}}@media (width<=991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (width<=991.98px){.offcanvas-lg.offcanvas-start{width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;left:0;transform:translate(-100%)}.offcanvas-lg.offcanvas-end{width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;right:0;transform:translate(100%)}.offcanvas-lg.offcanvas-top{height:var(--bs-offcanvas-height);border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;top:0;left:0;right:0;transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{height:var(--bs-offcanvas-height);border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;left:0;right:0;transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media (width>=992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:#0000!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible;background-color:#0000!important}}@media (width<=1199.98px){.offcanvas-xl{z-index:var(--bs-offcanvas-zindex);max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);transition:var(--bs-offcanvas-transition);background-clip:padding-box;outline:0;flex-direction:column;display:flex;position:fixed;bottom:0}}@media (width<=1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (width<=1199.98px){.offcanvas-xl.offcanvas-start{width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;left:0;transform:translate(-100%)}.offcanvas-xl.offcanvas-end{width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;right:0;transform:translate(100%)}.offcanvas-xl.offcanvas-top{height:var(--bs-offcanvas-height);border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;top:0;left:0;right:0;transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{height:var(--bs-offcanvas-height);border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;left:0;right:0;transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media (width>=1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:#0000!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible;background-color:#0000!important}}@media (width<=1399.98px){.offcanvas-xxl{z-index:var(--bs-offcanvas-zindex);max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);transition:var(--bs-offcanvas-transition);background-clip:padding-box;outline:0;flex-direction:column;display:flex;position:fixed;bottom:0}}@media (width<=1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (width<=1399.98px){.offcanvas-xxl.offcanvas-start{width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;left:0;transform:translate(-100%)}.offcanvas-xxl.offcanvas-end{width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;right:0;transform:translate(100%)}.offcanvas-xxl.offcanvas-top{height:var(--bs-offcanvas-height);border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;top:0;left:0;right:0;transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{height:var(--bs-offcanvas-height);border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;left:0;right:0;transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media (width>=1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:#0000!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{flex-grow:0;padding:0;display:flex;overflow-y:visible;background-color:#0000!important}}.offcanvas{z-index:var(--bs-offcanvas-zindex);max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);transition:var(--bs-offcanvas-transition);background-clip:padding-box;outline:0;flex-direction:column;display:flex;position:fixed;bottom:0}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;left:0;transform:translate(-100%)}.offcanvas.offcanvas-end{width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;right:0;transform:translate(100%)}.offcanvas.offcanvas-top{height:var(--bs-offcanvas-height);border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;top:0;left:0;right:0;transform:translateY(-100%)}.offcanvas.offcanvas-bottom{height:var(--bs-offcanvas-height);border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);max-height:100%;left:0;right:0;transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{z-index:1040;background-color:#000;width:100vw;height:100vh;position:fixed;top:0;left:0}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);align-items:center;display:flex}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y));margin-left:auto}.offcanvas-title{line-height:var(--bs-offcanvas-title-line-height);margin-bottom:0}.offcanvas-body{padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);flex-grow:1;overflow-y:auto}.placeholder{vertical-align:middle;cursor:wait;opacity:.5;background-color:currentColor;min-height:1em;display:inline-block}.placeholder.btn:before{content:"";display:inline-block}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:2s ease-in-out infinite placeholder-glow}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{animation:2s linear infinite placeholder-wave;-webkit-mask-image:linear-gradient(130deg,#000 55%,#000c 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,#000c 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%}@keyframes placeholder-wave{to{-webkit-mask-position:-200% 0;mask-position:-200% 0}}.clearfix:after{clear:both;content:"";display:block}.text-bg-primary{color:#fff!important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity,1))!important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity,1))!important}.link-primary:hover,.link-primary:focus{color:RGBA(10, 88, 202, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(10, 88, 202, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(10, 88, 202, var(--bs-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity,1))!important}.link-secondary:hover,.link-secondary:focus{color:RGBA(86, 94, 100, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(86, 94, 100, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(86, 94, 100, var(--bs-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity,1))!important}.link-success:hover,.link-success:focus{color:RGBA(20, 108, 67, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(20, 108, 67, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(20, 108, 67, var(--bs-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity,1))!important}.link-info:hover,.link-info:focus{color:RGBA(61, 213, 243, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(61, 213, 243, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(61, 213, 243, var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity,1))!important}.link-warning:hover,.link-warning:focus{color:RGBA(255, 205, 57, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(255, 205, 57, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(255, 205, 57, var(--bs-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity,1))!important}.link-danger:hover,.link-danger:focus{color:RGBA(176, 42, 55, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(176, 42, 55, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(176, 42, 55, var(--bs-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity,1))!important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity,1))!important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(26, 30, 33, var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(26, 30, 33, var(--bs-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity,1))!important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity,.75))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity,.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity,.75))!important}.focus-ring:focus{box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);outline:0}.icon-link{-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity,.5));text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity,.5));text-underline-offset:.25em;backface-visibility:hidden;align-items:center;gap:.375rem;display:inline-flex}.icon-link>.bi{fill:currentColor;flex-shrink:0;width:1em;height:1em;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform,translate3d(.25em, 0, 0))}.ratio{width:100%;position:relative}.ratio:before{padding-top:var(--bs-aspect-ratio);content:"";display:block}.ratio>*{width:100%;height:100%;position:absolute;top:0;left:0}.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.8571%}.fixed-top{z-index:1030;position:fixed;top:0;left:0;right:0}.fixed-bottom{z-index:1030;position:fixed;bottom:0;left:0;right:0}.sticky-top{z-index:1020;position:sticky;top:0}.sticky-bottom{z-index:1020;position:sticky;bottom:0}@media (width>=576px){.sticky-sm-top{z-index:1020;position:sticky;top:0}.sticky-sm-bottom{z-index:1020;position:sticky;bottom:0}}@media (width>=768px){.sticky-md-top{z-index:1020;position:sticky;top:0}.sticky-md-bottom{z-index:1020;position:sticky;bottom:0}}@media (width>=992px){.sticky-lg-top{z-index:1020;position:sticky;top:0}.sticky-lg-bottom{z-index:1020;position:sticky;bottom:0}}@media (width>=1200px){.sticky-xl-top{z-index:1020;position:sticky;top:0}.sticky-xl-bottom{z-index:1020;position:sticky;bottom:0}}@media (width>=1400px){.sticky-xxl-top{z-index:1020;position:sticky;top:0}.sticky-xxl-bottom{z-index:1020;position:sticky;bottom:0}}.hstack{flex-direction:row;align-self:stretch;align-items:center;display:flex}.vstack{flex-direction:column;flex:auto;align-self:stretch;display:flex}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){clip:rect(0, 0, 0, 0)!important;white-space:nowrap!important;border:0!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;overflow:hidden!important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute!important}.visually-hidden *,.visually-hidden-focusable:not(:focus):not(:focus-within) *{overflow:hidden!important}.stretched-link:after{z-index:1;content:"";position:absolute;inset:0}.text-truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.vr{width:var(--bs-border-width);opacity:.25;background-color:currentColor;align-self:stretch;min-height:1em;display:inline-block}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{object-fit:contain!important}.object-fit-cover{object-fit:cover!important}.object-fit-fill{object-fit:fill!important}.object-fit-scale{object-fit:scale-down!important}.object-fit-none{object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:var(--bs-box-shadow)!important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--bs-focus-ring-color:rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color:rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color:rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color:rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color:rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color:rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color:rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color:rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translate(-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-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--bs-border-opacity:.1}.border-opacity-25{--bs-border-opacity:.25}.border-opacity-50{--bs-border-opacity:.5}.border-opacity-75{--bs-border-opacity:.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{column-gap:0!important}.column-gap-1{column-gap:.25rem!important}.column-gap-2{column-gap:.5rem!important}.column-gap-3{column-gap:1rem!important}.column-gap-4{column-gap:1.5rem!important}.column-gap-5{column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:#00000080!important}.text-white-50{--bs-text-opacity:1;color:#ffffff80!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:.25}.text-opacity-50{--bs-text-opacity:.5}.text-opacity-75{--bs-text-opacity:.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10,.link-opacity-10-hover:hover{--bs-link-opacity:.1}.link-opacity-25,.link-opacity-25-hover:hover{--bs-link-opacity:.25}.link-opacity-50,.link-opacity-50-hover:hover{--bs-link-opacity:.5}.link-opacity-75,.link-opacity-75-hover:hover{--bs-link-opacity:.75}.link-opacity-100,.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-offset-1,.link-offset-1-hover:hover{text-underline-offset:.125em!important}.link-offset-2,.link-offset-2-hover:hover{text-underline-offset:.25em!important}.link-offset-3,.link-offset-3-hover:hover{text-underline-offset:.375em!important}.link-underline-primary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity))!important}.link-underline-info{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity,1))!important;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity,1))!important}.link-underline-opacity-0,.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10,.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:.1}.link-underline-opacity-25,.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:.25}.link-underline-opacity-50,.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:.5}.link-underline-opacity-75,.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:.75}.link-underline-opacity-100,.link-underline-opacity-100-hover:hover{--bs-link-underline-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:#0000!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:.1}.bg-opacity-25{--bs-bg-opacity:.25}.bg-opacity-50{--bs-bg-opacity:.5}.bg-opacity-75{--bs-bg-opacity:.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-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-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-top-left-radius:0!important;border-bottom-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-top-left-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (width>=576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{object-fit:contain!important}.object-fit-sm-cover{object-fit:cover!important}.object-fit-sm-fill{object-fit:fill!important}.object-fit-sm-scale{object-fit:scale-down!important}.object-fit-sm-none{object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{column-gap:0!important}.column-gap-sm-1{column-gap:.25rem!important}.column-gap-sm-2{column-gap:.5rem!important}.column-gap-sm-3{column-gap:1rem!important}.column-gap-sm-4{column-gap:1.5rem!important}.column-gap-sm-5{column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (width>=768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{object-fit:contain!important}.object-fit-md-cover{object-fit:cover!important}.object-fit-md-fill{object-fit:fill!important}.object-fit-md-scale{object-fit:scale-down!important}.object-fit-md-none{object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{column-gap:0!important}.column-gap-md-1{column-gap:.25rem!important}.column-gap-md-2{column-gap:.5rem!important}.column-gap-md-3{column-gap:1rem!important}.column-gap-md-4{column-gap:1.5rem!important}.column-gap-md-5{column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (width>=992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{object-fit:contain!important}.object-fit-lg-cover{object-fit:cover!important}.object-fit-lg-fill{object-fit:fill!important}.object-fit-lg-scale{object-fit:scale-down!important}.object-fit-lg-none{object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{column-gap:0!important}.column-gap-lg-1{column-gap:.25rem!important}.column-gap-lg-2{column-gap:.5rem!important}.column-gap-lg-3{column-gap:1rem!important}.column-gap-lg-4{column-gap:1.5rem!important}.column-gap-lg-5{column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (width>=1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{object-fit:contain!important}.object-fit-xl-cover{object-fit:cover!important}.object-fit-xl-fill{object-fit:fill!important}.object-fit-xl-scale{object-fit:scale-down!important}.object-fit-xl-none{object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{column-gap:0!important}.column-gap-xl-1{column-gap:.25rem!important}.column-gap-xl-2{column-gap:.5rem!important}.column-gap-xl-3{column-gap:1rem!important}.column-gap-xl-4{column-gap:1.5rem!important}.column-gap-xl-5{column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (width>=1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{object-fit:contain!important}.object-fit-xxl-cover{object-fit:cover!important}.object-fit-xxl-fill{object-fit:fill!important}.object-fit-xxl-scale{object-fit:scale-down!important}.object-fit-xxl-none{object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{column-gap:0!important}.column-gap-xxl-1{column-gap:.25rem!important}.column-gap-xxl-2{column-gap:.5rem!important}.column-gap-xxl-3{column-gap:1rem!important}.column-gap-xxl-4{column-gap:1.5rem!important}.column-gap-xxl-5{column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (width>=1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}html[data-theme=light]{--bg:#fbf9f4;--surface:#fff;--surface-2:#f3efe6;--border:#e3ddcf;--border-soft:#ebe6da;--text:#0b0b0b;--text-muted:#5b564d;--text-dim:#8a8478;--brand-red:#c71f38;--amber:#c71f38;--teal:#a33c4b;--periwinkle:#4a463e;--rose:#c97c89;--sage:#8c1729;--amber-dim:#c71f381f;--teal-dim:#a33c4b1f;--nav-bg:#fbf9f4db;--on-accent:#fbf6f0}html[data-theme=dark]{--bg:#0b0b0b;--surface:#161616;--surface-2:#1e1e1e;--border:#2c2c2c;--border-soft:#232323;--text:#f1eee8;--text-muted:#9a948d;--text-dim:#66605a;--brand-red:#c71f38;--amber:#da3550;--teal:#e8637a;--periwinkle:#5c5854;--rose:#f0a9b6;--sage:#8c1729;--amber-dim:#da355029;--teal-dim:#e8637a29;--nav-bg:#0b0b0bdb}html{background:var(--bg);scroll-behavior:smooth;--maxw:1180px;--radius:12px;--mono:"Space Grotesk", sans-serif;--sans:"Barlow", -apple-system, sans-serif;transition:background .2s}body{background:var(--bg);color:var(--text);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.6;transition:background .2s,color .2s}*{box-sizing:border-box;transition:background-color .2s,border-color .2s,color .2s}a{color:inherit;text-decoration:none}img{max-width:100%;display:block}.wrap{max-width:var(--maxw);margin:0 auto;padding:0}.eyebrow{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--teal);align-items:center;gap:8px;font-size:12px;display:inline-flex}.eyebrow:before{content:"";background:var(--teal);width:6px;height:6px;box-shadow:0 0 0 3px var(--teal-dim);border-radius:50%}h1,h2,h3,h4{font-family:var(--mono);color:var(--text);letter-spacing:-.01em;margin:0;font-weight:600}p{color:var(--text-muted);margin:0}section{padding:88px 0}.section-head{max-width:640px;margin-bottom:48px}.section-head h2{margin-top:14px;font-size:30px}.section-head p{margin-top:14px;font-size:16.5px}header{z-index:50;background:var(--nav-bg);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--border-soft);position:sticky;top:0}.logo{align-items:center;display:flex}.logo-full{flex-shrink:0;width:auto;height:26px}.navbar{min-height:72px;padding-top:0;padding-bottom:0}.navbar-nav .nav-link{color:var(--text-muted);white-space:nowrap;font-size:14.5px;transition:color .15s}.navbar-nav .nav-link:hover{color:var(--text)}@media (width>=992px){.navbar-nav{gap:30px}.navbar-nav .nav-link{padding-left:0;padding-right:0}}.nav-cta{font-family:var(--mono);border:1px solid var(--amber);border-radius:999px;font-size:13.5px;font-weight:500;transition:background .15s,color .15s;color:var(--amber)!important;padding:9px 18px!important}.nav-cta:hover{background:var(--amber);color:var(--on-accent)!important}.navbar-toggler{border:none;padding:8px}.navbar-toggler:focus{box-shadow:none}html[data-theme=light] .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(11,11,11,1)' stroke-width='2' stroke-linecap='round' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}html[data-theme=dark] .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(241,238,232,1)' stroke-width='2' stroke-linecap='round' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}@media (width<=991.98px){:is(header:has(.navbar-collapse.show),header:has(.navbar-collapse.collapsing)){background:var(--bg);-webkit-backdrop-filter:none;backdrop-filter:none}.navbar-collapse{background:var(--bg);border-top:1px solid var(--border-soft);margin:0 -28px;padding:0 28px}.navbar-nav{padding:10px 0 20px}.navbar-nav .nav-link{border-bottom:1px solid var(--border-soft);padding:14px 0;font-size:16px}.navbar-nav .nav-cta{text-align:center;border:1px solid var(--amber);border-radius:999px;width:100%;margin-top:16px;padding:12px 18px;font-size:14.5px;transition:background .15s,color .15s;display:block;color:var(--amber)!important}}.theme-toggle{border:1px solid var(--border);width:38px;height:38px;color:var(--text-muted);cursor:pointer;background:0 0;border-radius:9px;flex-shrink:0;justify-content:center;align-items:center;transition:border-color .15s,color .15s;display:flex}.theme-toggle:hover{border-color:var(--text-muted);color:var(--text)}.theme-toggle svg{width:18px;height:18px}.theme-toggle .icon-moon,html[data-theme=light] .theme-toggle .icon-sun{display:none}html[data-theme=light] .theme-toggle .icon-moon{display:block}.btn{font-family:var(--mono);border:1px solid var(--border);white-space:nowrap;border-radius:8px;align-items:center;gap:8px;padding:11px 20px;font-size:13.5px;font-weight:500;transition:border-color .15s,background .15s,transform .15s;display:inline-flex}.btn:hover{transform:translateY(-1px)}.btn svg{width:15px;height:15px}.btn-primary{background:var(--amber);color:var(--on-accent);border-color:var(--amber);font-weight:600}.btn-primary:hover{background:var(--amber);box-shadow:0 6px 20px var(--amber-dim)}.btn-ghost{color:var(--text)}.btn-ghost:hover{border-color:var(--text-muted)}.btn-sm{border-radius:7px;padding:8px 14px;font-size:12.5px}.hero{padding:76px 0 40px}.hero h1{letter-spacing:-.02em;margin-top:18px;font-size:44px;line-height:1.15}.hero p.sub{max-width:520px;color:var(--text-muted);margin-top:20px;font-size:18px}.hero-grid{grid-template-columns:1.05fr .95fr;align-items:center;gap:64px;display:grid}.hero-ctas{flex-wrap:wrap;gap:14px;margin-top:32px;display:flex}.hero-stack-note{font-family:var(--mono);color:var(--text-dim);flex-wrap:wrap;gap:18px;margin-top:34px;font-size:12.5px;display:flex}.hero-stack-note span{color:var(--text-muted)}.pipeline{background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:26px 26px 30px;position:relative}.pipeline-label{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text-dim);justify-content:space-between;margin-bottom:18px;font-size:11px;display:flex}.pipeline-track{padding-left:28px;position:relative}.pipeline-track:before{content:"";background:linear-gradient(180deg, var(--sage), var(--brand-red));opacity:.5;width:2px;position:absolute;top:10px;bottom:10px;left:9px}.pl-step{background:var(--surface-2);border:1px solid var(--border-soft);border-radius:9px;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px;padding:13px 16px;display:flex;position:relative}.pl-step:last-child{margin-bottom:0}.pl-step:before{content:"";background:var(--bg);border:2px solid var(--teal);border-radius:50%;width:9px;height:9px;position:absolute;top:50%;left:-23px;transform:translateY(-50%)}.pl-step .name{font-family:var(--mono);color:var(--text);font-size:13.5px;font-weight:500}.pl-step .tag{font-family:var(--mono);color:var(--text-dim);font-size:10.5px}.pl-packet{background:var(--brand-red);border-radius:50%;width:14px;height:14px;animation:5s ease-in-out infinite travel;position:absolute;left:2px;box-shadow:0 0 12px 2px #c71f3838}@keyframes travel{0%{opacity:0;top:8px}6%{opacity:1}46%{opacity:1;top:calc(100% - 22px)}50%{opacity:0}50.01%{top:8px}56%{opacity:1}96%{opacity:1;top:calc(100% - 22px)}to{opacity:0;top:calc(100% - 22px)}}@media (prefers-reduced-motion:reduce){.pl-packet{opacity:1;animation:none;top:8px}html{scroll-behavior:auto}}.split{grid-template-columns:1.1fr .9fr;align-items:start;gap:64px;display:grid}.split h2{font-size:28px}.split .lede{color:var(--text-muted);margin-top:16px;font-size:17px;line-height:1.7}.extending{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim);align-items:center;gap:12px;margin-top:26px;font-size:12px;display:flex}.extending .extending-logo{text-transform:none;align-items:center;display:flex}.extending .extending-logo img{width:auto;height:36px;display:block}.extending .lockup{font-family:var(--mono);color:var(--text);text-transform:none;letter-spacing:0;font-size:15px;font-weight:600}.extending .lockup .x{color:var(--text-dim);margin:0 6px;font-weight:400}.traits{grid-template-columns:1fr 1fr;gap:14px;display:grid}.trait{background:var(--surface);border:1px solid var(--border);text-align:left;border-radius:12px;padding:22px 18px}.trait .icon{margin-bottom:12px}.trait p{font-family:var(--mono);color:var(--text);font-size:13px;font-weight:500;line-height:1.4}.products-grid{grid-template-columns:repeat(3,1fr);gap:18px;display:grid}.card{background:var(--surface);border:1px solid var(--border);border-top:3px solid var(--accent,var(--teal));border-radius:var(--radius);flex-direction:column;height:100%;padding:26px 24px 24px;display:flex}.card .card-top{justify-content:space-between;align-items:flex-start;margin-bottom:14px;display:flex}.card h3{color:var(--text);font-size:20px}.card .kicker{font-family:var(--mono);color:var(--text-dim);letter-spacing:.1em;text-transform:uppercase;margin-bottom:6px;font-size:10.5px;display:block}.card p.desc{flex-grow:1;font-size:14.5px;line-height:1.65}.card .card-btns{flex-wrap:wrap;gap:8px;margin-top:20px;display:flex}.badges{flex-wrap:wrap;gap:5px;margin-bottom:16px;display:flex}.badges img{border-radius:3px;height:19px}.standards-grid{background:var(--border);border:1px solid var(--border);border-radius:var(--radius);grid-template-columns:repeat(3,1fr);gap:1px;display:grid;overflow:hidden}.standard{background:var(--surface);padding:30px 26px}.standard h4{color:var(--text);margin-bottom:10px;font-size:16px}.standard h4 a{color:inherit;border-bottom:1px solid var(--border)}.standard h4 a:hover{color:var(--amber);border-color:var(--amber)}.standard p{font-size:14px;line-height:1.65}.standard .get-started{font-family:var(--mono);color:var(--text-dim);margin-top:14px;font-size:12px}.standard .get-started a{color:var(--teal)}.standard .get-started a:hover{text-decoration:underline}.components-grid{grid-template-columns:1fr 1fr;gap:0 40px;display:grid}details.acc{border-bottom:1px solid var(--border-soft)}details.acc summary{cursor:pointer;font-family:var(--mono);color:var(--text);justify-content:space-between;align-items:center;padding:18px 0;font-size:15px;font-weight:500;list-style:none;display:flex}details.acc summary::-webkit-details-marker{display:none}details.acc summary .chev{color:var(--text-dim);font-size:18px;transition:transform .2s}details.acc[open] summary .chev{color:var(--amber);transform:rotate(45deg)}.acc-body{padding:0 0 20px}.pkg-row{border-top:1px solid var(--border-soft);justify-content:space-between;gap:16px;padding:9px 0;display:flex}.pkg-row:first-child{border-top:none}.pkg-row a{font-family:var(--mono);color:var(--teal);white-space:nowrap;font-size:13.5px}.pkg-row a:hover{text-decoration:underline}.pkg-row .pkg-desc{color:var(--text-muted);text-align:right;font-size:13px}.posts-grid{grid-template-columns:repeat(3,1fr);gap:20px;display:grid}.posts-grid-2-col{grid-template-columns:repeat(2,1fr);gap:20px;display:grid}.post-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px;transition:border-color .15s}.post-card:hover{border-color:var(--text-dim)}.post-card h4{color:var(--text);margin-top:10px;font-size:16.5px;line-height:1.4}.post-card p{margin-top:10px;font-size:13.5px;line-height:1.6}.post-card .read-more{font-family:var(--mono);color:var(--amber);margin-top:14px;margin-left:2px;font-size:12px;display:inline-block}.post-date{font-family:var(--mono);color:var(--text-dim);letter-spacing:.06em;text-transform:uppercase;font-size:11.5px}.about-band{background:var(--surface);border-top:1px solid var(--border-soft);border-bottom:1px solid var(--border-soft)}.about-inner{grid-template-columns:1fr 1.3fr;align-items:center;gap:56px;display:grid}.about-inner h2{margin-top:14px;font-size:26px;line-height:1.3}.about-inner .about-text{font-size:15px;line-height:1.75}.about-inner .about-cta{margin-top:22px}footer{padding:50px 0 40px}.footer-top{border-bottom:1px solid var(--border-soft);flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:30px;padding-bottom:34px;display:flex}.footer-copy{color:var(--text-dim);max-width:460px;font-size:13px;line-height:1.8}.footer-copy a{color:var(--text-muted);border-bottom:1px solid var(--border)}.footer-social{gap:12px;display:flex}.footer-social a{border:1px solid var(--border);width:38px;height:38px;color:var(--text);border-radius:9px;justify-content:center;align-items:center;transition:border-color .15s,color .15s;display:flex}.footer-social a:hover{border-color:var(--teal);color:var(--teal)}.footer-social svg{width:17px;height:17px}.footer-bottom{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;padding-top:24px;display:flex}.footer-bottom .sponsor{font-family:var(--mono);color:var(--text-dim);font-size:12px}.footer-bottom .sponsor a{color:var(--text-muted);border-bottom:1px solid var(--border)}@media (width<=980px){.hero-grid{grid-template-columns:1fr;gap:44px}.hero{padding-top:44px}.split{grid-template-columns:1fr;gap:40px}.products-grid,.standards-grid{grid-template-columns:repeat(2,1fr)}.posts-grid{grid-template-columns:1fr}.about-inner{grid-template-columns:1fr;gap:26px}}@media (width<=700px){.wrap{padding:0 16px}.hero h1{font-size:32px}.products-grid,.standards-grid,.components-grid{grid-template-columns:1fr}section{padding:56px 0}.pkg-row{flex-direction:column;gap:2px}.pkg-row .pkg-desc{text-align:left}}:focus-visible{outline:2px solid var(--amber);outline-offset:2px}.icon{flex-shrink:0;width:18px;height:18px}.icon-lg{width:50px;height:50px}.icon-jetbrains{min-width:100px}[data-theme=light] .icon{filter:none}[data-theme=dark] .icon{filter:invert()}.contact-grid{grid-template-columns:1fr 1fr;gap:18px;display:grid}@media (width<=700px){.contact-grid{grid-template-columns:1fr}}.contact-card{text-align:center;align-items:center}.contact-card svg{width:40px;height:40px;color:var(--teal);margin-bottom:14px}.contact-card .card-btns{justify-content:center}.approach-card{margin-top:18px}.approach-card h3{margin-bottom:10px}.latest-posts{margin-top:48px}.latest-posts .section-head{margin-bottom:24px}.latest-posts .posts-grid{grid-template-columns:repeat(2,1fr)}@media (width<=700px){.latest-posts .posts-grid{grid-template-columns:1fr}}.sidebar{flex-direction:column;gap:34px;display:flex}@media (width<=900px){.sidebar{order:2}}.widget{border-bottom:1px solid var(--border-soft);padding-bottom:28px}.widget:last-child{border-bottom:none;padding-bottom:0}.widget ul{margin:0;padding:0;list-style:none}.widget-title{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim);margin-bottom:16px;font-size:11.5px}.search-form{border:1px solid var(--border);border-radius:8px;display:flex;overflow:hidden}.search-form input{min-width:0;color:var(--text);font-family:var(--sans);background:0 0;border:none;flex:1;padding:10px 12px;font-size:14px}.search-form input:focus{outline:none}.search-form button{background:var(--surface-2);color:var(--text-muted);cursor:pointer;font-family:var(--mono);border:none;padding:0 14px;font-size:12px}.search-form button:hover{color:var(--amber)}.widget-recent ul{flex-direction:column;gap:14px;display:flex}.widget-recent li a{color:var(--text);font-size:14px;line-height:1.4;display:block}.widget-recent li a:hover{color:var(--amber)}.widget-recent li .post-date{font-family:var(--mono);color:var(--text-dim);margin-top:4px;font-size:11px;display:block}.widget-categories li{border-bottom:1px solid var(--border-soft)}.widget-categories li:last-child{border-bottom:none}.widget-categories li.current a{color:var(--amber);font-weight:600}.widget-categories li a{color:var(--text-muted);justify-content:space-between;align-items:center;gap:10px;padding:9px 0;font-size:14px;display:flex}.widget-categories li a:hover{color:var(--text)}.widget-categories .cat-count{min-width:28px;font-family:var(--mono);text-align:center;color:var(--text-dim);background:var(--surface-2);border:1px solid var(--border-soft);border-radius:999px;flex-shrink:0;padding:1px 9px;font-size:11px;display:inline-block}.widget-categories li a:hover .cat-count{color:var(--text)}.widget-more{margin-top:14px}.widget-more a{font-family:var(--mono);color:var(--amber);font-size:12px}.widget-more a:hover{text-decoration:underline}.no-articles{color:var(--text-dim);font-size:13.5px}.widget-connect ul{flex-direction:column;gap:12px;display:flex}.widget-connect li a{color:var(--text-muted);align-items:center;gap:10px;font-size:14px;display:flex}.widget-connect li a:hover{color:var(--text)}.widget-connect li a svg{width:17px;height:17px;color:var(--teal);flex-shrink:0}.widget-approach p{color:var(--text-muted);margin-bottom:12px;font-size:13.5px;line-height:1.7}.widget-approach p:last-child{margin-bottom:0}.breadcrumb-back{font-family:var(--mono);color:var(--text-dim);align-items:center;gap:6px;font-size:13px;display:inline-flex}.breadcrumb-back:hover{color:var(--amber)}.breadcrumb-back svg{width:14px;height:14px}.post-hero{border-bottom:1px solid var(--border-soft);padding:40px 0}.post-hero h1{max-width:820px;margin-top:16px;font-size:38px;line-height:1.2}@media (width<=900px){.post-hero h1{font-size:28px}}.post-meta{font-family:var(--mono);color:var(--text-dim);flex-wrap:wrap;align-items:center;gap:6px 14px;margin-top:22px;font-size:13px;display:flex}.post-meta a{color:var(--text-muted)}.post-meta a:hover{color:var(--amber)}.post-meta .featured-tag{color:var(--brand-red);font-weight:600}.post-body-wrap{padding:52px 0 72px}.post-layout{grid-template-columns:270px 1fr;align-items:start;gap:64px;display:grid}@media (width<=900px){.post-layout{grid-template-columns:1fr;gap:44px}.article{order:1}}.entry{max-width:720px}@media (width<=900px){.entry{max-width:100%}}.entry h2{font-family:var(--mono);color:var(--text);margin-top:48px;margin-bottom:16px;font-size:26px}.entry h2:first-child{margin-top:0}.entry h3{font-family:var(--mono);color:var(--text);margin-top:36px;margin-bottom:14px;font-size:20px}.entry h4{font-family:var(--mono);color:var(--text);margin-top:28px;margin-bottom:12px;font-size:17px}.entry p{color:var(--text-muted);margin-bottom:20px;font-size:16.5px;line-height:1.8}.entry strong{color:var(--text);font-weight:600}.entry a{color:var(--teal);text-decoration:underline;-webkit-text-decoration-color:var(--border);text-decoration-color:var(--border);text-underline-offset:3px}.entry a:hover{color:var(--amber);-webkit-text-decoration-color:var(--amber);text-decoration-color:var(--amber)}.entry ul{margin:0 0 20px;padding-left:0;list-style:none}.entry ul li{color:var(--text-muted);margin-bottom:10px;padding-left:22px;font-size:16px;line-height:1.7;position:relative}.entry ul li:before{content:"";background:var(--amber);border-radius:50%;width:6px;height:6px;position:absolute;top:10px;left:0}.entry figure{margin:28px 0}.entry figure img{border:1px solid var(--border);border-radius:10px;width:100%;height:auto;display:block}.entry .img-row{gap:20px;margin:28px 0;display:flex}@media (width<=900px){.entry .img-row{flex-direction:column}}.entry .img-row figure{flex:1;margin:0}.entry .img-row img{width:100%}.entry code{font-family:var(--mono);background:var(--surface-2);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-size:.9em}.entry pre{font-family:var(--mono);background:var(--surface-2);border:1px solid var(--border);color:var(--text);border-radius:8px;margin:0 0 20px;padding:16px 18px;font-size:14px;line-height:1.6;overflow-x:auto}.entry pre code{font-size:inherit;background:0 0;border:none;padding:0}.obsolete-warning{border-radius:var(--radius);border:1px solid var(--brand-red);border-left:4px solid var(--brand-red);background:#c71f381f;margin:0 0 40px;padding:20px 24px}.obsolete-warning p{color:var(--text);margin:0;font-size:14.5px;line-height:1.7}.obsolete-warning strong{color:var(--brand-red)}.obsolete-warning a{color:var(--brand-red);text-decoration:underline;-webkit-text-decoration-color:var(--brand-red);text-decoration-color:var(--brand-red);text-underline-offset:3px;font-weight:600}.obsolete-warning a:hover{color:var(--teal);-webkit-text-decoration-color:var(--teal);text-decoration-color:var(--teal)}.callout{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--brand-red);border-radius:12px;margin:44px 0;padding:28px 30px}.callout h4{font-family:var(--mono);color:var(--text);margin-bottom:12px;font-size:18px}.callout p{color:var(--text-muted);margin-bottom:14px;font-size:14.5px;line-height:1.7}.callout ul{margin:0 0 20px;padding-left:0;list-style:none}.callout ul li{color:var(--text-muted);margin-bottom:8px;padding-left:20px;font-size:14.5px;position:relative}.callout ul li:before{content:"";background:var(--brand-red);border-radius:50%;width:5px;height:5px;position:absolute;top:9px;left:0}.post-nav{grid-template-columns:1fr 1fr;gap:16px;margin:48px 0;display:grid}@media (width<=900px){.post-nav{grid-template-columns:1fr}}.post-nav a{border:1px solid var(--border);background:var(--surface);border-radius:12px;padding:20px 22px;display:block}.post-nav a:hover{border-color:var(--text-dim)}.post-nav .direction{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim);margin-bottom:8px;font-size:11px;display:block}.post-nav .title{color:var(--text);font-size:14.5px;line-height:1.4}.post-nav .next-post{text-align:right}.comment-section{border-top:1px solid var(--border-soft);margin-top:56px;padding-top:40px}.comment-section h3{font-family:var(--mono);color:var(--text);margin-bottom:24px;font-size:20px}.comment-form-mock{flex-direction:column;gap:16px;max-width:560px;display:flex}.comment-form-mock label{font-family:var(--mono);text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);margin-bottom:6px;font-size:12px;display:block}.comment-form-mock input,.comment-form-mock textarea{background:var(--surface);border:1px solid var(--border);width:100%;color:var(--text);font-family:var(--sans);border-radius:8px;padding:11px 14px;font-size:14.5px}.comment-form-mock input:focus,.comment-form-mock textarea:focus{border-color:var(--amber);outline:none}.comment-form-mock textarea{resize:vertical;min-height:120px}.post-hero-v2{padding:20px 0 16px;position:relative}.post-hero-v2:after{content:"";background:linear-gradient(90deg, var(--amber), var(--teal), transparent 85%);border-radius:2px;height:2px;position:absolute;bottom:0;left:0;right:0}.post-hero-v2 h1{max-width:none;margin:12px 0 0;font-size:38px;line-height:1.2}@media (width<=900px){.post-hero-v2 h1{font-size:28px}}.hero-top-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 18px;display:flex}.hero-badge{background:var(--teal-dim);border:1px solid var(--teal);color:var(--teal);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;border-radius:999px;align-items:center;gap:8px;padding:6px 14px 6px 10px;font-size:12px;display:inline-flex}.hero-badge svg{flex-shrink:0;width:14px;height:14px}.post-meta-v2{font-family:var(--mono);color:var(--text-dim);flex-wrap:wrap;align-items:center;gap:8px 22px;font-size:13px;display:flex}.post-meta-v2 a{color:var(--text-muted)}.post-meta-v2 a:hover{color:var(--amber)}.meta-item{align-items:center;gap:6px;display:inline-flex}.meta-item svg{width:14px;height:14px;color:var(--text-dim);flex-shrink:0}.md-actions{display:inline-flex;position:relative}.md-actions-toggle{background:var(--surface);border:1px solid var(--border);color:var(--text-muted);font-family:var(--sans);cursor:pointer;border-radius:8px;align-items:stretch;padding:0;font-size:13px;transition:box-shadow .15s,border-color .15s,color .15s;display:inline-flex;overflow:hidden}.md-actions-toggle svg{flex-shrink:0;width:14px;height:14px}.md-actions-toggle .chev{width:12px;height:12px;transition:transform .15s}.md-actions-toggle:hover{border-color:var(--text-dim);color:var(--text);box-shadow:0 4px 12px #0000001f}.md-actions-toggle-label{align-items:center;gap:8px;padding:6px 12px;display:inline-flex}.md-actions-toggle-chev{border-left:1px solid var(--border);align-items:center;padding:6px 10px;display:inline-flex}.md-actions.open .md-actions-toggle{border-color:var(--text-dim);color:var(--text);box-shadow:0 4px 12px #0000001f}.md-actions.open .md-actions-toggle .chev{transform:rotate(180deg)}.md-actions-menu{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);z-index:20;flex-direction:column;gap:2px;min-width:240px;padding:6px;display:none;position:absolute;top:calc(100% + 8px);right:0;box-shadow:0 12px 32px #0000002e}.md-actions.open .md-actions-menu{display:flex}.md-actions-item{color:var(--text);font-family:var(--sans);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:10px;padding:8px 10px;font-size:13px;text-decoration:none;display:flex}.md-actions-item svg{width:16px;height:16px;color:var(--text-dim);flex-shrink:0}.md-actions-item:hover{background:var(--surface-2);color:var(--amber)}.md-actions-item:hover svg{color:var(--amber)}.md-actions-bar{justify-content:flex-end;margin-bottom:12px;display:flex}.md-actions-bar+h2{margin-top:0} diff --git a/public/js/app.js b/public/js/app.js index bd319d7..016d053 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -1 +1 @@ -/* empty css */((e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports))(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self,n.bootstrap=r())})(e,(function(){let e=new Map,t={set(t,n,r){e.has(t)||e.set(t,new Map);let i=e.get(t);if(!i.has(n)&&i.size!==0){console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(i.keys())[0]}.`);return}i.set(n,r)},get(t,n){return e.has(t)&&e.get(t).get(n)||null},remove(t,n){if(!e.has(t))return;let r=e.get(t);r.delete(n),r.size===0&&e.delete(t)}},n=`transitionend`,r=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),e),i=e=>e==null?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),a=e=>{do e+=Math.floor(Math.random()*1e6);while(document.getElementById(e));return e},o=e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);return!Number.parseFloat(t)&&!Number.parseFloat(n)?0:(t=t.split(`,`)[0],n=n.split(`,`)[0],(Number.parseFloat(t)+Number.parseFloat(n))*1e3)},s=e=>{e.dispatchEvent(new Event(n))},c=e=>!e||typeof e!=`object`?!1:(e.jquery!==void 0&&(e=e[0]),e.nodeType!==void 0),l=e=>c(e)?e.jquery?e[0]:e:typeof e==`string`&&e.length>0?document.querySelector(r(e)):null,u=e=>{if(!c(e)||e.getClientRects().length===0)return!1;let t=getComputedStyle(e).getPropertyValue(`visibility`)===`visible`,n=e.closest(`details:not([open])`);if(!n)return t;if(n!==e){let t=e.closest(`summary`);if(t&&t.parentNode!==n||t===null)return!1}return t},d=e=>!e||e.nodeType!==Node.ELEMENT_NODE||e.classList.contains(`disabled`)?!0:e.disabled===void 0?e.hasAttribute(`disabled`)&&e.getAttribute(`disabled`)!==`false`:e.disabled,f=e=>{if(!document.documentElement.attachShadow)return null;if(typeof e.getRootNode==`function`){let t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?f(e.parentNode):null},p=()=>{},m=e=>{e.offsetHeight},h=()=>window.jQuery&&!document.body.hasAttribute(`data-bs-no-jquery`)?window.jQuery:null,g=[],_=e=>{document.readyState===`loading`?(g.length||document.addEventListener(`DOMContentLoaded`,()=>{for(let e of g)e()}),g.push(e)):e()},v=()=>document.documentElement.dir===`rtl`,y=e=>{_(()=>{let t=h();if(t){let n=e.NAME,r=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=r,e.jQueryInterface)}})},b=(e,t=[],n=e)=>typeof e==`function`?e.call(...t):n,x=(e,t,r=!0)=>{if(!r){b(e);return}let i=o(t)+5,a=!1,c=({target:r})=>{r===t&&(a=!0,t.removeEventListener(n,c),b(e))};t.addEventListener(n,c),setTimeout(()=>{a||s(t)},i)},S=(e,t,n,r)=>{let i=e.length,a=e.indexOf(t);return a===-1?!n&&r?e[i-1]:e[0]:(a+=n?1:-1,r&&(a=(a+i)%i),e[Math.max(0,Math.min(a,i-1))])},C=/[^.]*(?=\..*)\.|.*/,w=/\..*/,T=/::\d+$/,E={},D=1,O={mouseenter:`mouseover`,mouseleave:`mouseout`},k=new Set(`click.dblclick.mouseup.mousedown.contextmenu.mousewheel.DOMMouseScroll.mouseover.mouseout.mousemove.selectstart.selectend.keydown.keypress.keyup.orientationchange.touchstart.touchmove.touchend.touchcancel.pointerdown.pointermove.pointerup.pointerleave.pointercancel.gesturestart.gesturechange.gestureend.focus.blur.change.reset.select.submit.focusin.focusout.load.unload.beforeunload.resize.move.DOMContentLoaded.readystatechange.error.abort.scroll`.split(`.`));function ee(e,t){return t&&`${t}::${D++}`||e.uidEvent||D++}function A(e){let t=ee(e);return e.uidEvent=t,E[t]=E[t]||{},E[t]}function j(e,t){return function n(r){return ce(r,{delegateTarget:e}),n.oneOff&&M.off(e,r.type,t),t.apply(e,[r])}}function te(e,t,n){return function r(i){let a=e.querySelectorAll(t);for(let{target:o}=i;o&&o!==this;o=o.parentNode)for(let s of a)if(s===o)return ce(i,{delegateTarget:o}),r.oneOff&&M.off(e,i.type,t,n),n.apply(o,[i])}}function ne(e,t,n=null){return Object.values(e).find(e=>e.callable===t&&e.delegationSelector===n)}function re(e,t,n){let r=typeof t==`string`,i=r?n:t||n,a=se(e);return k.has(a)||(a=e),[r,i,a]}function ie(e,t,n,r,i){if(typeof t!=`string`||!e)return;let[a,o,s]=re(t,n,r);t in O&&(o=(e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)})(o));let c=A(e),l=c[s]||(c[s]={}),u=ne(l,o,a?n:null);if(u){u.oneOff=u.oneOff&&i;return}let d=ee(o,t.replace(C,``)),f=a?te(e,n,o):j(e,o);f.delegationSelector=a?n:null,f.callable=o,f.oneOff=i,f.uidEvent=d,l[d]=f,e.addEventListener(s,f,a)}function ae(e,t,n,r,i){let a=ne(t[n],r,i);a&&(e.removeEventListener(n,a,!!i),delete t[n][a.uidEvent])}function oe(e,t,n,r){let i=t[n]||{};for(let[a,o]of Object.entries(i))a.includes(r)&&ae(e,t,n,o.callable,o.delegationSelector)}function se(e){return e=e.replace(w,``),O[e]||e}let M={on(e,t,n,r){ie(e,t,n,r,!1)},one(e,t,n,r){ie(e,t,n,r,!0)},off(e,t,n,r){if(typeof t!=`string`||!e)return;let[i,a,o]=re(t,n,r),s=o!==t,c=A(e),l=c[o]||{},u=t.startsWith(`.`);if(a!==void 0){if(!Object.keys(l).length)return;ae(e,c,o,a,i?n:null);return}if(u)for(let n of Object.keys(c))oe(e,c,n,t.slice(1));for(let[n,r]of Object.entries(l)){let i=n.replace(T,``);(!s||t.includes(i))&&ae(e,c,o,r.callable,r.delegationSelector)}},trigger(e,t,n){if(typeof t!=`string`||!e)return null;let r=h(),i=t!==se(t),a=null,o=!0,s=!0,c=!1;i&&r&&(a=r.Event(t,n),r(e).trigger(a),o=!a.isPropagationStopped(),s=!a.isImmediatePropagationStopped(),c=a.isDefaultPrevented());let l=ce(new Event(t,{bubbles:o,cancelable:!0}),n);return c&&l.preventDefault(),s&&e.dispatchEvent(l),l.defaultPrevented&&a&&a.preventDefault(),l}};function ce(e,t={}){for(let[n,r]of Object.entries(t))try{e[n]=r}catch{Object.defineProperty(e,n,{configurable:!0,get(){return r}})}return e}function le(e){if(e===`true`)return!0;if(e===`false`)return!1;if(e===Number(e).toString())return Number(e);if(e===``||e===`null`)return null;if(typeof e!=`string`)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function ue(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}let N={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${ue(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${ue(t)}`)},getDataAttributes(e){if(!e)return{};let t={},n=Object.keys(e.dataset).filter(e=>e.startsWith(`bs`)&&!e.startsWith(`bsConfig`));for(let r of n){let n=r.replace(/^bs/,``);n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=le(e.dataset[r])}return t},getDataAttribute(e,t){return le(e.getAttribute(`data-bs-${ue(t)}`))}};class de{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw Error(`You have to implement the static method "NAME", for each component!`)}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){let n=c(t)?N.getDataAttribute(t,`config`):{};return{...this.constructor.Default,...typeof n==`object`?n:{},...c(t)?N.getDataAttributes(t):{},...typeof e==`object`?e:{}}}_typeCheckConfig(e,t=this.constructor.DefaultType){for(let[n,r]of Object.entries(t)){let t=e[n],a=c(t)?`element`:i(t);if(!new RegExp(r).test(a))throw TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${r}".`)}}}class P extends de{constructor(e,n){super(),e=l(e),e&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),M.off(this._element,this.constructor.EVENT_KEY);for(let e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t,n=!0){x(e,t,n)}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(l(e),this.DATA_KEY)}static getOrCreateInstance(e,t={}){return this.getInstance(e)||new this(e,typeof t==`object`?t:null)}static get VERSION(){return`5.3.8`}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}let fe=e=>{let t=e.getAttribute(`data-bs-target`);if(!t||t===`#`){let n=e.getAttribute(`href`);if(!n||!n.includes(`#`)&&!n.startsWith(`.`))return null;n.includes(`#`)&&!n.startsWith(`#`)&&(n=`#${n.split(`#`)[1]}`),t=n&&n!==`#`?n.trim():null}return t?t.split(`,`).map(e=>r(e)).join(`,`):null},F={find(e,t=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e,t=document.documentElement){return Element.prototype.querySelector.call(t,e)},children(e,t){return[].concat(...e.children).filter(e=>e.matches(t))},parents(e,t){let n=[],r=e.parentNode.closest(t);for(;r;)n.push(r),r=r.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){let t=[`a`,`button`,`input`,`textarea`,`select`,`details`,`[tabindex]`,`[contenteditable="true"]`].map(e=>`${e}:not([tabindex^="-"])`).join(`,`);return this.find(t,e).filter(e=>!d(e)&&u(e))},getSelectorFromElement(e){let t=fe(e);return t&&F.findOne(t)?t:null},getElementFromSelector(e){let t=fe(e);return t?F.findOne(t):null},getMultipleElementsFromSelector(e){let t=fe(e);return t?F.find(t):[]}},pe=(e,t=`hide`)=>{let n=`click.dismiss${e.EVENT_KEY}`,r=e.NAME;M.on(document,n,`[data-bs-dismiss="${r}"]`,function(n){if([`A`,`AREA`].includes(this.tagName)&&n.preventDefault(),d(this))return;let i=F.getElementFromSelector(this)||this.closest(`.${r}`);e.getOrCreateInstance(i)[t]()})},me=`.bs.alert`,he=`close${me}`,ge=`closed${me}`;class _e extends P{static get NAME(){return`alert`}close(){if(M.trigger(this._element,he).defaultPrevented)return;this._element.classList.remove(`show`);let e=this._element.classList.contains(`fade`);this._queueCallback(()=>this._destroyElement(),this._element,e)}_destroyElement(){this._element.remove(),M.trigger(this._element,ge),this.dispose()}static jQueryInterface(e){return this.each(function(){let t=_e.getOrCreateInstance(this);if(typeof e==`string`){if(t[e]===void 0||e.startsWith(`_`)||e===`constructor`)throw TypeError(`No method named "${e}"`);t[e](this)}})}}pe(_e,`close`),y(_e);let I=`[data-bs-toggle="button"]`;class L extends P{static get NAME(){return`button`}toggle(){this._element.setAttribute(`aria-pressed`,this._element.classList.toggle(`active`))}static jQueryInterface(e){return this.each(function(){let t=L.getOrCreateInstance(this);e===`toggle`&&t[e]()})}}M.on(document,`click.bs.button.data-api`,I,e=>{e.preventDefault();let t=e.target.closest(I);L.getOrCreateInstance(t).toggle()}),y(L);let R=`.bs.swipe`,ve=`touchstart${R}`,ye=`touchmove${R}`,be=`touchend${R}`,xe=`pointerdown${R}`,Se=`pointerup${R}`,Ce={endCallback:null,leftCallback:null,rightCallback:null},we={endCallback:`(function|null)`,leftCallback:`(function|null)`,rightCallback:`(function|null)`};class Te extends de{constructor(e,t){super(),this._element=e,!(!e||!Te.isSupported())&&(this._config=this._getConfig(t),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return Ce}static get DefaultType(){return we}static get NAME(){return`swipe`}dispose(){M.off(this._element,R)}_start(e){if(!this._supportPointerEvents){this._deltaX=e.touches[0].clientX;return}this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX)}_end(e){this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX-this._deltaX),this._handleSwipe(),b(this._config.endCallback)}_move(e){this._deltaX=e.touches&&e.touches.length>1?0:e.touches[0].clientX-this._deltaX}_handleSwipe(){let e=Math.abs(this._deltaX);if(e<=40)return;let t=e/this._deltaX;this._deltaX=0,t&&b(t>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(M.on(this._element,xe,e=>this._start(e)),M.on(this._element,Se,e=>this._end(e)),this._element.classList.add(`pointer-event`)):(M.on(this._element,ve,e=>this._start(e)),M.on(this._element,ye,e=>this._move(e)),M.on(this._element,be,e=>this._end(e)))}_eventIsPointerPenTouch(e){return this._supportPointerEvents&&(e.pointerType===`pen`||e.pointerType===`touch`)}static isSupported(){return`ontouchstart`in document.documentElement||navigator.maxTouchPoints>0}}let z=`.bs.carousel`,Ee=`.data-api`,De=`next`,Oe=`prev`,ke=`left`,Ae=`right`,je=`slide${z}`,Me=`slid${z}`,Ne=`keydown${z}`,Pe=`mouseenter${z}`,Fe=`mouseleave${z}`,Ie=`dragstart${z}`,Le=`load${z}${Ee}`,Re=`click${z}${Ee}`,ze=`carousel`,Be=`active`,Ve={ArrowLeft:Ae,ArrowRight:ke},He={interval:5e3,keyboard:!0,pause:`hover`,ride:!1,touch:!0,wrap:!0},Ue={interval:`(number|boolean)`,keyboard:`boolean`,pause:`(string|boolean)`,ride:`(boolean|string)`,touch:`boolean`,wrap:`boolean`};class We extends P{constructor(e,t){super(e,t),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=F.findOne(`.carousel-indicators`,this._element),this._addEventListeners(),this._config.ride===ze&&this.cycle()}static get Default(){return He}static get DefaultType(){return Ue}static get NAME(){return`carousel`}next(){this._slide(De)}nextWhenVisible(){!document.hidden&&u(this._element)&&this.next()}prev(){this._slide(Oe)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){if(this._config.ride){if(this._isSliding){M.one(this._element,Me,()=>this.cycle());return}this.cycle()}}to(e){let t=this._getItems();if(e>t.length-1||e<0)return;if(this._isSliding){M.one(this._element,Me,()=>this.to(e));return}let n=this._getItemIndex(this._getActive());if(n===e)return;let r=e>n?De:Oe;this._slide(r,t[e])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(e){return e.defaultInterval=e.interval,e}_addEventListeners(){this._config.keyboard&&M.on(this._element,Ne,e=>this._keydown(e)),this._config.pause===`hover`&&(M.on(this._element,Pe,()=>this.pause()),M.on(this._element,Fe,()=>this._maybeEnableCycle())),this._config.touch&&Te.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(let e of F.find(`.carousel-item img`,this._element))M.on(e,Ie,e=>e.preventDefault());let e={leftCallback:()=>this._slide(this._directionToOrder(ke)),rightCallback:()=>this._slide(this._directionToOrder(Ae)),endCallback:()=>{this._config.pause===`hover`&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),500+this._config.interval))}};this._swipeHelper=new Te(this._element,e)}_keydown(e){if(/input|textarea/i.test(e.target.tagName))return;let t=Ve[e.key];t&&(e.preventDefault(),this._slide(this._directionToOrder(t)))}_getItemIndex(e){return this._getItems().indexOf(e)}_setActiveIndicatorElement(e){if(!this._indicatorsElement)return;let t=F.findOne(`.active`,this._indicatorsElement);t.classList.remove(Be),t.removeAttribute(`aria-current`);let n=F.findOne(`[data-bs-slide-to="${e}"]`,this._indicatorsElement);n&&(n.classList.add(Be),n.setAttribute(`aria-current`,`true`))}_updateInterval(){let e=this._activeElement||this._getActive();if(!e)return;let t=Number.parseInt(e.getAttribute(`data-bs-interval`),10);this._config.interval=t||this._config.defaultInterval}_slide(e,t=null){if(this._isSliding)return;let n=this._getActive(),r=e===De,i=t||S(this._getItems(),n,r,this._config.wrap);if(i===n)return;let a=this._getItemIndex(i),o=t=>M.trigger(this._element,t,{relatedTarget:i,direction:this._orderToDirection(e),from:this._getItemIndex(n),to:a});if(o(je).defaultPrevented||!n||!i)return;let s=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(a),this._activeElement=i;let c=r?`carousel-item-start`:`carousel-item-end`,l=r?`carousel-item-next`:`carousel-item-prev`;i.classList.add(l),m(i),n.classList.add(c),i.classList.add(c),this._queueCallback(()=>{i.classList.remove(c,l),i.classList.add(Be),n.classList.remove(Be,l,c),this._isSliding=!1,o(Me)},n,this._isAnimated()),s&&this.cycle()}_isAnimated(){return this._element.classList.contains(`slide`)}_getActive(){return F.findOne(`.active.carousel-item`,this._element)}_getItems(){return F.find(`.carousel-item`,this._element)}_clearInterval(){this._interval&&=(clearInterval(this._interval),null)}_directionToOrder(e){return v()?e===ke?Oe:De:e===ke?De:Oe}_orderToDirection(e){return v()?e===Oe?ke:Ae:e===Oe?Ae:ke}static jQueryInterface(e){return this.each(function(){let t=We.getOrCreateInstance(this,e);if(typeof e==`number`){t.to(e);return}if(typeof e==`string`){if(t[e]===void 0||e.startsWith(`_`)||e===`constructor`)throw TypeError(`No method named "${e}"`);t[e]()}})}}M.on(document,Re,`[data-bs-slide], [data-bs-slide-to]`,function(e){let t=F.getElementFromSelector(this);if(!t||!t.classList.contains(ze))return;e.preventDefault();let n=We.getOrCreateInstance(t),r=this.getAttribute(`data-bs-slide-to`);if(r){n.to(r),n._maybeEnableCycle();return}if(N.getDataAttribute(this,`slide`)===`next`){n.next(),n._maybeEnableCycle();return}n.prev(),n._maybeEnableCycle()}),M.on(window,Le,()=>{let e=F.find(`[data-bs-ride="carousel"]`);for(let t of e)We.getOrCreateInstance(t)}),y(We);let Ge=`.bs.collapse`,Ke=`show${Ge}`,qe=`shown${Ge}`,Je=`hide${Ge}`,Ye=`hidden${Ge}`,Xe=`click${Ge}.data-api`,Ze=`show`,Qe=`collapse`,$e=`collapsing`,et=`:scope .${Qe} .${Qe}`,tt=`[data-bs-toggle="collapse"]`,nt={parent:null,toggle:!0},rt={parent:`(null|element)`,toggle:`boolean`};class it extends P{constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];let n=F.find(tt);for(let e of n){let t=F.getSelectorFromElement(e),n=F.find(t).filter(e=>e===this._element);t!==null&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return nt}static get DefaultType(){return rt}static get NAME(){return`collapse`}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(`.collapse.show, .collapse.collapsing`).filter(e=>e!==this._element).map(e=>it.getOrCreateInstance(e,{toggle:!1}))),e.length&&e[0]._isTransitioning||M.trigger(this._element,Ke).defaultPrevented)return;for(let t of e)t.hide();let t=this._getDimension();this._element.classList.remove(Qe),this._element.classList.add($e),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;let n=()=>{this._isTransitioning=!1,this._element.classList.remove($e),this._element.classList.add(Qe,Ze),this._element.style[t]=``,M.trigger(this._element,qe)},r=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback(n,this._element,!0),this._element.style[t]=`${this._element[r]}px`}hide(){if(this._isTransitioning||!this._isShown()||M.trigger(this._element,Je).defaultPrevented)return;let e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,m(this._element),this._element.classList.add($e),this._element.classList.remove(Qe,Ze);for(let e of this._triggerArray){let t=F.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;let t=()=>{this._isTransitioning=!1,this._element.classList.remove($e),this._element.classList.add(Qe),M.trigger(this._element,Ye)};this._element.style[e]=``,this._queueCallback(t,this._element,!0)}_isShown(e=this._element){return e.classList.contains(Ze)}_configAfterMerge(e){return e.toggle=!!e.toggle,e.parent=l(e.parent),e}_getDimension(){return this._element.classList.contains(`collapse-horizontal`)?`width`:`height`}_initializeChildren(){if(!this._config.parent)return;let e=this._getFirstLevelChildren(tt);for(let t of e){let e=F.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){let t=F.find(et,this._config.parent);return F.find(e,this._config.parent).filter(e=>!t.includes(e))}_addAriaAndCollapsedClass(e,t){if(e.length)for(let n of e)n.classList.toggle(`collapsed`,!t),n.setAttribute(`aria-expanded`,t)}static jQueryInterface(e){let t={};return typeof e==`string`&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){let n=it.getOrCreateInstance(this,t);if(typeof e==`string`){if(n[e]===void 0)throw TypeError(`No method named "${e}"`);n[e]()}})}}M.on(document,Xe,tt,function(e){(e.target.tagName===`A`||e.delegateTarget&&e.delegateTarget.tagName===`A`)&&e.preventDefault();for(let e of F.getMultipleElementsFromSelector(this))it.getOrCreateInstance(e,{toggle:!1}).toggle()}),y(it);var B=`top`,V=`bottom`,H=`right`,U=`left`,at=`auto`,ot=[B,V,H,U],st=`start`,ct=`end`,lt=`clippingParents`,ut=`viewport`,dt=`popper`,ft=`reference`,pt=ot.reduce(function(e,t){return e.concat([t+`-`+st,t+`-`+ct])},[]),mt=[].concat(ot,[at]).reduce(function(e,t){return e.concat([t,t+`-`+st,t+`-`+ct])},[]),ht=`beforeRead`,gt=`read`,_t=`afterRead`,vt=`beforeMain`,yt=`main`,bt=`afterMain`,xt=`beforeWrite`,St=`write`,Ct=`afterWrite`,wt=[ht,gt,_t,vt,yt,bt,xt,St,Ct];function W(e){return e?(e.nodeName||``).toLowerCase():null}function G(e){if(e==null)return window;if(e.toString()!==`[object Window]`){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Tt(e){return e instanceof G(e).Element||e instanceof Element}function K(e){return e instanceof G(e).HTMLElement||e instanceof HTMLElement}function Et(e){return typeof ShadowRoot>`u`?!1:e instanceof G(e).ShadowRoot||e instanceof ShadowRoot}function Dt(e){var t=e.state;Object.keys(t.elements).forEach(function(e){var n=t.styles[e]||{},r=t.attributes[e]||{},i=t.elements[e];!K(i)||!W(i)||(Object.assign(i.style,n),Object.keys(r).forEach(function(e){var t=r[e];t===!1?i.removeAttribute(e):i.setAttribute(e,t===!0?``:t)}))})}function Ot(e){var t=e.state,n={popper:{position:t.options.strategy,left:`0`,top:`0`,margin:`0`},arrow:{position:`absolute`},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(e){var r=t.elements[e],i=t.attributes[e]||{},a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce(function(e,t){return e[t]=``,e},{});!K(r)||!W(r)||(Object.assign(r.style,a),Object.keys(i).forEach(function(e){r.removeAttribute(e)}))})}}let kt={name:`applyStyles`,enabled:!0,phase:`write`,fn:Dt,effect:Ot,requires:[`computeStyles`]};function q(e){return e.split(`-`)[0]}var At=Math.max,jt=Math.min,Mt=Math.round;function Nt(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(e){return e.brand+`/`+e.version}).join(` `):navigator.userAgent}function Pt(){return!/^((?!chrome|android).)*safari/i.test(Nt())}function Ft(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r=e.getBoundingClientRect(),i=1,a=1;t&&K(e)&&(i=e.offsetWidth>0&&Mt(r.width)/e.offsetWidth||1,a=e.offsetHeight>0&&Mt(r.height)/e.offsetHeight||1);var o=(Tt(e)?G(e):window).visualViewport,s=!Pt()&&n,c=(r.left+(s&&o?o.offsetLeft:0))/i,l=(r.top+(s&&o?o.offsetTop:0))/a,u=r.width/i,d=r.height/a;return{width:u,height:d,top:l,right:c+u,bottom:l+d,left:c,x:c,y:l}}function It(e){var t=Ft(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function Lt(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Et(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function J(e){return G(e).getComputedStyle(e)}function Rt(e){return[`table`,`td`,`th`].indexOf(W(e))>=0}function Y(e){return((Tt(e)?e.ownerDocument:e.document)||window.document).documentElement}function zt(e){return W(e)===`html`?e:e.assignedSlot||e.parentNode||(Et(e)?e.host:null)||Y(e)}function Bt(e){return!K(e)||J(e).position===`fixed`?null:e.offsetParent}function Vt(e){var t=/firefox/i.test(Nt());if(/Trident/i.test(Nt())&&K(e)&&J(e).position===`fixed`)return null;var n=zt(e);for(Et(n)&&(n=n.host);K(n)&&[`html`,`body`].indexOf(W(n))<0;){var r=J(n);if(r.transform!==`none`||r.perspective!==`none`||r.contain===`paint`||[`transform`,`perspective`].indexOf(r.willChange)!==-1||t&&r.willChange===`filter`||t&&r.filter&&r.filter!==`none`)return n;n=n.parentNode}return null}function Ht(e){for(var t=G(e),n=Bt(e);n&&Rt(n)&&J(n).position===`static`;)n=Bt(n);return n&&(W(n)===`html`||W(n)===`body`&&J(n).position===`static`)?t:n||Vt(e)||t}function Ut(e){return[`top`,`bottom`].indexOf(e)>=0?`x`:`y`}function Wt(e,t,n){return At(e,jt(t,n))}function Gt(e,t,n){var r=Wt(e,t,n);return r>n?n:r}function Kt(){return{top:0,right:0,bottom:0,left:0}}function qt(e){return Object.assign({},Kt(),e)}function Jt(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})}var Yt=function(e,t){return e=typeof e==`function`?e(Object.assign({},t.rects,{placement:t.placement})):e,qt(typeof e==`number`?Jt(e,ot):e)};function Xt(e){var t,n=e.state,r=e.name,i=e.options,a=n.elements.arrow,o=n.modifiersData.popperOffsets,s=q(n.placement),c=Ut(s),l=[U,H].indexOf(s)>=0?`height`:`width`;if(!(!a||!o)){var u=Yt(i.padding,n),d=It(a),f=c===`y`?B:U,p=c===`y`?V:H,m=n.rects.reference[l]+n.rects.reference[c]-o[c]-n.rects.popper[l],h=o[c]-n.rects.reference[c],g=Ht(a),_=g?c===`y`?g.clientHeight||0:g.clientWidth||0:0,v=m/2-h/2,y=u[f],b=_-d[l]-u[p],x=_/2-d[l]/2+v,S=Wt(y,x,b),C=c;n.modifiersData[r]=(t={},t[C]=S,t.centerOffset=S-x,t)}}function Zt(e){var t=e.state,n=e.options.element,r=n===void 0?`[data-popper-arrow]`:n;r!=null&&(typeof r==`string`&&(r=t.elements.popper.querySelector(r),!r)||Lt(t.elements.popper,r)&&(t.elements.arrow=r))}let Qt={name:`arrow`,enabled:!0,phase:`main`,fn:Xt,effect:Zt,requires:[`popperOffsets`],requiresIfExists:[`preventOverflow`]};function $t(e){return e.split(`-`)[1]}var en={top:`auto`,right:`auto`,bottom:`auto`,left:`auto`};function tn(e,t){var n=e.x,r=e.y,i=t.devicePixelRatio||1;return{x:Mt(n*i)/i||0,y:Mt(r*i)/i||0}}function nn(e){var t,n=e.popper,r=e.popperRect,i=e.placement,a=e.variation,o=e.offsets,s=e.position,c=e.gpuAcceleration,l=e.adaptive,u=e.roundOffsets,d=e.isFixed,f=o.x,p=f===void 0?0:f,m=o.y,h=m===void 0?0:m,g=typeof u==`function`?u({x:p,y:h}):{x:p,y:h};p=g.x,h=g.y;var _=o.hasOwnProperty(`x`),v=o.hasOwnProperty(`y`),y=U,b=B,x=window;if(l){var S=Ht(n),C=`clientHeight`,w=`clientWidth`;if(S===G(n)&&(S=Y(n),J(S).position!==`static`&&s===`absolute`&&(C=`scrollHeight`,w=`scrollWidth`)),S=S,i===B||(i===U||i===H)&&a===ct){b=V;var T=d&&S===x&&x.visualViewport?x.visualViewport.height:S[C];h-=T-r.height,h*=c?1:-1}if(i===U||(i===B||i===V)&&a===ct){y=H;var E=d&&S===x&&x.visualViewport?x.visualViewport.width:S[w];p-=E-r.width,p*=c?1:-1}}var D=Object.assign({position:s},l&&en),O=u===!0?tn({x:p,y:h},G(n)):{x:p,y:h};if(p=O.x,h=O.y,c){var k;return Object.assign({},D,(k={},k[b]=v?`0`:``,k[y]=_?`0`:``,k.transform=(x.devicePixelRatio||1)<=1?`translate(`+p+`px, `+h+`px)`:`translate3d(`+p+`px, `+h+`px, 0)`,k))}return Object.assign({},D,(t={},t[b]=v?h+`px`:``,t[y]=_?p+`px`:``,t.transform=``,t))}function rn(e){var t=e.state,n=e.options,r=n.gpuAcceleration,i=r===void 0?!0:r,a=n.adaptive,o=a===void 0?!0:a,s=n.roundOffsets,c=s===void 0?!0:s,l={placement:q(t.placement),variation:$t(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:i,isFixed:t.options.strategy===`fixed`};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,nn(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:o,roundOffsets:c})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,nn(Object.assign({},l,{offsets:t.modifiersData.arrow,position:`absolute`,adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}let an={name:`computeStyles`,enabled:!0,phase:`beforeWrite`,fn:rn,data:{}};var on={passive:!0};function sn(e){var t=e.state,n=e.instance,r=e.options,i=r.scroll,a=i===void 0?!0:i,o=r.resize,s=o===void 0?!0:o,c=G(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return a&&l.forEach(function(e){e.addEventListener(`scroll`,n.update,on)}),s&&c.addEventListener(`resize`,n.update,on),function(){a&&l.forEach(function(e){e.removeEventListener(`scroll`,n.update,on)}),s&&c.removeEventListener(`resize`,n.update,on)}}let cn={name:`eventListeners`,enabled:!0,phase:`write`,fn:function(){},effect:sn,data:{}};var ln={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function un(e){return e.replace(/left|right|bottom|top/g,function(e){return ln[e]})}var dn={start:`end`,end:`start`};function fn(e){return e.replace(/start|end/g,function(e){return dn[e]})}function pn(e){var t=G(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function mn(e){return Ft(Y(e)).left+pn(e).scrollLeft}function hn(e,t){var n=G(e),r=Y(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;var l=Pt();(l||!l&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}return{width:a,height:o,x:s+mn(e),y:c}}function gn(e){var t=Y(e),n=pn(e),r=e.ownerDocument?.body,i=At(t.scrollWidth,t.clientWidth,r?r.scrollWidth:0,r?r.clientWidth:0),a=At(t.scrollHeight,t.clientHeight,r?r.scrollHeight:0,r?r.clientHeight:0),o=-n.scrollLeft+mn(e),s=-n.scrollTop;return J(r||t).direction===`rtl`&&(o+=At(t.clientWidth,r?r.clientWidth:0)-i),{width:i,height:a,x:o,y:s}}function _n(e){var t=J(e),n=t.overflow,r=t.overflowX,i=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+i+r)}function vn(e){return[`html`,`body`,`#document`].indexOf(W(e))>=0?e.ownerDocument.body:K(e)&&_n(e)?e:vn(zt(e))}function yn(e,t){t===void 0&&(t=[]);var n=vn(e),r=n===e.ownerDocument?.body,i=G(n),a=r?[i].concat(i.visualViewport||[],_n(n)?n:[]):n,o=t.concat(a);return r?o:o.concat(yn(zt(a)))}function bn(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function xn(e,t){var n=Ft(e,!1,t===`fixed`);return n.top+=e.clientTop,n.left+=e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function Sn(e,t,n){return t===ut?bn(hn(e,n)):Tt(t)?xn(t,n):bn(gn(Y(e)))}function Cn(e){var t=yn(zt(e)),n=[`absolute`,`fixed`].indexOf(J(e).position)>=0&&K(e)?Ht(e):e;return Tt(n)?t.filter(function(e){return Tt(e)&&Lt(e,n)&&W(e)!==`body`}):[]}function wn(e,t,n,r){var i=t===`clippingParents`?Cn(e):[].concat(t),a=[].concat(i,[n]),o=a[0],s=a.reduce(function(t,n){var i=Sn(e,n,r);return t.top=At(i.top,t.top),t.right=jt(i.right,t.right),t.bottom=jt(i.bottom,t.bottom),t.left=At(i.left,t.left),t},Sn(e,o,r));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}function Tn(e){var t=e.reference,n=e.element,r=e.placement,i=r?q(r):null,a=r?$t(r):null,o=t.x+t.width/2-n.width/2,s=t.y+t.height/2-n.height/2,c;switch(i){case B:c={x:o,y:t.y-n.height};break;case V:c={x:o,y:t.y+t.height};break;case H:c={x:t.x+t.width,y:s};break;case U:c={x:t.x-n.width,y:s};break;default:c={x:t.x,y:t.y}}var l=i?Ut(i):null;if(l!=null){var u=l===`y`?`height`:`width`;switch(a){case st:c[l]=c[l]-(t[u]/2-n[u]/2);break;case ct:c[l]=c[l]+(t[u]/2-n[u]/2);break}}return c}function En(e,t){t===void 0&&(t={});var n=t,r=n.placement,i=r===void 0?e.placement:r,a=n.strategy,o=a===void 0?e.strategy:a,s=n.boundary,c=s===void 0?lt:s,l=n.rootBoundary,u=l===void 0?ut:l,d=n.elementContext,f=d===void 0?dt:d,p=n.altBoundary,m=p===void 0?!1:p,h=n.padding,g=h===void 0?0:h,_=qt(typeof g==`number`?Jt(g,ot):g),v=f===dt?ft:dt,y=e.rects.popper,b=e.elements[m?v:f],x=wn(Tt(b)?b:b.contextElement||Y(e.elements.popper),c,u,o),S=Ft(e.elements.reference),C=Tn({reference:S,element:y,placement:i}),w=bn(Object.assign({},y,C)),T=f===dt?w:S,E={top:x.top-T.top+_.top,bottom:T.bottom-x.bottom+_.bottom,left:x.left-T.left+_.left,right:T.right-x.right+_.right},D=e.modifiersData.offset;if(f===dt&&D){var O=D[i];Object.keys(E).forEach(function(e){var t=[H,V].indexOf(e)>=0?1:-1,n=[B,V].indexOf(e)>=0?`y`:`x`;E[e]+=O[n]*t})}return E}function Dn(e,t){t===void 0&&(t={});var n=t,r=n.placement,i=n.boundary,a=n.rootBoundary,o=n.padding,s=n.flipVariations,c=n.allowedAutoPlacements,l=c===void 0?mt:c,u=$t(r),d=u?s?pt:pt.filter(function(e){return $t(e)===u}):ot,f=d.filter(function(e){return l.indexOf(e)>=0});f.length===0&&(f=d);var p=f.reduce(function(t,n){return t[n]=En(e,{placement:n,boundary:i,rootBoundary:a,padding:o})[q(n)],t},{});return Object.keys(p).sort(function(e,t){return p[e]-p[t]})}function On(e){if(q(e)===at)return[];var t=un(e);return[fn(e),t,fn(t)]}function kn(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var i=n.mainAxis,a=i===void 0?!0:i,o=n.altAxis,s=o===void 0?!0:o,c=n.fallbackPlacements,l=n.padding,u=n.boundary,d=n.rootBoundary,f=n.altBoundary,p=n.flipVariations,m=p===void 0?!0:p,h=n.allowedAutoPlacements,g=t.options.placement,_=q(g)===g,v=c||(_||!m?[un(g)]:On(g)),y=[g].concat(v).reduce(function(e,n){return e.concat(q(n)===at?Dn(t,{placement:n,boundary:u,rootBoundary:d,padding:l,flipVariations:m,allowedAutoPlacements:h}):n)},[]),b=t.rects.reference,x=t.rects.popper,S=new Map,C=!0,w=y[0],T=0;T=0,ee=k?`width`:`height`,A=En(t,{placement:E,boundary:u,rootBoundary:d,altBoundary:f,padding:l}),j=k?O?H:U:O?V:B;b[ee]>x[ee]&&(j=un(j));var te=un(j),ne=[];if(a&&ne.push(A[D]<=0),s&&ne.push(A[j]<=0,A[te]<=0),ne.every(function(e){return e})){w=E,C=!1;break}S.set(E,ne)}if(C)for(var re=m?3:1,ie=function(e){var t=y.find(function(t){var n=S.get(t);if(n)return n.slice(0,e).every(function(e){return e})});if(t)return w=t,`break`},ae=re;ae>0&&ie(ae)!==`break`;ae--);t.placement!==w&&(t.modifiersData[r]._skip=!0,t.placement=w,t.reset=!0)}}let An={name:`flip`,enabled:!0,phase:`main`,fn:kn,requiresIfExists:[`offset`],data:{_skip:!1}};function jn(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function Mn(e){return[B,H,V,U].some(function(t){return e[t]>=0})}function Nn(e){var t=e.state,n=e.name,r=t.rects.reference,i=t.rects.popper,a=t.modifiersData.preventOverflow,o=En(t,{elementContext:`reference`}),s=En(t,{altBoundary:!0}),c=jn(o,r),l=jn(s,i,a),u=Mn(c),d=Mn(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":d})}let Pn={name:`hide`,enabled:!0,phase:`main`,requiresIfExists:[`preventOverflow`],fn:Nn};function Fn(e,t,n){var r=q(e),i=[U,B].indexOf(r)>=0?-1:1,a=typeof n==`function`?n(Object.assign({},t,{placement:e})):n,o=a[0],s=a[1];return o||=0,s=(s||0)*i,[U,H].indexOf(r)>=0?{x:s,y:o}:{x:o,y:s}}function In(e){var t=e.state,n=e.options,r=e.name,i=n.offset,a=i===void 0?[0,0]:i,o=mt.reduce(function(e,n){return e[n]=Fn(n,t.rects,a),e},{}),s=o[t.placement],c=s.x,l=s.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[r]=o}let Ln={name:`offset`,enabled:!0,phase:`main`,requires:[`popperOffsets`],fn:In};function Rn(e){var t=e.state,n=e.name;t.modifiersData[n]=Tn({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})}let zn={name:`popperOffsets`,enabled:!0,phase:`read`,fn:Rn,data:{}};function Bn(e){return e===`x`?`y`:`x`}function Vn(e){var t=e.state,n=e.options,r=e.name,i=n.mainAxis,a=i===void 0?!0:i,o=n.altAxis,s=o===void 0?!1:o,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,d=n.padding,f=n.tether,p=f===void 0?!0:f,m=n.tetherOffset,h=m===void 0?0:m,g=En(t,{boundary:c,rootBoundary:l,padding:d,altBoundary:u}),_=q(t.placement),v=$t(t.placement),y=!v,b=Ut(_),x=Bn(b),S=t.modifiersData.popperOffsets,C=t.rects.reference,w=t.rects.popper,T=typeof h==`function`?h(Object.assign({},t.rects,{placement:t.placement})):h,E=typeof T==`number`?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),D=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,O={x:0,y:0};if(S){if(a){var k=b===`y`?B:U,ee=b===`y`?V:H,A=b===`y`?`height`:`width`,j=S[b],te=j+g[k],ne=j-g[ee],re=p?-w[A]/2:0,ie=v===st?C[A]:w[A],ae=v===st?-w[A]:-C[A],oe=t.elements.arrow,se=p&&oe?It(oe):{width:0,height:0},M=t.modifiersData[`arrow#persistent`]?t.modifiersData[`arrow#persistent`].padding:Kt(),ce=M[k],le=M[ee],ue=Wt(0,C[A],se[A]),N=y?C[A]/2-re-ue-ce-E.mainAxis:ie-ue-ce-E.mainAxis,de=y?-C[A]/2+re+ue+le+E.mainAxis:ae+ue+le+E.mainAxis,P=t.elements.arrow&&Ht(t.elements.arrow),fe=P?b===`y`?P.clientTop||0:P.clientLeft||0:0,F=D?.[b]??0,pe=j+N-F-fe,me=j+de-F,he=Wt(p?jt(te,pe):te,j,p?At(ne,me):ne);S[b]=he,O[b]=he-j}if(s){var ge=b===`x`?B:U,_e=b===`x`?V:H,I=S[x],L=x===`y`?`height`:`width`,R=I+g[ge],ve=I-g[_e],ye=[B,U].indexOf(_)!==-1,be=D?.[x]??0,xe=ye?R:I-C[L]-w[L]-be+E.altAxis,Se=ye?I+C[L]+w[L]-be-E.altAxis:ve,Ce=p&&ye?Gt(xe,I,Se):Wt(p?xe:R,I,p?Se:ve);S[x]=Ce,O[x]=Ce-I}t.modifiersData[r]=O}}let Hn={name:`preventOverflow`,enabled:!0,phase:`main`,fn:Vn,requiresIfExists:[`offset`]};function Un(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function Wn(e){return e===G(e)||!K(e)?pn(e):Un(e)}function Gn(e){var t=e.getBoundingClientRect(),n=Mt(t.width)/e.offsetWidth||1,r=Mt(t.height)/e.offsetHeight||1;return n!==1||r!==1}function Kn(e,t,n){n===void 0&&(n=!1);var r=K(t),i=K(t)&&Gn(t),a=Y(t),o=Ft(e,i,n),s={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(r||!r&&!n)&&((W(t)!==`body`||_n(a))&&(s=Wn(t)),K(t)?(c=Ft(t,!0),c.x+=t.clientLeft,c.y+=t.clientTop):a&&(c.x=mn(a))),{x:o.left+s.scrollLeft-c.x,y:o.top+s.scrollTop-c.y,width:o.width,height:o.height}}function qn(e){var t=new Map,n=new Set,r=[];e.forEach(function(e){t.set(e.name,e)});function i(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach(function(e){if(!n.has(e)){var r=t.get(e);r&&i(r)}}),r.push(e)}return e.forEach(function(e){n.has(e.name)||i(e)}),r}function Jn(e){var t=qn(e);return wt.reduce(function(e,n){return e.concat(t.filter(function(e){return e.phase===n}))},[])}function Yn(e){var t;return function(){return t||=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})}),t}}function Xn(e){var t=e.reduce(function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e},{});return Object.keys(t).map(function(e){return t[e]})}var Zn={placement:`bottom`,modifiers:[],strategy:`absolute`};function Qn(){return![...arguments].some(function(e){return!(e&&typeof e.getBoundingClientRect==`function`)})}function $n(e){e===void 0&&(e={});var t=e,n=t.defaultModifiers,r=n===void 0?[]:n,i=t.defaultOptions,a=i===void 0?Zn:i;return function(e,t,n){n===void 0&&(n=a);var i={placement:`bottom`,orderedModifiers:[],options:Object.assign({},Zn,a),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},o=[],s=!1,c={state:i,setOptions:function(n){var o=typeof n==`function`?n(i.options):n;u(),i.options=Object.assign({},a,i.options,o),i.scrollParents={reference:Tt(e)?yn(e):e.contextElement?yn(e.contextElement):[],popper:yn(t)};var s=Jn(Xn([].concat(r,i.options.modifiers)));return i.orderedModifiers=s.filter(function(e){return e.enabled}),l(),c.update()},forceUpdate:function(){if(!s){var e=i.elements,t=e.reference,n=e.popper;if(Qn(t,n)){i.rects={reference:Kn(t,Ht(n),i.options.strategy===`fixed`),popper:It(n)},i.reset=!1,i.placement=i.options.placement,i.orderedModifiers.forEach(function(e){return i.modifiersData[e.name]=Object.assign({},e.data)});for(var r=0;rNumber.parseInt(e,10)):typeof e==`function`?t=>e(t,this._element):e}_getPopperConfig(){let e={placement:this._getPlacement(),modifiers:[{name:`preventOverflow`,options:{boundary:this._config.boundary}},{name:`offset`,options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display===`static`)&&(N.setDataAttribute(this._menu,`popper`,`static`),e.modifiers=[{name:`applyStyles`,enabled:!1}]),{...e,...b(this._config.popperConfig,[void 0,e])}}_selectMenuItem({key:e,target:t}){let n=F.find(`.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)`,this._menu).filter(e=>u(e));n.length&&S(n,t,e===or,!n.includes(t)).focus()}static jQueryInterface(e){return this.each(function(){let t=X.getOrCreateInstance(this,e);if(typeof e==`string`){if(t[e]===void 0)throw TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(e.button===2||e.type===`keyup`&&e.key!==`Tab`)return;let t=F.find(gr);for(let n of t){let t=X.getInstance(n);if(!t||t._config.autoClose===!1)continue;let r=e.composedPath(),i=r.includes(t._menu);if(r.includes(t._element)||t._config.autoClose===`inside`&&!i||t._config.autoClose===`outside`&&i||t._menu.contains(e.target)&&(e.type===`keyup`&&e.key===`Tab`||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;let a={relatedTarget:t._element};e.type===`click`&&(a.clickEvent=e),t._completeHide(a)}}static dataApiKeydownHandler(e){let t=/input|textarea/i.test(e.target.tagName),n=e.key===`Escape`,r=[`ArrowUp`,or].includes(e.key);if(!r&&!n||t&&!n)return;e.preventDefault();let i=this.matches(hr)?this:F.prev(this,hr)[0]||F.next(this,hr)[0]||F.findOne(hr,e.delegateTarget.parentNode),a=X.getOrCreateInstance(i);if(r){e.stopPropagation(),a.show(),a._selectMenuItem(e);return}a._isShown()&&(e.stopPropagation(),a.hide(),i.focus())}}M.on(document,fr,hr,X.dataApiKeydownHandler),M.on(document,fr,_r,X.dataApiKeydownHandler),M.on(document,dr,X.clearMenus),M.on(document,pr,X.clearMenus),M.on(document,dr,hr,function(e){e.preventDefault(),X.getOrCreateInstance(this).toggle()}),y(X);let Er=`backdrop`,Dr=`show`,Or=`mousedown.bs.${Er}`,kr={className:`modal-backdrop`,clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:`body`},Ar={className:`string`,clickCallback:`(function|null)`,isAnimated:`boolean`,isVisible:`boolean`,rootElement:`(element|string)`};class jr extends de{constructor(e){super(),this._config=this._getConfig(e),this._isAppended=!1,this._element=null}static get Default(){return kr}static get DefaultType(){return Ar}static get NAME(){return Er}show(e){if(!this._config.isVisible){b(e);return}this._append();let t=this._getElement();this._config.isAnimated&&m(t),t.classList.add(Dr),this._emulateAnimation(()=>{b(e)})}hide(e){if(!this._config.isVisible){b(e);return}this._getElement().classList.remove(Dr),this._emulateAnimation(()=>{this.dispose(),b(e)})}dispose(){this._isAppended&&=(M.off(this._element,Or),this._element.remove(),!1)}_getElement(){if(!this._element){let e=document.createElement(`div`);e.className=this._config.className,this._config.isAnimated&&e.classList.add(`fade`),this._element=e}return this._element}_configAfterMerge(e){return e.rootElement=l(e.rootElement),e}_append(){if(this._isAppended)return;let e=this._getElement();this._config.rootElement.append(e),M.on(e,Or,()=>{b(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(e){x(e,this._getElement(),this._config.isAnimated)}}let Mr=`.bs.focustrap`,Nr=`focusin${Mr}`,Pr=`keydown.tab${Mr}`,Fr=`backward`,Ir={autofocus:!0,trapElement:null},Lr={autofocus:`boolean`,trapElement:`element`};class Rr extends de{constructor(e){super(),this._config=this._getConfig(e),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Ir}static get DefaultType(){return Lr}static get NAME(){return`focustrap`}activate(){this._isActive||=(this._config.autofocus&&this._config.trapElement.focus(),M.off(document,Mr),M.on(document,Nr,e=>this._handleFocusin(e)),M.on(document,Pr,e=>this._handleKeydown(e)),!0)}deactivate(){this._isActive&&(this._isActive=!1,M.off(document,Mr))}_handleFocusin(e){let{trapElement:t}=this._config;if(e.target===document||e.target===t||t.contains(e.target))return;let n=F.focusableChildren(t);n.length===0?t.focus():this._lastTabNavDirection===Fr?n[n.length-1].focus():n[0].focus()}_handleKeydown(e){e.key===`Tab`&&(this._lastTabNavDirection=e.shiftKey?Fr:`forward`)}}let zr=`.fixed-top, .fixed-bottom, .is-fixed, .sticky-top`,Br=`.sticky-top`,Vr=`padding-right`,Hr=`margin-right`;class Ur{constructor(){this._element=document.body}getWidth(){let e=document.documentElement.clientWidth;return Math.abs(window.innerWidth-e)}hide(){let e=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Vr,t=>t+e),this._setElementAttributes(zr,Vr,t=>t+e),this._setElementAttributes(Br,Hr,t=>t-e)}reset(){this._resetElementAttributes(this._element,`overflow`),this._resetElementAttributes(this._element,Vr),this._resetElementAttributes(zr,Vr),this._resetElementAttributes(Br,Hr)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,`overflow`),this._element.style.overflow=`hidden`}_setElementAttributes(e,t,n){let r=this.getWidth();this._applyManipulationCallback(e,e=>{if(e!==this._element&&window.innerWidth>e.clientWidth+r)return;this._saveInitialAttribute(e,t);let i=window.getComputedStyle(e).getPropertyValue(t);e.style.setProperty(t,`${n(Number.parseFloat(i))}px`)})}_saveInitialAttribute(e,t){let n=e.style.getPropertyValue(t);n&&N.setDataAttribute(e,t,n)}_resetElementAttributes(e,t){this._applyManipulationCallback(e,e=>{let n=N.getDataAttribute(e,t);if(n===null){e.style.removeProperty(t);return}N.removeDataAttribute(e,t),e.style.setProperty(t,n)})}_applyManipulationCallback(e,t){if(c(e)){t(e);return}for(let n of F.find(e,this._element))t(n)}}let Z=`.bs.modal`,Wr=`hide${Z}`,Gr=`hidePrevented${Z}`,Kr=`hidden${Z}`,qr=`show${Z}`,Jr=`shown${Z}`,Yr=`resize${Z}`,Xr=`click.dismiss${Z}`,Zr=`mousedown.dismiss${Z}`,Qr=`keydown.dismiss${Z}`,$r=`click${Z}.data-api`,ei=`modal-open`,ti=`show`,ni=`modal-static`,ri={backdrop:!0,focus:!0,keyboard:!0},ii={backdrop:`(boolean|string)`,focus:`boolean`,keyboard:`boolean`};class ai extends P{constructor(e,t){super(e,t),this._dialog=F.findOne(`.modal-dialog`,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new Ur,this._addEventListeners()}static get Default(){return ri}static get DefaultType(){return ii}static get NAME(){return`modal`}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||this._isTransitioning||M.trigger(this._element,qr,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(ei),this._adjustDialog(),this._backdrop.show(()=>this._showElement(e)))}hide(){!this._isShown||this._isTransitioning||M.trigger(this._element,Wr).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(ti),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){M.off(window,Z),M.off(this._dialog,Z),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new jr({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Rr({trapElement:this._element})}_showElement(e){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display=`block`,this._element.removeAttribute(`aria-hidden`),this._element.setAttribute(`aria-modal`,!0),this._element.setAttribute(`role`,`dialog`),this._element.scrollTop=0;let t=F.findOne(`.modal-body`,this._dialog);t&&(t.scrollTop=0),m(this._element),this._element.classList.add(ti),this._queueCallback(()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,M.trigger(this._element,Jr,{relatedTarget:e})},this._dialog,this._isAnimated())}_addEventListeners(){M.on(this._element,Qr,e=>{if(e.key===`Escape`){if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}}),M.on(window,Yr,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),M.on(this._element,Zr,e=>{M.one(this._element,Xr,t=>{if(!(this._element!==e.target||this._element!==t.target)){if(this._config.backdrop===`static`){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display=`none`,this._element.setAttribute(`aria-hidden`,!0),this._element.removeAttribute(`aria-modal`),this._element.removeAttribute(`role`),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(ei),this._resetAdjustments(),this._scrollBar.reset(),M.trigger(this._element,Kr)})}_isAnimated(){return this._element.classList.contains(`fade`)}_triggerBackdropTransition(){if(M.trigger(this._element,Gr).defaultPrevented)return;let e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._element.style.overflowY;t===`hidden`||this._element.classList.contains(ni)||(e||(this._element.style.overflowY=`hidden`),this._element.classList.add(ni),this._queueCallback(()=>{this._element.classList.remove(ni),this._queueCallback(()=>{this._element.style.overflowY=t},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){let e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._scrollBar.getWidth(),n=t>0;if(n&&!e){let e=v()?`paddingLeft`:`paddingRight`;this._element.style[e]=`${t}px`}if(!n&&e){let e=v()?`paddingRight`:`paddingLeft`;this._element.style[e]=`${t}px`}}_resetAdjustments(){this._element.style.paddingLeft=``,this._element.style.paddingRight=``}static jQueryInterface(e,t){return this.each(function(){let n=ai.getOrCreateInstance(this,e);if(typeof e==`string`){if(n[e]===void 0)throw TypeError(`No method named "${e}"`);n[e](t)}})}}M.on(document,$r,`[data-bs-toggle="modal"]`,function(e){let t=F.getElementFromSelector(this);[`A`,`AREA`].includes(this.tagName)&&e.preventDefault(),M.one(t,qr,e=>{e.defaultPrevented||M.one(t,Kr,()=>{u(this)&&this.focus()})});let n=F.findOne(`.modal.show`);n&&ai.getInstance(n).hide(),ai.getOrCreateInstance(t).toggle(this)}),pe(ai),y(ai);let Q=`.bs.offcanvas`,oi=`.data-api`,si=`load${Q}${oi}`,ci=`show`,li=`showing`,ui=`hiding`,di=`.offcanvas.show`,fi=`show${Q}`,pi=`shown${Q}`,mi=`hide${Q}`,hi=`hidePrevented${Q}`,gi=`hidden${Q}`,_i=`resize${Q}`,vi=`click${Q}${oi}`,yi=`keydown.dismiss${Q}`,bi={backdrop:!0,keyboard:!0,scroll:!1},xi={backdrop:`(boolean|string)`,keyboard:`boolean`,scroll:`boolean`};class Si extends P{constructor(e,t){super(e,t),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return bi}static get DefaultType(){return xi}static get NAME(){return`offcanvas`}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||M.trigger(this._element,fi,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||new Ur().hide(),this._element.setAttribute(`aria-modal`,!0),this._element.setAttribute(`role`,`dialog`),this._element.classList.add(li),this._queueCallback(()=>{(!this._config.scroll||this._config.backdrop)&&this._focustrap.activate(),this._element.classList.add(ci),this._element.classList.remove(li),M.trigger(this._element,pi,{relatedTarget:e})},this._element,!0))}hide(){!this._isShown||M.trigger(this._element,mi).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(ui),this._backdrop.hide(),this._queueCallback(()=>{this._element.classList.remove(ci,ui),this._element.removeAttribute(`aria-modal`),this._element.removeAttribute(`role`),this._config.scroll||new Ur().reset(),M.trigger(this._element,gi)},this._element,!0))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){let e=()=>{if(this._config.backdrop===`static`){M.trigger(this._element,hi);return}this.hide()},t=!!this._config.backdrop;return new jr({className:`offcanvas-backdrop`,isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?e:null})}_initializeFocusTrap(){return new Rr({trapElement:this._element})}_addEventListeners(){M.on(this._element,yi,e=>{if(e.key===`Escape`){if(this._config.keyboard){this.hide();return}M.trigger(this._element,hi)}})}static jQueryInterface(e){return this.each(function(){let t=Si.getOrCreateInstance(this,e);if(typeof e==`string`){if(t[e]===void 0||e.startsWith(`_`)||e===`constructor`)throw TypeError(`No method named "${e}"`);t[e](this)}})}}M.on(document,vi,`[data-bs-toggle="offcanvas"]`,function(e){let t=F.getElementFromSelector(this);if([`A`,`AREA`].includes(this.tagName)&&e.preventDefault(),d(this))return;M.one(t,gi,()=>{u(this)&&this.focus()});let n=F.findOne(di);n&&n!==t&&Si.getInstance(n).hide(),Si.getOrCreateInstance(t).toggle(this)}),M.on(window,si,()=>{for(let e of F.find(di))Si.getOrCreateInstance(e).show()}),M.on(window,_i,()=>{for(let e of F.find(`[aria-modal][class*=show][class*=offcanvas-]`))getComputedStyle(e).position!==`fixed`&&Si.getOrCreateInstance(e).hide()}),pe(Si),y(Si);let Ci={"*":[`class`,`dir`,`id`,`lang`,`role`,/^aria-[\w-]*$/i],a:[`target`,`href`,`title`,`rel`],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[`src`,`srcset`,`alt`,`title`,`width`,`height`],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},wi=new Set([`background`,`cite`,`href`,`itemtype`,`longdesc`,`poster`,`src`,`xlink:href`]),Ti=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Ei=(e,t)=>{let n=e.nodeName.toLowerCase();return t.includes(n)?wi.has(n)?!!Ti.test(e.nodeValue):!0:t.filter(e=>e instanceof RegExp).some(e=>e.test(n))};function Di(e,t,n){if(!e.length)return e;if(n&&typeof n==`function`)return n(e);let r=new window.DOMParser().parseFromString(e,`text/html`),i=[].concat(...r.body.querySelectorAll(`*`));for(let e of i){let n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}let r=[].concat(...e.attributes),i=[].concat(t[`*`]||[],t[n]||[]);for(let t of r)Ei(t,i)||e.removeAttribute(t.nodeName)}return r.body.innerHTML}let Oi={allowList:Ci,content:{},extraClass:``,html:!1,sanitize:!0,sanitizeFn:null,template:`
`},ki={allowList:`object`,content:`object`,extraClass:`(string|function)`,html:`boolean`,sanitize:`boolean`,sanitizeFn:`(null|function)`,template:`string`},Ai={entry:`(string|element|function|null)`,selector:`(string|element)`};class ji extends de{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Oi}static get DefaultType(){return ki}static get NAME(){return`TemplateFactory`}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){let e=document.createElement(`div`);e.innerHTML=this._maybeSanitize(this._config.template);for(let[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);let t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(` `)),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(let[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},Ai)}_setContent(e,t,n){let r=F.findOne(n,e);if(r){if(t=this._resolvePossibleFunction(t),!t){r.remove();return}if(c(t)){this._putElementInTemplate(l(t),r);return}if(this._config.html){r.innerHTML=this._maybeSanitize(t);return}r.textContent=t}}_maybeSanitize(e){return this._config.sanitize?Di(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return b(e,[void 0,this])}_putElementInTemplate(e,t){if(this._config.html){t.innerHTML=``,t.append(e);return}t.textContent=e.textContent}}let Mi=new Set([`sanitize`,`allowList`,`sanitizeFn`]),Ni=`fade`,Pi=`show`,Fi=`.modal`,Ii=`hide.bs.modal`,Li=`hover`,Ri=`focus`,zi=`click`,Bi={AUTO:`auto`,TOP:`top`,RIGHT:v()?`left`:`right`,BOTTOM:`bottom`,LEFT:v()?`right`:`left`},Vi={allowList:Ci,animation:!0,boundary:`clippingParents`,container:!1,customClass:``,delay:0,fallbackPlacements:[`top`,`right`,`bottom`,`left`],html:!1,offset:[0,6],placement:`top`,popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:``,title:``,trigger:`hover focus`},Hi={allowList:`object`,animation:`boolean`,boundary:`(string|element)`,container:`(string|element|boolean)`,customClass:`(string|function)`,delay:`(number|object)`,fallbackPlacements:`array`,html:`boolean`,offset:`(array|string|function)`,placement:`(string|function)`,popperConfig:`(null|object|function)`,sanitize:`boolean`,sanitizeFn:`(null|function)`,selector:`(string|boolean)`,template:`string`,title:`(string|element|function)`,trigger:`string`};class Ui extends P{constructor(e,t){if(rr===void 0)throw TypeError(`Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)`);super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Vi}static get DefaultType(){return Hi}static get NAME(){return`tooltip`}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){if(this._isEnabled){if(this._isShown()){this._leave();return}this._enter()}}dispose(){clearTimeout(this._timeout),M.off(this._element.closest(Fi),Ii,this._hideModalHandler),this._element.getAttribute(`data-bs-original-title`)&&this._element.setAttribute(`title`,this._element.getAttribute(`data-bs-original-title`)),this._disposePopper(),super.dispose()}show(){if(this._element.style.display===`none`)throw Error(`Please use show on visible elements`);if(!(this._isWithContent()&&this._isEnabled))return;let e=M.trigger(this._element,this.constructor.eventName(`show`)),t=(f(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();let n=this._getTipElement();this._element.setAttribute(`aria-describedby`,n.getAttribute(`id`));let{container:r}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(r.append(n),M.trigger(this._element,this.constructor.eventName(`inserted`))),this._popper=this._createPopper(n),n.classList.add(Pi),`ontouchstart`in document.documentElement)for(let e of[].concat(...document.body.children))M.on(e,`mouseover`,p);this._queueCallback(()=>{M.trigger(this._element,this.constructor.eventName(`shown`)),this._isHovered===!1&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!(!this._isShown()||M.trigger(this._element,this.constructor.eventName(`hide`)).defaultPrevented)){if(this._getTipElement().classList.remove(Pi),`ontouchstart`in document.documentElement)for(let e of[].concat(...document.body.children))M.off(e,`mouseover`,p);this._activeTrigger[zi]=!1,this._activeTrigger[Ri]=!1,this._activeTrigger[Li]=!1,this._isHovered=null,this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute(`aria-describedby`),M.trigger(this._element,this.constructor.eventName(`hidden`)))},this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||=this._createTipElement(this._newContent||this._getContentForTemplate()),this.tip}_createTipElement(e){let t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(Ni,Pi),t.classList.add(`bs-${this.constructor.NAME}-auto`);let n=a(this.constructor.NAME).toString();return t.setAttribute(`id`,n),this._isAnimated()&&t.classList.add(Ni),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new ji({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute(`data-bs-original-title`)}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Ni)}_isShown(){return this.tip&&this.tip.classList.contains(Pi)}_createPopper(e){let t=b(this._config.placement,[this,e,this._element]),n=Bi[t.toUpperCase()];return nr(this._element,e,this._getPopperConfig(n))}_getOffset(){let{offset:e}=this._config;return typeof e==`string`?e.split(`,`).map(e=>Number.parseInt(e,10)):typeof e==`function`?t=>e(t,this._element):e}_resolvePossibleFunction(e){return b(e,[this._element,this._element])}_getPopperConfig(e){let t={placement:e,modifiers:[{name:`flip`,options:{fallbackPlacements:this._config.fallbackPlacements}},{name:`offset`,options:{offset:this._getOffset()}},{name:`preventOverflow`,options:{boundary:this._config.boundary}},{name:`arrow`,options:{element:`.${this.constructor.NAME}-arrow`}},{name:`preSetPlacement`,enabled:!0,phase:`beforeMain`,fn:e=>{this._getTipElement().setAttribute(`data-popper-placement`,e.state.placement)}}]};return{...t,...b(this._config.popperConfig,[void 0,t])}}_setListeners(){let e=this._config.trigger.split(` `);for(let t of e)if(t===`click`)M.on(this._element,this.constructor.eventName(`click`),this._config.selector,e=>{let t=this._initializeOnDelegatedTarget(e);t._activeTrigger[zi]=!(t._isShown()&&t._activeTrigger[zi]),t.toggle()});else if(t!==`manual`){let e=t===Li?this.constructor.eventName(`mouseenter`):this.constructor.eventName(`focusin`),n=t===Li?this.constructor.eventName(`mouseleave`):this.constructor.eventName(`focusout`);M.on(this._element,e,this._config.selector,e=>{let t=this._initializeOnDelegatedTarget(e);t._activeTrigger[e.type===`focusin`?Ri:Li]=!0,t._enter()}),M.on(this._element,n,this._config.selector,e=>{let t=this._initializeOnDelegatedTarget(e);t._activeTrigger[e.type===`focusout`?Ri:Li]=t._element.contains(e.relatedTarget),t._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},M.on(this._element.closest(Fi),Ii,this._hideModalHandler)}_fixTitle(){let e=this._element.getAttribute(`title`);e&&(!this._element.getAttribute(`aria-label`)&&!this._element.textContent.trim()&&this._element.setAttribute(`aria-label`,e),this._element.setAttribute(`data-bs-original-title`,e),this._element.removeAttribute(`title`))}_enter(){if(this._isShown()||this._isHovered){this._isHovered=!0;return}this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show)}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){let t=N.getDataAttributes(this._element);for(let e of Object.keys(t))Mi.has(e)&&delete t[e];return e={...t,...typeof e==`object`&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=e.container===!1?document.body:l(e.container),typeof e.delay==`number`&&(e.delay={show:e.delay,hide:e.delay}),typeof e.title==`number`&&(e.title=e.title.toString()),typeof e.content==`number`&&(e.content=e.content.toString()),e}_getDelegateConfig(){let e={};for(let[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger=`manual`,e}_disposePopper(){this._popper&&=(this._popper.destroy(),null),this.tip&&=(this.tip.remove(),null)}static jQueryInterface(e){return this.each(function(){let t=Ui.getOrCreateInstance(this,e);if(typeof e==`string`){if(t[e]===void 0)throw TypeError(`No method named "${e}"`);t[e]()}})}}y(Ui);let Wi={...Ui.Default,content:``,offset:[0,8],placement:`right`,template:``,trigger:`click`},Gi={...Ui.DefaultType,content:`(null|string|element|function)`};class Ki extends Ui{static get Default(){return Wi}static get DefaultType(){return Gi}static get NAME(){return`popover`}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(e){return this.each(function(){let t=Ki.getOrCreateInstance(this,e);if(typeof e==`string`){if(t[e]===void 0)throw TypeError(`No method named "${e}"`);t[e]()}})}}y(Ki);let qi=`.bs.scrollspy`,Ji=`activate${qi}`,Yi=`click${qi}`,Xi=`load${qi}.data-api`,Zi=`active`,Qi=`[href]`,$i=`.nav-link`,ea=`${$i}, .nav-item > ${$i}, .list-group-item`,ta={offset:null,rootMargin:`0px 0px -25%`,smoothScroll:!1,target:null,threshold:[.1,.5,1]},na={offset:`(number|null)`,rootMargin:`string`,smoothScroll:`boolean`,target:`element`,threshold:`array`};class ra extends P{constructor(e,t){super(e,t),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY===`visible`?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ta}static get DefaultType(){return na}static get NAME(){return`scrollspy`}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(let e of this._observableSections.values())this._observer.observe(e)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(e){return e.target=l(e.target)||document.body,e.rootMargin=e.offset?`${e.offset}px 0px -30%`:e.rootMargin,typeof e.threshold==`string`&&(e.threshold=e.threshold.split(`,`).map(e=>Number.parseFloat(e))),e}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(M.off(this._config.target,Yi),M.on(this._config.target,Yi,Qi,e=>{let t=this._observableSections.get(e.target.hash);if(t){e.preventDefault();let n=this._rootElement||window,r=t.offsetTop-this._element.offsetTop;if(n.scrollTo){n.scrollTo({top:r,behavior:`smooth`});return}n.scrollTop=r}}))}_getNewObserver(){let e={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(e=>this._observerCallback(e),e)}_observerCallback(e){let t=e=>this._targetLinks.get(`#${e.target.id}`),n=e=>{this._previousScrollData.visibleEntryTop=e.target.offsetTop,this._process(t(e))},r=(this._rootElement||document.documentElement).scrollTop,i=r>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=r;for(let a of e){if(!a.isIntersecting){this._activeTarget=null,this._clearActiveClass(t(a));continue}let e=a.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(i&&e){if(n(a),!r)return;continue}!i&&!e&&n(a)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;let e=F.find(Qi,this._config.target);for(let t of e){if(!t.hash||d(t))continue;let e=F.findOne(decodeURI(t.hash),this._element);u(e)&&(this._targetLinks.set(decodeURI(t.hash),t),this._observableSections.set(t.hash,e))}}_process(e){this._activeTarget!==e&&(this._clearActiveClass(this._config.target),this._activeTarget=e,e.classList.add(Zi),this._activateParents(e),M.trigger(this._element,Ji,{relatedTarget:e}))}_activateParents(e){if(e.classList.contains(`dropdown-item`)){F.findOne(`.dropdown-toggle`,e.closest(`.dropdown`)).classList.add(Zi);return}for(let t of F.parents(e,`.nav, .list-group`))for(let e of F.prev(t,ea))e.classList.add(Zi)}_clearActiveClass(e){e.classList.remove(Zi);let t=F.find(`${Qi}.${Zi}`,e);for(let e of t)e.classList.remove(Zi)}static jQueryInterface(e){return this.each(function(){let t=ra.getOrCreateInstance(this,e);if(typeof e==`string`){if(t[e]===void 0||e.startsWith(`_`)||e===`constructor`)throw TypeError(`No method named "${e}"`);t[e]()}})}}M.on(window,Xi,()=>{for(let e of F.find(`[data-bs-spy="scroll"]`))ra.getOrCreateInstance(e)}),y(ra);let ia=`.bs.tab`,aa=`hide${ia}`,oa=`hidden${ia}`,sa=`show${ia}`,ca=`shown${ia}`,la=`click${ia}`,ua=`keydown${ia}`,da=`load${ia}`,fa=`ArrowRight`,pa=`ArrowDown`,ma=`Home`,ha=`active`,ga=`fade`,_a=`show`,va=`.dropdown-toggle`,ya=`:not(${va})`,ba=`.nav-link${ya}, .list-group-item${ya}, [role="tab"]${ya}`,xa=`[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]`,Sa=`${ba}, ${xa}`,Ca=`.${ha}[data-bs-toggle="tab"], .${ha}[data-bs-toggle="pill"], .${ha}[data-bs-toggle="list"]`;class wa extends P{constructor(e){super(e),this._parent=this._element.closest(`.list-group, .nav, [role="tablist"]`),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),M.on(this._element,ua,e=>this._keydown(e)))}static get NAME(){return`tab`}show(){let e=this._element;if(this._elemIsActive(e))return;let t=this._getActiveElem(),n=t?M.trigger(t,aa,{relatedTarget:e}):null;M.trigger(e,sa,{relatedTarget:t}).defaultPrevented||n&&n.defaultPrevented||(this._deactivate(t,e),this._activate(e,t))}_activate(e,t){e&&(e.classList.add(ha),this._activate(F.getElementFromSelector(e)),this._queueCallback(()=>{if(e.getAttribute(`role`)!==`tab`){e.classList.add(_a);return}e.removeAttribute(`tabindex`),e.setAttribute(`aria-selected`,!0),this._toggleDropDown(e,!0),M.trigger(e,ca,{relatedTarget:t})},e,e.classList.contains(ga)))}_deactivate(e,t){e&&(e.classList.remove(ha),e.blur(),this._deactivate(F.getElementFromSelector(e)),this._queueCallback(()=>{if(e.getAttribute(`role`)!==`tab`){e.classList.remove(_a);return}e.setAttribute(`aria-selected`,!1),e.setAttribute(`tabindex`,`-1`),this._toggleDropDown(e,!1),M.trigger(e,oa,{relatedTarget:t})},e,e.classList.contains(ga)))}_keydown(e){if(![`ArrowLeft`,fa,`ArrowUp`,pa,ma,`End`].includes(e.key))return;e.stopPropagation(),e.preventDefault();let t=this._getChildren().filter(e=>!d(e)),n;if([ma,`End`].includes(e.key))n=t[e.key===ma?0:t.length-1];else{let r=[fa,pa].includes(e.key);n=S(t,e.target,r,!0)}n&&(n.focus({preventScroll:!0}),wa.getOrCreateInstance(n).show())}_getChildren(){return F.find(Sa,this._parent)}_getActiveElem(){return this._getChildren().find(e=>this._elemIsActive(e))||null}_setInitialAttributes(e,t){this._setAttributeIfNotExists(e,`role`,`tablist`);for(let e of t)this._setInitialAttributesOnChild(e)}_setInitialAttributesOnChild(e){e=this._getInnerElement(e);let t=this._elemIsActive(e),n=this._getOuterElement(e);e.setAttribute(`aria-selected`,t),n!==e&&this._setAttributeIfNotExists(n,`role`,`presentation`),t||e.setAttribute(`tabindex`,`-1`),this._setAttributeIfNotExists(e,`role`,`tab`),this._setInitialAttributesOnTargetPanel(e)}_setInitialAttributesOnTargetPanel(e){let t=F.getElementFromSelector(e);t&&(this._setAttributeIfNotExists(t,`role`,`tabpanel`),e.id&&this._setAttributeIfNotExists(t,`aria-labelledby`,`${e.id}`))}_toggleDropDown(e,t){let n=this._getOuterElement(e);if(!n.classList.contains(`dropdown`))return;let r=(e,r)=>{let i=F.findOne(e,n);i&&i.classList.toggle(r,t)};r(va,ha),r(`.dropdown-menu`,_a),n.setAttribute(`aria-expanded`,t)}_setAttributeIfNotExists(e,t,n){e.hasAttribute(t)||e.setAttribute(t,n)}_elemIsActive(e){return e.classList.contains(ha)}_getInnerElement(e){return e.matches(Sa)?e:F.findOne(Sa,e)}_getOuterElement(e){return e.closest(`.nav-item, .list-group-item`)||e}static jQueryInterface(e){return this.each(function(){let t=wa.getOrCreateInstance(this);if(typeof e==`string`){if(t[e]===void 0||e.startsWith(`_`)||e===`constructor`)throw TypeError(`No method named "${e}"`);t[e]()}})}}M.on(document,la,xa,function(e){[`A`,`AREA`].includes(this.tagName)&&e.preventDefault(),!d(this)&&wa.getOrCreateInstance(this).show()}),M.on(window,da,()=>{for(let e of F.find(Ca))wa.getOrCreateInstance(e)}),y(wa);let $=`.bs.toast`,Ta=`mouseover${$}`,Ea=`mouseout${$}`,Da=`focusin${$}`,Oa=`focusout${$}`,ka=`hide${$}`,Aa=`hidden${$}`,ja=`show${$}`,Ma=`shown${$}`,Na=`hide`,Pa=`show`,Fa=`showing`,Ia={animation:`boolean`,autohide:`boolean`,delay:`number`},La={animation:!0,autohide:!0,delay:5e3};class Ra extends P{constructor(e,t){super(e,t),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return La}static get DefaultType(){return Ia}static get NAME(){return`toast`}show(){M.trigger(this._element,ja).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add(`fade`),this._element.classList.remove(Na),m(this._element),this._element.classList.add(Pa,Fa),this._queueCallback(()=>{this._element.classList.remove(Fa),M.trigger(this._element,Ma),this._maybeScheduleHide()},this._element,this._config.animation))}hide(){!this.isShown()||M.trigger(this._element,ka).defaultPrevented||(this._element.classList.add(Fa),this._queueCallback(()=>{this._element.classList.add(Na),this._element.classList.remove(Fa,Pa),M.trigger(this._element,Aa)},this._element,this._config.animation))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(Pa),super.dispose()}isShown(){return this._element.classList.contains(Pa)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(e,t){switch(e.type){case`mouseover`:case`mouseout`:this._hasMouseInteraction=t;break;case`focusin`:case`focusout`:this._hasKeyboardInteraction=t;break}if(t){this._clearTimeout();return}let n=e.relatedTarget;this._element===n||this._element.contains(n)||this._maybeScheduleHide()}_setListeners(){M.on(this._element,Ta,e=>this._onInteraction(e,!0)),M.on(this._element,Ea,e=>this._onInteraction(e,!1)),M.on(this._element,Da,e=>this._onInteraction(e,!0)),M.on(this._element,Oa,e=>this._onInteraction(e,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each(function(){let t=Ra.getOrCreateInstance(this,e);if(typeof e==`string`){if(t[e]===void 0)throw TypeError(`No method named "${e}"`);t[e](this)}})}}return pe(Ra),y(Ra),{Alert:_e,Button:L,Carousel:We,Collapse:it,Dropdown:X,Modal:ai,Offcanvas:Si,Popover:Ki,ScrollSpy:ra,Tab:wa,Toast:Ra,Tooltip:Ui}}))}))();function e(e){document.documentElement.setAttribute(`data-theme`,e)}function t(){var t=document.documentElement.getAttribute(`data-theme`)===`light`?`dark`:`light`;e(t),localStorage.setItem(`theme`,t)}window.toggleTheme=t; \ No newline at end of file +/* empty css */((e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports))(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self,n.bootstrap=r())})(e,(function(){let e=new Map,t={set(t,n,r){e.has(t)||e.set(t,new Map);let i=e.get(t);if(!i.has(n)&&i.size!==0){console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(i.keys())[0]}.`);return}i.set(n,r)},get(t,n){return e.has(t)&&e.get(t).get(n)||null},remove(t,n){if(!e.has(t))return;let r=e.get(t);r.delete(n),r.size===0&&e.delete(t)}},n=`transitionend`,r=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),e),i=e=>e==null?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),a=e=>{do e+=Math.floor(Math.random()*1e6);while(document.getElementById(e));return e},o=e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);return!Number.parseFloat(t)&&!Number.parseFloat(n)?0:(t=t.split(`,`)[0],n=n.split(`,`)[0],(Number.parseFloat(t)+Number.parseFloat(n))*1e3)},s=e=>{e.dispatchEvent(new Event(n))},c=e=>!e||typeof e!=`object`?!1:(e.jquery!==void 0&&(e=e[0]),e.nodeType!==void 0),l=e=>c(e)?e.jquery?e[0]:e:typeof e==`string`&&e.length>0?document.querySelector(r(e)):null,u=e=>{if(!c(e)||e.getClientRects().length===0)return!1;let t=getComputedStyle(e).getPropertyValue(`visibility`)===`visible`,n=e.closest(`details:not([open])`);if(!n)return t;if(n!==e){let t=e.closest(`summary`);if(t&&t.parentNode!==n||t===null)return!1}return t},d=e=>!e||e.nodeType!==Node.ELEMENT_NODE||e.classList.contains(`disabled`)?!0:e.disabled===void 0?e.hasAttribute(`disabled`)&&e.getAttribute(`disabled`)!==`false`:e.disabled,f=e=>{if(!document.documentElement.attachShadow)return null;if(typeof e.getRootNode==`function`){let t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?f(e.parentNode):null},p=()=>{},m=e=>{e.offsetHeight},h=()=>window.jQuery&&!document.body.hasAttribute(`data-bs-no-jquery`)?window.jQuery:null,g=[],_=e=>{document.readyState===`loading`?(g.length||document.addEventListener(`DOMContentLoaded`,()=>{for(let e of g)e()}),g.push(e)):e()},v=()=>document.documentElement.dir===`rtl`,y=e=>{_(()=>{let t=h();if(t){let n=e.NAME,r=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=r,e.jQueryInterface)}})},b=(e,t=[],n=e)=>typeof e==`function`?e.call(...t):n,x=(e,t,r=!0)=>{if(!r){b(e);return}let i=o(t)+5,a=!1,c=({target:r})=>{r===t&&(a=!0,t.removeEventListener(n,c),b(e))};t.addEventListener(n,c),setTimeout(()=>{a||s(t)},i)},S=(e,t,n,r)=>{let i=e.length,a=e.indexOf(t);return a===-1?!n&&r?e[i-1]:e[0]:(a+=n?1:-1,r&&(a=(a+i)%i),e[Math.max(0,Math.min(a,i-1))])},C=/[^.]*(?=\..*)\.|.*/,w=/\..*/,T=/::\d+$/,E={},D=1,O={mouseenter:`mouseover`,mouseleave:`mouseout`},k=new Set(`click.dblclick.mouseup.mousedown.contextmenu.mousewheel.DOMMouseScroll.mouseover.mouseout.mousemove.selectstart.selectend.keydown.keypress.keyup.orientationchange.touchstart.touchmove.touchend.touchcancel.pointerdown.pointermove.pointerup.pointerleave.pointercancel.gesturestart.gesturechange.gestureend.focus.blur.change.reset.select.submit.focusin.focusout.load.unload.beforeunload.resize.move.DOMContentLoaded.readystatechange.error.abort.scroll`.split(`.`));function ee(e,t){return t&&`${t}::${D++}`||e.uidEvent||D++}function A(e){let t=ee(e);return e.uidEvent=t,E[t]=E[t]||{},E[t]}function j(e,t){return function n(r){return ce(r,{delegateTarget:e}),n.oneOff&&M.off(e,r.type,t),t.apply(e,[r])}}function te(e,t,n){return function r(i){let a=e.querySelectorAll(t);for(let{target:o}=i;o&&o!==this;o=o.parentNode)for(let s of a)if(s===o)return ce(i,{delegateTarget:o}),r.oneOff&&M.off(e,i.type,t,n),n.apply(o,[i])}}function ne(e,t,n=null){return Object.values(e).find(e=>e.callable===t&&e.delegationSelector===n)}function re(e,t,n){let r=typeof t==`string`,i=r?n:t||n,a=se(e);return k.has(a)||(a=e),[r,i,a]}function ie(e,t,n,r,i){if(typeof t!=`string`||!e)return;let[a,o,s]=re(t,n,r);t in O&&(o=(e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)})(o));let c=A(e),l=c[s]||(c[s]={}),u=ne(l,o,a?n:null);if(u){u.oneOff=u.oneOff&&i;return}let d=ee(o,t.replace(C,``)),f=a?te(e,n,o):j(e,o);f.delegationSelector=a?n:null,f.callable=o,f.oneOff=i,f.uidEvent=d,l[d]=f,e.addEventListener(s,f,a)}function ae(e,t,n,r,i){let a=ne(t[n],r,i);a&&(e.removeEventListener(n,a,!!i),delete t[n][a.uidEvent])}function oe(e,t,n,r){let i=t[n]||{};for(let[a,o]of Object.entries(i))a.includes(r)&&ae(e,t,n,o.callable,o.delegationSelector)}function se(e){return e=e.replace(w,``),O[e]||e}let M={on(e,t,n,r){ie(e,t,n,r,!1)},one(e,t,n,r){ie(e,t,n,r,!0)},off(e,t,n,r){if(typeof t!=`string`||!e)return;let[i,a,o]=re(t,n,r),s=o!==t,c=A(e),l=c[o]||{},u=t.startsWith(`.`);if(a!==void 0){if(!Object.keys(l).length)return;ae(e,c,o,a,i?n:null);return}if(u)for(let n of Object.keys(c))oe(e,c,n,t.slice(1));for(let[n,r]of Object.entries(l)){let i=n.replace(T,``);(!s||t.includes(i))&&ae(e,c,o,r.callable,r.delegationSelector)}},trigger(e,t,n){if(typeof t!=`string`||!e)return null;let r=h(),i=t!==se(t),a=null,o=!0,s=!0,c=!1;i&&r&&(a=r.Event(t,n),r(e).trigger(a),o=!a.isPropagationStopped(),s=!a.isImmediatePropagationStopped(),c=a.isDefaultPrevented());let l=ce(new Event(t,{bubbles:o,cancelable:!0}),n);return c&&l.preventDefault(),s&&e.dispatchEvent(l),l.defaultPrevented&&a&&a.preventDefault(),l}};function ce(e,t={}){for(let[n,r]of Object.entries(t))try{e[n]=r}catch{Object.defineProperty(e,n,{configurable:!0,get(){return r}})}return e}function le(e){if(e===`true`)return!0;if(e===`false`)return!1;if(e===Number(e).toString())return Number(e);if(e===``||e===`null`)return null;if(typeof e!=`string`)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function ue(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}let N={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${ue(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${ue(t)}`)},getDataAttributes(e){if(!e)return{};let t={},n=Object.keys(e.dataset).filter(e=>e.startsWith(`bs`)&&!e.startsWith(`bsConfig`));for(let r of n){let n=r.replace(/^bs/,``);n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=le(e.dataset[r])}return t},getDataAttribute(e,t){return le(e.getAttribute(`data-bs-${ue(t)}`))}};class de{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw Error(`You have to implement the static method "NAME", for each component!`)}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){let n=c(t)?N.getDataAttribute(t,`config`):{};return{...this.constructor.Default,...typeof n==`object`?n:{},...c(t)?N.getDataAttributes(t):{},...typeof e==`object`?e:{}}}_typeCheckConfig(e,t=this.constructor.DefaultType){for(let[n,r]of Object.entries(t)){let t=e[n],a=c(t)?`element`:i(t);if(!new RegExp(r).test(a))throw TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${r}".`)}}}class P extends de{constructor(e,n){super(),e=l(e),e&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),M.off(this._element,this.constructor.EVENT_KEY);for(let e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t,n=!0){x(e,t,n)}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(l(e),this.DATA_KEY)}static getOrCreateInstance(e,t={}){return this.getInstance(e)||new this(e,typeof t==`object`?t:null)}static get VERSION(){return`5.3.8`}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}let fe=e=>{let t=e.getAttribute(`data-bs-target`);if(!t||t===`#`){let n=e.getAttribute(`href`);if(!n||!n.includes(`#`)&&!n.startsWith(`.`))return null;n.includes(`#`)&&!n.startsWith(`#`)&&(n=`#${n.split(`#`)[1]}`),t=n&&n!==`#`?n.trim():null}return t?t.split(`,`).map(e=>r(e)).join(`,`):null},F={find(e,t=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e,t=document.documentElement){return Element.prototype.querySelector.call(t,e)},children(e,t){return[].concat(...e.children).filter(e=>e.matches(t))},parents(e,t){let n=[],r=e.parentNode.closest(t);for(;r;)n.push(r),r=r.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){let t=[`a`,`button`,`input`,`textarea`,`select`,`details`,`[tabindex]`,`[contenteditable="true"]`].map(e=>`${e}:not([tabindex^="-"])`).join(`,`);return this.find(t,e).filter(e=>!d(e)&&u(e))},getSelectorFromElement(e){let t=fe(e);return t&&F.findOne(t)?t:null},getElementFromSelector(e){let t=fe(e);return t?F.findOne(t):null},getMultipleElementsFromSelector(e){let t=fe(e);return t?F.find(t):[]}},pe=(e,t=`hide`)=>{let n=`click.dismiss${e.EVENT_KEY}`,r=e.NAME;M.on(document,n,`[data-bs-dismiss="${r}"]`,function(n){if([`A`,`AREA`].includes(this.tagName)&&n.preventDefault(),d(this))return;let i=F.getElementFromSelector(this)||this.closest(`.${r}`);e.getOrCreateInstance(i)[t]()})},me=`.bs.alert`,he=`close${me}`,ge=`closed${me}`;class _e extends P{static get NAME(){return`alert`}close(){if(M.trigger(this._element,he).defaultPrevented)return;this._element.classList.remove(`show`);let e=this._element.classList.contains(`fade`);this._queueCallback(()=>this._destroyElement(),this._element,e)}_destroyElement(){this._element.remove(),M.trigger(this._element,ge),this.dispose()}static jQueryInterface(e){return this.each(function(){let t=_e.getOrCreateInstance(this);if(typeof e==`string`){if(t[e]===void 0||e.startsWith(`_`)||e===`constructor`)throw TypeError(`No method named "${e}"`);t[e](this)}})}}pe(_e,`close`),y(_e);let I=`[data-bs-toggle="button"]`;class L extends P{static get NAME(){return`button`}toggle(){this._element.setAttribute(`aria-pressed`,this._element.classList.toggle(`active`))}static jQueryInterface(e){return this.each(function(){let t=L.getOrCreateInstance(this);e===`toggle`&&t[e]()})}}M.on(document,`click.bs.button.data-api`,I,e=>{e.preventDefault();let t=e.target.closest(I);L.getOrCreateInstance(t).toggle()}),y(L);let R=`.bs.swipe`,ve=`touchstart${R}`,ye=`touchmove${R}`,be=`touchend${R}`,xe=`pointerdown${R}`,Se=`pointerup${R}`,Ce={endCallback:null,leftCallback:null,rightCallback:null},we={endCallback:`(function|null)`,leftCallback:`(function|null)`,rightCallback:`(function|null)`};class Te extends de{constructor(e,t){super(),this._element=e,!(!e||!Te.isSupported())&&(this._config=this._getConfig(t),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return Ce}static get DefaultType(){return we}static get NAME(){return`swipe`}dispose(){M.off(this._element,R)}_start(e){if(!this._supportPointerEvents){this._deltaX=e.touches[0].clientX;return}this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX)}_end(e){this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX-this._deltaX),this._handleSwipe(),b(this._config.endCallback)}_move(e){this._deltaX=e.touches&&e.touches.length>1?0:e.touches[0].clientX-this._deltaX}_handleSwipe(){let e=Math.abs(this._deltaX);if(e<=40)return;let t=e/this._deltaX;this._deltaX=0,t&&b(t>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(M.on(this._element,xe,e=>this._start(e)),M.on(this._element,Se,e=>this._end(e)),this._element.classList.add(`pointer-event`)):(M.on(this._element,ve,e=>this._start(e)),M.on(this._element,ye,e=>this._move(e)),M.on(this._element,be,e=>this._end(e)))}_eventIsPointerPenTouch(e){return this._supportPointerEvents&&(e.pointerType===`pen`||e.pointerType===`touch`)}static isSupported(){return`ontouchstart`in document.documentElement||navigator.maxTouchPoints>0}}let z=`.bs.carousel`,Ee=`.data-api`,De=`next`,Oe=`prev`,ke=`left`,Ae=`right`,je=`slide${z}`,Me=`slid${z}`,Ne=`keydown${z}`,Pe=`mouseenter${z}`,Fe=`mouseleave${z}`,Ie=`dragstart${z}`,Le=`load${z}${Ee}`,Re=`click${z}${Ee}`,ze=`carousel`,Be=`active`,Ve={ArrowLeft:Ae,ArrowRight:ke},He={interval:5e3,keyboard:!0,pause:`hover`,ride:!1,touch:!0,wrap:!0},Ue={interval:`(number|boolean)`,keyboard:`boolean`,pause:`(string|boolean)`,ride:`(boolean|string)`,touch:`boolean`,wrap:`boolean`};class We extends P{constructor(e,t){super(e,t),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=F.findOne(`.carousel-indicators`,this._element),this._addEventListeners(),this._config.ride===ze&&this.cycle()}static get Default(){return He}static get DefaultType(){return Ue}static get NAME(){return`carousel`}next(){this._slide(De)}nextWhenVisible(){!document.hidden&&u(this._element)&&this.next()}prev(){this._slide(Oe)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){if(this._config.ride){if(this._isSliding){M.one(this._element,Me,()=>this.cycle());return}this.cycle()}}to(e){let t=this._getItems();if(e>t.length-1||e<0)return;if(this._isSliding){M.one(this._element,Me,()=>this.to(e));return}let n=this._getItemIndex(this._getActive());if(n===e)return;let r=e>n?De:Oe;this._slide(r,t[e])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(e){return e.defaultInterval=e.interval,e}_addEventListeners(){this._config.keyboard&&M.on(this._element,Ne,e=>this._keydown(e)),this._config.pause===`hover`&&(M.on(this._element,Pe,()=>this.pause()),M.on(this._element,Fe,()=>this._maybeEnableCycle())),this._config.touch&&Te.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(let e of F.find(`.carousel-item img`,this._element))M.on(e,Ie,e=>e.preventDefault());let e={leftCallback:()=>this._slide(this._directionToOrder(ke)),rightCallback:()=>this._slide(this._directionToOrder(Ae)),endCallback:()=>{this._config.pause===`hover`&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),500+this._config.interval))}};this._swipeHelper=new Te(this._element,e)}_keydown(e){if(/input|textarea/i.test(e.target.tagName))return;let t=Ve[e.key];t&&(e.preventDefault(),this._slide(this._directionToOrder(t)))}_getItemIndex(e){return this._getItems().indexOf(e)}_setActiveIndicatorElement(e){if(!this._indicatorsElement)return;let t=F.findOne(`.active`,this._indicatorsElement);t.classList.remove(Be),t.removeAttribute(`aria-current`);let n=F.findOne(`[data-bs-slide-to="${e}"]`,this._indicatorsElement);n&&(n.classList.add(Be),n.setAttribute(`aria-current`,`true`))}_updateInterval(){let e=this._activeElement||this._getActive();if(!e)return;let t=Number.parseInt(e.getAttribute(`data-bs-interval`),10);this._config.interval=t||this._config.defaultInterval}_slide(e,t=null){if(this._isSliding)return;let n=this._getActive(),r=e===De,i=t||S(this._getItems(),n,r,this._config.wrap);if(i===n)return;let a=this._getItemIndex(i),o=t=>M.trigger(this._element,t,{relatedTarget:i,direction:this._orderToDirection(e),from:this._getItemIndex(n),to:a});if(o(je).defaultPrevented||!n||!i)return;let s=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(a),this._activeElement=i;let c=r?`carousel-item-start`:`carousel-item-end`,l=r?`carousel-item-next`:`carousel-item-prev`;i.classList.add(l),m(i),n.classList.add(c),i.classList.add(c),this._queueCallback(()=>{i.classList.remove(c,l),i.classList.add(Be),n.classList.remove(Be,l,c),this._isSliding=!1,o(Me)},n,this._isAnimated()),s&&this.cycle()}_isAnimated(){return this._element.classList.contains(`slide`)}_getActive(){return F.findOne(`.active.carousel-item`,this._element)}_getItems(){return F.find(`.carousel-item`,this._element)}_clearInterval(){this._interval&&=(clearInterval(this._interval),null)}_directionToOrder(e){return v()?e===ke?Oe:De:e===ke?De:Oe}_orderToDirection(e){return v()?e===Oe?ke:Ae:e===Oe?Ae:ke}static jQueryInterface(e){return this.each(function(){let t=We.getOrCreateInstance(this,e);if(typeof e==`number`){t.to(e);return}if(typeof e==`string`){if(t[e]===void 0||e.startsWith(`_`)||e===`constructor`)throw TypeError(`No method named "${e}"`);t[e]()}})}}M.on(document,Re,`[data-bs-slide], [data-bs-slide-to]`,function(e){let t=F.getElementFromSelector(this);if(!t||!t.classList.contains(ze))return;e.preventDefault();let n=We.getOrCreateInstance(t),r=this.getAttribute(`data-bs-slide-to`);if(r){n.to(r),n._maybeEnableCycle();return}if(N.getDataAttribute(this,`slide`)===`next`){n.next(),n._maybeEnableCycle();return}n.prev(),n._maybeEnableCycle()}),M.on(window,Le,()=>{let e=F.find(`[data-bs-ride="carousel"]`);for(let t of e)We.getOrCreateInstance(t)}),y(We);let Ge=`.bs.collapse`,Ke=`show${Ge}`,qe=`shown${Ge}`,Je=`hide${Ge}`,Ye=`hidden${Ge}`,Xe=`click${Ge}.data-api`,Ze=`show`,Qe=`collapse`,$e=`collapsing`,et=`:scope .${Qe} .${Qe}`,tt=`[data-bs-toggle="collapse"]`,nt={parent:null,toggle:!0},rt={parent:`(null|element)`,toggle:`boolean`};class it extends P{constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];let n=F.find(tt);for(let e of n){let t=F.getSelectorFromElement(e),n=F.find(t).filter(e=>e===this._element);t!==null&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return nt}static get DefaultType(){return rt}static get NAME(){return`collapse`}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(`.collapse.show, .collapse.collapsing`).filter(e=>e!==this._element).map(e=>it.getOrCreateInstance(e,{toggle:!1}))),e.length&&e[0]._isTransitioning||M.trigger(this._element,Ke).defaultPrevented)return;for(let t of e)t.hide();let t=this._getDimension();this._element.classList.remove(Qe),this._element.classList.add($e),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;let n=()=>{this._isTransitioning=!1,this._element.classList.remove($e),this._element.classList.add(Qe,Ze),this._element.style[t]=``,M.trigger(this._element,qe)},r=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback(n,this._element,!0),this._element.style[t]=`${this._element[r]}px`}hide(){if(this._isTransitioning||!this._isShown()||M.trigger(this._element,Je).defaultPrevented)return;let e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,m(this._element),this._element.classList.add($e),this._element.classList.remove(Qe,Ze);for(let e of this._triggerArray){let t=F.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;let t=()=>{this._isTransitioning=!1,this._element.classList.remove($e),this._element.classList.add(Qe),M.trigger(this._element,Ye)};this._element.style[e]=``,this._queueCallback(t,this._element,!0)}_isShown(e=this._element){return e.classList.contains(Ze)}_configAfterMerge(e){return e.toggle=!!e.toggle,e.parent=l(e.parent),e}_getDimension(){return this._element.classList.contains(`collapse-horizontal`)?`width`:`height`}_initializeChildren(){if(!this._config.parent)return;let e=this._getFirstLevelChildren(tt);for(let t of e){let e=F.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){let t=F.find(et,this._config.parent);return F.find(e,this._config.parent).filter(e=>!t.includes(e))}_addAriaAndCollapsedClass(e,t){if(e.length)for(let n of e)n.classList.toggle(`collapsed`,!t),n.setAttribute(`aria-expanded`,t)}static jQueryInterface(e){let t={};return typeof e==`string`&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){let n=it.getOrCreateInstance(this,t);if(typeof e==`string`){if(n[e]===void 0)throw TypeError(`No method named "${e}"`);n[e]()}})}}M.on(document,Xe,tt,function(e){(e.target.tagName===`A`||e.delegateTarget&&e.delegateTarget.tagName===`A`)&&e.preventDefault();for(let e of F.getMultipleElementsFromSelector(this))it.getOrCreateInstance(e,{toggle:!1}).toggle()}),y(it);var B=`top`,V=`bottom`,H=`right`,U=`left`,at=`auto`,ot=[B,V,H,U],st=`start`,ct=`end`,lt=`clippingParents`,ut=`viewport`,dt=`popper`,ft=`reference`,pt=ot.reduce(function(e,t){return e.concat([t+`-`+st,t+`-`+ct])},[]),mt=[].concat(ot,[at]).reduce(function(e,t){return e.concat([t,t+`-`+st,t+`-`+ct])},[]),ht=`beforeRead`,gt=`read`,_t=`afterRead`,vt=`beforeMain`,yt=`main`,bt=`afterMain`,xt=`beforeWrite`,St=`write`,Ct=`afterWrite`,wt=[ht,gt,_t,vt,yt,bt,xt,St,Ct];function W(e){return e?(e.nodeName||``).toLowerCase():null}function G(e){if(e==null)return window;if(e.toString()!==`[object Window]`){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Tt(e){return e instanceof G(e).Element||e instanceof Element}function K(e){return e instanceof G(e).HTMLElement||e instanceof HTMLElement}function Et(e){return typeof ShadowRoot>`u`?!1:e instanceof G(e).ShadowRoot||e instanceof ShadowRoot}function Dt(e){var t=e.state;Object.keys(t.elements).forEach(function(e){var n=t.styles[e]||{},r=t.attributes[e]||{},i=t.elements[e];!K(i)||!W(i)||(Object.assign(i.style,n),Object.keys(r).forEach(function(e){var t=r[e];t===!1?i.removeAttribute(e):i.setAttribute(e,t===!0?``:t)}))})}function Ot(e){var t=e.state,n={popper:{position:t.options.strategy,left:`0`,top:`0`,margin:`0`},arrow:{position:`absolute`},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(e){var r=t.elements[e],i=t.attributes[e]||{},a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce(function(e,t){return e[t]=``,e},{});!K(r)||!W(r)||(Object.assign(r.style,a),Object.keys(i).forEach(function(e){r.removeAttribute(e)}))})}}let kt={name:`applyStyles`,enabled:!0,phase:`write`,fn:Dt,effect:Ot,requires:[`computeStyles`]};function q(e){return e.split(`-`)[0]}var At=Math.max,jt=Math.min,Mt=Math.round;function Nt(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(e){return e.brand+`/`+e.version}).join(` `):navigator.userAgent}function Pt(){return!/^((?!chrome|android).)*safari/i.test(Nt())}function Ft(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r=e.getBoundingClientRect(),i=1,a=1;t&&K(e)&&(i=e.offsetWidth>0&&Mt(r.width)/e.offsetWidth||1,a=e.offsetHeight>0&&Mt(r.height)/e.offsetHeight||1);var o=(Tt(e)?G(e):window).visualViewport,s=!Pt()&&n,c=(r.left+(s&&o?o.offsetLeft:0))/i,l=(r.top+(s&&o?o.offsetTop:0))/a,u=r.width/i,d=r.height/a;return{width:u,height:d,top:l,right:c+u,bottom:l+d,left:c,x:c,y:l}}function It(e){var t=Ft(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function Lt(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Et(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function J(e){return G(e).getComputedStyle(e)}function Rt(e){return[`table`,`td`,`th`].indexOf(W(e))>=0}function Y(e){return((Tt(e)?e.ownerDocument:e.document)||window.document).documentElement}function zt(e){return W(e)===`html`?e:e.assignedSlot||e.parentNode||(Et(e)?e.host:null)||Y(e)}function Bt(e){return!K(e)||J(e).position===`fixed`?null:e.offsetParent}function Vt(e){var t=/firefox/i.test(Nt());if(/Trident/i.test(Nt())&&K(e)&&J(e).position===`fixed`)return null;var n=zt(e);for(Et(n)&&(n=n.host);K(n)&&[`html`,`body`].indexOf(W(n))<0;){var r=J(n);if(r.transform!==`none`||r.perspective!==`none`||r.contain===`paint`||[`transform`,`perspective`].indexOf(r.willChange)!==-1||t&&r.willChange===`filter`||t&&r.filter&&r.filter!==`none`)return n;n=n.parentNode}return null}function Ht(e){for(var t=G(e),n=Bt(e);n&&Rt(n)&&J(n).position===`static`;)n=Bt(n);return n&&(W(n)===`html`||W(n)===`body`&&J(n).position===`static`)?t:n||Vt(e)||t}function Ut(e){return[`top`,`bottom`].indexOf(e)>=0?`x`:`y`}function Wt(e,t,n){return At(e,jt(t,n))}function Gt(e,t,n){var r=Wt(e,t,n);return r>n?n:r}function Kt(){return{top:0,right:0,bottom:0,left:0}}function qt(e){return Object.assign({},Kt(),e)}function Jt(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})}var Yt=function(e,t){return e=typeof e==`function`?e(Object.assign({},t.rects,{placement:t.placement})):e,qt(typeof e==`number`?Jt(e,ot):e)};function Xt(e){var t,n=e.state,r=e.name,i=e.options,a=n.elements.arrow,o=n.modifiersData.popperOffsets,s=q(n.placement),c=Ut(s),l=[U,H].indexOf(s)>=0?`height`:`width`;if(!(!a||!o)){var u=Yt(i.padding,n),d=It(a),f=c===`y`?B:U,p=c===`y`?V:H,m=n.rects.reference[l]+n.rects.reference[c]-o[c]-n.rects.popper[l],h=o[c]-n.rects.reference[c],g=Ht(a),_=g?c===`y`?g.clientHeight||0:g.clientWidth||0:0,v=m/2-h/2,y=u[f],b=_-d[l]-u[p],x=_/2-d[l]/2+v,S=Wt(y,x,b),C=c;n.modifiersData[r]=(t={},t[C]=S,t.centerOffset=S-x,t)}}function Zt(e){var t=e.state,n=e.options.element,r=n===void 0?`[data-popper-arrow]`:n;r!=null&&(typeof r==`string`&&(r=t.elements.popper.querySelector(r),!r)||Lt(t.elements.popper,r)&&(t.elements.arrow=r))}let Qt={name:`arrow`,enabled:!0,phase:`main`,fn:Xt,effect:Zt,requires:[`popperOffsets`],requiresIfExists:[`preventOverflow`]};function $t(e){return e.split(`-`)[1]}var en={top:`auto`,right:`auto`,bottom:`auto`,left:`auto`};function tn(e,t){var n=e.x,r=e.y,i=t.devicePixelRatio||1;return{x:Mt(n*i)/i||0,y:Mt(r*i)/i||0}}function nn(e){var t,n=e.popper,r=e.popperRect,i=e.placement,a=e.variation,o=e.offsets,s=e.position,c=e.gpuAcceleration,l=e.adaptive,u=e.roundOffsets,d=e.isFixed,f=o.x,p=f===void 0?0:f,m=o.y,h=m===void 0?0:m,g=typeof u==`function`?u({x:p,y:h}):{x:p,y:h};p=g.x,h=g.y;var _=o.hasOwnProperty(`x`),v=o.hasOwnProperty(`y`),y=U,b=B,x=window;if(l){var S=Ht(n),C=`clientHeight`,w=`clientWidth`;if(S===G(n)&&(S=Y(n),J(S).position!==`static`&&s===`absolute`&&(C=`scrollHeight`,w=`scrollWidth`)),S=S,i===B||(i===U||i===H)&&a===ct){b=V;var T=d&&S===x&&x.visualViewport?x.visualViewport.height:S[C];h-=T-r.height,h*=c?1:-1}if(i===U||(i===B||i===V)&&a===ct){y=H;var E=d&&S===x&&x.visualViewport?x.visualViewport.width:S[w];p-=E-r.width,p*=c?1:-1}}var D=Object.assign({position:s},l&&en),O=u===!0?tn({x:p,y:h},G(n)):{x:p,y:h};if(p=O.x,h=O.y,c){var k;return Object.assign({},D,(k={},k[b]=v?`0`:``,k[y]=_?`0`:``,k.transform=(x.devicePixelRatio||1)<=1?`translate(`+p+`px, `+h+`px)`:`translate3d(`+p+`px, `+h+`px, 0)`,k))}return Object.assign({},D,(t={},t[b]=v?h+`px`:``,t[y]=_?p+`px`:``,t.transform=``,t))}function rn(e){var t=e.state,n=e.options,r=n.gpuAcceleration,i=r===void 0?!0:r,a=n.adaptive,o=a===void 0?!0:a,s=n.roundOffsets,c=s===void 0?!0:s,l={placement:q(t.placement),variation:$t(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:i,isFixed:t.options.strategy===`fixed`};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,nn(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:o,roundOffsets:c})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,nn(Object.assign({},l,{offsets:t.modifiersData.arrow,position:`absolute`,adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}let an={name:`computeStyles`,enabled:!0,phase:`beforeWrite`,fn:rn,data:{}};var on={passive:!0};function sn(e){var t=e.state,n=e.instance,r=e.options,i=r.scroll,a=i===void 0?!0:i,o=r.resize,s=o===void 0?!0:o,c=G(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return a&&l.forEach(function(e){e.addEventListener(`scroll`,n.update,on)}),s&&c.addEventListener(`resize`,n.update,on),function(){a&&l.forEach(function(e){e.removeEventListener(`scroll`,n.update,on)}),s&&c.removeEventListener(`resize`,n.update,on)}}let cn={name:`eventListeners`,enabled:!0,phase:`write`,fn:function(){},effect:sn,data:{}};var ln={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function un(e){return e.replace(/left|right|bottom|top/g,function(e){return ln[e]})}var dn={start:`end`,end:`start`};function fn(e){return e.replace(/start|end/g,function(e){return dn[e]})}function pn(e){var t=G(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function mn(e){return Ft(Y(e)).left+pn(e).scrollLeft}function hn(e,t){var n=G(e),r=Y(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;var l=Pt();(l||!l&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}return{width:a,height:o,x:s+mn(e),y:c}}function gn(e){var t=Y(e),n=pn(e),r=e.ownerDocument?.body,i=At(t.scrollWidth,t.clientWidth,r?r.scrollWidth:0,r?r.clientWidth:0),a=At(t.scrollHeight,t.clientHeight,r?r.scrollHeight:0,r?r.clientHeight:0),o=-n.scrollLeft+mn(e),s=-n.scrollTop;return J(r||t).direction===`rtl`&&(o+=At(t.clientWidth,r?r.clientWidth:0)-i),{width:i,height:a,x:o,y:s}}function _n(e){var t=J(e),n=t.overflow,r=t.overflowX,i=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+i+r)}function vn(e){return[`html`,`body`,`#document`].indexOf(W(e))>=0?e.ownerDocument.body:K(e)&&_n(e)?e:vn(zt(e))}function yn(e,t){t===void 0&&(t=[]);var n=vn(e),r=n===e.ownerDocument?.body,i=G(n),a=r?[i].concat(i.visualViewport||[],_n(n)?n:[]):n,o=t.concat(a);return r?o:o.concat(yn(zt(a)))}function bn(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function xn(e,t){var n=Ft(e,!1,t===`fixed`);return n.top+=e.clientTop,n.left+=e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function Sn(e,t,n){return t===ut?bn(hn(e,n)):Tt(t)?xn(t,n):bn(gn(Y(e)))}function Cn(e){var t=yn(zt(e)),n=[`absolute`,`fixed`].indexOf(J(e).position)>=0&&K(e)?Ht(e):e;return Tt(n)?t.filter(function(e){return Tt(e)&&Lt(e,n)&&W(e)!==`body`}):[]}function wn(e,t,n,r){var i=t===`clippingParents`?Cn(e):[].concat(t),a=[].concat(i,[n]),o=a[0],s=a.reduce(function(t,n){var i=Sn(e,n,r);return t.top=At(i.top,t.top),t.right=jt(i.right,t.right),t.bottom=jt(i.bottom,t.bottom),t.left=At(i.left,t.left),t},Sn(e,o,r));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}function Tn(e){var t=e.reference,n=e.element,r=e.placement,i=r?q(r):null,a=r?$t(r):null,o=t.x+t.width/2-n.width/2,s=t.y+t.height/2-n.height/2,c;switch(i){case B:c={x:o,y:t.y-n.height};break;case V:c={x:o,y:t.y+t.height};break;case H:c={x:t.x+t.width,y:s};break;case U:c={x:t.x-n.width,y:s};break;default:c={x:t.x,y:t.y}}var l=i?Ut(i):null;if(l!=null){var u=l===`y`?`height`:`width`;switch(a){case st:c[l]=c[l]-(t[u]/2-n[u]/2);break;case ct:c[l]=c[l]+(t[u]/2-n[u]/2);break}}return c}function En(e,t){t===void 0&&(t={});var n=t,r=n.placement,i=r===void 0?e.placement:r,a=n.strategy,o=a===void 0?e.strategy:a,s=n.boundary,c=s===void 0?lt:s,l=n.rootBoundary,u=l===void 0?ut:l,d=n.elementContext,f=d===void 0?dt:d,p=n.altBoundary,m=p===void 0?!1:p,h=n.padding,g=h===void 0?0:h,_=qt(typeof g==`number`?Jt(g,ot):g),v=f===dt?ft:dt,y=e.rects.popper,b=e.elements[m?v:f],x=wn(Tt(b)?b:b.contextElement||Y(e.elements.popper),c,u,o),S=Ft(e.elements.reference),C=Tn({reference:S,element:y,placement:i}),w=bn(Object.assign({},y,C)),T=f===dt?w:S,E={top:x.top-T.top+_.top,bottom:T.bottom-x.bottom+_.bottom,left:x.left-T.left+_.left,right:T.right-x.right+_.right},D=e.modifiersData.offset;if(f===dt&&D){var O=D[i];Object.keys(E).forEach(function(e){var t=[H,V].indexOf(e)>=0?1:-1,n=[B,V].indexOf(e)>=0?`y`:`x`;E[e]+=O[n]*t})}return E}function Dn(e,t){t===void 0&&(t={});var n=t,r=n.placement,i=n.boundary,a=n.rootBoundary,o=n.padding,s=n.flipVariations,c=n.allowedAutoPlacements,l=c===void 0?mt:c,u=$t(r),d=u?s?pt:pt.filter(function(e){return $t(e)===u}):ot,f=d.filter(function(e){return l.indexOf(e)>=0});f.length===0&&(f=d);var p=f.reduce(function(t,n){return t[n]=En(e,{placement:n,boundary:i,rootBoundary:a,padding:o})[q(n)],t},{});return Object.keys(p).sort(function(e,t){return p[e]-p[t]})}function On(e){if(q(e)===at)return[];var t=un(e);return[fn(e),t,fn(t)]}function kn(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var i=n.mainAxis,a=i===void 0?!0:i,o=n.altAxis,s=o===void 0?!0:o,c=n.fallbackPlacements,l=n.padding,u=n.boundary,d=n.rootBoundary,f=n.altBoundary,p=n.flipVariations,m=p===void 0?!0:p,h=n.allowedAutoPlacements,g=t.options.placement,_=q(g)===g,v=c||(_||!m?[un(g)]:On(g)),y=[g].concat(v).reduce(function(e,n){return e.concat(q(n)===at?Dn(t,{placement:n,boundary:u,rootBoundary:d,padding:l,flipVariations:m,allowedAutoPlacements:h}):n)},[]),b=t.rects.reference,x=t.rects.popper,S=new Map,C=!0,w=y[0],T=0;T=0,ee=k?`width`:`height`,A=En(t,{placement:E,boundary:u,rootBoundary:d,altBoundary:f,padding:l}),j=k?O?H:U:O?V:B;b[ee]>x[ee]&&(j=un(j));var te=un(j),ne=[];if(a&&ne.push(A[D]<=0),s&&ne.push(A[j]<=0,A[te]<=0),ne.every(function(e){return e})){w=E,C=!1;break}S.set(E,ne)}if(C)for(var re=m?3:1,ie=function(e){var t=y.find(function(t){var n=S.get(t);if(n)return n.slice(0,e).every(function(e){return e})});if(t)return w=t,`break`},ae=re;ae>0&&ie(ae)!==`break`;ae--);t.placement!==w&&(t.modifiersData[r]._skip=!0,t.placement=w,t.reset=!0)}}let An={name:`flip`,enabled:!0,phase:`main`,fn:kn,requiresIfExists:[`offset`],data:{_skip:!1}};function jn(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function Mn(e){return[B,H,V,U].some(function(t){return e[t]>=0})}function Nn(e){var t=e.state,n=e.name,r=t.rects.reference,i=t.rects.popper,a=t.modifiersData.preventOverflow,o=En(t,{elementContext:`reference`}),s=En(t,{altBoundary:!0}),c=jn(o,r),l=jn(s,i,a),u=Mn(c),d=Mn(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":d})}let Pn={name:`hide`,enabled:!0,phase:`main`,requiresIfExists:[`preventOverflow`],fn:Nn};function Fn(e,t,n){var r=q(e),i=[U,B].indexOf(r)>=0?-1:1,a=typeof n==`function`?n(Object.assign({},t,{placement:e})):n,o=a[0],s=a[1];return o||=0,s=(s||0)*i,[U,H].indexOf(r)>=0?{x:s,y:o}:{x:o,y:s}}function In(e){var t=e.state,n=e.options,r=e.name,i=n.offset,a=i===void 0?[0,0]:i,o=mt.reduce(function(e,n){return e[n]=Fn(n,t.rects,a),e},{}),s=o[t.placement],c=s.x,l=s.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[r]=o}let Ln={name:`offset`,enabled:!0,phase:`main`,requires:[`popperOffsets`],fn:In};function Rn(e){var t=e.state,n=e.name;t.modifiersData[n]=Tn({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})}let zn={name:`popperOffsets`,enabled:!0,phase:`read`,fn:Rn,data:{}};function Bn(e){return e===`x`?`y`:`x`}function Vn(e){var t=e.state,n=e.options,r=e.name,i=n.mainAxis,a=i===void 0?!0:i,o=n.altAxis,s=o===void 0?!1:o,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,d=n.padding,f=n.tether,p=f===void 0?!0:f,m=n.tetherOffset,h=m===void 0?0:m,g=En(t,{boundary:c,rootBoundary:l,padding:d,altBoundary:u}),_=q(t.placement),v=$t(t.placement),y=!v,b=Ut(_),x=Bn(b),S=t.modifiersData.popperOffsets,C=t.rects.reference,w=t.rects.popper,T=typeof h==`function`?h(Object.assign({},t.rects,{placement:t.placement})):h,E=typeof T==`number`?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),D=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,O={x:0,y:0};if(S){if(a){var k=b===`y`?B:U,ee=b===`y`?V:H,A=b===`y`?`height`:`width`,j=S[b],te=j+g[k],ne=j-g[ee],re=p?-w[A]/2:0,ie=v===st?C[A]:w[A],ae=v===st?-w[A]:-C[A],oe=t.elements.arrow,se=p&&oe?It(oe):{width:0,height:0},M=t.modifiersData[`arrow#persistent`]?t.modifiersData[`arrow#persistent`].padding:Kt(),ce=M[k],le=M[ee],ue=Wt(0,C[A],se[A]),N=y?C[A]/2-re-ue-ce-E.mainAxis:ie-ue-ce-E.mainAxis,de=y?-C[A]/2+re+ue+le+E.mainAxis:ae+ue+le+E.mainAxis,P=t.elements.arrow&&Ht(t.elements.arrow),fe=P?b===`y`?P.clientTop||0:P.clientLeft||0:0,F=D?.[b]??0,pe=j+N-F-fe,me=j+de-F,he=Wt(p?jt(te,pe):te,j,p?At(ne,me):ne);S[b]=he,O[b]=he-j}if(s){var ge=b===`x`?B:U,_e=b===`x`?V:H,I=S[x],L=x===`y`?`height`:`width`,R=I+g[ge],ve=I-g[_e],ye=[B,U].indexOf(_)!==-1,be=D?.[x]??0,xe=ye?R:I-C[L]-w[L]-be+E.altAxis,Se=ye?I+C[L]+w[L]-be-E.altAxis:ve,Ce=p&&ye?Gt(xe,I,Se):Wt(p?xe:R,I,p?Se:ve);S[x]=Ce,O[x]=Ce-I}t.modifiersData[r]=O}}let Hn={name:`preventOverflow`,enabled:!0,phase:`main`,fn:Vn,requiresIfExists:[`offset`]};function Un(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function Wn(e){return e===G(e)||!K(e)?pn(e):Un(e)}function Gn(e){var t=e.getBoundingClientRect(),n=Mt(t.width)/e.offsetWidth||1,r=Mt(t.height)/e.offsetHeight||1;return n!==1||r!==1}function Kn(e,t,n){n===void 0&&(n=!1);var r=K(t),i=K(t)&&Gn(t),a=Y(t),o=Ft(e,i,n),s={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(r||!r&&!n)&&((W(t)!==`body`||_n(a))&&(s=Wn(t)),K(t)?(c=Ft(t,!0),c.x+=t.clientLeft,c.y+=t.clientTop):a&&(c.x=mn(a))),{x:o.left+s.scrollLeft-c.x,y:o.top+s.scrollTop-c.y,width:o.width,height:o.height}}function qn(e){var t=new Map,n=new Set,r=[];e.forEach(function(e){t.set(e.name,e)});function i(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach(function(e){if(!n.has(e)){var r=t.get(e);r&&i(r)}}),r.push(e)}return e.forEach(function(e){n.has(e.name)||i(e)}),r}function Jn(e){var t=qn(e);return wt.reduce(function(e,n){return e.concat(t.filter(function(e){return e.phase===n}))},[])}function Yn(e){var t;return function(){return t||=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})}),t}}function Xn(e){var t=e.reduce(function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e},{});return Object.keys(t).map(function(e){return t[e]})}var Zn={placement:`bottom`,modifiers:[],strategy:`absolute`};function Qn(){return![...arguments].some(function(e){return!(e&&typeof e.getBoundingClientRect==`function`)})}function $n(e){e===void 0&&(e={});var t=e,n=t.defaultModifiers,r=n===void 0?[]:n,i=t.defaultOptions,a=i===void 0?Zn:i;return function(e,t,n){n===void 0&&(n=a);var i={placement:`bottom`,orderedModifiers:[],options:Object.assign({},Zn,a),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},o=[],s=!1,c={state:i,setOptions:function(n){var o=typeof n==`function`?n(i.options):n;u(),i.options=Object.assign({},a,i.options,o),i.scrollParents={reference:Tt(e)?yn(e):e.contextElement?yn(e.contextElement):[],popper:yn(t)};var s=Jn(Xn([].concat(r,i.options.modifiers)));return i.orderedModifiers=s.filter(function(e){return e.enabled}),l(),c.update()},forceUpdate:function(){if(!s){var e=i.elements,t=e.reference,n=e.popper;if(Qn(t,n)){i.rects={reference:Kn(t,Ht(n),i.options.strategy===`fixed`),popper:It(n)},i.reset=!1,i.placement=i.options.placement,i.orderedModifiers.forEach(function(e){return i.modifiersData[e.name]=Object.assign({},e.data)});for(var r=0;rNumber.parseInt(e,10)):typeof e==`function`?t=>e(t,this._element):e}_getPopperConfig(){let e={placement:this._getPlacement(),modifiers:[{name:`preventOverflow`,options:{boundary:this._config.boundary}},{name:`offset`,options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display===`static`)&&(N.setDataAttribute(this._menu,`popper`,`static`),e.modifiers=[{name:`applyStyles`,enabled:!1}]),{...e,...b(this._config.popperConfig,[void 0,e])}}_selectMenuItem({key:e,target:t}){let n=F.find(`.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)`,this._menu).filter(e=>u(e));n.length&&S(n,t,e===or,!n.includes(t)).focus()}static jQueryInterface(e){return this.each(function(){let t=X.getOrCreateInstance(this,e);if(typeof e==`string`){if(t[e]===void 0)throw TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(e.button===2||e.type===`keyup`&&e.key!==`Tab`)return;let t=F.find(gr);for(let n of t){let t=X.getInstance(n);if(!t||t._config.autoClose===!1)continue;let r=e.composedPath(),i=r.includes(t._menu);if(r.includes(t._element)||t._config.autoClose===`inside`&&!i||t._config.autoClose===`outside`&&i||t._menu.contains(e.target)&&(e.type===`keyup`&&e.key===`Tab`||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;let a={relatedTarget:t._element};e.type===`click`&&(a.clickEvent=e),t._completeHide(a)}}static dataApiKeydownHandler(e){let t=/input|textarea/i.test(e.target.tagName),n=e.key===`Escape`,r=[`ArrowUp`,or].includes(e.key);if(!r&&!n||t&&!n)return;e.preventDefault();let i=this.matches(hr)?this:F.prev(this,hr)[0]||F.next(this,hr)[0]||F.findOne(hr,e.delegateTarget.parentNode),a=X.getOrCreateInstance(i);if(r){e.stopPropagation(),a.show(),a._selectMenuItem(e);return}a._isShown()&&(e.stopPropagation(),a.hide(),i.focus())}}M.on(document,fr,hr,X.dataApiKeydownHandler),M.on(document,fr,_r,X.dataApiKeydownHandler),M.on(document,dr,X.clearMenus),M.on(document,pr,X.clearMenus),M.on(document,dr,hr,function(e){e.preventDefault(),X.getOrCreateInstance(this).toggle()}),y(X);let Er=`backdrop`,Dr=`show`,Or=`mousedown.bs.${Er}`,kr={className:`modal-backdrop`,clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:`body`},Ar={className:`string`,clickCallback:`(function|null)`,isAnimated:`boolean`,isVisible:`boolean`,rootElement:`(element|string)`};class jr extends de{constructor(e){super(),this._config=this._getConfig(e),this._isAppended=!1,this._element=null}static get Default(){return kr}static get DefaultType(){return Ar}static get NAME(){return Er}show(e){if(!this._config.isVisible){b(e);return}this._append();let t=this._getElement();this._config.isAnimated&&m(t),t.classList.add(Dr),this._emulateAnimation(()=>{b(e)})}hide(e){if(!this._config.isVisible){b(e);return}this._getElement().classList.remove(Dr),this._emulateAnimation(()=>{this.dispose(),b(e)})}dispose(){this._isAppended&&=(M.off(this._element,Or),this._element.remove(),!1)}_getElement(){if(!this._element){let e=document.createElement(`div`);e.className=this._config.className,this._config.isAnimated&&e.classList.add(`fade`),this._element=e}return this._element}_configAfterMerge(e){return e.rootElement=l(e.rootElement),e}_append(){if(this._isAppended)return;let e=this._getElement();this._config.rootElement.append(e),M.on(e,Or,()=>{b(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(e){x(e,this._getElement(),this._config.isAnimated)}}let Mr=`.bs.focustrap`,Nr=`focusin${Mr}`,Pr=`keydown.tab${Mr}`,Fr=`backward`,Ir={autofocus:!0,trapElement:null},Lr={autofocus:`boolean`,trapElement:`element`};class Rr extends de{constructor(e){super(),this._config=this._getConfig(e),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Ir}static get DefaultType(){return Lr}static get NAME(){return`focustrap`}activate(){this._isActive||=(this._config.autofocus&&this._config.trapElement.focus(),M.off(document,Mr),M.on(document,Nr,e=>this._handleFocusin(e)),M.on(document,Pr,e=>this._handleKeydown(e)),!0)}deactivate(){this._isActive&&(this._isActive=!1,M.off(document,Mr))}_handleFocusin(e){let{trapElement:t}=this._config;if(e.target===document||e.target===t||t.contains(e.target))return;let n=F.focusableChildren(t);n.length===0?t.focus():this._lastTabNavDirection===Fr?n[n.length-1].focus():n[0].focus()}_handleKeydown(e){e.key===`Tab`&&(this._lastTabNavDirection=e.shiftKey?Fr:`forward`)}}let zr=`.fixed-top, .fixed-bottom, .is-fixed, .sticky-top`,Br=`.sticky-top`,Vr=`padding-right`,Hr=`margin-right`;class Ur{constructor(){this._element=document.body}getWidth(){let e=document.documentElement.clientWidth;return Math.abs(window.innerWidth-e)}hide(){let e=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Vr,t=>t+e),this._setElementAttributes(zr,Vr,t=>t+e),this._setElementAttributes(Br,Hr,t=>t-e)}reset(){this._resetElementAttributes(this._element,`overflow`),this._resetElementAttributes(this._element,Vr),this._resetElementAttributes(zr,Vr),this._resetElementAttributes(Br,Hr)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,`overflow`),this._element.style.overflow=`hidden`}_setElementAttributes(e,t,n){let r=this.getWidth();this._applyManipulationCallback(e,e=>{if(e!==this._element&&window.innerWidth>e.clientWidth+r)return;this._saveInitialAttribute(e,t);let i=window.getComputedStyle(e).getPropertyValue(t);e.style.setProperty(t,`${n(Number.parseFloat(i))}px`)})}_saveInitialAttribute(e,t){let n=e.style.getPropertyValue(t);n&&N.setDataAttribute(e,t,n)}_resetElementAttributes(e,t){this._applyManipulationCallback(e,e=>{let n=N.getDataAttribute(e,t);if(n===null){e.style.removeProperty(t);return}N.removeDataAttribute(e,t),e.style.setProperty(t,n)})}_applyManipulationCallback(e,t){if(c(e)){t(e);return}for(let n of F.find(e,this._element))t(n)}}let Z=`.bs.modal`,Wr=`hide${Z}`,Gr=`hidePrevented${Z}`,Kr=`hidden${Z}`,qr=`show${Z}`,Jr=`shown${Z}`,Yr=`resize${Z}`,Xr=`click.dismiss${Z}`,Zr=`mousedown.dismiss${Z}`,Qr=`keydown.dismiss${Z}`,$r=`click${Z}.data-api`,ei=`modal-open`,ti=`show`,ni=`modal-static`,ri={backdrop:!0,focus:!0,keyboard:!0},ii={backdrop:`(boolean|string)`,focus:`boolean`,keyboard:`boolean`};class ai extends P{constructor(e,t){super(e,t),this._dialog=F.findOne(`.modal-dialog`,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new Ur,this._addEventListeners()}static get Default(){return ri}static get DefaultType(){return ii}static get NAME(){return`modal`}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||this._isTransitioning||M.trigger(this._element,qr,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(ei),this._adjustDialog(),this._backdrop.show(()=>this._showElement(e)))}hide(){!this._isShown||this._isTransitioning||M.trigger(this._element,Wr).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(ti),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){M.off(window,Z),M.off(this._dialog,Z),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new jr({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Rr({trapElement:this._element})}_showElement(e){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display=`block`,this._element.removeAttribute(`aria-hidden`),this._element.setAttribute(`aria-modal`,!0),this._element.setAttribute(`role`,`dialog`),this._element.scrollTop=0;let t=F.findOne(`.modal-body`,this._dialog);t&&(t.scrollTop=0),m(this._element),this._element.classList.add(ti),this._queueCallback(()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,M.trigger(this._element,Jr,{relatedTarget:e})},this._dialog,this._isAnimated())}_addEventListeners(){M.on(this._element,Qr,e=>{if(e.key===`Escape`){if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}}),M.on(window,Yr,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),M.on(this._element,Zr,e=>{M.one(this._element,Xr,t=>{if(!(this._element!==e.target||this._element!==t.target)){if(this._config.backdrop===`static`){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display=`none`,this._element.setAttribute(`aria-hidden`,!0),this._element.removeAttribute(`aria-modal`),this._element.removeAttribute(`role`),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(ei),this._resetAdjustments(),this._scrollBar.reset(),M.trigger(this._element,Kr)})}_isAnimated(){return this._element.classList.contains(`fade`)}_triggerBackdropTransition(){if(M.trigger(this._element,Gr).defaultPrevented)return;let e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._element.style.overflowY;t===`hidden`||this._element.classList.contains(ni)||(e||(this._element.style.overflowY=`hidden`),this._element.classList.add(ni),this._queueCallback(()=>{this._element.classList.remove(ni),this._queueCallback(()=>{this._element.style.overflowY=t},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){let e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._scrollBar.getWidth(),n=t>0;if(n&&!e){let e=v()?`paddingLeft`:`paddingRight`;this._element.style[e]=`${t}px`}if(!n&&e){let e=v()?`paddingRight`:`paddingLeft`;this._element.style[e]=`${t}px`}}_resetAdjustments(){this._element.style.paddingLeft=``,this._element.style.paddingRight=``}static jQueryInterface(e,t){return this.each(function(){let n=ai.getOrCreateInstance(this,e);if(typeof e==`string`){if(n[e]===void 0)throw TypeError(`No method named "${e}"`);n[e](t)}})}}M.on(document,$r,`[data-bs-toggle="modal"]`,function(e){let t=F.getElementFromSelector(this);[`A`,`AREA`].includes(this.tagName)&&e.preventDefault(),M.one(t,qr,e=>{e.defaultPrevented||M.one(t,Kr,()=>{u(this)&&this.focus()})});let n=F.findOne(`.modal.show`);n&&ai.getInstance(n).hide(),ai.getOrCreateInstance(t).toggle(this)}),pe(ai),y(ai);let Q=`.bs.offcanvas`,oi=`.data-api`,si=`load${Q}${oi}`,ci=`show`,li=`showing`,ui=`hiding`,di=`.offcanvas.show`,fi=`show${Q}`,pi=`shown${Q}`,mi=`hide${Q}`,hi=`hidePrevented${Q}`,gi=`hidden${Q}`,_i=`resize${Q}`,vi=`click${Q}${oi}`,yi=`keydown.dismiss${Q}`,bi={backdrop:!0,keyboard:!0,scroll:!1},xi={backdrop:`(boolean|string)`,keyboard:`boolean`,scroll:`boolean`};class Si extends P{constructor(e,t){super(e,t),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return bi}static get DefaultType(){return xi}static get NAME(){return`offcanvas`}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||M.trigger(this._element,fi,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||new Ur().hide(),this._element.setAttribute(`aria-modal`,!0),this._element.setAttribute(`role`,`dialog`),this._element.classList.add(li),this._queueCallback(()=>{(!this._config.scroll||this._config.backdrop)&&this._focustrap.activate(),this._element.classList.add(ci),this._element.classList.remove(li),M.trigger(this._element,pi,{relatedTarget:e})},this._element,!0))}hide(){!this._isShown||M.trigger(this._element,mi).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(ui),this._backdrop.hide(),this._queueCallback(()=>{this._element.classList.remove(ci,ui),this._element.removeAttribute(`aria-modal`),this._element.removeAttribute(`role`),this._config.scroll||new Ur().reset(),M.trigger(this._element,gi)},this._element,!0))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){let e=()=>{if(this._config.backdrop===`static`){M.trigger(this._element,hi);return}this.hide()},t=!!this._config.backdrop;return new jr({className:`offcanvas-backdrop`,isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?e:null})}_initializeFocusTrap(){return new Rr({trapElement:this._element})}_addEventListeners(){M.on(this._element,yi,e=>{if(e.key===`Escape`){if(this._config.keyboard){this.hide();return}M.trigger(this._element,hi)}})}static jQueryInterface(e){return this.each(function(){let t=Si.getOrCreateInstance(this,e);if(typeof e==`string`){if(t[e]===void 0||e.startsWith(`_`)||e===`constructor`)throw TypeError(`No method named "${e}"`);t[e](this)}})}}M.on(document,vi,`[data-bs-toggle="offcanvas"]`,function(e){let t=F.getElementFromSelector(this);if([`A`,`AREA`].includes(this.tagName)&&e.preventDefault(),d(this))return;M.one(t,gi,()=>{u(this)&&this.focus()});let n=F.findOne(di);n&&n!==t&&Si.getInstance(n).hide(),Si.getOrCreateInstance(t).toggle(this)}),M.on(window,si,()=>{for(let e of F.find(di))Si.getOrCreateInstance(e).show()}),M.on(window,_i,()=>{for(let e of F.find(`[aria-modal][class*=show][class*=offcanvas-]`))getComputedStyle(e).position!==`fixed`&&Si.getOrCreateInstance(e).hide()}),pe(Si),y(Si);let Ci={"*":[`class`,`dir`,`id`,`lang`,`role`,/^aria-[\w-]*$/i],a:[`target`,`href`,`title`,`rel`],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[`src`,`srcset`,`alt`,`title`,`width`,`height`],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},wi=new Set([`background`,`cite`,`href`,`itemtype`,`longdesc`,`poster`,`src`,`xlink:href`]),Ti=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Ei=(e,t)=>{let n=e.nodeName.toLowerCase();return t.includes(n)?wi.has(n)?!!Ti.test(e.nodeValue):!0:t.filter(e=>e instanceof RegExp).some(e=>e.test(n))};function Di(e,t,n){if(!e.length)return e;if(n&&typeof n==`function`)return n(e);let r=new window.DOMParser().parseFromString(e,`text/html`),i=[].concat(...r.body.querySelectorAll(`*`));for(let e of i){let n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}let r=[].concat(...e.attributes),i=[].concat(t[`*`]||[],t[n]||[]);for(let t of r)Ei(t,i)||e.removeAttribute(t.nodeName)}return r.body.innerHTML}let Oi={allowList:Ci,content:{},extraClass:``,html:!1,sanitize:!0,sanitizeFn:null,template:`
`},ki={allowList:`object`,content:`object`,extraClass:`(string|function)`,html:`boolean`,sanitize:`boolean`,sanitizeFn:`(null|function)`,template:`string`},Ai={entry:`(string|element|function|null)`,selector:`(string|element)`};class ji extends de{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Oi}static get DefaultType(){return ki}static get NAME(){return`TemplateFactory`}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){let e=document.createElement(`div`);e.innerHTML=this._maybeSanitize(this._config.template);for(let[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);let t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(` `)),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(let[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},Ai)}_setContent(e,t,n){let r=F.findOne(n,e);if(r){if(t=this._resolvePossibleFunction(t),!t){r.remove();return}if(c(t)){this._putElementInTemplate(l(t),r);return}if(this._config.html){r.innerHTML=this._maybeSanitize(t);return}r.textContent=t}}_maybeSanitize(e){return this._config.sanitize?Di(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return b(e,[void 0,this])}_putElementInTemplate(e,t){if(this._config.html){t.innerHTML=``,t.append(e);return}t.textContent=e.textContent}}let Mi=new Set([`sanitize`,`allowList`,`sanitizeFn`]),Ni=`fade`,Pi=`show`,Fi=`.modal`,Ii=`hide.bs.modal`,Li=`hover`,Ri=`focus`,zi=`click`,Bi={AUTO:`auto`,TOP:`top`,RIGHT:v()?`left`:`right`,BOTTOM:`bottom`,LEFT:v()?`right`:`left`},Vi={allowList:Ci,animation:!0,boundary:`clippingParents`,container:!1,customClass:``,delay:0,fallbackPlacements:[`top`,`right`,`bottom`,`left`],html:!1,offset:[0,6],placement:`top`,popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:``,title:``,trigger:`hover focus`},Hi={allowList:`object`,animation:`boolean`,boundary:`(string|element)`,container:`(string|element|boolean)`,customClass:`(string|function)`,delay:`(number|object)`,fallbackPlacements:`array`,html:`boolean`,offset:`(array|string|function)`,placement:`(string|function)`,popperConfig:`(null|object|function)`,sanitize:`boolean`,sanitizeFn:`(null|function)`,selector:`(string|boolean)`,template:`string`,title:`(string|element|function)`,trigger:`string`};class Ui extends P{constructor(e,t){if(rr===void 0)throw TypeError(`Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)`);super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Vi}static get DefaultType(){return Hi}static get NAME(){return`tooltip`}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){if(this._isEnabled){if(this._isShown()){this._leave();return}this._enter()}}dispose(){clearTimeout(this._timeout),M.off(this._element.closest(Fi),Ii,this._hideModalHandler),this._element.getAttribute(`data-bs-original-title`)&&this._element.setAttribute(`title`,this._element.getAttribute(`data-bs-original-title`)),this._disposePopper(),super.dispose()}show(){if(this._element.style.display===`none`)throw Error(`Please use show on visible elements`);if(!(this._isWithContent()&&this._isEnabled))return;let e=M.trigger(this._element,this.constructor.eventName(`show`)),t=(f(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();let n=this._getTipElement();this._element.setAttribute(`aria-describedby`,n.getAttribute(`id`));let{container:r}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(r.append(n),M.trigger(this._element,this.constructor.eventName(`inserted`))),this._popper=this._createPopper(n),n.classList.add(Pi),`ontouchstart`in document.documentElement)for(let e of[].concat(...document.body.children))M.on(e,`mouseover`,p);this._queueCallback(()=>{M.trigger(this._element,this.constructor.eventName(`shown`)),this._isHovered===!1&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!(!this._isShown()||M.trigger(this._element,this.constructor.eventName(`hide`)).defaultPrevented)){if(this._getTipElement().classList.remove(Pi),`ontouchstart`in document.documentElement)for(let e of[].concat(...document.body.children))M.off(e,`mouseover`,p);this._activeTrigger[zi]=!1,this._activeTrigger[Ri]=!1,this._activeTrigger[Li]=!1,this._isHovered=null,this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute(`aria-describedby`),M.trigger(this._element,this.constructor.eventName(`hidden`)))},this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||=this._createTipElement(this._newContent||this._getContentForTemplate()),this.tip}_createTipElement(e){let t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(Ni,Pi),t.classList.add(`bs-${this.constructor.NAME}-auto`);let n=a(this.constructor.NAME).toString();return t.setAttribute(`id`,n),this._isAnimated()&&t.classList.add(Ni),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new ji({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute(`data-bs-original-title`)}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Ni)}_isShown(){return this.tip&&this.tip.classList.contains(Pi)}_createPopper(e){let t=b(this._config.placement,[this,e,this._element]),n=Bi[t.toUpperCase()];return nr(this._element,e,this._getPopperConfig(n))}_getOffset(){let{offset:e}=this._config;return typeof e==`string`?e.split(`,`).map(e=>Number.parseInt(e,10)):typeof e==`function`?t=>e(t,this._element):e}_resolvePossibleFunction(e){return b(e,[this._element,this._element])}_getPopperConfig(e){let t={placement:e,modifiers:[{name:`flip`,options:{fallbackPlacements:this._config.fallbackPlacements}},{name:`offset`,options:{offset:this._getOffset()}},{name:`preventOverflow`,options:{boundary:this._config.boundary}},{name:`arrow`,options:{element:`.${this.constructor.NAME}-arrow`}},{name:`preSetPlacement`,enabled:!0,phase:`beforeMain`,fn:e=>{this._getTipElement().setAttribute(`data-popper-placement`,e.state.placement)}}]};return{...t,...b(this._config.popperConfig,[void 0,t])}}_setListeners(){let e=this._config.trigger.split(` `);for(let t of e)if(t===`click`)M.on(this._element,this.constructor.eventName(`click`),this._config.selector,e=>{let t=this._initializeOnDelegatedTarget(e);t._activeTrigger[zi]=!(t._isShown()&&t._activeTrigger[zi]),t.toggle()});else if(t!==`manual`){let e=t===Li?this.constructor.eventName(`mouseenter`):this.constructor.eventName(`focusin`),n=t===Li?this.constructor.eventName(`mouseleave`):this.constructor.eventName(`focusout`);M.on(this._element,e,this._config.selector,e=>{let t=this._initializeOnDelegatedTarget(e);t._activeTrigger[e.type===`focusin`?Ri:Li]=!0,t._enter()}),M.on(this._element,n,this._config.selector,e=>{let t=this._initializeOnDelegatedTarget(e);t._activeTrigger[e.type===`focusout`?Ri:Li]=t._element.contains(e.relatedTarget),t._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},M.on(this._element.closest(Fi),Ii,this._hideModalHandler)}_fixTitle(){let e=this._element.getAttribute(`title`);e&&(!this._element.getAttribute(`aria-label`)&&!this._element.textContent.trim()&&this._element.setAttribute(`aria-label`,e),this._element.setAttribute(`data-bs-original-title`,e),this._element.removeAttribute(`title`))}_enter(){if(this._isShown()||this._isHovered){this._isHovered=!0;return}this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show)}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){let t=N.getDataAttributes(this._element);for(let e of Object.keys(t))Mi.has(e)&&delete t[e];return e={...t,...typeof e==`object`&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=e.container===!1?document.body:l(e.container),typeof e.delay==`number`&&(e.delay={show:e.delay,hide:e.delay}),typeof e.title==`number`&&(e.title=e.title.toString()),typeof e.content==`number`&&(e.content=e.content.toString()),e}_getDelegateConfig(){let e={};for(let[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger=`manual`,e}_disposePopper(){this._popper&&=(this._popper.destroy(),null),this.tip&&=(this.tip.remove(),null)}static jQueryInterface(e){return this.each(function(){let t=Ui.getOrCreateInstance(this,e);if(typeof e==`string`){if(t[e]===void 0)throw TypeError(`No method named "${e}"`);t[e]()}})}}y(Ui);let Wi={...Ui.Default,content:``,offset:[0,8],placement:`right`,template:``,trigger:`click`},Gi={...Ui.DefaultType,content:`(null|string|element|function)`};class Ki extends Ui{static get Default(){return Wi}static get DefaultType(){return Gi}static get NAME(){return`popover`}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(e){return this.each(function(){let t=Ki.getOrCreateInstance(this,e);if(typeof e==`string`){if(t[e]===void 0)throw TypeError(`No method named "${e}"`);t[e]()}})}}y(Ki);let qi=`.bs.scrollspy`,Ji=`activate${qi}`,Yi=`click${qi}`,Xi=`load${qi}.data-api`,Zi=`active`,Qi=`[href]`,$i=`.nav-link`,ea=`${$i}, .nav-item > ${$i}, .list-group-item`,ta={offset:null,rootMargin:`0px 0px -25%`,smoothScroll:!1,target:null,threshold:[.1,.5,1]},na={offset:`(number|null)`,rootMargin:`string`,smoothScroll:`boolean`,target:`element`,threshold:`array`};class ra extends P{constructor(e,t){super(e,t),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY===`visible`?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ta}static get DefaultType(){return na}static get NAME(){return`scrollspy`}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(let e of this._observableSections.values())this._observer.observe(e)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(e){return e.target=l(e.target)||document.body,e.rootMargin=e.offset?`${e.offset}px 0px -30%`:e.rootMargin,typeof e.threshold==`string`&&(e.threshold=e.threshold.split(`,`).map(e=>Number.parseFloat(e))),e}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(M.off(this._config.target,Yi),M.on(this._config.target,Yi,Qi,e=>{let t=this._observableSections.get(e.target.hash);if(t){e.preventDefault();let n=this._rootElement||window,r=t.offsetTop-this._element.offsetTop;if(n.scrollTo){n.scrollTo({top:r,behavior:`smooth`});return}n.scrollTop=r}}))}_getNewObserver(){let e={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(e=>this._observerCallback(e),e)}_observerCallback(e){let t=e=>this._targetLinks.get(`#${e.target.id}`),n=e=>{this._previousScrollData.visibleEntryTop=e.target.offsetTop,this._process(t(e))},r=(this._rootElement||document.documentElement).scrollTop,i=r>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=r;for(let a of e){if(!a.isIntersecting){this._activeTarget=null,this._clearActiveClass(t(a));continue}let e=a.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(i&&e){if(n(a),!r)return;continue}!i&&!e&&n(a)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;let e=F.find(Qi,this._config.target);for(let t of e){if(!t.hash||d(t))continue;let e=F.findOne(decodeURI(t.hash),this._element);u(e)&&(this._targetLinks.set(decodeURI(t.hash),t),this._observableSections.set(t.hash,e))}}_process(e){this._activeTarget!==e&&(this._clearActiveClass(this._config.target),this._activeTarget=e,e.classList.add(Zi),this._activateParents(e),M.trigger(this._element,Ji,{relatedTarget:e}))}_activateParents(e){if(e.classList.contains(`dropdown-item`)){F.findOne(`.dropdown-toggle`,e.closest(`.dropdown`)).classList.add(Zi);return}for(let t of F.parents(e,`.nav, .list-group`))for(let e of F.prev(t,ea))e.classList.add(Zi)}_clearActiveClass(e){e.classList.remove(Zi);let t=F.find(`${Qi}.${Zi}`,e);for(let e of t)e.classList.remove(Zi)}static jQueryInterface(e){return this.each(function(){let t=ra.getOrCreateInstance(this,e);if(typeof e==`string`){if(t[e]===void 0||e.startsWith(`_`)||e===`constructor`)throw TypeError(`No method named "${e}"`);t[e]()}})}}M.on(window,Xi,()=>{for(let e of F.find(`[data-bs-spy="scroll"]`))ra.getOrCreateInstance(e)}),y(ra);let ia=`.bs.tab`,aa=`hide${ia}`,oa=`hidden${ia}`,sa=`show${ia}`,ca=`shown${ia}`,la=`click${ia}`,ua=`keydown${ia}`,da=`load${ia}`,fa=`ArrowRight`,pa=`ArrowDown`,ma=`Home`,ha=`active`,ga=`fade`,_a=`show`,va=`.dropdown-toggle`,ya=`:not(${va})`,ba=`.nav-link${ya}, .list-group-item${ya}, [role="tab"]${ya}`,xa=`[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]`,Sa=`${ba}, ${xa}`,Ca=`.${ha}[data-bs-toggle="tab"], .${ha}[data-bs-toggle="pill"], .${ha}[data-bs-toggle="list"]`;class wa extends P{constructor(e){super(e),this._parent=this._element.closest(`.list-group, .nav, [role="tablist"]`),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),M.on(this._element,ua,e=>this._keydown(e)))}static get NAME(){return`tab`}show(){let e=this._element;if(this._elemIsActive(e))return;let t=this._getActiveElem(),n=t?M.trigger(t,aa,{relatedTarget:e}):null;M.trigger(e,sa,{relatedTarget:t}).defaultPrevented||n&&n.defaultPrevented||(this._deactivate(t,e),this._activate(e,t))}_activate(e,t){e&&(e.classList.add(ha),this._activate(F.getElementFromSelector(e)),this._queueCallback(()=>{if(e.getAttribute(`role`)!==`tab`){e.classList.add(_a);return}e.removeAttribute(`tabindex`),e.setAttribute(`aria-selected`,!0),this._toggleDropDown(e,!0),M.trigger(e,ca,{relatedTarget:t})},e,e.classList.contains(ga)))}_deactivate(e,t){e&&(e.classList.remove(ha),e.blur(),this._deactivate(F.getElementFromSelector(e)),this._queueCallback(()=>{if(e.getAttribute(`role`)!==`tab`){e.classList.remove(_a);return}e.setAttribute(`aria-selected`,!1),e.setAttribute(`tabindex`,`-1`),this._toggleDropDown(e,!1),M.trigger(e,oa,{relatedTarget:t})},e,e.classList.contains(ga)))}_keydown(e){if(![`ArrowLeft`,fa,`ArrowUp`,pa,ma,`End`].includes(e.key))return;e.stopPropagation(),e.preventDefault();let t=this._getChildren().filter(e=>!d(e)),n;if([ma,`End`].includes(e.key))n=t[e.key===ma?0:t.length-1];else{let r=[fa,pa].includes(e.key);n=S(t,e.target,r,!0)}n&&(n.focus({preventScroll:!0}),wa.getOrCreateInstance(n).show())}_getChildren(){return F.find(Sa,this._parent)}_getActiveElem(){return this._getChildren().find(e=>this._elemIsActive(e))||null}_setInitialAttributes(e,t){this._setAttributeIfNotExists(e,`role`,`tablist`);for(let e of t)this._setInitialAttributesOnChild(e)}_setInitialAttributesOnChild(e){e=this._getInnerElement(e);let t=this._elemIsActive(e),n=this._getOuterElement(e);e.setAttribute(`aria-selected`,t),n!==e&&this._setAttributeIfNotExists(n,`role`,`presentation`),t||e.setAttribute(`tabindex`,`-1`),this._setAttributeIfNotExists(e,`role`,`tab`),this._setInitialAttributesOnTargetPanel(e)}_setInitialAttributesOnTargetPanel(e){let t=F.getElementFromSelector(e);t&&(this._setAttributeIfNotExists(t,`role`,`tabpanel`),e.id&&this._setAttributeIfNotExists(t,`aria-labelledby`,`${e.id}`))}_toggleDropDown(e,t){let n=this._getOuterElement(e);if(!n.classList.contains(`dropdown`))return;let r=(e,r)=>{let i=F.findOne(e,n);i&&i.classList.toggle(r,t)};r(va,ha),r(`.dropdown-menu`,_a),n.setAttribute(`aria-expanded`,t)}_setAttributeIfNotExists(e,t,n){e.hasAttribute(t)||e.setAttribute(t,n)}_elemIsActive(e){return e.classList.contains(ha)}_getInnerElement(e){return e.matches(Sa)?e:F.findOne(Sa,e)}_getOuterElement(e){return e.closest(`.nav-item, .list-group-item`)||e}static jQueryInterface(e){return this.each(function(){let t=wa.getOrCreateInstance(this);if(typeof e==`string`){if(t[e]===void 0||e.startsWith(`_`)||e===`constructor`)throw TypeError(`No method named "${e}"`);t[e]()}})}}M.on(document,la,xa,function(e){[`A`,`AREA`].includes(this.tagName)&&e.preventDefault(),!d(this)&&wa.getOrCreateInstance(this).show()}),M.on(window,da,()=>{for(let e of F.find(Ca))wa.getOrCreateInstance(e)}),y(wa);let $=`.bs.toast`,Ta=`mouseover${$}`,Ea=`mouseout${$}`,Da=`focusin${$}`,Oa=`focusout${$}`,ka=`hide${$}`,Aa=`hidden${$}`,ja=`show${$}`,Ma=`shown${$}`,Na=`hide`,Pa=`show`,Fa=`showing`,Ia={animation:`boolean`,autohide:`boolean`,delay:`number`},La={animation:!0,autohide:!0,delay:5e3};class Ra extends P{constructor(e,t){super(e,t),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return La}static get DefaultType(){return Ia}static get NAME(){return`toast`}show(){M.trigger(this._element,ja).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add(`fade`),this._element.classList.remove(Na),m(this._element),this._element.classList.add(Pa,Fa),this._queueCallback(()=>{this._element.classList.remove(Fa),M.trigger(this._element,Ma),this._maybeScheduleHide()},this._element,this._config.animation))}hide(){!this.isShown()||M.trigger(this._element,ka).defaultPrevented||(this._element.classList.add(Fa),this._queueCallback(()=>{this._element.classList.add(Na),this._element.classList.remove(Fa,Pa),M.trigger(this._element,Aa)},this._element,this._config.animation))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(Pa),super.dispose()}isShown(){return this._element.classList.contains(Pa)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(e,t){switch(e.type){case`mouseover`:case`mouseout`:this._hasMouseInteraction=t;break;case`focusin`:case`focusout`:this._hasKeyboardInteraction=t;break}if(t){this._clearTimeout();return}let n=e.relatedTarget;this._element===n||this._element.contains(n)||this._maybeScheduleHide()}_setListeners(){M.on(this._element,Ta,e=>this._onInteraction(e,!0)),M.on(this._element,Ea,e=>this._onInteraction(e,!1)),M.on(this._element,Da,e=>this._onInteraction(e,!0)),M.on(this._element,Oa,e=>this._onInteraction(e,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each(function(){let t=Ra.getOrCreateInstance(this,e);if(typeof e==`string`){if(t[e]===void 0)throw TypeError(`No method named "${e}"`);t[e](this)}})}}return pe(Ra),y(Ra),{Alert:_e,Button:L,Carousel:We,Collapse:it,Dropdown:X,Modal:ai,Offcanvas:Si,Popover:Ki,ScrollSpy:ra,Tab:wa,Toast:Ra,Tooltip:Ui}}))}))();function e(e){document.documentElement.setAttribute(`data-theme`,e)}function t(){var t=document.documentElement.getAttribute(`data-theme`)===`light`?`dark`:`light`;e(t),localStorage.setItem(`theme`,t)}window.toggleTheme=t;function n(e){document.querySelectorAll(`.md-actions.open`).forEach(function(t){t!==e&&(t.classList.remove(`open`),t.querySelector(`.md-actions-toggle`).setAttribute(`aria-expanded`,`false`))})}function r(e){var t=e.closest(`.md-actions`),r=t.classList.contains(`open`);n(t),t.classList.toggle(`open`,!r),e.setAttribute(`aria-expanded`,String(!r))}window.toggleMdActionsMenu=r,document.addEventListener(`click`,function(e){e.target.closest(`.md-actions`)||n()}),document.addEventListener(`keydown`,function(e){e.key===`Escape`&&n()}),document.addEventListener(`click`,function(e){var t=e.target.closest(`[data-copy-url]`);if(t){e.preventDefault();var r=t.getAttribute(`data-copy-url`),i=t.querySelector(`.label`),a=i.textContent;fetch(r).then(function(e){return e.text()}).then(function(e){return navigator.clipboard.writeText(e)}).then(function(){i.textContent=`Copied!`,setTimeout(function(){i.textContent=a},1500)}).catch(function(){navigator.clipboard.writeText(r)}),n()}}); \ No newline at end of file diff --git a/src/App/assets/js/components/_main.js b/src/App/assets/js/components/_main.js index 6754819..74d1682 100644 --- a/src/App/assets/js/components/_main.js +++ b/src/App/assets/js/components/_main.js @@ -10,3 +10,58 @@ function toggleTheme() { localStorage.setItem('theme', next); } window.toggleTheme = toggleTheme; + +function closeAllMdActionsMenus(except) { + document.querySelectorAll('.md-actions.open').forEach(function (wrapper) { + if (wrapper !== except) { + wrapper.classList.remove('open'); + wrapper.querySelector('.md-actions-toggle').setAttribute('aria-expanded', 'false'); + } + }); +} + +function toggleMdActionsMenu(button) { + var wrapper = button.closest('.md-actions'); + var isOpen = wrapper.classList.contains('open'); + closeAllMdActionsMenus(wrapper); + wrapper.classList.toggle('open', !isOpen); + button.setAttribute('aria-expanded', String(!isOpen)); +} +window.toggleMdActionsMenu = toggleMdActionsMenu; + +document.addEventListener('click', function (event) { + if (!event.target.closest('.md-actions')) { + closeAllMdActionsMenus(); + } +}); + +document.addEventListener('keydown', function (event) { + if (event.key === 'Escape') { + closeAllMdActionsMenus(); + } +}); + +document.addEventListener('click', function (event) { + var item = event.target.closest('[data-copy-url]'); + if (!item) { + return; + } + event.preventDefault(); + + var url = item.getAttribute('data-copy-url'); + var label = item.querySelector('.label'); + var originalText = label.textContent; + + fetch(url) + .then(function (response) { return response.text(); }) + .then(function (markdown) { return navigator.clipboard.writeText(markdown); }) + .then(function () { + label.textContent = 'Copied!'; + setTimeout(function () { label.textContent = originalText; }, 1500); + }) + .catch(function () { + navigator.clipboard.writeText(url); + }); + + closeAllMdActionsMenus(); +}); diff --git a/src/App/assets/scss/components/_blog.scss b/src/App/assets/scss/components/_blog.scss index a2ae0b8..a096642 100644 --- a/src/App/assets/scss/components/_blog.scss +++ b/src/App/assets/scss/components/_blog.scss @@ -502,4 +502,131 @@ $bp-tablet: 900px; color: var(--text-dim); flex-shrink: 0; } +} + +// ---------- Copy page / view as markdown / open in Claude dropdown ---------- +.md-actions { + position: relative; + display: inline-flex; +} + +.md-actions-toggle { + display: inline-flex; + align-items: stretch; + padding: 0; + border-radius: 8px; + background: var(--surface); + border: 1px solid var(--border); + color: var(--text-muted); + font-family: var(--sans); + font-size: 13px; + cursor: pointer; + overflow: hidden; + transition: box-shadow .15s ease, border-color .15s ease, color .15s ease; + + svg { + width: 14px; + height: 14px; + flex-shrink: 0; + } + + .chev { + width: 12px; + height: 12px; + transition: transform .15s ease; + } + + &:hover { + border-color: var(--text-dim); + color: var(--text); + box-shadow: 0 4px 12px rgba(0, 0, 0, .12); + } +} + +.md-actions-toggle-label { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 6px 12px; +} + +.md-actions-toggle-chev { + display: inline-flex; + align-items: center; + padding: 6px 10px; + border-left: 1px solid var(--border); +} + +.md-actions.open .md-actions-toggle { + border-color: var(--text-dim); + color: var(--text); + box-shadow: 0 4px 12px rgba(0, 0, 0, .12); +} + +.md-actions.open .md-actions-toggle .chev { + transform: rotate(180deg); +} + +.md-actions-menu { + position: absolute; + top: calc(100% + 8px); + right: 0; + min-width: 240px; + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius); + box-shadow: 0 12px 32px rgba(0, 0, 0, .18); + padding: 6px; + display: none; + flex-direction: column; + gap: 2px; + z-index: 20; +} + +.md-actions.open .md-actions-menu { + display: flex; +} + +.md-actions-item { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 10px; + border-radius: 8px; + border: none; + background: transparent; + color: var(--text); + font-family: var(--sans); + font-size: 13px; + text-align: left; + text-decoration: none; + cursor: pointer; + + svg { + width: 16px; + height: 16px; + color: var(--text-dim); + flex-shrink: 0; + } + + &:hover { + background: var(--surface-2); + color: var(--amber); + + svg { + color: var(--amber); + } + } +} + +.md-actions-bar { + display: flex; + justify-content: flex-end; + margin-bottom: 12px; + + // this bar becomes .entry's new first child, so restore the + // zero top-margin that .entry h2:first-child would otherwise give up + & + h2 { + margin-top: 0; + } } \ No newline at end of file diff --git a/src/App/templates/partial/markdown-actions.html.twig b/src/App/templates/partial/markdown-actions.html.twig new file mode 100644 index 0000000..091587e --- /dev/null +++ b/src/App/templates/partial/markdown-actions.html.twig @@ -0,0 +1,29 @@ +{% set markdown_url = url('app::markdown-article', {categorySlug: article.category.slug, slug: article.slug}) %} +{% set claude_prompt = 'Read from ' ~ markdown_url ~ ' so I can ask questions about it.' %} +
+
+ + +
+
diff --git a/src/App/templates/partial/title-section.html.twig b/src/App/templates/partial/title-section.html.twig index 948072b..9f04a5c 100644 --- a/src/App/templates/partial/title-section.html.twig +++ b/src/App/templates/partial/title-section.html.twig @@ -34,7 +34,7 @@ {% endif %} {% endif %} - {% if author_github %} + {% if author_github and show_github is defined and show_github %} {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/forcing-utf8-connections-and-character-set-in-mysql.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/forcing-utf8-connections-and-character-set-in-mysql.html.twig index 8c54de9..1fd2823 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/forcing-utf8-connections-and-character-set-in-mysql.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/forcing-utf8-connections-and-character-set-in-mysql.html.twig @@ -1,38 +1,17 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/forcing-utf8-connections-and-character-set-in-mysql.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Forcing UTF8 connections and character set in MySQL{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
-
- - {{ include('@partial/left-menu.html.twig') }} - -
-
- {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} In some situations, it may be neccesar to force MySQL server collation and character set to UTF8. As you can't control all scripts that are connecting to your database( for instance: mysql command line, or mysqldump) For that , open the my.cnf file and add the below lines: -
>character_set_server=utf8
+
character_set_server=utf8
 skip-character-set-client-handshake
If you are interested in better performance, add the below line: -
>collation_server=utf8_general_ci
+
collation_server=utf8_general_ci
If you are interested in better sorting order, add the below line instead: -
>collation_server=utf8_unicode_ci
+
collation_server=utf8_unicode_ci

Frequently Asked Questions

@@ -56,11 +35,4 @@ If you are interested in better sorting order, add the below line instead:
-
- - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/geoip-city-removed-from-dotkernel.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/geoip-city-removed-from-dotkernel.html.twig index b500136..ab2c5e6 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/geoip-city-removed-from-dotkernel.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/geoip-city-removed-from-dotkernel.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/geoip-city-removed-from-dotkernel.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}GeoIP City Removed From Dotkernel{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
-
- - {{ include('@partial/left-menu.html.twig') }} - -
-
- {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} In the newest version we have removed the GeoIP City integration. The City database on GeoIP 1.1.0 extension was causing a segmentation fault, which resulted in crashing or outputting an error instead of executing the PHP Code. @@ -31,7 +10,7 @@ This error occurs due to the extension incompatibility with the database(dat) fi On some operating systems Apache will respond your request with HTTP Status Code 200 (OK) and a web page containing the text below. Error result: -
>The server encountered an internal error or
+
The server encountered an internal error or
  misconfiguration and was unable to complete
  your request.
The error might not be logged as the error is generated the GeoIP extension and not by your PHP code. @@ -40,7 +19,7 @@ If you don't want to use GeoIP City and just want to get rid of the error go to
  • Dotkernel/admin/System.php (Admin/System model) and comment or remove the lines below
-
>if(geoip_db_avail(GEOIP_CITY_EDITION_REV0))
+
if(geoip_db_avail(GEOIP_CITY_EDITION_REV0))
 {
     $info = explode(" ",geoip_database_info(GEOIP_CITY_EDITION_REV0));
     $return = $info.' '.Dot_Kernel::TimeFormat($info);
@@ -48,7 +27,7 @@ If you don't want to use GeoIP City and just want to get rid of the error go to
 
  • library/Dot/GeoIp.php (Dot_GeoIp class) and comment or remove the lines below
-
>if(function_exists('geoip_db_avail') && geoip_db_avail(GEOIP_CITY_EDITION_REV0)
+
if(function_exists('geoip_db_avail') && geoip_db_avail(GEOIP_CITY_EDITION_REV0)
 && 'unknown' == $country)
 {
     //if GeoIPCity.dat file exists
@@ -101,11 +80,4 @@ Note that GeoIP is an obsolete extension, Maxmind recommends using GeoIP2.
         
-
- - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/geoip-ip-address-location-in-dotkernel.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/geoip-ip-address-location-in-dotkernel.html.twig index 35bdd49..1b451f9 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/geoip-ip-address-location-in-dotkernel.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/geoip-ip-address-location-in-dotkernel.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/geoip-ip-address-location-in-dotkernel.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}GeoIP: Ip Address Location In Dotkernel{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
-
- - {{ include('@partial/left-menu.html.twig') }} - -
-
- {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} GeoIP is the proprietary technology that drives MaxMind's IP geolocation data and services. It is a non-invasive way to determine geographical and other information about Internet visitors in real-time. When a person visits your website, GeoIP can determine which country, region, city, postal code, area code the visitor is coming from. Dotkernel uses GeoIP to get user statistics by country. The main file for GeoIP is library/Dot/Geoip.php @@ -145,11 +124,4 @@ public function getCountryByIp($ip)
-
- - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/handling-and-logging-errors-with-dot-errorhandler-and-dot-log.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/handling-and-logging-errors-with-dot-errorhandler-and-dot-log.html.twig index ff03453..a394ab2 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/handling-and-logging-errors-with-dot-errorhandler-and-dot-log.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/handling-and-logging-errors-with-dot-errorhandler-and-dot-log.html.twig @@ -1,32 +1,11 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/handling-and-logging-errors-with-dot-errorhandler-and-dot-log.jsonld.twig') }} {% endblock %} - -{% block title %}Handling and Logging errors with dot-errorhandler and dot-log{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
-
- - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
-
- {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} -This article is a follow-up for: Logging with dot-log in Zend Expressive and Dotkernel, the mentioned article is a guide to using dot-log. +{% block body %} +This article is a follow-up for: Logging with dot-log in Zend Expressive and Dotkernel, the mentioned article is a guide to using dot-log.   -This article explains the usage of dotkernel/dot-errorhandler with dotkernel/dot-log or zendframework/zend-log to log errors in Zend Expressive applications. +This article explains the usage of dotkernel/dot-errorhandler with dotkernel/dot-log or zendframework/zend-log to log errors in Zend Expressive applications. This can be considered as a guide on how the dot-errorhandler was made and how it's meant to be used. @@ -36,14 +15,14 @@ This can be considered as a guide on how the dot-errorhandler w As a first note Dot Error Handler provides two kinds of error handlers:
    -
  • the plain ErrorHandler  - this class is a copy of Zend Expressive's error handler Zend\Stratigility\Middleware\ErrorHandler (as it is final)
  • -
  • the logging LogErrorHandler - this class is like the above one, but with added Logging support (via container)
  • +
  • the plain ErrorHandler - this class is a copy of Zend Expressive's error handler Zend\Stratigility\Middleware\ErrorHandler (as it is final)
  • +
  • the logging LogErrorHandler - this class is like the above one, but with added Logging support (via container)
Both error handlers have factories for an easier usage with the Container.   -To use dot-error handler in your project run the following command: composer require dotkernel/dot-errorhandler. +To use dot-error handler in your project run the following command: composer require dotkernel/dot-errorhandler.  

The Config Provider

@@ -58,24 +37,24 @@ As a fallback case the plain error handler is selected by default and can be ove  

Configuration

-IMPORTANT NOTES:  +IMPORTANT NOTES:
    -
  • Assuming the project in hand has a configured logger as per this article and the logger name is default_logger (as provided in the package's config example).
  • -
  • Although the key is dot_log, when selecting a logger the dot log abstract factory responds to the dot-log selector +
  • Assuming the project in hand has a configured logger as per this article and the logger name is default_logger (as provided in the package's config example).
  • +
  • Although the key is dot_log, when selecting a logger the dot log abstract factory responds to the dot-log selector
      -
    • to select the container key asked for is dot-log.default_logger
    • +
    • to select the container key asked for is dot-log.default_logger
  • The dot-errorhandler was meant as a silent logger for staging and production environments doesn't block whoops
      -
    • to test it the development mode should be disabled, otherwise whoops will catch the errors and show them to the developer
    • -
    • you can use any custom implemented error handler as long as it implements the provided ErrorHandlerInterface
    • +
    • to test it the development mode should be disabled, otherwise whoops will catch the errors and show them to the developer
    • +
    • you can use any custom implemented error handler as long as it implements the provided ErrorHandlerInterface
The steps to configuring are the following:
    -
  • add the Dot\ErrorHandler\ConfigProvider in the project's config/config.php file
  • +
  • add the Dot\ErrorHandler\ConfigProvider in the project's config/config.php file
  • write the error handler config
  @@ -148,11 +127,4 @@ The tests we have made were the following:
-
- - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/highcharts-integration-in-dotkernel-1-6-0.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/highcharts-integration-in-dotkernel-1-6-0.html.twig index 238a891..e95a470 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/highcharts-integration-in-dotkernel-1-6-0.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/highcharts-integration-in-dotkernel-1-6-0.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/highcharts-integration-in-dotkernel-1-6-0.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Highcharts Integration in Dotkernel 1.6.0{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
-
- - {{ include('@partial/left-menu.html.twig') }} - -
-
- {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Integrating a new charting library in the latest version of Dotkernel (1.6.0) we offer a new experience with this new intuitive and interactive charts. @@ -31,7 +10,7 @@ Also in admin we made some samples using highcharts. These samples includes an p You can find highcharts library in the externals directory. Take a quick view on the code to see how highcharts are working. -
>chart = new Highcharts.Chart({
+
chart = new Highcharts.Chart({
         chart: {
             renderTo: elementId,
             type: 'line',
@@ -95,11 +74,4 @@ Take a quick view on the code to see how highcharts are working.
         
-
- - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/how-to-group-log-files-by-date-using-dot-log.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/how-to-group-log-files-by-date-using-dot-log.html.twig index 83c37e9..0fb1834 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/how-to-group-log-files-by-date-using-dot-log.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/how-to-group-log-files-by-date-using-dot-log.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/how-to-group-log-files-by-date-using-dot-log.jsonld.twig') }} {% endblock %} - -{% block title %}How to group log files by date using dot-log{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
-
- - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
-
- {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

As described in this article, dot-log is a powerful tool for logging messages in your application. It's power stays in the fact that it can be implemented in a few easy steps and that it's highly customizable.

@@ -211,11 +190,4 @@ return [
-
- - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/how-to-set-a-persistent-connection-to-database-with-zend-framework-zend-db-adapter.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/how-to-set-a-persistent-connection-to-database-with-zend-framework-zend-db-adapter.html.twig index e1dcb6d..86c66b3 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/how-to-set-a-persistent-connection-to-database-with-zend-framework-zend-db-adapter.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/how-to-set-a-persistent-connection-to-database-with-zend-framework-zend-db-adapter.html.twig @@ -1,37 +1,16 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/how-to-set-a-persistent-connection-to-database-with-zend-framework-zend-db-adapter.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}How to Set a Persistent Connection to Database with Zend Framework Zend_Db adapter{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
-
- - {{ include('@partial/left-menu.html.twig') }} - -
-
- {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} From time to time, it may be a good idea to have a persistent connection to database. The place where it should be added that new configuration option is application.ini ( Dotkernel approach as an example) Do not try something like below, will not work: -
>database.params.options.PDO::ATTR_PERSISTENT = TRUE
+
database.params.options.PDO::ATTR_PERSISTENT = TRUE
  Instead , use the below line -
>database.params.persistent = TRUE
+
database.params.persistent = TRUE

Frequently Asked Questions

@@ -55,11 +34,4 @@ Instead , use the below line
-
- - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/how-to-use-alerts-in-dotkernel.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/how-to-use-alerts-in-dotkernel.html.twig index 7f4e7ed..9c6f719 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/how-to-use-alerts-in-dotkernel.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/how-to-use-alerts-in-dotkernel.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/how-to-use-alerts-in-dotkernel.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}How to use Alerts in Dotkernel{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
-
- - {{ include('@partial/left-menu.html.twig') }} - -
-
- {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Alerts (or Dot_Alert's) are e-mails usually sent to the site developers, these messages are sent with mail() therefore you shouldn't use them to send regular mail. Alerts should only notify you as a developer: "Hey, something's wrong here, you might want to know this!" In this article you will find out how to use the Alerts system in Dotkernel, we will also go through an existing example so this can be understood easier. @@ -33,7 +12,7 @@ The Dot_Alert class resembles with Dot_Email, the alerts, like a mail message, h In Dotkernel we use the Alerts for notifying the developer that an email was not sent successfully. In this case we kept the message in the dots.xml file -
>
+
 
     
         
@@ -56,16 +35,16 @@ Date: {DATE_NOW}
 If you're not familiar  with the dots.xml, you should see this article.
 
 First the message will be fetched from the xml file, we already have it in $this->option
-
>
+
 $subject = $this->option->alertMessages->email->subject;
 $message = $this->option->alertMessages->email->message;
Second, we get the destination recipient (in this case the developers e-mail addresses) -
>
+
 $devEmails = explode(',', $this->settings->devEmails);
 
 
As you can see the Alert messages contains {VARIABLES} called details in the Alert system. Now we will prepare the details: -
>$details = array(
+
$details = array(
     'e_class' => get_class($e),
     'site_name' => $this->seoOption->siteName,
     'site_url' => $registry->configuration->website->params->url,
@@ -76,18 +55,18 @@ As you can see the Alert messages contains {VARIABLES} called d
 );
Note that $e is a caught exception, this exception is thrown when the e-mail send process fails. Now that we have it all, let's create an alert: -
>$alert = new Dot_Alert();
+
$alert = new Dot_Alert();
This is just an empty alert, we will now set the sender, the subject and the message, the sender is set on sending -
>$alert->addHeader( "From: " . $this->settings->siteEmail);
+
$alert->addHeader( "From: " . $this->settings->siteEmail);
 $alert->addHeader( "Reply-To:" . $this->settings->siteEmail );
 $alert->addHeader( "X-Mailer: PHP/" . phpversion() ) ;
-
>$alert->setTo($devEmails);
+
$alert->setTo($devEmails);
 $alert->setSubject($subject);
 $alert->setContent($message);
Our message doesn't look that good, the setDetails method will replace our {VARIABLES} within subject and message with actual data -
>$alert->setDetails($details);
+
$alert->setDetails($details);
Everything is great, we can now send our alert: -
>$alert->send();
+
$alert->send();

Frequently Asked Questions

@@ -123,11 +102,4 @@ Everything is great, we can now send our alert:
-
- - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/implementing-the-new-password-hashing-api-from-php-5-5-in-dotkernel.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/implementing-the-new-password-hashing-api-from-php-5-5-in-dotkernel.html.twig index b746cc2..9b61c3c 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/implementing-the-new-password-hashing-api-from-php-5-5-in-dotkernel.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/implementing-the-new-password-hashing-api-from-php-5-5-in-dotkernel.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/implementing-the-new-password-hashing-api-from-php-5-5-in-dotkernel.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Implementing the new Password Hashing API from PHP 5.5 in Dotkernel{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
-
- - {{ include('@partial/left-menu.html.twig') }} - -
-
- {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} In order to use the new Password Hashing functions , introduced in PHP 5.5 , and unify all password related functions , used for both admin and users, we did a major refactor of Dotkernel codebase, in version 1.8.0 , starting from revision 799. See more on that matter here @@ -40,8 +19,8 @@ The minimum PHP version in order to run Dotkernel was raised to PHP 5.3.8 .
  • change table structure in order to handle future algo
  • -
    >ALTER TABLE `admin` CHANGE `password` `password` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL;
    -
    >ALTER TABLE `user` CHANGE `password` `password` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL;
    +
    ALTER TABLE `admin` CHANGE `password` `password` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL;
    +
    ALTER TABLE `user` CHANGE `password` `password` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL;
    • Remove from application.ini the variable settings.admin.salt = 5F6WQ9U3YT
    • apply the patch . Download
    • @@ -90,11 +69,4 @@ The minimum PHP version in order to run Dotkernel was raised to PHP 5.3.8 .
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/installing-geoip-extension-in-zend-server-5-6-on-windows.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/installing-geoip-extension-in-zend-server-5-6-on-windows.html.twig index 557424d..87eee31 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/installing-geoip-extension-in-zend-server-5-6-on-windows.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/installing-geoip-extension-in-zend-server-5-6-on-windows.html.twig @@ -1,29 +1,8 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/installing-geoip-extension-in-zend-server-5-6-on-windows.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Installing GeoIP extension in Zend Server 5.6 on Windows{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} To test if you have php_geoip extension on your Zend Server, create an php file and copy the following code. This will output true if extension is available or false if not. -
    >
     If your output is false than you have to download an php_geoip.dll file correctly compiled for your zend server version.
     
    @@ -109,11 +88,4 @@ And now you can use geoip functions on your Zend Server 5.6
             
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/installing-geoip-extension-in-zend-server-6-on-windows.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/installing-geoip-extension-in-zend-server-6-on-windows.html.twig index 6064fda..4725a0e 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/installing-geoip-extension-in-zend-server-6-on-windows.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/installing-geoip-extension-in-zend-server-6-on-windows.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/installing-geoip-extension-in-zend-server-6-on-windows.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Installing GeoIP extension in Zend Server 6 on Windows{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    - - {{ include('@partial/post-nav.html.twig') }} - - -
    - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/logging-with-dot-log-in-zend-expressive-and-dotkernel.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/logging-with-dot-log-in-zend-expressive-and-dotkernel.html.twig index ff37ead..f3118c9 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/logging-with-dot-log-in-zend-expressive-and-dotkernel.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/logging-with-dot-log-in-zend-expressive-and-dotkernel.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/logging-with-dot-log-in-zend-expressive-and-dotkernel.jsonld.twig') }} {% endblock %} - -{% block title %}Logging with dot-log in Zend Expressive and Dotkernel{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} This article will explain the usage of the dot-log component within Dotkernel, Zend Expressive or in a project that uses Zend Service Manager. Since dot-log extends zendframework/zend-log this tutorial mostly compatible with zend-log as well. @@ -294,11 +273,4 @@ $logger->log(Logger::NOTICE, 'NOTICE from log()'); This article will be continued in a different article that treats the error handling in middleware applications.   -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/manual-upgrade-of-wurfl-xml-file-in-dotkernel.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/manual-upgrade-of-wurfl-xml-file-in-dotkernel.html.twig index 6214df3..1f1008c 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/manual-upgrade-of-wurfl-xml-file-in-dotkernel.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/manual-upgrade-of-wurfl-xml-file-in-dotkernel.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/manual-upgrade-of-wurfl-xml-file-in-dotkernel.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Manual upgrade of WURFL xml file in Dotkernel{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Dotkernel Application Framework can be downloaded with WURFL XML file bundled in it, but is quite an old file,  the latest GPL version, from June 2011. Because of license changed of that WURFL file,  this bundled file will not be upgraded anymore by us. You need to manually upgrade the xml file, if you still want to use it , and of course, please pay attention to license changes. @@ -66,11 +45,4 @@ Again, please pay attention to WURFL license changes.
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/migration-of-zend-framework-1-pear-channel.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/migration-of-zend-framework-1-pear-channel.html.twig index 8c51cad..bea5ab4 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/migration-of-zend-framework-1-pear-channel.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/migration-of-zend-framework-1-pear-channel.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/migration-of-zend-framework-1-pear-channel.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Migration of Zend Framework 1 PEAR channel{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} The unofficial PEAR channel for Zend Framework 1 was hosted on Google Code at this location: ZF Pear, but since the closing of Google Code we were forced to move it. Zend Framework 1 is still used by a lot of  projects in Production, it's still a viable library collection  and it's also  running on  PHP7 ; even if is only in maintenance/security-patch mode, so it's not an option to cancel it completely. @@ -33,13 +12,13 @@ Instructions on how to use the new channel can be found below . Use the PEAR installer: 1. Remove the installed pear package -
    >pear uninstall zend/zend
    +
    pear uninstall zend/zend
    2. Remove the old googlecode channel -
    >pear channel-delete zend.googlecode.com/svn
    +
    pear channel-delete zend.googlecode.com/svn
    3. Discover the new channel -
    >pear channel-discover pear.dotkernel.com/zf1/svn
    +
    pear channel-discover pear.dotkernel.com/zf1/svn
    4. Install the package -
    >pear install zend/zend
    +
    pear install zend/zend
    Follow @dotkernel  in order to be up to date related to new releases.   @@ -72,11 +51,4 @@ Follow -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} According to Matthew Weier O'Phinney announcement, Zend Framework team is pleased to announce the immediate availability of the first release candidate of the Zend Framework 1.12 series, 1.12.0RC1

     New Features

    @@ -102,11 +81,4 @@ For a complete list go here: -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Because Zend donated the Zend Studio's Formatter upstream to the PDT project, the Formatter plugin for Zend Studio 10.1 need to be changed: replace  "com.zend.php" to "org.eclipse.php". See  the updated file  Dotkernel PHP Formatter for Zend Studio 10.1 @@ -52,11 +31,4 @@ About Templates in Zend Studio and how to import/export: -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} In /var/www/vhosts/exampledomain.com/conf/vhost.conf file add this code: -
    >
    +
     < Location /admin>
        AuthType Basic
        AuthName "My Site Admin"
    @@ -33,7 +12,7 @@ In /var/www/vhosts/exampledomain.com/conf/vhost.conf file add t
      
     
     Notice the server that vhost.conf has been added/changed with command:
    -
    >/usr/local/psa/admin/sbin/websrvmng -a
    +
    /usr/local/psa/admin/sbin/websrvmng -a
      Then create the .htpasswd file and upload it to /var/www/vhosts/exampledomain.com/conf/ @@ -57,11 +36,4 @@ Then create the .htpasswd file and upload it to /var/www/vhosts/exampled
    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/replacing-laminas-mail-with-symfony-mailer-in-dot-mail.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/replacing-laminas-mail-with-symfony-mailer-in-dot-mail.html.twig index 2dd9e03..9060c7d 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/replacing-laminas-mail-with-symfony-mailer-in-dot-mail.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/replacing-laminas-mail-with-symfony-mailer-in-dot-mail.html.twig @@ -1,28 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/replacing-laminas-mail-with-symfony-mailer-in-dot-mail.jsonld.twig') }} {% endblock %} - -{% block title %}Replacing laminas-mail with Symfony mailer in dot-mail{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% extends '@layout/blog-post.html.twig' %} +{% block body %}

    What prompted the change

    According to the discussion from the LaminasTechnical steering Committee of 2023-12-04, it was decided that the laminas/laminas-mail package would be abandoned. On the one hand, there is nobody to maintain the package and on the other, there are several alternatives available in the ecosystem:

    @@ -155,11 +133,4 @@ return ,
    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/scientia-mobile-licensed-its-wurfl-cloud-php-library-to-dotkernel-1-6.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/scientia-mobile-licensed-its-wurfl-cloud-php-library-to-dotkernel-1-6.html.twig index 3c43833..c03414b 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/scientia-mobile-licensed-its-wurfl-cloud-php-library-to-dotkernel-1-6.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/scientia-mobile-licensed-its-wurfl-cloud-php-library-to-dotkernel-1-6.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/scientia-mobile-licensed-its-wurfl-cloud-php-library-to-dotkernel-1-6.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Scientia Mobile licensed its Wurfl Cloud PHP library to Dotkernel 1.6{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} In the Dotkernel version 1.6.0 , released on May 16th, 2012 we have removed the GPL'ed WURFL PHP library , as the code it was obsolete anyway and also the structure of the XML file was changed. Instead , we implemented the Scientia Mobile's WURFL Cloud PHP  library . @@ -70,11 +49,4 @@ and regardless of whether the code is not obfuscated.
    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/sending-emails-using-dot-email-component-and-zend-email.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/sending-emails-using-dot-email-component-and-zend-email.html.twig index 06e2809..bd9f5c4 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/sending-emails-using-dot-email-component-and-zend-email.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/sending-emails-using-dot-email-component-and-zend-email.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/sending-emails-using-dot-email-component-and-zend-email.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Sending emails using Dot_Email component and Zend_Email{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Dot_Email class extends Zend_Mail, so all the methods from Zend_Mail are available  in Dot_Email. Dot_Email is a simple class composed only from 2 methods, except constructor, all  other methods beeing inherited  from Zend_Mail. @@ -33,7 +12,7 @@ Note the declaration of this method: setContent ($content, $format = 'text/plain 2.  send(), set the transporter and is calling parent::send() method for sending the email For sending the email you MUST use this methods in the code above: -
    >$dotEmail = new Dot_Email();
    +
    $dotEmail = new Dot_Email();
     $dotEmail->addTo($email);
     $dotEmail->setSubject('Forgot Password');
     $dotEmail->setBodyText('Your password is '.$password);
    @@ -47,7 +26,7 @@ else
         echo "Message failed, not sent!";
     }
    Only if you want to overwrite the default Email and Name, add the below lines: -
    >$dotEmail->setFrom($fromEmail, $fromName);
    +
    $dotEmail->setFrom($fromEmail, $fromName);
     $dotEmail->setReplyTo($fromEmail, $fromName);
    NOTE*: you always have to use  addTo()setSubject(), setBodyText() or setBodyHtml() or setContent(), and finally send() method. @@ -99,11 +78,4 @@ Methods inherited  from Zend_Mail and that can be used in your code are:
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/templating-in-dotkernel3.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/templating-in-dotkernel3.html.twig index 99cb503..3f7ec53 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/templating-in-dotkernel3.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/templating-in-dotkernel3.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/templating-in-dotkernel3.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Templating in Dotkernel3{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Dotkernel3 aims to improve the Dotkernel stack in every way possible, and one of the painpoints in the previous version of Dotkernel was the templating engine. Albeit a solid and robust templating engine, it was also 10 years old, and used techniques that's slightly outdated by now. @@ -66,11 +45,4 @@ You can read the official documentation here: -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} This article will cover the external dependency usage VIA composer within Dotkernel applications. There is also an article explaining how composer can be added to Dotkernel learn more. @@ -31,16 +10,16 @@ Composer automatically loads our dependencies so there is no need to include/req For this example we will render a Barcode using Zend Framework 1 as the Non-Namespaced dependency and Zend Framework 2 as the Namespaced dependency.

    The Composer Dependencies

    ZendFramework 1 Barcode module can only be loaded with the ZF1 itself: -
    >composer require 'zendframework/zendframework1'
    +
    composer require 'zendframework/zendframework1'
    The ZendFramework 2 Barcode module can be separately loaded: -
    >composer require 'zendframework/zend-barcode'
    +
    composer require 'zendframework/zend-barcode'
     

    Important note

    These dependencies can be used anywhere after the Dot_Kernel::initialize() function was called
     

    Using Non-Namespaced Dependencies (Zend Framework 1)

    The class is loaded PSR-0 style, meaning the class name looks like VendorName_PackageName_ClassName -
    >// Only the text to draw is required
    +
    // Only the text to draw is required
     $barcodeOptions = array('text' =>; 'ZEND-FRAMEWORK');
      
     // No required options
    @@ -54,7 +33,7 @@ Zend_Barcode::factory(
      
     

    Using Namespaced Dependencies (Zend Framework 2)

    The class is loaded PSR-4 style, meaning the class name looks like \VendorName\PackageName\ClassName -
    >use Zend\Barcode\Barcode;
    +
    use Zend\Barcode\Barcode;
     
     // Only the text to draw is required
     $barcodeOptions = array('text' => 'ZEND-FRAMEWORK');
    @@ -73,7 +52,7 @@ Both the examples will render the following barcode if nothing goes wrong:
     Resulting barcode. Source: http://framework.zend.com/images/manual/zend.barcode.introduction.example-1.png  Resulting barcode.
    Source: bit.ly/1XbZZ81

    Tip

    In this case the first example will work for both namespaced an non-namespaced dependencies if we add the the following as the first line at the first example: -
    >use Zend\Barcode\Barcode as Zend_Barcode;
    +
    use Zend\Barcode\Barcode as Zend_Barcode;
    Now we can use any of the following to access ZF2's Barcode Module:
    • Zend\Barcode\Barcode
    • @@ -132,11 +111,4 @@ This article works for any Dotkernel 1.x version if your server
    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/using-utf8-charset-in-dotkernel.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/using-utf8-charset-in-dotkernel.html.twig index ea758e4..7c75e90 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/using-utf8-charset-in-dotkernel.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/using-utf8-charset-in-dotkernel.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/using-utf8-charset-in-dotkernel.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Using UTF8 charset in Dotkernel{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} In order to use UTF8 encoding in your Dotkernel based system, is needed to make some changes in both database structure and in the application.ini file.
    Those changes are commited into Dotkernel 1.6.0 dev codebase, which will be released in next days.
    @@ -29,7 +8,7 @@ In order to use UTF8 encoding in your Dotkernel based system, is needed to make set for all tables and columns proper collation , either utf8_general_ci or utf8_bin

    Application.ini

    add the line -
    >database.params.charset = utf8
    +
    database.params.charset = utf8
    to your application.ini file, in the [production] area.

    Differences between utf8_general_ci and utf8_bin

    utf8_bin: compare strings by the binary value of each character in the string @@ -71,11 +50,4 @@ Those differences happens only on MySQL level ( for instance in
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/wurfl-cloud-integration-in-dotkernel-1-6-0.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/wurfl-cloud-integration-in-dotkernel-1-6-0.html.twig index c60bea9..fc22bbf 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/wurfl-cloud-integration-in-dotkernel-1-6-0.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/wurfl-cloud-integration-in-dotkernel-1-6-0.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/wurfl-cloud-integration-in-dotkernel-1-6-0.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Wurfl Cloud Integration in Dotkernel 1.6.0{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Another new feature in version 1.6.0 of Dotkernel is the integration of Wurfl Cloud. Wurfl or Wireless Universal Resource FiLe is coming with a new way to deliver their services of device detection and they named it Wurfl Cloud. @@ -38,7 +17,7 @@ Quick steps to have a functional device detection in Dotkernel.
  • choose device_os and mobile_browser as your capabilities
  • copy your API Key in application.ini in Dotkernel
  • -
    >resources.useragent.wurflcloud.api_key = 000000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    +
    resources.useragent.wurflcloud.api_key = 000000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    Now you can test it by changing the user agent in your browser to a mobile device and access your project. Now you can see that you are redirected to the mobile module. To see how mobile detection is working in Dotkernel read this post. @@ -71,11 +50,4 @@ To see how mobile detection is working in Dotkernel read this -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} We integrated long time ago the WURFL PHP API into Dotkernel code base. At that time, the license of that WURFL library was GNU/GPL, which make it perfect compatible with Zend Framework license( new BSD) and Dotkernel ( OSL 3.0). Everybody was happy, users was able to make web applications for them or for their customers without worry about licensing costs at all. On June 6th, 2011, the WURFL PHP API library was updated to version 1.3.0. So we updated too the latest Dotkernel 1.5.0 ( now in release candidate stage, soon to be released as stable) , without noticing the change on its license, from GNU/GPL to AGPL which suddenly transform it into a 'trial only' library, for "Product evaluation" only. @@ -63,11 +42,4 @@ But we must keep -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} WURFL is integrated into Dotkernel, using the Zend_Http_UserAgent class from the latest release ZF 1.11.0rc1 ( Beta release at the date of this post). The integration of WURFL into Dotkernel is described below. @@ -45,7 +24,7 @@ Download resources.useragent.wurflapi.wurfl_api_version = "1.1" resources.useragent.wurflapi.wurfl_lib_dir = APPLICATION_PATH "/library/Wurfl/" resources.useragent.wurflapi.wurfl_config_file = APPLICATION_PATH "/configs/wurfl.xml"
      @@ -58,7 +37,7 @@ resources.useragent.wurflapi.wurfl_config_file = APPLICATION_PATH "/configs/wurf
    • Copy the contents of the folder wurfl-php-1.1\WURFL to library\Wurfl
    WURFL is integrated into Dotkernel in the mobile module, but to access WURFL configuration, use -
    >$userAgent = new Zend_Http_UserAgent($config->resources->useragent);
    +
    $userAgent = new Zend_Http_UserAgent($config->resources->useragent);
     $device = $userAgent->getDevice();
    $userAgent->getDevice() returns all the relevant information about the current user agent ($_SERVER['HTTP_USER_AGENT']) @@ -96,11 +75,4 @@ $device = $userAgent->getDevice();
    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/zend-auth-and-zend-acl-integrated-in-dotkernel.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/zend-auth-and-zend-acl-integrated-in-dotkernel.html.twig index 8ade908..925ce13 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/zend-auth-and-zend-acl-integrated-in-dotkernel.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/zend-auth-and-zend-acl-integrated-in-dotkernel.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/zend-auth-and-zend-acl-integrated-in-dotkernel.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Zend_Auth and Zend_Acl integrated in Dotkernel{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Zend_Auth and Zend_Acl have been integrated into the Dotkernel, starting with version 1.5.0 With the integration of these two major components for user authorization and access we completely refactored the User and Admin models by using Dot_Auth and Dot_Acl classes. @@ -29,7 +8,7 @@ With the integration of these two major components for user authorization and ac The Dot_Auth class authenticates the user by checking the database – Zend_Auth_Adapter_DbTable. -
    >private function _getAuthAdapter($who)
    +
    private function _getAuthAdapter($who)
         {
             $dbAdapter = Zend_Registry::get('database');
             $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
    @@ -49,9 +28,9 @@ The Dot_Acl class
         
  • uses Zend_Acl,  for checking if a role (user) has access to a resource (controller)
  • Dot_Auth calls the isAllowed method from Dot_Acl which authenticates the user. -
    >// instantiate Zend_Acl
    +
    // instantiate Zend_Acl
     $this->acl = new Zend_Acl();
    -
    >public function isAllowed($role)
    +
    public function isAllowed($role)
         {
             $resource = $this->requestControllerProcessed;
             $privillege = $this->requestAction;
    @@ -65,7 +44,7 @@ $this->acl = new Zend_Acl();
    } }
    IndexController.php is calling Dot_Auth -
    >$dotAuth = Dot_Auth::getInstance();
    +
    $dotAuth = Dot_Auth::getInstance();
     $dotAuth->checkIdentity('user');

    Frequently Asked Questions

    @@ -102,11 +81,4 @@ $dotAuth->checkIdentity('user');
    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/zend-console-implementation-in-dotkernel.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/zend-console-implementation-in-dotkernel.html.twig index b9587d8..57f8ee6 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/zend-console-implementation-in-dotkernel.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/zend-console-implementation-in-dotkernel.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/zend-console-implementation-in-dotkernel.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Zend_Console implementation in Dotkernel{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Starting with 1.5, Dotkernel has a Console bootstrap to easily run PHP scripts from the command line. The most common use for this is to be able to run cron jobs without using wget and going through Apache. @@ -37,8 +16,8 @@ Any other arguments set when calling the script will be available in the control The controller bundled with Dotkernel has two example actions, "count-users" which demonstrates how to interact with models, and "send-newsletter" which reads the newsletter from the command line.

    Examples

    -
    >/var/www/vhosts/example.com/httpdocs/Cron/index.php -e staging -a count-users
    -
    >/var/www/vhosts/example.com/httpdocs/Cron/index.php -e staging -a send-newsletter "test newsletter"
    +
    /var/www/vhosts/example.com/httpdocs/Cron/index.php -e staging -a count-users
    +
    /var/www/vhosts/example.com/httpdocs/Cron/index.php -e staging -a send-newsletter "test newsletter"

    Frequently Asked Questions

    @@ -74,11 +53,4 @@ The controller bundled with Dotkernel has two example actions, "count-users" whi
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/zend-framework-dropped-integration-of-wurfl-adapter.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/zend-framework-dropped-integration-of-wurfl-adapter.html.twig index cbb3164..62dc33e 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/zend-framework-dropped-integration-of-wurfl-adapter.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/zend-framework-dropped-integration-of-wurfl-adapter.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/zend-framework-dropped-integration-of-wurfl-adapter.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Zend Framework dropped integration of WURFL adapter{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} According to Matthew Weier O'Phinney, Zend Framework Project Leader, in the next release of ZF, 1.12.0 branch, WURFL adapter will be dropped
    due to a change in licensing by the WURFL project -- the free version is now AGPL -- we're dropping the WURFL adapter from @@ -54,11 +33,4 @@ Dotkernel framework is using its own WURFL adapter, so this will not affect proj
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/zend-registry-usage-in-dotkernel.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/zend-registry-usage-in-dotkernel.html.twig index 2184bbb..2681bdc 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/zend-registry-usage-in-dotkernel.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/zend-registry-usage-in-dotkernel.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/zend-registry-usage-in-dotkernel.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Zend Registry usage in Dotkernel{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} In Dotkernel, Zend_Registry will contain the following variables:
    • startTime - the result of microtime() at the beginning of the request
    • @@ -37,13 +16,13 @@ In Dotkernel, Zend_Registry will contain the following variables:
    • session - the session object
    To use the variables in the registry, you must first get an instance of the registry object: -
    >$registry = Zend_Registry::getInstance();
    +
    $registry = Zend_Registry::getInstance();
     //...
     echo $registry->startTime;
     //...
     echo $registry->requestAction;
    Or if you only need one variable from the registry, you can get it directly using: -
    >$action = Zend_Registry::get('requestAction');
    +
    $action = Zend_Registry::get('requestAction');
    You can find more information about Zend_Registry, in the Zend Framework Documentation.

    Frequently Asked Questions

    @@ -74,11 +53,4 @@ You can find more information about Zend_Registry, in the -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel/zend-studio-php-formatter-file-for-dotkernel-coding-standard.html.twig b/src/Blog/templates/page/blog-resource/dotkernel/zend-studio-php-formatter-file-for-dotkernel-coding-standard.html.twig index a04b30b..ce8ffc1 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel/zend-studio-php-formatter-file-for-dotkernel-coding-standard.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel/zend-studio-php-formatter-file-for-dotkernel-coding-standard.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel/zend-studio-php-formatter-file-for-dotkernel-coding-standard.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Zend Studio PHP Formatter file for Dotkernel coding standard.{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Here is  uploaded the XML file , ready to be imported in your Zend Studio, version 9.x This file follow Dotkernel’s Coding standard. @@ -46,11 +25,4 @@ Import the xml file.
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/how-to/using-the-urlgenerator-work-in-fastroute.html.twig b/src/Blog/templates/page/blog-resource/how-to/using-the-urlgenerator-work-in-fastroute.html.twig index 77cc4a0..105389f 100644 --- a/src/Blog/templates/page/blog-resource/how-to/using-the-urlgenerator-work-in-fastroute.html.twig +++ b/src/Blog/templates/page/blog-resource/how-to/using-the-urlgenerator-work-in-fastroute.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/how-to/using-the-urlgenerator-work-in-fastroute.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Using the URLGenerator work in FastRoute{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: "How to's", - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Dotkernel 3 uses FastRoute under the hood, which is an excellent and fast routing package, but it does have some quirks. A wrong setup can lead to many headaches, as it's not prominent that the error you're experiencing is from FastRoute, and you may not know where exactly to look for the cause. @@ -29,19 +8,19 @@ A wrong setup can lead to many headaches, as it's not prominent that the error y To save you some time, here's a how-to for creating and using routes in Dotkernel 3.

    Declaring routes

    When defining routes in the routes.php file, they need to follow a specific pattern, a usual route would look like this: -
    >$app->route('/page', , , 'page');
    +
    $app->route('/page', , , 'page');
    Notice the '/page' part, as this is crucial. FastRoute cannot handle a slash-suffix, which means that /page will give you the indexAction, whereas /page/ will give you a 404.
    To prevent the URLGenerator from adding a slash-suffix, we need to make sure that the optional slash is included in the optional block. The above example is correct, if we instead wrote it like this, it'd be woefully bad. -
    >$app->route('/page/', , , 'page');
    +
    $app->route('/page/', , , 'page');
    Notice that the slash has changed places and is now outside the optional block. This would generate a /page/ route for the index action, which is bad, so always include any optional parts, even slashes, in the optional block.

    Referencing routes

    Developers are used to hand-write and hard-code URLs into anchor tags, but this is a bad idea, as a URL may change and then you'd have to go through the entire app to find every single reference for it. Instead, every route we define has a name that can be used to reference it in the URLGenerator. -
    >$app->route('/page', , , 'page');
    +
    $app->route('/page', , , 'page');
    That very last part there, that's the route name, which can be referenced in any view or controller to generate a route to a specific route in the app.
    To use it in a Controller, you have access to $this->url(); which takes the route name, in this case, 'page', as the first parameter, and then any optional blocks as the second parameter. A controller redirect may then look like this: -
    >return new RedirectResponse($this->url('contact', ['action' => 'thank-you']));
    +
    return new RedirectResponse($this->url('contact', ['action' => 'thank-you']));
    Using the URLGenerator in views is approximately the same, since you have access to the global path() method. The path method works the same way as the url() method, and takes the route name as the first parameter, and any optional blocks as its second parameter. This is of course done in Twig, so we need to put curly brackets around it since it's dynamic and not static HTML. It could look like this: @@ -75,11 +54,4 @@ The path method works the same way as the url() method, and takes t
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/how-to/what-is-psr-7-and-how-to-use-it.html.twig b/src/Blog/templates/page/blog-resource/how-to/what-is-psr-7-and-how-to-use-it.html.twig index 8f6389c7258308fdb879d99b076b387e24a269a5..a122b5abcbffaa49243a165984a225a69641ee8c 100644 GIT binary patch delta 171 zcmZ3V*N`?rL?bCDKV7#Vzqmv%qa-&+ucSOPU0p%7mW!)eRRJiMoUM?QpHiuyy7?OO z6yD9*f`Uwwn~fbO?-LH1{McA-vc5>g<`p8XjGOhuBte8ISCUJL0xh4F4+#I$qQx0H%BR0uz(q>R9YA}>#L)(RIsk z*J@gI+uGQ=ilVqlXbr4=U1C)38&DeK=u#*>4ewxyQj!`2gi>l?gxQpo!();Lz`pEo zufcFn*C&`LST?~Kq@aF#25Ewq$UYac;b5s5orKcF9_vtqIx;R9QzDn9hir2u36sV- zGpD-a9)eA=5WA&;hx=g2P?I}DWR4|uwz)J8V-yd$FH3vb$@EP9wGL6zlBh?RpE4&@ zb)~c(>rdLpN8P~?r{JIrVv=rH-pxYLs6H zp4@$w2~KiF^I6KMANgZ-lG|197XJj@r4KhUd+O)%N>C`ipVQml%Z1?U{hgcf_SVYV zjJjAY2A@jLGr`5`K?L`M@7B(3I=M`|saLe^Q%;)HwSx@ZXZSF6#n8+&X}uB;bT6yU MtA%@ped-DR1Ly5}hyVZp diff --git a/src/Blog/templates/page/blog-resource/javascript/intro-to-jquery.html.twig b/src/Blog/templates/page/blog-resource/javascript/intro-to-jquery.html.twig index bda8b09..f54fd41 100644 --- a/src/Blog/templates/page/blog-resource/javascript/intro-to-jquery.html.twig +++ b/src/Blog/templates/page/blog-resource/javascript/intro-to-jquery.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/javascript/intro-to-jquery.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Intro to jQuery{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Javascript', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Starting with the 1.5 release, Dotkernel will make the switch from Dojo to jQuery. On jQuery's website, there's an excellent "Getting started with jQuery tutorial", as well as a extensive documentation for the framework, so I'll just go over a few basic concepts and common examples. @@ -34,7 +13,7 @@ It contains a few useful methods such as Manipulating matched elements There are a number of functions that can be applied to a jQuery object, for example: -
    >$("input#username").addClass("error")
    +
    $("input#username").addClass("error")
    Since most of these functions will also return the same jQuery object, they can be chained. For example, the following expression will set the text of the #errors element and fade it in: -
    >$("#errors").text("The was an eror").fadeIn()
    +
    $("#errors").text("The was an eror").fadeIn()

    Events

    Adding events in Javascript instead of using "onclick" attributes in HTML means that the markup is much cleaner, and you get better support for more events in all browsers. In the following example, a click event is attached to an element. The function that will be called when the event is fired (callback) is passed as an argument to the click function -
    >$("#helpButton").click(function(){
    +
    $("#helpButton").click(function(){
         $("#helpMessage").show()
     });
     

    Ajax

    jQuery has
    many ajax helper functions, here is a simple example that will replace the contents of an element with data loaded from the server: -
    >$.get("get-news.php", function(result){
    +
    $.get("get-news.php", function(result){
        $("#news").html(result)
     })
     

    Putting it all together

    The following snippet can be used on a registration form to check whether the username already exists, before the form is submitted. -
    >$(document).ready(
    +
    $(document).ready(
       $("input#username").blur(function(){
         $.getJSON(
           "/check-username.php",
    @@ -115,11 +94,4 @@ The following snippet can be used on a registration form to check whether the us
             
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/javascript/javascript-email-validator.html.twig b/src/Blog/templates/page/blog-resource/javascript/javascript-email-validator.html.twig index 7f66533..fccf2ac 100644 --- a/src/Blog/templates/page/blog-resource/javascript/javascript-email-validator.html.twig +++ b/src/Blog/templates/page/blog-resource/javascript/javascript-email-validator.html.twig @@ -1,33 +1,12 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/javascript/javascript-email-validator.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Javascript: Email Validator{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Javascript', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Problem: email should allow +/- characters in user, - in domain. dash (-) should be allowed anywhere in an email address or domain. plus (+) is allowed in the username (many people use this for categorization, especially at gmail) Solution : -
    >var regex = new RegExp("^+(\.+)*@+(\.+)*\.({2,})$","i");
    +
    var regex = new RegExp("^+(\.+)*@+(\.+)*\.({2,})$","i");
    This will validated also emails like: username1+username2@gmail-domain.co.uk

    Frequently Asked Questions

    @@ -52,11 +31,4 @@ This will validated also emails like: username1+username2@gmail-domain.co.uk
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/better-unicode-support-in-mysql-5-5-utf8mb4.html.twig b/src/Blog/templates/page/blog-resource/php-development/better-unicode-support-in-mysql-5-5-utf8mb4.html.twig index 85be88e..b836ae0 100644 --- a/src/Blog/templates/page/blog-resource/php-development/better-unicode-support-in-mysql-5-5-utf8mb4.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/better-unicode-support-in-mysql-5-5-utf8mb4.html.twig @@ -1,47 +1,19 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/better-unicode-support-in-mysql-5-5-utf8mb4.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Better Unicode Support in MySQL 5.5 UTF8MB4{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Beginning with version 5.5 of MySQL , utf8mb4 character set was introduced, in order to better support Unicode. Further reading: MySQL and Unicode , also directly related to PHP Sample dk.sql file, part of Dotkernel framework, was updated in revision 793 Only one downside , is not possible to use anymore VARCHAR(255), as you will get the error: -
    >#1071 - Specified key was too long; max key length is 767 bytes
    +
    #1071 - Specified key was too long; max key length is 767 bytes
    Explanation here ; so we use instead VARCHAR(150) Now we should change the connection charset. In config/application.ini file, edit the below line : -
    >database.params.charset = utf8mb4
    +
    database.params.charset = utf8mb4
    Other changes that can be made in my.cnf file are all related to replacing the string utf8_* with utf8mb4_* -
    >character_set_server=utf8mb4
    -
    >collation_server=utf8mb4_general_ci
    -
    >collation_server=utf8mb4_unicode_ci
    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    +
    character_set_server=utf8mb4
    +
    collation_server=utf8mb4_general_ci
    +
    collation_server=utf8mb4_unicode_ci
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/protection-against-sql-injection-using-pdo-and-zend-framework-part-2.html.twig b/src/Blog/templates/page/blog-resource/php-development/protection-against-sql-injection-using-pdo-and-zend-framework-part-2.html.twig index d03a387..1955088 100644 --- a/src/Blog/templates/page/blog-resource/php-development/protection-against-sql-injection-using-pdo-and-zend-framework-part-2.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/protection-against-sql-injection-using-pdo-and-zend-framework-part-2.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/protection-against-sql-injection-using-pdo-and-zend-framework-part-2.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Protection against SQL Injection using PDO and Zend Framework - part 2{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Following the preview article about SQL Injection, here is more - a strong argument why you should use Zend Framework for handling database access. Zend_Db is the primary class used for access the database, but there is more: Zend_Db_Statement, Zend_Db_Select and Zend_Db_Tables. What you should know about their methods is: @@ -63,7 +42,7 @@ What you should know about their methods is: For more details see Stefan Esser slides. PS. A short tip, you can use cast type to avoid SQL Injection in WHERE clause where is possible. -
    >$sql= 'SELECT * FROM table WHERE id = ' . (int)$_POST['id'];
    +
    $sql= 'SELECT * FROM table WHERE id = ' . (int)$_POST['id'];
     

    Frequently Asked Questions

    @@ -106,11 +85,4 @@ PS. A short -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} By default, MySql servers on Linux machines where Plesk is installed, have the old_passwords=1 or ON flag. That mean even if you have MySQL 5.5+ version, it still use old style of password storage, pre-mysql 4.1+ @@ -29,7 +8,7 @@ That mean even if you have MySQL 5.5+ version, it still use old style of passwor If you try to connect remote, from your local development machine, you will get an ugly error, like:   -
    >Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE  mysqlnd
    +
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE  mysqlnd
     cannot connect  to MySQL 4.1+ using the old insecure authentication. Please use an administration
     tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password').
     This will store a new, and more secure, hash value in mysql.user.
    @@ -41,7 +20,7 @@ If this user is used in other scripts executed by PHP 5.2 or earlier you might n
         
  • Grant priviledges to that user to the database you want to connect to.
  • Now run the below SQL statements:
  • -
    >SET old_passwords = 0;
    +
    SET old_passwords = 0;
     UPDATE mysql.user SET Password = PASSWORD('somepassword') WHERE User = 'someuser' limit 1;
     SELECT LENGTH(Password) FROM mysql.user WHERE User = 'someuser';
     FLUSH PRIVILEGES;
    @@ -81,11 +60,4 @@ NOTE: if you browse the table mysql.user , you will note that the password field
    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-as-pear-accessible-repository-on-plesk-server.html.twig b/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-as-pear-accessible-repository-on-plesk-server.html.twig index a6fcccf..e37e516 100644 --- a/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-as-pear-accessible-repository-on-plesk-server.html.twig +++ b/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-as-pear-accessible-repository-on-plesk-server.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/zend-framework/zend-framework-as-pear-accessible-repository-on-plesk-server.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Zend Framework as PEAR accessible repository on Plesk server{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Zend Framework', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Why we want to install ZF as PEAR ? Because is too boring and time consuming to move all ZF files up and down for each script you want to install , there are a lot of files. Also that way we can forget about the need to update ZF at latest versions, and keep tracks of which version and on which server we have ZF.  Of course, backward compatibility  can be an issue in future ZF releases ( like 2.0 branch for PHP > 5.3) @@ -31,18 +10,11 @@ Also that way we can forget about the need to update ZF at latest versions, and
  • Follow the instructions for ZF PEAR . Then simply use: pear install zend/zend
  • Create a vhosts.conf file in /var/www/vhosts/dotkernel.com/conf  or where is your vhost configuration folder located.
  • In that file, remove the open_basedir :
  • -
    >php_admin_value open_basedir "/var/www/vhosts/dotkernel.com/httpdocs:/tmp:/usr/share/pear"
    +
    php_admin_value open_basedir "/var/www/vhosts/dotkernel.com/httpdocs:/tmp:/usr/share/pear"
  • rebuild all vhosts:  /usr/local/psa/admin/sbin/websrvmng -a
  • Restart httpd
  • Call directly the preloader: -
    > require_once 'Zend/Loader/Autoloader.php';
    +
     require_once 'Zend/Loader/Autoloader.php';
  • -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} From 5c28629f77625b5667597f235323358bb92e4386 Mon Sep 17 00:00:00 2001 From: OStefan2001 Date: Fri, 31 Jul 2026 16:29:15 +0300 Subject: [PATCH 4/4] Issue 38 + code recommendations --- src/App/assets/scss/components/_blog.scss | 2 +- ...ten-for-android-install-referrer.html.twig | 32 +-- ...the-same-app-for-the-same-action.html.twig | 32 +-- ...ootstrap-modern-php-applications.html.twig | 32 +-- ...e-for-a-mezzio-based-application.html.twig | 32 +-- .../understanding-middleware.html.twig | 32 +-- .../aptana-set-svn-keywords.html.twig | 32 +-- ...y-in-dotkernel-headless-platform.html.twig | 32 +-- ...cess-301-redirect-non-www-to-www.html.twig | 32 +-- ...rds-setup-in-php-ide-zend-studio.html.twig | 32 +-- ...the-fetch-functions-from-zend-db.html.twig | 32 +-- ...c-is-retiring-consider-it-solved.html.twig | 32 +-- ...-migration-from-postman-to-bruno.html.twig | 32 +-- ...ndpoint-to-collect-client-errors.html.twig | 32 +-- ...egotiation-in-dotkernel-rest-api.html.twig | 32 +-- .../dotkernel-api-1-0-0-released.html.twig | 32 +-- ...el-api-client-side-authorization.html.twig | 32 +-- ...el-api-server-side-authorization.html.twig | 32 +-- ...nel-api-versus-laminas-api-tools.html.twig | 32 +-- ...orting-endpoint-in-dotkernel-api.html.twig | 32 +-- ...ement-mailchimp-in-dotkernel-api.html.twig | 32 +-- ...-implementation-in-dotkernel-api.html.twig | 32 +-- ...elopment-report-december-11-2017.html.twig | 32 +-- .../dotkernel3/dotkernel-admin-v4.html.twig | 32 +-- ...tkernel-admin-version-3-launched.html.twig | 32 +-- ...-api-architecture-and-components.html.twig | 32 +-- ...rnel-frontend-version-3-launched.html.twig | 32 +-- ...rnel3-stable-release-version-1-0.html.twig | 32 +-- ...p-8-3-support-in-dotkernel-admin.html.twig | 32 +-- ...php-8-3-support-in-dotkernel-api.html.twig | 32 +-- ...-3-support-in-dotkernel-frontend.html.twig | 32 +-- ...n-in-dotkernel-headless-platform.html.twig | 32 +-- ...t-of-dotkernel-headless-platform.html.twig | 32 +-- ...platform-the-whats-hows-and-whys.html.twig | 32 +-- ...n-in-dotkernel-headless-platform.html.twig | 32 +-- ...enerate-common-code-in-dotkernel.html.twig | 32 +-- ...on-pattern-versus-api-versioning.html.twig | 32 +-- ...-time-password-totp-in-dotkernel.html.twig | 34 +--- ...e-in-dotkernel-headless-platform.html.twig | 32 +-- ...stgresql-native-uuid-and-php-8-5.html.twig | 32 +-- ...p-in-dotkernel-using-mezzio-cors.html.twig | 32 +-- ...-admin-accounts-in-dotkernel-api.html.twig | 32 +-- ...e-migrations-and-how-to-use-them.html.twig | 32 +-- ...ne-cache-in-mezzio-and-dotkernel.html.twig | 32 +-- ...n-without-dropping-custom-tables.html.twig | 32 +-- ...in-an-generic-laminas-mezzio-app.html.twig | 32 +-- ...-php-mariadb-composer-phpmyadmin.html.twig | 186 ++++++++---------- ...s-in-dotkernel-api-using-dot-cli.html.twig | 32 +-- ...xpressive-2-to-zend-expressive-3.html.twig | 32 +-- ...ith-dot-cli-based-on-laminas-cli.html.twig | 32 +-- ...documentation-in-dotkernel-api-3.html.twig | 32 +-- ...is-cross-origin-token-redemption.html.twig | 32 +-- ...p-html-css-javascript-editor-ide.html.twig | 32 +-- ...-lgpl-in-practice-dotkernel-case.html.twig | 32 +-- ...nts-psr-15-handlers-vite-phpstan.html.twig | 32 +-- ...ing-using-fastroute-in-dotkernel.html.twig | 32 +-- ...iant-handlers-in-dotkernel-light.html.twig | 32 +-- ...ache-mariadb-composer-phpmyadmin.html.twig | 32 +-- ...a-php-installation-in-aptana-2-x.html.twig | 32 +-- ...-doctrine-data-fixtures-vs-phinx.html.twig | 32 +-- ...-of-support-for-php-5-2-x-branch.html.twig | 32 +-- ...ithmetic-why-is-int-0-7-0-1-10-7.html.twig | 32 +-- ...how-to-upgrade-wamp-to-php-5-3-4.html.twig | 32 +-- .../mezzio-app-development-in-wsl2.html.twig | 32 +-- ...-upgrade-possible-for-wampserver.html.twig | 32 +-- ...t-development-staging-production.html.twig | 32 +-- .../php-support-back-in-aptana-3-0.html.twig | 32 +-- ...ion-using-pdo-and-zend-framework.html.twig | 32 +-- ...sis-replacing-psalm-with-phpstan.html.twig | 32 +-- ...nect-to-dotkernel-tracker-mantis.html.twig | 32 +-- ...-php-7-express-in-zend-studio-13.html.twig | 32 +-- ...l-ignore-patterns-in-zend-studio.html.twig | 32 +-- ...tified-engineer-in-dotboost-team.html.twig | 32 +-- ...erver-5-5-quick-setup-on-windows.html.twig | 32 +-- ...lling-pear-packages-with-php-7-2.html.twig | 32 +-- ...ntl-php-extension-problem-solved.html.twig | 32 +-- ...y-how-to-setup-phpcs-in-phpstorm.html.twig | 32 +-- ...ar-a-very-helpfull-zf-debug-tool.html.twig | 32 +-- ...ear-channel-for-zend-framework-1.html.twig | 32 +-- ...l-php-api-libraries-gpl-versions.html.twig | 32 +-- ...2-4-released-with-security-fixes.html.twig | 32 +-- .../zend-framework-1-7-0-released.html.twig | 32 +-- .../zend-framework-1-end-of-life.html.twig | 32 +-- ...-fixes-in-zend-framework-1-12-12.html.twig | 32 +-- 84 files changed, 244 insertions(+), 2570 deletions(-) diff --git a/src/App/assets/scss/components/_blog.scss b/src/App/assets/scss/components/_blog.scss index 21e83bf..9e8a50b 100644 --- a/src/App/assets/scss/components/_blog.scss +++ b/src/App/assets/scss/components/_blog.scss @@ -627,4 +627,4 @@ $bp-tablet: 900px; & + h2 { margin-top: 0; } -} \ No newline at end of file +} diff --git a/src/Blog/templates/page/blog-resource/android/listen-for-android-install-referrer.html.twig b/src/Blog/templates/page/blog-resource/android/listen-for-android-install-referrer.html.twig index 1c6179d..4780de8 100644 --- a/src/Blog/templates/page/blog-resource/android/listen-for-android-install-referrer.html.twig +++ b/src/Blog/templates/page/blog-resource/android/listen-for-android-install-referrer.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/android/listen-for-android-install-referrer.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Listen for Android install referrer{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Android', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Getting Referrer Data at Install Time

    Have you ever wondered if Android market sends you information at the moment of app install? Wouldn't it be nice to create custom links to your Android application, including bits of information about the referrer, and send it directly to the app for processing at install? This could be a simple and accurate solution for mobile app install tracking, but I'm sure you can find this useful in many ways.

    @@ -44,11 +23,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/android/multiple-broadcast-receivers-in-the-same-app-for-the-same-action.html.twig b/src/Blog/templates/page/blog-resource/android/multiple-broadcast-receivers-in-the-same-app-for-the-same-action.html.twig index d8fd7c9..687045f 100644 --- a/src/Blog/templates/page/blog-resource/android/multiple-broadcast-receivers-in-the-same-app-for-the-same-action.html.twig +++ b/src/Blog/templates/page/blog-resource/android/multiple-broadcast-receivers-in-the-same-app-for-the-same-action.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/android/multiple-broadcast-receivers-in-the-same-app-for-the-same-action.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Multiple broadcast receivers in the same app, for the same action{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Android', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Did you come to a point where using multiple broadcast receivers to listen for the same intent, separatly, in the same android app, leads to unexpected results? If that's the case, one broadcast receiver might consume the broadcasted intent, online casino leaving the others with nothing to receive. This can be the case where you use 3rd party libraries with broadcast receivers defined. @@ -44,11 +23,4 @@ The following is a solution for this kind of problem, a code snippet inspired by
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/architecture/configprovider-bootstrap-modern-php-applications.html.twig b/src/Blog/templates/page/blog-resource/architecture/configprovider-bootstrap-modern-php-applications.html.twig index 872fa32..a40ae30 100644 --- a/src/Blog/templates/page/blog-resource/architecture/configprovider-bootstrap-modern-php-applications.html.twig +++ b/src/Blog/templates/page/blog-resource/architecture/configprovider-bootstrap-modern-php-applications.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/architecture/configprovider-bootstrap-modern-php-applications.jsonld.twig') }} {% endblock %} - -{% block title %}ConfigProvider - Bootstrap Modern PHP Applications{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Architecture', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    In PHP, the ConfigProvider is a class that is part of an application's bootstrap process. It's a class or callable that returns configuration data telling the platform which middleware should run, in what order, and sometimes under what conditions.

    If you're talking specifically about the ConfigProvider in the Laminas/Mezzio ecosystem, it's literally an array of configuration, settings, or anything else your application needs.

    @@ -185,11 +164,4 @@

    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/architecture/request-lifecycle-for-a-mezzio-based-application.html.twig b/src/Blog/templates/page/blog-resource/architecture/request-lifecycle-for-a-mezzio-based-application.html.twig index 0a13e6b..4aa60a8 100644 --- a/src/Blog/templates/page/blog-resource/architecture/request-lifecycle-for-a-mezzio-based-application.html.twig +++ b/src/Blog/templates/page/blog-resource/architecture/request-lifecycle-for-a-mezzio-based-application.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/architecture/request-lifecycle-for-a-mezzio-based-application.jsonld.twig') }} {% endblock %} - -{% block title %}Request Lifecycle for a Mezzio-Based Application{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Architecture', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    +{% extends '@layout/blog-post.html.twig' %} - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Seamlessly Interconnected Middleware for Enterprise-Level Solutions

    The request lifecycle is the sequence of steps that happen from the moment a user makes an HTTP request until the server sends back a response.

    @@ -598,11 +577,4 @@ $('.hasTooltip').hover(
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/architecture/understanding-middleware.html.twig b/src/Blog/templates/page/blog-resource/architecture/understanding-middleware.html.twig index b5b47df..649217d 100644 --- a/src/Blog/templates/page/blog-resource/architecture/understanding-middleware.html.twig +++ b/src/Blog/templates/page/blog-resource/architecture/understanding-middleware.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/architecture/understanding-middleware.jsonld.twig') }} {% endblock %} - -{% block title %}Understanding Middleware{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Architecture', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Middleware is code that exists between the request and response, and which can take the incoming request, perform actions based on it, and either complete the response or pass delegation on to the next middleware in the queue.

    The purpose of middleware

    @@ -177,11 +156,4 @@
  • From Helpers to Middleware
  • -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/best-practice/aptana-set-svn-keywords.html.twig b/src/Blog/templates/page/blog-resource/best-practice/aptana-set-svn-keywords.html.twig index 7ce1503..a6aa857 100644 --- a/src/Blog/templates/page/blog-resource/best-practice/aptana-set-svn-keywords.html.twig +++ b/src/Blog/templates/page/blog-resource/best-practice/aptana-set-svn-keywords.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/best-practice/aptana-set-svn-keywords.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Aptana - set SVN keywords{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Best Practice', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} In Aptana it's very simple to set the svn:keywords property for a file. For example if you want to set the svn keyword property Id: @@ -65,11 +44,4 @@ When you make the SVN commit of the file, the $Id$ keyword will be repl
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/best-practice/basic-security-in-dotkernel-headless-platform.html.twig b/src/Blog/templates/page/blog-resource/best-practice/basic-security-in-dotkernel-headless-platform.html.twig index b1f9c52..b271bb7 100644 --- a/src/Blog/templates/page/blog-resource/best-practice/basic-security-in-dotkernel-headless-platform.html.twig +++ b/src/Blog/templates/page/blog-resource/best-practice/basic-security-in-dotkernel-headless-platform.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/best-practice/basic-security-in-dotkernel-headless-platform.jsonld.twig') }} {% endblock %} - -{% block title %}Basic Security in Dotkernel Headless Platform{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Best Practice', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Software security should always be in the back of your mind as a developer. It may seem fine at first to deliver a feature sooner, only to find later on that you left a backdoor into your crisp new update. You ignore security at your own risk, with potentially major costs to your personal or your organization's image, and to your client's trust in your abilities. The costs to recover the damages caused by a lacking security are sometimes astronomical, enough to put a company out of business.

    There are many facets of software security, meaning there are a lot of potential ways a hacker can access your code or your data fraudulently:

    @@ -247,11 +226,4 @@

    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/best-practice/htaccess-301-redirect-non-www-to-www.html.twig b/src/Blog/templates/page/blog-resource/best-practice/htaccess-301-redirect-non-www-to-www.html.twig index 204ce2a..c4d7ae4 100644 --- a/src/Blog/templates/page/blog-resource/best-practice/htaccess-301-redirect-non-www-to-www.html.twig +++ b/src/Blog/templates/page/blog-resource/best-practice/htaccess-301-redirect-non-www-to-www.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/best-practice/htaccess-301-redirect-non-www-to-www.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}htaccess 301 redirect non-www to www{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Best Practice', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} To always redirect users to the www site (for example: http://dotboost.com to http://www.dotboost.com), add the following lines to .htaccess, right after RewriteEngine On:
    RewriteCond %{HTTP_HOST} ^dotboost.com
    @@ -50,11 +29,4 @@ Replace dotboost.com with your site's domain.
             
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/best-practice/svn-keywords-setup-in-php-ide-zend-studio.html.twig b/src/Blog/templates/page/blog-resource/best-practice/svn-keywords-setup-in-php-ide-zend-studio.html.twig index 7fe9b48..14a5710 100644 --- a/src/Blog/templates/page/blog-resource/best-practice/svn-keywords-setup-in-php-ide-zend-studio.html.twig +++ b/src/Blog/templates/page/blog-resource/best-practice/svn-keywords-setup-in-php-ide-zend-studio.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/best-practice/svn-keywords-setup-in-php-ide-zend-studio.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}SVN keywords setup in PHP IDE ( Zend Studio){% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Best Practice', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} For a better integration of SVN, your PHP IDE( Zend Studio), and a bug tracker of choice, the below proprieties must be set, for each project you have. @@ -97,11 +76,4 @@ Check the Use filtration by the resource name and add
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/best-practice/what-are-returning-the-fetch-functions-from-zend-db.html.twig b/src/Blog/templates/page/blog-resource/best-practice/what-are-returning-the-fetch-functions-from-zend-db.html.twig index 955ef5f..5bdaedf 100644 --- a/src/Blog/templates/page/blog-resource/best-practice/what-are-returning-the-fetch-functions-from-zend-db.html.twig +++ b/src/Blog/templates/page/blog-resource/best-practice/what-are-returning-the-fetch-functions-from-zend-db.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/best-practice/what-are-returning-the-fetch-functions-from-zend-db.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}What are returning the FETCH functions from Zend_Db{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Best Practice', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Continuing the Zend_DB article series, we are stopping now at FETCH methods that are in Zend_Db_Adapter_Abstract:
     array  fetchAll  (string|Zend_Db_Select $sql, , )
    @@ -172,11 +151,4 @@ $a = $db->fetchRow($select);
             
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/best-practice/zf-is-retired-laminas-mvc-is-retiring-consider-it-solved.html.twig b/src/Blog/templates/page/blog-resource/best-practice/zf-is-retired-laminas-mvc-is-retiring-consider-it-solved.html.twig index d4a7ac4..c3c303b 100644 --- a/src/Blog/templates/page/blog-resource/best-practice/zf-is-retired-laminas-mvc-is-retiring-consider-it-solved.html.twig +++ b/src/Blog/templates/page/blog-resource/best-practice/zf-is-retired-laminas-mvc-is-retiring-consider-it-solved.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/best-practice/zf-is-retired-laminas-mvc-is-retiring-consider-it-solved.jsonld.twig') }} {% endblock %} - -{% block title %}ZF Is Retired. Laminas MVC Is Retiring. Consider It Solved{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Best Practice', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    It all started with the announcement: Laminas MVC Is Retiring. Some people wrongfully thought everything with a Laminas logo is going away - NOT SO! Read on for a bit of history about Zend and Laminas, what it means to migrate your platform and why it's a decision that should not be taken lightly.

    A Bit of History

    @@ -110,11 +89,4 @@

    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel-api/api-client-migration-from-postman-to-bruno.html.twig b/src/Blog/templates/page/blog-resource/dotkernel-api/api-client-migration-from-postman-to-bruno.html.twig index eef94ed..0e12af9 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel-api/api-client-migration-from-postman-to-bruno.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel-api/api-client-migration-from-postman-to-bruno.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel-api/api-client-migration-from-postman-to-bruno.jsonld.twig') }} {% endblock %} - -{% block title %}API Client Migration: From Postman to Bruno{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel API', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Why We Switched to the Offline-Focused Bruno

    Every API developer knows that to build an API properly you need a reliable client for testing and interacting with the API. Ideally this tool should be free, it should store endpoint collections and share them easily with your team, and it should be fast and secure.

    @@ -156,11 +135,4 @@

    Additional Resources

    Bruno homepage

    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel-api/api-endpoint-to-collect-client-errors.html.twig b/src/Blog/templates/page/blog-resource/dotkernel-api/api-endpoint-to-collect-client-errors.html.twig index 58266b5..870d6a9 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel-api/api-endpoint-to-collect-client-errors.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel-api/api-endpoint-to-collect-client-errors.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel-api/api-endpoint-to-collect-client-errors.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}API Endpoint to Collect Client Errors{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel API', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    API Endpoint to Collect Client Errors

    Let's say you have a (Client) Frontend (e.g. Angular) over a Dotkernel API and there may be cases when there are errors, eighter the API changed it's response(s) over night or just a simple variable being undefined for some reason.

    @@ -62,11 +41,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel-api/content-negotiation-in-dotkernel-rest-api.html.twig b/src/Blog/templates/page/blog-resource/dotkernel-api/content-negotiation-in-dotkernel-rest-api.html.twig index 4229b3b..f84d42b 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel-api/content-negotiation-in-dotkernel-rest-api.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel-api/content-negotiation-in-dotkernel-rest-api.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel-api/content-negotiation-in-dotkernel-rest-api.jsonld.twig') }} {% endblock %} - -{% block title %}Content Negotiation in Dotkernel REST API{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel API', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Content negotiation is an important aspect of RESTful APIs to make it possible for diverse systems to work seamlessly together. It's based on enabling clients and servers to agree on the format and language of data they exchange.

    @@ -167,11 +146,4 @@ https://www.example-api.com/record/47?format=json

    Content Negotiation in Dotkernel API

    Content types on iana.org

    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-1-0-0-released.html.twig b/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-1-0-0-released.html.twig index fd0fc95..e19526a 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-1-0-0-released.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-1-0-0-released.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel-api/dotkernel-api-1-0-0-released.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Dotkernel API 1.0.0 Released{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel API', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Dotkernel API has come a long way since this post was created. Check out the newest version of Dotkernel API to stay up to date with the latest functional and security features.

    @@ -79,11 +58,4 @@

     

    -
    - - {{ include('@partial/post-nav.html.twig') }} - - -
    - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-client-side-authorization.html.twig b/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-client-side-authorization.html.twig index 2f795ed..b4222e9 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-client-side-authorization.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-client-side-authorization.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel-api/dotkernel-api-client-side-authorization.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Dotkernel API Client Side Authorization{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel API', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} This article covers the basic authorization of a Client application which use a backend built using Dotkernel API

    Authorization Request

    @@ -72,11 +51,4 @@ When sending API requests to an endpoint which requires authori
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-server-side-authorization.html.twig b/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-server-side-authorization.html.twig index 8b8ae83..a9a71e5 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-server-side-authorization.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-server-side-authorization.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel-api/dotkernel-api-server-side-authorization.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Dotkernel API Server Side Authorization{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel API', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} This article covers the basic authorization of a Server Side application  built using Dotkernel API

    Protecting an endpoint

      @@ -113,11 +92,4 @@ $app->get('/users', , 'users');
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-versus-laminas-api-tools.html.twig b/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-versus-laminas-api-tools.html.twig index 74e76d4..7ed56d9 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-versus-laminas-api-tools.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel-api/dotkernel-api-versus-laminas-api-tools.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel-api/dotkernel-api-versus-laminas-api-tools.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Dotkernel API versus Laminas API Tools{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel API', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Below we have created an analysis of the basic features available in Laminas Api Tools and Dotkernel API. It's intended to highlight the differences between the two and also to showcase why Dotkernel API is a good alternative for Laminas API Tools, especially considering the latter's archived status.

    The table below refers to Dotkernel API V7

    @@ -36,11 +15,4 @@

    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel-api/error-reporting-endpoint-in-dotkernel-api.html.twig b/src/Blog/templates/page/blog-resource/dotkernel-api/error-reporting-endpoint-in-dotkernel-api.html.twig index b1eaaac..fc41189 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel-api/error-reporting-endpoint-in-dotkernel-api.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel-api/error-reporting-endpoint-in-dotkernel-api.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel-api/error-reporting-endpoint-in-dotkernel-api.jsonld.twig') }} {% endblock %} - -{% block title %}Error reporting endpoint in Dotkernel API{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel API', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Dotkernel API has received a lot of love from our developers, with regular updates to the platform for years. We use Dotkernel API in our projects, so any bugs and issues are addressed as soon as they are found. Still, it's not unlikely that some hidden issues remain in fringe use cases that we simply haven't explored. The occurrence of bugs increases when the API is used in a complex frontend project.

    @@ -137,11 +116,4 @@ return ,

    The error reporting feature in Dotkernel API is a secured and highly configurable tool for users of your API to report any unwanted behavior. More often than not, a detailed error report will help developers understand how to replicate the issue and fix it in due course.

    This article is also included in the full API documentation https://docs.dotkernel.org/api-documentation/v5/core-features/error-reporting.

    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel-api/how-to-implement-mailchimp-in-dotkernel-api.html.twig b/src/Blog/templates/page/blog-resource/dotkernel-api/how-to-implement-mailchimp-in-dotkernel-api.html.twig index d82835c..817bda1 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel-api/how-to-implement-mailchimp-in-dotkernel-api.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel-api/how-to-implement-mailchimp-in-dotkernel-api.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel-api/how-to-implement-mailchimp-in-dotkernel-api.jsonld.twig') }} {% endblock %} - -{% block title %}How to implement MailChimp in Dotkernel API{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel API', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    This article will walk you through the process of implementing MailChimp into your instance of Dotkernel API using drewm/mailchimp-api

      @@ -120,11 +99,4 @@ After this, you can start using the library by @Injecting
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - -
    - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel-api/openapi-implementation-in-dotkernel-api.html.twig b/src/Blog/templates/page/blog-resource/dotkernel-api/openapi-implementation-in-dotkernel-api.html.twig index 4492eae..351951a 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel-api/openapi-implementation-in-dotkernel-api.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel-api/openapi-implementation-in-dotkernel-api.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel-api/openapi-implementation-in-dotkernel-api.jsonld.twig') }} {% endblock %} - -{% block title %}OpenAPI implementation in Dotkernel API{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel API', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    What is OpenAPI?

    The OpenAPI Specification provides a consistent way to develop and interact with an API. It defines API structure and syntax in a universal way, regardless of the programming language used in the API's development. API specifications typically use YAML or JSON to share and use the specification. They allow users of the API to quickly discover how it works by describing its elements, e.g. endpoints, request and response formats, security mechanisms and more.

    @@ -164,11 +143,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel3/development-report-december-11-2017.html.twig b/src/Blog/templates/page/blog-resource/dotkernel3/development-report-december-11-2017.html.twig index a8a41ec..2495ca2 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel3/development-report-december-11-2017.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel3/development-report-december-11-2017.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel3/development-report-december-11-2017.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Development Report December 11, 2017{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel 3', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} This report contains updates about the Dotkernel3 documentation. We have added the release notes for Dotkernel3 frontend and admin: you can now check the Release Notes page. @@ -60,11 +39,4 @@ The  -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel-admin-version-3-launched.html.twig b/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel-admin-version-3-launched.html.twig index 30e2c97..8ad53f2 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel-admin-version-3-launched.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel-admin-version-3-launched.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel3/dotkernel-admin-version-3-launched.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Dotkernel Admin version 3 launched{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel 3', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Dotkernel Admin PHP Application version 3 was launched.

    @@ -82,11 +61,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel-api-architecture-and-components.html.twig b/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel-api-architecture-and-components.html.twig index 03c7b40..a829e87 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel-api-architecture-and-components.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel-api-architecture-and-components.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel3/dotkernel-api-architecture-and-components.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Dotkernel API: architecture and components{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel 3', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}
    This article refers to Dotkernel API v5. Checkout out the new additions for Dotkernel API v6 to stay up-to-date.

    Based on Enrico Zimuel's Zend Expressive API - Skeleton example, Dotkernel API runs on Mezzio microframework   andLaminas components and implements standards like PSR-3, PSR-4, PSR-7, PSR-11 and PSR-15.

    @@ -409,11 +388,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel-frontend-version-3-launched.html.twig b/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel-frontend-version-3-launched.html.twig index afec7a1..afb4fb6 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel-frontend-version-3-launched.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel-frontend-version-3-launched.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel3/dotkernel-frontend-version-3-launched.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Dotkernel Frontend version 3 launched{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel 3', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Dotkernel Frontend PHP Application version 3 was launched.

    @@ -66,11 +45,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel3-stable-release-version-1-0.html.twig b/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel3-stable-release-version-1-0.html.twig index f87c7de..2477130 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel3-stable-release-version-1-0.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel3/dotkernel3-stable-release-version-1-0.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel3/dotkernel3-stable-release-version-1-0.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Dotkernel3 - Stable Release version 1.0{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel 3', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Dotkernel was updated to support Zend Expressive 3 alongside with PSR-15 middleware. We have updated the core packages to support PSR-15 Middleware. @@ -128,11 +107,4 @@ If your project is a Dotkernel 3 instance (based on expressive 2), you can migra
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel3/php-8-3-support-in-dotkernel-admin.html.twig b/src/Blog/templates/page/blog-resource/dotkernel3/php-8-3-support-in-dotkernel-admin.html.twig index 0d73ca0..2172b0a 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel3/php-8-3-support-in-dotkernel-admin.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel3/php-8-3-support-in-dotkernel-admin.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel3/php-8-3-support-in-dotkernel-admin.jsonld.twig') }} {% endblock %} - -{% block title %}PHP 8.3 support in Dotkernel Admin{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel 3', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    With the release of PHP 8.3, the Dotkernel team has been working on updating the dependencies in our packages. Eventually, this allowed us to update our Applications as well, starting with the Admin, in release 4.3.1

    There were some issues and backward incompatibilities that we will list below.

    @@ -179,11 +158,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel3/php-8-3-support-in-dotkernel-api.html.twig b/src/Blog/templates/page/blog-resource/dotkernel3/php-8-3-support-in-dotkernel-api.html.twig index b2df440..1095f7a 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel3/php-8-3-support-in-dotkernel-api.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel3/php-8-3-support-in-dotkernel-api.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel3/php-8-3-support-in-dotkernel-api.jsonld.twig') }} {% endblock %} - -{% block title %}PHP 8.3 support in Dotkernel API{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel 3', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    The last remaining application to be updated to support PHP 8.3 is the API, now at v4.2.1. The steps taken to perform the update are similar to the ones in the update for the Frontend.

    The full list of file changes is here.

    @@ -167,11 +146,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/dotkernel3/php-8-3-support-in-dotkernel-frontend.html.twig b/src/Blog/templates/page/blog-resource/dotkernel3/php-8-3-support-in-dotkernel-frontend.html.twig index f29ac77..468b7eb 100644 --- a/src/Blog/templates/page/blog-resource/dotkernel3/php-8-3-support-in-dotkernel-frontend.html.twig +++ b/src/Blog/templates/page/blog-resource/dotkernel3/php-8-3-support-in-dotkernel-frontend.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/dotkernel3/php-8-3-support-in-dotkernel-frontend.jsonld.twig') }} {% endblock %} - -{% block title %}PHP 8.3 support in Dotkernel Frontend{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Dotkernel 3', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    To be able to take advantage of the support for PHP 8.3 in the newest packages, the Dotkernel team has updated the Frontend Application to version 4.2.0. Very much like for the Admin update before it, the Frontend must also remove support for PHP 8.1 and the no-longer-available PhpFileCache class until a replacement is implemented.

    The full list of file changes is here.

    @@ -163,11 +142,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/headless-platform/complementary-admin-in-dotkernel-headless-platform.html.twig b/src/Blog/templates/page/blog-resource/headless-platform/complementary-admin-in-dotkernel-headless-platform.html.twig index dceefc2..fca9f0d 100644 --- a/src/Blog/templates/page/blog-resource/headless-platform/complementary-admin-in-dotkernel-headless-platform.html.twig +++ b/src/Blog/templates/page/blog-resource/headless-platform/complementary-admin-in-dotkernel-headless-platform.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/headless-platform/complementary-admin-in-dotkernel-headless-platform.jsonld.twig') }} {% endblock %} - -{% block title %}Complementary Admin in Dotkernel Headless Platform{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Headless Platform', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    The Dotkernel Headless Platform is built with an architecture designed to be easy to maintain and expand indefinitely. Its core components are Dotkernel API and Dotkernel Queue, but the Dotkernel application suite also offers a fully separate, complementary Admin application designed to pair seamlessly with Dotkernel API.

    What is Dotkernel Admin?

    @@ -132,11 +111,4 @@
  • PHP Framework Interop Group Standards
  • -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/headless-platform/dotkernel-api-v6-the-root-of-dotkernel-headless-platform.html.twig b/src/Blog/templates/page/blog-resource/headless-platform/dotkernel-api-v6-the-root-of-dotkernel-headless-platform.html.twig index 8ea5b2b..c3704ef 100644 --- a/src/Blog/templates/page/blog-resource/headless-platform/dotkernel-api-v6-the-root-of-dotkernel-headless-platform.html.twig +++ b/src/Blog/templates/page/blog-resource/headless-platform/dotkernel-api-v6-the-root-of-dotkernel-headless-platform.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/headless-platform/dotkernel-api-v6-the-root-of-dotkernel-headless-platform.jsonld.twig') }} {% endblock %} - -{% block title %}Dotkernel API v6: The root of Dotkernel Headless Platform{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Headless Platform', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Dotkernel API has come a long way since we published a list of its architecture and components a while ago. We implemented new features, while some components were replaced, and others were enhanced. Our ultimate goal is to stay relevant in the PHP ecosystem by implementing best practices recommended by the PHP community.

    New Features

    @@ -106,11 +85,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/headless-platform/dotkernel-headless-platform-the-whats-hows-and-whys.html.twig b/src/Blog/templates/page/blog-resource/headless-platform/dotkernel-headless-platform-the-whats-hows-and-whys.html.twig index f8347c1..c350879 100644 --- a/src/Blog/templates/page/blog-resource/headless-platform/dotkernel-headless-platform-the-whats-hows-and-whys.html.twig +++ b/src/Blog/templates/page/blog-resource/headless-platform/dotkernel-headless-platform-the-whats-hows-and-whys.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/headless-platform/dotkernel-headless-platform-the-whats-hows-and-whys.jsonld.twig') }} {% endblock %} - -{% block title %}Dotkernel Headless Platform - The Whats, Hows and Whys{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Headless Platform', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    The principle of a Headless Platform is to decouple the User Interface (frontend) from the backend services. The responses from the platform are then used by another system, such as a website or mobile app. In this article we will explore the Dotkernel implementation of the Headless Platform architecture, how to use it and what are its benefits.

    Components of the Dotkernel Headless Platform

    @@ -169,11 +148,4 @@

    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/headless-platform/dotkernel-queue-asynchronous-execution-in-dotkernel-headless-platform.html.twig b/src/Blog/templates/page/blog-resource/headless-platform/dotkernel-queue-asynchronous-execution-in-dotkernel-headless-platform.html.twig index 24c25f3..2fbfa53 100644 --- a/src/Blog/templates/page/blog-resource/headless-platform/dotkernel-queue-asynchronous-execution-in-dotkernel-headless-platform.html.twig +++ b/src/Blog/templates/page/blog-resource/headless-platform/dotkernel-queue-asynchronous-execution-in-dotkernel-headless-platform.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/headless-platform/dotkernel-queue-asynchronous-execution-in-dotkernel-headless-platform.jsonld.twig') }} {% endblock %} - -{% block title %}Dotkernel Queue - Asynchronous Execution in Dotkernel Headless Platform{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Headless Platform', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Dotkernel Queue is a component based on Symfony Messenger that is used to queue asynchronous tasks. netglue/laminas-messenger is an adapter that integrates Symfony Messenger with the Laminas Service Manager container for Mezzio/Laminas applications.

    Some everyday operations are time-consuming and resource-intensive, so it's best if they run on separate machines, decoupled from the regular request-response cycle. With the addition of asynchronous execution performed by background workers, you can ensure that these operations are not lost, terminated by PHP because of timeouts, or interrupted by new requests. The most important benefit is that you prevent the main platform from overloading, allowing it to return a response, remain responsive for new requests, while the heavy lifting is scheduled to run later.

    @@ -197,11 +176,4 @@
  • How To Prioritize Messages When Building Asynchronous Applications With Symfony Messenger
  • -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/headless-platform/dotmaker-generate-common-code-in-dotkernel.html.twig b/src/Blog/templates/page/blog-resource/headless-platform/dotmaker-generate-common-code-in-dotkernel.html.twig index 508dfcf..c240467 100644 --- a/src/Blog/templates/page/blog-resource/headless-platform/dotmaker-generate-common-code-in-dotkernel.html.twig +++ b/src/Blog/templates/page/blog-resource/headless-platform/dotmaker-generate-common-code-in-dotkernel.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/headless-platform/dotmaker-generate-common-code-in-dotkernel.jsonld.twig') }} {% endblock %} - -{% block title %}DotMaker - Generate common code in Dotkernel{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Headless Platform', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    The dotkernel/dot-maker library, also named DotMaker, is designed to programmatically generate project files and directories that match the Dotkernel file structure inspired by Mezzio.

    Handling the file creation and configuration task manually invites mistakes that nobody has time for. Enter DotMaker which provides a big productivity boost compared to doing everything manually by promoting consistenty and standardization for these common tasks.

    @@ -178,11 +157,4 @@ https://www.youtube.com/watch?v=CPDilXP2kAc
  • Symfony Maker Bundle Documentation
  • -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/headless-platform/evolution-pattern-versus-api-versioning.html.twig b/src/Blog/templates/page/blog-resource/headless-platform/evolution-pattern-versus-api-versioning.html.twig index b3f2566..c08f0d1 100644 --- a/src/Blog/templates/page/blog-resource/headless-platform/evolution-pattern-versus-api-versioning.html.twig +++ b/src/Blog/templates/page/blog-resource/headless-platform/evolution-pattern-versus-api-versioning.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/headless-platform/evolution-pattern-versus-api-versioning.jsonld.twig') }} {% endblock %} - -{% block title %}Evolution Pattern versus API Versioning{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Headless Platform', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    In programming and software architecture, an Evolution Pattern is a reusable, high-level strategy for modifying or evolving existing software systems over time. An evolution pattern tries to keep software relevant for old and new users by whatever means are available, as new needs arise.

    Versioning in software is the practice of assigning unique identifiers (version numbers) to different releases of a software platform. These numbers help track changes, improvements, bug fixes, compatibility, and evolution over time. In particular, API versioning is the practice of assigning versions to an API so that it can change over time without breaking existing clients that rely on it.

    @@ -148,11 +127,4 @@ Vary: Origin
  • Ways to version your API, Part 2
  • -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/headless-platform/implementing-time-based-one-time-password-totp-in-dotkernel.html.twig b/src/Blog/templates/page/blog-resource/headless-platform/implementing-time-based-one-time-password-totp-in-dotkernel.html.twig index 6356c09..8079d79 100644 --- a/src/Blog/templates/page/blog-resource/headless-platform/implementing-time-based-one-time-password-totp-in-dotkernel.html.twig +++ b/src/Blog/templates/page/blog-resource/headless-platform/implementing-time-based-one-time-password-totp-in-dotkernel.html.twig @@ -1,29 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/headless-platform/implementing-time-based-one-time-password-totp-in-dotkernel.jsonld.twig') }} {% endblock %} - -{% block title %}Implementing Time-based One-Time Password (TOTP) in Dotkernel{% endblock %} - -{% block page_title %} - {{ - include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Headless Platform', - article: article, - }) - }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    What TOTP Does

    A Time-based One-Time Password (TOTP) is a security algorithm used as part of two-factor authentication (2FA) to protect against account attacks. The mechanism is integrated into dot-totp to enhance security by requiring both a password and an additional one-time code. Our implementation follows the industry standard of using an Authenticator app to generate temporary, unique 6 digit codes that change every 30 seconds.

    @@ -187,11 +164,4 @@
  • Dotkernel Documentation - Installing dot-totp into Dotkernel Admin
  • -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/headless-platform/shared-core-submodule-in-dotkernel-headless-platform.html.twig b/src/Blog/templates/page/blog-resource/headless-platform/shared-core-submodule-in-dotkernel-headless-platform.html.twig index 44fe522..5f068d7 100644 --- a/src/Blog/templates/page/blog-resource/headless-platform/shared-core-submodule-in-dotkernel-headless-platform.html.twig +++ b/src/Blog/templates/page/blog-resource/headless-platform/shared-core-submodule-in-dotkernel-headless-platform.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/headless-platform/shared-core-submodule-in-dotkernel-headless-platform.jsonld.twig') }} {% endblock %} - -{% block title %}Shared Core Submodule in Dotkernel Headless Platform{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Headless Platform', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Dotkernel has implemented a Headless solution made up of these applications:

    • Dotkernel API - a REST API, the root of the platform.
    • @@ -172,11 +151,4 @@ git submodule update

    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/headless-platform/version-7-adds-postgresql-native-uuid-and-php-8-5.html.twig b/src/Blog/templates/page/blog-resource/headless-platform/version-7-adds-postgresql-native-uuid-and-php-8-5.html.twig index 38113ce..628486e 100644 --- a/src/Blog/templates/page/blog-resource/headless-platform/version-7-adds-postgresql-native-uuid-and-php-8-5.html.twig +++ b/src/Blog/templates/page/blog-resource/headless-platform/version-7-adds-postgresql-native-uuid-and-php-8-5.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/headless-platform/version-7-adds-postgresql-native-uuid-and-php-8-5.jsonld.twig') }} {% endblock %} - -{% block title %}Version 7 adds PostgreSQL, Native UUID and PHP 8.5{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Headless Platform', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    The Dotkernel Headless Platform has seen new releases for both API and Admin. The Admin codebase has received an overall facelift, as well as updates to retain compatibility with API v7. The release for Dotkernel API v7 has several added features, as well as a few that are removed.

    New features are:

    @@ -98,11 +77,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/how-to/cors-policy-setup-in-dotkernel-using-mezzio-cors.html.twig b/src/Blog/templates/page/blog-resource/how-to/cors-policy-setup-in-dotkernel-using-mezzio-cors.html.twig index ce5b39e..c5c3b39 100644 --- a/src/Blog/templates/page/blog-resource/how-to/cors-policy-setup-in-dotkernel-using-mezzio-cors.html.twig +++ b/src/Blog/templates/page/blog-resource/how-to/cors-policy-setup-in-dotkernel-using-mezzio-cors.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/how-to/cors-policy-setup-in-dotkernel-using-mezzio-cors.jsonld.twig') }} {% endblock %} - -{% block title %}CORS policy setup in Dotkernel using mezzio-cors{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: "How to's", - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    CORS policy setup in Dotkernel using mezzio-cors

    Error message

    @@ -134,11 +113,4 @@ return [
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/how-to/creating-admin-accounts-in-dotkernel-api.html.twig b/src/Blog/templates/page/blog-resource/how-to/creating-admin-accounts-in-dotkernel-api.html.twig index 88a53c1..3399b56 100644 --- a/src/Blog/templates/page/blog-resource/how-to/creating-admin-accounts-in-dotkernel-api.html.twig +++ b/src/Blog/templates/page/blog-resource/how-to/creating-admin-accounts-in-dotkernel-api.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/how-to/creating-admin-accounts-in-dotkernel-api.jsonld.twig') }} {% endblock %} - -{% block title %}Creating admin accounts in Dotkernel API{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: "How to's", - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Creating admin accounts in Dotkernel API

    Starting from v3, Dotkernel API introduces support for admin accounts. In this article we will describe two different methods of creating an admin account.

    @@ -154,11 +133,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/how-to/database-migrations-and-how-to-use-them.html.twig b/src/Blog/templates/page/blog-resource/how-to/database-migrations-and-how-to-use-them.html.twig index 85baa6d..6655f93 100644 --- a/src/Blog/templates/page/blog-resource/how-to/database-migrations-and-how-to-use-them.html.twig +++ b/src/Blog/templates/page/blog-resource/how-to/database-migrations-and-how-to-use-them.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/how-to/database-migrations-and-how-to-use-them.jsonld.twig') }} {% endblock %} - -{% block title %}Database migrations and how to use them{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: "How to's", - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Migrations, the superhero your database deserves

    Migrations ease the process of working together on projects, as well as deploying the database changes. @@ -135,11 +114,4 @@ Seeders are created the same way as migrations, and also benefits hugely from be
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/how-to/doctrine-cache-in-mezzio-and-dotkernel.html.twig b/src/Blog/templates/page/blog-resource/how-to/doctrine-cache-in-mezzio-and-dotkernel.html.twig index c21912e..8ff76d0 100644 --- a/src/Blog/templates/page/blog-resource/how-to/doctrine-cache-in-mezzio-and-dotkernel.html.twig +++ b/src/Blog/templates/page/blog-resource/how-to/doctrine-cache-in-mezzio-and-dotkernel.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/how-to/doctrine-cache-in-mezzio-and-dotkernel.jsonld.twig') }} {% endblock %} - -{% block title %}Doctrine Cache in Mezzio and Dotkernel{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: "How to's", - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Doctrine caching in Dotkernel

    Following version 2 of doctrine/cache, in 2024 we published an update to this article here: https://www.dotkernel.com/dotkernel/doctrine-cache-using-symfony-cache/

    @@ -207,11 +186,4 @@ class MyCollection extends Paginator

    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/how-to/generating-a-doctrine-migration-without-dropping-custom-tables.html.twig b/src/Blog/templates/page/blog-resource/how-to/generating-a-doctrine-migration-without-dropping-custom-tables.html.twig index d79d9b5..f6d4c0d 100644 --- a/src/Blog/templates/page/blog-resource/how-to/generating-a-doctrine-migration-without-dropping-custom-tables.html.twig +++ b/src/Blog/templates/page/blog-resource/how-to/generating-a-doctrine-migration-without-dropping-custom-tables.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/how-to/generating-a-doctrine-migration-without-dropping-custom-tables.jsonld.twig') }} {% endblock %} - -{% block title %}Generating a doctrine migration without dropping custom tables{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: "How to's", - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Generating a doctrine migration without dropping custom tables

    If your application needs to hold some custom (unmapped) tables in the database, then generating migrations with doctrine-migrations diff will try to drop the custom tables. This article provides a solution on how to avoid dropping those tables.

    @@ -106,11 +85,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/how-to/implementation-of-seo-friendly-url-in-an-generic-laminas-mezzio-app.html.twig b/src/Blog/templates/page/blog-resource/how-to/implementation-of-seo-friendly-url-in-an-generic-laminas-mezzio-app.html.twig index 0f8f933..3d7171e 100644 --- a/src/Blog/templates/page/blog-resource/how-to/implementation-of-seo-friendly-url-in-an-generic-laminas-mezzio-app.html.twig +++ b/src/Blog/templates/page/blog-resource/how-to/implementation-of-seo-friendly-url-in-an-generic-laminas-mezzio-app.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/how-to/implementation-of-seo-friendly-url-in-an-generic-laminas-mezzio-app.jsonld.twig') }} {% endblock %} - -{% block title %}Implementation of SEO friendly URL in an generic Laminas Mezzio app{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: "How to's", - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Prerequisites:

    • Mezzio App
    • @@ -119,11 +98,4 @@ protected string $slug;
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/how-to/installing-almalinux-10-in-wsl2-php-mariadb-composer-phpmyadmin.html.twig b/src/Blog/templates/page/blog-resource/how-to/installing-almalinux-10-in-wsl2-php-mariadb-composer-phpmyadmin.html.twig index ecbcd32..7dcccf6 100644 --- a/src/Blog/templates/page/blog-resource/how-to/installing-almalinux-10-in-wsl2-php-mariadb-composer-phpmyadmin.html.twig +++ b/src/Blog/templates/page/blog-resource/how-to/installing-almalinux-10-in-wsl2-php-mariadb-composer-phpmyadmin.html.twig @@ -1,149 +1,121 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/how-to/installing-almalinux-10-in-wsl2-php-mariadb-composer-phpmyadmin.jsonld.twig') }} {% endblock %} - -{% block title %}Installing AlmaLinux 10 in WSL2: PHP, MariaDB, Composer, PhpMyadmin{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: "How to's", - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} -

    With the recent release of AlmaLinux OS 10, we have created a new recipe for our WSL development environment. Compared to its predecessor, AlmaLinux 10 provides performance enhancements, security updates and improved hardware support.

    +{% block body %} +

    With the recent release of AlmaLinux OS 10, we have created a new recipe for our WSL development environment. Compared to its predecessor, AlmaLinux 10 provides performance enhancements, security updates and improved hardware support.

    -

    What You Get

    +

    What You Get

    -

    Like for AlmaLinux 9, the WSL recipe sets up the development environment with all the components a regular PHP developer needs:

    +

    Like for AlmaLinux 9, the WSL recipe sets up the development environment with all the components a regular PHP developer needs:

    -
    • WSL2 - Windows Subsystem for Linux.
    • +
      • WSL2 - Windows Subsystem for Linux.
      • -
      • AlmaLinux 10 - Free and open source Linux distribution.
      • +
      • AlmaLinux 10 - Free and open source Linux distribution.
      • -
      • PHP - General-purpose scripting language geared towards web development.
      • +
      • PHP - General-purpose scripting language geared towards web development.
      • -
      • Apache - Free and open-source cross-platform web server software.
      • +
      • Apache - Free and open-source cross-platform web server software.
      • -
      • MariaDB - Community-developed, commercially supported fork of the MySQL relational database management system.
      • +
      • MariaDB - Community-developed, commercially supported fork of the MySQL relational database management system.
      • -
      • Git - Distributed version control system.
      • +
      • Git - Distributed version control system.
      • -
      • Composer - Application-level dependency manager.
      • +
      • Composer - Application-level dependency manager.
      • -
      • Node.js - JavaScript runtime environment.
      • +
      • Node.js - JavaScript runtime environment.
      • -
      • PhpMyAdmin - Open source administration tool for MySQL and MariaDB.
      • -
      +
    • PhpMyAdmin - Open source administration tool for MySQL and MariaDB.
    • +
    -

    Requirements

    +

    Requirements

    -

    Make sure that you have the minimum requirements for running WSL2.

    +

    Make sure that you have the minimum requirements for running WSL2.

    -

    OS-wise you must be running:

    +

    OS-wise you must be running:

    -
    • Windows 10:
      • For x64 systems: Version 1903 or later with Build 18362.1049 or later.
      • +
        • Windows 10:
          • For x64 systems: Version 1903 or later with Build 18362.1049 or later.
          • -
          • For ARM64 systems: Version 2004 or later with Build 19041 or later.
          • -
          -
        • +
        • For ARM64 systems: Version 2004 or later with Build 19041 or later.
        • +
        + -
      • or Windows 11.
      • -
      +
    • or Windows 11.
    • +
    -

    Hardware-wise, you need virtualization support. On some older hardware that supports this feature, it may be disabled from the BIOS.

    +

    Hardware-wise, you need virtualization support. On some older hardware that supports this feature, it may be disabled from the BIOS.

    -

    WSL2 needs Virtual Machine Platform feature enabled. You can enable it via the PowerShell running as an Administrator:

    +

    WSL2 needs Virtual Machine Platform feature enabled. You can enable it via the PowerShell running as an Administrator:

    -
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    +
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    -

    Installing the distro

    +

    Installing the distro

    -

    Start by downloading and installing the Linux distro with this command:

    +

    Start by downloading and installing the Linux distro with this command:

    -
    wsl --install -d AlmaLinux-10
    +
    wsl --install -d AlmaLinux-10
    -

    If everything ran ok, you are asked to enter a password at the end.

    +

    If everything ran ok, you are asked to enter a password at the end.

    -

    Next run each of the ansible playbook commands to install the development components.

    +

    Next run each of the ansible playbook commands to install the development components.

    -

    Using WSL2 with AlmaLinux 10

    +

    Using WSL2 with AlmaLinux 10

    -

    You can start AlmaLinux10 by executing this coomand in the Windows Terminal:

    +

    You can start AlmaLinux10 by executing this coomand in the Windows Terminal:

    -
    wsl -d AlmaLinux-10
    +
    wsl -d AlmaLinux-10
    -

    Our PHP projects can be run by navigating into the root project folder and running this command:

    +

    Our PHP projects can be run by navigating into the root project folder and running this command:

    -
    php -S 0.0.0.0:8080 -t public
    +
    php -S 0.0.0.0:8080 -t public
    -

    Then you need to navigate to http://localhost:8080 in your preferred browser.

    +

    Then you need to navigate to http://localhost:8080 in your preferred browser.

    -

    Running the Application Via Virtual Hosts

    +

    Running the Application Via Virtual Hosts

    -

    An easier way to run your applications is via virtual hosts. The full instructions to set up your virtual hosts are in the Create virtualhosts page.

    +

    An easier way to run your applications is via virtual hosts. The full instructions to set up your virtual hosts are in the Create virtualhosts page.

    -

    After you set up your virtual hosts and install your project in e.g. the /var/www/example.localhost/html folder, you can run the application in the browser by accessing example.localhost.

    +

    After you set up your virtual hosts and install your project in e.g. the /var/www/example.localhost/html folder, you can run the application in the browser by accessing example.localhost.

    -

    If you run into any issues, make sure to first check our FAQ page. If all else fails, create an issue with details and we can talk.

    +

    If you run into any issues, make sure to first check our FAQ page. If all else fails, create an issue with details and we can talk.

    -

    Frequently Asked Questions

    +

    Frequently Asked Questions

    -
    -
    - What does this WSL recipe set up? + -
    -

    It sets up a full PHP development environment: WSL2, AlmaLinux 10, PHP, Apache, MariaDB, Git, Composer, Node.js and PhpMyAdmin.

    -
    -
    -
    - What are the OS and hardware requirements? + -
    -

    Windows 10 (Version 1903+ / Build 18362.1049+ for x64, or Version 2004+ / Build 19041+ for ARM64) or Windows 11, plus hardware virtualization support. If needed, enable the Virtual Machine Platform feature via dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart in an administrator PowerShell.

    -
    -
    -
    - How do I install AlmaLinux 10 via WSL2? + -
    -

    Run wsl --install -d AlmaLinux-10, set a password when prompted, then run each of the Ansible playbook commands from the Dotkernel docs to install the development components.

    -
    -
    -
    - How do I run a PHP project after setup? + -
    -

    Either run php -S 0.0.0.0:8080 -t public from the project root and browse to http://localhost:8080, or, more easily, set up virtual hosts per the Dotkernel docs and access the project at its configured hostname (e.g. example.localhost).

    -
    -
    -
    - What should I do if I run into issues during setup? + -
    -

    First check the Dotkernel FAQ page. If that doesn't resolve it, create an issue on the dotkernel/development GitHub repository with details.

    -
    -
    -
    - -

    Additional Resources

    - -
    • Full AlmaLinux 10 Installation Instructions
    • +
      +
      + What does this WSL recipe set up? + +
      +

      It sets up a full PHP development environment: WSL2, AlmaLinux 10, PHP, Apache, MariaDB, Git, Composer, Node.js and PhpMyAdmin.

      +
      +
      +
      + What are the OS and hardware requirements? + +
      +

      Windows 10 (Version 1903+ / Build 18362.1049+ for x64, or Version 2004+ / Build 19041+ for ARM64) or Windows 11, plus hardware virtualization support. If needed, enable the Virtual Machine Platform feature via dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart in an administrator PowerShell.

      +
      +
      +
      + How do I install AlmaLinux 10 via WSL2? + +
      +

      Run wsl --install -d AlmaLinux-10, set a password when prompted, then run each of the Ansible playbook commands from the Dotkernel docs to install the development components.

      +
      +
      +
      + How do I run a PHP project after setup? + +
      +

      Either run php -S 0.0.0.0:8080 -t public from the project root and browse to http://localhost:8080, or, more easily, set up virtual hosts per the Dotkernel docs and access the project at its configured hostname (e.g. example.localhost).

      +
      +
      +
      + What should I do if I run into issues during setup? + +
      +

      First check the Dotkernel FAQ page. If that doesn't resolve it, create an issue on the dotkernel/development GitHub repository with details.

      +
      +
      +
      -
    • AlmaLinux 9 in WSL2 with PHP, Mariadb, Composer, PhpMyadmin instructions
    • -
    -
    +

    Additional Resources

    - {{ include('@partial/post-nav.html.twig') }} -
    +
    -
    +
  • AlmaLinux 9 in WSL2 with PHP, Mariadb, Composer, PhpMyadmin instructions
  • + {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/how-to/list-available-endpoints-in-dotkernel-api-using-dot-cli.html.twig b/src/Blog/templates/page/blog-resource/how-to/list-available-endpoints-in-dotkernel-api-using-dot-cli.html.twig index fc9b4e3..daa2cd7 100644 --- a/src/Blog/templates/page/blog-resource/how-to/list-available-endpoints-in-dotkernel-api-using-dot-cli.html.twig +++ b/src/Blog/templates/page/blog-resource/how-to/list-available-endpoints-in-dotkernel-api-using-dot-cli.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/how-to/list-available-endpoints-in-dotkernel-api-using-dot-cli.jsonld.twig') }} {% endblock %} - -{% block title %}List available endpoints in Dotkernel API using dot-cli{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: "How to's", - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Displaying Dotkernel API endpoints using dot-cli

    Starting from version 3, Dotkernel API uses dot-cli to display a list of available endpoints.

    @@ -141,11 +120,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/how-to/migrating-dotkernel-3-from-zend-expressive-2-to-zend-expressive-3.html.twig b/src/Blog/templates/page/blog-resource/how-to/migrating-dotkernel-3-from-zend-expressive-2-to-zend-expressive-3.html.twig index 427d74b..363d3c4 100644 --- a/src/Blog/templates/page/blog-resource/how-to/migrating-dotkernel-3-from-zend-expressive-2-to-zend-expressive-3.html.twig +++ b/src/Blog/templates/page/blog-resource/how-to/migrating-dotkernel-3-from-zend-expressive-2-to-zend-expressive-3.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/how-to/migrating-dotkernel-3-from-zend-expressive-2-to-zend-expressive-3.jsonld.twig') }} {% endblock %} - -{% block title %}Migrating Dotkernel 3 from Zend Expressive 2 to Zend Expressive 3{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: "How to's", - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} This article covers the steps required to migrate a Dotkernel 3 instance to the latest Zend Expressive Version. @@ -199,11 +178,4 @@ You can check the complete guides and example files from the following links
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/how-to/replacing-dot-console-with-dot-cli-based-on-laminas-cli.html.twig b/src/Blog/templates/page/blog-resource/how-to/replacing-dot-console-with-dot-cli-based-on-laminas-cli.html.twig index 547f16e..fa5d4a4 100644 --- a/src/Blog/templates/page/blog-resource/how-to/replacing-dot-console-with-dot-cli-based-on-laminas-cli.html.twig +++ b/src/Blog/templates/page/blog-resource/how-to/replacing-dot-console-with-dot-cli-based-on-laminas-cli.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/how-to/replacing-dot-console-with-dot-cli-based-on-laminas-cli.jsonld.twig') }} {% endblock %} - -{% block title %}Replacing dot-console with dot-cli based on laminas-cli{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: "How to's", - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Replacing dot-console with dot-cli based on laminas-cli

    Implementing dot-cli in your application

    @@ -114,11 +93,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/how-to/using-postman-for-documentation-in-dotkernel-api-3.html.twig b/src/Blog/templates/page/blog-resource/how-to/using-postman-for-documentation-in-dotkernel-api-3.html.twig index bd6e507..f9aae3a 100644 --- a/src/Blog/templates/page/blog-resource/how-to/using-postman-for-documentation-in-dotkernel-api-3.html.twig +++ b/src/Blog/templates/page/blog-resource/how-to/using-postman-for-documentation-in-dotkernel-api-3.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/how-to/using-postman-for-documentation-in-dotkernel-api-3.jsonld.twig') }} {% endblock %} - -{% block title %}Using Postman for documentation in Dotkernel API 3{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: "How to's", - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Using Postman documentation in Dotkernel API 3

    Starting from version 3.0 Dotkernel API provides it's documentation using Postman.

    @@ -165,11 +144,4 @@ VARIABLE INITIAL VALUE CURRENT_VALUE
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/how-to/what-is-cross-origin-token-redemption.html.twig b/src/Blog/templates/page/blog-resource/how-to/what-is-cross-origin-token-redemption.html.twig index 1254a49..c9a53c4 100644 --- a/src/Blog/templates/page/blog-resource/how-to/what-is-cross-origin-token-redemption.html.twig +++ b/src/Blog/templates/page/blog-resource/how-to/what-is-cross-origin-token-redemption.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/how-to/what-is-cross-origin-token-redemption.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}What is cross origin token redemption?{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: "How to's", - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    What is cross origin token redemption?

    Cross-origin token redemption is a technique used to ensure the security and authenticity of a token that is issued by one website or domain, but intended for use on a different website or domain. This process is commonly used in situations where a user needs to access resources from multiple domains, such as when a user is logged in to one website and needs to access resources from another website.

    @@ -75,11 +54,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/javascript/codelobster-php-edition-free-php-html-css-javascript-editor-ide.html.twig b/src/Blog/templates/page/blog-resource/javascript/codelobster-php-edition-free-php-html-css-javascript-editor-ide.html.twig index 6472033..6a55ccb 100644 --- a/src/Blog/templates/page/blog-resource/javascript/codelobster-php-edition-free-php-html-css-javascript-editor-ide.html.twig +++ b/src/Blog/templates/page/blog-resource/javascript/codelobster-php-edition-free-php-html-css-javascript-editor-ide.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/javascript/codelobster-php-edition-free-php-html-css-javascript-editor-ide.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Codelobster PHP Edition - Free PHP, HTML, CSS, JavaScript editor (IDE){% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Javascript', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Free PHP, HTML, CSS, JavaScript editor (IDE) - Codelobster PHP Edition

    Free PHP, HTML, CSS, JavaScript editor (IDE) - Codelobster PHP Edition

    For valuable work on creation of sites you need a good comfortable editor necessarily. There are many requiring paid products for this purpose, but we would like to select free of charge very functional and at the same time of simple in the use editor - Codelobster PHP Edition .

    @@ -77,11 +56,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/licensing/mit-versus-lgpl-in-practice-dotkernel-case.html.twig b/src/Blog/templates/page/blog-resource/licensing/mit-versus-lgpl-in-practice-dotkernel-case.html.twig index 1ce0f0f..6918859 100644 --- a/src/Blog/templates/page/blog-resource/licensing/mit-versus-lgpl-in-practice-dotkernel-case.html.twig +++ b/src/Blog/templates/page/blog-resource/licensing/mit-versus-lgpl-in-practice-dotkernel-case.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/licensing/mit-versus-lgpl-in-practice-dotkernel-case.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}MIT versus LGPL in practice: Dotkernel case{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Licensing', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    After a recent analysis, we discovered that one of the upstream packages we use is licensed under LGPL v3. Even though we at Dotkernel use the MIT license for our open source projects, the more restrictive license must be applied to the whole application. We implemented a workaround detailed below.

    Detailing the problem

    @@ -78,11 +57,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/middleware/dotkernel-light-improvements-psr-15-handlers-vite-phpstan.html.twig b/src/Blog/templates/page/blog-resource/middleware/dotkernel-light-improvements-psr-15-handlers-vite-phpstan.html.twig index 861634f..9788e0b 100644 --- a/src/Blog/templates/page/blog-resource/middleware/dotkernel-light-improvements-psr-15-handlers-vite-phpstan.html.twig +++ b/src/Blog/templates/page/blog-resource/middleware/dotkernel-light-improvements-psr-15-handlers-vite-phpstan.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/middleware/dotkernel-light-improvements-psr-15-handlers-vite-phpstan.jsonld.twig') }} {% endblock %} - -{% block title %}Dotkernel Light improvements: PSR-15 Handlers, Vite, PHPStan{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Middleware', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Dotkernel Light is a PSR-15 compliant application that uses the Mezzio microframework and Laminas components. It's aimed at creating a simple website, like a presentation site, but can be expanded as needed.

    Dotkernel Light has come a long way since our last update. It's just as useful for a presentation site, but our perfectionist devs thought we could do better. Let's see what we have improved to make your use of Light that much more convenient.

    @@ -113,11 +92,4 @@

    PSR-15: HTTP Server Request Handlers

    Static Analysis – Replacing Psalm with PHPStan

    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/middleware/handling-dynamic-routing-using-fastroute-in-dotkernel.html.twig b/src/Blog/templates/page/blog-resource/middleware/handling-dynamic-routing-using-fastroute-in-dotkernel.html.twig index 88205c8..14437e2 100644 --- a/src/Blog/templates/page/blog-resource/middleware/handling-dynamic-routing-using-fastroute-in-dotkernel.html.twig +++ b/src/Blog/templates/page/blog-resource/middleware/handling-dynamic-routing-using-fastroute-in-dotkernel.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/middleware/handling-dynamic-routing-using-fastroute-in-dotkernel.jsonld.twig') }} {% endblock %} - -{% block title %}Handling dynamic routing using FastRoute in Dotkernel{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Middleware', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    The goal of this update is to replace the static way of creating routes with a more dynamic implementation. The result is a cleaner approach that is easier to set up and review at a glance.

    RoutesDelegator.php is used to configure the routes in Dotkernel applications. Routing allows web applications to respond to user requests by executing the correct code based on URL paths. The dynamic aspect discussed in this article moves the relevant items for each route into the local.php file. The RoutesDelegator then reads the route configuration and generates the routes.

    @@ -166,11 +145,4 @@ foreach ($routes as $prefix => $moduleRoutes) {

    FastRoute

    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/middleware/replacing-controllers-with-psr-15-compliant-handlers-in-dotkernel-light.html.twig b/src/Blog/templates/page/blog-resource/middleware/replacing-controllers-with-psr-15-compliant-handlers-in-dotkernel-light.html.twig index 097d89d..4099d34 100644 --- a/src/Blog/templates/page/blog-resource/middleware/replacing-controllers-with-psr-15-compliant-handlers-in-dotkernel-light.html.twig +++ b/src/Blog/templates/page/blog-resource/middleware/replacing-controllers-with-psr-15-compliant-handlers-in-dotkernel-light.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/middleware/replacing-controllers-with-psr-15-compliant-handlers-in-dotkernel-light.jsonld.twig') }} {% endblock %} - -{% block title %}Replacing controllers with PSR-15 compliant handlers in Dotkernel Light{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Middleware', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    The goal of this update is to implement PSR-15 handlers into Dotkernel Light. There are several advantages to using handlers, which we will explore below.

    @@ -185,11 +164,4 @@ class GetPageViewHandler implements RequestHandlerInterface

    Single Action Handlers in PHP Frameworks

    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/almalinux-9-in-wsl2-install-php-apache-mariadb-composer-phpmyadmin.html.twig b/src/Blog/templates/page/blog-resource/php-development/almalinux-9-in-wsl2-install-php-apache-mariadb-composer-phpmyadmin.html.twig index 27cfb5c..0cbcdf5 100644 --- a/src/Blog/templates/page/blog-resource/php-development/almalinux-9-in-wsl2-install-php-apache-mariadb-composer-phpmyadmin.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/almalinux-9-in-wsl2-install-php-apache-mariadb-composer-phpmyadmin.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/almalinux-9-in-wsl2-install-php-apache-mariadb-composer-phpmyadmin.jsonld.twig') }} {% endblock %} - -{% block title %}AlmaLinux 9 in WSL2 : install PHP, Apache, MariaDB, Composer, PhpMyadmin{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    In this article we will demonstrate how we install AlmaLinux 9 using Windows Subsystem for Linux (WSL2).

    First, you need to check if your machine is ready for using WSL2. Open Windows Terminal and execute the following command:

    @@ -144,11 +123,4 @@ Windows version: 10.0.22631.3737
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/aptana-php-installation-in-aptana-2-x.html.twig b/src/Blog/templates/page/blog-resource/php-development/aptana-php-installation-in-aptana-2-x.html.twig index 858f64e..64c053e 100644 --- a/src/Blog/templates/page/blog-resource/php-development/aptana-php-installation-in-aptana-2-x.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/aptana-php-installation-in-aptana-2-x.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/aptana-php-installation-in-aptana-2-x.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Aptana PHP installation in Aptana 2.x{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} As all aptana fans know, Aptana PHP plugin was discontinued in Aptana 2.x, in favor of PDT. But PDT is a joke, not suitable for professional PHP development, major features are missing. So if you want to continue using Aptana PHP, that's what need to be done: @@ -37,11 +16,4 @@ In case you don't have yet a SVN plugin, go to
  • Others -> Subclipse
  • Follow the instructions
  • -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/database-seeding-doctrine-data-fixtures-vs-phinx.html.twig b/src/Blog/templates/page/blog-resource/php-development/database-seeding-doctrine-data-fixtures-vs-phinx.html.twig index f8412a1..2a17c85 100644 --- a/src/Blog/templates/page/blog-resource/php-development/database-seeding-doctrine-data-fixtures-vs-phinx.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/database-seeding-doctrine-data-fixtures-vs-phinx.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/database-seeding-doctrine-data-fixtures-vs-phinx.jsonld.twig') }} {% endblock %} - -{% block title %}Database seeding: Doctrine data fixtures vs Phinx{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Database seeding: Doctrine data fixtures vs Phinx

    Seeding the database means populating the database with initial values, it's commonly used for seeding the user roles and user accounts.

    @@ -275,11 +254,4 @@ class UserLoader implements FixtureInterface, DependentFixtureInterface

    To wrap things up, we implemented a database seeder and saw a practical example of how to use it.

    More details about Fixtures in this blogpost: https://matthiasnoback.nl/2018/07/about-fixtures/ .

    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/end-of-support-for-php-5-2-x-branch.html.twig b/src/Blog/templates/page/blog-resource/php-development/end-of-support-for-php-5-2-x-branch.html.twig index 29fa483..f2aa257 100644 --- a/src/Blog/templates/page/blog-resource/php-development/end-of-support-for-php-5-2-x-branch.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/end-of-support-for-php-5-2-x-branch.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/end-of-support-for-php-5-2-x-branch.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}End of Support for PHP 5.2.x Branch{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} PHP 5.2.14 was just released . And this is the end of support for 5.2.x branch of PHP .
    NOTE:This release marks the end of the active support for PHP 5.2. Following this release the PHP 5.2 series will receive no further active bug maintenance. Security fixes for PHP 5.2 might be published on a case by cases basis. All users of PHP 5.2 are encouraged to upgrade to PHP 5.3
    PHP 5.3.3 is just released ,  so is time to upgrade every project  to PHP 5.3.x branch, and also upgrade all servers to 5.3.x @@ -48,11 +27,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/floating-point-arithmetic-why-is-int-0-7-0-1-10-7.html.twig b/src/Blog/templates/page/blog-resource/php-development/floating-point-arithmetic-why-is-int-0-7-0-1-10-7.html.twig index 70f64bc..4a47cf0 100644 --- a/src/Blog/templates/page/blog-resource/php-development/floating-point-arithmetic-why-is-int-0-7-0-1-10-7.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/floating-point-arithmetic-why-is-int-0-7-0-1-10-7.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/floating-point-arithmetic-why-is-int-0-7-0-1-10-7.jsonld.twig') }} {% endblock %} - -{% block title %}Floating-Point Arithmetic - Why is (int)((0.7+0.1)*10) = 7 ?{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} This article applies to PHP 5.x but also to PHP 7 While using floating-point arithmetic you might have noticed that not all the calculus results are as expected, this can usually be observed when casting values. @@ -120,11 +99,4 @@ For a more technical & mathematical approach read -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/mezzio-app-development-in-wsl2.html.twig b/src/Blog/templates/page/blog-resource/php-development/mezzio-app-development-in-wsl2.html.twig index d2cc19f..d524f67 100644 --- a/src/Blog/templates/page/blog-resource/php-development/mezzio-app-development-in-wsl2.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/mezzio-app-development-in-wsl2.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/mezzio-app-development-in-wsl2.jsonld.twig') }} {% endblock %} - -{% block title %}Mezzio app development in WSL2{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Install a Mezzio app (Dotkernel API) using WSL2

    This article will run you through the steps of installing a Mezzio application (Dotkernel API) in WSL2 and run it on Ubuntu 20.04 LTS.

    @@ -98,11 +77,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/php-5-3-6-released-no-upgrade-possible-for-wampserver.html.twig b/src/Blog/templates/page/blog-resource/php-development/php-5-3-6-released-no-upgrade-possible-for-wampserver.html.twig index cd80677..c74e784 100644 --- a/src/Blog/templates/page/blog-resource/php-development/php-5-3-6-released-no-upgrade-possible-for-wampserver.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/php-5-3-6-released-no-upgrade-possible-for-wampserver.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/php-5-3-6-released-no-upgrade-possible-for-wampserver.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}PHP 5.3.6 released. No upgrade possible for WampServer.{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} PHP 5.3.6 was released, but it come with a bad news for WampServer users:
    "Windows users: please mind that we do no longer provide builds created with Visual Studio C++ 6"
    Since WampServer is built using VC++ 6,  is not possible an upgrade , without a rewrite from scratch of entire WampServer package. @@ -44,11 +23,4 @@ More details on WampServer forum  -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} In hosted software development, the environment refers to a server tier designated to a specific stage in a release process. The purpose of these environments is to improve the development, testing and release processes in client-server applications. The most common environments are described below. @@ -72,11 +51,4 @@ To better understand the development of an application using environments, check
    -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/php-support-back-in-aptana-3-0.html.twig b/src/Blog/templates/page/blog-resource/php-development/php-support-back-in-aptana-3-0.html.twig index 46dbc38..fac5e96 100644 --- a/src/Blog/templates/page/blog-resource/php-development/php-support-back-in-aptana-3-0.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/php-support-back-in-aptana-3-0.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/php-support-back-in-aptana-3-0.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}PHP support back in Aptana 3.0{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Aptana 3.0 is in beta stage, can be downloaded from the official site . The very super good news is that Aptana PHP Support is back , based on an annoucement from their forum. And even more,  will be integrated in Studio 3 core, not as a separate plugin. @@ -58,11 +37,4 @@ p.s. You can follow us on twitter for any major announcements, or follow me 'sgi
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/protection-against-sql-injection-using-pdo-and-zend-framework.html.twig b/src/Blog/templates/page/blog-resource/php-development/protection-against-sql-injection-using-pdo-and-zend-framework.html.twig index f754880..ed99b3d 100644 --- a/src/Blog/templates/page/blog-resource/php-development/protection-against-sql-injection-using-pdo-and-zend-framework.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/protection-against-sql-injection-using-pdo-and-zend-framework.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/protection-against-sql-injection-using-pdo-and-zend-framework.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Protection against SQL Injection using PDO and Zend Framework{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} SQL injection is a technique that exploits a security vulnerability occurring in the database layer of an application. Usually, user input is not filtered by the script and is passed into a SQL statement. PDO – PHP Data Objects – is a database access layer providing a standardized method of access to multiple databases.  @@ -87,11 +66,4 @@ For more details see:
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/static-analysis-replacing-psalm-with-phpstan.html.twig b/src/Blog/templates/page/blog-resource/php-development/static-analysis-replacing-psalm-with-phpstan.html.twig index 18547bf..fb2d93f 100644 --- a/src/Blog/templates/page/blog-resource/php-development/static-analysis-replacing-psalm-with-phpstan.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/static-analysis-replacing-psalm-with-phpstan.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/static-analysis-replacing-psalm-with-phpstan.jsonld.twig') }} {% endblock %} - -{% block title %}Static Analysis - Replacing Psalm with PHPStan{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    What is Static Analysis

    Static analysis (static code analysis or source code analysis) applies a set of coding rules to debug source code before a program is run. Applied in the early phase of code development, the goals of static analysis are:

    @@ -222,11 +201,4 @@ parameters:
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/using-aptana-to-connect-to-dotkernel-tracker-mantis.html.twig b/src/Blog/templates/page/blog-resource/php-development/using-aptana-to-connect-to-dotkernel-tracker-mantis.html.twig index 7a7d93e..27046de 100644 --- a/src/Blog/templates/page/blog-resource/php-development/using-aptana-to-connect-to-dotkernel-tracker-mantis.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/using-aptana-to-connect-to-dotkernel-tracker-mantis.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/using-aptana-to-connect-to-dotkernel-tracker-mantis.jsonld.twig') }} {% endblock %} - -{% block title %}Using Aptana to connect to Dotkernel tracker (Mantis){% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} In developing Dotkernel application framework, we needed a tracking system. Dotkernel Tracker is the place where the bugs are reported, new features are announced and other general tickets are added. Dotkernel Tracker is a Mantis web-based bugtracking system. To simplify the development of Dotkernel, we integrated our web development IDE – Aptana with our bugtracking system – Dotkernel Tracker. In the Downloads section, you will find screenshots with the below steps for Using Aptana with the Mylyn connector for Mantis @@ -93,11 +72,4 @@ In developing Dotkernel application framework, we needed a trac
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/using-php-7-express-in-zend-studio-13.html.twig b/src/Blog/templates/page/blog-resource/php-development/using-php-7-express-in-zend-studio-13.html.twig index c031378..4195c8b 100644 --- a/src/Blog/templates/page/blog-resource/php-development/using-php-7-express-in-zend-studio-13.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/using-php-7-express-in-zend-studio-13.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/using-php-7-express-in-zend-studio-13.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Using PHP 7 Express in Zend Studio 13{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} This article will cover the steps needed in order to check the PHP7 compatibility, a small troubleshooter. This article will also contain a compatibility issue check on the latest Zend Framework 1 version. @@ -101,11 +80,4 @@ The result should look like this:
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/version-control-ignore-patterns-in-zend-studio.html.twig b/src/Blog/templates/page/blog-resource/php-development/version-control-ignore-patterns-in-zend-studio.html.twig index 2fb9065..0222901 100644 --- a/src/Blog/templates/page/blog-resource/php-development/version-control-ignore-patterns-in-zend-studio.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/version-control-ignore-patterns-in-zend-studio.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/version-control-ignore-patterns-in-zend-studio.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Version Control Ignore Patterns in Zend Studio{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} In order to globally manage the "Ignored Resources"  patterns in Zend Studio, for all projects , instead of manually add to each project, you can do the following: 1. Go to Window-> Preferences @@ -54,11 +33,4 @@ Also, on each project, you can use either global ignored  patterns, or use spec
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/welcome-to-the-10th-zend-certified-engineer-in-dotboost-team.html.twig b/src/Blog/templates/page/blog-resource/php-development/welcome-to-the-10th-zend-certified-engineer-in-dotboost-team.html.twig index a461331..ad28fa3 100644 --- a/src/Blog/templates/page/blog-resource/php-development/welcome-to-the-10th-zend-certified-engineer-in-dotboost-team.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/welcome-to-the-10th-zend-certified-engineer-in-dotboost-team.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/welcome-to-the-10th-zend-certified-engineer-in-dotboost-team.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Welcome to the 10th Zend Certified Engineer in Dotboost Team{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Today is a major milestone for our Dotboost Technologies Inc. Company. We are announcing the 10th member of the team passed the Zend Certified Engineer exam. Zend Yellow Pages @@ -47,11 +26,4 @@ Beginning 2014, a Zend Certification will became mandatory for every developer i
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-development/zend-server-5-5-quick-setup-on-windows.html.twig b/src/Blog/templates/page/blog-resource/php-development/zend-server-5-5-quick-setup-on-windows.html.twig index 2d99264..2234d14 100644 --- a/src/Blog/templates/page/blog-resource/php-development/zend-server-5-5-quick-setup-on-windows.html.twig +++ b/src/Blog/templates/page/blog-resource/php-development/zend-server-5-5-quick-setup-on-windows.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-development/zend-server-5-5-quick-setup-on-windows.jsonld.twig') }} {% endblock %} - -{% block title %}Zend Server 5.5 Quick Setup on Windows{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Development', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} In order to make  usable a fresh installation of Zend Server 5.5.0 on Windows 7, and be ready for development , few quick steps are required: @@ -76,11 +55,4 @@ In order to make  usable a fresh installation of Zend Server 5.5.0 on Windows 7
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-troubleshooting/fix-installing-pear-packages-with-php-7-2.html.twig b/src/Blog/templates/page/blog-resource/php-troubleshooting/fix-installing-pear-packages-with-php-7-2.html.twig index c3e8cef..98c09e1 100644 --- a/src/Blog/templates/page/blog-resource/php-troubleshooting/fix-installing-pear-packages-with-php-7-2.html.twig +++ b/src/Blog/templates/page/blog-resource/php-troubleshooting/fix-installing-pear-packages-with-php-7-2.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-troubleshooting/fix-installing-pear-packages-with-php-7-2.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}[FIX] Installing PEAR packages with PHP 7.2{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Troubleshooting', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} This article will cover the solution to the PEAR "Cannot use result of built-in function in write context" issue.

    The Issue

    If installing a pear package (for instance PHP Code Sniffer), when running: @@ -89,11 +68,4 @@ And to install the code sniffer run:
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/php-troubleshooting/where-is-the-intl-php-extension-problem-solved.html.twig b/src/Blog/templates/page/blog-resource/php-troubleshooting/where-is-the-intl-php-extension-problem-solved.html.twig index 7d21e2b..7dfa484 100644 --- a/src/Blog/templates/page/blog-resource/php-troubleshooting/where-is-the-intl-php-extension-problem-solved.html.twig +++ b/src/Blog/templates/page/blog-resource/php-troubleshooting/where-is-the-intl-php-extension-problem-solved.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/php-troubleshooting/where-is-the-intl-php-extension-problem-solved.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Where is the intl PHP extension? Problem solved!{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHP Troubleshooting', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Problem

    PHP packages/frameworks/libraries/scripts we work with might require different PHP extensions. In this case the Intl extension is needed to work with using Internationalization Functions. @@ -155,11 +134,4 @@ Edit: changed php7.0 occurrences with php7.x
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/phpstorm/code-quality-how-to-setup-phpcs-in-phpstorm.html.twig b/src/Blog/templates/page/blog-resource/phpstorm/code-quality-how-to-setup-phpcs-in-phpstorm.html.twig index d8ea6d9..f6b3297 100644 --- a/src/Blog/templates/page/blog-resource/phpstorm/code-quality-how-to-setup-phpcs-in-phpstorm.html.twig +++ b/src/Blog/templates/page/blog-resource/phpstorm/code-quality-how-to-setup-phpcs-in-phpstorm.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/phpstorm/code-quality-how-to-setup-phpcs-in-phpstorm.jsonld.twig') }} {% endblock %} - -{% block title %}Code Quality: How to setup phpcs in PHPStorm{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'PHPStorm', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    PHP_CodeSniffer or phpcs is a tool that helps developers maintain a specific standard in the way they write code. In order to be able to provide relevant information, phpcs needs to be configured correctly in PHPStorm (see image).

    @@ -129,11 +108,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/zend-framework/scienta-zf-debug-bar-a-very-helpfull-zf-debug-tool.html.twig b/src/Blog/templates/page/blog-resource/zend-framework/scienta-zf-debug-bar-a-very-helpfull-zf-debug-tool.html.twig index f28b5dc..296d064 100644 --- a/src/Blog/templates/page/blog-resource/zend-framework/scienta-zf-debug-bar-a-very-helpfull-zf-debug-tool.html.twig +++ b/src/Blog/templates/page/blog-resource/zend-framework/scienta-zf-debug-bar-a-very-helpfull-zf-debug-tool.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/zend-framework/scienta-zf-debug-bar-a-very-helpfull-zf-debug-tool.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Scienta ZF Debug Bar: A very helpfull ZF debug tool{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Zend Framework', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Just found today a very interesting and helpful debug tool: Scienta @@ -44,11 +23,4 @@ We at Dotkernel used some very basic debug bar:  queries, time spent , memory u
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/zend-framework/sunsetting-pear-channel-for-zend-framework-1.html.twig b/src/Blog/templates/page/blog-resource/zend-framework/sunsetting-pear-channel-for-zend-framework-1.html.twig index f282461..4b2955b 100644 --- a/src/Blog/templates/page/blog-resource/zend-framework/sunsetting-pear-channel-for-zend-framework-1.html.twig +++ b/src/Blog/templates/page/blog-resource/zend-framework/sunsetting-pear-channel-for-zend-framework-1.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/zend-framework/sunsetting-pear-channel-for-zend-framework-1.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Sunsetting PEAR Channel for Zend Framework 1{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Zend Framework', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %}

    Sunsetting PEAR Channel for Zend Framework 1

    The unofficial PEAR channel for Zend Framework 1 was created in 2016 , at the time when PEAR was still used a lot.

    @@ -62,11 +41,4 @@
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/zend-framework/wurfl-php-api-libraries-gpl-versions.html.twig b/src/Blog/templates/page/blog-resource/zend-framework/wurfl-php-api-libraries-gpl-versions.html.twig index daedc59..1577296 100644 --- a/src/Blog/templates/page/blog-resource/zend-framework/wurfl-php-api-libraries-gpl-versions.html.twig +++ b/src/Blog/templates/page/blog-resource/zend-framework/wurfl-php-api-libraries-gpl-versions.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/zend-framework/wurfl-php-api-libraries-gpl-versions.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}WURFL PHP API libraries , GPL versions{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Zend Framework', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} GPL versions of WURFL PHP API libraries are ready to be downloaded from here . Version 1.1 is the one integrated in Zend Framework Zend_Htpp_UserAgent component. @@ -48,11 +27,4 @@ Version 1.2.1 is the latest released under GPL license.
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-1-12-4-released-with-security-fixes.html.twig b/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-1-12-4-released-with-security-fixes.html.twig index 4d590f2..bdb7e67 100644 --- a/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-1-12-4-released-with-security-fixes.html.twig +++ b/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-1-12-4-released-with-security-fixes.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/zend-framework/zend-framework-1-12-4-released-with-security-fixes.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Zend Framework 1.12.4 Released with Security Fixes{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Zend Framework', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} Matthew Weier O'Phinney just announced the release of ZF 1.12.4, 2.1.6, and 2.2.6 m with Security Updates For more information, please read the official release announcement: @@ -61,11 +40,4 @@ Zend Framework 1.12.5 was released, in order to fix a backward compatibility iss
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-1-7-0-released.html.twig b/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-1-7-0-released.html.twig index ace1790..77e7cf8 100644 --- a/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-1-7-0-released.html.twig +++ b/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-1-7-0-released.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/zend-framework/zend-framework-1-7-0-released.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Zend Framework 1.7.0 Released{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Zend Framework', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} At first glance , the biggest news is AMF support: Adobe's Action Message Format protocol to your PHP 5 application @@ -44,11 +23,4 @@ At first glance , the biggest news is AMF support:
    -
    - - {{ include('@partial/post-nav.html.twig') }} - - - - {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-1-end-of-life.html.twig b/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-1-end-of-life.html.twig index 2e774ef..69b1e1a 100644 --- a/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-1-end-of-life.html.twig +++ b/src/Blog/templates/page/blog-resource/zend-framework/zend-framework-1-end-of-life.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/zend-framework/zend-framework-1-end-of-life.jsonld.twig') }} {% endblock %} +{% extends '@layout/blog-post.html.twig' %} -{% block title %}Zend Framework 1 End-of-Life{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Zend Framework', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} - -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} EOL ( End-of-Life)  term was just announced. Only up until Sept. 28,2016 , Zend Framework 1 will receive security updates. @@ -33,11 +12,4 @@ Only up until Sept. 28,2016 , Zend Framework 1 will receive security updates.   Read the official announcement . -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %} diff --git a/src/Blog/templates/page/blog-resource/zend-framework/zend-mail-and-zend-http-security-fixes-in-zend-framework-1-12-12.html.twig b/src/Blog/templates/page/blog-resource/zend-framework/zend-mail-and-zend-http-security-fixes-in-zend-framework-1-12-12.html.twig index d2ebce0..53ee89a 100644 --- a/src/Blog/templates/page/blog-resource/zend-framework/zend-mail-and-zend-http-security-fixes-in-zend-framework-1-12-12.html.twig +++ b/src/Blog/templates/page/blog-resource/zend-framework/zend-mail-and-zend-http-security-fixes-in-zend-framework-1-12-12.html.twig @@ -1,27 +1,6 @@ -{% extends '@layout/default.html.twig' %} -{% block json_ld %} {{ include('@jsonld/zend-framework/zend-mail-and-zend-http-security-fixes-in-zend-framework-1-12-12.jsonld.twig') }} {% endblock %} - -{% block title %}Zend_Mail and Zend_Http Security Fixes in Zend Framework 1.12.12{% endblock %} - -{% block page_title %} - {{ include('@partial/title-section.html.twig', { - back_href: url('page::blog'), - back_label: 'Back to Blog', - badge: 'Zend Framework', - article: article, - }) }} -{% endblock %} - -{% block content %} -
    -
    - - {{ include('@partial/left-menu.html.twig') }} +{% extends '@layout/blog-post.html.twig' %} -
    -
    - {{ include('@partial/obsolete-warning.html.twig', {article: article}) }} - {{ include('@partial/markdown-actions.html.twig', {article: article}) }} +{% block body %} The release of ZF 1.12.12 was just announced,  with Security Updates especially on Zend_Mail and Zend_Http components. @@ -46,11 +25,4 @@ If you cannot, you can download the patch separately and apply it to your ZF ins Zend Framework 1.12.13 was released, in order to fix a regression issue introduced in 1.12.12 release. Release Announcement -
    - - {{ include('@partial/post-nav.html.twig') }} -
    - -
    -
    {% endblock %}